Commit 46bf7f31 authored by Miek Gieben's avatar Miek Gieben Committed by GitHub

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

Don't load a zone with a SOA record, barf with 'no SOA record' error.
parent e9eda7e7
...@@ -126,13 +126,17 @@ func Parse(f io.Reader, origin, fileName string, serial int64) (*Zone, error) { ...@@ -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
} }
...@@ -10,3 +10,22 @@ func BenchmarkParseInsert(b *testing.B) { ...@@ -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
`
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment