Skip to content

Conversation

@ImanolBarba
Copy link

The UNIX cgo resolver code didn't set IsNotFound on the DNSError returned when the getnameinfo call used for reverse resolution in cgoNameinfoPTR returns EAI_NONAME. This diff sets IsNotFound to true in that case.

EAI_NONAME is set by getnameinfo when the address resolution fails, and is defined in Solaris, OpenBSD, AIX, Darwin, Linux, NetBSD and DragonflyBSD according to online manpages I've checked. I have only tested on Darwin though.

$ ./all.bash
[...]
ALL TESTS PASSED

Then, I made a small go program to verify the behaviour:

package main

import (
  "fmt"
  "net"
)

func main() {
  names, err := net.LookupAddr("::2")
  fmt.Printf("names: %+v\n", names)

  if dnsErr, ok := err.(*net.DNSError); ok {
    fmt.Printf("error: %+v\n", *dnsErr)
  }
}

Before changes:

./dnstest
names: []
error: {Err:nodename nor servname provided, or not known Name:::2 Server: IsTimeout:false IsTemporary:false IsNotFound:false}

After changes:

$ ./dnstest
names: []
error: {Err:no such host Name:::2 Server: IsTimeout:false IsTemporary:false IsNotFound:true}

The UNIX cgo resolver code didn't set IsNotFound on the DNSError returned when the `getnameinfo` call used for reverse resolution in `cgoNameinfoPTR` returns `EAI_NONAME`. This diff sets IsNotFound to true in that case.

EAI_NONAME is set by `getnameinfo` when the address resolution fails, and is defined in Solaris, OpenBSD, AIX, Darwin, Linux, NetBSD and DragonflyBSD according to online manpages. I have only tested on Darwin though.

```
$ ./all.bash
[...]
ALL TESTS PASSED
```

Then, I made a small go program to verify the behaviour:
```
package main

import (
  "fmt"
  "net"
)

func main() {
  names, err := net.LookupAddr("::2")
  fmt.Printf("names: %+v\n", names)

  if dnsErr, ok := err.(*net.DNSError); ok {
    fmt.Printf("error: %+v\n", *dnsErr)
  }
}
```

Before changes:
```
./dnstest
names: []
error: {Err:nodename nor servname provided, or not known Name:::2 Server: IsTimeout:false IsTemporary:false IsNotFound:false}
```

After changes:
```
$ ./dnstest
names: []
error: {Err:no such host Name:::2 Server: IsTimeout:false IsTemporary:false IsNotFound:true}
```
@google-cla google-cla bot added the cla: yes Used by googlebot to label PRs as having a valid CLA. The text of this label should not change. label May 5, 2021
@gopherbot
Copy link
Contributor

This PR (HEAD: f2de836) has been imported to Gerrit for code review.

Please visit https://go-review.googlesource.com/c/go/+/317110 to see it.

Tip: You can toggle comments from me using the comments slash command (e.g. /comments off)
See the Wiki page for more info

@gopherbot
Copy link
Contributor

Message from Go Bot:

Patch Set 1:

Congratulations on opening your first change. Thank you for your contribution!

Next steps:
A maintainer will review your change and provide feedback. See
https://golang.org/doc/contribute.html#review for more info and tips to get your
patch through code review.

Most changes in the Go project go through a few rounds of revision. This can be
surprising to people new to the project. The careful, iterative review process
is our way of helping mentor contributors and ensuring that their contributions
have a lasting impact.

During May-July and Nov-Jan the Go project is in a code freeze, during which
little code gets reviewed or merged. If a reviewer responds with a comment like
R=go1.11 or adds a tag like "wait-release", it means that this CL will be
reviewed as part of the next development cycle. See https://golang.org/s/release
for more details.


Please don’t reply on this GitHub thread. Visit golang.org/cl/317110.
After addressing review feedback, remember to publish your drafts!

@gopherbot
Copy link
Contributor

Message from Ian Lance Taylor:

Patch Set 1:

(2 comments)


Please don’t reply on this GitHub thread. Visit golang.org/cl/317110.
After addressing review feedback, remember to publish your drafts!

@mateusz834
Copy link
Member

This is already fixed #57548.

@mateusz834 mateusz834 closed this Nov 7, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla: yes Used by googlebot to label PRs as having a valid CLA. The text of this label should not change.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants