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:
parent
e883464cc4
commit
4c1a4dcda1
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user