diff options
author | 2016-11-07 11:12:20 +0000 | |
---|---|---|
committer | 2016-11-07 11:12:20 +0000 | |
commit | 3d5be649a293d5eb63537b653f574d4227cdd916 (patch) | |
tree | eb8c5d75e97eeffecc80c91206c7943638eb973f | |
parent | 0f22d321914140839dcd27c51b4d02a963eba0da (diff) | |
download | coredns-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.go | 5 | ||||
-rw-r--r-- | middleware/file/file.go | 6 | ||||
-rw-r--r-- | test/auto_test.go | 38 |
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. |