From 5ef8dfff5dcff5e8922e5a2c8e41d7e381dbcd37 Mon Sep 17 00:00:00 2001 From: Andrew Lewis Date: Wed, 25 Oct 2023 15:00:08 +0200 Subject: [PATCH] [Feature] rbl: support globbed return codes --- lualib/plugins/rbl.lua | 2 +- src/plugins/lua/rbl.lua | 12 +++++++++++- test/functional/configs/merged-override.conf | 6 +++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lualib/plugins/rbl.lua b/lualib/plugins/rbl.lua index 4eb7b987d..89304baa0 100644 --- a/lualib/plugins/rbl.lua +++ b/lualib/plugins/rbl.lua @@ -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", "radix", "regexp" }:is_optional(), + matcher = ts.one_of { "equality", "glob", "luapattern", "radix", "regexp" }:is_optional(), monitored_address = ts.string:is_optional(), no_ip = ts.boolean:is_optional(), process_script = ts.string:is_optional(), diff --git a/src/plugins/lua/rbl.lua b/src/plugins/lua/rbl.lua index 4365d245f..d1f2df69c 100644 --- a/src/plugins/lua/rbl.lua +++ b/src/plugins/lua/rbl.lua @@ -247,6 +247,10 @@ matchers.regexp = function(_, to_match, _, map) return map and map:get_key(to_match) or false end +matchers.glob = function(_, to_match, _, map) + return map and map:get_key(to_match) or false +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 @@ -1009,6 +1013,12 @@ local function gen_rbl_callback(rule) return callback_f, string.format('checks: %s', table.concat(description, ',')) end +local map_match_types = { + glob = true, + radix = true, + regexp = true, +} + local function add_rbl(key, rbl, global_opts) if not rbl.symbol then rbl.symbol = key:upper() @@ -1087,7 +1097,7 @@ local function add_rbl(key, rbl, global_opts) end local match_type = rbl.matcher - if match_type and rbl.returncodes and (match_type == 'radix' or match_type == 'regexp') then + if match_type and rbl.returncodes and map_match_types[match_type] then if not rbl.returncodes_maps then rbl.returncodes_maps = {} end diff --git a/test/functional/configs/merged-override.conf b/test/functional/configs/merged-override.conf index 9ba31b7a1..752711369 100644 --- a/test/functional/configs/merged-override.conf +++ b/test/functional/configs/merged-override.conf @@ -310,10 +310,14 @@ rbl { images = true; rbl = "test9.uribl"; } - URIBL_NUMERIC_CONTENT { + UNKNOWN_URIBL_NUMERIC_CONTENT { checks = ["numeric_urls"]; content_urls = true; rbl = "test9.uribl"; + matcher = "glob"; + returncodes = { + URIBL_NUMERIC_CONTENT = "*.*.*.*"; + } } URIBL_NUMERIC_EVERYTHING { checks = ["numeric_urls"]; -- 2.39.5