diff --git a/Cargo.lock b/Cargo.lock index faee700..b598913 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -845,6 +845,7 @@ dependencies = [ "dirs", "env_logger", "futures", + "hex", "iwdrs", "libc", "log", diff --git a/Cargo.toml b/Cargo.toml index 2e1841a..f2b8395 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,6 +32,7 @@ env_logger = "0.11" strum = { version = "0.27.2", features = ["derive"] } strum_macros = "0.27" libc = "0.2" +hex = "0.4.3" [profile.release] strip = true diff --git a/Release.md b/Release.md index e04e95a..2338f3e 100644 --- a/Release.md +++ b/Release.md @@ -1,6 +1,7 @@ ## TBA - Show all the configured networks +- Encode network names correctly ## 0.5.0 - 2025-11-21 diff --git a/src/mode/station/auth/entreprise.rs b/src/mode/station/auth/entreprise.rs index 3d6738d..5e11d93 100644 --- a/src/mode/station/auth/entreprise.rs +++ b/src/mode/station/auth/entreprise.rs @@ -30,6 +30,16 @@ fn pad_string(input: &str, length: usize) -> String { } } +fn iwd_network_name(name: &str) -> String { + match name + .chars() + .all(|c| c.is_ascii_alphanumeric() || c == '-' || c == '_' || c == ' ') + { + true => name.to_string(), + false => format!("={}", hex::encode(name)), + } +} + #[derive(Debug, Clone, Default)] struct UserInputField { field: Input, diff --git a/src/mode/station/auth/entreprise/peap.rs b/src/mode/station/auth/entreprise/peap.rs index 0a8416a..7cb9a1b 100644 --- a/src/mode/station/auth/entreprise/peap.rs +++ b/src/mode/station/auth/entreprise/peap.rs @@ -12,7 +12,7 @@ use ratatui::{ use tui_input::backend::crossterm::EventHandler; -use crate::mode::station::auth::entreprise::{ERROR_PADDING, UserInputField}; +use crate::mode::station::auth::entreprise::{ERROR_PADDING, UserInputField, iwd_network_name}; fn pad_string(input: &str, length: usize) -> String { let current_length = input.chars().count(); @@ -182,6 +182,7 @@ impl PEAP { pub fn apply(&mut self, network_name: &str) -> Result<()> { self.validate()?; + let network_name = iwd_network_name(network_name); let mut file = OpenOptions::new() .write(true) .read(true) diff --git a/src/mode/station/auth/entreprise/pwd.rs b/src/mode/station/auth/entreprise/pwd.rs index fcd341d..973ed2b 100644 --- a/src/mode/station/auth/entreprise/pwd.rs +++ b/src/mode/station/auth/entreprise/pwd.rs @@ -12,7 +12,7 @@ use ratatui::{ use tui_input::{Input, backend::crossterm::EventHandler}; -use crate::mode::station::auth::entreprise::ERROR_PADDING; +use crate::mode::station::auth::entreprise::{ERROR_PADDING, iwd_network_name}; fn pad_string(input: &str, length: usize) -> String { let current_length = input.chars().count(); @@ -101,7 +101,7 @@ impl PWD { pub fn apply(&mut self, network_name: &str) -> Result<()> { self.validate()?; - + let network_name = iwd_network_name(network_name); let mut file = OpenOptions::new() .write(true) .read(true) diff --git a/src/mode/station/auth/entreprise/tls.rs b/src/mode/station/auth/entreprise/tls.rs index f09e634..3c3eeaa 100644 --- a/src/mode/station/auth/entreprise/tls.rs +++ b/src/mode/station/auth/entreprise/tls.rs @@ -12,7 +12,7 @@ use ratatui::{ use tui_input::{Input, backend::crossterm::EventHandler}; -use crate::mode::station::auth::entreprise::ERROR_PADDING; +use crate::mode::station::auth::entreprise::{ERROR_PADDING, iwd_network_name}; fn pad_string(input: &str, length: usize) -> String { let current_length = input.chars().count(); @@ -165,6 +165,7 @@ impl TLS { pub fn apply(&mut self, network_name: &str) -> Result<()> { self.validate()?; + let network_name = iwd_network_name(network_name); let mut file = OpenOptions::new() .write(true) .read(true) diff --git a/src/mode/station/auth/entreprise/ttls.rs b/src/mode/station/auth/entreprise/ttls.rs index 1608bb4..b2e7349 100644 --- a/src/mode/station/auth/entreprise/ttls.rs +++ b/src/mode/station/auth/entreprise/ttls.rs @@ -12,7 +12,9 @@ use ratatui::{ use tui_input::backend::crossterm::EventHandler; -use crate::mode::station::auth::entreprise::{ERROR_PADDING, UserInputField, pad_string}; +use crate::mode::station::auth::entreprise::{ + ERROR_PADDING, UserInputField, iwd_network_name, pad_string, +}; #[derive(Debug, Clone, PartialEq, Default, strum_macros::Display)] enum Phase2Method { @@ -175,6 +177,7 @@ impl TTLS { pub fn apply(&mut self, network_name: &str) -> Result<()> { self.validate()?; + let network_name = iwd_network_name(network_name); let mut file = OpenOptions::new() .write(true) .read(true)