diff --git a/src/uu/mktemp/src/mktemp.rs b/src/uu/mktemp/src/mktemp.rs index 0a81c3ea0..ed761a932 100644 --- a/src/uu/mktemp/src/mktemp.rs +++ b/src/uu/mktemp/src/mktemp.rs @@ -311,6 +311,7 @@ fn exec(dir: &Path, prefix: &str, rand: usize, suffix: &str, make_dir: bool) -> .1 }; + #[cfg(not(windows))] if make_dir { fs::set_permissions(&path, fs::Permissions::from_mode(0o700))?; } diff --git a/tests/by-util/test_mktemp.rs b/tests/by-util/test_mktemp.rs index c28efc37b..c8a3bfb39 100644 --- a/tests/by-util/test_mktemp.rs +++ b/tests/by-util/test_mktemp.rs @@ -5,6 +5,9 @@ use crate::common::util::*; use std::path::PathBuf; use tempfile::tempdir; +#[cfg(unix)] +use std::os::unix::fs::PermissionsExt; + static TEST_TEMPLATE1: &str = "tempXXXXXX"; static TEST_TEMPLATE2: &str = "temp"; static TEST_TEMPLATE3: &str = "tempX"; @@ -482,3 +485,15 @@ fn test_respect_template_directory() { assert_matches_template!(template, filename); assert!(at.file_exists(filename)); } + +#[cfg(unix)] +#[test] +fn test_directory_permissions() { + let (at, mut ucmd) = at_and_ucmd!(); + let result = ucmd.args(&["-d", "XXX"]).succeeds(); + let dirname = result.no_stderr().stdout_str().trim_end(); + assert_matches_template!("XXX", dirname); + let metadata = at.metadata(dirname); + assert!(metadata.is_dir()); + assert_eq!(metadata.permissions().mode(), 0o40700); +}