From: Vsevolod Stakhov Date: Tue, 13 Feb 2018 15:54:38 +0000 (+0000) Subject: [Fix] Fix groups override when defining symbols X-Git-Tag: 1.7.0~196 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=457ddc0e2946a7aede12a60a8eb80cd1e8546668;p=thirdparty%2Frspamd.git [Fix] Fix groups override when defining symbols --- diff --git a/src/libserver/cfg_file.h b/src/libserver/cfg_file.h index cb433b6d57..2a6c29955c 100644 --- a/src/libserver/cfg_file.h +++ b/src/libserver/cfg_file.h @@ -103,6 +103,7 @@ struct rspamd_symbols_group { #define RSPAMD_SYMBOL_FLAG_IGNORE (1 << 1) #define RSPAMD_SYMBOL_FLAG_ONEPARAM (1 << 2) +#define RSPAMD_SYMBOL_FLAG_UNGROUPPED (1 << 3) /** * Symbol definition diff --git a/src/libserver/cfg_utils.c b/src/libserver/cfg_utils.c index d3e27755e2..36af1926a2 100644 --- a/src/libserver/cfg_utils.c +++ b/src/libserver/cfg_utils.c @@ -1449,6 +1449,7 @@ rspamd_config_new_symbol (struct rspamd_config *cfg, const gchar *symbol, /* Search for symbol group */ if (group == NULL) { group = "ungrouped"; + sym_def->flags |= RSPAMD_SYMBOL_FLAG_UNGROUPPED; } sym_group = g_hash_table_lookup (cfg->groups, group); @@ -1471,10 +1472,25 @@ rspamd_config_add_symbol (struct rspamd_config *cfg, struct rspamd_symbol *sym_def; g_assert (cfg != NULL); g_assert (symbol != NULL); + struct rspamd_symbols_group *sym_group; sym_def = g_hash_table_lookup (cfg->symbols, symbol); if (sym_def != NULL) { + if (sym_def->flags & RSPAMD_SYMBOL_FLAG_UNGROUPPED && group != NULL) { + /* Non-empty group has a priority over non-groupped one */ + sym_group = g_hash_table_lookup (cfg->groups, group); + + if (sym_group == NULL) { + /* Create new group */ + sym_group = rspamd_config_new_group (cfg, group); + } + + sym_def->gr = sym_group; + g_hash_table_insert (sym_group->symbols, sym_def->name, sym_def); + sym_def->flags &= ~(RSPAMD_SYMBOL_FLAG_UNGROUPPED); + } + if (sym_def->priority > priority) { msg_debug_config ("symbol %s has been already registered with " "priority %ud, do not override (new priority: %ud)", @@ -1511,6 +1527,24 @@ rspamd_config_add_symbol (struct rspamd_config *cfg, sym_def->priority = priority; + /* We also check group information in this case */ + if (group != NULL && sym_def->gr != NULL && + strcmp (group, sym_def->gr->name) != 0) { + msg_debug_config ("move symbol %s from group %s to %s", + sym_def->gr->name, group); + + g_hash_table_remove (sym_def->gr->symbols, sym_def->name); + sym_group = g_hash_table_lookup (cfg->groups, group); + + if (sym_group == NULL) { + /* Create new group */ + sym_group = rspamd_config_new_group (cfg, group); + } + + sym_def->gr = sym_group; + g_hash_table_insert (sym_group->symbols, sym_def->name, sym_def); + } + return TRUE; } } diff --git a/src/lua/lua_config.c b/src/lua/lua_config.c index cd33b219eb..ab99d2e70a 100644 --- a/src/lua/lua_config.c +++ b/src/lua/lua_config.c @@ -1526,7 +1526,8 @@ lua_config_register_symbol (lua_State * L) } rspamd_config_add_symbol (cfg, name, - score, description, group, flags, (guint) priority, nshots); + score, description, group, flags, + (guint) priority, nshots); } } else { diff --git a/src/plugins/lua/ip_score.lua b/src/plugins/lua/ip_score.lua index 0e9d8920e9..118d7d8112 100644 --- a/src/plugins/lua/ip_score.lua +++ b/src/plugins/lua/ip_score.lua @@ -388,6 +388,8 @@ if redis_params then rspamd_config:register_symbol({ name = options['symbol'], callback = ip_score_check, + group = 'reputation', + score = '2.0' }) else rspamd_lua_utils.disable_module(N, "redis")