Skip to content

net: different lists of addresses are returned depending on order of multiple aliases in /etc/hosts on Mac OS with CGO #24514

@murphyke

Description

@murphyke

TL;DR - net.LookupIP may return a different list of addresses depending on the order of multiple names in an /etc/hosts mapping (e.g. 127.0.0.1 my.local localhost). I don't know if this should be surprising or not; however, I did have a NATS client as well as an official NATS sample client malfunction on me, and I wondered what the problem might be.

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

go version go1.10 darwin/amd64

Does this issue reproduce with the latest release?

On latest.

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

darwin amd64

What did you do?

  • With the following test code:
package main

import (
  "fmt"
  "net"
)

func main() {
  ips, _ := net.LookupIP("localhost")
  fmt.Printf("IPs: %v\n", ips)
}
  • With the following /etc/hosts:
127.0.0.1	localhost my.local       # This line will be varied in the tests below
255.255.255.255	broadcasthost
::1             localhost
  • Run the test program four times while varying 1) the resolver and 2) the order of localhost and my.local in /etc/hosts. (After changing /etc/hosts, run sudo killall -HUP mDNSResponder).
# localhost FIRST (`127.0.0.1 localhost my.local`) and pure GO resolver:
$ GODEBUG=netdns=go+1 go run junk.go
go package net: GODEBUG setting forcing use of Go's resolver
IPs: [::1 127.0.0.1]
# localhost FIRST (`127.0.0.1 localhost my.local`) and CGO resolver:
$ GODEBUG=netdns=1 go run junk.go
go package net: using cgo DNS resolver
IPs: [::1 127.0.0.1]
# localhost SECOND (`127.0.0.1 my.local localhost`) and pure GO resolver:
$ GODEBUG=netdns=go+1 go run junk.go
go package net: GODEBUG setting forcing use of Go's resolver
IPs: [::1 127.0.0.1]
# localhost SECOND (`127.0.0.1 my.local localhost`) and CGO resolver:
$ GODEBUG=netdns=1 go run junk.go
go package net: using cgo DNS resolver
IPs: [127.0.0.1]                # <---- This is the oddball; no IPv6 address

What did you expect to see?

I expected the returned set of IPs to be the same in all four tests.

What did you see instead?

The combination of localhost-last and cgo caused a different set of addresses to be resolved.

Metadata

Metadata

Assignees

No one assigned

    Labels

    NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions