Merge: - DNS: filtering didn't work

Fix #1504

* commit '7c192212410ef877aea5c0d018cc0f9ae8b41879':
  minor
  - DNS: filtering didn't work
This commit is contained in:
Andrey Meshkov 2020-03-24 12:01:44 +03:00
commit c73dd5577f
3 changed files with 13 additions and 5 deletions

View File

@ -686,12 +686,12 @@ func processFilteringAfterResponse(ctx *dnsContext) int {
d.Res.Answer = answer d.Res.Answer = answer
} }
case dnsfilter.RewriteEtcHosts:
case dnsfilter.NotFilteredWhiteList: case dnsfilter.NotFilteredWhiteList:
// nothing // nothing
default: default:
if !ctx.protectionEnabled { if !ctx.protectionEnabled || // filters are disabled: there's nothing to check for
!ctx.responseFromUpstream { // only check response if it's from an upstream server
break break
} }
origResp2 := d.Res origResp2 := d.Res
@ -817,6 +817,10 @@ func (s *Server) updateStats(d *proxy.DNSContext, elapsed time.Duration, res dns
case dnsfilter.NotFilteredWhiteList: case dnsfilter.NotFilteredWhiteList:
fallthrough fallthrough
case dnsfilter.NotFilteredError: case dnsfilter.NotFilteredError:
fallthrough
case dnsfilter.ReasonRewrite:
fallthrough
case dnsfilter.RewriteEtcHosts:
e.Result = stats.RNotFiltered e.Result = stats.RNotFiltered
case dnsfilter.FilteredSafeBrowsing: case dnsfilter.FilteredSafeBrowsing:

View File

@ -225,11 +225,15 @@ func (a *AutoHosts) update() {
} }
// Process - get the list of IP addresses for the hostname // Process - get the list of IP addresses for the hostname
// Return nil if not found
func (a *AutoHosts) Process(host string) []net.IP { func (a *AutoHosts) Process(host string) []net.IP {
var ipsCopy []net.IP
a.lock.Lock() a.lock.Lock()
ips, _ := a.table[host] ips, _ := a.table[host]
ipsCopy := make([]net.IP, len(ips)) if len(ips) != 0 {
ipsCopy = make([]net.IP, len(ips))
copy(ipsCopy, ips) copy(ipsCopy, ips)
}
a.lock.Unlock() a.lock.Unlock()
return ipsCopy return ipsCopy
} }

View File

@ -37,7 +37,7 @@ func TestAutoHosts(t *testing.T) {
ips := ah.Process("localhost") ips := ah.Process("localhost")
assert.True(t, ips[0].Equal(net.ParseIP("127.0.0.1"))) assert.True(t, ips[0].Equal(net.ParseIP("127.0.0.1")))
ips = ah.Process("newhost") ips = ah.Process("newhost")
assert.True(t, len(ips) == 0) assert.True(t, ips == nil)
table := ah.List() table := ah.List()
ips, _ = table["host"] ips, _ = table["host"]