summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Halley <halley@dnspython.org>2006-01-04 11:39:28 +0000
committerBob Halley <halley@dnspython.org>2006-01-04 11:39:28 +0000
commitbb2657dc76e2fec485eab581225d6d13d5ccd35e (patch)
treec4070f8705bbc00a638e2176b62e4db36bcfeb8b
parent7ef9ccfd83117d268fa24d64c7b6450d7867a61e (diff)
downloaddnspython-bb2657dc76e2fec485eab581225d6d13d5ccd35e.tar.gz
cope with irritating windows registry list delimiters
-rw-r--r--ChangeLog7
-rw-r--r--dns/resolver.py31
2 files changed, 31 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 1a4219a..522f29d 100644
--- 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
diff --git a/dns/resolver.py b/dns/resolver.py
index 4b58e79..ef5a24a 100644
--- a/dns/resolver.py
+++ b/dns/resolver.py
@@ -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: