diff --git a/src/uu/mkfifo/src/mkfifo.rs b/src/uu/mkfifo/src/mkfifo.rs index 3586eb7c37c..607b8a9aaf9 100644 --- a/src/uu/mkfifo/src/mkfifo.rs +++ b/src/uu/mkfifo/src/mkfifo.rs @@ -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 diff --git a/tests/by-util/test_mkfifo.rs b/tests/by-util/test_mkfifo.rs index ac0b78b3a3b..35869fe5ddb 100644 --- a/tests/by-util/test_mkfifo.rs +++ b/tests/by-util/test_mkfifo.rs @@ -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() @@ -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()); +}