diff --git a/Makefile b/Makefile index 5bed39bc..71a87108 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,6 @@ $(STATIC): client/node_modules npm --prefix client run build-prod AdguardDNS: $(STATIC) *.go - echo mkfile_dir = $(mkfile_dir) mkdir -p $(GOPATH) GOPATH=$(GOPATH) go get -v -d . GOPATH=$(GOPATH) go get -v -d -u github.com/AdguardTeam/AdguardDNS @@ -28,7 +27,6 @@ AdguardDNS: $(STATIC) *.go GOPATH=$(GOPATH) PATH=$(GOPATH)/bin:$(PATH) packr build -ldflags="-X main.VersionString=$(GIT_VERSION)" -o AdguardDNS coredns: coredns_plugin/*.go dnsfilter/*.go - echo mkfile_dir = $(mkfile_dir) GOPATH=$(GOPATH) go get -v -d github.com/coredns/coredns cd $(GOPATH)/src/github.com/prometheus/client_golang && git checkout -q v0.8.0 cd $(GOPATH)/src/github.com/coredns/coredns && perl -p -i.bak -e 's/^(trace|route53|federation|kubernetes|etcd):.*//' plugin.cfg @@ -40,8 +38,8 @@ coredns: coredns_plugin/*.go dnsfilter/*.go clean: $(MAKE) cleanfast - rm -rvf build - rm -rvf client/node_modules + rm -rf build + rm -rf client/node_modules cleanfast: - rm -vf coredns AdguardDNS + rm -f coredns AdguardDNS diff --git a/config.go b/config.go index ee3d91df..e44345b4 100644 --- a/config.go +++ b/config.go @@ -160,16 +160,16 @@ func writeAllConfigs() error { } const coreDNSConfigTemplate = `. { - {{if .FilteringEnabled}}dnsfilter {{.FilterFile}} { + dnsfilter {{if .FilteringEnabled}}{{.FilterFile}}{{end}} { {{if .SafeBrowsingEnabled}}safebrowsing{{end}} {{if .ParentalEnabled}}parental {{.ParentalSensitivity}}{{end}} {{if .SafeSearchEnabled}}safesearch{{end}} {{if .QueryLogEnabled}}querylog{{end}} - }{{end}} + } {{.Pprof}} - hosts { - fallthrough - } + hosts { + fallthrough + } {{if .UpstreamDNS}}forward . {{range .UpstreamDNS}}{{.}} {{end}}{{end}} {{.Cache}} {{.Prometheus}} diff --git a/coredns_plugin/coredns_plugin.go b/coredns_plugin/coredns_plugin.go index 0000156c..09b64a9e 100644 --- a/coredns_plugin/coredns_plugin.go +++ b/coredns_plugin/coredns_plugin.go @@ -92,14 +92,12 @@ func setupPlugin(c *caddy.Controller) (*plug, error) { p.d = dnsfilter.New() p.hosts = make(map[string]net.IP) - var filterFileName string + filterFileNames := []string{} for c.Next() { args := c.RemainingArgs() - if len(args) == 0 { - // must have at least one argument - return nil, c.ArgErr() + if len(args) > 0 { + filterFileNames = append(filterFileNames, args...) } - filterFileName = args[0] for c.NextBlock() { switch c.Val() { case "safebrowsing": @@ -139,34 +137,39 @@ func setupPlugin(c *caddy.Controller) (*plug, error) { } } - file, err := os.Open(filterFileName) - if err != nil { - return nil, err - } - defer file.Close() + log.Printf("filterFileNames = %+v", filterFileNames) - count := 0 - scanner := bufio.NewScanner(file) - for scanner.Scan() { - text := scanner.Text() - if p.parseEtcHosts(text) { - continue - } - err = p.d.AddRule(text, 0) - if err == dnsfilter.ErrInvalidSyntax { - continue - } + for i, filterFileName := range filterFileNames { + file, err := os.Open(filterFileName) if err != nil { return nil, err } - count++ - } - log.Printf("Added %d rules from %s", count, filterFileName) + defer file.Close() - if err = scanner.Err(); err != nil { - return nil, err + count := 0 + scanner := bufio.NewScanner(file) + for scanner.Scan() { + text := scanner.Text() + if p.parseEtcHosts(text) { + continue + } + err = p.d.AddRule(text, uint32(i)) + if err == dnsfilter.ErrInvalidSyntax { + continue + } + if err != nil { + return nil, err + } + count++ + } + log.Printf("Added %d rules from %s", count, filterFileName) + + if err = scanner.Err(); err != nil { + return nil, err + } } + var err error p.upstream, err = upstream.New(nil) if err != nil { return nil, err diff --git a/coredns_plugin/coredns_plugin_test.go b/coredns_plugin/coredns_plugin_test.go index 5c309269..17210b63 100644 --- a/coredns_plugin/coredns_plugin_test.go +++ b/coredns_plugin/coredns_plugin_test.go @@ -20,7 +20,8 @@ func TestSetup(t *testing.T) { config string failing bool }{ - {`dnsfilter`, true}, + {`dnsfilter`, false}, + {`dnsfilter /dev/nonexistent/abcdef`, true}, {`dnsfilter ../tests/dns.txt`, false}, {`dnsfilter ../tests/dns.txt { safebrowsing }`, false}, {`dnsfilter ../tests/dns.txt { parental }`, true},