diff options
author | 2021-08-13 11:02:00 -0400 | |
---|---|---|
committer | 2021-08-13 11:02:00 -0400 | |
commit | 88d94dc148d91b8d629f0005163135ebc0810e82 (patch) | |
tree | 6384ce4bb6f8a49fbdb5fb05a13fcdb3a7de1f62 /plugin | |
parent | 5aae49cee59cc48ff799bddb1b447aeafcc41b85 (diff) | |
download | coredns-88d94dc148d91b8d629f0005163135ebc0810e82.tar.gz coredns-88d94dc148d91b8d629f0005163135ebc0810e82.tar.zst coredns-88d94dc148d91b8d629f0005163135ebc0810e82.zip |
plugin/kubernetes: Only answer transfer requests for authoritative zones (#4802)
* check for zone match
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
Diffstat (limited to 'plugin')
-rw-r--r-- | plugin/kubernetes/xfr.go | 4 | ||||
-rw-r--r-- | plugin/kubernetes/xfr_test.go | 17 |
2 files changed, 21 insertions, 0 deletions
diff --git a/plugin/kubernetes/xfr.go b/plugin/kubernetes/xfr.go index b82c4d144..38899acf0 100644 --- a/plugin/kubernetes/xfr.go +++ b/plugin/kubernetes/xfr.go @@ -18,6 +18,10 @@ import ( // Transfer implements the transfer.Transfer interface. func (k *Kubernetes) Transfer(zone string, serial uint32) (<-chan []dns.RR, error) { + match := plugin.Zones(k.Zones).Matches(zone) + if match == "" { + return nil, transfer.ErrNotAuthoritative + } // state is not used here, hence the empty request.Request{] soa, err := plugin.SOA(context.TODO(), k, zone, request.Request{}, plugin.Options{}) if err != nil { diff --git a/plugin/kubernetes/xfr_test.go b/plugin/kubernetes/xfr_test.go index 45044463b..61e5d0af6 100644 --- a/plugin/kubernetes/xfr_test.go +++ b/plugin/kubernetes/xfr_test.go @@ -5,9 +5,26 @@ import ( "strings" "testing" + "github.com/coredns/coredns/plugin/transfer" + "github.com/miekg/dns" ) +func TestKubernetesTransferNonAuthZone(t *testing.T) { + k := New([]string{"cluster.local."}) + k.APIConn = &APIConnServeTest{} + k.Namespaces = map[string]struct{}{"testns": {}, "kube-system": {}} + k.localIPs = []net.IP{net.ParseIP("10.0.0.10")} + + dnsmsg := &dns.Msg{} + dnsmsg.SetAxfr("example.com") + + _, err := k.Transfer("example.com", 0) + if err != transfer.ErrNotAuthoritative { + t.Error(err) + } +} + func TestKubernetesAXFR(t *testing.T) { k := New([]string{"cluster.local."}) k.APIConn = &APIConnServeTest{} |