@@ -127,9 +127,10 @@ struct rspamd_symbols_group { | |||
enum rspamd_symbol_flags { | |||
RSPAMD_SYMBOL_FLAG_NORMAL = 0, | |||
RSPAMD_SYMBOL_FLAG_IGNORE = (1 << 1), | |||
RSPAMD_SYMBOL_FLAG_IGNORE_METRIC = (1 << 1), | |||
RSPAMD_SYMBOL_FLAG_ONEPARAM = (1 << 2), | |||
RSPAMD_SYMBOL_FLAG_UNGROUPPED = (1 << 3), | |||
RSPAMD_SYMBOL_FLAG_DISABLED = (1 << 4), | |||
}; | |||
/** |
@@ -520,7 +520,23 @@ rspamd_rcl_symbol_handler (rspamd_mempool_t *pool, const ucl_object_t *obj, | |||
} | |||
if (ucl_object_toboolean (elt)) { | |||
flags |= RSPAMD_SYMBOL_FLAG_IGNORE; | |||
flags |= RSPAMD_SYMBOL_FLAG_IGNORE_METRIC; | |||
} | |||
} | |||
if ((elt = ucl_object_lookup (obj, "enabled")) != NULL) { | |||
if (ucl_object_type (elt) != UCL_BOOLEAN) { | |||
g_set_error (err, | |||
CFG_RCL_ERROR, | |||
EINVAL, | |||
"enabled attribute is not boolean for symbol: '%s'", | |||
key); | |||
return FALSE; | |||
} | |||
if (ucl_object_toboolean (elt)) { | |||
flags |= RSPAMD_SYMBOL_FLAG_DISABLED; | |||
} | |||
} | |||
@@ -1495,7 +1495,8 @@ rspamd_symcache_validate (struct rspamd_symcache *cache, | |||
ignore_symbol = FALSE; | |||
sym_def = v; | |||
if (sym_def && (sym_def->flags & RSPAMD_SYMBOL_FLAG_IGNORE)) { | |||
if (sym_def && (sym_def->flags & | |||
(RSPAMD_SYMBOL_FLAG_IGNORE_METRIC|RSPAMD_SYMBOL_FLAG_DISABLED))) { | |||
ignore_symbol = TRUE; | |||
} | |||
@@ -1512,6 +1513,13 @@ rspamd_symcache_validate (struct rspamd_symcache *cache, | |||
} | |||
} | |||
} | |||
else if (sym_def->flags & RSPAMD_SYMBOL_FLAG_DISABLED) { | |||
item = g_hash_table_lookup (cache->items_by_symbol, k); | |||
if (item) { | |||
item->enabled = FALSE; | |||
} | |||
} | |||
} | |||
return ret; |
@@ -2318,7 +2318,7 @@ lua_config_set_metric_symbol (lua_State * L) | |||
nshots = 1; | |||
} | |||
if (strstr (flags_str, "ignore") != NULL) { | |||
flags |= RSPAMD_SYMBOL_FLAG_IGNORE; | |||
flags |= RSPAMD_SYMBOL_FLAG_IGNORE_METRIC; | |||
} | |||
if (strstr (flags_str, "one_param") != NULL) { | |||
flags |= RSPAMD_SYMBOL_FLAG_ONEPARAM; | |||
@@ -3376,7 +3376,7 @@ lua_metric_symbol_inserter (gpointer k, gpointer v, gpointer ud) | |||
lua_pushstring (L, "flags"); | |||
lua_createtable (L, 0, 3); | |||
if (s->flags & RSPAMD_SYMBOL_FLAG_IGNORE) { | |||
if (s->flags & RSPAMD_SYMBOL_FLAG_IGNORE_METRIC) { | |||
lua_pushstring (L, "ignore"); | |||
lua_pushboolean (L, true); | |||
lua_settable (L, -3); | |||
@@ -3391,6 +3391,11 @@ lua_metric_symbol_inserter (gpointer k, gpointer v, gpointer ud) | |||
lua_pushboolean (L, true); | |||
lua_settable (L, -3); | |||
} | |||
if (s->flags & RSPAMD_SYMBOL_FLAG_DISABLED) { | |||
lua_pushstring (L, "disabled"); | |||
lua_pushboolean (L, true); | |||
lua_settable (L, -3); | |||
} | |||
if (s->cache_item) { | |||
guint sflags = rspamd_symcache_get_symbol_flags (cbd->cfg->cache, sym); |
@@ -538,7 +538,7 @@ dkim_module_config (struct rspamd_config *cfg) | |||
0.0, | |||
"DKIM check callback", | |||
"policies", | |||
RSPAMD_SYMBOL_FLAG_IGNORE, | |||
RSPAMD_SYMBOL_FLAG_IGNORE_METRIC, | |||
1, | |||
1); | |||
rspamd_config_add_symbol_group (cfg, "DKIM_CHECK", "dkim"); | |||
@@ -585,7 +585,7 @@ dkim_module_config (struct rspamd_config *cfg) | |||
0.0, | |||
"DKIM trace symbol", | |||
"policies", | |||
RSPAMD_SYMBOL_FLAG_IGNORE, | |||
RSPAMD_SYMBOL_FLAG_IGNORE_METRIC, | |||
1, | |||
1); | |||
rspamd_config_add_symbol_group (cfg, "DKIM_TRACE", "dkim"); |
@@ -1060,7 +1060,7 @@ fuzzy_check_module_config (struct rspamd_config *cfg) | |||
0.0, | |||
"Fuzzy check callback", | |||
"fuzzy", | |||
RSPAMD_SYMBOL_FLAG_IGNORE, | |||
RSPAMD_SYMBOL_FLAG_IGNORE_METRIC, | |||
1, | |||
1); | |||
@@ -349,7 +349,7 @@ spf_module_config (struct rspamd_config *cfg) | |||
0.0, | |||
"SPF check callback", | |||
"policies", | |||
RSPAMD_SYMBOL_FLAG_IGNORE, | |||
RSPAMD_SYMBOL_FLAG_IGNORE_METRIC, | |||
1, | |||
1); | |||
rspamd_config_add_symbol_group (cfg, "SPF_CHECK", "spf"); |