From 3df930ca7e5d55352d71d97ea855bd8c26336be4 Mon Sep 17 00:00:00 2001 From: Sam Valladares Date: Wed, 27 May 2026 20:00:46 -0500 Subject: [PATCH] Fix data-dir permission preservation --- crates/vestige-mcp/src/main.rs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/crates/vestige-mcp/src/main.rs b/crates/vestige-mcp/src/main.rs index 52524ba..916c441 100644 --- a/crates/vestige-mcp/src/main.rs +++ b/crates/vestige-mcp/src/main.rs @@ -256,12 +256,13 @@ fn prepare_storage_path(data_dir: Option) -> io::Result } // Only create if it doesn't exist (avoids "File exists" error on existing directories) - if !data_dir.exists() { + let created = !data_dir.exists(); + if created { fs::create_dir_all(&data_dir)?; } #[cfg(unix)] - { + if created { use std::os::unix::fs::PermissionsExt; let _ = fs::set_permissions(&data_dir, fs::Permissions::from_mode(0o700)); } @@ -594,6 +595,23 @@ mod tests { assert_eq!(db_path, Some(data_dir.join(DATABASE_FILE))); } + #[cfg(unix)] + #[test] + fn prepare_storage_path_preserves_existing_data_dir_permissions() { + use std::os::unix::fs::PermissionsExt; + + let temp = tempfile::tempdir().unwrap(); + let data_dir = temp.path().join("shared"); + fs::create_dir_all(&data_dir).unwrap(); + fs::set_permissions(&data_dir, fs::Permissions::from_mode(0o755)).unwrap(); + + let db_path = prepare_storage_path(Some(data_dir.clone())).unwrap(); + let mode = fs::metadata(&data_dir).unwrap().permissions().mode() & 0o777; + + assert_eq!(db_path, Some(data_dir.join(DATABASE_FILE))); + assert_eq!(mode, 0o755); + } + #[test] fn expand_tilde_expands_current_users_home_only() { let home = BaseDirs::new().unwrap().home_dir().to_path_buf();