Skip to content

Commit

Permalink
Merge pull request #3471 from 353fc443/mktemp-set-dir-mode
Browse files Browse the repository at this point in the history
mktemp: change directory permission after creation
  • Loading branch information
sylvestre authored May 25, 2022
2 parents ab73692 + 1243127 commit fa57760
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/uu/mktemp/src/mktemp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@ use std::fmt::Display;
use std::iter;
use std::path::{is_separator, Path, PathBuf, MAIN_SEPARATOR};

#[cfg(unix)]
use std::fs;
#[cfg(unix)]
use std::os::unix::prelude::PermissionsExt;

use rand::Rng;
use tempfile::Builder;

Expand Down Expand Up @@ -346,6 +351,11 @@ 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))?;
}

// Get just the last component of the path to the created
// temporary file or directory.
let filename = path.file_name();
Expand Down
15 changes: 15 additions & 0 deletions tests/by-util/test_mktemp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ use uucore::display::Quotable;
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";
Expand Down Expand Up @@ -501,6 +504,18 @@ fn test_respect_template_directory() {
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);
}

/// Test that a template with a path separator is invalid.
#[test]
fn test_template_path_separator() {
Expand Down

0 comments on commit fa57760

Please sign in to comment.