Browse Source

Return the SOA record for empty 'noerror' responses so they get cached

Ask Bjørn Hansen 13 years ago
parent
commit
0506509716
3 changed files with 7 additions and 1 deletions
  1. 1 1
      geodns.go
  2. 2 0
      serve.go
  3. 4 0
      serve_test.go

+ 1 - 1
geodns.go

@@ -11,7 +11,7 @@ import (
 	"time"
 )
 
-var VERSION string = "2.1.1"
+var VERSION string = "2.1.2"
 var gitVersion string
 var serverId string
 

+ 2 - 0
serve.go

@@ -107,6 +107,8 @@ func serve(w dns.ResponseWriter, req *dns.Msg, z *Zone) {
 			if _, ok := labels.Records[dns.TypeCNAME]; ok {
 				cname := labels.firstRR(dns.TypeCNAME)
 				m.Answer = append(m.Answer, cname)
+			} else {
+				m.Ns = append(m.Ns, z.SoaRR())
 			}
 		} else {
 			m.Ns = append(m.Ns, z.SoaRR())

+ 4 - 0
serve_test.go

@@ -32,6 +32,10 @@ func (s *ConfigSuite) TestServing(c *C) {
 	serial := soa.Serial
 	c.Check(int(serial), Equals, 3)
 
+	// no AAAA records for 'bar', so check we get a soa record back
+	r = exchange(c, "example.com.", dns.TypeAAAA)
+	soa2 := r.Ns[0].(*dns.RR_SOA)
+	c.Check(soa, DeepEquals, soa2)
 }
 
 func exchange(c *C, name string, dnstype uint16) *dns.Msg {