]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Add some sanity checks for actions and controller
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 25 Aug 2017 18:55:35 +0000 (19:55 +0100)
committerAndrew Lewis <nerf@judo.za.org>
Mon, 28 Aug 2017 11:06:35 +0000 (13:06 +0200)
src/libserver/cfg_utils.c

index 7bc8994b495dc2ec3affdfb3b1645155741d649b..346fb4d4a22fcacfe51709ee30bd8579dc4b1ac8 100644 (file)
@@ -768,6 +768,51 @@ rspamd_config_post_load (struct rspamd_config *cfg,
 
        /* Validate cache */
        if (opts & RSPAMD_CONFIG_INIT_VALIDATE) {
+               /* Check for actions sanity */
+               int i, prev_act = 0;
+               struct rspamd_metric *metric = cfg->default_metric;
+               gdouble prev_score = NAN;
+               gboolean seen_controller = FALSE;
+               GList *cur;
+               struct rspamd_worker_conf *wcf;
+
+               for (i = METRIC_ACTION_REJECT; i < METRIC_ACTION_MAX; i ++) {
+                       if (!isnan (prev_score) && !isnan (metric->actions[i].score)) {
+                               if (prev_score <= isnan (metric->actions[i].score)) {
+                                       msg_warn_config ("incorrect metrics scores: action %s"
+                                                       " has lower score: %.2f than action %s: %.2f",
+                                                       rspamd_action_to_str (prev_act), prev_score,
+                                                       rspamd_action_to_str (i), metric->actions[i].score);
+                                       ret = FALSE;
+                               }
+                       }
+
+                       if (!isnan (metric->actions[i].score)) {
+                               prev_score = metric->actions[i].score;
+                               prev_act = i;
+                       }
+               }
+
+               cur = cfg->workers;
+               while (cur) {
+                       wcf = cur->data;
+
+                       if (wcf->type == g_quark_from_static_string ("controller")) {
+                               seen_controller = TRUE;
+                               break;
+                       }
+
+                       cur = g_list_next (cur);
+               }
+
+               if (!seen_controller) {
+                       msg_warn_config ("controller worker is unconfigured: learning,"
+                                       " periodic scripts, maps watching and many other"
+                                       " Rspamd features will be broken");
+
+                       ret = FALSE;
+               }
+
                return rspamd_symbols_cache_validate (cfg->cache, cfg, FALSE) && ret;
        }