Skip to content

Commit 3026d0d

Browse files
w007878ChrisDryden
andauthored
mkfifo: error when non-file permission mode set (#10372)
--------- Co-authored-by: Chris Dryden <christopher.paul.dryden@gmail.com>
1 parent 0eb2ade commit 3026d0d

4 files changed

Lines changed: 27 additions & 0 deletions

File tree

src/uu/mkfifo/locales/en-US.ftl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ mkfifo-error-invalid-mode = invalid mode: { $error }
1111
mkfifo-error-missing-operand = missing operand
1212
mkfifo-error-cannot-create-fifo = cannot create fifo { $path }: File exists
1313
mkfifo-error-cannot-set-permissions = cannot set permissions on { $path }: { $error }
14+
mkfifo-error-non-file-permission = mode must specify only file permission bits

src/uu/mkfifo/locales/fr-FR.ftl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ mkfifo-error-invalid-mode = mode invalide : { $error }
1111
mkfifo-error-missing-operand = opérande manquant
1212
mkfifo-error-cannot-create-fifo = impossible de créer le fifo { $path } : Le fichier existe
1313
mkfifo-error-cannot-set-permissions = impossible de définir les permissions sur { $path } : { $error }
14+
mkfifo-error-non-file-permission = le mode ne doit spécifier que des bits de permission de fichier

src/uu/mkfifo/src/mkfifo.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,15 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
2828
let mode = calculate_mode(matches.get_one::<String>(options::MODE))
2929
.map_err(|e| USimpleError::new(1, translate!("mkfifo-error-invalid-mode", "error" => e)))?;
3030

31+
// Check if mode contains special bits
32+
let non_file_permission_bits = 0o7000; // setuid, setgid, sticky bits
33+
if mode & non_file_permission_bits != 0 {
34+
return Err(USimpleError::new(
35+
1,
36+
translate!("mkfifo-error-non-file-permission"),
37+
));
38+
}
39+
3140
let fifos: Vec<String> = match matches.get_many::<String>(options::FIFO) {
3241
Some(v) => v.cloned().collect(),
3342
None => {

tests/by-util/test_mkfifo.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,22 @@ fn test_create_one_fifo_with_invalid_mode() {
4343
.stderr_contains("invalid mode");
4444
}
4545

46+
#[test]
47+
fn test_create_one_fifo_with_non_file_permission_mode() {
48+
new_ucmd!()
49+
.arg("abcd")
50+
.arg("-m")
51+
.arg("1777")
52+
.fails()
53+
.stderr_is("mkfifo: mode must specify only file permission bits\n");
54+
new_ucmd!()
55+
.arg("abcd")
56+
.arg("-m")
57+
.arg("1999")
58+
.fails()
59+
.stderr_contains("invalid mode");
60+
}
61+
4662
#[test]
4763
fn test_create_multiple_fifos() {
4864
new_ucmd!()

0 commit comments

Comments
 (0)