public boolean remoteEquals(Object obj) { if (obj != null && obj instanceof LiveRef) { LiveRef ref = (LiveRef) obj; TCPEndpoint thisEp = ((TCPEndpoint) ep); TCPEndpoint refEp = ((TCPEndpoint) ref.ep); RMIClientSocketFactory thisClientFactory = thisEp.getClientSocketFactory(); RMIClientSocketFactory refClientFactory = refEp.getClientSocketFactory(); /** * Fix for 4254103: LiveRef.remoteEquals should not fail if one of the objects in the * comparison has a null server socket. Comparison should only consider the following * criteria: * * <p>hosts, ports, client socket factories and object IDs. */ if (thisEp.getPort() != refEp.getPort() || !thisEp.getHost().equals(refEp.getHost())) { return false; } if ((thisClientFactory == null) ^ (refClientFactory == null)) { return false; } if ((thisClientFactory != null) && !((thisClientFactory.getClass() == refClientFactory.getClass()) && (thisClientFactory.equals(refClientFactory)))) { return false; } return (id.equals(ref.id)); } else { return false; } }
private static void checkStub(Remote stub, Class<? extends Remote> stubClass) { // Check remote stub is from the expected class. // if (stub.getClass() != stubClass) { if (!Proxy.isProxyClass(stub.getClass())) { throw new SecurityException("Expecting a " + stubClass.getName() + " stub!"); } else { InvocationHandler handler = Proxy.getInvocationHandler(stub); if (handler.getClass() != RemoteObjectInvocationHandler.class) { throw new SecurityException( "Expecting a dynamic proxy instance with a " + RemoteObjectInvocationHandler.class.getName() + " invocation handler!"); } else { stub = (Remote) handler; } } } // Check RemoteRef in stub is from the expected class // "sun.rmi.server.UnicastRef2". // RemoteRef ref = ((RemoteObject) stub).getRef(); if (ref.getClass() != UnicastRef2.class) { throw new SecurityException( "Expecting a " + UnicastRef2.class.getName() + " remote reference in stub!"); } // Check RMIClientSocketFactory in stub is from the expected class // "javax.rmi.ssl.SslRMIClientSocketFactory". // LiveRef liveRef = ((UnicastRef2) ref).getLiveRef(); RMIClientSocketFactory csf = liveRef.getClientSocketFactory(); if (csf == null || csf.getClass() != SslRMIClientSocketFactory.class) { throw new SecurityException( "Expecting a " + SslRMIClientSocketFactory.class.getName() + " RMI client socket factory in stub!"); } }