mirror of
https://github.com/uutils/coreutils.git
synced 2026-06-10 15:48:22 -07:00
chmod: fix error handling if multiple files are handled (#9793)
* chmod: fix error handling if multiple files are handled * chmod: add regression test for correct exit codes * chmod: fix test expected error msg --------- Co-authored-by: Sylvestre Ledru <sylvestre@debian.org>
This commit is contained in:
co-authored by
Sylvestre Ledru
parent
ef215d4971
commit
abd581f62e
@@ -411,7 +411,7 @@ impl Chmoder {
|
||||
return Err(ChmodError::PreserveRoot("/".into()).into());
|
||||
}
|
||||
if self.recursive {
|
||||
r = self.walk_dir_with_context(file, true);
|
||||
r = self.walk_dir_with_context(file, true).and(r);
|
||||
} else {
|
||||
r = self.chmod_file(file).and(r);
|
||||
}
|
||||
|
||||
@@ -375,6 +375,38 @@ fn test_permission_denied() {
|
||||
.stderr_is("chmod: cannot access 'd/no-x/y': Permission denied\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[allow(clippy::unreadable_literal)]
|
||||
fn test_chmod_recursive_correct_exit_code() {
|
||||
let (at, mut ucmd) = at_and_ucmd!();
|
||||
|
||||
// create 3 folders to test on
|
||||
at.mkdir("a");
|
||||
at.mkdir("a/b");
|
||||
at.mkdir("z");
|
||||
|
||||
// remove read permissions for folder a so the chmod command for a/b fails
|
||||
let mut perms = at.metadata("a").permissions();
|
||||
perms.set_mode(0o000);
|
||||
set_permissions(at.plus_as_string("a"), perms).unwrap();
|
||||
|
||||
#[cfg(not(target_os = "linux"))]
|
||||
let err_msg = "chmod: Permission denied\n";
|
||||
#[cfg(target_os = "linux")]
|
||||
let err_msg = "chmod: cannot access 'a': Permission denied\n";
|
||||
|
||||
// order of command is a, a/b then c
|
||||
// command is expected to fail and not just take the last exit code
|
||||
ucmd.arg("-R")
|
||||
.arg("--verbose")
|
||||
.arg("a+w")
|
||||
.arg("a")
|
||||
.arg("z")
|
||||
.umask(0)
|
||||
.fails()
|
||||
.stderr_is(err_msg);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[allow(clippy::unreadable_literal)]
|
||||
fn test_chmod_recursive() {
|
||||
|
||||
Reference in New Issue
Block a user