summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2021-01-05 13:15:00 +0100
committerDavid Lönnhager <david.l@mullvad.net>2021-01-08 12:28:17 +0100
commit65a71cb252f988badc810cb4317b962ce32e4e16 (patch)
tree771e828df0a5d9fa55de96a5e48fce8c38863790
parent44929b7bc51428985f7f0508d65abee43b0ee1d3 (diff)
downloadmullvadvpn-65a71cb252f988badc810cb4317b962ce32e4e16.tar.xz
mullvadvpn-65a71cb252f988badc810cb4317b962ce32e4e16.zip
Resolve NetBIOS names correctly
-rw-r--r--talpid-core/src/dns/windows/mod.rs23
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(()),