diff --git a/Cargo.lock b/Cargo.lock index f4c4a5ec..fae32578 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3675,9 +3675,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.45" +version = "0.23.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" +checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf" dependencies = [ "aws-lc-rs", "log", @@ -3712,9 +3712,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.15" +version = "0.103.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" +checksum = "4443b1b6d39d7c663139942cc4558262562d2c84123bb6282ef177009ca8b281" dependencies = [ "aws-lc-rs", "ring", @@ -4475,7 +4475,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.3", + "getrandom 0.3.4", "once_cell", "rustix", "windows-sys 0.61.2", @@ -5521,9 +5521,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78" +checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71" dependencies = [ "proc-macro2", "quote", diff --git a/src/config.rs b/src/config.rs index 529baa7c..f76d0827 100644 --- a/src/config.rs +++ b/src/config.rs @@ -233,16 +233,39 @@ pub fn get_config() -> Result { if let Some(config_path) = cli_config.config_path { let config_toml = fs::read_to_string(config_path) .map_err(|err| GatewayError::InvalidConfigFile(err.to_string()))?; - let file_config = toml::from_str(&config_toml) + let file_config: Config = toml::from_str(&config_toml) .map_err(|err| GatewayError::InvalidConfigFile(err.message().to_string()))?; + validate_ifname(&file_config.ifname)?; return Ok(file_config); } + validate_ifname(&cli_config.ifname)?; Ok(cli_config) } +fn validate_ifname(ifname: &str) -> Result<(), GatewayError> { + if ifname.len() > 15 { + return Err(GatewayError::InvalidConfigFile(format!( + "Interface name \"{ifname}\" is too long ({} chars, max 15)", + ifname.len() + ))); + } + Ok(()) +} + #[test] fn verify_cli() { use clap::CommandFactory; Config::command().debug_assert(); } + +#[test] +fn test_validate_ifname() { + assert!(validate_ifname("w").is_ok()); + assert!(validate_ifname("wg0").is_ok()); + assert!(validate_ifname("wg-defguard").is_ok()); + assert!(validate_ifname("wg-14-chars-ok").is_ok()); + assert!(validate_ifname("wg-15-chars-ok_").is_ok()); + assert!(validate_ifname("wg-16-chars-bad_").is_err()); + assert!(validate_ifname("wgMFA-looong-naame").is_err()); +}