From 4d69b8fbfe95cd56e2b824fb203be1975386dac8 Mon Sep 17 00:00:00 2001
From: Stuart Gathman <stuart@gathman.org>
Date: Fri, 26 Jan 2007 03:47:23 +0000
Subject: [PATCH] Handle null in header value.

---
 bms.py      | 24 +++++++++++++++---------
 milter.spec |  1 +
 2 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/bms.py b/bms.py
index 65364c6..6acc893 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.91  2007/01/25 22:47:25  customdesigned
+# Persist blacklisting from delayed DSNs.
+#
 # Revision 1.90  2007/01/23 19:46:20  customdesigned
 # Add private relay.
 #
@@ -701,11 +704,10 @@ class bmsMilter(Milter.Milter):
         elif hres == 'pass':
           qual = 'HELO'
           domain = self.spf.h
-        elif self.missing_ptr and self.spf.result == 'none':
-          qual = 'IP'
-          domain = self.connectip
-        else:
-          qual = self.connectip
+        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())
           res,hdr,val = gossip_node.query(umis,domain,qual,1)
@@ -945,8 +947,8 @@ class bmsMilter(Milter.Milter):
         self.reject_spam = False
     self.smart_alias(to)
     # get recipient after virtusertable aliasing
-    rcpt = self.getsymval("{rcpt_addr}")
-    self.log("rcpt-addr",rcpt);
+    #rcpt = self.getsymval("{rcpt_addr}")
+    #self.log("rcpt-addr",rcpt);
     return Milter.CONTINUE
 
   # Heuristic checks for spam headers
@@ -1480,8 +1482,12 @@ class bmsMilter(Milter.Milter):
 
     for name,val,idx in self.new_headers:
       try:
-        self.addheader(name,val,idx)
-      except:
+	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
 
     if self.cbv_needed:
diff --git a/milter.spec b/milter.spec
index a10c2d3..dbf3737 100644
--- a/milter.spec
+++ b/milter.spec
@@ -182,6 +182,7 @@ rm -rf $RPM_BUILD_ROOT
 - fix plock for missing source and can't change owner/group
 - add sample spfmilter.py milter
 - private_relay config option
+- persist delayed DSN blacklisting
 * Sat Nov 04 2006 Stuart Gathman <stuart@bmsi.com> 0.8.7-1
 - More lame bounce heuristics
 - SPF moved to pyspf RPM
-- 
GitLab