From: Bob Halley Date: Wed, 4 Jan 2006 11:39:28 +0000 (+0000) Subject: cope with irritating windows registry list delimiters X-Git-Tag: v1.4.0~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bb2657dc76e2fec485eab581225d6d13d5ccd35e;p=thirdparty%2Fdnspython.git cope with irritating windows registry list delimiters --- diff --git a/ChangeLog b/ChangeLog index 1a4219a9..522f29dd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-01-04 Bob Halley + + * 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 * dns/e164.py: Added routines to convert between E.164 numbers and diff --git a/dns/resolver.py b/dns/resolver.py index 4b58e79e..ef5a24a2 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: