예제 #1
0
  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;
    }
  }
예제 #2
0
 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!");
   }
 }