aboutsummaryrefslogtreecommitdiff
path: root/plugin
diff options
context:
space:
mode:
authorGravatar Chris O'Haver <cohaver@infoblox.com> 2021-08-13 11:02:00 -0400
committerGravatar GitHub <noreply@github.com> 2021-08-13 11:02:00 -0400
commit88d94dc148d91b8d629f0005163135ebc0810e82 (patch)
tree6384ce4bb6f8a49fbdb5fb05a13fcdb3a7de1f62 /plugin
parent5aae49cee59cc48ff799bddb1b447aeafcc41b85 (diff)
downloadcoredns-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.go4
-rw-r--r--plugin/kubernetes/xfr_test.go17
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{}