summaryrefslogtreecommitdiffhomepage
path: root/mullvad-daemon/src
diff options
context:
space:
mode:
Diffstat (limited to 'mullvad-daemon/src')
-rw-r--r--mullvad-daemon/src/lib.rs31
-rw-r--r--mullvad-daemon/src/management_interface.rs52
-rw-r--r--mullvad-daemon/src/settings.rs12
3 files changed, 57 insertions, 38 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs
index 7f5b85f7e0..320e839a0a 100644
--- a/mullvad-daemon/src/lib.rs
+++ b/mullvad-daemon/src/lib.rs
@@ -26,6 +26,8 @@ use futures::{
};
use log::{debug, error, info, warn};
use mullvad_rpc::AccountsProxy;
+#[cfg(windows)]
+use mullvad_types::settings::DnsOptions;
use mullvad_types::{
account::{AccountData, AccountToken, VoucherSubmission},
endpoint::MullvadEndpoint,
@@ -196,7 +198,7 @@ pub enum DaemonCommand {
SetEnableIpv6(oneshot::Sender<()>, bool),
/// Set custom DNS servers to use instead of passing requests to the gateway
#[cfg(windows)]
- SetCustomDns(oneshot::Sender<()>, Option<Vec<IpAddr>>),
+ SetDnsOptions(oneshot::Sender<()>, DnsOptions),
/// Set MTU for wireguard tunnels
SetWireguardMtu(oneshot::Sender<()>, Option<u16>),
/// Set automatic key rotation interval for wireguard tunnels
@@ -581,7 +583,7 @@ where
settings.allow_lan,
settings.block_when_disconnected,
#[cfg(windows)]
- settings.tunnel_options.generic.custom_dns.clone(),
+ Self::get_custom_resolvers(&settings.tunnel_options.dns_options),
tunnel_parameters_generator,
log_dir,
resource_dir,
@@ -634,6 +636,15 @@ where
Ok(daemon)
}
+ #[cfg(windows)]
+ fn get_custom_resolvers(dns_options: &DnsOptions) -> Option<Vec<IpAddr>> {
+ if dns_options.custom {
+ Some(dns_options.addresses.clone())
+ } else {
+ None
+ }
+ }
+
/// Consume the `Daemon` and run the main event loop. Blocks until an error happens or a
/// shutdown event is received.
pub async fn run(mut self) -> Result<(), Error> {
@@ -1046,7 +1057,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),
#[cfg(windows)]
- SetCustomDns(tx, dns_servers) => self.on_set_custom_dns(tx, dns_servers),
+ SetDnsOptions(tx, dns_servers) => self.on_set_dns_options(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
@@ -1686,15 +1697,17 @@ where
}
#[cfg(windows)]
- fn on_set_custom_dns(&mut self, tx: oneshot::Sender<()>, servers: Option<Vec<IpAddr>>) {
- let save_result = self.settings.set_custom_dns(servers.clone());
+ fn on_set_dns_options(&mut self, tx: oneshot::Sender<()>, dns_options: DnsOptions) {
+ let save_result = self.settings.set_dns_options(dns_options.clone());
match save_result {
Ok(settings_changed) => {
- Self::oneshot_send(tx, (), "set_custom_dns response");
+ Self::oneshot_send(tx, (), "set_dns_options response");
if settings_changed {
- self.event_listener
- .notify_settings(self.settings.to_settings());
- self.send_tunnel_command(TunnelCommand::CustomDns(servers));
+ let settings = self.settings.to_settings();
+ let resolvers =
+ Self::get_custom_resolvers(&settings.tunnel_options.dns_options);
+ self.event_listener.notify_settings(settings);
+ self.send_tunnel_command(TunnelCommand::CustomDns(resolvers));
}
}
Err(e) => error!("{}", e.display_chain_with_msg("Unable to save settings")),
diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs
index a5cfebedc3..ca324308cb 100644
--- a/mullvad-daemon/src/management_interface.rs
+++ b/mullvad-daemon/src/management_interface.rs
@@ -6,6 +6,8 @@ use mullvad_management_interface::{
};
use mullvad_paths;
use mullvad_rpc::{rest::Error as RestError, StatusCode};
+#[cfg(windows)]
+use mullvad_types::settings::DnsOptions;
use mullvad_types::{
account::AccountToken,
location::GeoIpLocation,
@@ -409,12 +411,16 @@ impl ManagementService for ManagementServiceImpl {
}
#[cfg(windows)]
- async fn set_custom_dns(&self, request: Request<types::CustomDns>) -> ServiceResult<()> {
- let servers = request.into_inner();
- log::debug!("set_custom_dns({:?})", servers.addresses);
+ async fn set_dns_options(&self, request: Request<types::DnsOptions>) -> ServiceResult<()> {
+ let options = request.into_inner();
+ log::debug!(
+ "set_dns_options({}, {:?})",
+ options.custom,
+ options.addresses
+ );
let mut servers_ip = vec![];
- for server in servers.addresses.into_iter() {
+ for server in options.addresses.into_iter() {
if let Ok(addr) = server.parse() {
servers_ip.push(addr);
} else {
@@ -423,20 +429,20 @@ impl ManagementService for ManagementServiceImpl {
}
}
- let servers_ip = if !servers_ip.is_empty() {
- Some(servers_ip)
- } else {
- None
- };
-
let (tx, rx) = oneshot::channel();
- self.send_command_to_daemon(DaemonCommand::SetCustomDns(tx, servers_ip))?;
+ self.send_command_to_daemon(DaemonCommand::SetDnsOptions(
+ tx,
+ DnsOptions {
+ custom: options.custom,
+ addresses: servers_ip,
+ },
+ ))?;
rx.await
.map(Response::new)
.map_err(|_| Status::internal("internal error"))
}
#[cfg(not(windows))]
- async fn set_custom_dns(&self, _: Request<types::CustomDns>) -> ServiceResult<()> {
+ async fn set_dns_options(&self, _: Request<types::DnsOptions>) -> ServiceResult<()> {
Ok(Response::new(()))
}
@@ -1172,17 +1178,19 @@ fn convert_tunnel_options(options: &TunnelOptions) -> types::TunnelOptions {
}),
generic: Some(types::tunnel_options::GenericOptions {
enable_ipv6: options.generic.enable_ipv6,
- #[cfg(windows)]
- custom_dns: options
- .generic
- .custom_dns
- .as_ref()
- .map(|addresses| types::CustomDns {
- addresses: addresses.iter().map(|addr| addr.to_string()).collect(),
- }),
- #[cfg(not(windows))]
- custom_dns: None,
}),
+ #[cfg(windows)]
+ dns_options: Some(types::DnsOptions {
+ custom: options.dns_options.custom,
+ addresses: options
+ .dns_options
+ .addresses
+ .iter()
+ .map(|addr| addr.to_string())
+ .collect(),
+ }),
+ #[cfg(not(windows))]
+ dns_options: None,
}
}
diff --git a/mullvad-daemon/src/settings.rs b/mullvad-daemon/src/settings.rs
index 1f6f6a447c..bcc07f84ae 100644
--- a/mullvad-daemon/src/settings.rs
+++ b/mullvad-daemon/src/settings.rs
@@ -1,10 +1,10 @@
use log::{debug, error, info};
+#[cfg(windows)]
+use mullvad_types::settings::DnsOptions;
use mullvad_types::{
relay_constraints::{BridgeSettings, BridgeState, RelaySettingsUpdate},
settings::Settings,
};
-#[cfg(windows)]
-use std::net::IpAddr;
use std::{
fs::{self, File},
io,
@@ -213,11 +213,9 @@ impl SettingsPersister {
}
#[cfg(windows)]
- pub fn set_custom_dns(&mut self, servers: Option<Vec<IpAddr>>) -> Result<bool, Error> {
- let should_save = Self::update_field(
- &mut self.settings.tunnel_options.generic.custom_dns,
- servers,
- );
+ pub fn set_dns_options(&mut self, options: DnsOptions) -> Result<bool, Error> {
+ let should_save =
+ Self::update_field(&mut self.settings.tunnel_options.dns_options, options);
self.update(should_save)
}