]> source.dussan.org Git - rspamd.git/commitdiff
Allow explicit loading of specific modules
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 26 Oct 2015 09:16:36 +0000 (09:16 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 26 Oct 2015 09:16:36 +0000 (09:16 +0000)
src/libserver/cfg_file.h
src/libserver/cfg_rcl.c
src/libserver/cfg_utils.c

index 1fc5aee28c39771791a51c28c53073335443b374..5f1abe1b0aa81061bea986aa62cab520a04d9126 100644 (file)
@@ -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                                  */
index 5cf7e31ced0b15e9317b24bf001cb29629aa2780..b572fd59c0e866735962a5a2ee3c3f06e9736e55 100644 (file)
@@ -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,
index 3af15ab1daa52dd1910da5a87faed63cd74d3d29..1aae2c12d429658898cf03100cb500a7a63f6b5d 100644 (file)
@@ -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;