summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLinus Färnstrand <linus@mullvad.net>2018-12-03 10:45:29 +0100
committerLinus Färnstrand <linus@mullvad.net>2018-12-03 11:07:19 +0100
commitedd44efd6f8ed9e6c9d1923443ec2945b7ca237c (patch)
treec64f124b1fed6d2a27ac99e4481d1b9513a78bee
parent88f8da4f90d3cacb23520b14dd38107b324d9a24 (diff)
downloadmullvadvpn-edd44efd6f8ed9e6c9d1923443ec2945b7ca237c.tar.xz
mullvadvpn-edd44efd6f8ed9e6c9d1923443ec2945b7ca237c.zip
Make daemon create log dir with correct permissions
-rw-r--r--mullvad-paths/src/cache.rs2
-rw-r--r--mullvad-paths/src/lib.rs13
-rw-r--r--mullvad-paths/src/logs.rs8
-rw-r--r--mullvad-paths/src/settings.rs2
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> {