summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mullvad-daemon/Cargo.toml1
-rw-r--r--mullvad-daemon/src/rpc_address_file.rs34
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)
}