diff options
author | zhaoqin@chromium.org <zhaoqin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-02 20:37:24 +0000 |
---|---|---|
committer | zhaoqin@chromium.org <zhaoqin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-02 20:37:24 +0000 |
commit | 5316366ba64bf00a69c24f8175aff5e4fbefe276 (patch) | |
tree | cb53334cb5ae5fd70d6910f20ab7db7d380ca6bb /net/dns | |
parent | 559d64b01c8868702b6829651d40fcfaab73340c (diff) | |
download | chromium_src-5316366ba64bf00a69c24f8175aff5e4fbefe276.zip chromium_src-5316366ba64bf00a69c24f8175aff5e4fbefe276.tar.gz chromium_src-5316366ba64bf00a69c24f8175aff5e4fbefe276.tar.bz2 |
Add config reader for Primary DNS Suffix and corresponding unittest.
TBR=szym@chromium.org
BUG=114825
TEST=unittest and manual test
Review URL: http://codereview.chromium.org/10283004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@134984 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/dns')
-rw-r--r-- | net/dns/dns_config_service_win.cc | 35 | ||||
-rw-r--r-- | net/dns/dns_config_service_win.h | 2 | ||||
-rw-r--r-- | net/dns/dns_config_service_win_unittest.cc | 53 |
3 files changed, 76 insertions, 14 deletions
diff --git a/net/dns/dns_config_service_win.cc b/net/dns/dns_config_service_win.cc index 5e7a530..327ea2a 100644 --- a/net/dns/dns_config_service_win.cc +++ b/net/dns/dns_config_service_win.cc @@ -46,6 +46,8 @@ const wchar_t* const kDnscachePath = L"SYSTEM\\CurrentControlSet\\Services\\Dnscache\\Parameters"; const wchar_t* const kPolicyPath = L"SOFTWARE\\Policies\\Microsoft\\Windows NT\\DNSClient"; +const wchar_t* const kPrimaryDnsSuffixPath = + L"SOFTWARE\\Policies\\Microsoft\\System\\DNSClient"; // Convenience for reading values using RegKey. class RegistryReader : public base::NonThreadSafe { @@ -299,15 +301,27 @@ bool ConvertSettingsToDnsConfig(const DnsSystemSettings& settings, } } - if (!settings.tcpip_domain.set) - return true; - + // In absence of explicit search list, suffix search is: + // [primary suffix, connection-specific suffix, devolution of primary suffix]. + // Primary suffix can be set by policy (primary_dns_suffix) or + // user setting (tcpip_domain). + // + // The policy (primary_dns_suffix) can be edited via Group Policy Editor + // (gpedit.msc) at Local Computer Policy => Computer Configuration + // => Administrative Template => Network => DNS Client => Primary DNS Suffix. + // + // The user setting (tcpip_domain) can be configurred at Computer Name in + // System Settings std::string primary_suffix; - if (!ParseDomainASCII(settings.tcpip_domain.value, &primary_suffix)) - return true; // No primary suffix, hence no devolution. - - // Primary suffix goes in front. - config->search.insert(config->search.begin(), primary_suffix); + if ((settings.primary_dns_suffix.set && + ParseDomainASCII(settings.primary_dns_suffix.value, &primary_suffix)) || + (settings.tcpip_domain.set && + ParseDomainASCII(settings.tcpip_domain.value, &primary_suffix))) { + // Primary suffix goes in front. + config->search.insert(config->search.begin(), primary_suffix); + } else { + return true; // No primary suffix, hence no devolution. + } // Devolution is determined by precedence: policy > dnscache > tcpip. // |enabled|: UseDomainNameDevolution and |level|: DomainNameDevolutionLevel @@ -439,6 +453,7 @@ class DnsConfigServiceWin::ConfigReader : public SerialWorker { RegistryReader tcpip6_reader(kTcpip6Path); RegistryReader dnscache_reader(kDnscachePath); RegistryReader policy_reader(kPolicyPath); + RegistryReader primary_dns_suffix_reader(kPrimaryDnsSuffixPath); if (!policy_reader.ReadString(L"SearchList", &settings.policy_search_list)) @@ -464,6 +479,10 @@ class DnsConfigServiceWin::ConfigReader : public SerialWorker { &settings.append_to_multi_label_name)) return; + if (!primary_dns_suffix_reader.ReadString(L"PrimaryDnsSuffix", + &settings.primary_dns_suffix)) + return; + success_ = ConvertSettingsToDnsConfig(settings, &dns_config_); } diff --git a/net/dns/dns_config_service_win.h b/net/dns/dns_config_service_win.h index 0d75d9f..703eb7a 100644 --- a/net/dns/dns_config_service_win.h +++ b/net/dns/dns_config_service_win.h @@ -88,6 +88,8 @@ struct NET_EXPORT_PRIVATE DnsSystemSettings { RegString tcpip_search_list; // SYSTEM\CurrentControlSet\Tcpip\Parameters\Domain RegString tcpip_domain; + // SOFTWARE\Policies\Microsoft\System\DNSClient\PrimaryDnsSuffix + RegString primary_dns_suffix; // SOFTWARE\Policies\Microsoft\Windows NT\DNSClient DevolutionSetting policy_devolution; diff --git a/net/dns/dns_config_service_win_unittest.cc b/net/dns/dns_config_service_win_unittest.cc index fa5da54..796c942 100644 --- a/net/dns/dns_config_service_win_unittest.cc +++ b/net/dns/dns_config_service_win_unittest.cc @@ -213,6 +213,7 @@ TEST(DnsConfigServiceWinTest, ConvertSuffixSearch) { { true, L"policy.searchlist.a,policy.searchlist.b" }, { true, L"tcpip.searchlist.a,tcpip.searchlist.b" }, { true, L"tcpip.domain" }, + { true, L"primary.dns.suffix" }, }, { "policy.searchlist.a", "policy.searchlist.b" }, }, @@ -222,15 +223,47 @@ TEST(DnsConfigServiceWinTest, ConvertSuffixSearch) { { false }, { true, L"tcpip.searchlist.a,tcpip.searchlist.b" }, { true, L"tcpip.domain" }, + { true, L"primary.dns.suffix" }, }, { "tcpip.searchlist.a", "tcpip.searchlist.b" }, }, - { // Void SearchList. + { // Void SearchList. Using tcpip.domain { CreateAdapterAddresses(infos), { true, L",bad.searchlist,parsed.as.empty" }, { true, L"tcpip.searchlist,good.but.overridden" }, { true, L"tcpip.domain" }, + { false }, + }, + { "tcpip.domain", "connection.suffix" }, + }, + { // Void SearchList. Using primary.dns.suffix + { + CreateAdapterAddresses(infos), + { true, L",bad.searchlist,parsed.as.empty" }, + { true, L"tcpip.searchlist,good.but.overridden" }, + { true, L"tcpip.domain" }, + { true, L"primary.dns.suffix" }, + }, + { "primary.dns.suffix", "connection.suffix" }, + }, + { // Void SearchList. Using tcpip.domain when primary.dns.suffix is empty + { + CreateAdapterAddresses(infos), + { true, L",bad.searchlist,parsed.as.empty" }, + { true, L"tcpip.searchlist,good.but.overridden" }, + { true, L"tcpip.domain" }, + { true, L"" }, + }, + { "tcpip.domain", "connection.suffix" }, + }, + { // Void SearchList. Using tcpip.domain when primary.dns.suffix is NULL + { + CreateAdapterAddresses(infos), + { true, L",bad.searchlist,parsed.as.empty" }, + { true, L"tcpip.searchlist,good.but.overridden" }, + { true, L"tcpip.domain" }, + { true }, }, { "tcpip.domain", "connection.suffix" }, }, @@ -240,6 +273,7 @@ TEST(DnsConfigServiceWinTest, ConvertSuffixSearch) { { false }, { false }, { true }, + { true }, { { true, 1 }, { true, 2 } }, }, { "connection.suffix" }, @@ -250,9 +284,10 @@ TEST(DnsConfigServiceWinTest, ConvertSuffixSearch) { { false }, { false }, { true, L"a.b.c.d.e" }, - { { true, 1 }, { false } }, - { { true, 0 }, { true, 3 } }, - { { true, 0 }, { true, 1 } }, + { false }, + { { true, 1 }, { false } }, // policy_devolution: enabled, level + { { true, 0 }, { true, 3 } }, // dnscache_devolution + { { true, 0 }, { true, 1 } }, // tcpip_devolution }, { "a.b.c.d.e", "connection.suffix", "b.c.d.e", "c.d.e" }, }, @@ -262,11 +297,12 @@ TEST(DnsConfigServiceWinTest, ConvertSuffixSearch) { { false }, { false }, { true, L"a.b.c.d.e" }, + { true, L"f.g.i.l.j" }, { { false }, { true, 4 } }, { { true, 1 }, { false } }, { { true, 0 }, { true, 3 } }, }, - { "a.b.c.d.e", "connection.suffix", "b.c.d.e" }, + { "f.g.i.l.j", "connection.suffix", "g.i.l.j" }, }, { // Devolution enabled by default. { @@ -274,6 +310,7 @@ TEST(DnsConfigServiceWinTest, ConvertSuffixSearch) { { false }, { false }, { true, L"a.b.c.d.e" }, + { false }, { { false }, { false } }, { { false }, { true, 3 } }, { { false }, { true, 1 } }, @@ -286,6 +323,7 @@ TEST(DnsConfigServiceWinTest, ConvertSuffixSearch) { { false }, { false }, { true, L"a.b" }, + { false }, { { false }, { false } }, { { false }, { true, 2 } }, { { false }, { true, 2 } }, @@ -299,6 +337,7 @@ TEST(DnsConfigServiceWinTest, ConvertSuffixSearch) { { false }, { false }, { true, L"a.b.c.d.e" }, + { false }, { { true, 1 }, { false } }, { { true, 1 }, { false } }, { { true, 1 }, { false } }, @@ -311,6 +350,7 @@ TEST(DnsConfigServiceWinTest, ConvertSuffixSearch) { { false }, { false }, { true, L"a.b.c.d.e" }, + { false }, { { false }, { true, 1 } }, { { true, 1 }, { true, 3 } }, { { true, 1 }, { true, 4 } }, @@ -323,6 +363,7 @@ TEST(DnsConfigServiceWinTest, ConvertSuffixSearch) { { false }, { false }, { true, L"a.b.c.d.e" }, + { false }, { { false }, { true, 3 } }, { { false }, { true, 3 } }, { { true, 0 }, { true, 3 } }, @@ -366,7 +407,7 @@ TEST(DnsConfigServiceWinTest, AppendToMultiLabelName) { const TestCase& t = cases[i]; internal::DnsSystemSettings settings = { CreateAdapterAddresses(infos), - { false }, { false }, { false }, + { false }, { false }, { false }, { false }, { { false }, { false } }, { { false }, { false } }, { { false }, { false } }, |