From 939fc61df7562ac2fd9f2ca0e7ec52d66022a8ea Mon Sep 17 00:00:00 2001
From: Stuart Gathman <stuart@gathman.org>
Date: Thu, 2 Jul 2009 19:41:12 +0000
Subject: [PATCH] Handle @ in localpart.

---
 Milter/__init__.py | 4 ++++
 Milter/dsn.py      | 5 ++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/Milter/__init__.py b/Milter/__init__.py
index 217514e..2cf16f9 100755
--- a/Milter/__init__.py
+++ b/Milter/__init__.py
@@ -458,6 +458,10 @@ class Milter(Base):
 # This factory method is called for each connection to create the
 # python object that tracks the connection.  It should return
 # an object derived from Milter.Base.
+#
+# Note that since python is dynamic, this variable can be changed while
+# the milter is running: for instance, to a new subclass based on a 
+# change in configuration.
 factory = Milter
 
 ## @private
diff --git a/Milter/dsn.py b/Milter/dsn.py
index 290fdd0..64ab8a2 100644
--- a/Milter/dsn.py
+++ b/Milter/dsn.py
@@ -5,6 +5,9 @@
 # Send DSNs, do call back verification,
 # and generate DSN messages from a template
 # $Log$
+# Revision 1.18  2009/06/10 18:01:59  customdesigned
+# Doxygen updates
+#
 # Revision 1.17  2009/05/20 20:08:44  customdesigned
 # Support non-DSN CBV (non-empty MAIL FROM)
 #
@@ -79,7 +82,7 @@ def send_dsn(mailfrom,receiver,msg=None,timeout=600,session=None,ourfrom=''):
      Mailfrom is original sender we are sending DSN or CBV to.
      Receiver is the MTA sending the DSN.
      Return None for success or (code,msg) for failure."""
-  user,domain = mailfrom.split('@')
+  user,domain = mailfrom.rsplit('@',1)
   if not session: session = dns.Session()
   try:
     mxlist = session.dns(domain,'MX')
-- 
GitLab