summaryrefslogtreecommitdiffstats
path: root/src/libserver/composites.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2016-07-12 17:36:58 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2016-07-12 17:36:58 +0100
commit2785fadecc3d0a2a849ba17bc0ab14a48bee7e4c (patch)
treea056a26243c8c251b7fe8f864abe949e32dcaaf6 /src/libserver/composites.c
parent437727abc962967796b726814dcdf9d3c713a475 (diff)
downloadrspamd-2785fadecc3d0a2a849ba17bc0ab14a48bee7e4c.tar.gz
rspamd-2785fadecc3d0a2a849ba17bc0ab14a48bee7e4c.zip
[Feature] Allow to disable composite rules from settings
Diffstat (limited to 'src/libserver/composites.c')
-rw-r--r--src/libserver/composites.c30
1 files changed, 20 insertions, 10 deletions
diff --git a/src/libserver/composites.c b/src/libserver/composites.c
index 8e2df32f7..917d1d0c3 100644
--- a/src/libserver/composites.c
+++ b/src/libserver/composites.c
@@ -258,18 +258,28 @@ composites_foreach_callback (gpointer key, gpointer value, void *data)
cd->composite = comp;
- rc = rspamd_process_expression (comp->expr, RSPAMD_EXPRESSION_FLAG_NOOPT, cd);
+ if (!isset (cd->checked, cd->composite->id * 2)) {
+ if (rspamd_symbols_cache_is_checked (cd->task, cd->task->cfg->cache,
+ key)) {
+ setbit (cd->checked, comp->id * 2);
+ clrbit (cd->checked, comp->id * 2 + 1);
+ }
+ else {
+ rc = rspamd_process_expression (comp->expr,
+ RSPAMD_EXPRESSION_FLAG_NOOPT, cd);
- /* Checked bit */
- setbit (cd->checked, comp->id * 2);
+ /* Checked bit */
+ setbit (cd->checked, comp->id * 2);
- /* Result bit */
- if (rc) {
- setbit (cd->checked, comp->id * 2 + 1);
- rspamd_task_insert_result_single (cd->task, key, 1.0, NULL);
- }
- else {
- clrbit (cd->checked, comp->id * 2 + 1);
+ /* Result bit */
+ if (rc) {
+ setbit (cd->checked, comp->id * 2 + 1);
+ rspamd_task_insert_result_single (cd->task, key, 1.0, NULL);
+ }
+ else {
+ clrbit (cd->checked, comp->id * 2 + 1);
+ }
+ }
}
}