From 00cbc5c31df770fe1b046e5fd7c0b251cc25ab07 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 11 Feb 2026 10:13:59 +0100 Subject: [PATCH] relax requirements on imported access keys to allow easier transition from other S3 storage providers (fix #1262) --- src/model/key_table.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/model/key_table.rs b/src/model/key_table.rs index ded9832d..6eeae171 100644 --- a/src/model/key_table.rs +++ b/src/model/key_table.rs @@ -155,12 +155,23 @@ impl Key { /// Import a key from it's parts pub fn import(key_id: &str, secret_key: &str, name: &str) -> Result { - if key_id.len() != 26 || &key_id[..2] != "GK" || hex::decode(&key_id[2..]).is_err() { - return Err("The specified key ID is not a valid Garage key ID (starts with `GK`, followed by 12 hex-encoded bytes)"); + if key_id.len() < 8 { + return Err("Key identifiers should be at least 8 characters long"); } - if secret_key.len() != 64 || hex::decode(secret_key).is_err() { - return Err("The specified secret key is not a valid Garage secret key (composed of 32 hex-encoded bytes)"); + if !key_id + .chars() + .all(|c| c.is_ascii_alphanumeric() || "-_.".contains(c)) + { + return Err("Key identifiers should be composed only of ASCII alphanumeric characters and characters '-', '_' and '.'"); + } + + if secret_key.len() < 16 { + return Err("Secret keys should be at least 16 characters long"); + } + + if !secret_key.chars().all(|c| c.is_ascii_graphic()) { + return Err("Secret keys should be composed only of graphic ASCII characters (U+0021 to U+007E)"); } Ok(Self {