From: Bob Halley Date: Sun, 7 Nov 2021 18:41:54 +0000 (-0800) Subject: Handle DHCP servers returning domains prefixed by dot [#687]. X-Git-Tag: v2.2.0rc1~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=246febc405089c8551cdba3e636d174e7446ca13;p=thirdparty%2Fdnspython.git Handle DHCP servers returning domains prefixed by dot [#687]. --- diff --git a/dns/resolver.py b/dns/resolver.py index 108dd52d..fbdf6225 100644 --- a/dns/resolver.py +++ b/dns/resolver.py @@ -875,6 +875,11 @@ class BaseResolver: self.nameservers.append(ns) def _config_win32_domain(self, domain): # pragma: no cover + # Sometimes DHCP servers add a '.' prefix to the default domain, and + # Windows just stores such values in the registry (see #687). + # Check for this and fix it. + if domain.startswith('.'): + domain = domain[1:] # we call str() on domain to convert it from unicode to ascii self.domain = dns.name.from_text(str(domain)) diff --git a/tests/test_resolver.py b/tests/test_resolver.py index ecd1bf22..eb838932 100644 --- a/tests/test_resolver.py +++ b/tests/test_resolver.py @@ -886,6 +886,16 @@ class ResolverMiscTestCase(unittest.TestCase): # not raising is the test res._compute_timeout(now + 0.5) + def test_configure_win32_domain(self): + # This is a win32-related test but it works on all platforms so we + # test it that way to make coverage analysis easier. + n = dns.name.from_text('home.') + res = dns.resolver.Resolver(configure=False) + res._config_win32_domain('home') + self.assertEqual(res.domain, n) + res._config_win32_domain('.home') + self.assertEqual(res.domain, n) + class ResolverNameserverValidTypeTestCase(unittest.TestCase): def test_set_nameservers_to_list(self):