/* * 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 net.jini.security.policy; import java.security.Permission; import java.security.Principal; /** * Interface implemented by security policy providers that may support dynamic * granting of permissions at run-time. The <code>grant</code> methods of the * {@link net.jini.security.Security} class delegate to the * methods declared by this interface when this interface is implemented by the * installed security policy provider. Permissions are granted on the * granularity of class loader; granting a permission requires (of the calling * context) {@link net.jini.security.GrantPermission} for that * permission. * * @author Sun Microsystems, Inc. * * @since 2.0 */ public interface DynamicPolicy { /** * Returns <code>true</code> if this policy provider supports dynamic * permission grants; returns <code>false</code> otherwise. Note that this * method may return different values for a given * <code>DynamicPolicy</code> instance, depending on context. For example, * a policy provider that delegates to different underlying policy * implementations depending on thread state would return <code>true</code> * from this method when the current delegate supports dynamic permission * grants, but return <code>false</code> when another delegate lacking such * support is in effect. * * @return <code>true</code> if policy supports dynamic permission grants * under current context, <code>false</code> otherwise */ boolean grantSupported(); /** * If this security policy provider supports dynamic permission grants, * grants the specified permissions to all protection domains (including * ones not yet created) that are associated with the class loader of the * given class and possess at least the given set of principals. If the * given class is <code>null</code>, then the grant applies across all * protection domains that possess at least the specified principals. If * the list of principals is <code>null</code> or empty, then principals * are effectively ignored in determining the protection domains to which * the grant applies. If this policy provider does not support dynamic * permission grants, then no permissions are granted and an * <code>UnsupportedOperationException</code> is thrown. * <p> * The given class, if non-<code>null</code>, must belong to either the * system domain or a protection domain whose associated class loader is * non-<code>null</code>. If the class does not belong to such a * protection domain, then no permissions are granted and an * <code>UnsupportedOperationException</code> is thrown. * <p> * If a security manager is installed, its <code>checkPermission</code> * method is called with a <code>GrantPermission</code> containing the * permissions to grant; if the permission check fails, then no permissions * are granted and the resulting <code>SecurityException</code> is thrown. * The principals and permissions arrays passed in are neither modified nor * retained; subsequent changes to the arrays have no effect on the grant * operation. * * @param cl class to grant permissions to the class loader of, or * <code>null</code> if granting across all class loaders * @param principals if non-<code>null</code>, minimum set of principals * to which grants apply * @param permissions if non-<code>null</code>, permissions to grant * @throws UnsupportedOperationException if policy does not support * dynamic grants, or if <code>cl</code> is non-<code>null</code> * and belongs to a protection domain with a <code>null</code> * class loader other than the system domain * @throws SecurityException if a security manager is installed and the * calling context does not have sufficient permissions to grant * the given permissions * @throws NullPointerException if any element of the principals or * permissions arrays is <code>null</code> */ void grant(Class cl, Principal[] principals, Permission[] permissions); /** * If this security policy provider supports dynamic permission grants, * returns a new array containing the cumulative set of permissions * dynamically granted to protection domains (including ones not yet * created) that are associated with the class loader of the given class * and possess at least the given set of principals. If the given class is * <code>null</code>, then this method returns the cumulative set of * permissions dynamically granted across all protection domains that * possess at least the specified principals (i.e., through calls to the * grant method where the specified class was <code>null</code>). If the * list of principals is <code>null</code> or empty, then the permissions * returned reflect only grants not qualified by principals (i.e., those * performed through calls to the grant method where the specified * principals array was <code>null</code> or empty). If this policy * provider does not support dynamic permission grants, then an * <code>UnsupportedOperationException</code> is thrown. * <p> * The given class, if non-<code>null</code>, must belong to either the * system domain or a protection domain whose associated class loader is * non-<code>null</code>. If the class does not belong to such a * protection domain, then an <code>UnsupportedOperationException</code> is * thrown. * * @param cl class to query the permissions dynamically granted to the * class loader of, or <code>null</code> if querying permissions * granted across all class loaders * @param principals if non-<code>null</code>, principals to query * dynamic grants for * @return new array containing the permissions dynamically granted to the * indicated class loader (if any) and principals * @throws UnsupportedOperationException if policy does not support * dynamic grants, or if <code>cl</code> is non-<code>null</code> * and belongs to a protection domain with a <code>null</code> * class loader other than the system domain * @throws NullPointerException if any element of the principals array is * <code>null</code> */ Permission[] getGrants(Class cl, Principal[] principals); }