diff options
| author | Joakim Hulthe <joakim.hulthe@mullvad.net> | 2024-11-29 09:40:52 +0100 |
|---|---|---|
| committer | Joakim Hulthe <joakim.hulthe@mullvad.net> | 2024-11-29 09:40:52 +0100 |
| commit | 5e5bc4e4ac5ce140e651bf1e509663fca4f56cc1 (patch) | |
| tree | 9c5dd0b42e5f42929f113eda8c1cfbe010b820ea | |
| parent | 211252b08b9957dfabedbd7c1456eb1874540a42 (diff) | |
| parent | d487d919a6195cb8fcc19618c64e5b4e3ce9154e (diff) | |
| download | mullvadvpn-5e5bc4e4ac5ce140e651bf1e509663fca4f56cc1.tar.xz mullvadvpn-5e5bc4e4ac5ce140e651bf1e509663fca4f56cc1.zip | |
Merge branch 'improved-dns-fallback-logging-linux'
| -rw-r--r-- | talpid-core/src/dns/linux/mod.rs | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/talpid-core/src/dns/linux/mod.rs b/talpid-core/src/dns/linux/mod.rs index ad27237cd4..9edeeb842a 100644 --- a/talpid-core/src/dns/linux/mod.rs +++ b/talpid-core/src/dns/linux/mod.rs @@ -7,7 +7,11 @@ use self::{ network_manager::NetworkManager, resolvconf::Resolvconf, static_resolv_conf::StaticResolvConf, systemd_resolved::SystemdResolved, }; -use std::{env, fmt, net::IpAddr}; +use std::{ + env, + fmt::{self, Display}, + net::IpAddr, +}; use talpid_routing::RouteManagerHandle; use super::ResolvedDnsConfig; @@ -89,7 +93,7 @@ impl fmt::Display for DnsMonitorHolder { Resolvconf(..) => "resolvconf", StaticResolvConf(..) => "/etc/resolv.conf", SystemdResolved(..) => "systemd-resolved", - NetworkManager(..) => "network manager", + NetworkManager(..) => "NetworkManager", }; f.write_str(name) } @@ -111,21 +115,30 @@ impl DnsMonitorHolder { } fn with_detected_dns_manager() -> Result<Self> { + fn log_err<E: Display>(method: &'static str) -> impl Fn(&E) { + move |err: &E| { + log::debug!("Can't manage DNS using {method}: {err}"); + } + } + SystemdResolved::new() .map(DnsMonitorHolder::SystemdResolved) - .or_else(|err| { - match err { - systemd_resolved::Error::SystemdResolvedError( - systemd_resolved::SystemdDbusError::NoSystemdResolved(_), - ) => (), - other_error => { - log::debug!("NetworkManager is being used because {}", other_error) - } - } - NetworkManager::new().map(DnsMonitorHolder::NetworkManager) + .inspect_err(log_err("systemd-resolved")) + .or_else(|_| { + NetworkManager::new() + .map(DnsMonitorHolder::NetworkManager) + .inspect_err(log_err("NetworkManager")) + }) + .or_else(|_| { + Resolvconf::new() + .map(DnsMonitorHolder::Resolvconf) + .inspect_err(log_err("resolveconf")) + }) + .or_else(|_| { + StaticResolvConf::new() + .map(DnsMonitorHolder::StaticResolvConf) + .inspect_err(log_err("/etc/resolv.conf")) }) - .or_else(|_| Resolvconf::new().map(DnsMonitorHolder::Resolvconf)) - .or_else(|_| StaticResolvConf::new().map(DnsMonitorHolder::StaticResolvConf)) .map_err(|_| Error::NoDnsMonitor) } |
