diff options
| author | Linus Färnstrand <linus@mullvad.net> | 2017-10-11 16:12:59 +0200 |
|---|---|---|
| committer | Linus Färnstrand <linus@mullvad.net> | 2017-10-12 10:22:39 +0200 |
| commit | 636ff6e2ddcb98292bc8da613003bcff2da78ad3 (patch) | |
| tree | f8ccd9e542ff330515d042a3d587488e7d1160ff /mullvad-daemon | |
| parent | 0fafa735bcda4485df0f0d99ec343ea006eaa171 (diff) | |
| download | mullvadvpn-636ff6e2ddcb98292bc8da613003bcff2da78ad3.tar.xz mullvadvpn-636ff6e2ddcb98292bc8da613003bcff2da78ad3.zip | |
Store authenticated flag as Arc<AtomicBool>
Diffstat (limited to 'mullvad-daemon')
| -rw-r--r-- | mullvad-daemon/src/management_interface.rs | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs index 58785a4ffe..73dd190113 100644 --- a/mullvad-daemon/src/management_interface.rs +++ b/mullvad-daemon/src/management_interface.rs @@ -19,6 +19,7 @@ use std::collections::HashMap; use std::collections::hash_map::Entry; use std::net::{IpAddr, Ipv4Addr}; use std::sync::{Arc, Mutex, RwLock}; +use std::sync::atomic::{AtomicBool, Ordering}; use talpid_core::mpsc::IntoSender; use talpid_ipc; @@ -290,11 +291,11 @@ impl<T: From<TunnelCommand> + 'static + Send> ManagementInterface<T> { } fn check_auth(&self, meta: &Meta) -> Result<(), Error> { - if meta.authenticated { - debug!("auth success"); + if meta.authenticated.load(Ordering::SeqCst) { + trace!("auth success"); Ok(()) } else { - debug!("auth failed"); + trace!("auth failed"); Err(Error::invalid_request()) } } @@ -313,10 +314,11 @@ macro_rules! try_future { impl<T: From<TunnelCommand> + 'static + Send> ManagementInterfaceApi for ManagementInterface<T> { type Metadata = Meta; - fn auth(&self, mut meta: Self::Metadata, shared_secret: String) -> BoxFuture<(), Error> { - meta.authenticated = shared_secret == self.shared_secret; - debug!("authenticated: {}", meta.authenticated); - if meta.authenticated { + fn auth(&self, meta: Self::Metadata, shared_secret: String) -> BoxFuture<(), Error> { + let authenticated = shared_secret == self.shared_secret; + meta.authenticated.store(authenticated, Ordering::SeqCst); + debug!("authenticated: {}", authenticated); + if authenticated { Box::new(future::ok(())) } else { Box::new(future::err(Error::internal_error())) @@ -469,7 +471,7 @@ impl<T: From<TunnelCommand> + 'static + Send> ManagementInterfaceApi for Managem #[derive(Clone, Debug, Default)] pub struct Meta { session: Option<Arc<Session>>, - authenticated: bool, + authenticated: Arc<AtomicBool>, } /// Make the `Meta` type possible to use as jsonrpc metadata type. @@ -486,6 +488,6 @@ impl PubSubMetadata for Meta { fn meta_extractor(context: &jsonrpc_ws_server::RequestContext) -> Meta { Meta { session: Some(Arc::new(Session::new(context.sender()))), - authenticated: false, + authenticated: Arc::new(AtomicBool::new(false)), } } |
