Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=62371
Improve logging of Host validation failures.
git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc8.0.x/trunk@1831570 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/java/org/apache/coyote/AbstractProcessor.java b/java/org/apache/coyote/AbstractProcessor.java
index 3fc3d41..d344c09 100644
--- a/java/org/apache/coyote/AbstractProcessor.java
+++ b/java/org/apache/coyote/AbstractProcessor.java
@@ -25,6 +25,7 @@
import org.apache.tomcat.util.buf.ByteChunk;
import org.apache.tomcat.util.buf.MessageBytes;
import org.apache.tomcat.util.http.parser.Host;
+import org.apache.tomcat.util.log.UserDataHelper;
import org.apache.tomcat.util.net.AbstractEndpoint;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
import org.apache.tomcat.util.net.SocketStatus;
@@ -56,6 +57,7 @@
*/
private ErrorState errorState = ErrorState.NONE;
+ protected final UserDataHelper userDataHelper;
/**
* Intended for use by the Upgrade sub-classes that have no need to
@@ -66,6 +68,7 @@
endpoint = null;
request = null;
response = null;
+ userDataHelper = null;
}
public AbstractProcessor(AbstractEndpoint<S> endpoint) {
@@ -76,6 +79,7 @@
response.setHook(this);
request.setResponse(response);
request.setHook(this);
+ userDataHelper = new UserDataHelper(getLog());
}
@@ -244,8 +248,23 @@
} catch (IllegalArgumentException e) {
// IllegalArgumentException indicates that the host name is invalid
+ UserDataHelper.Mode logMode = userDataHelper.getNextMode();
+ if (logMode != null) {
+ String message = sm.getString("abstractProcessor.hostInvalid", valueMB.toString());
+ switch (logMode) {
+ case INFO_THEN_DEBUG:
+ message += sm.getString("abstractProcessor.fallToDebug");
+ //$FALL-THROUGH$
+ case INFO:
+ getLog().info(message, e);
+ break;
+ case DEBUG:
+ getLog().debug(message, e);
+ }
+ }
+
response.setStatus(400);
- setErrorState(ErrorState.CLOSE_CLEAN, null);
+ setErrorState(ErrorState.CLOSE_CLEAN, e);
}
}
diff --git a/java/org/apache/coyote/LocalStrings.properties b/java/org/apache/coyote/LocalStrings.properties
index 66a0c3d..63825f5 100644
--- a/java/org/apache/coyote/LocalStrings.properties
+++ b/java/org/apache/coyote/LocalStrings.properties
@@ -17,6 +17,8 @@
abstractConnectionHandler.ioexception.debug=IOExceptions are normal, ignored
abstractConnectionHandler.socketexception.debug=SocketExceptions are normal, ignored
+abstractProcessor.fallToDebug=\n Note: further occurrences of request parsing errors will be logged at DEBUG level.
+abstractProcessor.hostInvalid=The host [{0}] is not valid
abstractProcessor.nonContainerThreadError=An error occurred in processing while on a non-container thread. The connection will be closed immediately
abstractProtocol.mbeanDeregistrationFailed=Failed to deregister MBean named [{0}] from MBean server [{1}]
diff --git a/java/org/apache/coyote/http11/AbstractHttp11Processor.java b/java/org/apache/coyote/http11/AbstractHttp11Processor.java
index 0d40243..1fb61b1 100644
--- a/java/org/apache/coyote/http11/AbstractHttp11Processor.java
+++ b/java/org/apache/coyote/http11/AbstractHttp11Processor.java
@@ -60,9 +60,6 @@
public abstract class AbstractHttp11Processor<S> extends AbstractProcessor<S> {
- private final UserDataHelper userDataHelper;
-
-
/**
* The string manager for this package.
*/
@@ -261,7 +258,6 @@
public AbstractHttp11Processor(AbstractEndpoint<S> endpoint) {
super(endpoint);
- userDataHelper = new UserDataHelper(getLog());
}
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 3e80fa6..e221fdc 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -102,6 +102,9 @@
Relax Host validation by removing the requirement that the final
component of a FQDN must be alphabetic. (markt)
</fix>
+ <fix>
+ <bug>62371</bug>: Improve logging of Host validation failures. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Jasper">