]> source.dussan.org Git - rspamd.git/commitdiff
[Rework] Breaking: Do not report soft reject in history
authorVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 7 Jan 2023 14:46:56 +0000 (14:46 +0000)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 7 Jan 2023 14:46:56 +0000 (14:46 +0000)
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.

lualib/lua_verdict.lua
src/plugins/lua/history_redis.lua

index 3ce7e068984ed0aea3f2f5c491fbff13720c49e9..8f3f23ea9407ee808a1097849021b89d8a63446f 100644 (file)
@@ -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
\ No newline at end of file
index c203d354b0b6b75ad5be985e3c474c2929617ec6..d4ee71cd1eb93048da9a2999e727ef2ec9d4b73f 100644 (file)
@@ -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)