# HG changeset patch # User Carl Byington # Date 1241812530 25200 # Node ID ad38575e98ca50ff952a72187e08b92588242b95 # Parent b3652d1ae010ed646e05fee410f2b9d198c25739 Prevent auto whitelisting due to outgoing multipart/report delivery notifications. diff -r b3652d1ae010 -r ad38575e98ca ChangeLog --- a/ChangeLog Sat Feb 07 11:31:59 2009 -0800 +++ b/ChangeLog Fri May 08 12:55:30 2009 -0700 @@ -1,3 +1,7 @@ +6.22 2009-05-08 + Prevent auto whitelisting due to outgoing multipart/report + delivery notifications. + 6.21 2009-01-03 Fixes to compile on old systems without memrchr or string::clear(). Fix bug in spamassassin interface trying to clear a string with diff -r b3652d1ae010 -r ad38575e98ca NEWS --- a/NEWS Sat Feb 07 11:31:59 2009 -0800 +++ b/NEWS Fri May 08 12:55:30 2009 -0700 @@ -1,3 +1,4 @@ +6.22 2009-05-08 Prevent auto whitelisting due to outgoing multipart/report delivery notifications. 6.21 2009-01-03 Fixes to compile on old systems without memrchr or string::clear(). 6.20 2008-12-27 Never whitelist self addressed mail. 6.19 2008-06-10 Fixes to compile on Fedora 9 and for const correctness. diff -r b3652d1ae010 -r ad38575e98ca configure.in --- a/configure.in Sat Feb 07 11:31:59 2009 -0800 +++ b/configure.in Fri May 08 12:55:30 2009 -0700 @@ -1,6 +1,6 @@ AC_PREREQ(2.59) -AC_INIT(dnsbl,6.21,carl@five-ten-sg.com) +AC_INIT(dnsbl,6.22,carl@five-ten-sg.com) AC_CONFIG_SRCDIR([config.h.in]) AC_CONFIG_HEADER([config.h]) diff -r b3652d1ae010 -r ad38575e98ca dnsbl.spec.in --- a/dnsbl.spec.in Sat Feb 07 11:31:59 2009 -0800 +++ b/dnsbl.spec.in Fri May 08 12:55:30 2009 -0700 @@ -96,6 +96,10 @@ %changelog +* Fri May 08 2009 Carl Byington - 6.22-1 +- Prevent auto whitelisting due to outgoing multipart/report + delivery notifications. + * Sat Jan 03 2009 Carl Byington - 6.21-1 - Fixes to compile on old systems without memrchr or string::clear(). - Fix bug in spamassassin interface trying to clear a string with string::empty(). diff -r b3652d1ae010 -r ad38575e98ca src/dnsbl.cpp --- a/src/dnsbl.cpp Sat Feb 07 11:31:59 2009 -0800 +++ b/src/dnsbl.cpp Fri May 08 12:55:30 2009 -0700 @@ -271,7 +271,7 @@ want_spamassassin = false; want_dccgrey = false; want_dccbulk = false; - is_bulk_precedence = false; + allow_autowhitelisting = true; content_context = NULL; memory = NULL; scanner = NULL; @@ -323,7 +323,7 @@ want_spamassassin = false; want_dccgrey = false; want_dccbulk = false; - is_bulk_precedence = false; + allow_autowhitelisting = true; content_context = NULL; memory = NULL; scanner = NULL; @@ -1177,8 +1177,11 @@ { mlfiPriv &priv = *MLFIPRIV; // detect precedence:bulk for avoiding autowhitelisting - if ((strcasecmp(headerf, "precedence") == 0) && - (strcasecmp(headerv, "bulk") == 0)) priv.is_bulk_precedence = true; + if (((strcasecmp(headerf, "precedence") == 0) && (strcasecmp(headerv, "bulk") == 0)) || + ((strcasecmp(headerf, "content-type") == 0) && (strncasecmp(headerv, "multipart/report", 16) == 0))) { + priv.allow_autowhitelisting = false; + } + // other headers are only needed for content filtering if (priv.authenticated) return SMFIS_CONTINUE; if (priv.only_whites) return SMFIS_CONTINUE; @@ -1193,7 +1196,7 @@ // delayed autowhitelisting while (!priv.delayer.empty()) { DELAYWHITEP dwp = priv.delayer.front(); - if (!priv.is_bulk_precedence) { + if (priv.allow_autowhitelisting) { const char *loto = dwp->get_loto(); WHITELISTERP w = dwp->get_w(); CONTEXTP con2 = dwp->get_con(); diff -r b3652d1ae010 -r ad38575e98ca src/dnsbl.h --- a/src/dnsbl.h Sat Feb 07 11:31:59 2009 -0800 +++ b/src/dnsbl.h Fri May 08 12:55:30 2009 -0700 @@ -44,7 +44,7 @@ bool want_spamassassin; // at least one non-whitelisted recipient has a non zero spamassassin limit bool want_dccgrey; // at least one non-whitelisted recipient wants dcc greylisting bool want_dccbulk; // at least one non-whitelisted recipient wants dcc bulk filtering - bool is_bulk_precedence; // have precedence:bulk header to prevent autowhitelisting + bool allow_autowhitelisting; // precedence:bulk or content-type:multipart/report headers prevent autowhitelisting delay_whitelist delayer; // to remember autowhitelisting until we see headers CONTEXT *content_context; // first non-whitelisted recipient with a content filtering context context_map env_to; // map each non-whitelisted recipient to their filtering context