mirror of
https://github.com/uutils/coreutils.git
synced 2026-06-10 15:48:22 -07:00
mkfifo: error when non-file permission mode set (#10372)
--------- Co-authored-by: Chris Dryden <christopher.paul.dryden@gmail.com>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 => {
|
||||
|
||||
@@ -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!()
|
||||
|
||||
Reference in New Issue
Block a user