From 246febc405089c8551cdba3e636d174e7446ca13 Mon Sep 17 00:00:00 2001 From: Bob Halley Date: Sun, 7 Nov 2021 10:41:54 -0800 Subject: [PATCH] Handle DHCP servers returning domains prefixed by dot [#687]. --- dns/resolver.py | 5 +++++ tests/test_resolver.py | 10 ++++++++++ 2 files changed, 15 insertions(+) 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): -- 2.47.3