changeset 335:354b15b8b263

header from may appear very early in unsigned messages
author Carl Byington <carl@five-ten-sg.com>
date Tue, 20 Dec 2016 16:54:32 -0800
parents a4f2fda72422
children c5b8971534eb
files dnsbl.spec.in src/dnsbl.cpp
diffstat 2 files changed, 8 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/dnsbl.spec.in	Tue Dec 20 09:20:15 2016 -0800
+++ b/dnsbl.spec.in	Tue Dec 20 16:54:32 2016 -0800
@@ -103,7 +103,7 @@
 
 
 %changelog
-* Sat Dec 17 2016 Carl Byington <carl@five-ten-sg.com> - 6.48-1
+* Tue Dec 20 2016 Carl Byington <carl@five-ten-sg.com> - 6.48-1
 - allow dkim whitelisting.
 
 * Wed Sep 21 2016 Carl Byington <carl@five-ten-sg.com> - 6.47-1
--- a/src/dnsbl.cpp	Tue Dec 20 09:20:15 2016 -0800
+++ b/src/dnsbl.cpp	Tue Dec 20 16:54:32 2016 -0800
@@ -1463,15 +1463,6 @@
 {
     mlfiPriv &priv = *MLFIPRIV;
     priv.header_count++;
-    char msg[maxlen];
-    if ((priv.header_count < 4) || (strcasecmp(headerf, "from") == 0)) {
-        snprintf(msg, sizeof(msg), "header %s: %s", headerf, headerv);
-        for (size_t i=0; i<strlen(msg); i++) {
-            if (msg[i] < 0x20) msg[i] = ' ';
-        }
-        my_syslog(&priv, msg);
-    }
-
     if (priv.dkim_ok) {
         if ((priv.header_count == 1) && (strcasecmp(headerf, "DKIM-Filter") != 0)) priv.dkim_ok = false;
         if (priv.header_count == 2) {
@@ -1480,7 +1471,7 @@
             if (priv.dkim_ok) {
                 const int nmatch = 2;
                 regmatch_t match[nmatch];
-                char *msgo = msg;
+                char *msgo = headerv;
                 while (true) {
                     if (0 == regexec(&dkim_pattern, msgo, nmatch, match, 0)) {
                         int s1 = match[1].rm_so;    // domain
@@ -1501,16 +1492,18 @@
     }
 
     // only look at the first from header
-    if ((priv.header_count > 2) && (!priv.fromaddr) && (strcasecmp(headerf, "from") == 0)) {
+    if ((!priv.fromaddr) && (strcasecmp(headerf, "from") == 0)) {
         const int nmatch = 2;
         regmatch_t match[nmatch];
-        int err = regexec(&from_pattern, msg, nmatch, match, 0);
+        int err = regexec(&from_pattern, headerv, nmatch, match, 0);
         if (err == 0) {
             int s1 = match[1].rm_so;    // domain
             int e1 = match[1].rm_eo;
             if (s1 != -1) {
-                msg[e1] = '\0';
-                priv.fromaddr = strdup(msg+s1);
+                char save = headerv[e1];
+                headerv[e1] = '\0';
+                priv.fromaddr = strdup(headerv+s1);
+                headerv[e1] = save;
             }
         }
     }