maguro      2005/02/26 23:38:41

  Modified:    modules/core/src/java/org/openejb/security
                        EJBSecurityInterceptor.java PermissionManager.java
  Log:

  The permission matrix is sparse.  The interceptor and manager should be able 
to deal with that fact.
  
  Revision  Changes    Path
  1.6       +2 -2      
openejb/modules/core/src/java/org/openejb/security/EJBSecurityInterceptor.java
  
  Index: EJBSecurityInterceptor.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/security/EJBSecurityInterceptor.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- EJBSecurityInterceptor.java       13 Jan 2005 17:00:24 -0000      1.5
  +++ EJBSecurityInterceptor.java       27 Feb 2005 04:38:41 -0000      1.6
  @@ -89,7 +89,7 @@
               AccessControlContext accessContext = 
ContextManager.getCurrentContext();
               if (accessContext != null) {
                   Permission permission = 
permissionManager.getPermission(ejbInvocation.getType(), 
ejbInvocation.getMethodIndex());
  -                accessContext.checkPermission(permission);
  +                if (permission != null) 
accessContext.checkPermission(permission);
               }
   
               ContextManager.setCurrentCaller(ContextManager.getNextCaller());
  
  
  
  1.4       +20 -3     
openejb/modules/core/src/java/org/openejb/security/PermissionManager.java
  
  Index: PermissionManager.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/security/PermissionManager.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- PermissionManager.java    3 Apr 2004 22:20:11 -0000       1.3
  +++ PermissionManager.java    27 Feb 2005 04:38:41 -0000      1.4
  @@ -47,14 +47,19 @@
    */
   package org.openejb.security;
   
  -import java.security.Permission;
   import java.io.Serializable;
  +import java.security.Permission;
   import javax.security.jacc.EJBMethodPermission;
   
   import org.openejb.EJBInterfaceType;
   import org.openejb.dispatch.InterfaceMethodSignature;
   
  +
   /**
  + * Create a sparse matrix of pre-created EJB permissions.
  + * <p/>
  + * TODO: This matrix isn't sparse enough for the likes of certain 
cheeseheads.
  + *
    * @version $Revision$ $Date$
    */
   public final class PermissionManager implements Serializable {
  @@ -68,8 +73,20 @@
           permissions[EJBInterfaceType.WEB_SERVICE.getOrdinal()] = 
mapPermissions(ejbName, "ServiceEndpoint", signatures);
       }
   
  +    /**
  +     * Return the permission for that invocation type and operation index.
  +     * Note that the permissions matrix is sparse and it may return null.
  +     *
  +     * @param invocationType the invocation type
  +     * @param operationIndex the operation index
  +     * @return
  +     */
       public Permission getPermission(EJBInterfaceType invocationType, int 
operationIndex) {
  -        return permissions[invocationType.getOrdinal()][operationIndex];
  +        Permission[] pArray = permissions[invocationType.getOrdinal()];
  +
  +        if (pArray == null) return null;
  +
  +        return pArray[operationIndex];
       }
   
       private static Permission[] mapPermissions(String ejbName, String 
intfName, InterfaceMethodSignature[] signatures) {
  
  
  

Reply via email to