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:
1 parent
fd90212db4
commit
db9bae4162
2 files changed
+14
-5
No files matched your search
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
Reference in new issue
Block a user