static gint lua_util_load_rspamd_config (lua_State *L) { struct rspamd_config *cfg, **pcfg; const gchar *cfg_name; cfg_name = luaL_checkstring (L, 1); if (cfg_name) { cfg = g_malloc0 (sizeof (struct rspamd_config)); rspamd_init_cfg (cfg, FALSE); cfg->cache = rspamd_symbols_cache_new (); if (rspamd_config_read (cfg, cfg_name, NULL, NULL, NULL)) { msg_err ("cannot load config from %s", cfg_name); lua_pushnil (L); } else { rspamd_config_post_load (cfg); rspamd_symbols_cache_init (cfg->cache, cfg); pcfg = lua_newuserdata (L, sizeof (struct rspamd_config *)); rspamd_lua_setclass (L, "rspamd{config}", -1); *pcfg = cfg; } } return 1; }
static gint lua_util_config_from_ucl (lua_State *L) { struct rspamd_config *cfg, **pcfg; struct rspamd_rcl_section *top; GError *err = NULL; ucl_object_t *obj; obj = ucl_object_lua_import (L, 1); if (obj) { cfg = g_malloc0 (sizeof (struct rspamd_config)); rspamd_init_cfg (cfg, FALSE); cfg->lua_state = L; cfg->rcl_obj = obj; cfg->cache = rspamd_symbols_cache_new (); top = rspamd_rcl_config_init (); if (!rspamd_rcl_parse (top, cfg, cfg->cfg_pool, cfg->rcl_obj, &err)) { msg_err ("rcl parse error: %s", err->message); ucl_object_unref (obj); lua_pushnil (L); } else { rspamd_config_post_load (cfg); rspamd_symbols_cache_init (cfg->cache, cfg); pcfg = lua_newuserdata (L, sizeof (struct rspamd_config *)); rspamd_lua_setclass (L, "rspamd{config}", -1); *pcfg = cfg; } } return 1; }
static void rspamadm_configdump (gint argc, gchar **argv) { GOptionContext *context; GError *error = NULL; const gchar *confdir; struct rspamd_config *cfg = rspamd_main->cfg; gboolean ret = FALSE; worker_t **pworker; GString *output; context = g_option_context_new ( "keypair - create encryption keys"); g_option_context_set_summary (context, "Summary:\n Rspamd administration utility version " RVERSION "\n Release id: " RID); g_option_context_add_main_entries (context, entries, NULL); if (!g_option_context_parse (context, &argc, &argv, &error)) { fprintf (stderr, "option parsing failed: %s\n", error->message); g_error_free (error); exit (1); } if (config == NULL) { if ((confdir = g_hash_table_lookup (ucl_vars, "CONFDIR")) == NULL) { confdir = RSPAMD_CONFDIR; } config = g_strdup_printf ("%s%c%s", confdir, G_DIR_SEPARATOR, "rspamd.conf"); } pworker = &workers[0]; while (*pworker) { /* Init string quarks */ (void) g_quark_from_static_string ((*pworker)->name); pworker++; } cfg->cache = rspamd_symbols_cache_new (cfg); cfg->compiled_modules = modules; cfg->compiled_workers = workers; cfg->cfg_name = config; if (!rspamd_config_read (cfg, cfg->cfg_name, NULL, config_logger, rspamd_main, ucl_vars)) { ret = FALSE; } else { /* Do post-load actions */ rspamd_config_post_load (cfg); ret = TRUE; } if (ret) { rspamd_symbols_cache_init (rspamd_main->cfg->cache); if (!rspamd_init_filters (rspamd_main->cfg, FALSE)) { ret = FALSE; } /* Insert classifiers symbols */ (void) rspamd_config_insert_classify_symbols (rspamd_main->cfg); if (!rspamd_symbols_cache_validate (rspamd_main->cfg->cache, rspamd_main->cfg, FALSE)) { ret = FALSE; } } if (ret) { /* Output configuration */ output = g_string_new (""); if (json) { rspamd_ucl_emit_gstring (cfg->rcl_obj, UCL_EMIT_JSON, output); } else if (compact) { rspamd_ucl_emit_gstring (cfg->rcl_obj, UCL_EMIT_JSON_COMPACT, output); } else { rspamd_ucl_emit_gstring (cfg->rcl_obj, UCL_EMIT_CONFIG, output); } rspamd_printf ("%v", output); g_string_free (output, TRUE); } if (!ret) { exit (EXIT_FAILURE); } }