diff options
Diffstat (limited to 'mullvad-daemon/src')
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 31 | ||||
| -rw-r--r-- | mullvad-daemon/src/management_interface.rs | 52 | ||||
| -rw-r--r-- | mullvad-daemon/src/settings.rs | 12 |
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) } |
