commit 3ebb188: [Feature] Pyzor calculate score dynamically Count - WL-Count of default_score in percent
defkev
defkev at gmail.com
Sun Jul 18 11:21:05 UTC 2021
Author: defkev
Date: 2021-07-11 01:51:42 +0200
URL: https://github.com/rspamd/rspamd/commit/3ebb18826712b50906ebca1a9318a99286ebd715 (refs/pull/3816/head)
[Feature] Pyzor calculate score dynamically Count - WL-Count of default_score in percent
---
lualib/lua_scanners/pyzor.lua | 42 ++++++++++++++----------------------------
1 file changed, 14 insertions(+), 28 deletions(-)
diff --git a/lualib/lua_scanners/pyzor.lua b/lualib/lua_scanners/pyzor.lua
index dd9205e7d..ef9ece824 100644
--- a/lualib/lua_scanners/pyzor.lua
+++ b/lualib/lua_scanners/pyzor.lua
@@ -41,7 +41,7 @@ local function pyzor_config(opts)
detection_category = "hash",
cache_expire = 7200, -- expire redis in one hour
message = '${SCANNER}: Pyzor bulk message found: "${VIRUS}"',
- default_score = 1,
+ default_score = 1.5,
action = false,
}
@@ -139,33 +139,19 @@ local function pyzor_check(task, content, digest, rule)
--rspamd_logger.infox(task, "%s - count=%s wl=%s", addr:to_string(), reported, whitelisted)
--[[
- @todo: Implement math function to calc the score dynamically based on return values.
- Maybe check spamassassin implementation.
- ]] --
- local entries = reported - whitelisted
-
- local weight = 0
-
- if entries >= 100 then
- weight = 1.5
- elseif entries >= 25 then
- weight = 1.25
- elseif entries >= 5 then
- weight = 1.0
- elseif entries >= 1 and whitelisted == 0 then
- weight = 0.2
- end
-
- if whitelisted >= 100 then
- weight = weight - 1.5
- elseif whitelisted >= 25 then
- weight = weight - 1.25
- elseif whitelisted >= 5 then
- weight = weight - 1.0
- elseif whitelisted >= 1 then
- weight = weight - 0.2
- end
-
+ Weight is Count - WL-Count of rule.default_score in percent, e.g.
+ SPAM:
+ Count: 100 (100%)
+ WL-Count: 1 (1%)
+ rule.default_score: 1
+ Weight: 0.99
+ HAM:
+ Count: 10 (100%)
+ WL-Count: 10 (100%)
+ rule.default_score: 1
+ Weight: 0
+ ]]
+ local weight = tonumber(string.format("%.2f", rule.default_score * (reported - whitelisted) / (reported + whitelisted)))
local info = string.format("count=%d wl=%d", reported, whitelisted)
local threat_string = string.format("bl_%d_wl_%d", reported, whitelisted)
More information about the Commits
mailing list