summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-10-16 11:59:01 +0200
committerDavid Lönnhager <david.l@mullvad.net>2020-10-22 09:33:58 +0200
commitcb4a5587cac2ed3e051ec9b787230a02bf477990 (patch)
treec4e6444be0b41be585ba39fdc666d7d753fe8f86
parentc60f24ededf5371d25f70b5744d099c2c8ad0e52 (diff)
downloadmullvadvpn-cb4a5587cac2ed3e051ec9b787230a02bf477990.tar.xz
mullvadvpn-cb4a5587cac2ed3e051ec9b787230a02bf477990.zip
Add daemon command for setting custom DNS
-rw-r--r--mullvad-daemon/src/lib.rs19
1 files changed, 19 insertions, 0 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs
index f100befc10..3acf4eb11d 100644
--- a/mullvad-daemon/src/lib.rs
+++ b/mullvad-daemon/src/lib.rs
@@ -48,6 +48,7 @@ use std::{
io,
marker::PhantomData,
mem,
+ net::IpAddr,
path::PathBuf,
sync::{mpsc as sync_mpsc, Arc, Weak},
time::Duration,
@@ -192,6 +193,8 @@ pub enum DaemonCommand {
SetBridgeState(oneshot::Sender<Result<(), settings::Error>>, BridgeState),
/// Set if IPv6 should be enabled in the tunnel
SetEnableIpv6(oneshot::Sender<()>, bool),
+ /// Set custom DNS servers to use instead of passing requests to the gateway
+ SetCustomDns(oneshot::Sender<()>, Option<Vec<IpAddr>>),
/// Set MTU for wireguard tunnels
SetWireguardMtu(oneshot::Sender<()>, Option<u16>),
/// Set automatic key rotation interval for wireguard tunnels
@@ -1040,6 +1043,7 @@ where
}
SetBridgeState(tx, bridge_state) => self.on_set_bridge_state(tx, bridge_state),
SetEnableIpv6(tx, enable_ipv6) => self.on_set_enable_ipv6(tx, enable_ipv6),
+ SetCustomDns(tx, dns_servers) => self.on_set_custom_dns(tx, dns_servers),
SetWireguardMtu(tx, mtu) => self.on_set_wireguard_mtu(tx, mtu),
SetWireguardRotationInterval(tx, interval) => {
self.on_set_wireguard_rotation_interval(tx, interval).await
@@ -1678,6 +1682,21 @@ where
}
}
+ fn on_set_custom_dns(&mut self, tx: oneshot::Sender<()>, servers: Option<Vec<IpAddr>>) {
+ let save_result = self.settings.set_custom_dns(servers.clone());
+ match save_result {
+ Ok(settings_changed) => {
+ Self::oneshot_send(tx, (), "set_custom_dns response");
+ if settings_changed {
+ self.event_listener
+ .notify_settings(self.settings.to_settings());
+ self.send_tunnel_command(TunnelCommand::CustomDns(servers));
+ }
+ }
+ Err(e) => error!("{}", e.display_chain_with_msg("Unable to save settings")),
+ }
+ }
+
fn on_set_wireguard_mtu(&mut self, tx: oneshot::Sender<()>, mtu: Option<u16>) {
let save_result = self.settings.set_wireguard_mtu(mtu);
match save_result {