Browse Source

Make TTLs set on individual labels work

Closes #60
Ask Bjørn Hansen 10 years ago
parent
commit
103f8fb4d1
3 changed files with 11 additions and 2 deletions
  1. 2 1
      picker.go
  2. 1 0
      serve_test.go
  3. 8 1
      zones.go

+ 2 - 1
picker.go

@@ -1,8 +1,9 @@
 package main
 
 import (
-	"github.com/abh/dns"
 	"math/rand"
+
+	"github.com/abh/dns"
 )
 
 func (label *Label) Picker(qtype uint16, max int) Records {

+ 1 - 0
serve_test.go

@@ -62,6 +62,7 @@ func (s *ServeSuite) TestServing(c *C) {
 	r = exchange(c, "bar.test.example.com.", dns.TypeA)
 	ip := r.Answer[0].(*dns.A).A
 	c.Check(ip.String(), Equals, "192.168.1.2")
+	c.Check(int(r.Answer[0].Header().Ttl), Equals, 601)
 
 	r = exchange(c, "test.example.com.", dns.TypeSOA)
 	soa := r.Answer[0].(*dns.SOA)

+ 8 - 1
zones.go

@@ -497,6 +497,7 @@ func setupZoneData(data map[string]interface{}, Zone *Zone) {
 	}
 
 	// loop over exisiting labels, create zone records for missing sub-domains
+	// and set TTLs
 	for k := range Zone.Labels {
 		if strings.Contains(k, ".") {
 			subLabels := strings.Split(k, ".")
@@ -506,7 +507,13 @@ func setupZoneData(data map[string]interface{}, Zone *Zone) {
 					Zone.AddLabel(subSubLabel)
 				}
 			}
-
+		}
+		if Zone.Labels[k].Ttl > 0 {
+			for _, records := range Zone.Labels[k].Records {
+				for _, r := range records {
+					r.RR.Header().Ttl = uint32(Zone.Labels[k].Ttl)
+				}
+			}
 		}
 	}