summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorEmīls <emils@mullvad.net>2021-12-06 17:08:51 +0000
committerEmīls <emils@mullvad.net>2021-12-10 09:58:51 +0000
commit2967b7f29522e413994acd538e34d4637b8cf6b5 (patch)
tree01fc2d99af6fdadc887ea1032ba7db8f5440dc7c
parent523089c5c5d4f9fecd2bf518a26216a8a0bd4e54 (diff)
downloadmullvadvpn-2967b7f29522e413994acd538e34d4637b8cf6b5.tar.xz
mullvadvpn-2967b7f29522e413994acd538e34d4637b8cf6b5.zip
Rename option to 'allow_macos_connection_check'
-rw-r--r--gui/src/main/daemon-rpc.ts4
-rw-r--r--gui/src/shared/daemon-rpc-types.ts2
-rw-r--r--gui/src/shared/notifications/error.ts4
-rw-r--r--mullvad-daemon/src/lib.rs24
-rw-r--r--mullvad-daemon/src/management_interface.rs16
-rw-r--r--mullvad-daemon/src/settings.rs8
-rw-r--r--mullvad-management-interface/proto/management_interface.proto6
-rw-r--r--mullvad-management-interface/src/types.rs10
-rw-r--r--mullvad-types/src/settings/mod.rs6
-rw-r--r--talpid-core/src/firewall/macos.rs4
-rw-r--r--talpid-core/src/firewall/mod.rs4
-rw-r--r--talpid-core/src/resolver/mod.rs2
-rw-r--r--talpid-core/src/tunnel_state_machine/connected_state.rs4
-rw-r--r--talpid-core/src/tunnel_state_machine/connecting_state.rs6
-rw-r--r--talpid-core/src/tunnel_state_machine/disconnected_state.rs57
-rw-r--r--talpid-core/src/tunnel_state_machine/disconnecting_state.rs12
-rw-r--r--talpid-core/src/tunnel_state_machine/error_state.rs98
-rw-r--r--talpid-core/src/tunnel_state_machine/mod.rs51
-rw-r--r--talpid-types/src/tunnel.rs10
19 files changed, 174 insertions, 154 deletions
diff --git a/gui/src/main/daemon-rpc.ts b/gui/src/main/daemon-rpc.ts
index 5e5424142d..a2416e9943 100644
--- a/gui/src/main/daemon-rpc.ts
+++ b/gui/src/main/daemon-rpc.ts
@@ -827,8 +827,8 @@ function convertFromTunnelStateErrorCause(
}
case grpcTypes.ErrorState.Cause.SPLIT_TUNNEL_ERROR:
return { reason: 'split_tunnel_error' };
- case grpcTypes.ErrorState.Cause.CUSTOM_RESOLVER_ERROR:
- return { reason: 'custom_resolver_error' };
+ case grpcTypes.ErrorState.Cause.FILTERING_RESOLVER_ERROR:
+ return { reason: 'filtering_resolver_error' };
case grpcTypes.ErrorState.Cause.READ_SYSTEM_DNS_CONFIG:
return { reason: 'read_system_dns_config' };
case grpcTypes.ErrorState.Cause.VPN_PERMISSION_DENIED:
diff --git a/gui/src/shared/daemon-rpc-types.ts b/gui/src/shared/daemon-rpc-types.ts
index ebe177c69b..300af97660 100644
--- a/gui/src/shared/daemon-rpc-types.ts
+++ b/gui/src/shared/daemon-rpc-types.ts
@@ -40,7 +40,7 @@ export type ErrorStateCause =
| 'set_dns_error'
| 'start_tunnel_error'
| 'is_offline'
- | 'custom_resolver_error'
+ | 'filtering_resolver_error'
| 'read_system_dns_config'
| 'split_tunnel_error';
}
diff --git a/gui/src/shared/notifications/error.ts b/gui/src/shared/notifications/error.ts
index 73de3a9f90..22fd1858dc 100644
--- a/gui/src/shared/notifications/error.ts
+++ b/gui/src/shared/notifications/error.ts
@@ -138,11 +138,11 @@ function getMessage(errorDetails: IErrorState, accountExpiry?: string): string {
'notifications',
"Your device is offline. Try connecting when it's back online.",
);
- case 'custom_resolver_error':
+ case 'filtering_resolver_error':
// TODO: Figure out a better error message to show to users
return messages.pgettext(
'notifications',
- "Failed to start custom resolver, check if there's a service running on port 53.",
+ ' Unable to activate macOS network check module. Close any programs that might be using port 53, or disable "Allow macOS network check".',
);
case 'read_system_dns_config':
// TODO: Figure out a better error message to show to users
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs
index e37467277a..568b70c79f 100644
--- a/mullvad-daemon/src/lib.rs
+++ b/mullvad-daemon/src/lib.rs
@@ -247,9 +247,9 @@ pub enum DaemonCommand {
SetEnableIpv6(ResponseTx<(), settings::Error>, bool),
/// Set DNS options or servers to use
SetDnsOptions(ResponseTx<(), settings::Error>, DnsOptions),
- /// Toggle custom resolver
+ /// Toggle macOS network check leak
#[cfg(target_os = "macos")]
- SetCustomResolver(
+ SetAllowMacosNetworkCheck(
ResponseTx<(), Either<settings::Error, talpid_core::resolver::Error>>,
bool,
),
@@ -686,7 +686,7 @@ where
#[cfg(target_os = "macos")]
exclusion_gid,
#[cfg(target_os = "macos")]
- settings.enable_custom_resolver,
+ settings.allow_macos_network_check,
#[cfg(target_os = "android")]
android_context,
)
@@ -1259,8 +1259,8 @@ where
SetEnableIpv6(tx, enable_ipv6) => self.on_set_enable_ipv6(tx, enable_ipv6).await,
SetDnsOptions(tx, dns_servers) => self.on_set_dns_options(tx, dns_servers).await,
#[cfg(target_os = "macos")]
- SetCustomResolver(tx, enable_custom_resolver) => {
- self.on_set_custom_resolver(tx, enable_custom_resolver)
+ SetAllowMacosNetworkCheck(tx, enable_custom_resolver) => {
+ self.on_set_allow_macos_network_check(tx, enable_custom_resolver)
.await
}
SetWireguardMtu(tx, mtu) => self.on_set_wireguard_mtu(tx, mtu).await,
@@ -2263,35 +2263,35 @@ where
}
#[cfg(target_os = "macos")]
- async fn on_set_custom_resolver(
+ async fn on_set_allow_macos_network_check(
&mut self,
tx: ResponseTx<(), Either<settings::Error, talpid_core::resolver::Error>>,
enable_custom_resolver: bool,
) {
- let result = if self.settings.enable_custom_resolver != enable_custom_resolver {
+ let result = if self.settings.allow_macos_network_check != enable_custom_resolver {
self.on_set_custom_resolver_inner(enable_custom_resolver)
.await
} else {
Ok(())
};
- Self::oneshot_send(tx, result, "on_set_custom_resolver resposne");
+ Self::oneshot_send(tx, result, "on_set_allow_macos_network_check resposne");
}
#[cfg(target_os = "macos")]
async fn on_set_custom_resolver_inner(
&mut self,
- enable_custom_resolver: bool,
+ allow_macos_network_check: bool,
) -> Result<(), Either<settings::Error, talpid_core::resolver::Error>> {
let _ = self
.settings
- .set_custom_resolver(enable_custom_resolver)
+ .set_allow_macos_network_check(allow_macos_network_check)
.await
.map_err(Either::Left)?;
let (start_tx, start_rx) = oneshot::channel();
- self.send_tunnel_command(TunnelCommand::SetCustomResolver(
- enable_custom_resolver,
+ self.send_tunnel_command(TunnelCommand::AllowMacosNetworkCheck(
+ allow_macos_network_check,
start_tx,
));
match start_rx.await {
diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs
index 13882b333c..e27f5fd506 100644
--- a/mullvad-daemon/src/management_interface.rs
+++ b/mullvad-daemon/src/management_interface.rs
@@ -369,12 +369,18 @@ impl ManagementService for ManagementServiceImpl {
}
#[cfg(target_os = "macos")]
- async fn set_custom_resolver(&self, request: Request<bool>) -> ServiceResult<()> {
- let enable_custom_resolver = request.into_inner();
- log::debug!("set_custom_resolver({:?})", enable_custom_resolver);
+ async fn set_allow_macos_network_check(&self, request: Request<bool>) -> ServiceResult<()> {
+ let allow_macos_network_check = request.into_inner();
+ log::debug!(
+ "set_allow_macos_network_check({:?})",
+ allow_macos_network_check
+ );
let (tx, rx) = oneshot::channel();
- self.send_command_to_daemon(DaemonCommand::SetCustomResolver(tx, enable_custom_resolver))?;
+ self.send_command_to_daemon(DaemonCommand::SetAllowMacosNetworkCheck(
+ tx,
+ allow_macos_network_check,
+ ))?;
self.wait_for_result(rx)
.await?
.map(Response::new)
@@ -387,7 +393,7 @@ impl ManagementService for ManagementServiceImpl {
}
#[cfg(not(target_os = "macos"))]
- async fn set_custom_resolver(&self, _: Request<bool>) -> ServiceResult<()> {
+ async fn set_allow_macos_network_check(&self, _: Request<bool>) -> ServiceResult<()> {
Ok(Response::new(()))
}
diff --git a/mullvad-daemon/src/settings.rs b/mullvad-daemon/src/settings.rs
index cc64fb4684..0465185086 100644
--- a/mullvad-daemon/src/settings.rs
+++ b/mullvad-daemon/src/settings.rs
@@ -239,13 +239,13 @@ impl SettingsPersister {
}
#[cfg(target_os = "macos")]
- pub async fn set_custom_resolver(
+ pub async fn set_allow_macos_network_check(
&mut self,
- enable_custom_resolver: bool,
+ allow_macos_network_check: bool,
) -> Result<bool, Error> {
let should_save = Self::update_field(
- &mut self.settings.enable_custom_resolver,
- enable_custom_resolver,
+ &mut self.settings.allow_macos_network_check,
+ allow_macos_network_check,
);
self.update(should_save).await
}
diff --git a/mullvad-management-interface/proto/management_interface.proto b/mullvad-management-interface/proto/management_interface.proto
index ef28bc4640..3c7c0fe2e1 100644
--- a/mullvad-management-interface/proto/management_interface.proto
+++ b/mullvad-management-interface/proto/management_interface.proto
@@ -41,7 +41,7 @@ service ManagementService {
rpc SetWireguardMtu(google.protobuf.UInt32Value) returns (google.protobuf.Empty) {}
rpc SetEnableIpv6(google.protobuf.BoolValue) returns (google.protobuf.Empty) {}
rpc SetDnsOptions(DnsOptions) returns (google.protobuf.Empty) {}
- rpc SetCustomResolver(google.protobuf.BoolValue) returns (google.protobuf.Empty) {}
+ rpc SetAllowMacosNetworkCheck(google.protobuf.BoolValue) returns (google.protobuf.Empty) {}
// Account management
rpc CreateNewAccount(google.protobuf.Empty) returns (google.protobuf.StringValue) {}
@@ -111,7 +111,7 @@ message ErrorState {
IS_OFFLINE = 6;
VPN_PERMISSION_DENIED = 7;
SPLIT_TUNNEL_ERROR = 8;
- CUSTOM_RESOLVER_ERROR = 9;
+ FILTERING_RESOLVER_ERROR = 9;
READ_SYSTEM_DNS_CONFIG = 10;
}
@@ -275,7 +275,7 @@ message Settings {
TunnelOptions tunnel_options = 8;
bool show_beta_releases = 9;
SplitTunnelSettings split_tunnel = 10;
- bool enable_custom_resolver = 11;
+ bool allow_macos_network_check = 11;
}
message SplitTunnelSettings {
diff --git a/mullvad-management-interface/src/types.rs b/mullvad-management-interface/src/types.rs
index 0edf324a4c..43925d0b91 100644
--- a/mullvad-management-interface/src/types.rs
+++ b/mullvad-management-interface/src/types.rs
@@ -150,8 +150,8 @@ impl From<mullvad_types::states::TunnelState> for TunnelState {
i32::from(Cause::SplitTunnelError)
}
#[cfg(target_os = "macos")]
- talpid_tunnel::ErrorStateCause::CustomResolverError => {
- i32::from(Cause::CustomResolverError)
+ talpid_tunnel::ErrorStateCause::FilteringResolverError => {
+ i32::from(Cause::FilteringResolverError)
}
#[cfg(target_os = "macos")]
talpid_tunnel::ErrorStateCause::ReadSystemDnsConfig => {
@@ -395,9 +395,9 @@ impl From<&mullvad_types::settings::Settings> for Settings {
let split_tunnel = None;
#[cfg(not(target_os = "macos"))]
- let enable_custom_resolver = false;
+ let allow_macos_network_check = false;
#[cfg(target_os = "macos")]
- let enable_custom_resolver = settings.enable_custom_resolver;
+ let allow_macos_network_check = settings.allow_macos_network_check;
Self {
account_token: settings.get_account_token().unwrap_or_default(),
@@ -410,7 +410,7 @@ impl From<&mullvad_types::settings::Settings> for Settings {
tunnel_options: Some(TunnelOptions::from(&settings.tunnel_options)),
show_beta_releases: settings.show_beta_releases,
split_tunnel,
- enable_custom_resolver,
+ allow_macos_network_check,
}
}
}
diff --git a/mullvad-types/src/settings/mod.rs b/mullvad-types/src/settings/mod.rs
index 202438b930..0705764555 100644
--- a/mullvad-types/src/settings/mod.rs
+++ b/mullvad-types/src/settings/mod.rs
@@ -80,8 +80,8 @@ pub struct Settings {
/// Whether to notify users of beta updates.
pub show_beta_releases: bool,
#[cfg(target_os = "macos")]
- /// Enable custom resolver
- pub enable_custom_resolver: bool,
+ /// Allow leaking some traffic for macOS network check
+ pub allow_macos_network_check: bool,
/// Split tunneling settings
#[cfg(windows)]
pub split_tunnel: SplitTunnelSettings,
@@ -116,7 +116,7 @@ impl Default for Settings {
tunnel_options: TunnelOptions::default(),
show_beta_releases: false,
#[cfg(target_os = "macos")]
- enable_custom_resolver: false,
+ allow_macos_network_check: false,
#[cfg(windows)]
split_tunnel: SplitTunnelSettings::default(),
settings_version: CURRENT_SETTINGS_VERSION,
diff --git a/talpid-core/src/firewall/macos.rs b/talpid-core/src/firewall/macos.rs
index 8306de518f..31fefc7806 100644
--- a/talpid-core/src/firewall/macos.rs
+++ b/talpid-core/src/firewall/macos.rs
@@ -152,12 +152,12 @@ impl Firewall {
allow_lan,
allowed_endpoint,
allowed_ips,
- allow_custom_resolver,
+ allow_gid_exclusion_traffic,
} => {
let mut rules = Vec::new();
rules.push(self.get_allowed_endpoint_rule(allowed_endpoint.endpoint)?);
- if allow_custom_resolver {
+ if allow_gid_exclusion_traffic {
rules.extend(self.get_allow_excluded_dns_rules()?);
rules.extend(self.get_exclusion_rules(&allowed_ips)?);
}
diff --git a/talpid-core/src/firewall/mod.rs b/talpid-core/src/firewall/mod.rs
index f8054834f9..80714d8338 100644
--- a/talpid-core/src/firewall/mod.rs
+++ b/talpid-core/src/firewall/mod.rs
@@ -141,9 +141,9 @@ pub enum FirewallPolicy {
/// A list of IPs that can be reached outside the tunnel.
#[cfg(target_os = "macos")]
allowed_ips: BTreeSet<IpAddr>,
- /// A list of resolver IPs that should be reachable on port 53.
+ /// Enables specific GID exclusion traffic
#[cfg(target_os = "macos")]
- allow_custom_resolver: bool,
+ allow_gid_exclusion_traffic: bool,
},
}
diff --git a/talpid-core/src/resolver/mod.rs b/talpid-core/src/resolver/mod.rs
index 6a52d6771f..891f174810 100644
--- a/talpid-core/src/resolver/mod.rs
+++ b/talpid-core/src/resolver/mod.rs
@@ -289,7 +289,7 @@ impl FilteringResolver {
}
async fn reset_resolver(&mut self) -> Result<(), Error> {
- log::trace!("Resetting custom resolver");
+ log::trace!("Resetting filtering resolver");
let (best_interface, resolver_addresses) = self.get_resolver_config();
self.runtime_provider.update_best_interface(best_interface);
let resolver_config = ResolverConfig::from_parts(
diff --git a/talpid-core/src/tunnel_state_machine/connected_state.rs b/talpid-core/src/tunnel_state_machine/connected_state.rs
index 3586b88e48..e8777b5d14 100644
--- a/talpid-core/src/tunnel_state_machine/connected_state.rs
+++ b/talpid-core/src/tunnel_state_machine/connected_state.rs
@@ -191,8 +191,8 @@ impl ConnectedState {
SameState(self.into())
}
#[cfg(target_os = "macos")]
- Some(TunnelCommand::SetCustomResolver(enable, done_tx)) => {
- let _ = done_tx.send(shared_values.deactivate_custom_resolver(enable));
+ Some(TunnelCommand::AllowMacosNetworkCheck(enable, done_tx)) => {
+ let _ = done_tx.send(shared_values.deactivate_filtering_resolver(enable));
SameState(self.into())
}
#[cfg(target_os = "macos")]
diff --git a/talpid-core/src/tunnel_state_machine/connecting_state.rs b/talpid-core/src/tunnel_state_machine/connecting_state.rs
index 3d8b34a725..28a80260dc 100644
--- a/talpid-core/src/tunnel_state_machine/connecting_state.rs
+++ b/talpid-core/src/tunnel_state_machine/connecting_state.rs
@@ -274,8 +274,8 @@ impl ConnectingState {
SameState(self.into())
}
#[cfg(target_os = "macos")]
- Some(TunnelCommand::SetCustomResolver(enable, done_tx)) => {
- let _ = done_tx.send(shared_values.deactivate_custom_resolver(enable));
+ Some(TunnelCommand::AllowMacosNetworkCheck(enable, done_tx)) => {
+ let _ = done_tx.send(shared_values.deactivate_filtering_resolver(enable));
SameState(self.into())
}
#[cfg(target_os = "macos")]
@@ -494,7 +494,7 @@ impl TunnelState for ConnectingState {
return ErrorState::enter(shared_values, ErrorStateCause::IsOffline);
}
#[cfg(target_os = "macos")]
- if let Err(err) = shared_values.disable_custom_resolver() {
+ if let Err(err) = shared_values.disable_filtering_resolver() {
log::error!(
"{}",
err.display_chain_with_msg("Failed to disable custom resolver")
diff --git a/talpid-core/src/tunnel_state_machine/disconnected_state.rs b/talpid-core/src/tunnel_state_machine/disconnected_state.rs
index aaccf9ab21..048c635792 100644
--- a/talpid-core/src/tunnel_state_machine/disconnected_state.rs
+++ b/talpid-core/src/tunnel_state_machine/disconnected_state.rs
@@ -34,7 +34,7 @@ impl DisconnectedState {
#[cfg(target_os = "macos")]
allowed_ips: self.allowed_ips.clone(),
#[cfg(target_os = "macos")]
- allow_custom_resolver: shared_values.enable_custom_resolver,
+ allow_gid_exclusion_traffic: shared_values.enable_filtering_resolver,
};
let firewall_result = shared_values.firewall.apply_policy(policy).map_err(|e| {
@@ -89,7 +89,7 @@ impl DisconnectedState {
}
#[cfg(target_os = "macos")]
- fn start_custom_resolver(
+ fn start_filtering_resolver(
&mut self,
shared_values: &mut SharedTunnelStateValues,
) -> Result<(), either::Either<resolver::Error, dns::Error>> {
@@ -101,7 +101,7 @@ impl DisconnectedState {
shared_values
.runtime
- .block_on(shared_values.custom_resolver.set_active(system_config))
+ .block_on(shared_values.filtering_resolver.set_active(system_config))
.map_err(Either::Left)?;
shared_values
.dns_monitor
@@ -124,18 +124,18 @@ impl TunnelState for DisconnectedState {
};
#[cfg(target_os = "macos")]
- if shared_values.enable_custom_resolver {
- if let Err(err) = disconnected_state.start_custom_resolver(shared_values) {
+ if shared_values.enable_filtering_resolver {
+ if let Err(err) = disconnected_state.start_filtering_resolver(shared_values) {
log::error!(
"{}",
- err.display_chain_with_msg("Failed to start custom resolver:")
+ err.display_chain_with_msg("Failed to start filtering resolver:")
);
}
} else {
- if let Err(error) = shared_values.disable_custom_resolver() {
+ if let Err(error) = shared_values.disable_filtering_resolver() {
log::error!(
"{}",
- error.display_chain_with_msg("Unable to disable custom resolver")
+ error.display_chain_with_msg("Unable to disable filtering resolver")
);
}
}
@@ -200,8 +200,8 @@ impl TunnelState for DisconnectedState {
Self::register_split_tunnel_addresses(shared_values, true);
#[cfg(target_os = "macos")]
if block_when_disconnected {
- if let Err(err) = self.start_custom_resolver(shared_values) {
- let block_reason = map_custom_resolver_start(&err);
+ if let Err(err) = self.start_filtering_resolver(shared_values) {
+ let block_reason = map_filtering_resolver_start(&err);
return NewState(ErrorState::enter(shared_values, block_reason));
}
} else {
@@ -230,27 +230,33 @@ impl TunnelState for DisconnectedState {
SameState(self.into())
}
#[cfg(target_os = "macos")]
- Some(TunnelCommand::SetCustomResolver(enable, done_tx)) => {
+ Some(TunnelCommand::AllowMacosNetworkCheck(enable, done_tx)) => {
if !enable {
- if let Err(err) = shared_values.deactivate_custom_resolver(enable) {
+ if let Err(err) = shared_values.dns_monitor.reset() {
+ log::error!(
+ "{}",
+ err.display_chain_with_msg("Failed to reset DNS config")
+ );
+ }
+ if let Err(err) = shared_values.deactivate_filtering_resolver(enable) {
let _ = done_tx.send(Err(err));
- if shared_values.enable_custom_resolver {
+ if shared_values.enable_filtering_resolver {
self.set_firewall_policy(shared_values, false);
}
return SameState(self.into());
};
}
- if shared_values.enable_custom_resolver != enable {
- shared_values.enable_custom_resolver = enable;
+ if shared_values.enable_filtering_resolver != enable {
+ shared_values.enable_filtering_resolver = enable;
self.set_firewall_policy(shared_values, false);
if shared_values.block_when_disconnected && enable {
- if let Err(err) = self.start_custom_resolver(shared_values) {
+ if let Err(err) = self.start_filtering_resolver(shared_values) {
log::error!(
"{}",
- err.display_chain_with_msg("Failed to start custom resolver:")
+ err.display_chain_with_msg("Failed to start filtering resolver:")
);
- let error_cause = map_custom_resolver_start(&err);
+ let error_cause = map_filtering_resolver_start(&err);
let _ = done_tx.send(Err(err.left_or_else(resolver::Error::from)));
return NewState(ErrorState::enter(shared_values, error_cause));
}
@@ -261,18 +267,19 @@ impl TunnelState for DisconnectedState {
}
#[cfg(target_os = "macos")]
Some(TunnelCommand::HostDnsConfig(host_config)) => {
- if shared_values.block_when_disconnected && shared_values.enable_custom_resolver {
+ if shared_values.block_when_disconnected && shared_values.enable_filtering_resolver
+ {
if let Err(err) = shared_values
.runtime
- .block_on(shared_values.custom_resolver.set_active(host_config))
+ .block_on(shared_values.filtering_resolver.set_active(host_config))
{
log::error!(
"{}",
- err.display_chain_with_msg("Failed to activate custom resolver")
+ err.display_chain_with_msg("Failed to activate filtering resolver")
);
return NewState(ErrorState::enter(
shared_values,
- ErrorStateCause::CustomResolverError,
+ ErrorStateCause::FilteringResolverError,
));
}
}
@@ -299,12 +306,14 @@ impl TunnelState for DisconnectedState {
}
#[cfg(target_os = "macos")]
-fn map_custom_resolver_start(err: &either::Either<resolver::Error, dns::Error>) -> ErrorStateCause {
+fn map_filtering_resolver_start(
+ err: &either::Either<resolver::Error, dns::Error>,
+) -> ErrorStateCause {
match err {
either::Either::Right(_dns_err) => ErrorStateCause::SetDnsError,
either::Either::Left(resolver::Error::SystemDnsError(_)) => {
ErrorStateCause::ReadSystemDnsConfig
}
- either::Either::Left(_other_err) => ErrorStateCause::CustomResolverError,
+ either::Either::Left(_other_err) => ErrorStateCause::FilteringResolverError,
}
}
diff --git a/talpid-core/src/tunnel_state_machine/disconnecting_state.rs b/talpid-core/src/tunnel_state_machine/disconnecting_state.rs
index 27f33bf04f..e1fab84ffc 100644
--- a/talpid-core/src/tunnel_state_machine/disconnecting_state.rs
+++ b/talpid-core/src/tunnel_state_machine/disconnecting_state.rs
@@ -34,8 +34,8 @@ impl DisconnectingState {
AfterDisconnect::Nothing
}
#[cfg(target_os = "macos")]
- Some(TunnelCommand::SetCustomResolver(enable, done_tx)) => {
- let _ = done_tx.send(shared_values.deactivate_custom_resolver(enable));
+ Some(TunnelCommand::AllowMacosNetworkCheck(enable, done_tx)) => {
+ let _ = done_tx.send(shared_values.deactivate_filtering_resolver(enable));
AfterDisconnect::Nothing
}
#[cfg(target_os = "macos")]
@@ -85,8 +85,8 @@ impl DisconnectingState {
}
#[cfg(target_os = "macos")]
- Some(TunnelCommand::SetCustomResolver(enable, done_tx)) => {
- let _ = done_tx.send(shared_values.deactivate_custom_resolver(enable));
+ Some(TunnelCommand::AllowMacosNetworkCheck(enable, done_tx)) => {
+ let _ = done_tx.send(shared_values.deactivate_filtering_resolver(enable));
AfterDisconnect::Block(reason)
}
#[cfg(target_os = "macos")]
@@ -140,8 +140,8 @@ impl DisconnectingState {
AfterDisconnect::Reconnect(retry_attempt)
}
#[cfg(target_os = "macos")]
- Some(TunnelCommand::SetCustomResolver(enable, done_tx)) => {
- let _ = done_tx.send(shared_values.deactivate_custom_resolver(enable));
+ Some(TunnelCommand::AllowMacosNetworkCheck(enable, done_tx)) => {
+ let _ = done_tx.send(shared_values.deactivate_filtering_resolver(enable));
AfterDisconnect::Reconnect(retry_attempt)
}
#[cfg(target_os = "macos")]
diff --git a/talpid-core/src/tunnel_state_machine/error_state.rs b/talpid-core/src/tunnel_state_machine/error_state.rs
index f4c837a31d..52e12d1baa 100644
--- a/talpid-core/src/tunnel_state_machine/error_state.rs
+++ b/talpid-core/src/tunnel_state_machine/error_state.rs
@@ -33,14 +33,14 @@ impl ErrorState {
#[cfg(target_os = "macos")]
self.allowed_ips.clone(),
#[cfg(target_os = "macos")]
- shared_values.enable_custom_resolver,
+ shared_values.enable_filtering_resolver,
)
}
fn set_firewall_policy(
shared_values: &mut SharedTunnelStateValues,
#[cfg(target_os = "macos")] allowed_ips: BTreeSet<IpAddr>,
- #[cfg(target_os = "macos")] allow_custom_resolver: bool,
+ #[cfg(target_os = "macos")] allow_gid_exclusion_traffic: bool,
) -> Result<(), FirewallPolicyError> {
let policy = FirewallPolicy::Blocked {
allow_lan: shared_values.allow_lan,
@@ -48,7 +48,7 @@ impl ErrorState {
#[cfg(target_os = "macos")]
allowed_ips,
#[cfg(target_os = "macos")]
- allow_custom_resolver,
+ allow_gid_exclusion_traffic,
};
#[cfg(target_os = "linux")]
@@ -114,31 +114,34 @@ impl TunnelState for ErrorState {
}
#[cfg(target_os = "macos")]
- let host_config =
- if shared_values.enable_custom_resolver && !block_reason.prevents_custom_resolver() {
- if let Err(err) = shared_values
- .dns_monitor
- .set("lo", &[Ipv4Addr::LOCALHOST.into()])
- {
+ let host_config = if shared_values.enable_filtering_resolver
+ && !block_reason.prevents_filtering_resolver()
+ {
+ if let Err(err) = shared_values
+ .dns_monitor
+ .set("lo", &[Ipv4Addr::LOCALHOST.into()])
+ {
+ log::error!(
+ "{}",
+ err.display_chain_with_msg(
+ "Failed to configure system to use filtering resolver"
+ )
+ );
+ return Self::enter(shared_values, ErrorStateCause::SetDnsError);
+ }
+ match shared_values.get_filtering_resolver_config() {
+ Ok(host_config) => host_config,
+ Err(err) => {
log::error!(
"{}",
- err.display_chain_with_msg("Failed to configure custom resolver")
+ err.display_chain_with_msg("Failed to start filtering resolver")
);
- return Self::enter(shared_values, ErrorStateCause::SetDnsError);
- }
- match shared_values.get_custom_resolver_config() {
- Ok(host_config) => host_config,
- Err(err) => {
- log::error!(
- "{}",
- err.display_chain_with_msg("Failed to start custom resolver")
- );
- return Self::enter(shared_values, ErrorStateCause::CustomResolverError);
- }
+ return Self::enter(shared_values, ErrorStateCause::FilteringResolverError);
}
- } else {
- None
- };
+ }
+ } else {
+ None
+ };
#[cfg(not(target_os = "android"))]
let block_failure = Self::set_firewall_policy(
@@ -146,21 +149,22 @@ impl TunnelState for ErrorState {
#[cfg(target_os = "macos")]
BTreeSet::new(),
#[cfg(target_os = "macos")]
- shared_values.enable_custom_resolver,
+ shared_values.enable_filtering_resolver,
)
.err();
#[cfg(target_os = "macos")]
if let Some(dns_config) = host_config {
- if let Err(err) = shared_values
- .runtime
- .block_on(shared_values.custom_resolver.set_active(Some(dns_config)))
- {
+ if let Err(err) = shared_values.runtime.block_on(
+ shared_values
+ .filtering_resolver
+ .set_active(Some(dns_config)),
+ ) {
log::error!(
"{}",
- err.display_chain_with_msg("Failed to activate custom resolver")
+ err.display_chain_with_msg("Failed to activate filtering resolver")
);
- return Self::enter(shared_values, ErrorStateCause::CustomResolverError);
+ return Self::enter(shared_values, ErrorStateCause::FilteringResolverError);
}
}
@@ -209,9 +213,9 @@ impl TunnelState for ErrorState {
}
#[cfg(target_os = "macos")]
- Some(TunnelCommand::SetCustomResolver(enable, done_tx)) => {
- let result = if enable && !shared_values.enable_custom_resolver {
- shared_values.enable_custom_resolver = enable;
+ Some(TunnelCommand::AllowMacosNetworkCheck(enable, done_tx)) => {
+ let result = if enable && !shared_values.enable_filtering_resolver {
+ shared_values.enable_filtering_resolver = enable;
if let Err(err) = self.set_firewall(shared_values) {
return NewState(ErrorState::enter(
shared_values,
@@ -223,7 +227,7 @@ impl TunnelState for ErrorState {
Ok(current_system_config) => {
match shared_values.runtime.block_on(
shared_values
- .custom_resolver
+ .filtering_resolver
.set_active(current_system_config),
) {
Ok(_) => {
@@ -234,7 +238,7 @@ impl TunnelState for ErrorState {
log::error!(
"{}",
err.display_chain_with_msg(
- "Failed to configure system to use custom resolver"
+ "Failed to configure system to use filtering resolver"
)
);
let _ =
@@ -251,7 +255,7 @@ impl TunnelState for ErrorState {
log::error!(
"{}",
err.display_chain_with_msg(
- "Failed to start custom resolver"
+ "Failed to start filtering resolver"
)
);
Err(err)
@@ -272,7 +276,13 @@ impl TunnelState for ErrorState {
}
}
} else {
- shared_values.deactivate_custom_resolver(enable)
+ if let Err(err) = shared_values.dns_monitor.reset() {
+ log::error!(
+ "{}",
+ err.display_chain_with_msg("Failed to reset DNS config")
+ );
+ }
+ shared_values.deactivate_filtering_resolver(enable)
};
let _ = done_tx.send(result);
SameState(self.into())
@@ -280,18 +290,18 @@ impl TunnelState for ErrorState {
#[cfg(target_os = "macos")]
Some(TunnelCommand::HostDnsConfig(host_config)) => {
- if shared_values.enable_custom_resolver {
+ if shared_values.enable_filtering_resolver {
if let Err(err) = shared_values
.runtime
- .block_on(shared_values.custom_resolver.set_active(host_config))
+ .block_on(shared_values.filtering_resolver.set_active(host_config))
{
log::error!(
- "Failed to set apply new DNS config to custom resolver: {}",
+ "Failed to set apply new DNS config to filtering resolver: {}",
err
);
return NewState(Self::enter(
shared_values,
- ErrorStateCause::CustomResolverError,
+ ErrorStateCause::FilteringResolverError,
));
}
}
@@ -352,8 +362,8 @@ impl TunnelState for ErrorState {
shared_values.reset_connectivity_check();
#[cfg(target_os = "macos")]
if !shared_values.block_when_disconnected {
- if let Err(err) = shared_values.disable_custom_resolver() {
- log::error!("Failed to disable custom resolver: {}", err);
+ if let Err(err) = shared_values.disable_filtering_resolver() {
+ log::error!("Failed to disable filtering resolver: {}", err);
}
}
Self::reset_dns(shared_values);
diff --git a/talpid-core/src/tunnel_state_machine/mod.rs b/talpid-core/src/tunnel_state_machine/mod.rs
index e11450a357..a48a17a25f 100644
--- a/talpid-core/src/tunnel_state_machine/mod.rs
+++ b/talpid-core/src/tunnel_state_machine/mod.rs
@@ -64,10 +64,10 @@ pub enum Error {
#[error(display = "Failed to initialize the route manager")]
InitRouteManagerError(#[error(source)] crate::routing::Error),
- /// Failed to initialize custom resolver
+ /// Failed to initialize filtering resolver
#[cfg(target_os = "macos")]
- #[error(display = "Failed to initialize custom resolver")]
- InitCustomResolver(#[error(source)] crate::resolver::Error),
+ #[error(display = "Failed to initialize filtering resolver")]
+ InitFilteringResolver(#[error(source)] crate::resolver::Error),
/// Failed to initialize tunnel state machine event loop executor
#[error(display = "Failed to initialize tunnel state machine event loop executor")]
@@ -76,10 +76,6 @@ pub enum Error {
/// Failed to send state change event to listener
#[error(display = "Failed to send state change event to listener")]
SendStateChange,
-
- /// Failed to initialize custom resolver
- #[error(display = "Failed to initialize custom resolver")]
- CustomResolverError,
}
/// Settings used to initialize the tunnel state machine.
@@ -187,9 +183,9 @@ pub enum TunnelCommand {
/// Sets IP addresses which should be allowed to pass through the firewall.
#[cfg(target_os = "macos")]
AddAllowedIps(BTreeSet<IpAddr>, oneshot::Sender<()>),
- /// Toggles custom resolver
+ /// Toggles filtering resolver
#[cfg(target_os = "macos")]
- SetCustomResolver(bool, oneshot::Sender<Result<(), crate::resolver::Error>>),
+ AllowMacosNetworkCheck(bool, oneshot::Sender<Result<(), crate::resolver::Error>>),
/// Receive up-to-date system DNS config. It should never contain our changes to the DNS.
#[cfg(target_os = "macos")]
HostDnsConfig(Option<(String, Vec<IpAddr>)>),
@@ -263,7 +259,7 @@ impl TunnelStateMachine {
.map_err(Error::InitDnsMonitorError)?;
#[cfg(target_os = "macos")]
- let custom_resolver = crate::resolver::start_resolver(command_tx.clone()).await?;
+ let filtering_resolver = crate::resolver::start_resolver(command_tx.clone()).await?;
let (offline_tx, mut offline_rx) = mpsc::unbounded();
let initial_offline_state_tx = offline_state_tx.clone();
@@ -316,9 +312,9 @@ impl TunnelStateMachine {
#[cfg(target_os = "linux")]
connectivity_check_was_enabled: None,
#[cfg(target_os = "macos")]
- custom_resolver,
+ filtering_resolver,
#[cfg(target_os = "macos")]
- enable_custom_resolver: enable_resolver,
+ enable_filtering_resolver: enable_resolver,
};
tokio::task::spawn_blocking(move || {
@@ -411,12 +407,12 @@ struct SharedTunnelStateValues {
#[cfg(target_os = "linux")]
connectivity_check_was_enabled: Option<bool>,
- /// Custom resolver handle
+ /// Filtering resolver handle
#[cfg(target_os = "macos")]
- custom_resolver: crate::resolver::ResolverHandle,
- /// Whether custom resolver is active and enabled
+ filtering_resolver: crate::resolver::ResolverHandle,
+ /// Whether filtering resolver should be enabled
#[cfg(target_os = "macos")]
- enable_custom_resolver: bool,
+ enable_filtering_resolver: bool,
}
impl SharedTunnelStateValues {
@@ -443,24 +439,23 @@ impl SharedTunnelStateValues {
}
#[cfg(target_os = "macos")]
- pub fn deactivate_custom_resolver(
+ pub fn deactivate_filtering_resolver(
&mut self,
enable_resolver: bool,
) -> Result<(), crate::resolver::Error> {
- self.enable_custom_resolver = enable_resolver;
- self.disable_custom_resolver()
+ self.enable_filtering_resolver = enable_resolver;
+ self.disable_filtering_resolver()
}
#[cfg(target_os = "macos")]
- pub fn disable_custom_resolver(&mut self) -> Result<(), crate::resolver::Error> {
- if self.enable_custom_resolver {
- self.runtime.block_on(self.custom_resolver.set_inactive())?;
+ pub fn disable_filtering_resolver(&mut self) -> Result<(), crate::resolver::Error> {
+ if self.enable_filtering_resolver {
+ self.runtime
+ .block_on(self.filtering_resolver.set_inactive())?;
} else {
- self.runtime.block_on(self.custom_resolver.shutdown())?;
+ self.runtime.block_on(self.filtering_resolver.shutdown())?;
}
- self.dns_monitor
- .reset()
- .map_err(crate::resolver::Error::SystemDnsError)
+ Ok(())
}
pub fn set_allowed_endpoint(&mut self, endpoint: AllowedEndpoint) -> bool {
@@ -538,10 +533,10 @@ impl SharedTunnelStateValues {
}
#[cfg(target_os = "macos")]
- pub fn get_custom_resolver_config(
+ pub fn get_filtering_resolver_config(
&mut self,
) -> Result<Option<(String, Vec<IpAddr>)>, crate::dns::Error> {
- if self.enable_custom_resolver {
+ if self.enable_filtering_resolver {
self.dns_monitor.get_system_config()
} else {
Ok(None)
diff --git a/talpid-types/src/tunnel.rs b/talpid-types/src/tunnel.rs
index 8b63295693..9edf45e07f 100644
--- a/talpid-types/src/tunnel.rs
+++ b/talpid-types/src/tunnel.rs
@@ -106,9 +106,9 @@ pub enum ErrorStateCause {
/// Error reported by split tunnel module.
#[cfg(target_os = "windows")]
SplitTunnelError,
- /// Failed to set set custom resolver
+ /// Failed to start filtering resolver
#[cfg(target_os = "macos")]
- CustomResolverError,
+ FilteringResolverError,
/// Failed read system DNS config
#[cfg(target_os = "macos")]
ReadSystemDnsConfig,
@@ -116,9 +116,9 @@ pub enum ErrorStateCause {
impl ErrorStateCause {
#[cfg(target_os = "macos")]
- pub fn prevents_custom_resolver(&self) -> bool {
+ pub fn prevents_filtering_resolver(&self) -> bool {
match self {
- Self::CustomResolverError | Self::ReadSystemDnsConfig | Self::SetDnsError => true,
+ Self::FilteringResolverError | Self::ReadSystemDnsConfig | Self::SetDnsError => true,
_ => false,
}
}
@@ -215,7 +215,7 @@ impl fmt::Display for ErrorStateCause {
#[cfg(target_os = "windows")]
SplitTunnelError => "The split tunneling module reported an error",
#[cfg(target_os = "macos")]
- CustomResolverError => "Failed to set up custom resolver",
+ FilteringResolverError => "Failed to set up custom resolver",
#[cfg(target_os = "macos")]
ReadSystemDnsConfig => "Failed to read system DNS config",
};