diff options
| author | Emīls <emils@mullvad.net> | 2022-04-12 17:42:13 +0100 |
|---|---|---|
| committer | Emīls <emils@mullvad.net> | 2022-04-20 18:11:22 +0100 |
| commit | 9509b3f7b9e918911d6d800068bb4e07a42e98fc (patch) | |
| tree | 8fb7f4d91814ba90530201acb81c3e810adddae2 | |
| parent | 12c4cd44fe008371c4cd449ade7154b9cdba17e8 (diff) | |
| download | mullvadvpn-9509b3f7b9e918911d6d800068bb4e07a42e98fc.tar.xz mullvadvpn-9509b3f7b9e918911d6d800068bb4e07a42e98fc.zip | |
Use a more precise means of comparing DNS configs
| -rw-r--r-- | talpid-core/src/dns/macos.rs | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/talpid-core/src/dns/macos.rs b/talpid-core/src/dns/macos.rs index a33e1d0a4a..c1a319d0c8 100644 --- a/talpid-core/src/dns/macos.rs +++ b/talpid-core/src/dns/macos.rs @@ -1,6 +1,6 @@ use parking_lot::Mutex; use std::{ - collections::HashMap, + collections::{BTreeSet, HashMap}, fmt, net::{AddrParseError, IpAddr}, sync::{mpsc as sync_mpsc, Arc}, @@ -131,6 +131,10 @@ impl DnsSettings { .unwrap_or(Vec::new()) } + pub fn address_set(&self) -> BTreeSet<String> { + BTreeSet::from_iter(self.server_addresses().into_iter()) + } + pub fn interface_config(&self, interface_path: &str) -> Result<Vec<IpAddr>> { let addresses = self .server_addresses() @@ -241,7 +245,7 @@ impl super::DnsMonitorT for DnsMonitor { } } Some(state) => { - if servers != state.dns_settings.server_addresses() { + if BTreeSet::from_iter(servers.into_iter()) != state.dns_settings.address_set() { for service_path in state.backup.keys() { settings.save(&self.store, service_path.as_str())?; } @@ -387,7 +391,7 @@ fn dns_change_callback_internal( true } Some(new_settings) => { - if new_settings.dict != state.dns_settings.dict { + if new_settings.address_set() != state.dns_settings.address_set() { log::debug!("Detected DNS change for {}", *path); state.backup.insert(path.to_string(), Some(new_settings)); true |
