]> source.dussan.org Git - rspamd.git/commitdiff
Fix metrics loading.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 6 Aug 2015 12:22:50 +0000 (13:22 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 6 Aug 2015 12:22:50 +0000 (13:22 +0100)
src/libserver/cfg_file.h
src/libserver/cfg_rcl.c
src/libserver/cfg_utils.c
src/lua/lua_cfg_file.c

index da401834a1cc2ce9a6bd19d6d78506bebe326386..94db0de1b57292fd8653f24230c27dde310e7950 100644 (file)
@@ -353,7 +353,7 @@ struct rspamd_worker_conf * rspamd_config_new_worker (struct rspamd_config *cfg,
  * Return a new metric structure, setting default and non-conflicting attributes
  */
 struct metric * rspamd_config_new_metric (struct rspamd_config *cfg,
-       struct metric *c);
+       struct metric *c, const gchar *name);
 /*
  * Return a new statfile structure, setting default and non-conflicting attributes
  */
index beb74050a2e292d8e7a6f56c6a8cc589970962cf..a14a4314686410042da73ed20e40d771d603c4aa 100644 (file)
@@ -320,8 +320,17 @@ rspamd_rcl_insert_symbol (struct rspamd_config *cfg, struct metric *metric,
                return FALSE;
        }
 
-       return rspamd_config_add_metric_symbol (cfg, metric->name, sym_name,
-                       symbol_score, description, group, one_shot, TRUE);
+       if (!rspamd_config_add_metric_symbol (cfg, metric->name, sym_name,
+                       symbol_score, description, group, one_shot, TRUE)) {
+               g_set_error (err,
+                       CFG_RCL_ERROR,
+                       EINVAL,
+                       "cannot add symbol: %s to metric %s",
+                       sym_name, metric->name);
+               return FALSE;
+       }
+
+       return TRUE;
 }
 
 static gboolean
@@ -402,8 +411,7 @@ rspamd_rcl_metric_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
 
        metric = g_hash_table_lookup (cfg->metrics, metric_name);
        if (metric == NULL) {
-               metric = rspamd_config_new_metric (cfg, metric);
-               metric->name = metric_name;
+               metric = rspamd_config_new_metric (cfg, metric, metric_name);
        }
        else {
                new = FALSE;
@@ -524,15 +532,6 @@ rspamd_rcl_metric_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
                return FALSE;
        }
 
-       /* Insert the resulting metric */
-       if (new) {
-               g_hash_table_insert (cfg->metrics, (void *)metric->name, metric);
-               cfg->metrics_list = g_list_prepend (cfg->metrics_list, metric);
-               if (strcmp (metric->name, DEFAULT_METRIC) == 0) {
-                       cfg->default_metric = metric;
-               }
-       }
-
        return TRUE;
 }
 
index 65e6ea9a7ae480a8b8c970175f020ce98d7b370b..94fe962bc545ee37e8f89daac2a16ee53b493817 100644 (file)
@@ -378,15 +378,10 @@ rspamd_config_post_load (struct rspamd_config *cfg)
 
        if ((def_metric =
                g_hash_table_lookup (cfg->metrics, DEFAULT_METRIC)) == NULL) {
-               def_metric = rspamd_config_new_metric (cfg, NULL);
-               def_metric->name = DEFAULT_METRIC;
+               def_metric = rspamd_config_new_metric (cfg, NULL, DEFAULT_METRIC);
                def_metric->actions[METRIC_ACTION_REJECT].score = DEFAULT_SCORE;
-               cfg->metrics_list = g_list_prepend (cfg->metrics_list, def_metric);
-               g_hash_table_insert (cfg->metrics, DEFAULT_METRIC, def_metric);
        }
 
-       cfg->default_metric = def_metric;
-
        if (cfg->tld_file == NULL) {
                /* Try to guess tld file */
                GString *fpath = g_string_new (NULL);
@@ -546,9 +541,11 @@ rspamd_config_new_statfile (struct rspamd_config *cfg,
 }
 
 struct metric *
-rspamd_config_new_metric (struct rspamd_config *cfg, struct metric *c)
+rspamd_config_new_metric (struct rspamd_config *cfg, struct metric *c,
+               const gchar *name)
 {
        int i;
+
        if (c == NULL) {
                c = rspamd_mempool_alloc0 (cfg->cfg_pool, sizeof (struct metric));
                c->grow_factor = 1.0;
@@ -558,12 +555,20 @@ rspamd_config_new_metric (struct rspamd_config *cfg, struct metric *c)
                        c->actions[i].score = -1.0;
                }
                c->subject = SPAM_SUBJECT;
+               c->name = rspamd_mempool_strdup (cfg->cfg_pool, name);
                rspamd_mempool_add_destructor (cfg->cfg_pool,
                        (rspamd_mempool_destruct_t) g_hash_table_destroy,
                        c->symbols);
                rspamd_mempool_add_destructor (cfg->cfg_pool,
                        (rspamd_mempool_destruct_t) g_hash_table_destroy,
                        c->descriptions);
+
+               g_hash_table_insert (cfg->metrics, (void *)c->name, c);
+               cfg->metrics_list = g_list_prepend (cfg->metrics_list, c);
+
+               if (strcmp (c->name, DEFAULT_METRIC) == 0) {
+                       cfg->default_metric = c;
+               }
        }
 
        return c;
index 6e49d9512e2baaf8bd63fcb495bf8a5038e43279..563fbb77bfe31eb00b675ad4a0f629ae48310776 100644 (file)
@@ -48,8 +48,7 @@ lua_process_metric (lua_State *L, const gchar *name, struct rspamd_config *cfg)
 
        /* Get module opt structure */
        if ((metric = g_hash_table_lookup (cfg->metrics, name)) == NULL) {
-               metric = rspamd_config_new_metric (cfg, metric);
-               metric->name = rspamd_mempool_strdup (cfg->cfg_pool, name);
+               metric = rspamd_config_new_metric (cfg, metric, name);
        }
 
        /* Now iterate throught module table */