From 5ec20ec55417f43853563c17ab34d822a52b5ddd Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 26 Oct 2015 09:16:36 +0000 Subject: [PATCH] Allow explicit loading of specific modules --- src/libserver/cfg_file.h | 1 + src/libserver/cfg_rcl.c | 5 +++++ src/libserver/cfg_utils.c | 8 ++++++++ 3 files changed, 14 insertions(+) diff --git a/src/libserver/cfg_file.h b/src/libserver/cfg_file.h index 1fc5aee28..5f1abe1b0 100644 --- a/src/libserver/cfg_file.h +++ b/src/libserver/cfg_file.h @@ -216,6 +216,7 @@ struct rspamd_config { gboolean deliver_lmtp; /**< use LMTP instead of SMTP */ GList *script_modules; /**< linked list of script modules to load */ + GHashTable *explicit_modules; /**< modules that should be always loaded */ GList *filters; /**< linked list of all filters */ GList *workers; /**< linked list of all workers params */ diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c index 5cf7e31ce..b572fd59c 100644 --- a/src/libserver/cfg_rcl.c +++ b/src/libserver/cfg_rcl.c @@ -1304,6 +1304,11 @@ rspamd_rcl_config_init (void) rspamd_rcl_parse_struct_string, G_STRUCT_OFFSET (struct rspamd_config, control_socket_path), 0); + rspamd_rcl_add_default_handler (sub, + "explicit_modules", + rspamd_rcl_parse_struct_string_list, + G_STRUCT_OFFSET (struct rspamd_config, explicit_modules), + RSPAMD_CL_FLAG_STRING_LIST_HASH); /* New DNS configuration */ ssub = rspamd_rcl_add_section (&sub->subsections, "dns", NULL, NULL, diff --git a/src/libserver/cfg_utils.c b/src/libserver/cfg_utils.c index 3af15ab1d..1aae2c12d 100644 --- a/src/libserver/cfg_utils.c +++ b/src/libserver/cfg_utils.c @@ -167,6 +167,7 @@ rspamd_config_defaults (struct rspamd_config *cfg) cfg->cfg_params = g_hash_table_new (rspamd_str_hash, rspamd_str_equal); cfg->metrics_symbols = g_hash_table_new (rspamd_str_hash, rspamd_str_equal); cfg->debug_modules = g_hash_table_new (rspamd_str_hash, rspamd_str_equal); + cfg->explicit_modules = g_hash_table_new (rspamd_str_hash, rspamd_str_equal); cfg->map_timeout = DEFAULT_MAP_TIMEOUT; @@ -193,10 +194,12 @@ rspamd_config_free (struct rspamd_config *cfg) g_hash_table_destroy (cfg->metrics_symbols); g_hash_table_unref (cfg->classifiers_symbols); g_hash_table_unref (cfg->debug_modules); + g_hash_table_unref (cfg->explicit_modules); if (cfg->checksum) { g_free (cfg->checksum); } + g_list_free (cfg->classifiers); g_list_free (cfg->metrics_list); rspamd_mempool_delete (cfg->cfg_pool); @@ -1019,6 +1022,11 @@ rspamd_config_is_module_enabled (struct rspamd_config *cfg, is_c = TRUE; } + if (g_hash_table_lookup (cfg->explicit_modules, module_name) != NULL) { + /* Always load module */ + return TRUE; + } + if (is_c) { gboolean found = FALSE; -- 2.39.5