summaryrefslogtreecommitdiffstats
path: root/src/libserver
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2014-08-17 15:57:51 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2014-08-17 15:57:51 +0100
commitbd4ce0b8093c0b49c841ffdf43e72570dc70ca33 (patch)
treeb583fc60cf9febf36ee74deaee02c6517e163787 /src/libserver
parent8632d14d4b43f2da3cfefdf76b211f4c3449a392 (diff)
downloadrspamd-bd4ce0b8093c0b49c841ffdf43e72570dc70ca33.tar.gz
rspamd-bd4ce0b8093c0b49c841ffdf43e72570dc70ca33.zip
Add configuration option `unknown_weight` for metrics.
If this option is specified, then all filters add symbols to this metric with the specified weight even if they are not specified in symbols list explicitly.
Diffstat (limited to 'src/libserver')
-rw-r--r--src/libserver/cfg_rcl.c11
-rw-r--r--src/libserver/symbols_cache.h3
2 files changed, 14 insertions, 0 deletions
diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c
index 1cfcf2560..d8f70de07 100644
--- a/src/libserver/cfg_rcl.c
+++ b/src/libserver/cfg_rcl.c
@@ -329,6 +329,7 @@ rspamd_rcl_metric_handler (struct rspamd_config *cfg, const ucl_object_t *obj,
gdouble action_score, grow_factor;
gint action_value;
gboolean new = TRUE, have_actions = FALSE;
+ gdouble unknown_weight;
ucl_object_iter_t it = NULL;
val = ucl_object_find_key (obj, "name");
@@ -463,10 +464,20 @@ rspamd_rcl_metric_handler (struct rspamd_config *cfg, const ucl_object_t *obj,
metric->subject = (gchar *)subject_name;
}
+ val = ucl_object_find_key (obj, "unknown_weight");
+ if (val && ucl_object_todouble_safe (val, &unknown_weight) &&
+ unknown_weight != 0.) {
+ metric->unknown_weight = unknown_weight;
+ metric->accept_unknown_symbols = TRUE;
+ }
+
/* 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;
diff --git a/src/libserver/symbols_cache.h b/src/libserver/symbols_cache.h
index e1fd3286f..36128460d 100644
--- a/src/libserver/symbols_cache.h
+++ b/src/libserver/symbols_cache.h
@@ -33,6 +33,8 @@ struct cache_item {
guint32 networks_number;
gboolean is_dynamic;
+ gboolean is_skipped;
+
/* Callback data */
symbol_func_t func;
gpointer user_data;
@@ -41,6 +43,7 @@ struct cache_item {
gboolean is_virtual;
gboolean is_callback;
+
/* Priority */
gint priority;
gdouble metric_weight;