Selaa lähdekoodia

DKIM sign auto-responder messages by using mime from field

andryyy 8 vuotta sitten
vanhempi
sitoutus
2783510bef
1 muutettua tiedostoa jossa 25 lisäystä ja 18 poistoa
  1. 25 18
      data/conf/rspamd/local.d/dkim.conf

+ 25 - 18
data/conf/rspamd/local.d/dkim.conf

@@ -1,26 +1,33 @@
 sign_condition =<<EOD
 sign_condition =<<EOD
 return function(task)
 return function(task)
-  local from = task:get_from('smtp')
+  local smtp_from = task:get_from('smtp')
+  local mime_from = task:get_from('mime')
   local rspamd_logger = require "rspamd_logger"
   local rspamd_logger = require "rspamd_logger"
-  if not task:get_user() then
-    rspamd_logger.infox(task, "Skip DKIM signing for unauthorized user")
+  if smtp_from[1]['domain'] ~= nil and smtp_from[1]['domain'] ~= '' then
+    domain = smtp_from[1]['domain']
+    rspamd_logger.infox(task, "set domain found in smtp from field to %s", domain)
+    if not task:get_user() then
+      rspamd_logger.infox(task, "found domain in smtp header field, but user is not authenticated - skipped")
+      return false
+    end
+  elseif mime_from[1]['domain'] ~= nil and mime_from[1]['domain'] ~= '' then
+    domain = mime_from[1]['domain']
+    rspamd_logger.infox(task, "set domain found in mime from field to %s", domain)
+  else
+    rspamd_logger.infox(task, "cannot determine domain for dkim signing")
     return false
     return false
   end
   end
-  if from and from[1]['addr'] then
-    lastAtSymbol = from[1]['addr']:find("[^%@]+$")
-    local domain = from[1]['addr']:sub(lastAtSymbol, #from[1]['addr'])
-    local keyfile = io.open("/data/dkim/keys/" .. domain .. ".dkim")
-    if keyfile then
-      rspamd_logger.infox(task, "DKIM signing mail for authorized user of domain %s", domain)
-      keyfile:close()
-      return {
-        key = "/data/dkim/keys/" .. domain .. ".dkim",
-        domain = domain,
-        selector = "dkim"
-      }
-    else
-      rspamd_logger.infox(task, "Authorized user, but no key file for domain %s - skipped DKIM signing", domain)
-    end
+  local keyfile = io.open("/data/dkim/keys/" .. domain .. ".dkim")
+  if keyfile then
+    rspamd_logger.infox(task, "found dkim key file for domain %s", domain)
+    keyfile:close()
+    return {
+      key = "/data/dkim/keys/" .. domain .. ".dkim",
+      domain = domain,
+      selector = "dkim"
+    }
+  else
+    rspamd_logger.infox(task, "no key file for domain %s - skipped", domain)
   end
   end
   return false
   return false
 end
 end