Mercurial > dnsbl
diff src/dnsbl.cpp @ 328:b4f766947202
allow multiple dkim signers in authentication results
author | Carl Byington <carl@five-ten-sg.com> |
---|---|
date | Sun, 18 Dec 2016 17:55:16 -0800 |
parents | 51846836ec92 |
children | c9932c4d8053 |
line wrap: on
line diff
--- a/src/dnsbl.cpp Sun Dec 18 17:19:50 2016 -0800 +++ b/src/dnsbl.cpp Sun Dec 18 17:55:16 2016 -0800 @@ -324,7 +324,7 @@ return ip.s_addr; } } - int n = strlen(question); + size_t n = strlen(question); if (question[n-1] == '.') { priv.my_write(question, n+1); // write the question including the null terminator } @@ -1104,18 +1104,16 @@ const char *to_lower_string(const char *email); const char *to_lower_string(const char *email) { if (!email) return strdup("<>"); - int n = strlen(email); - if (n == 0) return strdup("<>"); - if (email[0] == '<') { - // assume it also ends with > - n -= 2; - if (n < 1) return strdup("<>"); - email++; - } - if ((email[0] == '\'') && (email[n-1] == '\'') && (n > 2)) { + size_t n = strlen(email); + if ((n > 1) && (email[0] == '<') && (email[n-1] == '>')) { n -= 2; email++; } + if ((n > 1) && (email[0] == '\'') && (email[n-1] == '\'')) { + n -= 2; + email++; + } + if (n ==0) return strdup("<>"); char *key = strdup(email); key[n] = '\0'; for (int i=0; i<n; i++) key[i] = tolower(key[i]); @@ -1458,7 +1456,7 @@ char msg[maxlen]; if ((priv.header_count < 4) || (strcasecmp(headerf, "from") == 0)) { snprintf(msg, sizeof(msg), "header %s: %s", headerf, headerv); - for (int i=0; i<strlen(msg); i++) { + for (size_t i=0; i<strlen(msg); i++) { if (msg[i] < 0x20) msg[i] = ' '; } my_syslog(&priv, msg); @@ -1472,17 +1470,17 @@ if (priv.dkim_ok) { const int nmatch = 2; regmatch_t match[nmatch]; - int offset = 0; + char *msgo = msg; while (true) { - if (0 == regexec(&dkim_pattern, msg+offset, nmatch, match, 0)) { + if (0 == regexec(&dkim_pattern, msgo, nmatch, match, 0)) { int s1 = match[1].rm_so; // domain int e1 = match[1].rm_eo; if (s1 != -1) { - char save = msg[offset+e1]; - msg[offset+e1] = '\0'; - priv.dkim_signers.insert(strdup(msg+offset+s1)); - msg[offset+e1] = save; - offset += e1 + 1; + char save = msgo[e1]; + msgo[e1] = '\0'; + priv.dkim_signers.insert(strdup(msgo+s1)); + msgo[e1] = save; + msgo += e1 + 1; } else break; } @@ -1490,6 +1488,8 @@ } } } + } + if ((priv.header_count > 2) && (strcasecmp(headerf, "from"))) { const int nmatch = 2; regmatch_t match[nmatch]; @@ -1502,7 +1502,6 @@ } } } - } // headers that avoid autowhitelisting if (((strcasecmp(headerf, "precedence") == 0) && (strcasecmp(headerv, "bulk") == 0)) ||