summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--talpid-core/src/firewall/macos.rs4
-rw-r--r--talpid-core/src/tunnel_state_machine/disconnected_state.rs3
-rw-r--r--talpid-core/src/tunnel_state_machine/error_state.rs10
-rw-r--r--talpid-core/src/tunnel_state_machine/mod.rs14
4 files changed, 19 insertions, 12 deletions
diff --git a/talpid-core/src/firewall/macos.rs b/talpid-core/src/firewall/macos.rs
index d0b7092e68..a10f82bc69 100644
--- a/talpid-core/src/firewall/macos.rs
+++ b/talpid-core/src/firewall/macos.rs
@@ -172,6 +172,8 @@ impl Firewall {
}
}
+ /// Constructs rules that allow DNS traffic coming from processes that belong to the excluded
+ /// group ID to leak.
fn get_allow_excluded_dns_rules(&self) -> Result<[pfctl::FilterRule; 2]> {
let mut builder = self.create_rule_builder(FilterRuleAction::Pass);
@@ -344,6 +346,8 @@ impl Firewall {
Ok(vec![lo0_rule])
}
+ /// Constructs firewall rules that allow traffic to a set of allowed IP addresses coming from
+ /// UID 0 processes to leak.
fn get_exclusion_rules(
&self,
allowed_ips: &BTreeSet<IpAddr>,
diff --git a/talpid-core/src/tunnel_state_machine/disconnected_state.rs b/talpid-core/src/tunnel_state_machine/disconnected_state.rs
index 544da58f55..58e5aa23ac 100644
--- a/talpid-core/src/tunnel_state_machine/disconnected_state.rs
+++ b/talpid-core/src/tunnel_state_machine/disconnected_state.rs
@@ -88,6 +88,7 @@ impl DisconnectedState {
}
}
+ /// Starts the filtering resolver and configures host to use it.
#[cfg(target_os = "macos")]
fn start_filtering_resolver(
&mut self,
@@ -303,6 +304,8 @@ impl TunnelState for DisconnectedState {
}
}
+/// Maps a DNS or a resovler error to an [ErrorStateCause] to be used when failing to start a
+/// filtering resolver.
#[cfg(target_os = "macos")]
fn map_filtering_resolver_start(
err: &either::Either<resolver::Error, dns::Error>,
diff --git a/talpid-core/src/tunnel_state_machine/error_state.rs b/talpid-core/src/tunnel_state_machine/error_state.rs
index a7f3e1ce2f..6a32ec157c 100644
--- a/talpid-core/src/tunnel_state_machine/error_state.rs
+++ b/talpid-core/src/tunnel_state_machine/error_state.rs
@@ -129,13 +129,21 @@ impl TunnelState for ErrorState {
);
return Self::enter(shared_values, ErrorStateCause::SetDnsError);
}
- match shared_values.get_filtering_resolver_config() {
+ match shared_values.dns_monitor.get_system_config() {
Ok(host_config) => host_config,
Err(err) => {
log::error!(
"{}",
err.display_chain_with_msg("Failed to start filtering resolver")
);
+ if let Err(err) = shared_values.dns_monitor.reset() {
+ log::error!(
+ "{}",
+ err.display_chain_with_msg(
+ "Faield to reset DNS after failing to obtain host config"
+ )
+ );
+ }
return Self::enter(shared_values, ErrorStateCause::FilteringResolverError);
}
}
diff --git a/talpid-core/src/tunnel_state_machine/mod.rs b/talpid-core/src/tunnel_state_machine/mod.rs
index a48a17a25f..dd6ee01e52 100644
--- a/talpid-core/src/tunnel_state_machine/mod.rs
+++ b/talpid-core/src/tunnel_state_machine/mod.rs
@@ -438,6 +438,8 @@ impl SharedTunnelStateValues {
Ok(())
}
+ /// Sets the filtering resolver setting and toggles it's state to either inactive or shutdown
+ /// state.
#[cfg(target_os = "macos")]
pub fn deactivate_filtering_resolver(
&mut self,
@@ -447,6 +449,7 @@ impl SharedTunnelStateValues {
self.disable_filtering_resolver()
}
+ /// Toggles filtering resolver state to either inactive or shutdown.
#[cfg(target_os = "macos")]
pub fn disable_filtering_resolver(&mut self) -> Result<(), crate::resolver::Error> {
if self.enable_filtering_resolver {
@@ -531,17 +534,6 @@ impl SharedTunnelStateValues {
}
let _ = tx.send(());
}
-
- #[cfg(target_os = "macos")]
- pub fn get_filtering_resolver_config(
- &mut self,
- ) -> Result<Option<(String, Vec<IpAddr>)>, crate::dns::Error> {
- if self.enable_filtering_resolver {
- self.dns_monitor.get_system_config()
- } else {
- Ok(None)
- }
- }
}
/// Asynchronous result of an attempt to progress a state.