Author: violetagg
Date: Fri Apr 25 11:14:52 2014
New Revision: 1589994

URL: http://svn.apache.org/r1589994
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56383
Merged revision 1589967 from tomcat/trunk:
Properties for disabling server information and error report are added to the 
o.a.catalina.valves.ErrorReportValve. Based on the patch provided by Nick Bunn.

Modified:
    tomcat/tc7.0.x/trunk/   (props changed)
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/ErrorReportValve.java
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/mbeans-descriptors.xml
    tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
    tomcat/tc7.0.x/trunk/webapps/docs/config/valve.xml

Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
  Merged /tomcat/trunk:r1589967

Modified: 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/ErrorReportValve.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/ErrorReportValve.java?rev=1589994&r1=1589993&r2=1589994&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/ErrorReportValve.java 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/ErrorReportValve.java 
Fri Apr 25 11:14:52 2014
@@ -48,6 +48,10 @@ import org.apache.tomcat.util.res.String
  */
 public class ErrorReportValve extends ValveBase {
 
+    protected boolean showReport = true;
+
+    protected boolean showServerInfo = true;
+
     //------------------------------------------------------ Constructor
     public ErrorReportValve() {
         super(true);
@@ -199,69 +203,74 @@ public class ErrorReportValve extends Va
 
         StringBuilder sb = new StringBuilder();
 
-        sb.append("<html><head><title>");
-        sb.append(ServerInfo.getServerInfo()).append(" - ");
-        sb.append(smClient.getString("errorReportValve.errorReport"));
-        sb.append("</title>");
-        sb.append("<style><!--");
-        sb.append(org.apache.catalina.util.TomcatCSS.TOMCAT_CSS);
-        sb.append("--></style> ");
+        sb.append("<html><head>");
+        if(showServerInfo || showReport){
+            sb.append("<title>");
+            if(showServerInfo) {
+                sb.append(ServerInfo.getServerInfo()).append(" - ");
+            }
+            sb.append(smClient.getString("errorReportValve.errorReport"));
+            sb.append("</title>");
+            sb.append("<style><!--");
+            sb.append(org.apache.catalina.util.TomcatCSS.TOMCAT_CSS);
+            sb.append("--></style> ");
+        }
         sb.append("</head><body>");
         sb.append("<h1>");
         sb.append(smClient.getString("errorReportValve.statusHeader",
                                "" + statusCode, message)).append("</h1>");
-        sb.append("<HR size=\"1\" noshade=\"noshade\">");
-        sb.append("<p><b>type</b> ");
-        if (throwable != null) {
-            sb.append(smClient.getString("errorReportValve.exceptionReport"));
-        } else {
-            sb.append(smClient.getString("errorReportValve.statusReport"));
-        }
-        sb.append("</p>");
-        sb.append("<p><b>");
-        sb.append(smClient.getString("errorReportValve.message"));
-        sb.append("</b> <u>");
-        sb.append(message).append("</u></p>");
-        sb.append("<p><b>");
-        sb.append(smClient.getString("errorReportValve.description"));
-        sb.append("</b> <u>");
-        sb.append(report);
-        sb.append("</u></p>");
-
-        if (throwable != null) {
-
-            String stackTrace = getPartialServletStackTrace(throwable);
+        if (showReport) {
+            sb.append("<HR size=\"1\" noshade=\"noshade\">");
+            sb.append("<p><b>type</b> ");
+            if (throwable != null) {
+                
sb.append(smClient.getString("errorReportValve.exceptionReport"));
+            } else {
+                sb.append(smClient.getString("errorReportValve.statusReport"));
+            }
+            sb.append("</p>");
+            sb.append("<p><b>");
+            sb.append(smClient.getString("errorReportValve.message"));
+            sb.append("</b> <u>");
+            sb.append(message).append("</u></p>");
             sb.append("<p><b>");
-            sb.append(smClient.getString("errorReportValve.exception"));
-            sb.append("</b> <pre>");
-            sb.append(RequestUtil.filter(stackTrace));
-            sb.append("</pre></p>");
-
-            int loops = 0;
-            Throwable rootCause = throwable.getCause();
-            while (rootCause != null && (loops < 10)) {
-                stackTrace = getPartialServletStackTrace(rootCause);
+            sb.append(smClient.getString("errorReportValve.description"));
+            sb.append("</b> <u>");
+            sb.append(report);
+            sb.append("</u></p>");
+            if (throwable != null) {
+
+                String stackTrace = getPartialServletStackTrace(throwable);
                 sb.append("<p><b>");
-                sb.append(smClient.getString("errorReportValve.rootCause"));
+                sb.append(smClient.getString("errorReportValve.exception"));
                 sb.append("</b> <pre>");
                 sb.append(RequestUtil.filter(stackTrace));
                 sb.append("</pre></p>");
-                // In case root cause is somehow heavily nested
-                rootCause = rootCause.getCause();
-                loops++;
-            }
 
-            sb.append("<p><b>");
-            sb.append(smClient.getString("errorReportValve.note"));
-            sb.append("</b> <u>");
-            sb.append(smClient.getString("errorReportValve.rootCauseInLogs",
-                                   ServerInfo.getServerInfo()));
-            sb.append("</u></p>");
+                int loops = 0;
+                Throwable rootCause = throwable.getCause();
+                while (rootCause != null && (loops < 10)) {
+                    stackTrace = getPartialServletStackTrace(rootCause);
+                    sb.append("<p><b>");
+                    
sb.append(smClient.getString("errorReportValve.rootCause"));
+                    sb.append("</b> <pre>");
+                    sb.append(RequestUtil.filter(stackTrace));
+                    sb.append("</pre></p>");
+                    // In case root cause is somehow heavily nested
+                    rootCause = rootCause.getCause();
+                    loops++;
+                }
 
-        }
+                sb.append("<p><b>");
+                sb.append(smClient.getString("errorReportValve.note"));
+                sb.append("</b> <u>");
+                
sb.append(smClient.getString("errorReportValve.rootCauseInLogs",
+                        showServerInfo?ServerInfo.getServerInfo():""));
+                sb.append("</u></p>");
 
-        sb.append("<HR size=\"1\" noshade=\"noshade\">");
-        sb.append("<h3>").append(ServerInfo.getServerInfo()).append("</h3>");
+            }
+            sb.append("<HR size=\"1\" noshade=\"noshade\">");
+        }
+        
sb.append("<h3>").append(showServerInfo?ServerInfo.getServerInfo():"").append("</h3>");
         sb.append("</body></html>");
 
         try {
@@ -314,4 +323,30 @@ public class ErrorReportValve extends Va
         }
         return trace.toString();
     }
+
+    /**
+     * Enables/Disables full error reports
+     *
+     * @param showReport
+     */
+    public void setShowReport(boolean showReport) {
+        this.showReport = showReport;
+    }
+
+    public boolean isShowReport() {
+        return showReport;
+    }
+
+    /**
+     * Enables/Disables server info on error pages
+     *
+     * @param showServerInfo
+     */
+    public void setShowServerInfo(boolean showServerInfo) {
+        this.showServerInfo = showServerInfo;
+    }
+
+    public boolean isShowServerInfo() {
+        return showServerInfo;
+    }
 }

