Use the fallback for reverse lookups too

I considered a couple of different factorings, that is

 * Implementing the fallback as a Lookup
 * Having a server struct that held the resolv.conf and methods for
   handling queries

but ultimately, this is simple and works.
This commit is contained in:
Michael Bridgen committed 2015-01-14 16:44:12 +00:00
1 parent fd90212db4
commit db9bae4162
2 files changed
+14 -5

No files matched your search

+4 -4
View File
@@ -51,6 +51,7 @@ func queryHandler(lookups []Lookup) dns.HandlerFunc {
}
func rdnsHandler(lookups []Lookup) dns.HandlerFunc {
fallback := notUsHandler()
return func(w dns.ResponseWriter, r *dns.Msg) {
q := r.Question[0]
Debug.Printf("Reverse query: %+v", q)
@@ -62,13 +63,12 @@ func rdnsHandler(lookups []Lookup) dns.HandlerFunc {
return
}
}
Info.Printf("[dns msgid %d] No results for type %s query %s",
r.MsgHdr.Id, dns.TypeToString[q.Qtype], q.Name)
fallback(w, r)
return
} else {
Warning.Printf("[dns msgid %d] Unexpected reverse query type %s: %+v",
r.MsgHdr.Id, dns.TypeToString[q.Qtype], q)
}
w.WriteMsg(makeDNSFailResponse(r))
}
}
@@ -80,7 +80,7 @@ func notUsHandler() dns.HandlerFunc {
checkFatal(err)
return func(w dns.ResponseWriter, r *dns.Msg) {
q := r.Question[0]
Debug.Printf("[dns msgid %d] Non-local query: %+v", r.MsgHdr.Id, q)
Debug.Printf("[dns msgid %d] Fallback query: %+v", r.MsgHdr.Id, q)
for _, server := range config.Servers {
reply, err := dns.Exchange(r, fmt.Sprintf("%s:%s", server, config.Port))
if err != nil {
+10 -1
View File
@@ -78,5 +78,14 @@ func TestDNSServer(t *testing.T) {
t.Fatal("Number of answers > 0")
}
// Not testing MDNS functionality of server here (yet)
m.SetQuestion("8.8.8.8.in-addr.arpa.", dns.TypePTR)
r, _, err = c.Exchange(m, dnsAddr)
wt.AssertNoErr(t, err)
wt.AssertStatus(t, r.Rcode, dns.RcodeSuccess, "DNS success response code")
if !(len(r.Answer) > 0) {
t.Fatal("Number of answers > 0")
}
// Not testing MDNS functionality of server here (yet), since it
// needs two servers, each listening on its own address
}