aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-10-26 09:16:36 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-10-26 09:16:36 +0000
commit5ec20ec55417f43853563c17ab34d822a52b5ddd (patch)
tree7a23625f92bd5e41331b1c92d6a91dc727368ff2
parent09d66d59d9d12eb8d6ca1cb05bbdf99d5a6ea253 (diff)
downloadrspamd-5ec20ec55417f43853563c17ab34d822a52b5ddd.tar.gz
rspamd-5ec20ec55417f43853563c17ab34d822a52b5ddd.zip
Allow explicit loading of specific modules
-rw-r--r--src/libserver/cfg_file.h1
-rw-r--r--src/libserver/cfg_rcl.c5
-rw-r--r--src/libserver/cfg_utils.c8
3 files changed, 14 insertions, 0 deletions
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;