T
trawick
A simple test program can look up hostnames defined in system host file
as long as it is run with a tty. When run without a tty, it can't find
the hostnames. This issue leads to the failure of an application when
run remotely.
Various properties tweaked; seen on AIX and Linux/PPC too with
IBM-supplied java 1.5; recreated below with current Sun java 1.5 for
Solaris; an application which has the same issue with java 1.5 ran for
ages with java 1.4.2 on many platforms with no such issue
Has anybody seen anything similar?
$ cat /etc/inet/ipnodes
#
# Internet host table
#
#::1 localhost
::1 ipv6host
127.0.0.1 ipv4host
$ cat useinetaddr.sh
#!/bin/sh
PATH=$HOME/jre1.5.0_09/bin:$PATH
export PATH
java -version
java UseInetAddr ipv4host
java UseInetAddr ipv6host
$ cat UseInetAddr.java
import java.net.InetAddress;
public class UseInetAddr {
public static void main(String[] args) throws Exception {
InetAddress inetAddr;
System.out.println("looking up " + args[0] + "...");
inetAddr = InetAddress.getByName(args[0]);
System.out.println("okay");
}
}
Run it directly from remote terminal... no problems
$ ./useinetaddr.sh
java version "1.5.0_09"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_09-b03)
Java HotSpot(TM) Client VM (build 1.5.0_09-b03, mixed mode, sharing)
looking up ipv4host...
okay
looking up ipv6host...
okay
Run it via ssh to self... fails to find the definition
$ ssh 127.0.0.1 ./useinetaddr.sh
java version "1.5.0_09"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_09-b03)
Java HotSpot(TM) Client VM (build 1.5.0_09-b03, mixed mode, sharing)
looking up ipv4host...
Exception in thread "main" java.net.UnknownHostException: ipv4host:
ipv4host
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName(Unknown Source)
at java.net.InetAddress.getByName(Unknown Source)
at UseInetAddr.main(UseInetAddr.java:9)
looking up ipv6host...
Exception in thread "main" java.net.UnknownHostException: ipv6host:
ipv6host
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName(Unknown Source)
at java.net.InetAddress.getByName(Unknown Source)
at UseInetAddr.main(UseInetAddr.java:9)
Run it via ssh to self, but tell ssh to allocate a pseudoterminal using
ssh -t option... works...
$ ssh -t 127.0.0.1 ./useinetaddr.sh
java version "1.5.0_09"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_09-b03)
Java HotSpot(TM) Client VM (build 1.5.0_09-b03, mixed mode, sharing)
looking up ipv4host...
okay
looking up ipv6host...
okay
Connection to 127.0.0.1 closed.
as long as it is run with a tty. When run without a tty, it can't find
the hostnames. This issue leads to the failure of an application when
run remotely.
Various properties tweaked; seen on AIX and Linux/PPC too with
IBM-supplied java 1.5; recreated below with current Sun java 1.5 for
Solaris; an application which has the same issue with java 1.5 ran for
ages with java 1.4.2 on many platforms with no such issue
Has anybody seen anything similar?
From a Solaris 9 run with freshly downloaded/untweaked jre 1.5:
$ cat /etc/inet/ipnodes
#
# Internet host table
#
#::1 localhost
::1 ipv6host
127.0.0.1 ipv4host
$ cat useinetaddr.sh
#!/bin/sh
PATH=$HOME/jre1.5.0_09/bin:$PATH
export PATH
java -version
java UseInetAddr ipv4host
java UseInetAddr ipv6host
$ cat UseInetAddr.java
import java.net.InetAddress;
public class UseInetAddr {
public static void main(String[] args) throws Exception {
InetAddress inetAddr;
System.out.println("looking up " + args[0] + "...");
inetAddr = InetAddress.getByName(args[0]);
System.out.println("okay");
}
}
Run it directly from remote terminal... no problems
$ ./useinetaddr.sh
java version "1.5.0_09"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_09-b03)
Java HotSpot(TM) Client VM (build 1.5.0_09-b03, mixed mode, sharing)
looking up ipv4host...
okay
looking up ipv6host...
okay
Run it via ssh to self... fails to find the definition
$ ssh 127.0.0.1 ./useinetaddr.sh
java version "1.5.0_09"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_09-b03)
Java HotSpot(TM) Client VM (build 1.5.0_09-b03, mixed mode, sharing)
looking up ipv4host...
Exception in thread "main" java.net.UnknownHostException: ipv4host:
ipv4host
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName(Unknown Source)
at java.net.InetAddress.getByName(Unknown Source)
at UseInetAddr.main(UseInetAddr.java:9)
looking up ipv6host...
Exception in thread "main" java.net.UnknownHostException: ipv6host:
ipv6host
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName(Unknown Source)
at java.net.InetAddress.getByName(Unknown Source)
at UseInetAddr.main(UseInetAddr.java:9)
Run it via ssh to self, but tell ssh to allocate a pseudoterminal using
ssh -t option... works...
$ ssh -t 127.0.0.1 ./useinetaddr.sh
java version "1.5.0_09"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_09-b03)
Java HotSpot(TM) Client VM (build 1.5.0_09-b03, mixed mode, sharing)
looking up ipv4host...
okay
looking up ipv6host...
okay
Connection to 127.0.0.1 closed.