Merge #1147: Restrict a pre-existing data directory to 0700 (@Silvertree2010)

This commit is contained in:
bflatastic
2026-10-24 09:21:45 +07:00
2 changed files with 15 additions and 0 deletions
+4
View File
@@ -312,6 +312,10 @@ pub fn lock(root: &Path) -> Result<Option<File>, String> {
#[cfg(unix)]
std::os::unix::fs::DirBuilderExt::mode(&mut dirs, 0o700);
dirs.create(root).map_err(|e| format!("can't create the data directory {}: {e}", root.display()))?;
// `DirBuilder` only applies the mode to directories it creates; tighten an existing one too.
#[cfg(unix)]
fs::set_permissions(root, std::os::unix::fs::PermissionsExt::from_mode(0o700))
.map_err(|e| format!("can't restrict the data directory {}: {e}", root.display()))?;
let f = OpenOptions::new()
.create(true)
.truncate(false)
+11
View File
@@ -229,6 +229,17 @@ fn one_server_per_data_directory() {
assert_eq!(again.key(), key, "the key is kept");
}
#[cfg(unix)]
#[test]
fn an_existing_data_directory_is_made_private() {
use std::os::unix::fs::PermissionsExt;
let dir = TempDir::new("perms");
fs::set_permissions(dir.path(), fs::Permissions::from_mode(0o755)).unwrap();
assert!(crate::store::lock(dir.path()).unwrap().is_some());
let mode = fs::metadata(dir.path()).unwrap().permissions().mode() & 0o777;
assert_eq!(mode, 0o700);
}
#[test]
fn temporary_directories_are_removed() {
let path = {