]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
Support per-nameserver port setting. 111/head
authorRobert Estelle <robert@getpreo.com>
Thu, 9 Oct 2014 21:51:21 +0000 (17:51 -0400)
committerRobert Estelle <robert@getpreo.com>
Tue, 14 Jul 2015 01:17:39 +0000 (21:17 -0400)
This change is backwards-compatible by maintaining a nameserver_port
mapping dict.

dns/resolver.py

index b16f05d3a6db85683c4eaa7cd002ca84a9cf3c02..e27ea7a496f7c9a206e443be91f78174b52163f9 100644 (file)
@@ -526,8 +526,9 @@ class Resolver(object):
         if len(self.domain) == 0:
             self.domain = dns.name.root
         self.nameservers = []
-        self.search = []
+        self.nameserver_ports = {}
         self.port = 53
+        self.search = []
         self.timeout = 2.0
         self.lifetime = 30.0
         self.keyring = None
@@ -855,16 +856,17 @@ class Resolver(object):
                     raise NoNameservers(request=request, errors=errors)
                 for nameserver in nameservers[:]:
                     timeout = self._compute_timeout(start)
+                    port = self.nameserver_ports.get(nameserver, self.port)
                     try:
                         tcp_attempt = tcp
                         if tcp:
                             response = dns.query.tcp(request, nameserver,
-                                                     timeout, self.port,
+                                                     timeout, port,
                                                      source=source,
                                                      source_port=source_port)
                         else:
                             response = dns.query.udp(request, nameserver,
-                                                     timeout, self.port,
+                                                     timeout, port,
                                                      source=source,
                                                      source_port=source_port)
                             if response.flags & dns.flags.TC:
@@ -872,7 +874,7 @@ class Resolver(object):
                                 tcp_attempt = True
                                 timeout = self._compute_timeout(start)
                                 response = dns.query.tcp(request, nameserver,
-                                                       timeout, self.port,
+                                                       timeout, port,
                                                        source=source,
                                                        source_port=source_port)
                     except (socket.error, dns.exception.Timeout) as ex:
@@ -880,7 +882,7 @@ class Resolver(object):
                         # Communication failure or timeout.  Go to the
                         # next server
                         #
-                        errors.append((nameserver, tcp_attempt, self.port, ex,
+                        errors.append((nameserver, tcp_attempt, port, ex,
                                        response))
                         response = None
                         continue
@@ -888,7 +890,7 @@ class Resolver(object):
                         #
                         # Who knows?  Keep going.
                         #
-                        errors.append((nameserver, tcp_attempt, self.port, ex,
+                        errors.append((nameserver, tcp_attempt, port, ex,
                                        response))
                         response = None
                         continue
@@ -899,7 +901,7 @@ class Resolver(object):
                         # continue.
                         #
                         nameservers.remove(nameserver)
-                        errors.append((nameserver, tcp_attempt, self.port, ex,
+                        errors.append((nameserver, tcp_attempt, port, ex,
                                        response))
                         response = None
                         continue
@@ -911,14 +913,14 @@ class Resolver(object):
                         # mix and continue.
                         #
                         nameservers.remove(nameserver)
-                        errors.append((nameserver, tcp_attempt, self.port, ex,
+                        errors.append((nameserver, tcp_attempt, port, ex,
                                        response))
                         response = None
                         continue
                     rcode = response.rcode()
                     if rcode == dns.rcode.YXDOMAIN:
                         ex = YXDOMAIN()
-                        errors.append((nameserver, tcp_attempt, self.port, ex,
+                        errors.append((nameserver, tcp_attempt, port, ex,
                                        response))
                         raise ex
                     if rcode == dns.rcode.NOERROR or \
@@ -931,7 +933,7 @@ class Resolver(object):
                     #
                     if rcode != dns.rcode.SERVFAIL or not self.retry_servfail:
                         nameservers.remove(nameserver)
-                    errors.append((nameserver, tcp_attempt, self.port,
+                    errors.append((nameserver, tcp_attempt, port,
                                    dns.rcode.to_text(rcode), response))
                     response = None
                 if not response is None: