mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-30 17:53:21 -04:00 
			
		
		
		
	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:
		| @@ -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) { | |||||||
| 		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 | ||||||
|  | ` | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user