Skip to content

Commit

Permalink
[Feature] rbl: support checking returncodes by regex
Browse files Browse the repository at this point in the history
  • Loading branch information
fatalbanana committed Oct 24, 2023
1 parent fea6bf4 commit 06618f8
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 5 deletions.
2 changes: 1 addition & 1 deletion lualib/plugins/rbl.lua
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ local rule_schema_tbl = {
ipv6 = ts.boolean:is_optional(),
is_whitelist = ts.boolean:is_optional(),
local_exclude_ip_map = ts.string:is_optional(),
matcher = ts.one_of { "equality", "luapattern" }:is_optional(),
matcher = ts.one_of { "equality", "luapattern", "regexp" }:is_optional(),
monitored_address = ts.string:is_optional(),
no_ip = ts.boolean:is_optional(),
process_script = ts.string:is_optional(),
Expand Down
13 changes: 13 additions & 0 deletions src/plugins/lua/rbl.lua
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ end

local hash = require 'rspamd_cryptobox_hash'
local rspamd_logger = require 'rspamd_logger'
local rspamd_regexp = require 'rspamd_regexp'
local rspamd_util = require 'rspamd_util'
local rspamd_ip = require "rspamd_ip"
local fun = require 'fun'
Expand Down Expand Up @@ -225,6 +226,18 @@ matchers.luapattern = function(to_match, pattern)
return string.find(to_match, '^' .. pattern .. '$') and true or false
end

matchers.regexp = function(to_match, pattern)
local re = rspamd_regexp.get_cached(pattern)
if not re then
re = rspamd_regexp.create_cached(pattern)
if not re then
rspamd_logger.errx('regexp did not compile: %s', pattern)
return false
end
end
return re:match(to_match)
end

local function rbl_dns_process(task, rbl, to_resolve, results, err, resolve_table_elt, match)
local function make_option(ip, label)
if ip then
Expand Down
10 changes: 6 additions & 4 deletions test/functional/configs/merged-override.conf
Original file line number Diff line number Diff line change
Expand Up @@ -269,9 +269,10 @@ rbl {
from = 'FAKE_RBL',
}
unknown = true;
matcher = "regexp";
returncodes = {
"CODE_2" = "127.0.0.2";
"CODE_3" = "127.0.0.3";
"CODE_2" = '^127\.0\.0\.2$';
"CODE_3" = '^127\.0\.0\.3$';
}
}
fake_whitelist {
Expand All @@ -283,9 +284,10 @@ rbl {
rbl = "fake.wl";
symbol = "FAKE_WL_RBL_UNKNOWN";
unknown = true;
#matcher = "luapattern";
returncodes = {
"FAKE_WL_RBL_CODE_2" = "127.0.0.2";
"FAKE_WL_RBL_CODE_3" = "127.0.0.3";
"FAKE_WL_RBL_CODE_2" = "127%.0%.0%.2";
"FAKE_WL_RBL_CODE_3" = "127%.0%.0%.3";
}
}
RSPAMD_EMAILBL {
Expand Down

0 comments on commit 06618f8

Please sign in to comment.