Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

net: tryOneName logs the wrong server on error when the Dial function is overridden #54242

Closed
th0m opened this issue Aug 3, 2022 · 1 comment

Comments

@th0m
Copy link

th0m commented Aug 3, 2022

What version of Go are you using (go version)?

$ go version
go version go1.18.2 linux/amd64

Does this issue reproduce with the latest release?

Yes

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/vagrant/.cache/go-build"
GOENV="/home/vagrant/.config/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/vagrant/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/vagrant/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.18.2"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
GOWORK=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build1847147377=/tmp/go-build -gno-record-gcc-switches"

What did you do?

Create a Resolver, override its Dial function to set a fixed resolver ip to be used: 1.2.3.4:53.
Use it to resolve cloudflare.com.
Notice that the error message has the wrong resolver ip after lookup cloudflare.com on

Minimal reproducer: https://go.dev/play/p/4Se0BI1xwJx

What did you expect to see?

lookup cloudflare.com on 1.2.3.4:53: dial udp 1.2.3.4:53: connect: no route to host

What did you see instead?

lookup cloudflare.com on 169.254.169.254:53: dial udp 1.2.3.4:53: connect: no route to host

I have tracked the issue down to tryOneName not being aware Dial has been overridden.
Therefore, in its error message it is using the server it got from the lookup function that gets a list of servers from resolv.conf .

			p, h, err := r.exchange(ctx, server, q, cfg.timeout, cfg.useTCP)
			if err != nil {
				dnsErr := &DNSError{
					Err:    err.Error(),
					Name:   name,
					Server: server,
				}
@seankhliao
Copy link
Member

Duplicate of #43703

@seankhliao seankhliao marked this as a duplicate of #43703 Aug 3, 2022
@seankhliao seankhliao closed this as not planned Won't fix, can't repro, duplicate, stale Aug 3, 2022
@golang golang locked and limited conversation to collaborators Aug 3, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants