Commit 4c1a4dcd by Gary Benson Committed by Gary Benson

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
parent e883464c
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> 2006-08-24 Gary Benson <gbenson@redhat.com>
* java/net/NetworkInterface.java (getInetAddresses): Bracket IPv6 * java/net/NetworkInterface.java (getInetAddresses): Bracket IPv6
......
...@@ -112,10 +112,7 @@ public final class NetworkInterface ...@@ -112,10 +112,7 @@ public final class NetworkInterface
InetAddress addr = (InetAddress) addresses.nextElement(); InetAddress addr = (InetAddress) addresses.nextElement();
try try
{ {
String hostAddress = addr.getHostAddress(); s.checkConnect(addr.getHostAddress(), 58000);
if (addr instanceof Inet6Address)
hostAddress = "[" + hostAddress + "]";
s.checkConnect(hostAddress, 58000);
tmpInetAddresses.add(addr); tmpInetAddresses.add(addr);
} }
catch (SecurityException e) catch (SecurityException e)
......
...@@ -164,13 +164,57 @@ public final class SocketPermission extends Permission implements Serializable ...@@ -164,13 +164,57 @@ public final class SocketPermission extends Permission implements Serializable
*/ */
public SocketPermission(String hostport, String actions) public SocketPermission(String hostport, String actions)
{ {
super(hostport); super(maybeBracketIPv6Address(hostport));
setHostPort(hostport); setHostPort(getName());
setActions(actions); 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. * Parse the hostport argument to the constructor.
*/ */
private void setHostPort(String hostport) private void setHostPort(String hostport)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment