Skip to content

Commit 9a930f6

Browse files
committed
➿ dns: check RecursionAvailable in response
We only support upstream DNS servers with recursion support.
1 parent bc5b606 commit 9a930f6

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

dns/dns.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,10 @@ const (
3232
)
3333

3434
var (
35-
ErrLookup = errors.New("name lookup failed")
36-
ErrMessageNotResponse = errors.New("message is not a response")
37-
ErrDomainNoAssociatedIPs = errors.New("domain name has no associated IP addresses")
35+
ErrLookup = errors.New("name lookup failed")
36+
ErrMessageNotResponse = errors.New("message is not a response")
37+
ErrResponseNoRecursionAvailable = errors.New("response indicates server does not support recursion")
38+
ErrDomainNoAssociatedIPs = errors.New("domain name has no associated IP addresses")
3839
)
3940

4041
// ResolverConfig configures a DNS resolver.
@@ -635,6 +636,11 @@ func (r *Result) parseMsg(msg []byte) (dnsmessage.Header, error) {
635636
// Continue parsing even if truncated.
636637
// The caller may still want to use the result.
637638

639+
// Check RecursionAvailable.
640+
if !header.RecursionAvailable {
641+
return dnsmessage.Header{}, ErrResponseNoRecursionAvailable
642+
}
643+
638644
// Check RCode.
639645
if header.RCode != dnsmessage.RCodeSuccess {
640646
return dnsmessage.Header{}, fmt.Errorf("DNS failure: %s", header.RCode)

0 commit comments

Comments
 (0)