From d289822f42706e94c9def389d276d4df50aad148 Mon Sep 17 00:00:00 2001
From: Stuart Gathman <stuart@gathman.org>
Date: Sat, 3 Mar 2007 18:19:40 +0000
Subject: [PATCH] Handle DNS error sending DSN.

---
 Milter/__init__.py |  2 +-
 Milter/dsn.py      | 10 ++++++++--
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/Milter/__init__.py b/Milter/__init__.py
index f289636..f8e35ee 100755
--- a/Milter/__init__.py
+++ b/Milter/__init__.py
@@ -9,7 +9,7 @@ import milter
 import thread
 
 from milter import ACCEPT,CONTINUE,REJECT,DISCARD,TEMPFAIL,	\
-  set_flags, setdbg, setbacklog, settimeout, \
+  set_flags, setdbg, setbacklog, settimeout, error,	\
   ADDHDRS, CHGBODY, ADDRCPT, DELRCPT, CHGHDRS,	\
   V1_ACTS, V2_ACTS, CURR_ACTS
 
diff --git a/Milter/dsn.py b/Milter/dsn.py
index 723d3a0..efdeef9 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.13  2007/01/04 18:01:11  customdesigned
+# Do plain CBV when template missing.
+#
 # Revision 1.12  2006/07/26 16:37:35  customdesigned
 # Support timeout.
 #
@@ -28,8 +31,11 @@ def send_dsn(mailfrom,receiver,msg=None,timeout=600):
      Receiver is the MTA sending the DSN.
      Return None for success or (code,msg) for failure."""
   user,domain = mailfrom.split('@')
-  q = spf.query(None,None,None)
-  mxlist = q.dns(domain,'MX')
+  try:
+    q = spf.query(None,None,None)
+    mxlist = q.dns(domain,'MX')
+  except spf.TempError:
+    return (450,'DNS Timeout: %s MX'%domain)	# temp error
   if not mxlist:
     mxlist = (0,domain),	# fallback to A record when no MX
   else:
-- 
GitLab