commit 93c5dca: [Feature] RBL: support matching content/image URLs only
Andrew Lewis
nerf at judo.za.org
Thu Oct 1 12:14:07 UTC 2020
Author: Andrew Lewis
Date: 2020-10-01 10:51:10 +0200
URL: https://github.com/rspamd/rspamd/commit/93c5dcada24fadb4d6cee918be329f06c32bb0ec (refs/pull/3501/head)
[Feature] RBL: support matching content/image URLs only
---
lualib/lua_util.lua | 2 ++
src/plugins/lua/rbl.lua | 74 ++++++++++++++++++++++++++++++++++---------------
2 files changed, 54 insertions(+), 22 deletions(-)
diff --git a/lualib/lua_util.lua b/lualib/lua_util.lua
index 7c925c12b..9fd15fa5a 100644
--- a/lualib/lua_util.lua
+++ b/lualib/lua_util.lua
@@ -941,6 +941,8 @@ exports.extract_specific_urls = function(params_or_task, lim, need_emails, filte
emails = params.need_emails,
images = params.need_images,
content = params.need_content,
+ flags = params.flags, -- maybe nil
+ flags_mode = params.flags_mode, -- maybe nil
}
-- Shortcut for cached stuff
diff --git a/src/plugins/lua/rbl.lua b/src/plugins/lua/rbl.lua
index f0165c4ab..5bb175ff7 100644
--- a/src/plugins/lua/rbl.lua
+++ b/src/plugins/lua/rbl.lua
@@ -514,6 +514,17 @@ local function gen_rbl_callback(rule)
no_cache = true,
}
+ if not rule.urls then
+ ex_params.flags_mode = 'explicit'
+ ex_params.flags = {}
+ if rule.content_urls then
+ table.insert(ex_params.flags, 'content')
+ end
+ if rule.images then
+ table.insert(ex_params.flags, 'image')
+ end
+ end
+
local urls = lua_util.extract_specific_urls(ex_params)
for _,u in ipairs(urls) do
@@ -715,7 +726,7 @@ local function gen_rbl_callback(rule)
description[#description + 1] = 'replyto'
end
- if rule.urls then
+ if rule.urls or rule.content_urls or rule.images then
pipeline[#pipeline + 1] = check_urls
description[#description + 1] = 'urls'
end
@@ -1137,37 +1148,56 @@ local return_bits_schema = ts.map_of(
)
local rule_schema_tbl = {
- enabled = ts.boolean:is_optional(),
+ content_urls = ts.boolean:is_optional(),
+ disable_monitoring = ts.boolean:is_optional(),
disabled = ts.boolean:is_optional(),
- rbl = ts.string,
- selector = ts.string:is_optional(),
- symbol = ts.string:is_optional(),
- returncodes = return_codes_schema:is_optional(),
- return_codes = return_codes_schema:is_optional(),
- returnbits = return_bits_schema:is_optional(),
- return_bits = return_bits_schema:is_optional(),
- whitelist_exception = (
- ts.array_of(ts.string) + (ts.string / function(s) return {s} end)
- ):is_optional(),
- whitelist = lua_maps.map_schema:is_optional(),
- url_compose_map = lua_maps.map_schema:is_optional(),
- local_exclude_ip_map = ts.string:is_optional(),
+ dkim = ts.boolean:is_optional(),
+ dkim_domainonly = ts.boolean:is_optional(),
+ dkim_match_from = ts.boolean:is_optional(),
+ emails = ts.boolean:is_optional(),
+ emails_delimiter = ts.string:is_optional(),
+ emails_domainonly = ts.boolean:is_optional(),
+ enabled = ts.boolean:is_optional(),
+ exclude_local = ts.boolean:is_optional(),
+ exclude_private_ips = ts.boolean:is_optional(),
+ exclude_users = ts.boolean:is_optional(),
+ from = ts.boolean:is_optional(),
hash = ts.one_of{"sha1", "sha256", "sha384", "sha512", "md5", "blake2"}:is_optional(),
hash_format = ts.one_of{"hex", "base32", "base64"}:is_optional(),
hash_len = (ts.integer + ts.string / tonumber):is_optional(),
- monitored_address = ts.string:is_optional(),
- requests_limit = (ts.integer + ts.string / tonumber):is_optional(),
- process_script = ts.string:is_optional(),
- emails_delimiter = ts.string:is_optional(),
- ignore_defaults = ts.boolean:is_optional(),
+ helo = ts.boolean:is_optional(),
ignore_default = ts.boolean:is_optional(), -- alias
+ ignore_defaults = ts.boolean:is_optional(),
ignore_whitelist = ts.boolean:is_optional(),
ignore_whitelists = ts.boolean:is_optional(), -- alias
+ images = ts.boolean:is_optional(),
+ ipv4 = ts.boolean:is_optional(),
+ ipv6 = ts.boolean:is_optional(),
is_whitelist = ts.boolean:is_optional(),
+ local_exclude_ip_map = ts.string:is_optional(),
+ monitored_address = ts.string:is_optional(),
+ no_ip = ts.boolean:is_optional(),
+ process_script = ts.string:is_optional(),
+ rbl = ts.string,
+ rdns = ts.boolean:is_optional(),
+ received = ts.boolean:is_optional(),
+ replyto = ts.boolean:is_optional(),
+ requests_limit = (ts.integer + ts.string / tonumber):is_optional(),
resolve_ip = ts.boolean:is_optional(),
- content_urls = ts.boolean:is_optional(),
- disable_monitoring = ts.boolean:is_optional(),
+ return_bits = return_bits_schema:is_optional(),
+ return_codes = return_codes_schema:is_optional(),
+ returnbits = return_bits_schema:is_optional(),
+ returncodes = return_codes_schema:is_optional(),
+ selector = ts.string:is_optional(),
+ symbol = ts.string:is_optional(),
symbols_prefixes = ts.map_of(ts.string, ts.string):is_optional(),
+ unknown = ts.boolean:is_optional(),
+ url_compose_map = lua_maps.map_schema:is_optional(),
+ urls = ts.boolean:is_optional(),
+ whitelist = lua_maps.map_schema:is_optional(),
+ whitelist_exception = (
+ ts.array_of(ts.string) + (ts.string / function(s) return {s} end)
+ ):is_optional(),
}
-- Add default boolean flags to the schema
for def_k,_ in pairs(default_options) do
More information about the Commits
mailing list