From ea175ce25206defaa3e664eeb6c4c7fad1d12363 Mon Sep 17 00:00:00 2001 From: Pyokyeong Son Date: Thu, 17 Feb 2022 07:37:55 +0000 Subject: [PATCH 1/9] mkdir: permissions respects umask - hardcoded default permissions changed to ones defined by umask --- src/uu/mkdir/src/mkdir.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/uu/mkdir/src/mkdir.rs b/src/uu/mkdir/src/mkdir.rs index 377036174..7aa6fd8f8 100644 --- a/src/uu/mkdir/src/mkdir.rs +++ b/src/uu/mkdir/src/mkdir.rs @@ -64,7 +64,10 @@ fn get_mode(matches: &ArgMatches, mode_had_minus_prefix: bool) -> Result Ok(DEFAULT_PERM), + None => { + // If no mode argument is specified return the mode from umask + Ok(mode::get_umask()) + } } } @@ -119,7 +122,7 @@ pub fn uu_app<'a>() -> App<'a> { .short('m') .long(options::MODE) .help("set file mode (not implemented on windows)") - .default_value("755"), + .takes_value(true), ) .arg( Arg::new(options::PARENTS) From b8c0a87f8552290f07dcd22fbb6db89ba1c64569 Mon Sep 17 00:00:00 2001 From: Pyokyeong Son Date: Fri, 18 Feb 2022 07:52:38 +0000 Subject: [PATCH 2/9] mkdir: fixed permissions behavior with umask - umask application more closely resembles gnu --- src/uu/mkdir/src/mkdir.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/uu/mkdir/src/mkdir.rs b/src/uu/mkdir/src/mkdir.rs index 7aa6fd8f8..f1f21501a 100644 --- a/src/uu/mkdir/src/mkdir.rs +++ b/src/uu/mkdir/src/mkdir.rs @@ -65,8 +65,8 @@ fn get_mode(matches: &ArgMatches, mode_had_minus_prefix: bool) -> Result { - // If no mode argument is specified return the mode from umask - Ok(mode::get_umask()) + // If no mode argument is specified return the mode derived from umask + Ok(!mode::get_umask() & 0o0777) } } } From 8ffe367dd8c58a853208adfca79a428321a00f46 Mon Sep 17 00:00:00 2001 From: Pyokyeong Son Date: Sat, 19 Feb 2022 05:37:56 +0000 Subject: [PATCH 3/9] test/mkdir: added testing for umask compliance - tests for all permission combinations --- tests/by-util/test_mkdir.rs | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/tests/by-util/test_mkdir.rs b/tests/by-util/test_mkdir.rs index e1038003b..cfb50f252 100644 --- a/tests/by-util/test_mkdir.rs +++ b/tests/by-util/test_mkdir.rs @@ -1,6 +1,8 @@ use crate::common::util::*; #[cfg(not(windows))] use std::os::unix::fs::PermissionsExt; +extern crate libc; +use self::libc::umask; static TEST_DIR1: &str = "mkdir_test1"; static TEST_DIR2: &str = "mkdir_test2"; @@ -9,11 +11,7 @@ static TEST_DIR4: &str = "mkdir_test4/mkdir_test4_1"; static TEST_DIR5: &str = "mkdir_test5/mkdir_test5_1"; static TEST_DIR6: &str = "mkdir_test6"; static TEST_FILE7: &str = "mkdir_test7"; - -#[test] -fn test_mkdir_mkdir() { - new_ucmd!().arg(TEST_DIR1).succeeds(); -} +static TEST_DIR8: &str = "mkdir_test8"; #[test] fn test_mkdir_verbose() { @@ -100,3 +98,24 @@ fn test_multi_symbolic() { let perms = at.metadata(TEST_DIR1).permissions().mode(); assert_eq!(perms, 0o40750); } + +#[test] +#[cfg(not(windows))] +fn test_umask_compliance() { + fn test_single_case(umask_set: u32) { + let (at, mut ucmd) = at_and_ucmd!(); + + let original_umask = unsafe { umask(umask_set) }; + + ucmd.arg(TEST_DIR8).succeeds(); + let perms = at.metadata(TEST_DIR8).permissions().mode(); + + assert_eq!(perms, (!umask_set & 0o0777) + 0o40000); // before compare, add the setguid, uid bits + unsafe { umask(original_umask); } // set umask back to original + } + + for i in 0o0..0o777 { // tests all permission combinations + test_single_case(i); + } + +} From 553c22d33db3b47b464e58300679cb19d388a049 Mon Sep 17 00:00:00 2001 From: Pyokyeong Son Date: Sat, 19 Feb 2022 05:46:11 +0000 Subject: [PATCH 4/9] test/mkdir: reverted mkdir testing delete --- tests/by-util/test_mkdir.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/by-util/test_mkdir.rs b/tests/by-util/test_mkdir.rs index cfb50f252..3806df815 100644 --- a/tests/by-util/test_mkdir.rs +++ b/tests/by-util/test_mkdir.rs @@ -13,6 +13,11 @@ static TEST_DIR6: &str = "mkdir_test6"; static TEST_FILE7: &str = "mkdir_test7"; static TEST_DIR8: &str = "mkdir_test8"; +#[test] +fn test_mkdir_mkdir() { + new_ucmd!().arg(TEST_DIR1).succeeds(); +} + #[test] fn test_mkdir_verbose() { let expected = "mkdir: created directory 'mkdir_test1'\n"; From fe9e9e668998fc180ea6419df6170b72040dd040 Mon Sep 17 00:00:00 2001 From: Pyokyeong Son Date: Thu, 24 Feb 2022 07:26:46 +0000 Subject: [PATCH 5/9] test/mkdir: made umask variable mode_t --- tests/by-util/test_mkdir.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/by-util/test_mkdir.rs b/tests/by-util/test_mkdir.rs index 3806df815..d2181e8ea 100644 --- a/tests/by-util/test_mkdir.rs +++ b/tests/by-util/test_mkdir.rs @@ -2,7 +2,7 @@ use crate::common::util::*; #[cfg(not(windows))] use std::os::unix::fs::PermissionsExt; extern crate libc; -use self::libc::umask; +use self::libc::{umask, mode_t}; static TEST_DIR1: &str = "mkdir_test1"; static TEST_DIR2: &str = "mkdir_test2"; @@ -107,7 +107,7 @@ fn test_multi_symbolic() { #[test] #[cfg(not(windows))] fn test_umask_compliance() { - fn test_single_case(umask_set: u32) { + fn test_single_case(umask_set: mode_t) { let (at, mut ucmd) = at_and_ucmd!(); let original_umask = unsafe { umask(umask_set) }; From 31d91f36b94efa49125a5310b2811ea3e61d82a1 Mon Sep 17 00:00:00 2001 From: Pyokyeong Son Date: Thu, 24 Feb 2022 07:43:53 +0000 Subject: [PATCH 6/9] test/mkdir: fixed assert types to both mode_t --- tests/by-util/test_mkdir.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/by-util/test_mkdir.rs b/tests/by-util/test_mkdir.rs index d2181e8ea..730beaef1 100644 --- a/tests/by-util/test_mkdir.rs +++ b/tests/by-util/test_mkdir.rs @@ -113,7 +113,7 @@ fn test_umask_compliance() { let original_umask = unsafe { umask(umask_set) }; ucmd.arg(TEST_DIR8).succeeds(); - let perms = at.metadata(TEST_DIR8).permissions().mode(); + let perms = at.metadata(TEST_DIR8).permissions().mode() as mode_t; assert_eq!(perms, (!umask_set & 0o0777) + 0o40000); // before compare, add the setguid, uid bits unsafe { umask(original_umask); } // set umask back to original @@ -122,5 +122,5 @@ fn test_umask_compliance() { for i in 0o0..0o777 { // tests all permission combinations test_single_case(i); } - + } From 98370727a24e2fe0c2dbc71c27bb5c2e4867c32a Mon Sep 17 00:00:00 2001 From: Pyokyeong Son Date: Fri, 25 Mar 2022 15:04:15 +0000 Subject: [PATCH 7/9] test/mkdir: formatting compliance --- tests/by-util/test_mkdir.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/tests/by-util/test_mkdir.rs b/tests/by-util/test_mkdir.rs index 6d617f4e1..8b08d7962 100644 --- a/tests/by-util/test_mkdir.rs +++ b/tests/by-util/test_mkdir.rs @@ -1,8 +1,10 @@ use crate::common::util::*; #[cfg(not(windows))] use std::os::unix::fs::PermissionsExt; +#[cfg(not(windows))] extern crate libc; -use self::libc::{umask, mode_t}; +#[cfg(not(windows))] +use self::libc::{mode_t, umask}; static TEST_DIR1: &str = "mkdir_test1"; static TEST_DIR2: &str = "mkdir_test2"; @@ -17,7 +19,7 @@ static TEST_DIR10: &str = "mkdir_test10"; #[test] fn test_mkdir_mkdir() { - new_ucmd!().arg(TEST_DIR1).succeeds(); + new_ucmd!().arg(TEST_DIR1).succeeds(); } #[test] @@ -138,11 +140,14 @@ fn test_umask_compliance() { ucmd.arg(TEST_DIR10).succeeds(); let perms = at.metadata(TEST_DIR10).permissions().mode() as mode_t; - assert_eq!(perms, (!umask_set & 0o0777) + 0o40000); // before compare, add the setguid, uid bits - unsafe { umask(original_umask); } // set umask back to original + assert_eq!(perms, (!umask_set & 0o0777) + 0o40000); // before compare, add the set GUID, UID bits + unsafe { + umask(original_umask); + } // set umask back to original } - for i in 0o0..0o777 { // tests all permission combinations + for i in 0o0..0o777 { + // tests all permission combinations test_single_case(i); } } From 9a76f3ba31365c77291eae72d84f848dc7d677f9 Mon Sep 17 00:00:00 2001 From: Pyokyeong Son Date: Thu, 31 Mar 2022 15:50:52 +0900 Subject: [PATCH 8/9] tests/mkdir: reduced tested permission combinations tests/pwd: escapted directory paths --- tests/by-util/test_mkdir.rs | 7 +++---- tests/by-util/test_pwd.rs | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/tests/by-util/test_mkdir.rs b/tests/by-util/test_mkdir.rs index 09e9915db..b2d2dc8fd 100644 --- a/tests/by-util/test_mkdir.rs +++ b/tests/by-util/test_mkdir.rs @@ -19,7 +19,6 @@ static TEST_DIR10: &str = "mkdir_test10/."; static TEST_DIR11: &str = "mkdir_test11/.."; static TEST_DIR12: &str = "mkdir_test12"; - #[test] fn test_mkdir_mkdir() { new_ucmd!().arg(TEST_DIR1).succeeds(); @@ -175,8 +174,8 @@ fn test_umask_compliance() { } // set umask back to original } - for i in 0o0..0o777 { + for i in 0o0..0o027 { // tests all permission combinations - test_single_case(i); + test_single_case(i as mode_t); } -} \ No newline at end of file +} diff --git a/tests/by-util/test_pwd.rs b/tests/by-util/test_pwd.rs index bc08ddbb0..950a148a3 100644 --- a/tests/by-util/test_pwd.rs +++ b/tests/by-util/test_pwd.rs @@ -26,7 +26,7 @@ fn test_deleted_dir() { let output = Command::new("sh") .arg("-c") .arg(format!( - "cd '{}'; mkdir foo; cd foo; rmdir ../foo; exec {} {}", + "cd '{}'; mkdir foo; cd foo; rmdir ../foo; exec '{}' {}", at.root_dir_resolved(), ts.bin_path.to_str().unwrap(), ts.util_name, From 12ad0f0903d7cb34504bbbc3b04068218aea9783 Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Sat, 2 Apr 2022 09:54:11 +0200 Subject: [PATCH 9/9] Fix clippy Co-authored-by: Terts Diepraam --- tests/by-util/test_mkdir.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/by-util/test_mkdir.rs b/tests/by-util/test_mkdir.rs index b2d2dc8fd..be7a95af2 100644 --- a/tests/by-util/test_mkdir.rs +++ b/tests/by-util/test_mkdir.rs @@ -17,6 +17,7 @@ static TEST_DIR8: &str = "mkdir_test8/mkdir_test8_1/mkdir_test8_2"; static TEST_DIR9: &str = "mkdir_test9/../mkdir_test9_1/../mkdir_test9_2"; static TEST_DIR10: &str = "mkdir_test10/."; static TEST_DIR11: &str = "mkdir_test11/.."; +#[cfg(not(windows))] static TEST_DIR12: &str = "mkdir_test12"; #[test]