From 8cf323d4eaea468b0749c29f010ec2f64a476c75 Mon Sep 17 00:00:00 2001 From: Scott Kitterman Date: Fri, 12 May 2023 01:13:46 -0400 Subject: [PATCH] Confine errors from dnspython to dnsplug and use dkim errors, since dkim.__init__.py doesn't import dns and needs dkim errors (LP: #2018646) --- ChangeLog | 4 +++- dkim/__init__.py | 2 +- dkim/dnsplug.py | 5 +++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 11c0c44..4dd47b3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,8 @@ -Version 1.1.4 +2023-05-12 Version 1.1.4 - Treat dns.resolver.NoNameservers like NXDOMAIN (not an error) (Thanks to David for the patch and the report) + - Confine errors from dnspython to dnsplug and use dkim errors, since + dkim.__init__.py doesn't import dns and needs dkim errors (LP: #2018646) 2023-04-30 Version 1.1.3 - Catch nacl.exceptions.ValueError and raise KeyFormatError, similar to how RSA key errors are treated (LP: #2018021) diff --git a/dkim/__init__.py b/dkim/__init__.py index b0d0a86..8b43f15 100644 --- a/dkim/__init__.py +++ b/dkim/__init__.py @@ -802,7 +802,7 @@ class DomainSigner(object): except binascii.Error as e: self.logger.error('KeyFormatError: {0}'.format(e)) return False - except dns.exception.Timeout as e: + except DnsTimeoutError as e: self.logger.error('DnsTimeoutError: Domain: {0} Selector: {1} Error message: {2}'.format( sig[b'd'], sig[b's'], e)) return False diff --git a/dkim/dnsplug.py b/dkim/dnsplug.py index 6580c45..1ea8e3a 100644 --- a/dkim/dnsplug.py +++ b/dkim/dnsplug.py @@ -27,6 +27,7 @@ __all__ = [ def get_txt_dnspython(name, timeout=5): """Return a TXT record associated with a DNS name.""" + import dkim try: a = dns.resolver.query(name, dns.rdatatype.TXT,raise_on_no_answer=False, lifetime=timeout) for r in a.response.answer: @@ -34,6 +35,10 @@ def get_txt_dnspython(name, timeout=5): return b"".join(list(r.items)[0].strings) except dns.resolver.NXDOMAIN: pass except dns.resolver.NoNameservers: pass + except dns.resolver.NoResolverConfiguration as e: + raise dkim.DnsTimeoutError('dns.resolver.NoResolverConfiguration: {0}'.format(e)) + except dns.exception.Timeout as e: + raise dkim.DnsTimeoutError('dns.exception.Timeout: {0}'.format(e)) return None