Package com.sun.jini.norm

Source Code of com.sun.jini.norm.ProxyVerifier

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.sun.jini.norm;

import com.sun.jini.landlord.ConstrainableLandlordLease;
import com.sun.jini.landlord.Landlord;
import com.sun.jini.landlord.LandlordProxyVerifier;
import java.io.IOException;
import java.io.InvalidObjectException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.rmi.RemoteException;
import net.jini.core.constraint.MethodConstraints;
import net.jini.core.constraint.RemoteMethodControl;
import net.jini.id.Uuid;
import net.jini.security.TrustVerifier;
import net.jini.security.proxytrust.TrustEquivalence;

/** Defines a trust verifier for the smart proxies of a Norm server. */
final class ProxyVerifier implements Serializable, TrustVerifier {
    private static final long serialVersionUID = 2;

    /**
     * The Norm server proxy.
     *
     * @serial
     */
    private final RemoteMethodControl serverProxy;

    /**
     * The unique ID for the Norm server.
     *
     * @serial
     */
    private final Uuid serverUuid;

    /**
     * Returns a verifier for the smart proxies of a Norm server with the
     * specified proxy and unique ID.
     *
     * @param serverProxy the Norm server proxy
     * @param serverUuid the unique ID for the Norm server
     * @throws UnsupportedOperationException if <code>serverProxy</code> does
     *         not implement both {@link RemoteMethodControl} and {@link
     *         TrustEquivalence}
     */
    ProxyVerifier(NormServer serverProxy, Uuid serverUuid) {
  if (!(serverProxy instanceof RemoteMethodControl)) {
      throw new UnsupportedOperationException(
    "Verifier requires service proxy to implement " +
    "RemoteMethodControl");
  } else if (!(serverProxy instanceof TrustEquivalence)) {
      throw new UnsupportedOperationException(
    "Verifier requires service proxy to implement " +
    "TrustEquivalence");
  }
  this.serverProxy = (RemoteMethodControl) serverProxy;
  this.serverUuid = serverUuid;
    }

    /**
     * @throws NullPointerException {@inheritDoc}
     */
    public boolean isTrustedObject(Object obj, TrustVerifier.Context ctx)
  throws RemoteException
    {
  if (obj == null || ctx == null) {
      throw new NullPointerException("Arguments must not be null");
  } else if (obj instanceof ConstrainableLandlordLease) {
      return new LandlordProxyVerifier(
    (Landlord) serverProxy, serverUuid).isTrustedObject(obj, ctx);
  }
  RemoteMethodControl otherServerProxy;
  if (obj instanceof SetProxy.ConstrainableSetProxy) {
      if (!isTrustedObject(((SetProxy) obj).getRenewalSetLease(), ctx)) {
    return false;
      }
      otherServerProxy =
    (RemoteMethodControl) ((AbstractProxy) obj).server;
  } else if (obj instanceof AdminProxy.ConstrainableAdminProxy ||
       obj instanceof NormProxy.ConstrainableNormProxy)
  {
      if (!serverUuid.equals(((AbstractProxy) obj).uuid)) {
    return false;
      }
      otherServerProxy =
    (RemoteMethodControl) ((AbstractProxy) obj).server;
  } else if (obj instanceof RemoteMethodControl) {
      otherServerProxy = (RemoteMethodControl) obj;
  } else {
      return false;
  }
  MethodConstraints mc = otherServerProxy.getConstraints();
  TrustEquivalence trusted =
      (TrustEquivalence) serverProxy.setConstraints(mc);
  return trusted.checkTrustEquivalence(otherServerProxy);
    }

    /** Require server proxy to implement TrustEquivalence. */
    private void readObject(ObjectInputStream in)
  throws IOException, ClassNotFoundException
    {
  in.defaultReadObject();
  if (!(serverProxy instanceof TrustEquivalence)) {
      throw new InvalidObjectException(
    "serverProxy must implement TrustEquivalence");
  }
    }
}
TOP

Related Classes of com.sun.jini.norm.ProxyVerifier

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.