misc: do not use dns.resolver.query on later versions of dnspython (#70632)

This commit is contained in:
Benjamin Dauvergne 2022-10-25 07:44:12 +02:00
parent 6eea42ff67
commit 427021b5b2
3 changed files with 17 additions and 3 deletions

View File

@ -90,12 +90,21 @@ def is_valid_hostname(hostname):
return all(allowed.match(label) for label in labels)
def _resolver_resolve(domain):
try:
method = dns.resolver.resolve
except AttributeError:
# support for dnspython 2.0.0 on bullseye, prevent deprecation warning on later versions
method = dns.resolver.query
return method(domain, 'A', lifetime=1)
def check_dnsbl(dnsbl, remote_addr):
domain = '.'.join(reversed(remote_addr.split('.'))) + '.' + dnsbl
exception = None
log = logger.debug
try:
answers = dns.resolver.query(domain, 'A', lifetime=1)
answers = _resolver_resolve(domain)
result = any(answer.address for answer in answers)
except dns.resolver.NXDOMAIN as e:
exception = e

View File

@ -107,7 +107,9 @@ def test_http_headers(rf):
def test_dnsbl_ok():
from authentic2.utils.evaluate import dnsbl
with mock.patch('dns.resolver.resolve', return_value=[mock.Mock(address='127.0.0.2')]):
with mock.patch(
'authentic2.utils.evaluate._resolver_resolve', return_value=[mock.Mock(address='127.0.0.2')]
):
assert (
evaluate_condition(
"remote_addr in dnsbl('example.com')", ctx={'dnsbl': dnsbl, 'remote_addr': '1.2.3.4'}
@ -121,7 +123,7 @@ def test_dnsbl_nok():
from authentic2.utils.evaluate import dnsbl
with mock.patch('dns.resolver.resolve', side_effect=NXDOMAIN):
with mock.patch('authentic2.utils.evaluate._resolver_resolve', side_effect=NXDOMAIN):
assert (
evaluate_condition(
"remote_addr in dnsbl('example.com')", ctx={'dnsbl': dnsbl, 'remote_addr': '1.2.3.4'}

View File

@ -52,8 +52,10 @@ deps =
buster: django<2.3
buster: django-model-utils<4
buster: django-select2>=5,<6
buster: dnspython==1.16.0
bullseye: django<2.3
bullseye: django-model-utils<4
bullseye: dnspython==2.0.0
bullseye: django-select2>=5,<6
stable-backports: django>=3.2.12,<3.3
stable-backports: django-model-utils>=4.2,<4.3
@ -172,6 +174,7 @@ commands =
filterwarnings =
ignore
once:::authentic2.*
error:.*please use dns.resolver.resolve:DeprecationWarning:
junit_family=xunit2
[coverage:run]