]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Fix disabling of squeezed symbols
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 23 Mar 2018 13:03:33 +0000 (13:03 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 23 Mar 2018 13:03:33 +0000 (13:03 +0000)
Issue: #2106

lualib/lua_squeeze_rules.lua
src/libserver/symbols_cache.c

index b2560ddba3a99e5f229f3a1a2d9bfe3852d1bca9..ef098a2d3597489a71f0c3628269c07b59e05209 100644 (file)
@@ -31,7 +31,6 @@ local function gen_lua_squeeze_function(order)
   return function(task)
     local symbols_disabled = task:cache_get('squeezed_disable')
     for _,data in ipairs(squeezed_rules[order]) do
-
       if not symbols_disabled or not symbols_disabled[data[2]] then
         local ret = {data[1](task)}
 
@@ -90,6 +89,7 @@ exports.squeeze_rule = function(s, func)
   if not squeeze_function_ids[1] then
     squeeze_function_ids[1] = rspamd_config:register_symbol{
       type = 'callback',
+      flags = 'squeezed',
       callback = gen_lua_squeeze_function(1),
       name = squeeze_sym,
       description = 'Meta rule for Lua rules that can be squeezed',
@@ -137,6 +137,7 @@ local function register_topology_symbol(order)
 
   squeeze_function_ids[order] = rspamd_config:register_symbol{
     type = 'callback',
+    flags = 'squeezed',
     callback = gen_lua_squeeze_function(order),
     name = ord_sym,
     description = 'Meta rule for Lua rules that can be squeezed, order ' .. tostring(order),
index d86a2b6f42b2996d63d9c11018ad0fd0619f75d9..dd29f4db1d586d17124081f49259b081b4081f1b 100644 (file)
@@ -1271,7 +1271,6 @@ rspamd_symbols_cache_check_symbol (struct rspamd_task *task,
                setbit (checkpoint->processed_bits, item->id * 2);
 
                if (!item->enabled ||
-                               (item->type & SYMBOL_TYPE_SQUEEZED) ||
                                (RSPAMD_TASK_IS_EMPTY (task) && !(item->type & SYMBOL_TYPE_EMPTY))) {
                        check = FALSE;
                }
@@ -2334,10 +2333,15 @@ rspamd_symbols_cache_disable_symbol_checkpoint (struct rspamd_task *task,
                /* Set executed and finished flags */
                item = g_ptr_array_index (cache->items_by_id, id);
 
-               setbit (checkpoint->processed_bits, item->id * 2);
-               setbit (checkpoint->processed_bits, item->id * 2 + 1);
+               if (!(item->type & SYMBOL_TYPE_SQUEEZED)) {
+                       setbit (checkpoint->processed_bits, item->id * 2);
+                       setbit (checkpoint->processed_bits, item->id * 2 + 1);
 
-               msg_debug_task ("disable execution of %s", symbol);
+                       msg_debug_task ("disable execution of %s", symbol);
+               }
+               else {
+                       msg_debug_task ("skip squeezed symbol %s", symbol);
+               }
        }
        else {
                msg_info_task ("cannot disable %s: not found", symbol);