]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Fix] Skip external map queries when Settings header is provided
authorVsevolod Stakhov <vsevolod@rspamd.com>
Mon, 19 Jan 2026 14:41:30 +0000 (14:41 +0000)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Mon, 19 Jan 2026 14:41:30 +0000 (14:41 +0000)
When settings are specified manually via the Settings HTTP header,
external map queries should not be executed as they may override
the manually provided settings asynchronously.

This prevents connection errors to external maps from affecting
requests that explicitly provide their own settings.

src/plugins/lua/settings.lua

index 2762359a275381197e7b6be8c255587b630b6cf8..63b6e835ceda3f5e15daa23c64c12864714a7a75 100644 (file)
@@ -401,15 +401,20 @@ local function check_settings(task)
 
             applied = true
           elseif s.rule.external_map then
-            local external_map = s.rule.external_map
-            local selector_result = external_map.selector(task)
-
-            if selector_result then
-              external_map.map:get_key(selector_result, nil, task)
-              -- No more selection logic
-              return
+            -- Skip external map query if settings were provided via header
+            if query_apply then
+              lua_util.debugm(N, task, "skip external map %s: settings provided via header", s.name)
             else
-              rspamd_logger.infox(task, "cannot query selector to make external map request")
+              local external_map = s.rule.external_map
+              local selector_result = external_map.selector(task)
+
+              if selector_result then
+                external_map.map:get_key(selector_result, nil, task)
+                -- No more selection logic
+                return
+              else
+                rspamd_logger.infox(task, "cannot query selector to make external map request")
+              end
             end
           end
           if s.rule['symbols'] then