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]>