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:
Yong Tang
2026-07-30 01:44:02 -07:00
committed by GitHub
parent 36515d9dce
commit 3a52659cb8
2 changed files with 64 additions and 2 deletions

View File

@@ -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