summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorEmīls <emils@mullvad.net>2022-04-12 17:42:13 +0100
committerEmīls <emils@mullvad.net>2022-04-20 18:11:22 +0100
commit9509b3f7b9e918911d6d800068bb4e07a42e98fc (patch)
tree8fb7f4d91814ba90530201acb81c3e810adddae2
parent12c4cd44fe008371c4cd449ade7154b9cdba17e8 (diff)
downloadmullvadvpn-9509b3f7b9e918911d6d800068bb4e07a42e98fc.tar.xz
mullvadvpn-9509b3f7b9e918911d6d800068bb4e07a42e98fc.zip
Use a more precise means of comparing DNS configs
-rw-r--r--talpid-core/src/dns/macos.rs10
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