diff --git a/dnsforward/dnsforward.go b/dnsforward/dnsforward.go index 22eef24a..fb0f8012 100644 --- a/dnsforward/dnsforward.go +++ b/dnsforward/dnsforward.go @@ -125,7 +125,7 @@ func (s *Server) startInternal(config *ServerConfig) error { RefuseAny: s.RefuseAny, CacheEnabled: true, Upstreams: s.Upstreams, - Handler: s, + Handler: s.handleDNSRequest, } if proxyConfig.UDPListenAddr == nil { @@ -220,8 +220,8 @@ func (s *Server) Reconfigure(config *ServerConfig) error { return nil } -// ServeDNS filters the incoming DNS requests and writes them to the query log -func (s *Server) ServeDNS(d *proxy.DNSContext, next proxy.Handler) error { +// handleDNSRequest filters the incoming DNS requests and writes them to the query log +func (s *Server) handleDNSRequest(p *proxy.Proxy, d *proxy.DNSContext) error { start := time.Now() // use dnsfilter before cache -- changed settings or filters would require cache invalidation otherwise @@ -232,7 +232,7 @@ func (s *Server) ServeDNS(d *proxy.DNSContext, next proxy.Handler) error { if d.Res == nil { // request was not filtered so let it be processed further - err = next.ServeDNS(d, nil) + err = p.Resolve(d) if err != nil { return err } diff --git a/dnsforward/dnsforward_test.go b/dnsforward/dnsforward_test.go index d14c8812..fe638c42 100644 --- a/dnsforward/dnsforward_test.go +++ b/dnsforward/dnsforward_test.go @@ -10,20 +10,16 @@ import ( "github.com/miekg/dns" ) -const ( - listenPort = 48122 -) - func TestServer(t *testing.T) { s := Server{} - s.UDPListenAddr = &net.UDPAddr{Port: listenPort} + s.UDPListenAddr = &net.UDPAddr{Port: 0} err := s.Start(nil) if err != nil { t.Fatalf("Failed to start server: %s", err) } // server is running, send a message - addr := s.UDPListenAddr + addr := s.dnsProxy.Addr("udp") req := dns.Msg{} req.Id = dns.Id() req.RecursionDesired = true @@ -54,14 +50,14 @@ func TestServer(t *testing.T) { func TestInvalidRequest(t *testing.T) { s := Server{} - s.UDPListenAddr = &net.UDPAddr{Port: listenPort} + s.UDPListenAddr = &net.UDPAddr{Port: 0} err := s.Start(nil) if err != nil { t.Fatalf("Failed to start server: %s", err) } // server is running, send a message - addr := s.UDPListenAddr + addr := s.dnsProxy.Addr("udp") req := dns.Msg{} req.Id = dns.Id() req.RecursionDesired = true @@ -80,12 +76,12 @@ func TestInvalidRequest(t *testing.T) { } func TestBlockedRequest(t *testing.T) { - s, addr := createTestServer() - + s := createTestServer() err := s.Start(nil) if err != nil { t.Fatalf("Failed to start server: %s", err) } + addr := s.dnsProxy.Addr("udp") // // NXDomain blocking @@ -112,12 +108,12 @@ func TestBlockedRequest(t *testing.T) { } func TestBlockedByHosts(t *testing.T) { - s, addr := createTestServer() - + s := createTestServer() err := s.Start(nil) if err != nil { t.Fatalf("Failed to start server: %s", err) } + addr := s.dnsProxy.Addr("udp") // // Hosts blocking @@ -151,12 +147,12 @@ func TestBlockedByHosts(t *testing.T) { } func TestBlockedBySafeBrowsing(t *testing.T) { - s, addr := createTestServer() - + s := createTestServer() err := s.Start(nil) if err != nil { t.Fatalf("Failed to start server: %s", err) } + addr := s.dnsProxy.Addr("udp") // // Safebrowsing blocking @@ -200,10 +196,9 @@ func TestBlockedBySafeBrowsing(t *testing.T) { } } -func createTestServer() (*Server, net.Addr) { +func createTestServer() *Server { s := Server{} - addr := &net.UDPAddr{Port: listenPort} - s.UDPListenAddr = addr + s.UDPListenAddr = &net.UDPAddr{Port: 0} s.FilteringConfig.FilteringEnabled = true s.FilteringConfig.ProtectionEnabled = true s.FilteringConfig.SafeBrowsingEnabled = true @@ -215,5 +210,5 @@ func createTestServer() (*Server, net.Addr) { } filter := dnsfilter.Filter{ID: 1, Rules: rules} s.Filters = append(s.Filters, filter) - return &s, addr + return &s } diff --git a/go.mod b/go.mod index 22246242..f9e7fb74 100644 --- a/go.mod +++ b/go.mod @@ -1,7 +1,7 @@ module github.com/AdguardTeam/AdGuardHome require ( - github.com/AdguardTeam/dnsproxy v0.9.0 + github.com/AdguardTeam/dnsproxy v0.9.1 github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f // indirect github.com/ameshkov/dnscrypt v1.0.0 github.com/beefsack/go-rate v0.0.0-20180408011153-efa7637bb9b6 @@ -19,8 +19,9 @@ require ( github.com/sirupsen/logrus v1.2.0 go.uber.org/goleak v0.10.0 golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9 - golang.org/x/net v0.0.0-20181217023233-e147a9138326 - golang.org/x/sys v0.0.0-20181217223516-dcdaa6325bcb // indirect + golang.org/x/net v0.0.0-20181220203305-927f97764cc3 + golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 // indirect + golang.org/x/sys v0.0.0-20181221143128-b4a75ba826a6 // indirect gopkg.in/asaskevich/govalidator.v4 v4.0.0-20160518190739-766470278477 gopkg.in/yaml.v2 v2.2.1 ) diff --git a/go.sum b/go.sum index 9608edc6..63dd1508 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ github.com/AdguardTeam/dnsproxy v0.9.0 h1:doHDmVE9bV1fhiBV8rX76WWaSAB9w1H3u8WIiez5OFs= github.com/AdguardTeam/dnsproxy v0.9.0/go.mod h1:CKZVVknYdoHVirXqqbALEkC+DBY65yCQrzSKYS78GoE= +github.com/AdguardTeam/dnsproxy v0.9.1 h1:+F6jqrVOrUjpbzhALjtbwqHfxW4M2YS3mYdhGxLXQ08= +github.com/AdguardTeam/dnsproxy v0.9.1/go.mod h1:CKZVVknYdoHVirXqqbALEkC+DBY65yCQrzSKYS78GoE= github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f h1:5ZfJxyXo8KyX8DgGXC5B7ILL8y51fci/qYz2B4j8iLY= github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= @@ -29,6 +31,7 @@ github.com/jedisct1/go-dnsstamps v0.0.0-20180418170050-1e4999280f86 h1:Olj4M6T1o github.com/jedisct1/go-dnsstamps v0.0.0-20180418170050-1e4999280f86/go.mod h1:j/ONpSHHmPgDwmFKXg9vhQvIjADe/ft1X4a3TVOmp9g= github.com/jedisct1/xsecretbox v0.0.0-20180508184500-7a679c0bcd9a h1:2nyBWKszM41RO/gt5ElUXigAFiRgJ9KifHDlWOlw0lc= github.com/jedisct1/xsecretbox v0.0.0-20180508184500-7a679c0bcd9a/go.mod h1:YlN58h704uRFD0BwsEGTq+7Wx+WG2i7P49bc+HwHyAY= +github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmcvetta/randutil v0.0.0-20150817122601-2bb1b664bcff h1:6NvhExg4omUC9NfA+l4Oq3ibNNeJUdiAF3iBVB0PlDk= github.com/jmcvetta/randutil v0.0.0-20150817122601-2bb1b664bcff/go.mod h1:ddfPX8Z28YMjiqoaJhNBzWHapTHXejnB5cDCUWDwriw= @@ -71,15 +74,20 @@ golang.org/x/net v0.0.0-20181213202711-891ebc4b82d6 h1:gT0Y6H7hbVPUtvtk0YGxMXPgN golang.org/x/net v0.0.0-20181213202711-891ebc4b82d6/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181217023233-e147a9138326 h1:iCzOf0xz39Tstp+Tu/WwyGjUXCk34QhQORRxBeXXTA4= golang.org/x/net v0.0.0-20181217023233-e147a9138326/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3 h1:eH6Eip3UpmR+yM/qI9Ijluzb1bNv/cAU/n+6l8tRSis= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f h1:Bl/8QSvNqXvPGPGXa2z5xUTmV7VDcZyvRZ+QQXkXTZQ= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181213200352-4d1cda033e06 h1:0oC8rFnE+74kEmuHZ46F6KHsMr5Gx2gUQPuNz28iQZM= golang.org/x/sys v0.0.0-20181213200352-4d1cda033e06/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181217223516-dcdaa6325bcb h1:zzdd4xkMwu/GRxhSUJaCPh4/jil9kAbsU7AUmXboO+A= golang.org/x/sys v0.0.0-20181217223516-dcdaa6325bcb/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181221143128-b4a75ba826a6 h1:IcgEB62HYgAhX0Nd/QrVgZlxlcyxbGQHElLUhW2X4Fo= +golang.org/x/sys v0.0.0-20181221143128-b4a75ba826a6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= gopkg.in/asaskevich/govalidator.v4 v4.0.0-20160518190739-766470278477 h1:5xUJw+lg4zao9W4HIDzlFbMYgSgtvNVHh00MEHvbGpQ= gopkg.in/asaskevich/govalidator.v4 v4.0.0-20160518190739-766470278477/go.mod h1:QDV1vrFSrowdoOba0UM8VJPUZONT7dnfdLsM+GG53Z8= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=