From 47fbf5a02b0789eb8ecdea21adddde1d2be6468f Mon Sep 17 00:00:00 2001 From: "Stuart D. Gathman" Date: Tue, 14 Jun 2011 16:40:16 -0400 Subject: [PATCH] pydns driver did not join split TXT records. Try for Milter.dns which follows CNAME (is this needed?) --- dkim/__init__.py | 2 +- dkim/dns.py | 22 +++++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/dkim/__init__.py b/dkim/__init__.py index dca0e0a..c3d32a0 100644 --- a/dkim/__init__.py +++ b/dkim/__init__.py @@ -348,7 +348,7 @@ class DKIM(object): try: pk = parse_public_key(base64.b64decode(pub[b'p'])) except (TypeError,UnparsableKeyError) as e: - raise KeyFormatError("could not parse public key: %s" % e) + raise KeyFormatError("could not parse public key (%s): %s" % (pub[b'p'],e)) include_headers = re.split(br"\s*:\s*", sig[b'h']) h = hasher() diff --git a/dkim/dns.py b/dkim/dns.py index 1d12a49..7d585bc 100644 --- a/dkim/dns.py +++ b/dkim/dns.py @@ -42,18 +42,30 @@ def get_txt_pydns(name): response = DNS.DnsRequest(name, qtype='txt').req() if not response.answers: return None - return response.answers[0]['data'][0] + return b''.join(response.answers[0]['data']) +def get_txt_Milter_dns(name): + """Return a TXT record associated with a DNS name.""" + # Older pydns releases don't like a trailing dot. + if name.endswith('.'): + name = name[:-1] + sess = Session() + a = sess.dns(name,'TXT') + if a: return b''.join(a[0]) + return None # Prefer dnspython if it's there, otherwise use pydns. try: import dns.resolver _get_txt = get_txt_dnspython except ImportError: - import DNS - DNS.DiscoverNameServers() - _get_txt = get_txt_pydns - + try: + from Milter.dns import Session + _get_txt = get_txt_Milter_dns + except ImportError: + import DNS + DNS.DiscoverNameServers() + _get_txt = get_txt_pydns def get_txt(name): """Return a TXT record associated with a DNS name.