diff --git a/src/uu/install/src/install.rs b/src/uu/install/src/install.rs index 4242cc04b46..49252dcf9e2 100644 --- a/src/uu/install/src/install.rs +++ b/src/uu/install/src/install.rs @@ -25,7 +25,6 @@ use uucore::display::Quotable; use uucore::entries::{grp2gid, usr2uid}; use uucore::error::{FromIo, UError, UResult, UUsageError}; use uucore::fs::dir_strip_dot_for_creation; -use uucore::mode::get_umask; use uucore::perms::{Verbosity, VerbosityLevel, wrap_chown}; use uucore::process::{getegid, geteuid}; #[cfg(feature = "selinux")] @@ -339,7 +338,7 @@ fn behavior(matches: &ArgMatches) -> UResult { let specified_mode: Option = if matches.contains_id(OPT_MODE) { let x = matches.get_one::(OPT_MODE).ok_or(1)?; - Some(mode::parse(x, considering_dir, get_umask()).map_err(|err| { + Some(mode::parse(x, considering_dir, 0).map_err(|err| { show_error!( "{}", translate!("install-error-invalid-mode", "error" => err) diff --git a/tests/by-util/test_install.rs b/tests/by-util/test_install.rs index f4c7b2dc114..1e78b28dab1 100644 --- a/tests/by-util/test_install.rs +++ b/tests/by-util/test_install.rs @@ -243,6 +243,29 @@ fn test_install_mode_symbolic() { assert_eq!(0o100_003_u32, PermissionsExt::mode(&permissions)); } +#[test] +fn test_install_mode_symbolic_ignore_umask() { + let (at, mut ucmd) = at_and_ucmd!(); + let dir = "target_dir"; + let file = "source_file"; + let mode_arg = "--mode=+w"; + + at.touch(file); + at.mkdir(dir); + ucmd.arg(file) + .arg(dir) + .arg(mode_arg) + .umask(0o022) + .succeeds() + .no_stderr(); + + let dest_file = &format!("{dir}/{file}"); + assert!(at.file_exists(file)); + assert!(at.file_exists(dest_file)); + let permissions = at.metadata(dest_file).permissions(); + assert_eq!(0o100_222_u32, PermissionsExt::mode(&permissions)); +} + #[test] fn test_install_mode_failing() { let (at, mut ucmd) = at_and_ucmd!();