summaryrefslogtreecommitdiffhomepage
path: root/talpid-core
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2018-08-30 15:11:17 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2018-09-03 08:05:18 -0300
commitc87cbbf49e0309a129d23dea4e2d57afcfe843ba (patch)
tree8dac140230a1880e7586cc377676db5a007ed7a4 /talpid-core
parentecce1e7432483a2e6a564de3ecdcf6acd501f720 (diff)
downloadmullvadvpn-c87cbbf49e0309a129d23dea4e2d57afcfe843ba.tar.xz
mullvadvpn-c87cbbf49e0309a129d23dea4e2d57afcfe843ba.zip
Block if security policy can't be set
Diffstat (limited to 'talpid-core')
-rw-r--r--talpid-core/src/tunnel_state_machine/connected_state.rs5
-rw-r--r--talpid-core/src/tunnel_state_machine/connecting_state.rs19
2 files changed, 14 insertions, 10 deletions
diff --git a/talpid-core/src/tunnel_state_machine/connected_state.rs b/talpid-core/src/tunnel_state_machine/connected_state.rs
index ce8175d814..02a44c8be0 100644
--- a/talpid-core/src/tunnel_state_machine/connected_state.rs
+++ b/talpid-core/src/tunnel_state_machine/connected_state.rs
@@ -3,6 +3,7 @@ use futures::sync::{mpsc, oneshot};
use futures::{Async, Future, Stream};
use talpid_types::net::TunnelEndpoint;
+use talpid_types::tunnel::BlockReason;
use super::{
AfterDisconnect, ConnectingState, DisconnectingState, EventConsequence, Result, ResultExt,
@@ -100,7 +101,7 @@ impl ConnectedState {
(
self.close_handle,
self.tunnel_close_event,
- AfterDisconnect::Nothing,
+ AfterDisconnect::Block(BlockReason::SetSecurityPolicyError),
),
))
}
@@ -170,7 +171,7 @@ impl TunnelState for ConnectedState {
(
connected_state.close_handle,
connected_state.tunnel_close_event,
- AfterDisconnect::Nothing,
+ AfterDisconnect::Block(BlockReason::SetSecurityPolicyError),
),
)
}
diff --git a/talpid-core/src/tunnel_state_machine/connecting_state.rs b/talpid-core/src/tunnel_state_machine/connecting_state.rs
index 41031faa34..a87fa1384e 100644
--- a/talpid-core/src/tunnel_state_machine/connecting_state.rs
+++ b/talpid-core/src/tunnel_state_machine/connecting_state.rs
@@ -41,12 +41,7 @@ pub struct ConnectingState {
}
impl ConnectingState {
- fn new(
- shared_values: &mut SharedTunnelStateValues,
- parameters: TunnelParameters,
- ) -> Result<Self> {
- Self::set_security_policy(shared_values, parameters.endpoint, parameters.allow_lan)?;
-
+ fn new(parameters: TunnelParameters) -> Result<Self> {
let tunnel_endpoint = parameters.endpoint;
let (tunnel_events, tunnel_close_event, close_handle) = Self::start_tunnel(&parameters)?;
@@ -214,7 +209,7 @@ impl ConnectingState {
(
self.close_handle,
self.tunnel_close_event,
- AfterDisconnect::Nothing,
+ AfterDisconnect::Block(BlockReason::SetSecurityPolicyError),
),
))
}
@@ -273,7 +268,15 @@ impl TunnelState for ConnectingState {
shared_values: &mut SharedTunnelStateValues,
parameters: Self::Bootstrap,
) -> (TunnelStateWrapper, TunnelStateTransition) {
- match Self::new(shared_values, parameters) {
+ if let Err(error) =
+ Self::set_security_policy(shared_values, parameters.endpoint, parameters.allow_lan)
+ {
+ error!("{}", error.display_chain());
+
+ return BlockedState::enter(shared_values, BlockReason::StartTunnelError);
+ }
+
+ match Self::new(parameters) {
Ok(connecting_state) => (
TunnelStateWrapper::from(connecting_state),
TunnelStateTransition::Connecting,