diff options
| author | Emīls Piņķis <emils@mullvad.net> | 2018-08-27 14:59:56 +0100 |
|---|---|---|
| committer | Emīls Piņķis <emils@mullvad.net> | 2018-08-29 16:27:53 +0100 |
| commit | bc856deb0d0556ea938b75fa47ff6afa303922c4 (patch) | |
| tree | 9f8ade7f99b9f6b93e0c01d17360d9e4c3a243bb /talpid-ipc/src | |
| parent | 2acc24cc10e25b8d413316a518e8f36083d890cc (diff) | |
| download | mullvadvpn-bc856deb0d0556ea938b75fa47ff6afa303922c4.tar.xz mullvadvpn-bc856deb0d0556ea938b75fa47ff6afa303922c4.zip | |
Use IPC instead of websockets in talpid-ipc
Diffstat (limited to 'talpid-ipc/src')
| -rw-r--r-- | talpid-ipc/src/lib.rs | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/talpid-ipc/src/lib.rs b/talpid-ipc/src/lib.rs index d775dfbcaa..6104a59848 100644 --- a/talpid-ipc/src/lib.rs +++ b/talpid-ipc/src/lib.rs @@ -10,28 +10,22 @@ #[macro_use] extern crate error_chain; -#[macro_use] -extern crate log; extern crate serde; -#[macro_use] extern crate serde_json; extern crate jsonrpc_core; extern crate jsonrpc_ipc_server; extern crate jsonrpc_pubsub; -#[macro_use] + extern crate jsonrpc_client_core; extern crate jsonrpc_client_ipc; -extern crate tokio_core; -extern crate url; -extern crate ws; use jsonrpc_core::{MetaIoHandler, Metadata}; -use jsonrpc_ipc_server::{MetaExtractor, NoopExtractor, Server, ServerBuilder}; +use jsonrpc_ipc_server::{MetaExtractor, NoopExtractor, SecurityAttributes, Server, ServerBuilder}; -use std::fmt; +use std::fmt; /// An Id created by the Ipc server that the client can use to connect to it pub type IpcServerId = String; @@ -41,6 +35,10 @@ error_chain!{ IpcServerError { description("Error in IPC server") } + + PermissionsError { + description("Unable to set permissions for IPC endpoint") + } } } @@ -64,13 +62,25 @@ impl IpcServer { M: Metadata + Default, E: MetaExtractor<M>, { - ServerBuilder::new(handler) - .session_meta_extractor(meta_extractor) + let security_attributes = SecurityAttributes::allow_everyone_create() + .chain_err(|| ErrorKind::PermissionsError)?; + let server = ServerBuilder::with_meta_extractor(handler, meta_extractor) + .set_security_attributes(security_attributes) .start(&path) + .chain_err(|| ErrorKind::IpcServerError) .map(|server| IpcServer { path: path.to_owned(), - server: server, - }).chain_err(|| ErrorKind::IpcServerError) + server, + })?; + + #[cfg(unix)] + { + use std::fs; + use std::os::unix::fs::PermissionsExt; + fs::set_permissions(&path, PermissionsExt::from_mode(0o766)) + .chain_err(|| ErrorKind::PermissionsError)?; + } + Ok(server) } /// Returns the uds/named pipe path this `IpcServer` is listening on. @@ -86,7 +96,7 @@ impl IpcServer { /// Consumes the server and waits for it to finish. Get a `CloseHandle` before calling this /// if you want to be able to shut the server down. pub fn wait(self) { - self.server.wait() + self.server.wait(); } } @@ -100,7 +110,6 @@ impl fmt::Debug for IpcServer { } } - #[derive(Clone)] pub struct CloseHandle(jsonrpc_ipc_server::CloseHandle); |
