commit - d5834ac9c24e2b94ddd01468976b08de9bb90ce8
commit + dc137f704dec33e5b5ab4cdb9548bb3b0d5bee3d
blob - 7aa4fa1052d05864c09d1a8ee9c858ab1f03d72f
blob + 137de3669fd4432923f8c2ef2e2f7cae846ef700
--- cmd/recursor/resolve.go
+++ cmd/recursor/resolve.go
}
func resolveFromRoot(q dnsmessage.Question) (dnsmessage.Message, error) {
- return resolve(q, roots)
+ return resolve(q, roots, 0)
}
-func resolve(q dnsmessage.Question, next []net.IP) (dnsmessage.Message, error) {
+func resolve(q dnsmessage.Question, next []net.IP, depth int) (dnsmessage.Message, error) {
var rmsg dnsmessage.Message
var err error
if rrs, ok := lookup(q.Name, q.Type); ok {
}
fmt.Fprintln(os.Stderr, "cache miss", q.Name, q.Type)
+ if depth > 12 {
+ return dnsmessage.Message{}, fmt.Errorf("query loop")
+ }
+
for _, ip := range next {
// Aussie Broadband doesn't support IPv6 yet!
if isIPv6(ip) {
continue
}
if len(rmsg.Answers) > 0 {
- return resolve(q, nextServerAddrs(rmsg.Answers))
+ return resolve(q, nextServerAddrs(rmsg.Answers), depth+1)
}
- return resolve(q, nextServerAddrs(rmsg.Additionals))
+ return resolve(q, nextServerAddrs(rmsg.Additionals), depth+1)
default:
return rmsg, fmt.Errorf("unexpected authority resource type %s", a.Header.Type)
}