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/locales/en-US.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ mkfifo-error-invalid-mode = invalid mode: { $error }
mkfifo-error-missing-operand = missing operand
mkfifo-error-cannot-create-fifo = cannot create fifo { $path }: File exists
mkfifo-error-cannot-set-permissions = cannot set permissions on { $path }: { $error }
mkfifo-error-non-file-permission = mode must specify only file permission bits
1 change: 1 addition & 0 deletions src/uu/mkfifo/locales/fr-FR.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ mkfifo-error-invalid-mode = mode invalide : { $error }
mkfifo-error-missing-operand = opérande manquant
mkfifo-error-cannot-create-fifo = impossible de créer le fifo { $path } : Le fichier existe
mkfifo-error-cannot-set-permissions = impossible de définir les permissions sur { $path } : { $error }
mkfifo-error-non-file-permission = le mode ne doit spécifier que des bits de permission de fichier
9 changes: 9 additions & 0 deletions src/uu/mkfifo/src/mkfifo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,15 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
let mode = calculate_mode(matches.get_one::<String>(options::MODE))
.map_err(|e| USimpleError::new(1, translate!("mkfifo-error-invalid-mode", "error" => e)))?;

// Check if mode contains special bits
let non_file_permission_bits = 0o7000; // setuid, setgid, sticky bits
if mode & non_file_permission_bits != 0 {
return Err(USimpleError::new(
1,
translate!("mkfifo-error-non-file-permission"),
));
}

let fifos: Vec<String> = match matches.get_many::<String>(options::FIFO) {
Some(v) => v.cloned().collect(),
None => {
Expand Down
16 changes: 16 additions & 0 deletions tests/by-util/test_mkfifo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,22 @@ fn test_create_one_fifo_with_invalid_mode() {
.stderr_contains("invalid mode");
}

#[test]
fn test_create_one_fifo_with_non_file_permission_mode() {
new_ucmd!()
.arg("abcd")
.arg("-m")
.arg("1777")
.fails()
.stderr_is("mkfifo: mode must specify only file permission bits\n");
new_ucmd!()
.arg("abcd")
.arg("-m")
.arg("1999")
.fails()
.stderr_contains("invalid mode");
}

#[test]
fn test_create_multiple_fifos() {
new_ucmd!()
Expand Down
Loading