From c57507f3a4ed1f3314d0f57ad4f3469220b2cb6b Mon Sep 17 00:00:00 2001 From: Stanislav Levin Date: Mar 03 2023 03:59:32 +0000 Subject: dns: Fix support for dnspython 1.1x `nameservers` was transformed into the property in dnspython 2: https://github.com/rthalley/dnspython/commit/bbf0cfd239ffa6deeb67a4787bd292e9a972af74 This causes > AttributeError: type object 'Resolver' has no attribute 'nameservers' on the previous dnspython 1.1x. Fixes: https://pagure.io/freeipa/issue/9339 Signed-off-by: Stanislav Levin Reviewed-By: Alexander Bokovoy Reviewed-By: Rob Crittenden --- diff --git a/ipapython/dnsutil.py b/ipapython/dnsutil.py index 58de365..0e77d02 100644 --- a/ipapython/dnsutil.py +++ b/ipapython/dnsutil.py @@ -87,6 +87,7 @@ class DNSResolver(dns.resolver.Resolver): changes this to 5sec, while the previous one was 30sec. """ def __init__(self, *args, **kwargs): + self._nameservers = None super().__init__(*args, **kwargs) self.reset_ipa_defaults() self.resolve = getattr(super(), "resolve", self.query) @@ -144,7 +145,11 @@ class DNSResolver(dns.resolver.Resolver): nameservers.remove(ipv4_loopback) self.nameservers = nameservers - @dns.resolver.Resolver.nameservers.setter + @property + def nameservers(self): + return self._nameservers + + @nameservers.setter def nameservers(self, nameservers): """ *nameservers*, a ``list`` of nameservers with optional ports: @@ -181,7 +186,11 @@ class DNSResolver(dns.resolver.Resolver): nameservers = _nameservers # Call dns.resolver.Resolver.nameservers setter - dns.resolver.Resolver.nameservers.__set__(self, nameservers) + if hasattr(dns.resolver.Resolver, "nameservers"): + dns.resolver.Resolver.nameservers.__set__(self, nameservers) + else: + # old dnspython (<2) doesn't have 'nameservers' property + self._nameservers = nameservers # Set nameserver_ports after successfull call to setter self.nameserver_ports = nameserver_ports