You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2020/05/05 09:42:19 UTC
[tomcat] branch 7.0.x updated (1b75434 -> 00d95b6)
This is an automated email from the ASF dual-hosted git repository.
markt pushed a change to branch 7.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git.
from 1b75434 Backport updates to Chinese translations
new b1e2760 Deprecate get/set attribute
new 47c9f38 Use setProperty and test return value in preference to setAttribute
new 00d95b6 No need to duplicate class level @SuppressWarnings annotation
The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
java/javax/servlet/http/HttpSessionContext.java | 2 -
java/org/apache/catalina/connector/Connector.java | 8 +
.../apache/catalina/core/ApplicationContext.java | 2 +-
.../connector/TestCoyoteAdapterRequestFuzzing.java | 2 +-
.../apache/catalina/core/TestAsyncContextImpl.java | 3 +-
.../catalina/core/TestSwallowAbortedUploads.java | 2 +-
.../apache/catalina/mbeans/TestRegistration.java | 2 +-
.../apache/catalina/startup/TomcatBaseTest.java | 7 +-
.../coyote/http11/TestAbstractHttp11Processor.java | 650 +++++++++++++++++++++
.../apache/tomcat/util/http/TestMimeHeaders.java | 3 +-
test/org/apache/tomcat/util/net/TestCustomSsl.java | 7 +-
test/org/apache/tomcat/util/net/TesterSupport.java | 22 +-
12 files changed, 681 insertions(+), 29 deletions(-)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[tomcat] 01/03: Deprecate get/set attribute
Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 7.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit b1e276009f984c2071b232f807de06973c08bbdf
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Tue May 5 09:48:23 2020 +0100
Deprecate get/set attribute
---
java/org/apache/catalina/connector/Connector.java | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/java/org/apache/catalina/connector/Connector.java b/java/org/apache/catalina/connector/Connector.java
index 5a3a0f2..b06f6a6 100644
--- a/java/org/apache/catalina/connector/Connector.java
+++ b/java/org/apache/catalina/connector/Connector.java
@@ -320,7 +320,11 @@ public class Connector extends LifecycleMBeanBase {
*
* @param name the property name
* @return the property value
+ *
+ * @deprecated Use {@link #getProperty(String)}. This will be removed in
+ * Tomcat 10 onwards.
*/
+ @Deprecated
public Object getAttribute(String name) {
return getProperty(name);
}
@@ -331,7 +335,11 @@ public class Connector extends LifecycleMBeanBase {
*
* @param name the property name
* @param value the property value
+ *
+ * @deprecated Use {@link #setProperty(String, String)}. This will be
+ * removed in Tomcat 10 onwards.
*/
+ @Deprecated
public void setAttribute(String name, Object value) {
setProperty(name, String.valueOf(value));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[tomcat] 03/03: No need to duplicate class level @SuppressWarnings
annotation
Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 7.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 00d95b6ffc8118f274369ad2c89fd98898edd7d2
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Tue May 5 10:37:04 2020 +0100
No need to duplicate class level @SuppressWarnings annotation
---
java/javax/servlet/http/HttpSessionContext.java | 2 --
1 file changed, 2 deletions(-)
diff --git a/java/javax/servlet/http/HttpSessionContext.java b/java/javax/servlet/http/HttpSessionContext.java
index 13fb133..f1bab21 100644
--- a/java/javax/servlet/http/HttpSessionContext.java
+++ b/java/javax/servlet/http/HttpSessionContext.java
@@ -40,7 +40,6 @@ public interface HttpSessionContext {
* must return null and will be removed in a future version of
* this API.
*/
- @SuppressWarnings("dep-ann")
// Spec API does not use @Deprecated
public HttpSession getSession(String sessionId);
@@ -51,7 +50,6 @@ public interface HttpSessionContext {
* must return an empty <code>Enumeration</code> and will be
* removed in a future version of this API.
*/
- @SuppressWarnings("dep-ann")
// Spec API does not use @Deprecated
public Enumeration<String> getIds();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
[tomcat] 02/03: Use setProperty and test return value in preference
to setAttribute
Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 7.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 47c9f3813795f881f1d9b93ec3c1a259641f1a06
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Wed Jan 15 19:40:52 2020 +0000
Use setProperty and test return value in preference to setAttribute
---
.../apache/catalina/core/ApplicationContext.java | 2 +-
.../connector/TestCoyoteAdapterRequestFuzzing.java | 2 +-
.../apache/catalina/core/TestAsyncContextImpl.java | 3 +-
.../catalina/core/TestSwallowAbortedUploads.java | 2 +-
.../apache/catalina/mbeans/TestRegistration.java | 2 +-
.../apache/catalina/startup/TomcatBaseTest.java | 7 +-
.../coyote/http11/TestAbstractHttp11Processor.java | 650 +++++++++++++++++++++
.../apache/tomcat/util/http/TestMimeHeaders.java | 3 +-
test/org/apache/tomcat/util/net/TestCustomSsl.java | 7 +-
test/org/apache/tomcat/util/net/TesterSupport.java | 22 +-
10 files changed, 673 insertions(+), 27 deletions(-)
diff --git a/java/org/apache/catalina/core/ApplicationContext.java b/java/org/apache/catalina/core/ApplicationContext.java
index 833c06e..dfd02a9 100644
--- a/java/org/apache/catalina/core/ApplicationContext.java
+++ b/java/org/apache/catalina/core/ApplicationContext.java
@@ -1043,7 +1043,7 @@ public class ApplicationContext implements ServletContext {
Connector[] connectors = service.findConnectors();
// Need at least one SSL enabled connector to use the SSL session ID.
for (Connector connector : connectors) {
- if (Boolean.TRUE.equals(connector.getAttribute("SSLEnabled"))) {
+ if (Boolean.TRUE.equals(connector.getProperty("SSLEnabled"))) {
supportedSessionTrackingModes.add(SessionTrackingMode.SSL);
break;
}
diff --git a/test/org/apache/catalina/connector/TestCoyoteAdapterRequestFuzzing.java b/test/org/apache/catalina/connector/TestCoyoteAdapterRequestFuzzing.java
index b998ba1..6c89fd3 100644
--- a/test/org/apache/catalina/connector/TestCoyoteAdapterRequestFuzzing.java
+++ b/test/org/apache/catalina/connector/TestCoyoteAdapterRequestFuzzing.java
@@ -110,7 +110,7 @@ public class TestCoyoteAdapterRequestFuzzing extends TomcatBaseTest {
@Test
public void doTest() throws Exception {
Tomcat tomcat = getTomcatInstance();
- tomcat.getConnector().setAttribute("restrictedUserAgents", "value-not-important");
+ Assert.assertTrue(tomcat.getConnector().setProperty("restrictedUserAgents", "value-not-important"));
File appDir = new File("test/webapp");
Context ctxt = tomcat.addContext("", appDir.getAbsolutePath());
diff --git a/test/org/apache/catalina/core/TestAsyncContextImpl.java b/test/org/apache/catalina/core/TestAsyncContextImpl.java
index 7aff34b..54a9e8b 100644
--- a/test/org/apache/catalina/core/TestAsyncContextImpl.java
+++ b/test/org/apache/catalina/core/TestAsyncContextImpl.java
@@ -165,8 +165,7 @@ public class TestAsyncContextImpl extends TomcatBaseTest {
Tomcat tomcat = getTomcatInstance();
// Minimise pauses during test
- tomcat.getConnector().setAttribute(
- "connectionTimeout", Integer.valueOf(3000));
+ Assert.assertTrue(tomcat.getConnector().setProperty("connectionTimeout", "3000"));
// No file system docBase required
Context ctx = tomcat.addContext("", null);
diff --git a/test/org/apache/catalina/core/TestSwallowAbortedUploads.java b/test/org/apache/catalina/core/TestSwallowAbortedUploads.java
index b8f71ed..450d9fc 100644
--- a/test/org/apache/catalina/core/TestSwallowAbortedUploads.java
+++ b/test/org/apache/catalina/core/TestSwallowAbortedUploads.java
@@ -430,7 +430,7 @@ public class TestSwallowAbortedUploads extends TomcatBaseTest {
// No need for target to exist.
if (!limit) {
- tomcat.getConnector().setAttribute("maxSwallowSize", "-1");
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxSwallowSize", "-1"));
}
tomcat.start();
diff --git a/test/org/apache/catalina/mbeans/TestRegistration.java b/test/org/apache/catalina/mbeans/TestRegistration.java
index 892ff8d..bc14553 100644
--- a/test/org/apache/catalina/mbeans/TestRegistration.java
+++ b/test/org/apache/catalina/mbeans/TestRegistration.java
@@ -169,7 +169,7 @@ public class TestRegistration extends TomcatBaseTest {
// Disable keep-alive otherwise request processing threads in keep-alive
// won't shut down fast enough with BIO to de-register the processor
// triggering a test failure
- tomcat.getConnector().setAttribute("maxKeepAliveRequests", Integer.valueOf(1));
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxKeepAliveRequests", "1"));
tomcat.start();
diff --git a/test/org/apache/catalina/startup/TomcatBaseTest.java b/test/org/apache/catalina/startup/TomcatBaseTest.java
index eec6416..e0757d8 100644
--- a/test/org/apache/catalina/startup/TomcatBaseTest.java
+++ b/test/org/apache/catalina/startup/TomcatBaseTest.java
@@ -112,12 +112,11 @@ public abstract class TomcatBaseTest extends LoggingBaseTest {
String protocol = getProtocol();
Connector connector = new Connector(protocol);
// Listen only on localhost
- connector.setAttribute("address",
- InetAddress.getByName("localhost").getHostAddress());
+ Assert.assertTrue(connector.setProperty("address", InetAddress.getByName("localhost").getHostAddress()));
// Use random free port
connector.setPort(0);
// Mainly set to reduce timeouts during async tests
- connector.setAttribute("connectionTimeout", "3000");
+ Assert.assertTrue(connector.setProperty("connectionTimeout", "3000"));
tomcat.getService().addConnector(connector);
tomcat.setConnector(connector);
@@ -127,7 +126,7 @@ public abstract class TomcatBaseTest extends LoggingBaseTest {
AprLifecycleListener listener = new AprLifecycleListener();
listener.setSSLRandomSeed("/dev/urandom");
server.addLifecycleListener(listener);
- connector.setAttribute("pollerThreadCount", Integer.valueOf(1));
+ Assert.assertTrue(connector.setProperty("pollerThreadCount", "1"));
}
File catalinaBase = getTemporaryDirectory();
diff --git a/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java b/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
index 6f71fab..b142431 100644
--- a/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
+++ b/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
@@ -25,11 +25,13 @@ import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Reader;
+import java.io.StringReader;
import java.io.Writer;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.nio.CharBuffer;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -56,6 +58,7 @@ import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.startup.TomcatBaseTest;
import org.apache.tomcat.util.buf.B2CConverter;
import org.apache.tomcat.util.buf.ByteChunk;
+import org.apache.tomcat.util.http.parser.TokenList;
public class TestAbstractHttp11Processor extends TomcatBaseTest {
@@ -63,6 +66,10 @@ public class TestAbstractHttp11Processor extends TomcatBaseTest {
public void testResponseWithErrorChunked() throws Exception {
Tomcat tomcat = getTomcatInstance();
+ // This setting means the connection will be closed at the end of the
+ // request
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxKeepAliveRequests", "1"));
+
// No file system docBase required
Context ctxt = tomcat.addContext("", null);
@@ -1079,4 +1086,647 @@ public class TestAbstractHttp11Processor extends TomcatBaseTest {
resp.setStatus(205);
}
}
+
+ /*
+ * Multiple, different Host headers
+ */
+ @Test
+ public void testMultipleHostHeader01() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ // This setting means the connection will be closed at the end of the
+ // request
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxKeepAliveRequests", "1"));
+
+ // No file system docBase required
+ Context ctx = tomcat.addContext("", null);
+
+ // Add servlet
+ Tomcat.addServlet(ctx, "TesterServlet", new TesterServlet());
+ ctx.addServletMapping("/foo", "TesterServlet");
+
+ tomcat.start();
+
+ String request =
+ "GET /foo HTTP/1.1" + SimpleHttpClient.CRLF +
+ "Host: a" + SimpleHttpClient.CRLF +
+ "Host: b" + SimpleHttpClient.CRLF +
+ SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request});
+
+ client.connect();
+ client.processRequest();
+
+ // Expected response is a 400 response.
+ Assert.assertTrue(client.isResponse400());
+ }
+
+ /*
+ * Multiple instances of the same Host header
+ */
+ @Test
+ public void testMultipleHostHeader02() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ // This setting means the connection will be closed at the end of the
+ // request
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxKeepAliveRequests", "1"));
+
+ // No file system docBase required
+ Context ctx = tomcat.addContext("", null);
+
+ // Add servlet
+ Tomcat.addServlet(ctx, "TesterServlet", new TesterServlet());
+ ctx.addServletMapping("/foo", "TesterServlet");
+
+ tomcat.start();
+
+ String request =
+ "GET /foo HTTP/1.1" + SimpleHttpClient.CRLF +
+ "Host: a" + SimpleHttpClient.CRLF +
+ "Host: a" + SimpleHttpClient.CRLF +
+ SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request});
+
+ client.connect();
+ client.processRequest();
+
+ // Expected response is a 400 response.
+ Assert.assertTrue(client.isResponse400());
+ }
+
+ @Test
+ public void testMissingHostHeader() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ // This setting means the connection will be closed at the end of the
+ // request
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxKeepAliveRequests", "1"));
+
+ // No file system docBase required
+ Context ctx = tomcat.addContext("", null);
+
+ // Add servlet
+ Tomcat.addServlet(ctx, "TesterServlet", new TesterServlet());
+ ctx.addServletMapping("/foo", "TesterServlet");
+
+ tomcat.start();
+
+ String request =
+ "GET /foo HTTP/1.1" + SimpleHttpClient.CRLF +
+ SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request});
+
+ client.connect();
+ client.processRequest();
+
+ // Expected response is a 400 response.
+ Assert.assertTrue(client.isResponse400());
+ }
+
+ @Test
+ public void testInconsistentHostHeader01() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ // This setting means the connection will be closed at the end of the
+ // request
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxKeepAliveRequests", "1"));
+
+ Assert.assertTrue(tomcat.getConnector().setProperty("allowHostHeaderMismatch", "false"));
+
+ // No file system docBase required
+ Context ctx = tomcat.addContext("", null);
+
+ // Add servlet
+ Tomcat.addServlet(ctx, "TesterServlet", new TesterServlet());
+ ctx.addServletMapping("/foo", "TesterServlet");
+
+ tomcat.start();
+
+ String request =
+ "GET http://a/foo HTTP/1.1" + SimpleHttpClient.CRLF +
+ "Host: b" + SimpleHttpClient.CRLF +
+ SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request});
+
+ client.connect();
+ client.processRequest();
+
+ // Expected response is a 400 response.
+ Assert.assertTrue(client.isResponse400());
+ }
+
+ @Test
+ public void testInconsistentHostHeader02() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ // This setting means the connection will be closed at the end of the
+ // request
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxKeepAliveRequests", "1"));
+
+ Assert.assertTrue(tomcat.getConnector().setProperty("allowHostHeaderMismatch", "false"));
+
+ // No file system docBase required
+ Context ctx = tomcat.addContext("", null);
+
+ // Add servlet
+ Tomcat.addServlet(ctx, "TesterServlet", new TesterServlet());
+ ctx.addServletMapping("/foo", "TesterServlet");
+
+ tomcat.start();
+
+ String request =
+ "GET http://a:8080/foo HTTP/1.1" + SimpleHttpClient.CRLF +
+ "Host: b:8080" + SimpleHttpClient.CRLF +
+ SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request});
+
+ client.connect();
+ client.processRequest();
+
+ // Expected response is a 400 response.
+ Assert.assertTrue(client.isResponse400());
+ }
+
+ @Test
+ public void testInconsistentHostHeader03() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ // This setting means the connection will be closed at the end of the
+ // request
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxKeepAliveRequests", "1"));
+
+ Assert.assertTrue(tomcat.getConnector().setProperty("allowHostHeaderMismatch", "false"));
+
+ // No file system docBase required
+ Context ctx = tomcat.addContext("", null);
+
+ // Add servlet
+ Tomcat.addServlet(ctx, "TesterServlet", new TesterServlet());
+ ctx.addServletMapping("/foo", "TesterServlet");
+
+ tomcat.start();
+
+ String request =
+ "GET http://user:pwd@a/foo HTTP/1.1" + SimpleHttpClient.CRLF +
+ "Host: b" + SimpleHttpClient.CRLF +
+ SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request});
+
+ client.connect();
+ client.processRequest();
+
+ // Expected response is a 400 response.
+ Assert.assertTrue(client.isResponse400());
+ }
+
+ /*
+ * Hostname (no port) is included in the request line, but Host header
+ * is empty.
+ * Added for bug 62739.
+ */
+ @Test
+ public void testInconsistentHostHeader04() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ // This setting means the connection will be closed at the end of the
+ // request
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxKeepAliveRequests", "1"));
+
+ Assert.assertTrue(tomcat.getConnector().setProperty("allowHostHeaderMismatch", "false"));
+
+ // No file system docBase required
+ Context ctx = tomcat.addContext("", null);
+
+ // Add servlet
+ Tomcat.addServlet(ctx, "TesterServlet", new TesterServlet());
+ ctx.addServletMapping("/foo", "TesterServlet");
+
+ tomcat.start();
+
+ String request =
+ "GET http://a/foo HTTP/1.1" + SimpleHttpClient.CRLF +
+ "Host: " + SimpleHttpClient.CRLF +
+ SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request});
+
+ client.connect();
+ client.processRequest();
+
+ // Expected response is a 400 response.
+ Assert.assertTrue(client.isResponse400());
+ }
+
+ /*
+ * Hostname (with port) is included in the request line, but Host header
+ * is empty.
+ * Added for bug 62739.
+ */
+ @Test
+ public void testInconsistentHostHeader05() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ // This setting means the connection will be closed at the end of the
+ // request
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxKeepAliveRequests", "1"));
+
+ Assert.assertTrue(tomcat.getConnector().setProperty("allowHostHeaderMismatch", "false"));
+
+ // No file system docBase required
+ Context ctx = tomcat.addContext("", null);
+
+ // Add servlet
+ Tomcat.addServlet(ctx, "TesterServlet", new TesterServlet());
+ ctx.addServletMapping("/foo", "TesterServlet");
+
+ tomcat.start();
+
+ String request =
+ "GET http://a:8080/foo HTTP/1.1" + SimpleHttpClient.CRLF +
+ "Host: " + SimpleHttpClient.CRLF +
+ SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request});
+
+ client.connect();
+ client.processRequest();
+
+ // Expected response is a 400 response.
+ Assert.assertTrue(client.isResponse400());
+ }
+
+ /*
+ * Hostname (with port and user) is included in the request line, but Host
+ * header is empty.
+ * Added for bug 62739.
+ */
+ @Test
+ public void testInconsistentHostHeader06() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ // This setting means the connection will be closed at the end of the
+ // request
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxKeepAliveRequests", "1"));
+
+ Assert.assertTrue(tomcat.getConnector().setProperty("allowHostHeaderMismatch", "false"));
+
+ // No file system docBase required
+ Context ctx = tomcat.addContext("", null);
+
+ // Add servlet
+ Tomcat.addServlet(ctx, "TesterServlet", new TesterServlet());
+ ctx.addServletMapping("/foo", "TesterServlet");
+
+ tomcat.start();
+
+ String request =
+ "GET http://user:pwd@a/foo HTTP/1.1" + SimpleHttpClient.CRLF +
+ "Host: " + SimpleHttpClient.CRLF +
+ SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request});
+
+ client.connect();
+ client.processRequest();
+
+ // Expected response is a 400 response.
+ Assert.assertTrue(client.isResponse400());
+ }
+
+
+ /*
+ * Request line host is an exact match for Host header (no port)
+ */
+ @Test
+ public void testConsistentHostHeader01() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ // This setting means the connection will be closed at the end of the
+ // request
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxKeepAliveRequests", "1"));
+
+ // No file system docBase required
+ Context ctx = tomcat.addContext("", null);
+
+ // Add servlet
+ Tomcat.addServlet(ctx, "TesterServlet", new ServerNameTesterServlet());
+ ctx.addServletMapping("/foo", "TesterServlet");
+
+ tomcat.start();
+
+ String request =
+ "GET http://a/foo HTTP/1.1" + SimpleHttpClient.CRLF +
+ "Host: a" + SimpleHttpClient.CRLF +
+ SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request});
+
+ client.connect();
+ client.processRequest();
+
+ // Expected response is a 200 response.
+ Assert.assertTrue(client.isResponse200());
+ Assert.assertEquals("request.getServerName() is [a] and request.getServerPort() is 80", client.getResponseBody());
+ }
+
+ /*
+ * Request line host is an exact match for Host header (with port)
+ */
+ @Test
+ public void testConsistentHostHeader02() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ // This setting means the connection will be closed at the end of the
+ // request
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxKeepAliveRequests", "1"));
+
+ // No file system docBase required
+ Context ctx = tomcat.addContext("", null);
+
+ // Add servlet
+ Tomcat.addServlet(ctx, "TesterServlet", new ServerNameTesterServlet());
+ ctx.addServletMapping("/foo", "TesterServlet");
+
+ tomcat.start();
+
+ String request =
+ "GET http://a:8080/foo HTTP/1.1" + SimpleHttpClient.CRLF +
+ "Host: a:8080" + SimpleHttpClient.CRLF +
+ SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request});
+
+ client.connect();
+ client.processRequest();
+
+ // Expected response is a 200 response.
+ Assert.assertTrue(client.isResponse200());
+ Assert.assertEquals("request.getServerName() is [a] and request.getServerPort() is 8080", client.getResponseBody());
+
+ }
+
+ /*
+ * Request line host is an exact match for Host header
+ * (no port, with user info)
+ */
+ @Test
+ public void testConsistentHostHeader03() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ // This setting means the connection will be closed at the end of the
+ // request
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxKeepAliveRequests", "1"));
+
+ // No file system docBase required
+ Context ctx = tomcat.addContext("", null);
+
+ // Add servlet
+ Tomcat.addServlet(ctx, "TesterServlet", new ServerNameTesterServlet());
+ ctx.addServletMapping("/foo", "TesterServlet");
+
+ tomcat.start();
+
+ String request =
+ "GET http://user:pwd@a/foo HTTP/1.1" + SimpleHttpClient.CRLF +
+ "Host: a" + SimpleHttpClient.CRLF +
+ SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request});
+
+ client.connect();
+ client.processRequest();
+
+ // Expected response is a 200 response.
+ Assert.assertTrue(client.isResponse200());
+ Assert.assertEquals("request.getServerName() is [a] and request.getServerPort() is 80", client.getResponseBody());
+ }
+
+ /*
+ * Host header exists but its value is an empty string. This is valid if
+ * the request line does not include a hostname/port.
+ * Added for bug 62739.
+ */
+ @Test
+ public void testBlankHostHeader01() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ // This setting means the connection will be closed at the end of the
+ // request
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxKeepAliveRequests", "1"));
+
+ // No file system docBase required
+ Context ctx = tomcat.addContext("", null);
+
+ // Add servlet
+ Tomcat.addServlet(ctx, "TesterServlet", new ServerNameTesterServlet());
+ ctx.addServletMapping("/foo", "TesterServlet");
+
+ tomcat.start();
+
+ String request =
+ "GET /foo HTTP/1.1" + SimpleHttpClient.CRLF +
+ "Host: " + SimpleHttpClient.CRLF +
+ SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request});
+
+ client.connect();
+ client.processRequest();
+
+ // Expected response is a 200 response.
+ Assert.assertTrue(client.isResponse200());
+ Assert.assertEquals("request.getServerName() is [] and request.getServerPort() is " + getPort(), client.getResponseBody());
+ }
+
+ /*
+ * Host header exists but has its value is empty (and there are multiple
+ * spaces after the ':'. This is valid if the request line does not
+ * include a hostname/port.
+ * Added for bug 62739.
+ */
+ @Test
+ public void testBlankHostHeader02() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ // This setting means the connection will be closed at the end of the
+ // request
+ Assert.assertTrue(tomcat.getConnector().setProperty("maxKeepAliveRequests", "1"));
+
+ // No file system docBase required
+ Context ctx = tomcat.addContext("", null);
+
+ // Add servlet
+ Tomcat.addServlet(ctx, "TesterServlet", new ServerNameTesterServlet());
+ ctx.addServletMapping("/foo", "TesterServlet");
+
+ tomcat.start();
+
+ String request =
+ "GET /foo HTTP/1.1" + SimpleHttpClient.CRLF +
+ "Host: " + SimpleHttpClient.CRLF +
+ SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request});
+
+ client.connect();
+ client.processRequest();
+
+ // Expected response is a 200 response.
+ Assert.assertTrue(client.isResponse200());
+ Assert.assertEquals("request.getServerName() is [] and request.getServerPort() is " + getPort(), client.getResponseBody());
+ }
+
+
+ @Test
+ public void testKeepAliveHeader01() throws Exception {
+ doTestKeepAliveHeader(false, 3000, 10);
+ }
+
+ @Test
+ public void testKeepAliveHeader02() throws Exception {
+ doTestKeepAliveHeader(true, 5000, 1);
+ }
+
+ @Test
+ public void testKeepAliveHeader03() throws Exception {
+ doTestKeepAliveHeader(true, 5000, 10);
+ }
+
+ @Test
+ public void testKeepAliveHeader04() throws Exception {
+ doTestKeepAliveHeader(true, -1, 10);
+ }
+
+ @Test
+ public void testKeepAliveHeader05() throws Exception {
+ doTestKeepAliveHeader(true, -1, 1);
+ }
+
+ @Test
+ public void testKeepAliveHeader06() throws Exception {
+ doTestKeepAliveHeader(true, -1, -1);
+ }
+
+ private void doTestKeepAliveHeader(boolean sendKeepAlive, int keepAliveTimeout,
+ int maxKeepAliveRequests) throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ tomcat.getConnector().setProperty("keepAliveTimeout", Integer.toString(keepAliveTimeout));
+ tomcat.getConnector().setProperty("maxKeepAliveRequests", Integer.toString(maxKeepAliveRequests));
+
+ // No file system docBase required
+ Context ctx = tomcat.addContext("", null);
+
+ // Add servlet
+ Tomcat.addServlet(ctx, "TesterServlet", new TesterServlet());
+ ctx.addServletMapping("/foo", "TesterServlet");
+
+ tomcat.start();
+
+ String request =
+ "GET /foo HTTP/1.1" + SimpleHttpClient.CRLF +
+ "Host: localhost:" + getPort() + SimpleHttpClient.CRLF;
+
+ if (sendKeepAlive) {
+ request += "Connection: keep-alive" + SimpleHttpClient.CRLF;
+ }
+
+ request += SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request});
+
+ client.connect();
+ client.processRequest(false);
+
+ Assert.assertTrue(client.isResponse200());
+
+ String connectionHeaderValue = null;
+ String keepAliveHeaderValue = null;
+ for (String header : client.getResponseHeaders()) {
+ if (header.startsWith("Connection:")) {
+ connectionHeaderValue = header.substring(header.indexOf(':') + 1).trim();
+ }
+ if (header.startsWith("Keep-Alive:")) {
+ keepAliveHeaderValue = header.substring(header.indexOf(':') + 1).trim();
+ }
+ }
+
+ if (!sendKeepAlive || keepAliveTimeout < 0
+ && (maxKeepAliveRequests < 0 || maxKeepAliveRequests > 1)) {
+ Assert.assertNull(connectionHeaderValue);
+ Assert.assertNull(keepAliveHeaderValue);
+ } else {
+ List<String> connectionHeaders = new ArrayList<String>();
+ TokenList.parseTokenList(new StringReader(connectionHeaderValue), connectionHeaders);
+
+ if (sendKeepAlive && keepAliveTimeout > 0 &&
+ (maxKeepAliveRequests < 0 || maxKeepAliveRequests > 1)) {
+ Assert.assertEquals(1, connectionHeaders.size());
+ Assert.assertEquals("keep-alive", connectionHeaders.get(0));
+ Assert.assertEquals("timeout=" + keepAliveTimeout / 1000L, keepAliveHeaderValue);
+ }
+
+ if (sendKeepAlive && maxKeepAliveRequests == 1) {
+ Assert.assertEquals(1, connectionHeaders.size());
+ Assert.assertEquals("close", connectionHeaders.get(0));
+ Assert.assertNull(keepAliveHeaderValue);
+ }
+ }
+ }
+
+
+ /**
+ * Test servlet that prints out the values of
+ * HttpServletRequest.getServerName() and
+ * HttpServletRequest.getServerPort() in the response body, e.g.:
+ *
+ * "request.getServerName() is [foo] and request.getServerPort() is 8080"
+ *
+ * or:
+ *
+ * "request.getServerName() is null and request.getServerPort() is 8080"
+ */
+ private static class ServerNameTesterServlet extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+ throws ServletException, IOException {
+
+ resp.setContentType("text/plain");
+ PrintWriter out = resp.getWriter();
+
+ if (null == req.getServerName())
+ {
+ out.print("request.getServerName() is null");
+ } else {
+ out.print("request.getServerName() is [" + req.getServerName() + "]");
+ }
+
+ out.print(" and request.getServerPort() is " + req.getServerPort());
+ }
+ }
}
diff --git a/test/org/apache/tomcat/util/http/TestMimeHeaders.java b/test/org/apache/tomcat/util/http/TestMimeHeaders.java
index 90faeb2..1d88468 100644
--- a/test/org/apache/tomcat/util/http/TestMimeHeaders.java
+++ b/test/org/apache/tomcat/util/http/TestMimeHeaders.java
@@ -104,8 +104,7 @@ public class TestMimeHeaders extends TomcatBaseTest {
if (maxHeaderCount > 0) {
Assert.assertEquals(maxHeaderCount, alv.arraySize);
} else if (maxHeaderCount < 0) {
- int maxHttpHeaderSize = ((Integer) tomcat.getConnector()
- .getAttribute("maxHttpHeaderSize")).intValue();
+ int maxHttpHeaderSize = ((Integer) tomcat.getConnector().getProperty("maxHttpHeaderSize")).intValue();
int headerCount = Math.min(count,
maxHttpHeaderSize / header.length() + 1);
int arraySize = 1;
diff --git a/test/org/apache/tomcat/util/net/TestCustomSsl.java b/test/org/apache/tomcat/util/net/TestCustomSsl.java
index 0411b6f..db104e0 100644
--- a/test/org/apache/tomcat/util/net/TestCustomSsl.java
+++ b/test/org/apache/tomcat/util/net/TestCustomSsl.java
@@ -60,8 +60,7 @@ public class TestCustomSsl extends TomcatBaseTest {
File keystoreFile =
new File("test/" + TesterSupport.LOCALHOST_JKS);
- connector.setAttribute(
- "keystoreFile", keystoreFile.getAbsolutePath());
+ Assert.assertTrue(connector.setProperty("keystoreFile", keystoreFile.getAbsolutePath()));
connector.setSecure(true);
connector.setProperty("SSLEnabled", "true");
@@ -110,8 +109,8 @@ public class TestCustomSsl extends TomcatBaseTest {
Assert.fail("Unexpected handler type");
}
if (serverTrustAll) {
- tomcat.getConnector().setAttribute("trustManagerClassName",
- "org.apache.tomcat.util.net.TesterSupport$TrustAllCerts");
+ Assert.assertTrue(tomcat.getConnector().setProperty("trustManagerClassName",
+ "org.apache.tomcat.util.net.TesterSupport$TrustAllCerts"));
}
// Start Tomcat
diff --git a/test/org/apache/tomcat/util/net/TesterSupport.java b/test/org/apache/tomcat/util/net/TesterSupport.java
index b402f24..2b14955 100644
--- a/test/org/apache/tomcat/util/net/TesterSupport.java
+++ b/test/org/apache/tomcat/util/net/TesterSupport.java
@@ -47,6 +47,8 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.junit.Assert;
+
import org.apache.catalina.Context;
import org.apache.catalina.authenticator.SSLAuthenticator;
import org.apache.catalina.connector.Connector;
@@ -127,33 +129,31 @@ public final class TesterSupport {
connector.setProperty("sslProtocol", "tls");
java.net.URL keyStoreUrl = cl.getResource(keystore);
File keystoreFile = toFile(keyStoreUrl);
- connector.setAttribute("keystoreFile",
- keystoreFile.getAbsolutePath());
+ Assert.assertTrue(connector.setProperty("keystoreFile", keystoreFile.getAbsolutePath()));
java.net.URL truststoreUrl = cl.getResource(CA_JKS);
File truststoreFile = toFile(truststoreUrl);
- connector.setAttribute("truststoreFile",
- truststoreFile.getAbsolutePath());
+ Assert.assertTrue(connector.setProperty("truststoreFile", truststoreFile.getAbsolutePath()));
if (keystorePass != null) {
- connector.setAttribute("keystorePass", keystorePass);
+ Assert.assertTrue(connector.setProperty("keystorePass", keystorePass));
}
if (keyPass != null) {
- connector.setAttribute("keyPass", keyPass);
+ Assert.assertTrue(connector.setProperty("keyPass", keyPass));
}
} else {
java.net.URL keyStoreUrl = cl.getResource(LOCALHOST_CERT_PEM);
File keystoreFile = toFile(keyStoreUrl);
- tomcat.getConnector().setAttribute("SSLCertificateFile",
- keystoreFile.getAbsolutePath());
+ Assert.assertTrue(tomcat.getConnector().setProperty("SSLCertificateFile",
+ keystoreFile.getAbsolutePath()));
java.net.URL sslCertificateKeyUrl = cl.getResource(LOCALHOST_KEY_PEM);
File sslCertificateKeyFile = toFile(sslCertificateKeyUrl);
- tomcat.getConnector().setAttribute("SSLCertificateKeyFile",
- sslCertificateKeyFile.getAbsolutePath());
+ Assert.assertTrue(tomcat.getConnector().setProperty("SSLCertificateKeyFile",
+ sslCertificateKeyFile.getAbsolutePath()));
java.net.URL caUrl = cl.getResource(TesterSupport.CA_CERT_PEM);
File caFile = toFile(caUrl);
- tomcat.getConnector().setAttribute("SSLCACertificateFile", caFile.getAbsolutePath());
+ Assert.assertTrue(tomcat.getConnector().setProperty("SSLCACertificateFile", caFile.getAbsolutePath()));
}
tomcat.getConnector().setSecure(true);
tomcat.getConnector().setProperty("SSLEnabled", "true");
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org