From: Mateusz Poliwczak Date: Sun, 7 May 2023 13:51:15 +0000 (+0000) Subject: net: use the lookupOrder for go resolver LookupAddr X-Git-Tag: go1.21rc1~585 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=2e7d864f43b957673f50e648b27c46074ed43404;p=gostls13.git net: use the lookupOrder for go resolver LookupAddr To mach the cgo version behaviour and the LookupHost (go resolver). Change-Id: I7dc3424d508a62e67f20c7810743399c35a9b60c GitHub-Last-Rev: 29924c13a6c0598bf58b7fc3fae74b10bab0f0ee GitHub-Pull-Request: golang/go#60024 Reviewed-on: https://go-review.googlesource.com/c/go/+/493235 TryBot-Result: Gopher Robot Run-TryBot: Ian Lance Taylor Auto-Submit: Ian Lance Taylor Run-TryBot: Ian Lance Taylor Reviewed-by: Cherry Mui Reviewed-by: Ian Lance Taylor --- diff --git a/src/net/dnsclient_unix.go b/src/net/dnsclient_unix.go index 6923f6a4a7..f3c075c83f 100644 --- a/src/net/dnsclient_unix.go +++ b/src/net/dnsclient_unix.go @@ -810,21 +810,33 @@ func (r *Resolver) goLookupCNAME(ctx context.Context, host string, order hostLoo } // goLookupPTR is the native Go implementation of LookupAddr. -// Used only if cgoLookupPTR refuses to handle the request (that is, -// only if cgoLookupPTR is the stub in cgo_stub.go). -// Normally we let cgo use the C library resolver instead of depending -// on our lookup code, so that Go and C get the same answers. -func (r *Resolver) goLookupPTR(ctx context.Context, addr string, conf *dnsConfig) ([]string, error) { - names := lookupStaticAddr(addr) - if len(names) > 0 { - return names, nil +func (r *Resolver) goLookupPTR(ctx context.Context, addr string, order hostLookupOrder, conf *dnsConfig) ([]string, error) { + if order == hostLookupFiles || order == hostLookupFilesDNS { + names := lookupStaticAddr(addr) + if len(names) > 0 { + return names, nil + } + + if order == hostLookupFiles { + return nil, &DNSError{Err: errNoSuchHost.Error(), Name: addr, IsNotFound: true} + } } + arpa, err := reverseaddr(addr) if err != nil { return nil, err } p, server, err := r.lookup(ctx, arpa, dnsmessage.TypePTR, conf) if err != nil { + var dnsErr *DNSError + if errors.As(err, &dnsErr) && dnsErr.IsNotFound { + if order == hostLookupDNSFiles { + names := lookupStaticAddr(addr) + if len(names) > 0 { + return names, nil + } + } + } return nil, err } var ptrs []string @@ -862,5 +874,6 @@ func (r *Resolver) goLookupPTR(ctx context.Context, addr string, conf *dnsConfig ptrs = append(ptrs, ptr.PTR.String()) } + return ptrs, nil } diff --git a/src/net/lookup_plan9.go b/src/net/lookup_plan9.go index 7c423bfff6..5404b996e4 100644 --- a/src/net/lookup_plan9.go +++ b/src/net/lookup_plan9.go @@ -361,8 +361,8 @@ func (r *Resolver) lookupTXT(ctx context.Context, name string) (txt []string, er } func (r *Resolver) lookupAddr(ctx context.Context, addr string) (name []string, err error) { - if _, conf, preferGo := r.preferGoOverPlan9WithOrderAndConf(); preferGo { - return r.goLookupPTR(ctx, addr, conf) + if order, conf, preferGo := r.preferGoOverPlan9WithOrderAndConf(); preferGo { + return r.goLookupPTR(ctx, addr, order, conf) } arpa, err := reverseaddr(addr) if err != nil { diff --git a/src/net/lookup_unix.go b/src/net/lookup_unix.go index 6607b5996a..ad35551f9d 100644 --- a/src/net/lookup_unix.go +++ b/src/net/lookup_unix.go @@ -121,7 +121,7 @@ func (r *Resolver) lookupAddr(ctx context.Context, addr string) ([]string, error if order == hostLookupCgo { return cgoLookupPTR(ctx, addr) } - return r.goLookupPTR(ctx, addr, conf) + return r.goLookupPTR(ctx, addr, order, conf) } // concurrentThreadsLimit returns the number of threads we permit to diff --git a/src/net/lookup_windows.go b/src/net/lookup_windows.go index 9f88d82854..33d5ac5fb4 100644 --- a/src/net/lookup_windows.go +++ b/src/net/lookup_windows.go @@ -374,8 +374,8 @@ func (r *Resolver) lookupTXT(ctx context.Context, name string) ([]string, error) } func (r *Resolver) lookupAddr(ctx context.Context, addr string) ([]string, error) { - if r.preferGoOverWindows() { - return r.goLookupPTR(ctx, addr, nil) + if order, conf := systemConf().hostLookupOrder(r, ""); order != hostLookupCgo { + return r.goLookupPTR(ctx, addr, order, conf) } // TODO(bradfitz): finish ctx plumbing. Nothing currently depends on this.