From 1926bfa1c58dac5ca212a5a043cbc5df5638be48 Mon Sep 17 00:00:00 2001 From: Joshua Tauberer Date: Wed, 11 Nov 2015 12:24:01 +0000 Subject: [PATCH] all DNS queries should have a timeout, fixes #591 --- management/dns_update.py | 4 +++- management/status_checks.py | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/management/dns_update.py b/management/dns_update.py index 4e7fd10e..195f8bc1 100755 --- a/management/dns_update.py +++ b/management/dns_update.py @@ -794,6 +794,7 @@ def set_custom_dns_record(qname, rtype, value, action, env): def get_secondary_dns(custom_dns, mode=None): resolver = dns.resolver.get_default_resolver() + resolver.timeout = 10 values = [] for qname, rtype, value in custom_dns: @@ -826,11 +827,12 @@ def set_secondary_dns(hostnames, env): if len(hostnames) > 0: # Validate that all hostnames are valid and that all zone-xfer IP addresses are valid. resolver = dns.resolver.get_default_resolver() + resolver.timeout = 5 for item in hostnames: if not item.startswith("xfr:"): # Resolve hostname. try: - response = dns.resolver.query(item, "A") + response = resolver.query(item, "A") except (dns.resolver.NoNameservers, dns.resolver.NXDOMAIN, dns.resolver.NoAnswer): raise ValueError("Could not resolve the IP address of %s." % item) else: diff --git a/management/status_checks.py b/management/status_checks.py index 73c16978..4b6947e0 100755 --- a/management/status_checks.py +++ b/management/status_checks.py @@ -594,6 +594,9 @@ def query_dns(qname, rtype, nxdomain='[Not Set]', at=None): resolver = dns.resolver.Resolver() resolver.nameservers = [at] + # Set a timeout so that a non-responsive server doesn't hold us back. + resolver.timeout = 5 + # Do the query. try: response = resolver.query(qname, rtype)