Commit cfbfa5c0 authored by Carl-Magnus Björkell's avatar Carl-Magnus Björkell Committed by Miek Gieben

plugin/etcd: propagate recursion flag properly (#2254)

When fetching records via the etcd plugin, the recursion flag was never
set properly according to if the caller requested an exact record match
or not. This cause problems especially in CNAME lookups, where recursion
took place and a random RR was returned instead of the one that was
specifically added for this key. Even when there is no service attached
on the given path, it is still wrong to return a random one from the
recursion.

Fixing by using the `exact` flag to decide if recursion should be done.
parent 1ef0a02b
...@@ -57,6 +57,7 @@ var servicesCname = []*msg.Service{ ...@@ -57,6 +57,7 @@ var servicesCname = []*msg.Service{
{Host: "cname5.region2.skydns.test", Key: "cname4.region2.skydns.test."}, {Host: "cname5.region2.skydns.test", Key: "cname4.region2.skydns.test."},
{Host: "cname6.region2.skydns.test", Key: "cname5.region2.skydns.test."}, {Host: "cname6.region2.skydns.test", Key: "cname5.region2.skydns.test."},
{Host: "endpoint.region2.skydns.test", Key: "cname6.region2.skydns.test."}, {Host: "endpoint.region2.skydns.test", Key: "cname6.region2.skydns.test."},
{Host: "mainendpoint.region2.skydns.test", Key: "region2.skydns.test."},
{Host: "10.240.0.1", Key: "endpoint.region2.skydns.test."}, {Host: "10.240.0.1", Key: "endpoint.region2.skydns.test."},
} }
...@@ -76,4 +77,10 @@ var dnsTestCasesCname = []test.Case{ ...@@ -76,4 +77,10 @@ var dnsTestCasesCname = []test.Case{
test.A("endpoint.region2.skydns.test. 300 IN A 10.240.0.1"), test.A("endpoint.region2.skydns.test. 300 IN A 10.240.0.1"),
}, },
}, },
{
Qname: "region2.skydns.test.", Qtype: dns.TypeCNAME,
Answer: []dns.RR{
test.CNAME("region2.skydns.test. 300 IN CNAME mainendpoint.region2.skydns.test."),
},
},
} }
...@@ -75,7 +75,7 @@ func (e *Etcd) Records(state request.Request, exact bool) ([]msg.Service, error) ...@@ -75,7 +75,7 @@ func (e *Etcd) Records(state request.Request, exact bool) ([]msg.Service, error)
name := state.Name() name := state.Name()
path, star := msg.PathWithWildcard(name, e.PathPrefix) path, star := msg.PathWithWildcard(name, e.PathPrefix)
r, err := e.get(path, true) r, err := e.get(path, !exact)
if err != nil { if err != nil {
return nil, err return nil, err
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment