remm        01/10/31 15:17:37

  Modified:    catalina/src/share/org/apache/catalina/loader
                        WebappClassLoader.java WebappLoader.java
  Log:
  - If webapp is privileged, give it AllPermissions. This allows the relocated manager
    and admin webapp to work under a security manager (Jasper was causing
    some trouble).
  - Rename setPermissions methods to addPermission (that seems closer to what
    they actually do).
  - Most of the classloader setters now will do an explicit check for AllPermission.
  
  Revision  Changes    Path
  1.24      +52 -9     
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.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- WebappClassLoader.java    2001/10/31 19:00:43     1.23
  +++ WebappClassLoader.java    2001/10/31 23:17:37     1.24
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v
 1.23 2001/10/31 19:00:43 remm Exp $
  - * $Revision: 1.23 $
  - * $Date: 2001/10/31 19:00:43 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v
 1.24 2001/10/31 23:17:37 remm Exp $
  + * $Revision: 1.24 $
  + * $Date: 2001/10/31 23:17:37 $
    *
    * ====================================================================
    *
  @@ -124,7 +124,7 @@
    *
    * @author Remy Maucherat
    * @author Craig R. McClanahan
  - * @version $Revision: 1.23 $ $Date: 2001/10/31 19:00:43 $
  + * @version $Revision: 1.24 $ $Date: 2001/10/31 23:17:37 $
    */
   public class WebappClassLoader
       extends URLClassLoader
  @@ -347,6 +347,12 @@
       protected boolean hasExternalRepositories = false;
   
   
  +    /**
  +     * All permission.
  +     */
  +    private Permission allPermission = new java.security.AllPermission();
  +
  +
       // ------------------------------------------------------------- Properties
   
   
  @@ -367,6 +373,9 @@
        */
       public void setDebug(int debug) {
   
  +        if (securityManager != null)
  +            securityManager.checkPermission(allPermission);
  +
           this.debug = debug;
   
       }
  @@ -389,6 +398,9 @@
        */
       public void setDelegate(boolean delegate) {
   
  +        if (securityManager != null)
  +            securityManager.checkPermission(allPermission);
  +
           this.delegate = delegate;
   
       }
  @@ -400,15 +412,15 @@
        *
        * @param path file directory path
        */
  -    public void setPermissions(String path) {
  -        if( securityManager != null ) {
  +    public void addPermission(String path) {
  +        if (securityManager != null) {
               Permission permission = null;
               if( path.startsWith("jndi:") || path.startsWith("jar:jndi:") ) {
                   permission = new JndiPermission(path + "*");
               } else {
                   permission = new FilePermission(path + "-","read");
               }
  -            permissionList.add(permission);
  +            addPermission(permission);
           }
       }
   
  @@ -419,12 +431,25 @@
        *
        * @param url URL for a file or directory on local system
        */
  -    public void setPermissions(URL url) {
  -        setPermissions(url.toString());
  +    public void addPermission(URL url) {
  +        addPermission(url.toString());
       }
   
   
       /**
  +     * If there is a Java SecurityManager create a Permission.
  +     *
  +     * @param url URL for a file or directory on local system
  +     */
  +    public void addPermission(Permission permission) {
  +        if ((securityManager != null) && (permission != null)) {
  +            securityManager.checkPermission(allPermission);
  +            permissionList.add(permission);
  +        }
  +    }
  +
  +
  +    /**
        * Return the JAR path.
        */
       public String getJarPath() {
  @@ -439,6 +464,9 @@
        */
       public void setJarPath(String jarPath) {
   
  +        if (securityManager != null)
  +            securityManager.checkPermission(allPermission);
  +
           this.jarPath = jarPath;
   
       }
  @@ -459,6 +487,9 @@
        */
       public void addRepository(String repository) {
   
  +        if (securityManager != null)
  +            securityManager.checkPermission(allPermission);
  +
           // Ignore any of the standard repositories, as they are set up using
           // either addJar or addRepository
           if (repository.startsWith("/WEB-INF/lib")
  @@ -489,6 +520,9 @@
        */
       synchronized void addRepository(String repository, File file) {
   
  +        if (securityManager != null)
  +            securityManager.checkPermission(allPermission);
  +
           // Note : There should be only one (of course), but I think we should
           // keep this a bit generic
   
  @@ -522,6 +556,9 @@
       synchronized void addJar(String jar, JarFile jarFile, File file)
           throws IOException {
   
  +        if (securityManager != null)
  +            securityManager.checkPermission(allPermission);
  +
           if (jar == null)
               return;
           if (jarFile == null)
  @@ -1426,6 +1463,9 @@
        */
       public void start() throws LifecycleException {
   
  +        if (securityManager != null)
  +            securityManager.checkPermission(allPermission);
  +
           started = true;
   
       }
  @@ -1437,6 +1477,9 @@
        * @exception LifecycleException if a lifecycle error occurs
        */
       public void stop() throws LifecycleException {
  +
  +        if (securityManager != null)
  +            securityManager.checkPermission(allPermission);
   
           started = false;
   
  
  
  
  1.17      +16 -11    
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappLoader.java
  
  Index: WebappLoader.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- WebappLoader.java 2001/10/31 19:00:43     1.16
  +++ WebappLoader.java 2001/10/31 23:17:37     1.17
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v
 1.16 2001/10/31 19:00:43 remm Exp $
  - * $Revision: 1.16 $
  - * $Date: 2001/10/31 19:00:43 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v
 1.17 2001/10/31 23:17:37 remm Exp $
  + * $Revision: 1.17 $
  + * $Date: 2001/10/31 23:17:37 $
    *
    * ====================================================================
    *
  @@ -119,7 +119,7 @@
    *
    * @author Craig R. McClanahan
    * @author Remy Maucherat
  - * @version $Revision: 1.16 $ $Date: 2001/10/31 19:00:43 $
  + * @version $Revision: 1.17 $ $Date: 2001/10/31 23:17:37 $
    */
   
   public class WebappLoader
  @@ -798,6 +798,11 @@
           if (!(container instanceof Context))
               return;
   
  +        if (((Context) container).getPrivileged()) {
  +            classLoader.addPermission(new java.security.AllPermission());
  +            return;
  +        }
  +
           // Tell the class loader the root of the context
           ServletContext servletContext =
               ((Context) container).getServletContext();
  @@ -805,7 +810,7 @@
           try {
   
               URL rootURL = servletContext.getResource("/");
  -            classLoader.setPermissions(rootURL);
  +            classLoader.addPermission(rootURL);
   
               String contextRoot = servletContext.getRealPath("/");
               if (contextRoot != null) {
  @@ -813,7 +818,7 @@
                       contextRoot = 
                           (new File(contextRoot)).getCanonicalPath() 
                           + File.separator;
  -                    classLoader.setPermissions(contextRoot);
  +                    classLoader.addPermission(contextRoot);
                   } catch (IOException e) {
                       // Ignore
                   }
  @@ -822,11 +827,11 @@
               URL classesURL =
                   servletContext.getResource("/WEB-INF/classes/");
               if (classesURL != null)
  -                classLoader.setPermissions(classesURL);
  +                classLoader.addPermission(classesURL);
   
               URL libURL = servletContext.getResource("/WEB-INF/lib/");
               if (libURL != null) {
  -                classLoader.setPermissions(libURL);
  +                classLoader.addPermission(libURL);
               }
   
               if (contextRoot != null) {
  @@ -840,7 +845,7 @@
                       } catch (IOException e) {
                       }
                       if (path != null)
  -                        classLoader.setPermissions(path);
  +                        classLoader.addPermission(path);
                   }
   
               } else {
  @@ -856,7 +861,7 @@
                               path = libDir.getCanonicalPath() + File.separator;
                           } catch (IOException e) {
                           }
  -                        classLoader.setPermissions(path);
  +                        classLoader.addPermission(path);
                       }
                       if (classesURL != null) {
                           File classesDir =
  @@ -867,7 +872,7 @@
                                   + File.separator;
                           } catch (IOException e) {
                           }
  -                        classLoader.setPermissions(path);
  +                        classLoader.addPermission(path);
                       }
                   }
   
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to