diff --git a/ex/fks/serve.go b/ex/fks/serve.go index d4f25daf..28f268e9 100644 --- a/ex/fks/serve.go +++ b/ex/fks/serve.go @@ -5,5 +5,14 @@ import ( ) func serve(w dns.ResponseWriter, req *dns.Msg, z *Zones) { - return + // for DS go to the parent...? TODO(mg) + + zone := z.Find(req.Question[0].Name) + if zone == nil { + m := new(dns.Msg) + m.SetRcode(req, dns.RcodeServerFailure) + w.Write(m) + return + } + // Need to look how the algorithm is in rfc1035 } diff --git a/ex/fks/zones.go b/ex/fks/zones.go index 76de2ec4..4d3e5706 100644 --- a/ex/fks/zones.go +++ b/ex/fks/zones.go @@ -10,7 +10,7 @@ import ( ) var ( - z = flag.String("zone", "", "zonefile to read") + z = flag.String("zone", "", "zonefile to read") o = flag.String("origin", "", "origin of the zone") ) @@ -52,7 +52,23 @@ func main() { log.Fatal("no origin") } Z := new(Zones) + Z.Radix = radix.New() Z.addZone(*o, *z) dns.HandleFunc(*o, func(w dns.ResponseWriter, req *dns.Msg) { serve(w, req, Z) }) - // NX domain?? + // NX domain?? TODO(mg) + go func() { + err := dns.ListenAndServe(":8053", "udp", nil) + if err != nil { + log.Fatal("Could not start") + } + }() + sig := make(chan os.Signal) +forever: + for { + select { + case <-sig: + log.Printf("Signal received, stopping\n") + break forever + } + } }