Make SES package optional. Initial honeypot support.

This commit is contained in:
Stuart Gathman
2005-07-14 03:23:33 +00:00
parent e3b18d61c9
commit b28a56ea37
+24 -7
View File
@@ -1,6 +1,9 @@
#!/usr/bin/env python
# A simple milter that has grown quite a bit.
# $Log$
# Revision 1.15 2005/07/06 04:05:40 customdesigned
# Initial SES integration.
#
# Revision 1.14 2005/07/02 23:27:31 customdesigned
# Don't match hostnames for internal connects.
#
@@ -243,9 +246,11 @@ from email.Header import decode_header
# Import pysrs if available
try:
import SRS
import SES
srsre = re.compile(r'^SRS[01][+-=]',re.IGNORECASE)
except: SRS = None
try:
import SES
except: SES = None
# Import spf if available
try: import spf
@@ -290,6 +295,7 @@ dspam_internal = True # True if internal mail should be dspammed
dspam_reject = ()
dspam_sizelimit = 180000
srs = None
ses = None
srs_reject_spoofed = False
srs_domain = None
spf_reject_neutral = ()
@@ -472,10 +478,13 @@ def read_config(list):
else:
srs = SRS.Guarded.Guarded(secret=srs_secret,
maxage=maxage,hashlength=hashlength,separator=separator)
srs_domain = cp.getlist('srs','ses')
if SES:
ses = SES.new(secret=srs_secret,expiration=maxage)
srs_domain = cp.getlist('srs','ses')
else:
srs_domain = []
srs_domain.append(cp.getdefault('srs','fwdomain'))
ses = SES.new(secret=srs_secret,expiration=maxage)
print srs_domain
#print srs_domain
def parse_addr(t):
if t.startswith('<') and t.endswith('>'): t = t[1:-1]
@@ -501,7 +510,7 @@ def parse_header(val):
except UnicodeError: continue
except UnicodeDecodeError: pass
except LookupError: pass
except email.errors.HeaderParseError: pass
except email.Errors.HeaderParseError: pass
return val
class bmsMilter(Milter.Milter):
@@ -648,7 +657,7 @@ class bmsMilter(Milter.Milter):
else:
self.log("REJECT: zombie PC at ",self.connectip," sending MAIL FROM ",
self.canon_from)
self.setreply('550','5.7.1','Get rid of your virus!',
self.setreply('550','5.7.1',
'Your PC is using an unauthorized MAIL FROM.',
'It is either badly misconfigured or controlled by organized crime.'
)
@@ -787,7 +796,10 @@ class bmsMilter(Milter.Milter):
if srs and domain in srs_domain:
oldaddr = '@'.join(parse_addr(to))
try:
newaddr = ses.verify(oldaddr)
if ses:
newaddr = ses.verify(oldaddr)
else:
newaddr = oldaddr,
if len(newaddr) > 1:
self.log("ses rcpt:",newaddr[0])
else:
@@ -1049,6 +1061,11 @@ class bmsMilter(Milter.Milter):
if len(txt) > dspam_sizelimit:
self.log("Large message:",len(txt))
return False
if user == 'honeypot':
ds.check_spam(user,txt,force_result=dspam.DSR_ISSPAM)
self.log("HONEYPOT:",rcpt)
self.fp = None
return False
txt = ds.check_spam(user,txt,self.recipients)
if not txt:
# DISCARD if quarrantined for any recipient. It