remm        01/06/19 10:37:25

  Modified:    catalina/src/share/org/apache/catalina/loader
                        WebappClassLoader.java
  Log:
  - Make the call to load resource as a privileged action (file access).
  - Fix the seal checking algorithm.
  
  Revision  Changes    Path
  1.2       +31 -20    
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java
  
  Index: WebappClassLoader.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- WebappClassLoader.java    2001/06/19 02:12:39     1.1
  +++ WebappClassLoader.java    2001/06/19 17:37:23     1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v
 1.1 2001/06/19 02:12:39 remm Exp $
  - * $Revision: 1.1 $
  - * $Date: 2001/06/19 02:12:39 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v
 1.2 2001/06/19 17:37:23 remm Exp $
  + * $Revision: 1.2 $
  + * $Date: 2001/06/19 17:37:23 $
    *
    * ====================================================================
    *
  @@ -78,7 +78,6 @@
   import java.net.URLStreamHandler;
   import java.security.AccessControlException;
   import java.security.PrivilegedAction;
  -import java.security.PrivilegedExceptionAction;
   import java.security.AccessController;
   import java.security.AccessControlContext;
   import java.security.CodeSource;
  @@ -118,7 +117,7 @@
    *
    * @author Remy Maucherat
    * @author Craig R. McClanahan
  - * @version $Revision: 1.1 $ $Date: 2001/06/19 02:12:39 $
  + * @version $Revision: 1.2 $ $Date: 2001/06/19 17:37:23 $
    */
   public class WebappClassLoader
       extends URLClassLoader
  @@ -139,6 +138,7 @@
        this.parent = getParent();
        system = getSystemClassLoader();
        securityManager = System.getSecurityManager();
  +        accessController = AccessController.getContext();
   
       }
   
  @@ -154,6 +154,7 @@
        this.parent = getParent();
        system = getSystemClassLoader();
        securityManager = System.getSecurityManager();
  +        accessController = AccessController.getContext();
   
       }
   
  @@ -310,6 +311,12 @@
       private ClassLoader system = null;
   
   
  +    /**
  +     * Access controller.
  +     */
  +    private AccessControlContext accessController;
  +
  +
       // ------------------------------------------------------------- Properties
   
   
  @@ -1259,8 +1266,21 @@
   
           String tempPath = name.replace('.', '/');
           String classPath = tempPath + ".class";
  +
  +        ResourceEntry entry = null;
   
  -        ResourceEntry entry = findResourceInternal(name, classPath);
  +        if (securityManager != null) {
  +            final String fName = name;
  +            final String fClassPath = classPath;
  +            entry = (ResourceEntry) AccessController.doPrivileged
  +                (new PrivilegedAction() {
  +                        public Object run() {
  +                            return findResourceInternal(fName, fClassPath);
  +                        }
  +                    }, accessController);
  +        } else {
  +            entry = findResourceInternal(name, classPath);
  +        }
   
           if (entry == null)
               throw new ClassNotFoundException(name);
  @@ -1305,23 +1325,14 @@
                   if (pkg.isSealed()) {
                       sealCheck = pkg.isSealed(entry.source);
                   } else {
  -                    if (entry.manifest != null)
  -                        sealCheck = isPackageSealed
  -                            (packageName, entry.manifest);
  +                    sealCheck = (entry.manifest == null) 
  +                        || !isPackageSealed(packageName, entry.manifest);
                   }
                if (!sealCheck)
  -                 throw new SecurityException("sealing violation");
  +                 throw new SecurityException
  +                        ("Sealing violation loading " + name + " : Package "
  +                         + packageName + " is sealed.");
               }
  -
  -/*
  -            clazz = (Class)
  -             AccessController.doPrivileged(new PrivilegedExceptionAction() {
  -                        public Object run() throws ClassNotFoundException {
  -                            return defineClass(name, entry.binaryContent, 0, 
  -                                    entry.binaryContent.length, codeSource);
  -                        }
  -                    }, accessController);
  -*/
   
           }
   
  
  
  

Reply via email to