diff options
| author | Emīls Piņķis <emils@mullvad.net> | 2018-05-23 16:10:26 +0200 |
|---|---|---|
| committer | Emīls Piņķis <emils@mullvad.net> | 2018-06-19 18:07:25 +0100 |
| commit | bcf6afff4ed7241aee09b2db0ac9d7f70c41315f (patch) | |
| tree | 27eb7ba83cfbff995d7a14987ec20544170e6f90 | |
| parent | ac40302ffe9e7e0faec7d97e2a6a47fffd67674a (diff) | |
| download | mullvadvpn-bcf6afff4ed7241aee09b2db0ac9d7f70c41315f.tar.xz mullvadvpn-bcf6afff4ed7241aee09b2db0ac9d7f70c41315f.zip | |
Set permissions correctly for rpc_address_file on Windows
| -rw-r--r-- | mullvad-daemon/Cargo.toml | 1 | ||||
| -rw-r--r-- | mullvad-daemon/src/rpc_address_file.rs | 34 |
2 files changed, 18 insertions, 17 deletions
diff --git a/mullvad-daemon/Cargo.toml b/mullvad-daemon/Cargo.toml index cf417b7cc4..1c567052d1 100644 --- a/mullvad-daemon/Cargo.toml +++ b/mullvad-daemon/Cargo.toml @@ -41,6 +41,7 @@ simple-signal = "1.1" [target.'cfg(windows)'.dependencies] ctrlc = "3.0" windows-service = "0.1" +winapi = "0.3" [dev-dependencies] assert_matches = "1.0" diff --git a/mullvad-daemon/src/rpc_address_file.rs b/mullvad-daemon/src/rpc_address_file.rs index c8b0f2beee..b3d3656a04 100644 --- a/mullvad-daemon/src/rpc_address_file.rs +++ b/mullvad-daemon/src/rpc_address_file.rs @@ -4,6 +4,9 @@ use std::path::{Path, PathBuf}; use mullvad_paths; +#[cfg(windows)] +extern crate winapi; + error_chain! { errors { UnknownFilePath { @@ -64,23 +67,20 @@ pub fn remove() -> Result<()> { } fn open_file(path: &Path) -> io::Result<File> { - let file = OpenOptions::new() - .write(true) - .truncate(true) - .create(true) - .open(path)?; - set_rpc_file_permissions(&file)?; - Ok(file) -} + let mut open_options = OpenOptions::new(); + open_options.write(true).truncate(true).create(true); -#[cfg(unix)] -fn set_rpc_file_permissions(file: &File) -> io::Result<()> { - use std::os::unix::fs::PermissionsExt; - file.set_permissions(PermissionsExt::from_mode(0o644)) -} + #[cfg(windows)] + { + use std::os::windows::fs::OpenOptionsExt; + open_options.share_mode(winapi::um::winnt::FILE_SHARE_READ); + } -#[cfg(windows)] -fn set_rpc_file_permissions(_file: &File) -> io::Result<()> { - // TODO(linus): Lock permissions correctly on Windows. - Ok(()) + let file = open_options.open(path)?; + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + file.set_permissions(PermissionsExt::from_mode(0o644))?; + } + Ok(file) } |
