diff options
-rw-r--r-- | src/libserver/cfg_file.h | 1 | ||||
-rw-r--r-- | src/libserver/cfg_rcl.c | 6 | ||||
-rw-r--r-- | src/libserver/protocol.c | 5 |
3 files changed, 12 insertions, 0 deletions
diff --git a/src/libserver/cfg_file.h b/src/libserver/cfg_file.h index 9573b776a..cffe997e4 100644 --- a/src/libserver/cfg_file.h +++ b/src/libserver/cfg_file.h @@ -368,6 +368,7 @@ struct rspamd_config { gboolean disable_pcre_jit; /**< Disable pcre JIT */ gboolean own_lua_state; /**< True if we have created lua_state internally */ gboolean soft_reject_on_timeout; /**< If true emit soft reject on task timeout (if not reject) */ + gboolean public_groups_only; /**< Output merely public groups everywhere */ gsize max_cores_size; /**< maximum size occupied by rspamd core files */ gsize max_cores_count; /**< maximum number of core files */ diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c index d224b4029..2bdb6adc6 100644 --- a/src/libserver/cfg_rcl.c +++ b/src/libserver/cfg_rcl.c @@ -1961,6 +1961,12 @@ rspamd_rcl_config_init (struct rspamd_config *cfg, GHashTable *skip_sections) 0, "Always check all filters"); rspamd_rcl_add_default_handler (sub, + "public_groups_only", + rspamd_rcl_parse_struct_boolean, + G_STRUCT_OFFSET (struct rspamd_config, public_groups_only), + 0, + "Output merely public groups everywhere"); + rspamd_rcl_add_default_handler (sub, "enable_experimental", rspamd_rcl_parse_struct_boolean, G_STRUCT_OFFSET (struct rspamd_config, enable_experimental), diff --git a/src/libserver/protocol.c b/src/libserver/protocol.c index f09784c48..469b834dc 100644 --- a/src/libserver/protocol.c +++ b/src/libserver/protocol.c @@ -1248,8 +1248,13 @@ rspamd_scan_result_ucl (struct rspamd_task *task, gdouble gr_score; obj = ucl_object_typed_new (UCL_OBJECT); + ucl_object_reserve (obj, kh_size (mres->sym_groups)); kh_foreach (mres->sym_groups, gr, gr_score,{ + if (task->cfg->public_groups_only && + !(gr->flags & RSPAMD_SYMBOL_GROUP_PUBLIC)) { + continue; + } sobj = rspamd_metric_group_ucl (task, gr, gr_score); ucl_object_insert_key (obj, sobj, gr->name, 0, false); }); |