Commit 88d94dc1 authored by Chris O'Haver's avatar Chris O'Haver Committed by GitHub

plugin/kubernetes: Only answer transfer requests for authoritative zones (#4802)

* check for zone match
Signed-off-by: default avatarChris O'Haver <cohaver@infoblox.com>
parent 5aae49ce
...@@ -18,6 +18,10 @@ import ( ...@@ -18,6 +18,10 @@ import (
// Transfer implements the transfer.Transfer interface. // Transfer implements the transfer.Transfer interface.
func (k *Kubernetes) Transfer(zone string, serial uint32) (<-chan []dns.RR, error) { 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{] // state is not used here, hence the empty request.Request{]
soa, err := plugin.SOA(context.TODO(), k, zone, request.Request{}, plugin.Options{}) soa, err := plugin.SOA(context.TODO(), k, zone, request.Request{}, plugin.Options{})
if err != nil { if err != nil {
......
...@@ -5,9 +5,26 @@ import ( ...@@ -5,9 +5,26 @@ import (
"strings" "strings"
"testing" "testing"
"github.com/coredns/coredns/plugin/transfer"
"github.com/miekg/dns" "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) { func TestKubernetesAXFR(t *testing.T) {
k := New([]string{"cluster.local."}) k := New([]string{"cluster.local."})
k.APIConn = &APIConnServeTest{} k.APIConn = &APIConnServeTest{}
......
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