From e08a87a991dc8a4e742b7b64bef7ab8a5085cb5f Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Fri, 3 Aug 2012 08:38:41 -0700 Subject: [PATCH] Use the more correct SERVAIL instead of REFUSED --- ex/fks/serve.go | 13 ++----------- ex/fks/zones.go | 20 +++++--------------- server.go | 15 ++++++++------- 3 files changed, 15 insertions(+), 33 deletions(-) diff --git a/ex/fks/serve.go b/ex/fks/serve.go index 28f268e9..8ef72ebf 100644 --- a/ex/fks/serve.go +++ b/ex/fks/serve.go @@ -4,15 +4,6 @@ import ( "dns" ) -func serve(w dns.ResponseWriter, req *dns.Msg, z *Zones) { - // 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 +func serve(w dns.ResponseWriter, req *dns.Msg, z *dns.Zone) { + // nil } diff --git a/ex/fks/zones.go b/ex/fks/zones.go index 4d3e5706..c9815a42 100644 --- a/ex/fks/zones.go +++ b/ex/fks/zones.go @@ -6,7 +6,6 @@ import ( "flag" "log" "os" - "radix" ) var ( @@ -14,14 +13,8 @@ var ( o = flag.String("origin", "", "origin of the zone") ) -// Zones holds all the zones we have. Its only holds -// the zone's name and nothing else. -type Zones struct { - *radix.Radix -} - // Read a zone and add it. -func (z *Zones) addZone(origin, file string) error { +func addZone(zones map[string]*dns.Zone, origin, file string) error { origin = dns.Fqdn(origin) z1 := dns.NewZone(origin) if z1 == nil { @@ -31,14 +24,13 @@ func (z *Zones) addZone(origin, file string) error { if e != nil { return e } - for rr := range dns.ParseZone(f, origin, file) { // TODO(mg): blab something about the error? if rr.Error == nil { z1.Insert(rr.RR) } } - z.Radix.Insert(origin, z1) + zones[origin] = z1 return nil } @@ -51,11 +43,9 @@ func main() { if *o == "" { 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?? TODO(mg) + Z := make(map[string]*dns.Zone) + addZone(Z, *o, *z) + dns.HandleFunc(*o, func(w dns.ResponseWriter, req *dns.Msg) { serve(w, req, Z[*o]) }) go func() { err := dns.ListenAndServe(":8053", "udp", nil) if err != nil { diff --git a/server.go b/server.go index 8857156b..cb65e371 100644 --- a/server.go +++ b/server.go @@ -70,16 +70,16 @@ func (f HandlerFunc) ServeDNS(w ResponseWriter, r *Msg) { f(w, r) } -// Refused is a helper handler that returns an answer with -// RCODE = refused for every request. -func Refused(w ResponseWriter, r *Msg) { +// Failed is a helper handler that returns an answer with +// RCODE = servfail for every request. +func Failed(w ResponseWriter, r *Msg) { m := new(Msg) - m.SetRcode(r, RcodeRefused) + m.SetRcode(r, RcodeServerFailure) w.Write(m) } -// RefusedHandler returns HandlerFunc with Refused. -func RefusedHandler() Handler { return HandlerFunc(Refused) } +// FailedHandler returns HandlerFunc with Failed. +func FailedHandler() Handler { return HandlerFunc(Failed) } // Start a server on addresss and network speficied. Invoke handler // for any incoming queries. @@ -135,10 +135,11 @@ func (mux *ServeMux) HandleRemove(pattern string) { // ServeDNS dispatches the request to the handler whose // pattern most closely matches the request message. +// If no handler is found a standard SERVFAIL message is returned func (mux *ServeMux) ServeDNS(w ResponseWriter, request *Msg) { h := mux.match(request.Question[0].Name) if h == nil { - h = RefusedHandler() + h = FailedHandler() } h.ServeDNS(w, request) }