Author: markt Date: Mon Aug 21 09:48:09 2017 New Revision: 1805613 URL: http://svn.apache.org/viewvc?rev=1805613&view=rev Log: Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=61210 When running under a SecurityManager, do not print a warning about not being able to read a logging configuration file when that file does not exist.
Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java tomcat/trunk/java/org/apache/juli/ClassLoaderLogManager.java tomcat/trunk/java/org/apache/juli/WebappProperties.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java?rev=1805613&r1=1805612&r2=1805613&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java (original) +++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java Mon Aug 21 09:48:09 2017 @@ -2485,4 +2485,24 @@ public abstract class WebappClassLoaderB } return null; } + + + @Override + public boolean hasLoggingConfig() { + if (Globals.IS_SECURITY_ENABLED) { + Boolean result = AccessController.doPrivileged(new PrivilegedHasLoggingConfig()); + return result.booleanValue(); + } else { + return findResource("logging.properties") != null; + } + } + + + private class PrivilegedHasLoggingConfig implements PrivilegedAction<Boolean> { + + @Override + public Boolean run() { + return Boolean.valueOf(findResource("logging.properties") != null); + } + } } Modified: tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java?rev=1805613&r1=1805612&r2=1805613&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java (original) +++ tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java Mon Aug 21 09:48:09 2017 @@ -74,6 +74,7 @@ public final class SecurityClassLoad { private static final void loadLoaderPackage(ClassLoader loader) throws Exception { final String basePackage = "org.apache.catalina.loader."; loader.loadClass(basePackage + "WebappClassLoaderBase$PrivilegedFindClassByName"); + loader.loadClass(basePackage + "WebappClassLoaderBase$PrivilegedHasLoggingConfig"); } Modified: tomcat/trunk/java/org/apache/juli/ClassLoaderLogManager.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/juli/ClassLoaderLogManager.java?rev=1805613&r1=1805612&r2=1805613&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/juli/ClassLoaderLogManager.java (original) +++ tomcat/trunk/java/org/apache/juli/ClassLoaderLogManager.java Mon Aug 21 09:48:09 2017 @@ -426,7 +426,11 @@ public class ClassLoaderLogManager exten // Special case for URL classloaders which are used in containers: // only look in the local repositories to avoid redefining loggers 20 times try { - if (classLoader instanceof URLClassLoader) { + if (classLoader instanceof WebappProperties) { + if (((WebappProperties) classLoader).hasLoggingConfig()) { + is = classLoader.getResourceAsStream("logging.properties"); + } + } else if (classLoader instanceof URLClassLoader) { URL logConfig = ((URLClassLoader)classLoader).findResource("logging.properties"); if(null != logConfig) { Modified: tomcat/trunk/java/org/apache/juli/WebappProperties.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/juli/WebappProperties.java?rev=1805613&r1=1805612&r2=1805613&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/juli/WebappProperties.java (original) +++ tomcat/trunk/java/org/apache/juli/WebappProperties.java Mon Aug 21 09:48:09 2017 @@ -51,4 +51,15 @@ public interface WebappProperties { * null if none is available. */ String getServiceName(); + + /** + * Enables JULI to determine if the web application includes a local + * configuration without JULI having to look for the file which it may not + * have permission to do when running under a SecurityManager. + * + * @return {@code true} if the web application includes a logging + * configuration at the standard location of + * /WEB-INF/classes/logging.properties. + */ + boolean hasLoggingConfig(); } Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1805613&r1=1805612&r2=1805613&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Mon Aug 21 09:48:09 2017 @@ -59,6 +59,11 @@ before generating the error page so that the page generation can be skipped if the page is never going to be sent. (markt) </fix> + <fix> + <bug>61210</bug>: When running under a SecurityManager, do not print a + warning about not being able to read a logging configuration file when + that file does not exist. (markt) + </fix> </changelog> </subsection> <subsection name="Coyote"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org