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

Reply via email to