aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rspamd.com>2025-03-31 18:46:30 +0100
committerVsevolod Stakhov <vsevolod@rspamd.com>2025-03-31 18:46:30 +0100
commit0ec3015b8f35d0c652bf5acf1b341a846914fa8b (patch)
treeac5d8729f040d3734af5f1ccd6edf03dca2223e9
parent4c98aab6f670c659dff4c7e0cf392576f7850732 (diff)
downloadrspamd-vstakhov-bh-greylisting.tar.gz
rspamd-vstakhov-bh-greylisting.zip
[Fix] Greylist: Improve body hash calculationsvstakhov-bh-greylisting
-rw-r--r--src/plugins/lua/greylist.lua23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/plugins/lua/greylist.lua b/src/plugins/lua/greylist.lua
index e4a633233..934e17bce 100644
--- a/src/plugins/lua/greylist.lua
+++ b/src/plugins/lua/greylist.lua
@@ -122,6 +122,29 @@ local function data_key(task)
local h = hash.create()
h:update(body, len)
+ local subject = task:get_subject() or ''
+ h:update(subject)
+
+ -- Take recipients into account
+ local rcpt = task:get_recipients('smtp')
+ if rcpt then
+ table.sort(rcpt, function(r1, r2)
+ return r1['addr'] < r2['addr']
+ end)
+
+ fun.each(function(r)
+ h:update(r['addr'])
+ end, rcpt)
+ end
+
+ -- Use from as well, but mime one
+ local from = task:get_from('mime')
+
+ local addr = '<>'
+ if from and from[1] then
+ addr = from[1]['addr']
+ end
+ h:update(addr)
local b32 = settings['key_prefix'] .. 'b' .. h:base32():sub(1, 20)
task:get_mempool():set_variable("grey_bodyhash", b32)