aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--middleware/file/file.go6
-rw-r--r--middleware/file/file_test.go19
2 files changed, 24 insertions, 1 deletions
diff --git a/middleware/file/file.go b/middleware/file/file.go
index 4df7427c1..8a4cd27e2 100644
--- a/middleware/file/file.go
+++ b/middleware/file/file.go
@@ -126,13 +126,17 @@ func Parse(f io.Reader, origin, fileName string, serial int64) (*Zone, error) {
if s.Serial == uint32(serial) { // same zone
return nil, fmt.Errorf("no change in serial: %d", serial)
}
+ seenSOA = true
}
- seenSOA = true
}
if err := z.Insert(x.RR); err != nil {
return nil, err
}
}
+ if !seenSOA {
+ return nil, fmt.Errorf("file %q has no SOA record", fileName)
+ }
+
return z, nil
}
diff --git a/middleware/file/file_test.go b/middleware/file/file_test.go
index d5762683d..ae17624f9 100644
--- a/middleware/file/file_test.go
+++ b/middleware/file/file_test.go
@@ -10,3 +10,22 @@ func BenchmarkParseInsert(b *testing.B) {
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
+`