summaryrefslogtreecommitdiffstats
path: root/net/dns
diff options
context:
space:
mode:
authorzhaoqin@chromium.org <zhaoqin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-02 20:37:24 +0000
committerzhaoqin@chromium.org <zhaoqin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-02 20:37:24 +0000
commit5316366ba64bf00a69c24f8175aff5e4fbefe276 (patch)
treecb53334cb5ae5fd70d6910f20ab7db7d380ca6bb /net/dns
parent559d64b01c8868702b6829651d40fcfaab73340c (diff)
downloadchromium_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.cc35
-rw-r--r--net/dns/dns_config_service_win.h2
-rw-r--r--net/dns/dns_config_service_win_unittest.cc53
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 } },