]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Check DKIM domain when whitelisting by DKIM signature.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 17 Sep 2015 14:09:37 +0000 (15:09 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 17 Sep 2015 14:09:37 +0000 (15:09 +0100)
src/plugins/lua/whitelist.lua

index 0a78a1d43c69d53313d8f5d1454f7aa0c995583d..8f7c7b71518de0e3ad3f017c6bf8f15613568b38 100644 (file)
@@ -71,21 +71,38 @@ local function whitelist_cb(symbol, rule, task)
         if not task:get_symbol(options['spf_allow_symbol']) then
           found = false
           rspamd_logger.debugx(task, "domain %s has been found in whitelist %s" ..
-            "but it doesn't have valid SPF record", domain, symbol)
+            " but it doesn't have valid SPF record", domain, symbol)
         end
       end
       if rule['valid_dkim'] then
-        if not task:get_symbol(options['dkim_allow_symbol']) then
+        local sym = task:get_symbol(options['dkim_allow_symbol'])
+        if not sym then
           found = false
           rspamd_logger.debugx(task, "domain %s has been found in whitelist %s" ..
-              "but it doesn't have valid DKIM", domain, symbol)
+              " but it doesn't have valid DKIM", domain, symbol)
+        else
+          -- Check dkim signatures as they might be for different domains
+          found = false
+          local dkim_opts = sym[1]['options']
+
+          if dkim_opts then
+            for i,d in ipairs(dkim_opts) do
+              if d == domain then
+                found = true
+              end
+            end
+          end
+          if not found then
+            rspamd_logger.debugx(task, "domain %s has been found in whitelist %s" ..
+                " but it doesn't have matching DKIM signature", domain, symbol)
+          end
         end
       end
       if rule['valid_dmarc'] then
         if not task:get_symbol(options['dmarc_allow_symbol']) then
           found = false
           rspamd_logger.debugx(task, "domain %s has been found in whitelist %s" ..
-              "but it doesn't have valid DMARC", domain, symbol)
+              " but it doesn't have valid DMARC", domain, symbol)
         end
       end
     end