Mark, The comparison by String was a reasonable choice when this mechanism was added. What is being proposed here expands the functionality so that logically equivalent IPv6 literals can be used without the need for additional entries.
I did the following testing on my Linux box, Ubuntu 16.04, and it shows, at least on this Linux flavour, that the platform name service operates in a similar way to that of the change that is being proposed here. $ cat /etc/*release* DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04.5 LTS" NAME="Ubuntu" VERSION="16.04.5 LTS (Xenial Xerus)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 16.04.5 LTS" VERSION_ID="16.04" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" VERSION_CODENAME=xenial UBUNTU_CODENAME=xenial $ uname -a Linux chhegar 4.15.0-39-generic #42~16.04.1-Ubuntu SMP Wed Oct 24 17:09:54 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux $ $ $ cat /etc/hosts ::3 xxyyzz ::1 localhost ::1 chhegar # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters $ ~/binaries/jdk-12/bin/jshell | Welcome to JShell -- Version 12 | For an introduction type: /help intro jshell> InetAddress.getByName("::3").getHostName() $1 ==> "xxyyzz" jshell> InetAddress.getByName("0:0:0:0:0:0:0:3").getHostName() $2 ==> "xxyyzz" jshell> InetAddress.getByName("0000:0000:0000:0000:0000:0000:0000:0003").getHostName() $3 ==> "xxyyzz" > On 14 May 2019, at 00:52, mark sheppard <macanao...@hotmail.com> wrote: > > Hi Arthur, Chris, > just a note in passing, as you are well set on the changes, which is all > good -- needs must, as they say. > > The current implementation is an emulation of the gethostbyname and > gethostbyaddr lookup on /etc/hosts. > The reverse lookup issue is also solved by adding an additional entry in the > hosts file > 0:0:0:0:0:0:0:1 ip6-localhost ip6-loopback. Your reverse lookup will pass. > > $ /cygdrive/c/Development/jdk-installs/jdk-12/bin/java > InternalNameServiceWithHostsFileTest > ############################ InetAddress == ip6-localhost/0:0:0:0:0:0:0:1 > retrieved address == [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] equal > to expected address == [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] > testReverseLookup: host addr ::1 : expected host name ip6-localhost > testReverseLookup: host addr 0:0:0:0:0:0:0:1 : expected host name > ip6-localhost > testReverseLookup: host addr 0000:0000:0000:0000:0000:0000:0000:0001 : > expected host name ip6-localhost > > That was the design -- the hosts file would contain whatever set of mapping > are required for a particular context. > So the string comparison was sufficient. > > IF your reverse lookup tests are run against the PlatformFormNameService, > which is the fall through to the native OS calls gethostbyname, getaddrinfo > etc. > then you get the same set of failure afaik. > > on windows using jdk12 test output shown below > so you could say there is some degree of consistent behaviour between the two > services!! > > regards > Mark > > > > msheppard@MARKS-LAPTOP /cygdrive/c/Users/msheppard/eclipse-workspace/JDK-Tests > $ /cygdrive/c/Development/jdk-installs/jdk-12/bin/java > -Djava.net.preferIPv6Addresses=true PlatformNameServiceTest > ############################ InetAddress == localhost/0:0:0:0:0:0:0:1 > retrieved address == [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] equal > to expected address == [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] > testReverseLookup: host addr ::1 : expected host name localhost > Exception in thread "main" java.lang.RuntimeException: reverse lookup of > "::1" is "0:0:0:0:0:0:0:1", should be "localhost" > > at > PlatformNameServiceTest.testReverseLookup(PlatformNameServiceTest.java:64) > at PlatformNameServiceTest.main(PlatformNameServiceTest.java:25) > > msheppard@MARKS-LAPTOP > /cygdrive/c/Users/msheppard/eclipse-workspace/JDK-Tests > $ /cygdrive/c/Development/jdk-installs/jdk-12/bin/java > -Djava.net.preferIPv6Addresses=true PlatformNameServiceTest > ############################ InetAddress == localhost/0:0:0:0:0:0:0:1 > retrieved address == [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] equal > to expected address == [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] > testReverseLookup: host addr 0:0:0:0:0:0:0:1 : expected host name localhost > Exception in thread "main" java.lang.RuntimeException: reverse lookup of > "0:0:0:0:0:0:0:1" is "0:0:0:0:0:0:0:1", should be "localhost" > > at > PlatformNameServiceTest.testReverseLookup(PlatformNameServiceTest.java:64) > at PlatformNameServiceTest.main(PlatformNameServiceTest.java:26) > > msheppard@MARKS-LAPTOP > /cygdrive/c/Users/msheppard/eclipse-workspace/JDK-Tests > $ /cygdrive/c/Development/jdk-installs/jdk-12/bin/java > -Djava.net.preferIPv6Addresses=true PlatformNameServiceTest > ############################ InetAddress == localhost/0:0:0:0:0:0:0:1 > retrieved address == [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] equal > to expected address == [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] > testReverseLookup: host addr 0000:0000:0000:0000:0000:0000:0000:0001 : > expected host name localhost > Exception in thread "main" java.lang.RuntimeException: reverse lookup of > "0000:0000:0000:0000:0000:0000:0000:0001" is "0:0:0:0:0:0:0:1", should be > "localhost" > > at > PlatformNameServiceTest.testReverseLookup(PlatformNameServiceTest.java:64) > at PlatformNameServiceTest.main(PlatformNameServiceTest.java:27) > > > From: net-dev <net-dev-boun...@openjdk.java.net> on behalf of Arthur Eubanks > <aeuba...@google.com> > Sent: Monday 13 May 2019 17:59 > To: Chris Hegarty > Cc: OpenJDK Network Dev list > Subject: Re: [ipv6] RFR: 8223737: HostsFileNameService doesn't handle IPv6 > literal addresses correctly > > > > From: Chris Hegarty <chris.hega...@oracle.com > <mailto:chris.hega...@oracle.com>> > Date: Mon, May 13, 2019 at 9:33 AM > To: Arthur Eubanks, OpenJDK Network Dev list > > Arthur, > > On 11/05/2019 01:17, Arthur Eubanks wrote: > > Bug: https://bugs.openjdk.java.net/browse/JDK-8223737 > > <https://bugs.openjdk.java.net/browse/JDK-8223737> > > Webrev: http://cr.openjdk.java.net/~aeubanks/8223737/webrev.00/index.html > > <http://cr.openjdk.java.net/~aeubanks/8223737/webrev.00/index.html> > > > > HostsFileNameService doesn't handle IPv6 literal addresses correctly. > > For example, ::1 and 0:0:0:0:0:0:0:1 should yield the same output. > > > > Rather than comparing address strings, compare the address byte arrays. > > Comparison of byte arrays is much better. The changes look good. > > Trivially, can I ask you to please include a number of other reverse > lookup's to fill out the test a little. Here's what I came up with: > > testReverseLookup("10.2.3.4", "testHost.testDomain"); > > // ::1 and 0:0:0:0:0:0:0:1 should map to ip6-localhost > testReverseLookup("::1", "ip6-localhost"); > testReverseLookup("0:0:0:0:0:0:0:1", "ip6-localhost"); > > testReverseLookup("0000:0000:0000:0000:0000:0000:0000:0001","ip6-localhost"); > > testReverseLookup("fe00::0", "ip6-localnet"); > testReverseLookup("fe00:0:0:0:0:0:0:0", "ip6-localnet"); > testReverseLookup("fe00:0000:0000:0000:0000:0000:0000:0000", > "ip6-localnet"); > > testReverseLookup("fe80::1", "link-local-host"); > testReverseLookup("fe80:000:0:00:0:000:00:1", "link-local-host"); > testReverseLookup("fe80:0000:0000:0000:0000:0000:0000:0001", > "link-local-host"); > > Thanks, > -Chris. > Added the extra reverse lookups. > > I also noticed that the test is catching UnknownHostException and not > rethrowing it, so I removed the try/catch. > > Updated webrev: > http://cr.openjdk.java.net/~aeubanks/8223737/webrev.01/index.html > <http://cr.openjdk.java.net/~aeubanks/8223737/webrev.01/index.html>