diff --git a/bms.py b/bms.py index 39d0d9c6af1ccf4431705d5d4b544f077388e158..60f04f3d37cde6693911db477cbd7af3c1bd8f4a 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.122 2008/05/08 21:35:56 customdesigned +# Allow explicitly whitelisted email from banned_users. +# # Revision 1.121 2008/04/10 14:59:35 customdesigned # Configure gossip TTL. # @@ -496,6 +499,12 @@ def findsrs(fp): lastln = ln break +def param2dict(str): + pairs = [x.split('=',1) for x in str] + for e in pairs: + if len(e) < 2: e.append(None) + return dict([(k.upper(),v) for k,v in pairs]) + class SPFPolicy(object): "Get SPF policy by result from sendmail style access file." def __init__(self,sender): @@ -721,6 +730,9 @@ class bmsMilter(Milter.Milter): # of each message. def envfrom(self,f,*str): self.log("mail from",f,str) + #param = param2dict(str) + #self.envid = param.get('ENVID',None) + #self.mail_param = param self.fp = StringIO.StringIO() self.tempname = None self.mailfrom = f @@ -1077,6 +1089,15 @@ class bmsMilter(Milter.Milter): # track header mods separately from body mods - so use only # in emergencies. def envrcpt(self,to,*str): + try: + param = param2dict(str) + self.notify = param.get('NOTIFY','FAILURE,DELAY').upper().split(',') + if 'NEVER' in self.notify: self.notify = () + #self.rcpt_param = param + except: + self.log("REJECT: invalid PARAM:",to,str) + self.setreply('550','5.7.1','Invalid SRS signature') + return Milter.REJECT # mail to MAILER-DAEMON is generally spam that bounced if to.startswith('<MAILER-DAEMON@'): self.log('REJECT: RCPT TO:',to,str) diff --git a/milter.cfg b/milter.cfg index 98ee5340e22e6f7278f88a8215aa3622de0bd59c..6ae81a3785a6930b659ea7178f5ad06bced692a1 100644 --- a/milter.cfg +++ b/milter.cfg @@ -61,7 +61,7 @@ porn_words = penis, breast, pussy, horse cock, porn, xenical, diet pill, d1ck, p-e-n-i-s, hydrocodone, vicodin, xanax, vicod1n, x@nax, diazepam, v1@gra, xan@x, cialis, ci@lis, fr�e, x�nax, val�um, v�lium, via-gra, x@n3x, vicod3n, pen�s, c0d1n, phentermine, en1arge, dip1oma, v1codin, - valium, rolex, sexual, fuck, adv1t + valium, rolex, sexual, fuck, adv1t, vgaira, medz # reject mail with these case sensitive strings in the subject spam_words = $$$, !!!, XXX, FREE, HGH # attachments with these extensions will be replaced with a warning diff --git a/pymilter.spec b/pymilter.spec index 3baf416802a2e7484dec8cee9daff07b99070c5e..b63f12dc7e40653cae3a4e949ccae374aa5de7b1 100644 --- a/pymilter.spec +++ b/pymilter.spec @@ -2,8 +2,8 @@ # module. To compile all three on 32-bit Intel, use: # rpmbuild -ba --target=i386,noarch pymilter.spec -%define version 0.8.9 -%define release 2 +%define version 0.8.10 +%define release 1 # what version of RH are we building for? %define redhat7 0 @@ -278,7 +278,7 @@ rm -rf $RPM_BUILD_ROOT - improved parsing into email and fullname - implement no-DSN CBV - check for porn words in MAIL FROM fullname -- ban IP for too many bad MAIL FROMs +- ban IP for too many bad MAIL FROMs or RCPT TOs - temperror policy in access - no CBV for whitelisted MAIL FROM except permerror, softfail * Mon Sep 24 2007 Stuart Gathman <stuart@bmsi.com> 0.8.9-1