Add small nameserver implementation

This commit is contained in:
Miek Gieben 2012-08-02 15:19:22 -07:00
parent ed25603f66
commit cd0567023f
2 changed files with 28 additions and 3 deletions

View File

@ -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
}

View File

@ -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
}
}
}