提交 4e993cf0 编写于 作者: J jbachorik

7199324: Connection ID for IPv6 addresses is not generated accordingly to the specification

Summary: 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
上级 fce7e5a2
...@@ -474,6 +474,15 @@ public abstract class RMIServerImpl implements Closeable, RMIServer { ...@@ -474,6 +474,15 @@ public abstract class RMIServerImpl implements Closeable, RMIServer {
String clientHost = ""; String clientHost = "";
try { try {
clientHost = RemoteServer.getClientHost(); 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) { } catch (ServerNotActiveException e) {
logger.trace("makeConnectionId", "getClientHost", e); logger.trace("makeConnectionId", "getClientHost", e);
} }
......
...@@ -44,6 +44,7 @@ import java.util.Set; ...@@ -44,6 +44,7 @@ import java.util.Set;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import java.security.Principal; import java.security.Principal;
import java.util.regex.Pattern;
import javax.security.auth.Subject; import javax.security.auth.Subject;
import javax.management.MBeanServer; import javax.management.MBeanServer;
...@@ -239,6 +240,18 @@ public class ConnectionTest { ...@@ -239,6 +240,18 @@ public class ConnectionTest {
return true; 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) private static boolean checkConnectionId(String proto, String clientConnId)
throws Exception { throws Exception {
StringTokenizer tok = new StringTokenizer(clientConnId, " ", true); StringTokenizer tok = new StringTokenizer(clientConnId, " ", true);
...@@ -249,6 +262,17 @@ public class ConnectionTest { ...@@ -249,6 +262,17 @@ public class ConnectionTest {
"\""); "\"");
return false; 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(); s = tok.nextToken();
if (!s.equals(" ")) { if (!s.equals(" ")) {
System.out.println("Expected \" \", found \"" + s + "\""); System.out.println("Expected \" \", found \"" + s + "\"");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册