7199324: Connection ID for IPv6 addresses is not generated accordingly to the specification
RemoteServer.getClientHost is returning a String with an IPv6 literal address and we need to enclose it in [] when building the connection id Reviewed-by: alanb, sjiang
This commit is contained in:
parent
cd5050ea28
commit
7c11aba793
@ -474,6 +474,15 @@ public abstract class RMIServerImpl implements Closeable, RMIServer {
|
||||
String clientHost = "";
|
||||
try {
|
||||
clientHost = RemoteServer.getClientHost();
|
||||
/*
|
||||
* According to the rules specified in the javax.management.remote
|
||||
* package description, a numeric IPv6 address (detected by the
|
||||
* presence of otherwise forbidden ":" character) forming a part
|
||||
* of the connection id must be enclosed in square brackets.
|
||||
*/
|
||||
if (clientHost.contains(":")) {
|
||||
clientHost = "[" + clientHost + "]";
|
||||
}
|
||||
} catch (ServerNotActiveException e) {
|
||||
logger.trace("makeConnectionId", "getClientHost", e);
|
||||
}
|
||||
|
@ -44,6 +44,7 @@ import java.util.Set;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import java.security.Principal;
|
||||
import java.util.regex.Pattern;
|
||||
import javax.security.auth.Subject;
|
||||
|
||||
import javax.management.MBeanServer;
|
||||
@ -239,6 +240,18 @@ public class ConnectionTest {
|
||||
return true;
|
||||
}
|
||||
|
||||
private static final String IPV4_PTN = "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}(\\:[1-9][0-9]{3})?$";
|
||||
|
||||
/**
|
||||
* Checks the connection id for validity.
|
||||
* The {@link
|
||||
* javax.management.remote package description} describes the
|
||||
* conventions for connection IDs.
|
||||
* @param proto Connection protocol
|
||||
* @param clientConnId The connection ID
|
||||
* @return Returns {@code true} if the connection id conforms to the specification; {@code false} otherwise.
|
||||
* @throws Exception
|
||||
*/
|
||||
private static boolean checkConnectionId(String proto, String clientConnId)
|
||||
throws Exception {
|
||||
StringTokenizer tok = new StringTokenizer(clientConnId, " ", true);
|
||||
@ -249,6 +262,17 @@ public class ConnectionTest {
|
||||
"\"");
|
||||
return false;
|
||||
}
|
||||
|
||||
int hostAddrInd = s.indexOf("//");
|
||||
if (hostAddrInd > -1) {
|
||||
s = s.substring(hostAddrInd + 2);
|
||||
if (!Pattern.matches(IPV4_PTN, s)) {
|
||||
if (!s.startsWith("[") || !s.endsWith("]")) {
|
||||
System.out.println("IPv6 address must be enclosed in \"[]\"");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
s = tok.nextToken();
|
||||
if (!s.equals(" ")) {
|
||||
System.out.println("Expected \" \", found \"" + s + "\"");
|
||||
|
Loading…
Reference in New Issue
Block a user