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>

Reply via email to