aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2016-11-07 11:12:20 +0000
committerGravatar GitHub <noreply@github.com> 2016-11-07 11:12:20 +0000
commit3d5be649a293d5eb63537b653f574d4227cdd916 (patch)
treeeb8c5d75e97eeffecc80c91206c7943638eb973f
parent0f22d321914140839dcd27c51b4d02a963eba0da (diff)
downloadcoredns-3d5be649a293d5eb63537b653f574d4227cdd916.tar.gz
coredns-3d5be649a293d5eb63537b653f574d4227cdd916.tar.zst
coredns-3d5be649a293d5eb63537b653f574d4227cdd916.zip
Issue 388 (#389)
* add extra test * middleware/auto: fix crash when calling empty handler Don't call the next middleware, we should be auth. for this zone getitng into this path we should respond with ServFail. Fixes #388
-rw-r--r--middleware/auto/auto.go5
-rw-r--r--middleware/file/file.go6
-rw-r--r--test/auto_test.go38
3 files changed, 41 insertions, 8 deletions
diff --git a/middleware/auto/auto.go b/middleware/auto/auto.go
index 11d138a7a..eaff7fd18 100644
--- a/middleware/auto/auto.go
+++ b/middleware/auto/auto.go
@@ -64,10 +64,7 @@ func (a Auto) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (i
z, ok := a.Zones.Z[zone]
a.Zones.RUnlock()
- if !ok {
- return a.Next.ServeDNS(ctx, w, r)
- }
- if z == nil {
+ if !ok || z == nil {
return dns.RcodeServerFailure, nil
}
diff --git a/middleware/file/file.go b/middleware/file/file.go
index db15b30a5..3f16a956e 100644
--- a/middleware/file/file.go
+++ b/middleware/file/file.go
@@ -43,11 +43,9 @@ func (f File) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (i
}
return dns.RcodeServerFailure, errors.New("no next middleware found")
}
+
z, ok := f.Zones.Z[zone]
- if !ok {
- return f.Next.ServeDNS(ctx, w, r)
- }
- if z == nil {
+ if !ok || z == nil {
return dns.RcodeServerFailure, nil
}
diff --git a/test/auto_test.go b/test/auto_test.go
index 525e58df3..d9ca5f9da 100644
--- a/test/auto_test.go
+++ b/test/auto_test.go
@@ -79,6 +79,44 @@ func TestAuto(t *testing.T) {
}
}
+func TestAutoNonExistentZone(t *testing.T) {
+ tmpdir, err := ioutil.TempDir(os.TempDir(), "coredns")
+ if err != nil {
+ t.Fatal(err)
+ }
+ log.SetOutput(ioutil.Discard)
+
+ corefile := `.:0 {
+ auto {
+ directory ` + tmpdir + ` (.*) {1} 1
+ }
+ errors stdout
+ }
+`
+
+ i, err := CoreDNSServer(corefile)
+ if err != nil {
+ t.Fatalf("Could not get CoreDNS serving instance: %s", err)
+ }
+
+ udp, _ := CoreDNSServerPorts(i, 0)
+ if udp == "" {
+ t.Fatalf("Could not get UDP listening port")
+ }
+ defer i.Stop()
+
+ p := proxy.New([]string{udp})
+ state := request.Request{W: &test.ResponseWriter{}, Req: new(dns.Msg)}
+
+ resp, err := p.Lookup(state, "example.org.", dns.TypeA)
+ if err != nil {
+ t.Fatal("Expected to receive reply, but didn't")
+ }
+ if resp.Rcode != dns.RcodeServerFailure {
+ t.Fatalf("Expected reply to be a SERVFAIL, got %d", resp.Rcode)
+ }
+}
+
const zoneContent = `; testzone
@ IN SOA sns.dns.icann.org. noc.dns.icann.org. 2016082534 7200 3600 1209600 3600
NS a.iana-servers.net.