diff options
author | Vsevolod Stakhov <vsevolod@rspamd.com> | 2024-04-05 17:56:15 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rspamd.com> | 2024-04-05 17:56:15 +0100 |
commit | b2ba70cf7a187b429c613eee54251983516d9051 (patch) | |
tree | e1008cafb58ca4950b3595e05c37cf9919cdf751 /src/lua | |
parent | 2715f2453644bf833f5f33e33ad92dbb2e276270 (diff) | |
download | rspamd-b2ba70cf7a187b429c613eee54251983516d9051.tar.gz rspamd-b2ba70cf7a187b429c613eee54251983516d9051.zip |
[Fix] Honor dynamic thresholds for greylisting module
Diffstat (limited to 'src/lua')
-rw-r--r-- | src/lua/lua_task.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c index e37c6838d..edbe5b89a 100644 --- a/src/lua/lua_task.c +++ b/src/lua/lua_task.c @@ -872,6 +872,14 @@ LUA_FUNCTION_DEF(task, get_metric_result); * @return {number,number} 2 numbers containing the current score and required score of the metric */ LUA_FUNCTION_DEF(task, get_metric_score); + +/*** + * @method task:get_metric_threshold(action) + * Get the current threshold of the action `action` for the default metric. Should be used after settings have been applied. + * @param {string} action name of a action + * @return {number} the current threshold of the action + */ +LUA_FUNCTION_DEF(task, get_metric_threshold); /*** * @method task:get_metric_action(name) * Get the current action of metric `name` (must be nil or 'default'). Should be used in idempotent filters only. @@ -1307,6 +1315,7 @@ static const struct luaL_reg tasklib_m[] = { LUA_INTERFACE_DEF(task, get_metric_result), LUA_INTERFACE_DEF(task, get_metric_score), LUA_INTERFACE_DEF(task, get_metric_action), + LUA_INTERFACE_DEF(task, get_metric_threshold), LUA_INTERFACE_DEF(task, set_metric_score), LUA_INTERFACE_DEF(task, set_metric_subject), LUA_INTERFACE_DEF(task, learn), @@ -6352,6 +6361,38 @@ lua_task_get_metric_action(lua_State *L) } static int +lua_task_get_metric_threshold(lua_State *L) +{ + LUA_TRACE_POINT; + struct rspamd_task *task = lua_check_task(L, 1); + const char *act_name = luaL_checkstring(L, 2); + + if (task && act_name && task->result) { + struct rspamd_action *action = rspamd_config_get_action(task->cfg, act_name); + + if (action == NULL) { + lua_pushnil(L); + } + else { + struct rspamd_action_config *act_config = + rspamd_find_action_config_for_action(task->result, action); + + if (act_config) { + lua_pushnumber(L, act_config->cur_limit); + } + else { + lua_pushnil(L); + } + } + } + else { + return luaL_error(L, "invalid arguments"); + } + + return 1; +} + +static int lua_task_set_metric_score(lua_State *L) { LUA_TRACE_POINT; |