mirror of
https://github.com/coredns/coredns.git
synced 2026-08-28 07:37:04 -04:00
plugin/file: Fixes multi-primary AXFR zone contamination (#8367)
This PR fixes multi-primary AXFR zone contamination. It use a fresh candidate zone for each primary so records from failed transfers cannot leak into later. Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
This commit is contained in:
@@ -26,10 +26,10 @@ func (z *Zone) TransferInWithRecords(t *transfer.Transfer, validate func([]dns.R
|
||||
m := new(dns.Msg)
|
||||
m.SetAxfr(z.origin)
|
||||
|
||||
z1 := z.CopyWithoutApex()
|
||||
var (
|
||||
Err error
|
||||
tr string
|
||||
z1 *Zone
|
||||
)
|
||||
var transferred []dns.RR
|
||||
|
||||
@@ -42,6 +42,7 @@ Transfer:
|
||||
Err = err
|
||||
continue Transfer
|
||||
}
|
||||
candidate := z.CopyWithoutApex()
|
||||
var records []dns.RR
|
||||
for env := range c {
|
||||
if env.Error != nil {
|
||||
@@ -50,7 +51,7 @@ Transfer:
|
||||
continue Transfer
|
||||
}
|
||||
for _, rr := range env.RR {
|
||||
if err := z1.Insert(rr); err != nil {
|
||||
if err := candidate.Insert(rr); err != nil {
|
||||
log.Errorf("Failed to parse transfer `%s' from: %q: %v", z.origin, tr, err)
|
||||
Err = err
|
||||
continue Transfer
|
||||
@@ -60,6 +61,7 @@ Transfer:
|
||||
}
|
||||
}
|
||||
}
|
||||
z1 = candidate
|
||||
transferred = records
|
||||
Err = nil
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user