dns

DNS client and server implementations using the Go project's dnsmessage package
Log | Files | Refs | README | LICENSE

commit 3a23ded8a9048c791d17b7cc06e978412c4c4973
parent 3b6333ee3bb41ffb8165a098957014d84fe3d565
Author: Oliver Lowe <o@olowe.co>
Date:   Tue, 14 Dec 2021 12:37:30 +1100

cmd/recursor: early return on authoritative flag

Because we have an authoritative answer, so that means it's time to
stop the lookup and return the result!

Diffstat:
Mcmd/recursor/recursor.go | 5+----
1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/cmd/recursor/recursor.go b/cmd/recursor/recursor.go @@ -59,7 +59,7 @@ func resolve(q dnsmessage.Question, next []net.IP) (dnsmessage.Message, error) { } fmt.Fprintf(os.Stderr, "asking %s about %s\n", ip, q.Name) rmsg, err = dns.Exchange(qmsg, ip2dial(ip)) - if rmsg.Header.RCode == dnsmessage.RCodeNameError { + if rmsg.Header.Authoritative { return rmsg, err } else if rmsg.Header.RCode == dnsmessage.RCodeSuccess && err == nil { break @@ -68,9 +68,6 @@ func resolve(q dnsmessage.Question, next []net.IP) (dnsmessage.Message, error) { if err != nil { return dnsmessage.Message{}, fmt.Errorf("resolve %s: %w", q.Name, err) } - if len(rmsg.Answers) > 0 { - return rmsg, nil - } fmt.Fprintf(os.Stderr, "no answer for %s %s, checking additionals\n", q.Name, q.Type) if len(rmsg.Additionals) > 0 {