From 4013365a3d8a0a6a11f6906769e7fc352f69901e Mon Sep 17 00:00:00 2001 From: Stuart Gathman <stuart@gathman.org> Date: Sat, 17 Mar 2007 21:22:48 +0000 Subject: [PATCH] New delayed DSN pattern. Retab (expandtab). --- bms.py | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/bms.py b/bms.py index 6413e98..3487255 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.95 2007/03/03 19:18:57 customdesigned +# Fix continuing findsrs when srs.reverse fails. +# # Revision 1.94 2007/03/03 18:46:26 customdesigned # Improve delayed failure detection. # @@ -145,7 +148,8 @@ _subjpats = ( r'^failed', r'^mail failed', r'^echec de distribution', r'^fallo en la entrega', - r'\bfehlgeschlagen\b' + r'\bfehlgeschlagen\b', + r'^error sending\b' ) refaildsn = re.compile('|'.join(_subjpats),re.IGNORECASE) @@ -381,7 +385,7 @@ def findsrs(fp): name,val = lastln.rstrip().split(None,1) pos = val.find('<SRS') if pos >= 0: - end = val.find('>',pos+4) + end = val.find('>',pos+4) return srs.reverse(val[pos+1:end]) except: pass lnl = ln.lower() @@ -727,9 +731,9 @@ class bmsMilter(Milter.Milter): elif hres == 'pass': qual = 'HELO' domain = self.spf.h - else: - # No good identity: blame purported domain. Qualify by SPF - # result so NEUTRAL will get separate reputation from SOFTFAIL. + else: + # No good identity: blame purported domain. Qualify by SPF + # result so NEUTRAL will get separate reputation from SOFTFAIL. qual = res try: umis = gossip.umis(domain+qual,self.id+time.time()) @@ -933,7 +937,7 @@ class bmsMilter(Milter.Milter): if not self.internal_connection and domain in private_relay: self.log('REJECT: RELAY:',to) - self.setreply('550','5.7.1','Unauthorized relay for %s' % domain) + self.setreply('550','5.7.1','Unauthorized relay for %s' % domain) return Milter.REJECT # non DSN mail to SRS address will bounce due to invalid local part @@ -1087,7 +1091,7 @@ class bmsMilter(Milter.Milter): return rc elif self.whitelist_sender and lname == 'subject': # check for AutoReplys - if reautoreply.match(val): + if reautoreply.match(val): self.whitelist_sender = False self.log('AUTOREPLY: not whitelisted') @@ -1411,8 +1415,8 @@ class bmsMilter(Milter.Milter): sender = findsrs(self.fp) if sender: cbv_cache[sender] = 550,self.delayed_failure - # make blacklisting persistent, since delayed DSNs are expensive - blacklist[sender] = None + # make blacklisting persistent, since delayed DSNs are expensive + blacklist[sender] = None try: # save message for debugging fname = tempfile.mktemp(".dsn") @@ -1507,11 +1511,11 @@ class bmsMilter(Milter.Milter): for name,val,idx in self.new_headers: try: - try: - self.addheader(name,val,idx) - except TypeError: - val = val.replace('\x00',r'\x00') - self.addheader(name,val,idx) + try: + self.addheader(name,val,idx) + except TypeError: + val = val.replace('\x00',r'\x00') + self.addheader(name,val,idx) except Milter.error: self.addheader(name,val) # older sendmail can't insheader -- GitLab