Fall back to pydns if dnspython is unavailable.

This commit is contained in:
William Grant
2011-03-19 20:56:37 +11:00
parent f29addb823
commit 128288a20c
+24 -3
View File
@@ -25,8 +25,6 @@ import logging
import re
import time
import dns.resolver
from dkim.crypto import (
DigestTooLargeError,
parse_pem_private_key,
@@ -215,7 +213,8 @@ def rfc822_parse(message):
i += 1
return (headers, "\r\n".join(lines[i:]))
def dnstxt(name):
def dnstxt_dnspython(name):
"""Return a TXT record associated with a DNS name."""
a = dns.resolver.query(name, dns.rdatatype.TXT)
for r in a.response.answer:
@@ -223,6 +222,28 @@ def dnstxt(name):
return "".join(r.items[0].strings)
return None
def dnstxt_pydns(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]
DNS.ParseResolvConf()
response = DNS.DnsRequest(name, qtype='txt').req()
if not response.answers:
return None
return response.answers[0]['data'][0]
# Prefer dnspython if it's there, otherwise use pydns.
try:
import dns.resolver
dnstxt = dnstxt_dnspython
except ImportError:
import DNS
dnstxt = dnstxt_pydns
def fold(header):
"""Fold a header line into multiple crlf-separated lines at column 72."""
i = header.rfind("\r\n ")