aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2017-12-11 14:32:51 +0000
committerGravatar GitHub <noreply@github.com> 2017-12-11 14:32:51 +0000
commit5a7e440476475b71ac3f98b666150ca5062c0e2a (patch)
treed768bc79248e1e083221d29e81b3be18c4d6e331 /test
parent27da0eba04ed527b7c978dd1b8549608706c7c89 (diff)
downloadcoredns-5a7e440476475b71ac3f98b666150ca5062c0e2a.tar.gz
coredns-5a7e440476475b71ac3f98b666150ca5062c0e2a.tar.zst
coredns-5a7e440476475b71ac3f98b666150ca5062c0e2a.zip
plugin/file: fix crash (#1301)
When z.Tree.Prev returns zero we should break out of this loop, not use elem as if nothing has happened. Can be triggered by sending edns0 to unsigned zone.
Diffstat (limited to 'test')
-rw-r--r--test/file_serve_test.go102
1 files changed, 102 insertions, 0 deletions
diff --git a/test/file_serve_test.go b/test/file_serve_test.go
new file mode 100644
index 000000000..3aca45bfb
--- /dev/null
+++ b/test/file_serve_test.go
@@ -0,0 +1,102 @@
+package test
+
+import (
+ "io/ioutil"
+ "log"
+ "testing"
+
+ "github.com/miekg/dns"
+)
+
+func TestZoneEDNS0Lookup(t *testing.T) {
+ t.Parallel()
+ log.SetOutput(ioutil.Discard)
+
+ name, rm, err := TempFile(".", `$ORIGIN example.org.
+@ 3600 IN SOA sns.dns.icann.org. noc.dns.icann.org. (
+ 2017042745 ; serial
+ 7200 ; refresh (2 hours)
+ 3600 ; retry (1 hour)
+ 1209600 ; expire (2 weeks)
+ 3600 ; minimum (1 hour)
+ )
+
+ 3600 IN NS a.iana-servers.net.
+ 3600 IN NS b.iana-servers.net.
+
+www IN A 127.0.0.1
+www IN AAAA ::1
+`)
+ if err != nil {
+ t.Fatalf("Failed to create zone: %s", err)
+ }
+ defer rm()
+
+ // Corefile with for example without proxy section.
+ corefile := `example.org:0 {
+ file ` + name + `
+}
+`
+ i, udp, _, err := CoreDNSServerAndPorts(corefile)
+ if err != nil {
+ t.Fatalf("Could not get CoreDNS serving instance: %s", err)
+ }
+ defer i.Stop()
+
+ m := new(dns.Msg)
+ m.SetQuestion("example.org.", dns.TypeMX)
+ m.SetEdns0(4096, true)
+
+ r, err := dns.Exchange(m, udp)
+ if err != nil {
+ t.Fatalf("Could not exchange msg: %s", err)
+ }
+ if r.Rcode == dns.RcodeServerFailure {
+ t.Fatalf("Rcode should not be dns.RcodeServerFailure")
+ }
+}
+
+func TestZoneNoNS(t *testing.T) {
+ t.Parallel()
+ log.SetOutput(ioutil.Discard)
+
+ name, rm, err := TempFile(".", `$ORIGIN example.org.
+@ 3600 IN SOA sns.dns.icann.org. noc.dns.icann.org. (
+ 2017042745 ; serial
+ 7200 ; refresh (2 hours)
+ 3600 ; retry (1 hour)
+ 1209600 ; expire (2 weeks)
+ 3600 ; minimum (1 hour)
+ )
+
+www IN A 127.0.0.1
+www IN AAAA ::1
+`)
+ if err != nil {
+ t.Fatalf("Failed to create zone: %s", err)
+ }
+ defer rm()
+
+ // Corefile with for example without proxy section.
+ corefile := `example.org:0 {
+ file ` + name + `
+}
+`
+ i, udp, _, err := CoreDNSServerAndPorts(corefile)
+ if err != nil {
+ t.Fatalf("Could not get CoreDNS serving instance: %s", err)
+ }
+ defer i.Stop()
+
+ m := new(dns.Msg)
+ m.SetQuestion("example.org.", dns.TypeMX)
+ m.SetEdns0(4096, true)
+
+ r, err := dns.Exchange(m, udp)
+ if err != nil {
+ t.Fatalf("Could not exchange msg: %s", err)
+ }
+ if r.Rcode == dns.RcodeServerFailure {
+ t.Fatalf("Rcode should not be dns.RcodeServerFailure")
+ }
+}