InetAddress.java (getByAddress): Create Inet4Address objects when passed IPv4-mapped IPv6 addresses.
2006-09-01 Gary Benson <gbenson@redhat.com> * java/net/InetAddress.java (getByAddress): Create Inet4Address objects when passed IPv4-mapped IPv6 addresses. (getByName, getAllByName): Defer to the above to ensure that the correct Inet*Address objects are returned. From-SVN: r116622
This commit is contained in:
parent
7229b95cc0
commit
39aa3581c4
|
@ -1,3 +1,10 @@
|
||||||
|
2006-09-01 Gary Benson <gbenson@redhat.com>
|
||||||
|
|
||||||
|
* java/net/InetAddress.java (getByAddress): Create Inet4Address
|
||||||
|
objects when passed IPv4-mapped IPv6 addresses.
|
||||||
|
(getByName, getAllByName): Defer to the above to ensure that the
|
||||||
|
correct Inet*Address objects are returned.
|
||||||
|
|
||||||
2006-09-01 Gary Benson <gbenson@redhat.com>
|
2006-09-01 Gary Benson <gbenson@redhat.com>
|
||||||
|
|
||||||
* java/net/InetAddress.java (getByName, getAllByName):
|
* java/net/InetAddress.java (getByName, getAllByName):
|
||||||
|
|
|
@ -536,7 +536,20 @@ public class InetAddress implements Serializable
|
||||||
return new Inet4Address(addr, host);
|
return new Inet4Address(addr, host);
|
||||||
|
|
||||||
if (addr.length == 16)
|
if (addr.length == 16)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 12; i++)
|
||||||
|
{
|
||||||
|
if (addr[i] != (i < 10 ? 0 : (byte) 0xFF))
|
||||||
return new Inet6Address(addr, host);
|
return new Inet6Address(addr, host);
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] ip4addr = new byte[4];
|
||||||
|
ip4addr[0] = addr[12];
|
||||||
|
ip4addr[1] = addr[13];
|
||||||
|
ip4addr[2] = addr[14];
|
||||||
|
ip4addr[3] = addr[15];
|
||||||
|
return new Inet4Address(ip4addr, host);
|
||||||
|
}
|
||||||
|
|
||||||
throw new UnknownHostException("IP address has illegal length");
|
throw new UnknownHostException("IP address has illegal length");
|
||||||
}
|
}
|
||||||
|
@ -599,25 +612,7 @@ public class InetAddress implements Serializable
|
||||||
// Assume that the host string is an IP address
|
// Assume that the host string is an IP address
|
||||||
byte[] address = aton(hostname);
|
byte[] address = aton(hostname);
|
||||||
if (address != null)
|
if (address != null)
|
||||||
{
|
return getByAddress(address);
|
||||||
if (address.length == 4)
|
|
||||||
return new Inet4Address (address, null);
|
|
||||||
else if (address.length == 16)
|
|
||||||
{
|
|
||||||
if ((address [10] == 0xFF) && (address [11] == 0xFF))
|
|
||||||
{
|
|
||||||
byte[] ip4addr = new byte [4];
|
|
||||||
ip4addr [0] = address [12];
|
|
||||||
ip4addr [1] = address [13];
|
|
||||||
ip4addr [2] = address [14];
|
|
||||||
ip4addr [3] = address [15];
|
|
||||||
return new Inet4Address (ip4addr, null);
|
|
||||||
}
|
|
||||||
return new Inet6Address (address, null);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
throw new UnknownHostException ("Address has invalid length");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Perform security check before resolving
|
// Perform security check before resolving
|
||||||
SecurityManager s = System.getSecurityManager();
|
SecurityManager s = System.getSecurityManager();
|
||||||
|
@ -658,11 +653,7 @@ public class InetAddress implements Serializable
|
||||||
// Check if hostname is an IP address
|
// Check if hostname is an IP address
|
||||||
byte[] address = aton (hostname);
|
byte[] address = aton (hostname);
|
||||||
if (address != null)
|
if (address != null)
|
||||||
{
|
return new InetAddress[] {getByAddress(address)};
|
||||||
InetAddress[] result = new InetAddress [1];
|
|
||||||
result [0] = new InetAddress (address, null);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Perform security check before resolving
|
// Perform security check before resolving
|
||||||
SecurityManager s = System.getSecurityManager();
|
SecurityManager s = System.getSecurityManager();
|
||||||
|
|
Loading…
Reference in New Issue