summaryrefslogtreecommitdiffstats
path: root/vespajlib
diff options
context:
space:
mode:
authorArne Juul <arnej@yahoo-inc.com>2016-06-18 00:05:28 +0200
committerArne Juul <arnej@yahoo-inc.com>2016-06-18 00:05:28 +0200
commitbe6144b2bfbce59e07793f7a30cbcf53e90dc5c3 (patch)
tree4e17fedbdd85cfcfb298217eaa0b278350281cc1 /vespajlib
parent4492247bff82d0a4b71cd6e40daa8561f21895b4 (diff)
check that getCanonicalHostName is sane
* when considering the various addresses for a host, prefer one that resolves to a name if possible.
Diffstat (limited to 'vespajlib')
-rw-r--r--vespajlib/src/main/java/com/yahoo/net/LinuxInetAddress.java11
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 =