]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
cope with irritating windows registry list delimiters
authorBob Halley <halley@dnspython.org>
Wed, 4 Jan 2006 11:39:28 +0000 (11:39 +0000)
committerBob Halley <halley@dnspython.org>
Wed, 4 Jan 2006 11:39:28 +0000 (11:39 +0000)
ChangeLog
dns/resolver.py

index 1a4219a907ca5b54dee347acd18f1e87df068a93..522f29ddd719a584d55d5af5eb2ffaa4cf744621 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-01-04  Bob Halley  <halley@dnspython.org>
+
+       * dns/resolver.py: The windows registry irritatingly changes the
+         list element delimiter in between ' ' and ',' (and vice-versa)
+         in various versions of windows.  We now cope by always looking
+         for either one (' ' first).
+
 2005-12-27  Bob Halley  <halley@dnspython.org>
 
        * dns/e164.py: Added routines to convert between E.164 numbers and
index 4b58e79e586ac08f3b86beaea8b10125a265d3a4..ef5a24a2db53c6e1684dfe92cc8b7676890ea199 100644 (file)
@@ -224,7 +224,7 @@ class Cache(object):
         else:
             self.data = {}
             self.next_cleaning = time.time() + self.cleaning_interval
-    
+
 class Resolver(object):
     """DNS stub resolver
 
@@ -326,10 +326,27 @@ class Resolver(object):
         if len(self.nameservers) == 0:
             self.nameservers.append('127.0.0.1')
 
-    def _config_win32_nameservers(self, nameservers, split_char=','):
+    def _determine_split_char(self, entry):
+        #
+        # The windows registry irritatingly changes the list element
+        # delimiter in between ' ' and ',' (and vice-versa) in various
+        # versions of windows.
+        #
+        if entry.find(' ') >= 0:
+            split_char = ' '
+        elif entry.find(',') >= 0:
+            split_char = ','
+        else:
+            # probably a singleton; treat as a space-separated list.
+            split_char = ' '
+        return split_char
+
+    def _config_win32_nameservers(self, nameservers):
         """Configure a NameServer registry entry."""
         # we call str() on nameservers to convert it from unicode to ascii
-        ns_list = str(nameservers).split(split_char)
+        nameservers = str(nameservers)
+        split_char = self._determine_split_char(nameservers)
+        ns_list = nameservers.split(split_char)
         for ns in ns_list:
             if not ns in self.nameservers:
                 self.nameservers.append(ns)
@@ -342,7 +359,9 @@ class Resolver(object):
     def _config_win32_search(self, search):
         """Configure a Search registry entry."""
         # we call str() on search to convert it from unicode to ascii
-        search_list = str(search).split(',')
+        search = str(search)
+        split_char = self._determine_split_char(search)
+        search_list = search.split(split_char)
         for s in search_list:
             if not s in self.search:
                 self.search.append(dns.name.from_text(s))
@@ -367,9 +386,7 @@ class Resolver(object):
             except WindowsError:
                 servers = None
             if servers:
-                # Annoyingly, the DhcpNameServer list is apparently space
-                # separated instead of comma separated like NameServer.
-                self._config_win32_nameservers(servers, ' ')
+                self._config_win32_nameservers(servers)
                 try:
                     dom, rtype = _winreg.QueryValueEx(key, 'DhcpDomain')
                     if dom: