diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-04-29 09:58:31 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-04-29 09:58:31 +0100 |
commit | 79dc60d2a151ab68707e8ef041418e94d53c8ef7 (patch) | |
tree | 05cdad8d3745e908497fdfe6550a84c2259ff18f /src/lua/lua_task.c | |
parent | 26514fb406b25d4373086a9d1d88f795f88f42d4 (diff) | |
download | rspamd-79dc60d2a151ab68707e8ef041418e94d53c8ef7.tar.gz rspamd-79dc60d2a151ab68707e8ef041418e94d53c8ef7.zip |
[Feature] Add least passthrough results
Diffstat (limited to 'src/lua/lua_task.c')
-rw-r--r-- | src/lua/lua_task.c | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c index 945e06e08..6a4ae145d 100644 --- a/src/lua/lua_task.c +++ b/src/lua/lua_task.c @@ -1767,7 +1767,7 @@ lua_task_set_pre_result (lua_State * L) const gchar *message = NULL, *module = NULL; gdouble score = NAN; struct rspamd_action *action; - guint priority = RSPAMD_PASSTHROUGH_NORMAL; + guint priority = RSPAMD_PASSTHROUGH_NORMAL, flags = 0; if (task != NULL) { @@ -1834,18 +1834,33 @@ lua_task_set_pre_result (lua_State * L) priority = lua_tonumber (L, 6); } + if (lua_type (L, 7) == LUA_TSTRING) { + const gchar *fl_str = lua_tostring (L, 7); + + if (strstr (fl_str, "least") != NULL) { + flags |= RSPAMD_PASSTHROUGH_LEAST; + } + } - rspamd_add_passthrough_result (task, action, priority, - score, rspamd_mempool_strdup (task->task_pool, message), - rspamd_mempool_strdup (task->task_pool, module)); + + rspamd_add_passthrough_result (task, + action, + priority, + score, + rspamd_mempool_strdup (task->task_pool, message), + rspamd_mempool_strdup (task->task_pool, module), + flags); /* Don't classify or filter message if pre-filter sets results */ - task->processed_stages |= (RSPAMD_TASK_STAGE_CLASSIFIERS | - RSPAMD_TASK_STAGE_CLASSIFIERS_PRE | - RSPAMD_TASK_STAGE_CLASSIFIERS_POST); - rspamd_symcache_disable_all_symbols (task, task->cfg->cache, - SYMBOL_TYPE_IDEMPOTENT|SYMBOL_TYPE_IGNORE_PASSTHROUGH| - SYMBOL_TYPE_POSTFILTER); + + if (!(flags & RSPAMD_PASSTHROUGH_LEAST)) { + task->processed_stages |= (RSPAMD_TASK_STAGE_CLASSIFIERS | + RSPAMD_TASK_STAGE_CLASSIFIERS_PRE | + RSPAMD_TASK_STAGE_CLASSIFIERS_POST); + rspamd_symcache_disable_all_symbols (task, task->cfg->cache, + SYMBOL_TYPE_IDEMPOTENT | SYMBOL_TYPE_IGNORE_PASSTHROUGH | + SYMBOL_TYPE_POSTFILTER); + } } else { return luaL_error (L, "invalid arguments"); |