2006-08-29 Gary Benson <gbenson@redhat.com>

* java/net/SocketPermission.java
	(maybeBracketIPv6Address): New method.
	(<init>): Pass the hostport argument through the above.

	* java/net/NetworkInterface.java (getInetAddresses):
	Revert the previous change.

From-SVN: r116557
This commit is contained in:
Gary Benson 2006-08-29 08:15:29 +00:00 committed by Gary Benson
parent e883464cc4
commit 4c1a4dcda1
3 changed files with 56 additions and 6 deletions

View File

@ -1,3 +1,12 @@
2006-08-29 Gary Benson <gbenson@redhat.com>
* java/net/SocketPermission.java
(maybeBracketIPv6Address): New method.
(<init>): Pass the hostport argument through the above.
* java/net/NetworkInterface.java (getInetAddresses):
Revert the previous change.
2006-08-24 Gary Benson <gbenson@redhat.com>
* java/net/NetworkInterface.java (getInetAddresses): Bracket IPv6

View File

@ -112,10 +112,7 @@ public final class NetworkInterface
InetAddress addr = (InetAddress) addresses.nextElement();
try
{
String hostAddress = addr.getHostAddress();
if (addr instanceof Inet6Address)
hostAddress = "[" + hostAddress + "]";
s.checkConnect(hostAddress, 58000);
s.checkConnect(addr.getHostAddress(), 58000);
tmpInetAddresses.add(addr);
}
catch (SecurityException e)

View File

@ -164,12 +164,56 @@ public final class SocketPermission extends Permission implements Serializable
*/
public SocketPermission(String hostport, String actions)
{
super(hostport);
super(maybeBracketIPv6Address(hostport));
setHostPort(hostport);
setHostPort(getName());
setActions(actions);
}
/**
* IPv6 addresses in the hostport must either be enclosed by
* "[" and "]" or be specified in the full uncompressed form.
* In the latter case proprietary JVMs will quote the address
* with "[" and "]", so we do to.
*/
private static String maybeBracketIPv6Address(String hostport)
{
if (hostport.length() == 0 || hostport.charAt(0) == '[')
return hostport;
int colons = 0, last_colon = 0;
for (int i = 0; i < hostport.length(); i++)
{
if (hostport.charAt(i) == ':')
{
if (i - last_colon == 1)
throw new IllegalArgumentException("Ambiguous hostport part");
colons++;
last_colon = i;
}
}
switch (colons)
{
case 0:
case 1:
// a hostname or IPv4 address
return hostport;
case 7:
// an IPv6 address with no ports
return "[" + hostport + "]";
case 8:
// an IPv6 address with ports
return "[" + hostport.substring(0, last_colon) + "]"
+ hostport.substring(last_colon);
default:
throw new IllegalArgumentException("Ambiguous hostport part");
}
}
/**
* Parse the hostport argument to the constructor.
*/