mirror of
https://github.com/miekg/dns.git
synced 2025-10-18 13:21:15 +02:00
Add small nameserver implementation
This commit is contained in:
parent
ed25603f66
commit
cd0567023f
@ -5,5 +5,14 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func serve(w dns.ResponseWriter, req *dns.Msg, z *Zones) {
|
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
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
z = flag.String("zone", "", "zonefile to read")
|
z = flag.String("zone", "", "zonefile to read")
|
||||||
o = flag.String("origin", "", "origin of the zone")
|
o = flag.String("origin", "", "origin of the zone")
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -52,7 +52,23 @@ func main() {
|
|||||||
log.Fatal("no origin")
|
log.Fatal("no origin")
|
||||||
}
|
}
|
||||||
Z := new(Zones)
|
Z := new(Zones)
|
||||||
|
Z.Radix = radix.New()
|
||||||
Z.addZone(*o, *z)
|
Z.addZone(*o, *z)
|
||||||
dns.HandleFunc(*o, func(w dns.ResponseWriter, req *dns.Msg) { serve(w, req, 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
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user