diff options
| -rw-r--r-- | CHANGELOG.md | 3 | ||||
| -rwxr-xr-x | dist-assets/pkg-scripts/preinstall | 1 | ||||
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 4 | ||||
| -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 |
7 files changed, 28 insertions, 5 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index a801e5e423..3ea3be3385 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,9 @@ Line wrap the file at 100 chars. Th - Disable keep alive on API RPC requests. Should stop reuse of invalid sockets after tunnel state changes. +#### macOS +- Fix permissions on log dir so problem-report tool has permission to read daemon logs. + #### Windows - Use proper app id in the registry. This avoids false-positives with certain anti-virus software. - Handle sleep/resume events to quickly restore the tunnel when the machine wakes up. diff --git a/dist-assets/pkg-scripts/preinstall b/dist-assets/pkg-scripts/preinstall index b9c5e69b82..0b243f255b 100755 --- a/dist-assets/pkg-scripts/preinstall +++ b/dist-assets/pkg-scripts/preinstall @@ -5,6 +5,7 @@ set -eux LOG_DIR=/var/log/mullvad-vpn mkdir -p $LOG_DIR +chmod 755 $LOG_DIR exec 2>&1 > $LOG_DIR/preinstall.log echo "Running preinstall at $(date)" diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs index 16f9123bb7..57755f83b5 100644 --- a/mullvad-daemon/src/lib.rs +++ b/mullvad-daemon/src/lib.rs @@ -320,7 +320,9 @@ impl Daemon { } ManagementInterfaceEvent(event) => self.handle_management_interface_event(event), ManagementInterfaceExited => { - return Err(ErrorKind::ManagementInterfaceError("Server exited unexpectedly").into()) + return Err( + ErrorKind::ManagementInterfaceError("Server exited unexpectedly").into(), + ); } TriggerShutdown => self.handle_trigger_shutdown_event(), } 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> { |
