mirror of
https://github.com/golang/go.git
synced 2025-11-11 22:21:06 +00:00
net: add Resolver.StrictErrors
When LookupIP is performing multiple subqueries, this option causes a timeout/servfail affecting a single query to abort the whole operation, instead of returning a partial (IPv4/IPv6-only) result. Similarly, operations that walk the DNS search list will also abort when encountering one of these errors. Fixes #17448 Change-Id: Ice22e4aceb555c5a80d19bd1fde8b8fe87ac9517 Reviewed-on: https://go-review.googlesource.com/32572 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
b0e91d836a
commit
bfc164c64d
5 changed files with 393 additions and 42 deletions
|
|
@ -57,12 +57,12 @@ func (r *Resolver) lookupHost(ctx context.Context, host string) (addrs []string,
|
|||
// cgo not available (or netgo); fall back to Go's DNS resolver
|
||||
order = hostLookupFilesDNS
|
||||
}
|
||||
return goLookupHostOrder(ctx, host, order)
|
||||
return r.goLookupHostOrder(ctx, host, order)
|
||||
}
|
||||
|
||||
func (r *Resolver) lookupIP(ctx context.Context, host string) (addrs []IPAddr, err error) {
|
||||
if r.PreferGo {
|
||||
return goLookupIP(ctx, host)
|
||||
return r.goLookupIP(ctx, host)
|
||||
}
|
||||
order := systemConf().hostLookupOrder(host)
|
||||
if order == hostLookupCgo {
|
||||
|
|
@ -72,7 +72,7 @@ func (r *Resolver) lookupIP(ctx context.Context, host string) (addrs []IPAddr, e
|
|||
// cgo not available (or netgo); fall back to Go's DNS resolver
|
||||
order = hostLookupFilesDNS
|
||||
}
|
||||
addrs, _, err = goLookupIPCNAMEOrder(ctx, host, order)
|
||||
addrs, _, err = r.goLookupIPCNAMEOrder(ctx, host, order)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -98,17 +98,17 @@ func (r *Resolver) lookupCNAME(ctx context.Context, name string) (string, error)
|
|||
return cname, err
|
||||
}
|
||||
}
|
||||
return goLookupCNAME(ctx, name)
|
||||
return r.goLookupCNAME(ctx, name)
|
||||
}
|
||||
|
||||
func (*Resolver) lookupSRV(ctx context.Context, service, proto, name string) (string, []*SRV, error) {
|
||||
func (r *Resolver) lookupSRV(ctx context.Context, service, proto, name string) (string, []*SRV, error) {
|
||||
var target string
|
||||
if service == "" && proto == "" {
|
||||
target = name
|
||||
} else {
|
||||
target = "_" + service + "._" + proto + "." + name
|
||||
}
|
||||
cname, rrs, err := lookup(ctx, target, dnsTypeSRV)
|
||||
cname, rrs, err := r.lookup(ctx, target, dnsTypeSRV)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
|
|
@ -121,8 +121,8 @@ func (*Resolver) lookupSRV(ctx context.Context, service, proto, name string) (st
|
|||
return cname, srvs, nil
|
||||
}
|
||||
|
||||
func (*Resolver) lookupMX(ctx context.Context, name string) ([]*MX, error) {
|
||||
_, rrs, err := lookup(ctx, name, dnsTypeMX)
|
||||
func (r *Resolver) lookupMX(ctx context.Context, name string) ([]*MX, error) {
|
||||
_, rrs, err := r.lookup(ctx, name, dnsTypeMX)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -135,8 +135,8 @@ func (*Resolver) lookupMX(ctx context.Context, name string) ([]*MX, error) {
|
|||
return mxs, nil
|
||||
}
|
||||
|
||||
func (*Resolver) lookupNS(ctx context.Context, name string) ([]*NS, error) {
|
||||
_, rrs, err := lookup(ctx, name, dnsTypeNS)
|
||||
func (r *Resolver) lookupNS(ctx context.Context, name string) ([]*NS, error) {
|
||||
_, rrs, err := r.lookup(ctx, name, dnsTypeNS)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -148,7 +148,7 @@ func (*Resolver) lookupNS(ctx context.Context, name string) ([]*NS, error) {
|
|||
}
|
||||
|
||||
func (r *Resolver) lookupTXT(ctx context.Context, name string) ([]string, error) {
|
||||
_, rrs, err := lookup(ctx, name, dnsTypeTXT)
|
||||
_, rrs, err := r.lookup(ctx, name, dnsTypeTXT)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -165,5 +165,5 @@ func (r *Resolver) lookupAddr(ctx context.Context, addr string) ([]string, error
|
|||
return ptrs, err
|
||||
}
|
||||
}
|
||||
return goLookupPTR(ctx, addr)
|
||||
return r.goLookupPTR(ctx, addr)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue