Skip to content
Snippets Groups Projects
Commit 8bc182cb authored by Stuart Gathman's avatar Stuart Gathman
Browse files

Move Received-SPF header to top.

parent fb3c140d
No related branches found
No related tags found
No related merge requests found
#!/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.43 2005/12/09 16:54:01 customdesigned
# Select neutral DSN template for best_guess
#
# Revision 1.42 2005/12/01 22:42:32 customdesigned # Revision 1.42 2005/12/01 22:42:32 customdesigned
# improve gossip support. # improve gossip support.
# Initialize srs_domain from srs.srs config property. Should probably # Initialize srs_domain from srs.srs config property. Should probably
...@@ -779,8 +782,8 @@ class bmsMilter(Milter.Milter): ...@@ -779,8 +782,8 @@ class bmsMilter(Milter.Milter):
# addheader can only be called from eom(). This accumulates added headers # addheader can only be called from eom(). This accumulates added headers
# which can then be applied by alter_headers() # which can then be applied by alter_headers()
def add_header(self,name,val): def add_header(self,name,val,idx=-1):
self.new_headers.append((name,val)) self.new_headers.append((name,val,idx))
self.log('%s: %s' % (name,val)) self.log('%s: %s' % (name,val))
def connect(self,hostname,unused,hostaddr): def connect(self,hostname,unused,hostaddr):
...@@ -1023,10 +1026,11 @@ class bmsMilter(Milter.Milter): ...@@ -1023,10 +1026,11 @@ class bmsMilter(Milter.Milter):
elif policy != 'OK': elif policy != 'OK':
self.log('REJECT: no PTR, HELO or SPF') self.log('REJECT: no PTR, HELO or SPF')
self.setreply('550','5.7.1', self.setreply('550','5.7.1',
"You must have a reverse lookup or publish SPF: http://openspf.org", "You must have a valid HELO or publish SPF: http://www.openspf.org ",
"Contact your mail administrator IMMEDIATELY! Your mail server is ", "Contact your mail administrator IMMEDIATELY! Your mail server is ",
"severely misconfigured. It has no PTR record (dynamic PTR records ", "severely misconfigured. It has no PTR record (dynamic PTR records ",
"that contain your IP don't count), an invalid HELO, and no SPF record." "that contain your IP don't count), an invalid or dynamic HELO, ",
"and no SPF record."
) )
return Milter.REJECT return Milter.REJECT
if res in ('deny', 'fail'): if res in ('deny', 'fail'):
...@@ -1090,7 +1094,7 @@ class bmsMilter(Milter.Milter): ...@@ -1090,7 +1094,7 @@ class bmsMilter(Milter.Milter):
self.log('TEMPFAIL: SPF %s %i %s' % (res,code,txt)) self.log('TEMPFAIL: SPF %s %i %s' % (res,code,txt))
self.setreply(str(code),'4.3.0',txt) self.setreply(str(code),'4.3.0',txt)
return Milter.TEMPFAIL return Milter.TEMPFAIL
self.add_header('Received-SPF',q.get_header(res,receiver)) self.add_header('Received-SPF',q.get_header(res,receiver),0)
self.spf = q self.spf = q
if res == 'pass' and auto_whitelist.has_key(self.canon_from): if res == 'pass' and auto_whitelist.has_key(self.canon_from):
self.whitelist = True self.whitelist = True
...@@ -1285,7 +1289,7 @@ class bmsMilter(Milter.Milter): ...@@ -1285,7 +1289,7 @@ class bmsMilter(Milter.Milter):
if not self.fp: return Milter.TEMPFAIL # not seen by envfrom if not self.fp: return Milter.TEMPFAIL # not seen by envfrom
if not self.data_allowed: if not self.data_allowed:
return self.forged_bounce() return self.forged_bounce()
for name,val in self.new_headers: for name,val,idx in self.new_headers:
self.fp.write("%s: %s\n" % (name,val)) # add new headers to buffer self.fp.write("%s: %s\n" % (name,val)) # add new headers to buffer
self.fp.write("\n") # terminate headers self.fp.write("\n") # terminate headers
# log when neither sender nor from domains matches mail from domain # log when neither sender nor from domains matches mail from domain
...@@ -1578,8 +1582,8 @@ class bmsMilter(Milter.Milter): ...@@ -1578,8 +1582,8 @@ class bmsMilter(Milter.Milter):
self.addrcpt(self.mailfrom) self.addrcpt(self.mailfrom)
else: else:
self.alter_recipients(self.discard_list,self.redirect_list) self.alter_recipients(self.discard_list,self.redirect_list)
for name,val in self.new_headers: for name,val,idx in self.new_headers:
self.addheader(name,val) self.addheader(name,val,idx)
if self.cbv_needed: if self.cbv_needed:
q = self.cbv_needed q = self.cbv_needed
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment