summaryrefslogtreecommitdiffhomepage
path: root/mullvad-cli
diff options
context:
space:
mode:
authorEmīls <emils@mullvad.net>2021-12-10 10:00:20 +0000
committerEmīls <emils@mullvad.net>2021-12-10 10:00:20 +0000
commitd6fe6573211bfc39d30ecaca67e308aa35399985 (patch)
treed493a08c2734e7ec9aac24e361ee535759014323 /mullvad-cli
parent1e1c5c12b31b6450382a2036e9ab7a4e33d08ebb (diff)
parent8fc67488c8d5dfafc0033515bce3f90ccb42e4ad (diff)
downloadmullvadvpn-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.rs7
-rw-r--r--mullvad-cli/src/cmds/network_check.rs73
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(())
+ }
+}