Modified: 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/mbeans-descriptors.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/mbeans-descriptors.xml?rev=1589994&r1=1589993&r2=1589994&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/mbeans-descriptors.xml 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/mbeans-descriptors.xml 
Fri Apr 25 11:14:52 2014
@@ -194,6 +194,16 @@
                type="java.lang.String"
                writeable="false"/>
 
+    <attribute name="showReport"
+               description="Enables/Disables full error reports"
+               is="true"
+               type="boolean"/>
+
+    <attribute name="showServerInfo"
+               description="Enables/Disables server info on error pages"
+               is="true"
+               type="boolean"/>
+
   </mbean>
 
   <mbean name="ExtendedAccessLogValve"

Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1589994&r1=1589993&r2=1589994&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Fri Apr 25 11:14:52 2014
@@ -92,6 +92,11 @@
         time is added to the log files. Patch is provided by Danila Galimov.
         (violetagg)
       </add>
+      <add>
+        <bug>56383</bug>: Properties for disabling server information and error
+        report are added to the 
<code>org.apache.catalina.valves.ErrorReportValve</code>.
+        Based on the patch provided by Nick Bunn. (violetagg)
+      </add>
       <fix>
         Only create XML parsing objects if required and fix associated 
potential
         memory leak in the default Servlet. (markt)

Modified: tomcat/tc7.0.x/trunk/webapps/docs/config/valve.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/config/valve.xml?rev=1589994&r1=1589993&r2=1589994&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/config/valve.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/config/valve.xml Fri Apr 25 11:14:52 2014
@@ -328,6 +328,54 @@
 </section>
 
 
+<section name="Error Report Valve">
+
+  <subsection name="Introduction">
+
+    <p>The <strong>Error Report Valve</strong> is a simple error handler 
+    for HTTP status codes that will generate and return HTML error pages.</p>
+
+    <p><strong>NOTE:</strong> Disabling both showServerInfo and showReport will
+    only return the HTTP status code and remove all CSS.</p>
+
+  </subsection>
+
+  <subsection name="Attributes">
+
+    <p>The <strong>Error Report Valve</strong> supports the following
+    configuration attributes:</p>
+
+    <attributes>
+
+      <attribute name="className" required="true">
+        <p>Java class name of the implementation to use.  This MUST be set to
+        <strong>org.apache.catalina.valves.ErrorReportValve</strong> to use the
+        default error report valve.</p>
+      </attribute>
+
+      <attribute name="showReport" required="false">
+        <p>Flag to determine if the error report is presented when an error 
occurs.
+           If set to <code>false</code>, then the error report is not in 
+           the HTML response.
+           Default value: <code>true</code>
+        </p>
+      </attribute>
+
+      <attribute name="showServerInfo" required="false">
+        <p>Flag to determine if server information is presented when an error 
occurs.
+           If set to <code>false</code>, then the server version is not 
returned in 
+           the HTML response.
+           Default value: <code>true</code>
+        </p>
+      </attribute>
+
+    </attributes>
+
+  </subsection>
+
+</section>
+
+
 <section name="Extended Access Log Valve">
 
   <subsection name="Introduction">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to