From 79796c6f5f38f6ba743af8b581efd40a4e15a995 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Sat, 10 Sep 2022 13:47:54 +0100 Subject: [PATCH] [Minor] Register more timeouts --- src/plugins/lua/bimi.lua | 2 ++ src/plugins/lua/clustering.lua | 1 + src/plugins/lua/elastic.lua | 1 + src/plugins/lua/history_redis.lua | 3 ++- src/plugins/lua/metadata_exporter.lua | 5 +++++ src/plugins/lua/mx_check.lua | 1 + src/plugins/lua/p0f.lua | 4 +++- src/plugins/lua/ratelimit.lua | 2 ++ src/plugins/lua/rbl.lua | 6 ++++-- src/plugins/lua/reputation.lua | 3 +++ src/plugins/lua/settings.lua | 1 + src/plugins/lua/spf.lua | 6 +++++- src/plugins/lua/url_redirector.lua | 2 ++ 13 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/plugins/lua/bimi.lua b/src/plugins/lua/bimi.lua index 405477c62..bcf5a823d 100644 --- a/src/plugins/lua/bimi.lua +++ b/src/plugins/lua/bimi.lua @@ -365,6 +365,8 @@ if redis_params then name = 'BIMI_CHECK', type = 'normal', callback = bimi_callback, + augmentations = {string.format("timeout=%f", settings.helper_timeout or + redis_params.timeout or 0.0)} }) rspamd_config:register_symbol{ name = 'BIMI_VALID', diff --git a/src/plugins/lua/clustering.lua b/src/plugins/lua/clustering.lua index 3e546f817..3a8a361b1 100644 --- a/src/plugins/lua/clustering.lua +++ b/src/plugins/lua/clustering.lua @@ -301,6 +301,7 @@ if opts['rules'] then type = 'idempotent', flags = 'empty,explicit_disable,ignore_passthrough', callback = callback_gen(clusterting_idempotent_cb, rule), + augmentations = {string.format("timeout=%f", redis_params.timeout or 0.0)} } end else diff --git a/src/plugins/lua/elastic.lua b/src/plugins/lua/elastic.lua index 3fffd6612..5578d48ec 100644 --- a/src/plugins/lua/elastic.lua +++ b/src/plugins/lua/elastic.lua @@ -519,6 +519,7 @@ if redis_params and opts then callback = elastic_collect, priority = 10, flags = 'empty,explicit_disable,ignore_passthrough', + augmentations = {string.format("timeout=%f", settings.timeout)}, }) rspamd_config:add_on_load(function(cfg, ev_base,worker) diff --git a/src/plugins/lua/history_redis.lua b/src/plugins/lua/history_redis.lua index b8bd9466a..35bfb9242 100644 --- a/src/plugins/lua/history_redis.lua +++ b/src/plugins/lua/history_redis.lua @@ -290,7 +290,8 @@ if opts then type = 'idempotent', callback = history_save, flags = 'empty,explicit_disable,ignore_passthrough', - priority = 150 + priority = 150, + augmentations = {string.format("timeout=%f", redis_params.timeout or 0.0)} }) lua_redis.register_prefix(settings.key_prefix .. hostname, N, "Redis history", { diff --git a/src/plugins/lua/metadata_exporter.lua b/src/plugins/lua/metadata_exporter.lua index d72454f86..c5f4ca148 100644 --- a/src/plugins/lua/metadata_exporter.lua +++ b/src/plugins/lua/metadata_exporter.lua @@ -484,6 +484,7 @@ if type(settings.rules) ~= 'table' then r.defer = settings.defer r.selector = settings.pusher_select.redis_pubsub r.formatter = settings.pusher_format.redis_pubsub + r.timeout = redis_params.timeout settings.rules[r.backend:upper()] = r end end @@ -499,6 +500,7 @@ if type(settings.rules) ~= 'table' then r.defer = settings.defer r.selector = settings.pusher_select.http r.formatter = settings.pusher_format.http + r.timeout = settings.timeout or 0.0 settings.rules[r.backend:upper()] = r end end @@ -516,6 +518,7 @@ if type(settings.rules) ~= 'table' then r.smtp_port = settings.smtp_port r.email_template = settings.email_template r.defer = settings.defer + r.timeout = settings.timeout or 0.0 r.selector = settings.pusher_select.send_mail r.formatter = settings.pusher_format.send_mail settings.rules[r.backend:upper()] = r @@ -593,6 +596,7 @@ backend_check.redis_pubsub = function(k, rule) settings.rules[k] = nil else backend_check.default(k, rule) + rule.timeout = redis_params.timeout end end setmetatable(backend_check, { @@ -650,5 +654,6 @@ for k, r in pairs(settings.rules) do callback = gen_exporter(r), priority = 10, flags = 'empty,explicit_disable,ignore_passthrough', + augmentations = {string.format("timeout=%f", r.timeout or 0.0)} }) end diff --git a/src/plugins/lua/mx_check.lua b/src/plugins/lua/mx_check.lua index bd55cdd8f..cea636dfc 100644 --- a/src/plugins/lua/mx_check.lua +++ b/src/plugins/lua/mx_check.lua @@ -315,6 +315,7 @@ if opts then type = 'normal', callback = mx_check, flags = 'empty', + augmentations = {string.format("timeout=%f", settings.timeout + rspamd_config:get_dns_timeout() or 0.0)}, }) rspamd_config:register_symbol({ name = settings.symbol_no_mx, diff --git a/src/plugins/lua/p0f.lua b/src/plugins/lua/p0f.lua index d9e91da0f..a07b1ee00 100644 --- a/src/plugins/lua/p0f.lua +++ b/src/plugins/lua/p0f.lua @@ -89,7 +89,9 @@ if rule then callback = check_p0f, priority = 8, flags = 'empty,nostat', - group = N + group = N, + augmentations = {string.format("timeout=%f", rule.timeout or 0.0)}, + }) if rule.symbol then diff --git a/src/plugins/lua/ratelimit.lua b/src/plugins/lua/ratelimit.lua index 1c19d890c..2b61b606f 100644 --- a/src/plugins/lua/ratelimit.lua +++ b/src/plugins/lua/ratelimit.lua @@ -871,6 +871,7 @@ if opts then priority = 7, callback = ratelimit_cb, flags = 'empty,nostat', + augmentations = {string.format("timeout=%f", redis_params.timeout or 0.0)}, } local id = rspamd_config:register_symbol(s) @@ -914,6 +915,7 @@ if opts then name = 'RATELIMIT_UPDATE', flags = 'explicit_disable,ignore_passthrough', callback = ratelimit_update_cb, + augmentations = {string.format("timeout=%f", redis_params.timeout or 0.0)}, } end end diff --git a/src/plugins/lua/rbl.lua b/src/plugins/lua/rbl.lua index 890ceb232..dd69ccd67 100644 --- a/src/plugins/lua/rbl.lua +++ b/src/plugins/lua/rbl.lua @@ -1283,14 +1283,16 @@ rspamd_config:register_symbol{ type = 'callback', callback = rbl_callback_white, name = 'RBL_CALLBACK_WHITE', - flags = 'nice,empty,no_squeeze' + flags = 'nice,empty,no_squeeze', + augmentations = {string.format("timeout=%f", rspamd_config:get_dns_timeout() or 0.0)}, } rspamd_config:register_symbol{ type = 'callback', callback = rbl_callback_fin, name = 'RBL_CALLBACK', - flags = 'empty,no_squeeze' + flags = 'empty,no_squeeze', + augmentations = {string.format("timeout=%f", rspamd_config:get_dns_timeout() or 0.0)}, } for _, w in ipairs(white_symbols) do diff --git a/src/plugins/lua/reputation.lua b/src/plugins/lua/reputation.lua index 6b7a703d6..3db6c52c7 100644 --- a/src/plugins/lua/reputation.lua +++ b/src/plugins/lua/reputation.lua @@ -1302,6 +1302,7 @@ local function parse_rule(name, tbl) name = rule.symbol, type = rule_type, callback = callback_gen(reputation_filter_cb, rule), + augmentations = {string.format("timeout=%f", redis_params.timeout or 0.0)}, } if rule.selector.config.split_symbols then @@ -1330,6 +1331,7 @@ local function parse_rule(name, tbl) type = 'postfilter', flags = 'nostat,explicit_disable,ignore_passthrough', callback = callback_gen(reputation_postfilter_cb, rule), + augmentations = {string.format("timeout=%f", redis_params.timeout or 0.0)}, } end @@ -1340,6 +1342,7 @@ local function parse_rule(name, tbl) type = 'idempotent', flags = 'explicit_disable,ignore_passthrough', callback = callback_gen(reputation_idempotent_cb, rule), + augmentations = {string.format("timeout=%f", redis_params.timeout or 0.0)}, } end diff --git a/src/plugins/lua/settings.lua b/src/plugins/lua/settings.lua index 94e1b2327..d8f0997f1 100644 --- a/src/plugins/lua/settings.lua +++ b/src/plugins/lua/settings.lua @@ -1230,6 +1230,7 @@ if redis_section then callback = gen_redis_callback(h, id), priority = 10, flags = 'empty,nostat', + augmentations = {string.format("timeout=%f", redis_params.timeout or 0.0)}, }) end, redis_key_handlers) end diff --git a/src/plugins/lua/spf.lua b/src/plugins/lua/spf.lua index c8aeb971b..997c07bca 100644 --- a/src/plugins/lua/spf.lua +++ b/src/plugins/lua/spf.lua @@ -209,7 +209,11 @@ local sym_id = rspamd_config:register_symbol{ flags = 'fine,empty', groups = {'policies','spf'}, score = 0.0, - callback = spf_check_callback + callback = spf_check_callback, + -- We can merely estimate timeout here, as it is possible to construct an SPF record that would cause + -- many DNS requests. But we won't like to set the maximum value for that all the time, as + -- the majority of requests will typically have 1-4 subrequests + augmentations = {string.format("timeout=%f", rspamd_config:get_dns_timeout() * 4 or 0.0)}, } if local_config.whitelist then diff --git a/src/plugins/lua/url_redirector.lua b/src/plugins/lua/url_redirector.lua index 53987ad62..bc054ec69 100644 --- a/src/plugins/lua/url_redirector.lua +++ b/src/plugins/lua/url_redirector.lua @@ -357,6 +357,8 @@ if opts then name = 'URL_REDIRECTOR_CHECK', type = 'callback,prefilter', callback = url_redirector_handler, + -- In fact, the real timeout is nested_limit * timeout... + augmentations = {string.format("timeout=%f", settings.timeout)} } if settings.redirector_symbol then -- 2.39.5