diff --git a/NEWS b/NEWS index f0c7c0b2dfc18123f5588049087b373c36d53be6..a994cbf71e5513792e5c7bbf683c277696c1af97 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,17 @@ Here is a history of user visible changes to Python milter. -0.8.6 +0.8.6 Delay reject of unsigned RCPT for postmaster and abuse only + Fix dsn reporting of hard permerror + Resolve FIXME for wrap_close in miltermodule.c + Add Message-ID to DSNs + Use signed Message-ID in delayed reject to blacklist senders + Auto-train via blacklist and auto-whitelist + Don't check userlist for signed MFROM + Accept but skip DSPAM training for whitelisted senders without SPF PASS + Report GC stats + Support CIDR matching for IP lists + Support pysrs sign feature + Support localpart specific SPF policy in access file 0.8.5 Simple trusted_forwarder implementation. Fix access_file neutral policy Move Received-SPF header to beginning of headers diff --git a/TODO b/TODO index b38a7db69a45400fe4e561ac864d8de6d0976e90..9be6a78ee2926499f4ae68a802fa52c53e18b586 100644 --- a/TODO +++ b/TODO @@ -1,3 +1,6 @@ +Make all dictionaries work like honeypot. Do not train as ham unless +whitelisted. Train on blacklisted messages, or spam feedback. + Allow unsigned DSNs from selected domains (that don't accept signed MFROM, e.g. verizon.net). diff --git a/bms.py b/bms.py index 642a4d896d4f33c65ce865598d73545de22fa268..6414f7112efb627ec7bf86385a3e2c003e3b3903 100644 --- a/bms.py +++ b/bms.py @@ -1,6 +1,9 @@ #!/usr/bin/env python # A simple milter that has grown quite a bit. # $Log$ +# Revision 1.57 2006/03/07 20:50:54 customdesigned +# Use signed Message-ID in delayed reject to blacklist senders +# # Revision 1.56 2006/02/24 02:12:54 customdesigned # Properly report hard PermError (lax mode fails also) by always setting # perm_error attribute with PermError exception. Improve reporting of @@ -222,6 +225,14 @@ try: import spf except: spf = None ip4re = re.compile(r'^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$') +subjpats = ( + r'^failure notice', + r'^returned mail', + r'^undeliverable', + r'^delivery\b.*\bfailure', + r'^delivery problem', +) +refaildsn = re.compile('|'.join(subjpats),re.IGNORECASE) import logging # Thanks to Chris Liechti for config parsing suggestions @@ -1168,12 +1179,10 @@ class bmsMilter(Milter.Milter): # check for delayed bounce of CBV if self.is_bounce and srs: - for w in ("delivery failure", "failure notice", - "returned mail", "undeliverable"): - if lval.startswith(w): - self.delayed_failure = val.strip() - # if confirmed by finding our signed Message-ID, - # original sender (encoded in Message-ID) is blacklisted + if refaildsn.match(lval): + self.delayed_failure = val.strip() + # if confirmed by finding our signed Message-ID, + # original sender (encoded in Message-ID) is blacklisted # check for invalid message id if lname == 'message-id' and len(val) < 4: