]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
add options rotate handling
authorBatch User <batch@domaintools.com>
Thu, 20 Feb 2014 19:51:56 +0000 (11:51 -0800)
committerBob Halley <halley@dnspython.org>
Sun, 31 Aug 2014 23:27:44 +0000 (16:27 -0700)
for resolv.conf "options rotate" line, enable shuffling of nameservers
before each query. (should just rotate start position and maintain order?).

dns/resolver.py

index 2d28f7012ad3c0ef44463506a865e2b7b58ac913..97bd0a886bce49f19585547f965564eebc6ed0a8 100644 (file)
@@ -21,6 +21,7 @@
 import socket
 import sys
 import time
+import random
 
 try:
     import threading as _threading
@@ -510,6 +511,7 @@ class Resolver(object):
         self.cache = None
         self.flags = None
         self.retry_servfail = False
+        self.rotate = False
 
     def read_resolv_conf(self, f):
         """Process f as a file in the /etc/resolv.conf format.  If f is
@@ -540,6 +542,9 @@ class Resolver(object):
                 elif tokens[0] == 'search':
                     for suffix in tokens[1:]:
                         self.search.append(dns.name.from_text(suffix))
+                elif tokens[0] == 'options':
+                    if len(tokens) == 2 and tokens[1] == 'rotate':
+                        self.rotate = True
         finally:
             if want_close:
                 f.close()
@@ -808,6 +813,8 @@ class Resolver(object):
             # make a copy of the servers list so we can alter it later.
             #
             nameservers = self.nameservers[:]
+            if self.rotate:
+                random.shuffle(nameservers)
             backoff = 0.10
             while response is None:
                 if len(nameservers) == 0: