middleware/file: consider no SOA a fatal error (#734)

Don't load a zone with a SOA record, barf with 'no SOA record' error.
This commit is contained in:
Miek Gieben 2017-06-13 12:51:52 -07:00 committed by GitHub
parent e9eda7e7c8
commit 46bf7f3106
2 changed files with 24 additions and 1 deletions

View file

@ -126,13 +126,17 @@ func Parse(f io.Reader, origin, fileName string, serial int64) (*Zone, error) {
if s.Serial == uint32(serial) { // same zone if s.Serial == uint32(serial) { // same zone
return nil, fmt.Errorf("no change in serial: %d", serial) return nil, fmt.Errorf("no change in serial: %d", serial)
} }
seenSOA = true
} }
seenSOA = true
} }
if err := z.Insert(x.RR); err != nil { if err := z.Insert(x.RR); err != nil {
return nil, err return nil, err
} }
} }
if !seenSOA {
return nil, fmt.Errorf("file %q has no SOA record", fileName)
}
return z, nil return z, nil
} }

View file

@ -10,3 +10,22 @@ func BenchmarkParseInsert(b *testing.B) {
Parse(strings.NewReader(dbMiekENTNL), testzone, "stdin", 0) Parse(strings.NewReader(dbMiekENTNL), testzone, "stdin", 0)
} }
} }
func TestParseNoSOA(t *testing.T) {
_, err := Parse(strings.NewReader(dbNoSOA), "example.org.", "stdin", 0)
if err == nil {
t.Fatalf("zone %q should have failed to load", "example.org.")
}
if !strings.Contains(err.Error(), "no SOA record") {
t.Fatalf("zone %q should have failed to load with no soa error: %s", "example.org.", err)
}
}
const dbNoSOA = `
$TTL 1M
$ORIGIN example.org.
www IN A 192.168.0.14
mail IN A 192.168.0.15
imap IN CNAME mail
`