diff options
author | Arne Juul <arnej@yahoo-inc.com> | 2016-06-18 00:05:28 +0200 |
---|---|---|
committer | Arne Juul <arnej@yahoo-inc.com> | 2016-06-18 00:05:28 +0200 |
commit | be6144b2bfbce59e07793f7a30cbcf53e90dc5c3 (patch) | |
tree | 4e17fedbdd85cfcfb298217eaa0b278350281cc1 | |
parent | 4492247bff82d0a4b71cd6e40daa8561f21895b4 (diff) |
check that getCanonicalHostName is sane
* when considering the various addresses for a host,
prefer one that resolves to a name if possible.
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/net/LinuxInetAddress.java | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/net/LinuxInetAddress.java b/vespajlib/src/main/java/com/yahoo/net/LinuxInetAddress.java index 540f8300f95..fdf9e0946df 100644 --- a/vespajlib/src/main/java/com/yahoo/net/LinuxInetAddress.java +++ b/vespajlib/src/main/java/com/yahoo/net/LinuxInetAddress.java @@ -22,6 +22,13 @@ public class LinuxInetAddress { private static Logger log = Logger.getLogger(LinuxInetAddress.class.getName()); + private static boolean isGood(InetAddress addr) { + if (addr.isLoopbackAddress()) return false; + String asAddr = addr.getHostAddress(); + String asName = addr.getCanonicalHostName(); + return ! asAddr.equals(asName); + } + /** * Returns an InetAddress representing the address of the localhost. * A non-loopback address is preferred if available. @@ -38,10 +45,10 @@ public class LinuxInetAddress { return InetAddress.getLoopbackAddress(); } - if ( ! localAddress.isLoopbackAddress()) return localAddress; + if (isGood(localAddress)) return localAddress; List<InetAddress> nonLoopbackAddresses = - getAllLocalFromNetwork().stream().filter(a -> ! a.isLoopbackAddress()).collect(Collectors.toList()); + getAllLocalFromNetwork().stream().filter(a -> isGood(a)).collect(Collectors.toList()); if (nonLoopbackAddresses.isEmpty()) return localAddress; List<InetAddress> ipV4NonLoopbackAddresses = |