aboutsummaryrefslogtreecommitdiffstats
path: root/src/lua/lua_task.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2019-04-29 09:58:31 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2019-04-29 09:58:31 +0100
commit79dc60d2a151ab68707e8ef041418e94d53c8ef7 (patch)
tree05cdad8d3745e908497fdfe6550a84c2259ff18f /src/lua/lua_task.c
parent26514fb406b25d4373086a9d1d88f795f88f42d4 (diff)
downloadrspamd-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.c35
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");