diff options
| author | Emīls <emils@mullvad.net> | 2021-12-10 10:00:20 +0000 |
|---|---|---|
| committer | Emīls <emils@mullvad.net> | 2021-12-10 10:00:20 +0000 |
| commit | d6fe6573211bfc39d30ecaca67e308aa35399985 (patch) | |
| tree | d493a08c2734e7ec9aac24e361ee535759014323 /mullvad-cli | |
| parent | 1e1c5c12b31b6450382a2036e9ab7a4e33d08ebb (diff) | |
| parent | 8fc67488c8d5dfafc0033515bce3f90ccb42e4ad (diff) | |
| download | mullvadvpn-d6fe6573211bfc39d30ecaca67e308aa35399985.tar.xz mullvadvpn-d6fe6573211bfc39d30ecaca67e308aa35399985.zip | |
Merge branch 'macos-add-dns-server'
Diffstat (limited to 'mullvad-cli')
| -rw-r--r-- | mullvad-cli/src/cmds/mod.rs | 7 | ||||
| -rw-r--r-- | mullvad-cli/src/cmds/network_check.rs | 73 |
2 files changed, 80 insertions, 0 deletions
diff --git a/mullvad-cli/src/cmds/mod.rs b/mullvad-cli/src/cmds/mod.rs index 2ceb3bfdcf..1f0e98f8ed 100644 --- a/mullvad-cli/src/cmds/mod.rs +++ b/mullvad-cli/src/cmds/mod.rs @@ -28,6 +28,11 @@ pub use self::dns::Dns; mod lan; pub use self::lan::Lan; +#[cfg(target_os = "macos")] +mod network_check; +#[cfg(target_os = "macos")] +pub use self::network_check::NetworkCheck; + mod reconnect; pub use self::reconnect::Reconnect; @@ -64,6 +69,8 @@ pub fn get_commands() -> HashMap<&'static str, Box<dyn Command>> { Box::new(Dns), Box::new(Reconnect), Box::new(Lan), + #[cfg(any(target_os = "macos"))] + Box::new(NetworkCheck), Box::new(Relay), Box::new(Reset), #[cfg(any(target_os = "linux", windows))] diff --git a/mullvad-cli/src/cmds/network_check.rs b/mullvad-cli/src/cmds/network_check.rs new file mode 100644 index 0000000000..323e5eb512 --- /dev/null +++ b/mullvad-cli/src/cmds/network_check.rs @@ -0,0 +1,73 @@ +use crate::{new_rpc_client, Command, Result}; +use clap::value_t_or_exit; + +pub struct NetworkCheck; + +const SUBCOMMAND_DESCRIPTION: &'static str = +"Control the macOS network check setting. Allowing the check leaks DNS queries for `captive.apple.com`. Allowing the +connectivity check allows macOS to get online quicker after sleep and after connecting to new WiFi networks"; + +#[mullvad_management_interface::async_trait] +impl Command for NetworkCheck { + fn name(&self) -> &'static str { + "macos-network-check" + } + + fn clap_subcommand(&self) -> clap::App<'static, 'static> { + clap::SubCommand::with_name(self.name()) + .about(SUBCOMMAND_DESCRIPTION) + .setting(clap::AppSettings::SubcommandRequiredElseHelp) + .subcommand( + clap::SubCommand::with_name("set") + .about("Toggle macOS network check setting") + .arg( + clap::Arg::with_name("policy") + .required(true) + .possible_values(&["allow", "block"]), + ), + ) + .subcommand( + clap::SubCommand::with_name("get") + .about("Display current macOS network check setting"), + ) + } + + async fn run(&self, matches: &clap::ArgMatches<'_>) -> Result<()> { + if let Some(set_matches) = matches.subcommand_matches("set") { + let allow_network_check = value_t_or_exit!(set_matches.value_of("policy"), String); + self.set(allow_network_check == "allow").await + } else if let Some(_get_matches) = matches.subcommand_matches("get") { + self.get().await + } else { + unreachable!("No macOS network check given") + } + } +} + +impl NetworkCheck { + async fn set(&self, allow_network_check: bool) -> Result<()> { + let mut rpc = new_rpc_client().await?; + rpc.set_allow_macos_network_check(allow_network_check) + .await?; + println!("Changed macOS network check setting"); + Ok(()) + } + + async fn get(&self) -> Result<()> { + let mut rpc = new_rpc_client().await?; + let allow_network_check = rpc + .get_settings(()) + .await? + .into_inner() + .allow_macos_network_check; + println!( + "macOS network check setting: {}", + if allow_network_check { + "allow" + } else { + "block" + } + ); + Ok(()) + } +} |
