summaryrefslogtreecommitdiffhomepage
path: root/mullvad-cli
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2022-07-06 14:39:45 +0200
committerDavid Lönnhager <david.l@mullvad.net>2022-07-11 13:51:27 +0200
commit44568512b11d2d446fd35f79f5f2be1e7f02e4fc (patch)
tree7a9237e91af98d12e6dfb8b59b7e422614b3fa89 /mullvad-cli
parentebda07a2b094844c7ff760dbb91176a8f96f3197 (diff)
downloadmullvadvpn-44568512b11d2d446fd35f79f5f2be1e7f02e4fc.tar.xz
mullvadvpn-44568512b11d2d446fd35f79f5f2be1e7f02e4fc.zip
Validate WireGuard port selection in the CLI
Diffstat (limited to 'mullvad-cli')
-rw-r--r--mullvad-cli/src/cmds/relay.rs22
1 files changed, 20 insertions, 2 deletions
diff --git a/mullvad-cli/src/cmds/relay.rs b/mullvad-cli/src/cmds/relay.rs
index 22bf4788f2..e48c4681f9 100644
--- a/mullvad-cli/src/cmds/relay.rs
+++ b/mullvad-cli/src/cmds/relay.rs
@@ -554,12 +554,30 @@ impl Relay {
async fn set_wireguard_constraints(&self, matches: &clap::ArgMatches) -> Result<()> {
let mut rpc = new_rpc_client().await?;
+ let relay_list = rpc
+ .get_relay_locations(())
+ .await?
+ .into_inner()
+ .wireguard
+ .unwrap();
let mut wireguard_constraints = self.get_wireguard_constraints(&mut rpc).await?;
if let Some(port) = matches.value_of("port") {
wireguard_constraints.port = match parse_port_constraint(port)? {
Constraint::Any => 0,
- Constraint::Only(specific_port) => u32::from(specific_port),
+ Constraint::Only(specific_port) => {
+ let specific_port = u32::from(specific_port);
+
+ let is_valid_port = relay_list
+ .port_ranges
+ .iter()
+ .any(|range| range.first <= specific_port && specific_port <= range.last);
+ if !is_valid_port {
+ return Err(Error::CommandFailed("The specified port is invalid"));
+ }
+
+ specific_port
+ }
}
}
@@ -755,7 +773,7 @@ fn parse_port_constraint(raw_port: &str) -> Result<Constraint<u16>> {
match raw_port.to_lowercase().as_str() {
"any" => Ok(Constraint::Any),
port => Ok(Constraint::Only(u16::from_str(port).map_err(|_| {
- Error::InvalidCommand("Invalid port. Must be \"any\" or [0-65535].")
+ Error::InvalidCommand("Invalid port. Must be \"any\" or 0-65535.")
})?)),
}
}