From 2b3066b5b9f726dc197134781b0a8ec375a54843 Mon Sep 17 00:00:00 2001 From: Jay Hemnani <193022578+jayhemnani9910@users.noreply.github.com> Date: Fri, 23 Oct 2026 02:33:50 +0530 Subject: [PATCH 1/2] uuidgen: accept a UUID as --namespace --- src/uu/uuidgen/src/uuidgen.rs | 14 +++++++++----- tests/by-util/test_uuidgen.rs | 36 +++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/src/uu/uuidgen/src/uuidgen.rs b/src/uu/uuidgen/src/uuidgen.rs index 4d74bd3c..8e05664d 100644 --- a/src/uu/uuidgen/src/uuidgen.rs +++ b/src/uu/uuidgen/src/uuidgen.rs @@ -98,7 +98,7 @@ pub fn uu_app() -> Command { .long(options::NAMESPACE) .action(ArgAction::Set) .value_parser(namespace_from_str) - .help("namespace for md5/sha1 - one of: @dns @url @oid @x500"), + .help("namespace for md5/sha1 - a UUID or one of: @dns @url @oid @x500"), ) .arg( Arg::new(options::NAME) @@ -132,10 +132,14 @@ fn namespace_from_str(s: &str) -> Result { "@url" => Ok(Uuid::NAMESPACE_URL), "@oid" => Ok(Uuid::NAMESPACE_OID), "@x500" => Ok(Uuid::NAMESPACE_X500), - _ => Err(USimpleError { - code: 1, - message: format!("Invalid namespace {s}."), - }), + // only the 36-character hyphenated form, like libuuid's uuid_parse() + _ => match Uuid::try_parse(s) { + Ok(uuid) if s.len() == 36 => Ok(uuid), + _ => Err(USimpleError { + code: 1, + message: format!("Invalid namespace {s}."), + }), + }, } } diff --git a/tests/by-util/test_uuidgen.rs b/tests/by-util/test_uuidgen.rs index 91bc4bff..ec96c3a9 100644 --- a/tests/by-util/test_uuidgen.rs +++ b/tests/by-util/test_uuidgen.rs @@ -61,6 +61,42 @@ fn test_md5_sha1() { .stdout_only("34da942e-f4a3-5169-9c65-267d2b22cf11\n"); } +#[test] +fn test_uuid_namespace() { + // the @dns namespace written out, in both cases + new_ucmd!() + .args(&[ + "-m", + "-n", + "6ba7b810-9dad-11d1-80b4-00c04fd430c8", + "-N", + "a", + ]) + .succeeds() + .stdout_only("4c104dd0-4821-30d5-9ce3-0e7a1f8b7c0d\n"); + new_ucmd!() + .args(&[ + "-s", + "-n", + "6BA7B810-9DAD-11D1-80B4-00C04FD430C8", + "-N", + "a", + ]) + .succeeds() + .stdout_only("4f3f2898-69e3-5a0d-820a-c4e87987dbce\n"); + for namespace in [ + "{6ba7b810-9dad-11d1-80b4-00c04fd430c8}", + "6ba7b8109dad11d180b400c04fd430c8", + "urn:uuid:6ba7b810-9dad-11d1-80b4-00c04fd430c8", + "6ba7b810-9dad-11d1-80b4-00c04fd430c", + ] { + new_ucmd!() + .args(&["-s", "-n", namespace, "-N", "a"]) + .fails() + .code_is(1); + } +} + #[test] fn test_invalid_arg() { new_ucmd!().arg("-Z").fails().code_is(1); From bcd5dfc143499932eee999ece9594b1b46a5a59a Mon Sep 17 00:00:00 2001 From: Jay Hemnani <193022578+jayhemnani9910@users.noreply.github.com> Date: Sun, 25 Oct 2026 13:10:22 +0530 Subject: [PATCH 2/2] uuidgen: check the error message for a rejected namespace --- tests/by-util/test_uuidgen.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/by-util/test_uuidgen.rs b/tests/by-util/test_uuidgen.rs index ec96c3a9..e4000cc8 100644 --- a/tests/by-util/test_uuidgen.rs +++ b/tests/by-util/test_uuidgen.rs @@ -93,7 +93,8 @@ fn test_uuid_namespace() { new_ucmd!() .args(&["-s", "-n", namespace, "-N", "a"]) .fails() - .code_is(1); + .code_is(1) + .stderr_contains(format!("Invalid namespace {namespace}.")); } }