aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rpkid/rpki/adns.py54
1 files changed, 21 insertions, 33 deletions
diff --git a/rpkid/rpki/adns.py b/rpkid/rpki/adns.py
index 273abf73..9f4f9ada 100644
--- a/rpkid/rpki/adns.py
+++ b/rpkid/rpki/adns.py
@@ -46,13 +46,26 @@ resolver = dns.resolver.Resolver()
if resolver.cache is None:
resolver.cache = dns.resolver.Cache()
-## @var nscache
-# Nameserver map, maps values from resolver.nameservers to (af,
-# address) pairs. The latter turns out to be a more useful form for
-# us to use internally, because it simplifies the checks we need to
-# make upon packet receiption.
-
-nscache = {}
+## @var nameservers
+# Nameservers from resolver.nameservers converted to (af, address)
+# pairs. The latter turns out to be a more useful form for us to use
+# internally, because it simplifies the checks we need to make upon
+# packet receiption.
+
+nameservers = []
+
+for ns in resolver.nameservers:
+ try:
+ nameservers.append((dns.inet.AF_INET, dns.ipv4.inet_aton(ns)))
+ continue
+ except:
+ pass
+ try:
+ nameservers.append((dns.inet.AF_INET6, dns.ipv6.inet_aton(ns)))
+ continue
+ except:
+ pass
+ rpki.log.error("Couldn't parse nameserver address %r" % ns)
class dispatcher(asyncore.dispatcher):
"""
@@ -137,34 +150,9 @@ class query(object):
self.request.use_edns(resolver.edns, resolver.ednsflags, resolver.payload)
self.response = None
self.backoff = 0.10
- self.clone_nameservers()
+ self.nameservers = nameservers[:]
self.loop1()
- def clone_nameservers(self):
- """
- Parse resolver.nameservers into (address family, address) pairs,
- cache result to speed up future queries, and construct nameserver
- list for this query.
- """
- for ns in resolver.nameservers:
- if ns not in nscache:
- try:
- addr = dns.ipv4.inet_aton(ns)
- except:
- pass
- else:
- nscache[ns] = (dns.inet.AF_INET, addr)
- continue
- try:
- addr = dns.ipv6.inet_aton(ns)
- except:
- pass
- else:
- nscache[ns] = (dns.inet.AF_INET6, addr)
- continue
- raise ValueError
- self.nameservers = [nscache[ns] for ns in resolver.nameservers]
-
def loop1(self):
"""
Outer loop. If we haven't got a response yet and still have