Selaa lähdekoodia

[Rework] Breaking: Do not report soft reject in history

We can have much more clear information if we store the real action in
case of `soft-reject`. In this case, we can just imply that a module
that has set this action is an action itself, such as:

* greylist
* ratelimit
* multimap
* antivirus rule name

This policy seems quite reasonable, as `soft reject` has no meaning on
its own.
tags/3.5
Vsevolod Stakhov 1 vuosi sitten
vanhempi
commit
18030c9bbf
No account linked to committer's email address
2 muutettua tiedostoa jossa 23 lisäystä ja 2 poistoa
  1. 19
    0
      lualib/lua_verdict.lua
  2. 4
    2
      src/plugins/lua/history_redis.lua

+ 19
- 0
lualib/lua_verdict.lua Näytä tiedosto

@@ -186,4 +186,23 @@ exports.describe = function(verdict, what)
return nil
end

---[[[
-- @function lua_verdict.adjust_passthrough_action(task)
-- If an action is `soft reject` then this function extracts a module that has set this action
-- and returns an adjusted action (e.g. 'greylist' or 'ratelimit').
-- Otherwise an action is returned as is.
--]]
exports.adjust_passthrough_action = function(task)
local action = task:get_metric_action()
if action == 'soft reject' then
local has_pr,_,_,module = task:has_pre_result()

if has_pr and module then
action = module
end
end

return action
end

return exports

+ 4
- 2
src/plugins/lua/history_redis.lua Näytä tiedosto

@@ -47,6 +47,7 @@ local lua_redis = require "lua_redis"
local fun = require "fun"
local ucl = require "ucl"
local ts = (require "tableshape").types
local lua_verdict = require "lua_verdict"
local E = {}
local N = "history_redis"
local hostname = rspamd_util.get_hostname()
@@ -109,6 +110,7 @@ local function normalise_results(tbl, task)
tbl.rmilter = nil
tbl.messages = nil
tbl.urls = nil
tbl.action = lua_verdict.adjust_passthrough_action(task)

local seconds = task:get_timeval()['tv_sec']
tbl.unix_time = seconds
@@ -148,8 +150,8 @@ local function history_save(task)
rspamd_logger.errx('cannot get protocol reply, skip saving in history')
return
end
-- 1 is 'json-compact' but faster
local json = ucl.to_format(data, 1)
local json = ucl.to_format(data, 'json-compact')

if settings.compress then
json = rspamd_util.zstd_compress(json)

Loading…
Peruuta
Tallenna