1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 03:27:44 +00:00

chown: fails when XXXX. or XXXX: is provided (when XXXX is numeric values)

If the arg starts with an id numeric value, the group isn't set but the separator is provided,
we should fail with an error

Should fix tests/chown/separator.sh
This commit is contained in:
Sylvestre Ledru 2022-10-25 00:29:49 +02:00
parent 418518a443
commit 9f1ac221cd
2 changed files with 45 additions and 0 deletions

View file

@ -246,6 +246,19 @@ fn parse_spec(spec: &str, sep: char) -> UResult<(Option<u32>, Option<u32>)> {
} else { } else {
None None
}; };
if user.chars().next().map(char::is_numeric).unwrap_or(false)
&& group.is_empty()
&& spec != user
{
// if the arg starts with an id numeric value, the group isn't set but the separator is provided,
// we should fail with an error
return Err(USimpleError::new(
1,
format!("invalid spec: {}", spec.quote()),
));
}
Ok((uid, gid)) Ok((uid, gid))
} }

View file

@ -423,6 +423,38 @@ fn test_chown_only_user_id() {
.stderr_contains("failed to change"); .stderr_contains("failed to change");
} }
#[test]
fn test_chown_fail_id() {
// test chown 1111. file.txt
let scene = TestScenario::new(util_name!());
let at = &scene.fixtures;
let result = scene.cmd_keepenv("id").arg("-u").run();
if skipping_test_is_okay(&result, "id: cannot find name for group ID") {
return;
}
let user_id = String::from(result.stdout_str().trim());
assert!(!user_id.is_empty());
let file1 = "test_chown_file1";
at.touch(file1);
scene
.ucmd()
.arg(format!("{}:", user_id))
.arg(file1)
.fails()
.stderr_contains("invalid spec");
scene
.ucmd()
.arg(format!("{}.", user_id))
.arg(file1)
.fails()
.stderr_contains("invalid spec");
}
/// Test for setting the owner to a user ID for a user that does not exist. /// Test for setting the owner to a user ID for a user that does not exist.
/// ///
/// For example: /// For example: