aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2019-07-20 18:13:43 +0000
committerGravatar Yong Tang <yong.tang.github@outlook.com> 2019-07-20 11:13:43 -0700
commit01e13c622e087779d5e0e1e82378333ccca9b1fb (patch)
treef26caac52021e1a30faa5cdd9a4ded51859dd45b
parentf7b26db9d02cd301e26e0d42d6c41473b5c23730 (diff)
downloadcoredns-01e13c622e087779d5e0e1e82378333ccca9b1fb.tar.gz
coredns-01e13c622e087779d5e0e1e82378333ccca9b1fb.tar.zst
coredns-01e13c622e087779d5e0e1e82378333ccca9b1fb.zip
plugin/file: New zone should have zero records (#3025)
After calling NewZone the number of records should be zero, but due to how zone.All() was implemented so empty RRs would be added. This then fails the == 0 check in xfr.go and put nil in the slice, this then subsequently panics on the Len(). Fix this making All() smarter when adding records. Added little test to enfore this. Signed-off-by: Miek Gieben <miek@miek.nl>
-rw-r--r--plugin/file/xfr_test.go9
-rw-r--r--plugin/file/zone.go10
2 files changed, 17 insertions, 2 deletions
diff --git a/plugin/file/xfr_test.go b/plugin/file/xfr_test.go
index 69ad68e64..c02575556 100644
--- a/plugin/file/xfr_test.go
+++ b/plugin/file/xfr_test.go
@@ -3,6 +3,7 @@ package file
import (
"fmt"
"strings"
+ "testing"
)
func ExampleZone_All() {
@@ -32,3 +33,11 @@ func ExampleZone_All() {
// xfr_test.go:15: a.miek.nl. 1800 IN A 139.162.196.78
// xfr_test.go:15: a.miek.nl. 1800 IN AAAA 2a01:7e00::f03c:91ff:fef1:6735
}
+
+func TestAllNewZone(t *testing.T) {
+ zone := NewZone("example.org.", "stdin")
+ records := zone.All()
+ if len(records) != 0 {
+ t.Errorf("Expected %d records in empty zone, got %d", 0, len(records))
+ }
+}
diff --git a/plugin/file/zone.go b/plugin/file/zone.go
index 186fdf8d0..3eb99ef66 100644
--- a/plugin/file/zone.go
+++ b/plugin/file/zone.go
@@ -173,15 +173,21 @@ func (z *Zone) All() []dns.RR {
records = append(records, a.All()...)
}
+ // Either the entire Apex is filled or none it, this isn't enforced here though.
if len(z.Apex.SIGNS) > 0 {
records = append(z.Apex.SIGNS, records...)
}
- records = append(z.Apex.NS, records...)
+ if len(z.Apex.NS) > 0 {
+ records = append(z.Apex.NS, records...)
+ }
if len(z.Apex.SIGSOA) > 0 {
records = append(z.Apex.SIGSOA, records...)
}
- return append([]dns.RR{z.Apex.SOA}, records...)
+ if z.Apex.SOA != nil {
+ return append([]dns.RR{z.Apex.SOA}, records...)
+ }
+ return records
}
// NameFromRight returns the labels from the right, staring with the