diff options
-rw-r--r-- | src/libmime/filter.c | 4 | ||||
-rw-r--r-- | src/libserver/task.h | 2 | ||||
-rw-r--r-- | src/lua/lua_task.c | 13 |
3 files changed, 15 insertions, 4 deletions
diff --git a/src/libmime/filter.c b/src/libmime/filter.c index 8ec0c704e..11d9f85d1 100644 --- a/src/libmime/filter.c +++ b/src/libmime/filter.c @@ -323,6 +323,10 @@ rspamd_action_from_str (const gchar *data, gint *result) sizeof ("soft reject") - 1) == 0) { *result = METRIC_ACTION_NOACTION; } + else if (g_ascii_strncasecmp (data, "accept", + sizeof ("accept") - 1) == 0) { + *result = METRIC_ACTION_NOACTION; + } else { return FALSE; } diff --git a/src/libserver/task.h b/src/libserver/task.h index a509c88de..44a71b289 100644 --- a/src/libserver/task.h +++ b/src/libserver/task.h @@ -187,7 +187,7 @@ struct rspamd_task { gpointer checkpoint; /**< Opaque checkpoint data */ struct { - enum rspamd_metric_action action; /**< Action of pre filters */ + guint32 action; /**< Action of pre filters */ gchar *str; /**< String describing action */ } pre_result; /**< Result of pre-filters */ diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c index 7acedb153..6e644b0da 100644 --- a/src/lua/lua_task.c +++ b/src/lua/lua_task.c @@ -101,6 +101,7 @@ LUA_FUNCTION_DEF (task, insert_result); * - `add header`: add spam header * - `rewrite subject`: rewrite subject to spam subject * - `greylist`: greylist message + * - `accept` or `no action`: whitelist message * @param {rspamd_action or string} action a numeric or string action value * @param {string} description optional descripton @example @@ -812,16 +813,16 @@ lua_task_set_pre_result (lua_State * L) else if (lua_type (L, 2) == LUA_TSTRING) { rspamd_action_from_str (lua_tostring (L, 2), &action); } - if (action < (gint)task->pre_result.action && - action < METRIC_ACTION_MAX && - action >= METRIC_ACTION_REJECT) { + if (action < METRIC_ACTION_MAX && action >= METRIC_ACTION_REJECT) { /* We also need to set the default metric to that result */ mres = rspamd_create_metric_result (task, DEFAULT_METRIC); if (mres != NULL) { mres->score = mres->metric->actions[action].score; mres->action = action; } + task->pre_result.action = action; + if (lua_gettop (L) >= 3) { action_str = rspamd_mempool_strdup (task->task_pool, luaL_checkstring (L, 3)); @@ -834,6 +835,12 @@ lua_task_set_pre_result (lua_State * L) msg_info_task ("<%s>: set pre-result to %s: '%s'", task->message_id, rspamd_action_to_str (action), task->pre_result.str); + + /* Don't classify or filter message if pre-filter sets results */ + task->processed_stages |= (RSPAMD_TASK_STAGE_FILTERS | + RSPAMD_TASK_STAGE_CLASSIFIERS | + RSPAMD_TASK_STAGE_CLASSIFIERS_PRE | + RSPAMD_TASK_STAGE_CLASSIFIERS_POST); } } return 0; |