lncfg: parse network for TCP addresses to listen on correct interface

TCP addresses resolved through net.ResolveTCPAddr give a default network
of "tcp", so we'll map back the correct network for the given address.
This ensures that we can listen on the correct interface (IPv4 vs IPv6).
This commit is contained in:
Wilmer Paulino 2019-04-12 18:45:11 -07:00
parent 88aafe5c91
commit b43894724a
No known key found for this signature in database
GPG Key ID: 6DF57B9F9514972F

@ -70,15 +70,33 @@ func EnforceSafeAuthentication(addrs []net.Addr, macaroonsActive bool) error {
return nil return nil
} }
// parseNetwork parses the network type of the given address.
func parseNetwork(addr net.Addr) string {
switch addr := addr.(type) {
// TCP addresses resolved through net.ResolveTCPAddr give a default
// network of "tcp", so we'll map back the correct network for the given
// address. This ensures that we can listen on the correct interface
// (IPv4 vs IPv6).
case *net.TCPAddr:
if addr.IP.To4() != nil {
return "tcp4"
}
return "tcp6"
default:
return addr.Network()
}
}
// ListenOnAddress creates a listener that listens on the given address. // ListenOnAddress creates a listener that listens on the given address.
func ListenOnAddress(addr net.Addr) (net.Listener, error) { func ListenOnAddress(addr net.Addr) (net.Listener, error) {
return net.Listen(addr.Network(), addr.String()) return net.Listen(parseNetwork(addr), addr.String())
} }
// TLSListenOnAddress creates a TLS listener that listens on the given address. // TLSListenOnAddress creates a TLS listener that listens on the given address.
func TLSListenOnAddress(addr net.Addr, func TLSListenOnAddress(addr net.Addr,
config *tls.Config) (net.Listener, error) { config *tls.Config) (net.Listener, error) {
return tls.Listen(addr.Network(), addr.String(), config) return tls.Listen(parseNetwork(addr), addr.String(), config)
} }
// IsLoopback returns true if an address describes a loopback interface. // IsLoopback returns true if an address describes a loopback interface.