aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2017-03-02 19:35:44 +0000
committerGravatar GitHub <noreply@github.com> 2017-03-02 19:35:44 +0000
commit6966bce653a1a866c2a8fc3f8b5bcccf123a046d (patch)
tree6e5e0090f19cdf33996579a494e24147e5c46df1
parenta3f7788686a3833677b5c86da90d70604637d307 (diff)
downloadcoredns-6966bce653a1a866c2a8fc3f8b5bcccf123a046d.tar.gz
coredns-6966bce653a1a866c2a8fc3f8b5bcccf123a046d.tar.zst
coredns-6966bce653a1a866c2a8fc3f8b5bcccf123a046d.zip
Fix resolving CNAME with no proxy (#564)
This fixes a crash when we resolve (or try to) an external CNAME when no proxy is set. Add test as well.
-rw-r--r--middleware/proxy/proxy.go4
-rw-r--r--test/cache_test.go2
-rw-r--r--test/ds_file_test.go2
-rw-r--r--test/example_test.go1
-rw-r--r--test/file_cname_proxy_test.go52
-rw-r--r--test/file_reload_test.go5
-rw-r--r--test/middleware_dnssec_test.go2
-rw-r--r--test/middleware_test.go2
-rw-r--r--test/proxy_test.go2
-rw-r--r--test/reverse_test.go2
-rw-r--r--test/wildcard_test.go2
11 files changed, 67 insertions, 9 deletions
diff --git a/middleware/proxy/proxy.go b/middleware/proxy/proxy.go
index 9457fb2a1..d21dee732 100644
--- a/middleware/proxy/proxy.go
+++ b/middleware/proxy/proxy.go
@@ -142,6 +142,10 @@ func (p Proxy) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
}
func (p Proxy) match(state request.Request) (u Upstream) {
+ if p.Upstreams == nil {
+ return nil
+ }
+
longestMatch := 0
for _, upstream := range *p.Upstreams {
from := upstream.From()
diff --git a/test/cache_test.go b/test/cache_test.go
index f3b752617..43ef29efb 100644
--- a/test/cache_test.go
+++ b/test/cache_test.go
@@ -18,7 +18,7 @@ func TestLookupCache(t *testing.T) {
// Start auth. CoreDNS holding the auth zone.
name, rm, err := test.TempFile(".", exampleOrg)
if err != nil {
- t.Fatalf("failed to created zone: %s", err)
+ t.Fatalf("failed to create zone: %s", err)
}
defer rm()
diff --git a/test/ds_file_test.go b/test/ds_file_test.go
index a41bec379..16170aad3 100644
--- a/test/ds_file_test.go
+++ b/test/ds_file_test.go
@@ -35,7 +35,7 @@ func TestLookupDS(t *testing.T) {
t.Parallel()
name, rm, err := TempFile(".", miekNL)
if err != nil {
- t.Fatalf("failed to created zone: %s", err)
+ t.Fatalf("failed to create zone: %s", err)
}
defer rm()
diff --git a/test/example_test.go b/test/example_test.go
index 5b6df9dcc..e8f30e983 100644
--- a/test/example_test.go
+++ b/test/example_test.go
@@ -8,4 +8,5 @@ example.org. IN A 127.0.0.1
example.org. IN A 127.0.0.2
*.w.example.org. IN TXT "Wildcard"
a.b.c.w.example.org. IN TXT "Not a wildcard"
+cname.example.org. IN CNAME www.example.net.
`
diff --git a/test/file_cname_proxy_test.go b/test/file_cname_proxy_test.go
new file mode 100644
index 000000000..61bd8764e
--- /dev/null
+++ b/test/file_cname_proxy_test.go
@@ -0,0 +1,52 @@
+package test
+
+import (
+ "io/ioutil"
+ "log"
+ "testing"
+
+ "github.com/coredns/coredns/middleware/proxy"
+ "github.com/coredns/coredns/middleware/test"
+ "github.com/coredns/coredns/request"
+
+ "github.com/miekg/dns"
+)
+
+func TestZoneExternalCNAMELookup(t *testing.T) {
+ t.Parallel()
+ log.SetOutput(ioutil.Discard)
+
+ name, rm, err := TempFile(".", exampleOrg)
+ 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, 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.NewLookup([]string{udp})
+ state := request.Request{W: &test.ResponseWriter{}, Req: new(dns.Msg)}
+
+ resp, err := p.Lookup(state, "cname.example.org.", dns.TypeA)
+ if err != nil {
+ t.Fatalf("Expected to receive reply, but didn't: %s", err)
+ }
+ // There should only be a CNAME in the answer section.
+ if len(resp.Answer) != 1 {
+ t.Fatalf("Expected 1 RR in answer section got %d", len(resp.Answer))
+ }
+}
diff --git a/test/file_reload_test.go b/test/file_reload_test.go
index 280818c33..fd21a73b8 100644
--- a/test/file_reload_test.go
+++ b/test/file_reload_test.go
@@ -9,6 +9,7 @@ import (
"github.com/coredns/coredns/middleware/proxy"
"github.com/coredns/coredns/middleware/test"
"github.com/coredns/coredns/request"
+
"github.com/miekg/dns"
)
@@ -18,7 +19,7 @@ func TestZoneReload(t *testing.T) {
name, rm, err := TempFile(".", exampleOrg)
if err != nil {
- t.Fatalf("Failed to created zone: %s", err)
+ t.Fatalf("Failed to create zone: %s", err)
}
defer rm()
@@ -47,7 +48,7 @@ example.net:0 {
resp, err := p.Lookup(state, "example.org.", dns.TypeA)
if err != nil {
- t.Fatal("Expected to receive reply, but didn't")
+ t.Fatalf("Expected to receive reply, but didn't: %s", err)
}
if len(resp.Answer) != 2 {
t.Fatalf("Expected two RR in answer section got %d", len(resp.Answer))
diff --git a/test/middleware_dnssec_test.go b/test/middleware_dnssec_test.go
index 8b264014b..819ee66d7 100644
--- a/test/middleware_dnssec_test.go
+++ b/test/middleware_dnssec_test.go
@@ -15,7 +15,7 @@ func TestLookupBalanceRewriteCacheDnssec(t *testing.T) {
t.Parallel()
name, rm, err := test.TempFile(".", exampleOrg)
if err != nil {
- t.Fatalf("failed to created zone: %s", err)
+ t.Fatalf("failed to create zone: %s", err)
}
defer rm()
rm1 := createKeyFile(t)
diff --git a/test/middleware_test.go b/test/middleware_test.go
index a631bb274..ef468cdf7 100644
--- a/test/middleware_test.go
+++ b/test/middleware_test.go
@@ -14,7 +14,7 @@ func benchmarkLookupBalanceRewriteCache(b *testing.B) {
t := new(testing.T)
name, rm, err := test.TempFile(".", exampleOrg)
if err != nil {
- t.Fatalf("failed to created zone: %s", err)
+ t.Fatalf("failed to create zone: %s", err)
}
defer rm()
diff --git a/test/proxy_test.go b/test/proxy_test.go
index c550af044..7b96582c5 100644
--- a/test/proxy_test.go
+++ b/test/proxy_test.go
@@ -16,7 +16,7 @@ func TestLookupProxy(t *testing.T) {
t.Parallel()
name, rm, err := test.TempFile(".", exampleOrg)
if err != nil {
- t.Fatalf("failed to created zone: %s", err)
+ t.Fatalf("failed to create zone: %s", err)
}
defer rm()
diff --git a/test/reverse_test.go b/test/reverse_test.go
index c120555a9..6342f66b8 100644
--- a/test/reverse_test.go
+++ b/test/reverse_test.go
@@ -16,7 +16,7 @@ func TestReverseFallthrough(t *testing.T) {
t.Parallel()
name, rm, err := test.TempFile(".", exampleOrg)
if err != nil {
- t.Fatalf("failed to created zone: %s", err)
+ t.Fatalf("failed to create zone: %s", err)
}
defer rm()
diff --git a/test/wildcard_test.go b/test/wildcard_test.go
index 06b0ea5d2..a8f103ccc 100644
--- a/test/wildcard_test.go
+++ b/test/wildcard_test.go
@@ -16,7 +16,7 @@ func TestLookupWildcard(t *testing.T) {
t.Parallel()
name, rm, err := test.TempFile(".", exampleOrg)
if err != nil {
- t.Fatalf("failed to created zone: %s", err)
+ t.Fatalf("failed to create zone: %s", err)
}
defer rm()