diff src/dnsbl.cpp @ 327:51846836ec92

allow multiple dkim signers in authentication results
author Carl Byington <carl@five-ten-sg.com>
date Sun, 18 Dec 2016 17:19:50 -0800
parents 5e4b5540c8cc
children b4f766947202
line wrap: on
line diff
--- a/src/dnsbl.cpp	Sun Dec 18 16:51:33 2016 -0800
+++ b/src/dnsbl.cpp	Sun Dec 18 17:19:50 2016 -0800
@@ -1472,14 +1472,19 @@
             if (priv.dkim_ok) {
                 const int nmatch = 2;
                 regmatch_t match[nmatch];
+                int offset = 0;
                 while (true) {
-                    if (0 == regexec(&dkim_pattern, msg, nmatch, match, 0)) {
+                    if (0 == regexec(&dkim_pattern, msg+offset, nmatch, match, 0)) {
                         int s1 = match[1].rm_so;    // domain
                         int e1 = match[1].rm_eo;
                         if (s1 != -1) {
-                            msg[e1] = '\0';
-                            priv.dkim_signers.insert(strdup(msg+s1));
+                            char save = msg[offset+e1];
+                            msg[offset+e1] = '\0';
+                            priv.dkim_signers.insert(strdup(msg+offset+s1));
+                            msg[offset+e1] = save;
+                            offset += e1 + 1;
                         }
+                        else break;
                     }
                     else break;
                 }
@@ -1860,7 +1865,7 @@
     }
 
     // setup dkim signature detection
-    if (regcomp(&dkim_pattern, " dkim=pass .* header.d=([^ ]+) ", REG_ICASE | REG_EXTENDED)) {
+    if (regcomp(&dkim_pattern, " dkim=pass .[0-9]*-bit key. header.d=([^ ]+) ", REG_ICASE | REG_EXTENDED)) {
         printf("cannot compile regex pattern to find dkim signatures\n");
         exit(3);
     }