Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/uu/mkfifo/src/mkfifo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
1,
translate!("mkfifo-error-cannot-create-fifo", "path" => f.quote()),
));
continue;
}

// Explicitly set the permissions to ignore umask
Expand Down
34 changes: 29 additions & 5 deletions tests/by-util/test_mkfifo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -137,11 +137,9 @@ fn test_create_fifo_permission_denied() {
at.mkdir(no_exec_dir);
at.set_mode(no_exec_dir, 0o644);

let err_msg = format!(
"mkfifo: cannot create fifo '{named_pipe}': File exists
mkfifo: cannot set permissions on '{named_pipe}': Permission denied (os error 13)
"
);
// We no longer attempt to modify file permission if the file was failed to be created.
// Therefore the error message should only contain "cannot create".
let err_msg = format!("mkfifo: cannot create fifo '{named_pipe}': File exists\n");

scene
.ucmd()
Expand Down Expand Up @@ -199,3 +197,29 @@ fn test_mkfifo_selinux_invalid() {
}
}
}

#[test]
fn test_mkfifo_permission_unchanged_when_failed() {
use uucore::fs::display_permissions;

let scene = TestScenario::new(util_name!());
let at = &scene.fixtures;

let file_name = "test_file";
at.write(file_name, "content");
at.set_mode(file_name, 0o600);

let err_msg = format!("mkfifo: cannot create fifo '{file_name}': File exists\n");

scene
.ucmd()
.arg(file_name)
.arg("-m")
.arg("666")
.fails()
.stderr_is(err_msg.as_str());
let metadata = std::fs::metadata(at.subdir.join(file_name)).unwrap();
let permissions = display_permissions(&metadata, true);
let expected = "-rw-------";
assert_eq!(permissions, expected.to_string());
}
Loading