]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Fix some tests
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 12 Oct 2018 16:09:10 +0000 (17:09 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 12 Oct 2018 16:09:10 +0000 (17:09 +0100)
src/plugins/lua/dmarc.lua

index 62168addd05547224a88326e4ccdebca7033f157..e632c9f02454e306c8e58bdbf8cb72774c2b0ae3 100644 (file)
@@ -288,7 +288,7 @@ local function dmarc_check_record(task, record, is_tld)
   return true, result
 end
 
-local function dmarc_validate_policy(task, policy, hdrfromdom)
+local function dmarc_validate_policy(task, policy, hdrfromdom, dmarc_esld)
   local reason = {}
 
   -- Check dkim and spf symbols
@@ -312,7 +312,7 @@ local function dmarc_validate_policy(task, policy, hdrfromdom)
       end
     else
       local spf_tld = rspamd_util.get_tld(spf_domain)
-      if rspamd_util.strequal_caseless(spf_tld, policy.domain) then
+      if rspamd_util.strequal_caseless(spf_tld, dmarc_esld) then
         spf_ok = true
       else
         table.insert(reason, "SPF not aligned (relaxed)")
@@ -326,7 +326,7 @@ local function dmarc_validate_policy(task, policy, hdrfromdom)
         end
       else
         local spf_tld = rspamd_util.get_tld(spf_domain)
-        if rspamd_util.strequal_caseless(spf_tld, policy.domain) then
+        if rspamd_util.strequal_caseless(spf_tld, dmarc_esld) then
           spf_tmpfail = true
         end
       end
@@ -365,7 +365,7 @@ local function dmarc_validate_policy(task, policy, hdrfromdom)
         else
           local dkim_tld = rspamd_util.get_tld(domain)
 
-          if rspamd_util.strequal_caseless(dkim_tld, policy.domain) then
+          if rspamd_util.strequal_caseless(dkim_tld, dmarc_esld) then
             dkim_ok = true
           else
             dkim_violated = "DKIM not aligned (relaxed)"
@@ -381,7 +381,7 @@ local function dmarc_validate_policy(task, policy, hdrfromdom)
           else
             local dkim_tld = rspamd_util.get_tld(domain)
 
-            if rspamd_util.strequal_caseless(dkim_tld, policy.domain) then
+            if rspamd_util.strequal_caseless(dkim_tld, dmarc_esld) then
               dkim_tmpfail = true
             end
           end
@@ -411,9 +411,9 @@ local function dmarc_validate_policy(task, policy, hdrfromdom)
 
   local function handle_dmarc_failure(what, reason_str)
     if not policy.pct or policy.pct == 100 then
-      task:insert_result(what, 1.0,
+      task:insert_result(dmarc_symbols[what], 1.0,
           policy.domain .. ' : ' .. reason_str, policy.dmarc_policy)
-      disposition = "quarantine"
+      disposition = what
     else
       if (math.random(100) > policy.pct) then
         if (not no_sampling_domains or
@@ -422,7 +422,7 @@ local function dmarc_validate_policy(task, policy, hdrfromdom)
               policy.domain .. ' : ' .. reason_str, policy.dmarc_policy, "sampled_out")
           sampled_out = true
         else
-          task:insert_result(what, 1.0,
+          task:insert_result(dmarc_symbols[what], 1.0,
               policy.domain .. ' : ' .. reason_str, policy.dmarc_policy, "local_policy")
           disposition = what
         end
@@ -459,7 +459,7 @@ local function dmarc_validate_policy(task, policy, hdrfromdom)
           ' : ' .. 'SPF/DKIM temp error', policy.dmarc_policy)
     else
       -- We can now check the failed policy and maybe send report data elt
-      local reason_str = table.concat(reason, ',')
+      local reason_str = table.concat(reason, ', ')
 
       if policy.dmarc_policy == 'quarantine' then
         handle_dmarc_failure('quarantine', reason_str)
@@ -577,20 +577,20 @@ local function dmarc_callback(task)
   local dmarc_domain_policy = {}
   local dmarc_tld_policy = {}
 
-  local function process_dmarc_policy(policy, is_tld)
-    lua_util.debugm(N, task, "validate DMARC policy (is_tld=%s): %s",
-        is_tld, policy)
+  local function process_dmarc_policy(policy, final)
+    lua_util.debugm(N, task, "validate DMARC policy (final=%s): %s",
+        true, policy)
     if policy.err and policy.symbol then
       -- In case of fatal errors or final check for tld, we give up and
       -- insert result
-      if is_tld or policy.fatal then
+      if final or policy.fatal then
         task:insert_result(policy.symbol, 1.0, policy.err)
         maybe_force_action(task, policy.disposition)
 
         return true
       end
     elseif policy.dmarc_policy then
-      dmarc_validate_policy(task, policy, hfromdom)
+      dmarc_validate_policy(task, policy, hfromdom, dmarc_domain)
 
       return true -- We have a more specific version, use it
     end
@@ -656,7 +656,9 @@ local function dmarc_callback(task)
         -- We have checked both tld and real domain (if different)
         if not process_dmarc_policy(dmarc_domain_policy, false) then
           -- Try tld policy as well
-          process_dmarc_policy(dmarc_tld_policy, true)
+          if not process_dmarc_policy(dmarc_tld_policy, true) then
+            process_dmarc_policy(dmarc_domain_policy, true)
+          end
         end
       end
     end