diff options
-rw-r--r-- | plugin/file/xfr_test.go | 9 | ||||
-rw-r--r-- | plugin/file/zone.go | 10 |
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 |