From 1aa8a0cb57e5e7e05da65eafef795da1c215d1e9 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Thu, 7 May 2020 13:26:26 +0800 Subject: [PATCH] Fix bugs in #235 --- src/acl/mod.rs | 4 ++-- src/context.rs | 23 ++++++++++++++--------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/acl/mod.rs b/src/acl/mod.rs index 14df5f90..497eb38a 100644 --- a/src/acl/mod.rs +++ b/src/acl/mod.rs @@ -282,8 +282,8 @@ impl AccessControl { pub fn check_ip_in_proxy_list(&self, ip: &IpAddr) -> bool { match self.mode { - Mode::BlackList => self.black_list.check_ip_matched(ip), - Mode::WhiteList => !self.white_list.check_ip_matched(ip), + Mode::BlackList => !self.black_list.check_ip_matched(ip), + Mode::WhiteList => self.white_list.check_ip_matched(ip), } } diff --git a/src/context.rs b/src/context.rs index cb86c2ad..13a5768b 100644 --- a/src/context.rs +++ b/src/context.rs @@ -291,9 +291,6 @@ impl Context { /// Add a record to the reverse lookup cache #[cfg(feature = "local-dns-relay")] pub fn add_to_reverse_lookup_cache(&self, addr: &IpAddr, forward: bool) { - if self.check_ip_in_proxy_list(addr) == forward { - return; - } let mut reverse_lookup_cache = self.reverse_lookup_cache.lock(); reverse_lookup_cache.insert(addr.clone(), forward); } @@ -314,13 +311,21 @@ impl Context { // Proxy everything by default None => true, Some(ref a) => { - // do the reverse lookup in our local cache - let mut reverse_lookup_cache = self.reverse_lookup_cache.lock(); - // if a qname is found - if let Some(forward) = reverse_lookup_cache.get(ip) { - !*forward + // first check the IP list + if a.check_ip_in_proxy_list(ip) { + true } else { - a.check_ip_in_proxy_list(ip) + // do the reverse lookup in our local cache + let mut reverse_lookup_cache = self.reverse_lookup_cache.lock(); + // if a qname is found + if let Some(forward) = reverse_lookup_cache.get(ip) { + // if qname is resolved by remote, + // we should proxy it as well + *forward + } else { + // by default not proxied + false + } } } }