Skip to content

Commit 9b10f10

Browse files
committed
dns.*: Use a static query timeout for any DNS queries using dnspython
1 parent 1a4272f commit 9b10f10

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

acertmgr/modes/dns/abstract.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from acertmgr.modes.abstract import AbstractChallengeHandler
2121
from acertmgr.tools import log
2222

23+
QUERY_TIMEOUT = 60 # seconds are the maximum for any query (otherwise the DNS server will be considered dead)
2324
REGEX_IP4 = r'^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$'
2425
REGEX_IP6 = r'^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}' \
2526
r':|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}' \
@@ -66,7 +67,7 @@ def _lookup_ns_ip(domain, nameserver=None):
6667
nameserver = DNSChallengeHandler._lookup_ip(zonemaster)
6768

6869
request = dns.message.make_query(zone, dns.rdatatype.NS)
69-
response = dns.query.udp(request, nameserver)
70+
response = dns.query.udp(request, nameserver, timeout=QUERY_TIMEOUT)
7071
retval = set()
7172
if response.rcode() == dns.rcode.NOERROR:
7273
for answer in response.answer:
@@ -95,7 +96,7 @@ def _lookup_zone(domain, nameserver=None):
9596
request = dns.message.make_query(domain, dns.rdatatype.SOA)
9697
for nameserver in nameservers:
9798
try:
98-
response = dns.query.udp(request, nameserver)
99+
response = dns.query.udp(request, nameserver, timeout=QUERY_TIMEOUT)
99100
if response.rcode() == dns.rcode.NOERROR:
100101
for answer in response.answer:
101102
for item in answer:
@@ -121,9 +122,9 @@ def _check_txt_record_value(domain, txtvalue, nameserverip, use_tcp=False):
121122
try:
122123
request = dns.message.make_query(domain, dns.rdatatype.TXT)
123124
if use_tcp:
124-
response = dns.query.tcp(request, nameserverip)
125+
response = dns.query.tcp(request, nameserverip, timeout=QUERY_TIMEOUT)
125126
else:
126-
response = dns.query.udp(request, nameserverip)
127+
response = dns.query.udp(request, nameserverip, timeout=QUERY_TIMEOUT)
127128
for rrset in response.answer:
128129
for answer in rrset:
129130
if answer.to_text().strip('"') == txtvalue:

acertmgr/modes/dns/nsupdate.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import dns.tsigkeyring
1313
import dns.update
1414

15-
from acertmgr.modes.dns.abstract import DNSChallengeHandler
15+
from acertmgr.modes.dns.abstract import DNSChallengeHandler, QUERY_TIMEOUT
1616
from acertmgr.tools import log
1717

1818
DEFAULT_KEY_ALGORITHM = "HMAC-MD5.SIG-ALG.REG.INT"
@@ -72,14 +72,14 @@ def add_dns_record(self, domain, txtvalue):
7272
update = dns.update.Update(zone, keyring=self.keyring, keyalgorithm=self.keyalgorithm)
7373
update.add(domain, self.dns_ttl, dns.rdatatype.TXT, txtvalue)
7474
log('Adding \'{} {} IN TXT "{}"\' to {}'.format(domain, self.dns_ttl, txtvalue, nameserverip))
75-
dns.query.tcp(update, nameserverip)
75+
dns.query.tcp(update, nameserverip, timeout=QUERY_TIMEOUT)
7676

7777
def remove_dns_record(self, domain, txtvalue):
7878
zone, nameserverip = self._determine_zone_and_nameserverip(domain)
7979
update = dns.update.Update(zone, keyring=self.keyring, keyalgorithm=self.keyalgorithm)
8080
update.delete(domain, dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.TXT, txtvalue))
8181
log('Deleting \'{} {} IN TXT "{}"\' from {}'.format(domain, self.dns_ttl, txtvalue, nameserverip))
82-
dns.query.tcp(update, nameserverip)
82+
dns.query.tcp(update, nameserverip, timeout=QUERY_TIMEOUT)
8383

8484
def verify_dns_record(self, domain, txtvalue):
8585
if self.nsupdate_verify and not self.dns_verify_all_ns and not self.nsupdate_verified:

0 commit comments

Comments
 (0)