diff options
| -rw-r--r-- | mullvad-paths/src/cache.rs | 2 | ||||
| -rw-r--r-- | mullvad-paths/src/lib.rs | 13 | ||||
| -rw-r--r-- | mullvad-paths/src/logs.rs | 8 | ||||
| -rw-r--r-- | mullvad-paths/src/settings.rs | 2 |
4 files changed, 21 insertions, 4 deletions
diff --git a/mullvad-paths/src/cache.rs b/mullvad-paths/src/cache.rs index 78b7803eba..094283bca6 100644 --- a/mullvad-paths/src/cache.rs +++ b/mullvad-paths/src/cache.rs @@ -6,7 +6,7 @@ use std::path::PathBuf; /// Creates and returns the cache directory pointed to by `MULLVAD_CACHE_DIR`, or the default /// one if that variable is unset. pub fn cache_dir() -> Result<PathBuf> { - crate::create_and_return(get_cache_dir) + crate::create_and_return(get_cache_dir, None) } fn get_cache_dir() -> Result<PathBuf> { diff --git a/mullvad-paths/src/lib.rs b/mullvad-paths/src/lib.rs index b95e281f19..1098332564 100644 --- a/mullvad-paths/src/lib.rs +++ b/mullvad-paths/src/lib.rs @@ -13,6 +13,10 @@ error_chain! { description("Failed to create directory") display("Failed to create directory {}", path.display()) } + SetDirPermissionFailed(path: PathBuf) { + description("Failed to set directory permissions") + display("Failed to set directory permissions on {}", path.display()) + } #[cfg(any(windows, target_os = "macos"))] FindDirError { description("Not able to find requested directory" )} #[cfg(windows)] @@ -35,9 +39,16 @@ fn get_allusersprofile_dir() -> Result<PathBuf> { } } -fn create_and_return(dir_fn: fn() -> Result<PathBuf>) -> Result<PathBuf> { +fn create_and_return( + dir_fn: fn() -> Result<PathBuf>, + permissions: Option<fs::Permissions>, +) -> Result<PathBuf> { let dir = dir_fn()?; fs::create_dir_all(&dir).chain_err(|| ErrorKind::CreateDirFailed(dir.clone()))?; + if let Some(permissions) = permissions { + fs::set_permissions(&dir, permissions) + .chain_err(|| ErrorKind::SetDirPermissionFailed(dir.clone()))?; + } Ok(dir) } diff --git a/mullvad-paths/src/logs.rs b/mullvad-paths/src/logs.rs index 91f92c82bc..13c4bcf35a 100644 --- a/mullvad-paths/src/logs.rs +++ b/mullvad-paths/src/logs.rs @@ -1,12 +1,18 @@ use crate::Result; use std::env; +#[cfg(unix)] +use std::os::unix::fs::PermissionsExt; use std::path::PathBuf; /// Creates and returns the logging directory pointed to by `MULLVAD_LOG_DIR`, or the default /// one if that variable is unset. pub fn log_dir() -> Result<PathBuf> { - crate::create_and_return(get_log_dir) + #[cfg(unix)] + let permissions = Some(PermissionsExt::from_mode(0o755)); + #[cfg(not(unix))] + let permissions = None; + crate::create_and_return(get_log_dir, permissions) } /// Get the logging directory, but don't try to create it. diff --git a/mullvad-paths/src/settings.rs b/mullvad-paths/src/settings.rs index 82872f38a4..1196adc77e 100644 --- a/mullvad-paths/src/settings.rs +++ b/mullvad-paths/src/settings.rs @@ -6,7 +6,7 @@ use std::path::PathBuf; /// Creates and returns the settings directory pointed to by `MULLVAD_SETTINGS_DIR`, or the default /// one if that variable is unset. pub fn settings_dir() -> Result<PathBuf> { - crate::create_and_return(get_settings_dir) + crate::create_and_return(get_settings_dir, None) } fn get_settings_dir() -> Result<PathBuf> { |
