mirror of
https://github.com/coredns/coredns.git
synced 2026-04-05 11:45:33 -04:00
Fix case-sensitive zone handling in the transfer plugin for AXFR/IXFR. (#7899)
This PR fixes Fix case-sensitive zone handling in the transfer plugin for AXFR/IXFR, raised in 7898 Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
This commit is contained in:
@@ -63,7 +63,7 @@ func (t *Transfer) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Ms
|
|||||||
return dns.RcodeRefused, nil
|
return dns.RcodeRefused, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
x := longestMatch(t.xfrs, state.QName())
|
x := longestMatch(t.xfrs, state.Name())
|
||||||
if x == nil {
|
if x == nil {
|
||||||
return plugin.NextOrFailure(t.Name(), t.Next, ctx, w, r)
|
return plugin.NextOrFailure(t.Name(), t.Next, ctx, w, r)
|
||||||
}
|
}
|
||||||
@@ -93,7 +93,7 @@ func (t *Transfer) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Ms
|
|||||||
var pchan <-chan []dns.RR
|
var pchan <-chan []dns.RR
|
||||||
var err error
|
var err error
|
||||||
for _, p := range t.Transferers {
|
for _, p := range t.Transferers {
|
||||||
pchan, err = p.Transfer(state.QName(), serial)
|
pchan, err = p.Transfer(state.Name(), serial)
|
||||||
if err == ErrNotAuthoritative {
|
if err == ErrNotAuthoritative {
|
||||||
// plugin was not authoritative for the zone, try next plugin
|
// plugin was not authoritative for the zone, try next plugin
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -339,3 +339,33 @@ func TestTransferDrainsProducerOnClientError(t *testing.T) {
|
|||||||
t.Fatal("producer goroutine did not finish; channel likely not drained on client error")
|
t.Fatal("producer goroutine did not finish; channel likely not drained on client error")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type nopHandler struct{}
|
||||||
|
|
||||||
|
func (nopHandler) Name() string { return "nop" }
|
||||||
|
func (nopHandler) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
|
||||||
|
return dns.RcodeSuccess, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAXFRZoneMatchCaseInsensitive(t *testing.T) {
|
||||||
|
next := &transfererPlugin{Zone: "example.org.", Serial: 12345}
|
||||||
|
next.Next = nopHandler{}
|
||||||
|
|
||||||
|
tr := &Transfer{
|
||||||
|
Transferers: []Transferer{next},
|
||||||
|
xfrs: []*xfr{{Zones: []string{"example.org."}, to: []string{"*"}}},
|
||||||
|
Next: next,
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx := context.TODO()
|
||||||
|
w := dnstest.NewMultiRecorder(&test.ResponseWriter{TCP: true})
|
||||||
|
m := new(dns.Msg)
|
||||||
|
m.SetAxfr("ExAmPlE.OrG.") // mixed case
|
||||||
|
|
||||||
|
_, err := tr.ServeDNS(ctx, w, m)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("ServeDNS error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
validateAXFRResponse(t, w)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user