New delayed DSN pattern. Retab (expandtab).
This commit is contained in:
@@ -1,6 +1,9 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# A simple milter that has grown quite a bit.
|
# A simple milter that has grown quite a bit.
|
||||||
# $Log$
|
# $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
|
# Revision 1.94 2007/03/03 18:46:26 customdesigned
|
||||||
# Improve delayed failure detection.
|
# Improve delayed failure detection.
|
||||||
#
|
#
|
||||||
@@ -145,7 +148,8 @@ _subjpats = (
|
|||||||
r'^failed', r'^mail failed',
|
r'^failed', r'^mail failed',
|
||||||
r'^echec de distribution',
|
r'^echec de distribution',
|
||||||
r'^fallo en la entrega',
|
r'^fallo en la entrega',
|
||||||
r'\bfehlgeschlagen\b'
|
r'\bfehlgeschlagen\b',
|
||||||
|
r'^error sending\b'
|
||||||
)
|
)
|
||||||
refaildsn = re.compile('|'.join(_subjpats),re.IGNORECASE)
|
refaildsn = re.compile('|'.join(_subjpats),re.IGNORECASE)
|
||||||
|
|
||||||
@@ -381,7 +385,7 @@ def findsrs(fp):
|
|||||||
name,val = lastln.rstrip().split(None,1)
|
name,val = lastln.rstrip().split(None,1)
|
||||||
pos = val.find('<SRS')
|
pos = val.find('<SRS')
|
||||||
if pos >= 0:
|
if pos >= 0:
|
||||||
end = val.find('>',pos+4)
|
end = val.find('>',pos+4)
|
||||||
return srs.reverse(val[pos+1:end])
|
return srs.reverse(val[pos+1:end])
|
||||||
except: pass
|
except: pass
|
||||||
lnl = ln.lower()
|
lnl = ln.lower()
|
||||||
@@ -728,8 +732,8 @@ class bmsMilter(Milter.Milter):
|
|||||||
qual = 'HELO'
|
qual = 'HELO'
|
||||||
domain = self.spf.h
|
domain = self.spf.h
|
||||||
else:
|
else:
|
||||||
# No good identity: blame purported domain. Qualify by SPF
|
# No good identity: blame purported domain. Qualify by SPF
|
||||||
# result so NEUTRAL will get separate reputation from SOFTFAIL.
|
# result so NEUTRAL will get separate reputation from SOFTFAIL.
|
||||||
qual = res
|
qual = res
|
||||||
try:
|
try:
|
||||||
umis = gossip.umis(domain+qual,self.id+time.time())
|
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:
|
if not self.internal_connection and domain in private_relay:
|
||||||
self.log('REJECT: RELAY:',to)
|
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
|
return Milter.REJECT
|
||||||
|
|
||||||
# non DSN mail to SRS address will bounce due to invalid local part
|
# non DSN mail to SRS address will bounce due to invalid local part
|
||||||
@@ -1087,7 +1091,7 @@ class bmsMilter(Milter.Milter):
|
|||||||
return rc
|
return rc
|
||||||
elif self.whitelist_sender and lname == 'subject':
|
elif self.whitelist_sender and lname == 'subject':
|
||||||
# check for AutoReplys
|
# check for AutoReplys
|
||||||
if reautoreply.match(val):
|
if reautoreply.match(val):
|
||||||
self.whitelist_sender = False
|
self.whitelist_sender = False
|
||||||
self.log('AUTOREPLY: not whitelisted')
|
self.log('AUTOREPLY: not whitelisted')
|
||||||
|
|
||||||
@@ -1411,8 +1415,8 @@ class bmsMilter(Milter.Milter):
|
|||||||
sender = findsrs(self.fp)
|
sender = findsrs(self.fp)
|
||||||
if sender:
|
if sender:
|
||||||
cbv_cache[sender] = 550,self.delayed_failure
|
cbv_cache[sender] = 550,self.delayed_failure
|
||||||
# make blacklisting persistent, since delayed DSNs are expensive
|
# make blacklisting persistent, since delayed DSNs are expensive
|
||||||
blacklist[sender] = None
|
blacklist[sender] = None
|
||||||
try:
|
try:
|
||||||
# save message for debugging
|
# save message for debugging
|
||||||
fname = tempfile.mktemp(".dsn")
|
fname = tempfile.mktemp(".dsn")
|
||||||
@@ -1507,11 +1511,11 @@ class bmsMilter(Milter.Milter):
|
|||||||
|
|
||||||
for name,val,idx in self.new_headers:
|
for name,val,idx in self.new_headers:
|
||||||
try:
|
try:
|
||||||
try:
|
try:
|
||||||
self.addheader(name,val,idx)
|
self.addheader(name,val,idx)
|
||||||
except TypeError:
|
except TypeError:
|
||||||
val = val.replace('\x00',r'\x00')
|
val = val.replace('\x00',r'\x00')
|
||||||
self.addheader(name,val,idx)
|
self.addheader(name,val,idx)
|
||||||
except Milter.error:
|
except Milter.error:
|
||||||
self.addheader(name,val) # older sendmail can't insheader
|
self.addheader(name,val) # older sendmail can't insheader
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user