2020from acertmgr .modes .abstract import AbstractChallengeHandler
2121from acertmgr .tools import log
2222
23+ QUERY_TIMEOUT = 60 # seconds are the maximum for any query (otherwise the DNS server will be considered dead)
2324REGEX_IP4 = r'^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$'
2425REGEX_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 :
0 commit comments