diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-01-05 13:15:00 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2021-01-08 12:28:17 +0100 |
| commit | 65a71cb252f988badc810cb4317b962ce32e4e16 (patch) | |
| tree | 771e828df0a5d9fa55de96a5e48fce8c38863790 /talpid-core/src | |
| parent | 44929b7bc51428985f7f0508d65abee43b0ee1d3 (diff) | |
| download | mullvadvpn-65a71cb252f988badc810cb4317b962ce32e4e16.tar.xz mullvadvpn-65a71cb252f988badc810cb4317b962ce32e4e16.zip | |
Resolve NetBIOS names correctly
Diffstat (limited to 'talpid-core/src')
| -rw-r--r-- | talpid-core/src/dns/windows/mod.rs | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/talpid-core/src/dns/windows/mod.rs b/talpid-core/src/dns/windows/mod.rs index 66a361e9be..d8bd326786 100644 --- a/talpid-core/src/dns/windows/mod.rs +++ b/talpid-core/src/dns/windows/mod.rs @@ -160,8 +160,13 @@ fn set_dns_cache_policy(servers: &[IpAddr]) -> Result<(), Error> { } fn set_dns_cache_policy_inner(transaction: &Transaction, servers: &[IpAddr]) -> Result<(), Error> { - let dns_cache_parameters = RegKey::predef(HKEY_LOCAL_MACHINE) - .open_subkey(r#"SYSTEM\CurrentControlSet\Services\DnsCache\Parameters"#)?; + let (dns_cache_parameters, _) = RegKey::predef(HKEY_LOCAL_MACHINE).create_subkey_transacted( + r#"SYSTEM\CurrentControlSet\Services\DnsCache\Parameters"#, + transaction, + )?; + + // Fall back on LLMNR and NetBIOS if DNS resolution fails + dns_cache_parameters.set_value("DnsSecureNameQueryFallback", &1u32)?; let policy_path = Path::new("DnsPolicyConfig").join(DNS_CACHE_POLICY_GUID); let (policy_config, _) = @@ -186,8 +191,18 @@ fn set_dns_cache_policy_inner(transaction: &Transaction, servers: &[IpAddr]) -> } fn reset_dns_cache_policy() -> Result<(), Error> { - let dns_cache_parameters = RegKey::predef(HKEY_LOCAL_MACHINE) - .open_subkey(r#"SYSTEM\CurrentControlSet\Services\DnsCache\Parameters"#)?; + let (dns_cache_parameters, _) = RegKey::predef(HKEY_LOCAL_MACHINE) + .create_subkey(r#"SYSTEM\CurrentControlSet\Services\DnsCache\Parameters"#)?; + match dns_cache_parameters.delete_value("DnsSecureNameQueryFallback") { + Ok(()) => Ok(()), + Err(error) => { + if error.kind() == io::ErrorKind::NotFound { + Ok(()) + } else { + Err(Error::UpdateDnsCachePolicy(error)) + } + } + }?; let policy_path = Path::new("DnsPolicyConfig").join(DNS_CACHE_POLICY_GUID); match dns_cache_parameters.delete_subkey_all(policy_path) { Ok(()) => Ok(()), |
