diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-06-14 18:28:31 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-06-14 18:28:31 +0100 |
commit | 092129b5216cb55de385ee6138a29c537142596c (patch) | |
tree | b7eafd1cb29323c296fcaf5304c00fb10ee6da7e /src/libserver | |
parent | 6209436b4b4a31e3a567dbd2b58b9352aaf4967b (diff) | |
download | rspamd-092129b5216cb55de385ee6138a29c537142596c.tar.gz rspamd-092129b5216cb55de385ee6138a29c537142596c.zip |
[Project] Various fixes
Diffstat (limited to 'src/libserver')
-rw-r--r-- | src/libserver/cfg_utils.c | 11 | ||||
-rw-r--r-- | src/libserver/protocol.c | 4 | ||||
-rw-r--r-- | src/libserver/rspamd_symcache.c | 72 |
3 files changed, 55 insertions, 32 deletions
diff --git a/src/libserver/cfg_utils.c b/src/libserver/cfg_utils.c index 0c47ec22e..0f38cc389 100644 --- a/src/libserver/cfg_utils.c +++ b/src/libserver/cfg_utils.c @@ -246,6 +246,7 @@ void rspamd_config_free (struct rspamd_config *cfg) { struct rspamd_config_post_load_script *sc, *sctmp; + struct rspamd_config_settings_elt *set, *stmp; struct rspamd_worker_log_pipe *lp, *ltmp; DL_FOREACH_SAFE (cfg->finish_callbacks, sc, sctmp) { @@ -258,6 +259,10 @@ rspamd_config_free (struct rspamd_config *cfg) g_free (sc); } + DL_FOREACH_SAFE (cfg->setting_ids, set, stmp) { + REF_RELEASE (set); + } + rspamd_map_remove_all (cfg); rspamd_mempool_destructors_enforce (cfg->cfg_pool); @@ -2352,7 +2357,7 @@ rspamd_config_name_to_id (const gchar *name, gsize namelen) guint64 h; h = rspamd_cryptobox_fast_hash_specific (RSPAMD_CRYPTOBOX_XXHASH64, - name, strlen (name), 0x0); + name, namelen, 0x0); /* Take the lower part of hash as LE number */ return ((guint32)GUINT64_TO_LE (h)); } @@ -2416,7 +2421,7 @@ rspamd_config_register_settings_id (struct rspamd_config *cfg, } REF_INIT_RETAIN (nelt, rspamd_config_settings_elt_dtor); - msg_warn_config ("replace settings id %d (%s)", id, name); + msg_warn_config ("replace settings id %ud (%s)", id, name); rspamd_symcache_process_settings_elt (cfg->cache, elt); DL_APPEND (cfg->setting_ids, nelt); @@ -2442,7 +2447,7 @@ rspamd_config_register_settings_id (struct rspamd_config *cfg, elt->symbols_disabled = ucl_object_ref (symbols_disabled); } - msg_info_config ("register new settings id %d (%s)", id, name); + msg_info_config ("register new settings id %ud (%s)", id, name); REF_INIT_RETAIN (elt, rspamd_config_settings_elt_dtor); rspamd_symcache_process_settings_elt (cfg->cache, elt); DL_APPEND (cfg->setting_ids, elt); diff --git a/src/libserver/protocol.c b/src/libserver/protocol.c index 1ee5a2992..7df5b27c5 100644 --- a/src/libserver/protocol.c +++ b/src/libserver/protocol.c @@ -491,6 +491,10 @@ rspamd_protocol_handle_headers (struct rspamd_task *task, msg_warn_protocol ("unknown settings id: %V", hv); } + else { + msg_debug_protocol ("applied settings id %V -> %ud", hv, + task->settings_elt->id); + } } break; case 'u': diff --git a/src/libserver/rspamd_symcache.c b/src/libserver/rspamd_symcache.c index 1ae279e73..25707b447 100644 --- a/src/libserver/rspamd_symcache.c +++ b/src/libserver/rspamd_symcache.c @@ -1442,7 +1442,7 @@ rspamd_symcache_is_item_allowed (struct rspamd_task *task, rspamd_symcache_check_id_list (&item->forbidden_ids, id)) { msg_debug_cache_task ("deny execution of %s as it is forbidden for " - "settings id %d", + "settings id %ud", item->symbol, id); return FALSE; @@ -1453,7 +1453,7 @@ rspamd_symcache_is_item_allowed (struct rspamd_task *task, !rspamd_symcache_check_id_list (&item->allowed_ids, id)) { msg_debug_cache_task ("deny execution of %s as it is not listed " - "as allowed for settings id %d", + "as allowed for settings id %ud", item->symbol, id); return FALSE; @@ -1461,7 +1461,7 @@ rspamd_symcache_is_item_allowed (struct rspamd_task *task, } else { msg_debug_cache_task ("allow execution of %s for " - "settings id %d as it can be only disabled explicitly", + "settings id %ud as it can be only disabled explicitly", item->symbol, id); } @@ -3217,24 +3217,31 @@ rspamd_symcache_process_settings_elt (struct rspamd_symcache *cache, iter = NULL; while ((cur = ucl_object_iterate (elt->symbols_disabled, &iter, true)) != NULL) { - item = rspamd_symcache_find_filter (cache, - ucl_object_tostring (cur), false); - - if (item->is_virtual) { - /* - * Virtual symbols are special: - * we ignore them in symcache but prevent them from being - * inserted. - */ - msg_debug_cache ("skip virtual symbol %s for settings id %d (%s)", - ucl_object_tostring (cur), id, elt->name); + const gchar *sym = ucl_object_key (cur); + item = rspamd_symcache_find_filter (cache, sym, false); + + if (item) { + if (item->is_virtual) { + /* + * Virtual symbols are special: + * we ignore them in symcache but prevent them from being + * inserted. + */ + msg_debug_cache ("skip virtual symbol %s for settings id %ud (%s)", + sym, id, elt->name); + } + else { + /* Normal symbol, disable it */ + rspamd_symcache_add_id_to_list (cache->static_pool, + &item->forbidden_ids, id); + msg_debug_cache ("deny symbol %s for settings %ud (%s)", + sym, id, elt->name); + } } else { - /* Normal symbol, disable it */ - rspamd_symcache_add_id_to_list (cache->static_pool, - &item->forbidden_ids, id); - msg_debug_cache ("deny symbol %s for settings %d (%s)", - ucl_object_tostring (cur), id, elt->name); + msg_warn_cache ("cannot find a symbol to disable %s " + "when processing settings %ud (%s)", + sym, id, elt->name); } } } @@ -3244,20 +3251,27 @@ rspamd_symcache_process_settings_elt (struct rspamd_symcache *cache, while ((cur = ucl_object_iterate (elt->symbols_enabled, &iter, true)) != NULL) { /* Here, we resolve parent and explicitly allow it */ - item = rspamd_symcache_find_filter (cache, - ucl_object_tostring (cur), true); + const gchar *sym = ucl_object_key (cur); + item = rspamd_symcache_find_filter (cache, sym, true); - if (elt->symbols_disabled && + if (item) { + if (elt->symbols_disabled && ucl_object_lookup (elt->symbols_disabled, item->symbol)) { - msg_err_cache ("conflict in %s: cannot enable disabled symbol %s, " - "wanted to enable symbol %s", - elt->name, item->symbol, ucl_object_tostring (cur)); + msg_err_cache ("conflict in %s: cannot enable disabled symbol %s, " + "wanted to enable symbol %s", + elt->name, item->symbol, sym); + } + else { + rspamd_symcache_add_id_to_list (cache->static_pool, + &item->allowed_ids, id); + msg_debug_cache ("allow execution of symbol %s for settings %ud (%s)", + sym, id, elt->name); + } } else { - rspamd_symcache_add_id_to_list (cache->static_pool, - &item->allowed_ids, id); - msg_debug_cache ("allow execution of symbol %s for settings %d (%s)", - ucl_object_tostring (cur), id, elt->name); + msg_warn_cache ("cannot find a symbol to enable %s " + "when processing settings %ud (%s)", + sym, id, elt->name); } } } |