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