Author: markt
Date: Mon Aug 1 09:53:57 2016
New Revision: 1754718
URL: http://svn.apache.org/viewvc?rev=1754718&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=18500
The original request for regular expression support would be too expensive to
implement.
This commit adds support for wild card host names.
It adds overhead for requests where the Host header is not an exact match since
the code now has to convert the name in the header to the wild card form and
then search for that.
However, this overhead is offset by caching the default host so it is not
necessary to do a look up for the default host.
I've also expanded the performance tests. On my laptop the before and after
results are broadly similar with some small improvements and some small
increases.
Modified:
tomcat/tc8.5.x/trunk/ (props changed)
tomcat/tc8.5.x/trunk/java/org/apache/catalina/mapper/Mapper.java
tomcat/tc8.5.x/trunk/test/org/apache/catalina/mapper/TestMapper.java
tomcat/tc8.5.x/trunk/test/org/apache/catalina/mapper/TestMapperPerformance.java
tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml
tomcat/tc8.5.x/trunk/webapps/docs/config/host.xml
Propchange: tomcat/tc8.5.x/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Aug 1 09:53:57 2016
@@ -1 +1 @@
-/tomcat/trunk:1734785,1734799,1734845,1734928,1735041,1735044,1735480,1735577,1735597,1735599-1735600,1735615,1736145,1736162,1736209,1736280,1736297,1736299,1736489,1736646,1736703,1736836,1736849,1737104-1737105,1737112,1737117,1737119-1737120,1737155,1737157,1737192,1737280,1737339,1737632,1737664,1737715,1737748,1737785,1737834,1737860,1737903,1737959,1738005,1738007,1738014-1738015,1738018,1738022,1738039,1738043,1738059-1738060,1738147,1738149,1738174-1738175,1738261,1738589,1738623-1738625,1738643,1738816,1738850,1738855,1738946-1738948,1738953-1738954,1738979,1738982,1739079-1739081,1739087,1739113,1739153,1739172,1739176,1739191,1739474,1739726,1739762,1739775,1739814,1739817-1739818,1739975,1740131,1740324,1740465,1740495,1740508-1740509,1740520,1740535,1740707,1740803,1740810,1740969,1740980,1740991,1740997,1741015,1741033,1741036,1741058,1741060,1741080,1741147,1741159,1741164,1741173,1741181,1741190,1741197,1741202,1741208,1741213,1741221,1741225,1741232,1741409,1741501
,1741677,1741892,1741896,1741984,1742023,1742042,1742071,1742090,1742093,1742101,1742105,1742111,1742139,1742146,1742148,1742166,1742181,1742184,1742187,1742246,1742248-1742251,1742263-1742264,1742268,1742276,1742369,1742387,1742448,1742509-1742512,1742917,1742919,1742933,1742975-1742976,1742984,1742986,1743019,1743115,1743117,1743124-1743125,1743134,1743425,1743554,1743679,1743696-1743698,1743700-1743701,1744058,1744064-1744065,1744125,1744194,1744229,1744270,1744323,1744432,1744684,1744697,1744705,1744713,1744760,1744786,1745083,1745142-1745143,1745145,1745177,1745179-1745180,1745227,1745248,1745254,1745337,1745467,1745473,1745576,1745735,1745744,1746304,1746306-1746307,1746319,1746327,1746338,1746340-1746341,1746344,1746427,1746441,1746473,1746490,1746492,1746495-1746496,1746499-1746501,1746503-1746507,1746509,1746549,1746551,1746554,1746556,1746558,1746584,1746620,1746649,1746724,1746939,1746989,1747014,1747028,1747035,1747210,1747225,1747234,1747253,1747404,1747506,1747536,1747
924,1747980,1747993,1748001,1748253,1748452,1748547,1748629,1748676,1748715,1749287,1749296,1749328,1749373,1749465,1749506,1749508,1749665-1749666,1749763,1749865-1749866,1749898,1749978,1749980,1750011,1750015,1750056,1750480,1750617,1750634,1750692,1750697,1750700,1750703,1750707,1750714,1750718,1750723,1750899,1750975,1750995,1751061,1751097,1751438,1751447,1751463,1751702,1752212,1752737,1752745,1753358,1753363,1754111,1754140-1754141,1754281,1754310,1754467,1754613
+/tomcat/trunk:1734785,1734799,1734845,1734928,1735041,1735044,1735480,1735577,1735597,1735599-1735600,1735615,1736145,1736162,1736209,1736280,1736297,1736299,1736489,1736646,1736703,1736836,1736849,1737104-1737105,1737112,1737117,1737119-1737120,1737155,1737157,1737192,1737280,1737339,1737632,1737664,1737715,1737748,1737785,1737834,1737860,1737903,1737959,1738005,1738007,1738014-1738015,1738018,1738022,1738039,1738043,1738059-1738060,1738147,1738149,1738174-1738175,1738261,1738589,1738623-1738625,1738643,1738816,1738850,1738855,1738946-1738948,1738953-1738954,1738979,1738982,1739079-1739081,1739087,1739113,1739153,1739172,1739176,1739191,1739474,1739726,1739762,1739775,1739814,1739817-1739818,1739975,1740131,1740324,1740465,1740495,1740508-1740509,1740520,1740535,1740707,1740803,1740810,1740969,1740980,1740991,1740997,1741015,1741033,1741036,1741058,1741060,1741080,1741147,1741159,1741164,1741173,1741181,1741190,1741197,1741202,1741208,1741213,1741221,1741225,1741232,1741409,1741501
,1741677,1741892,1741896,1741984,1742023,1742042,1742071,1742090,1742093,1742101,1742105,1742111,1742139,1742146,1742148,1742166,1742181,1742184,1742187,1742246,1742248-1742251,1742263-1742264,1742268,1742276,1742369,1742387,1742448,1742509-1742512,1742917,1742919,1742933,1742975-1742976,1742984,1742986,1743019,1743115,1743117,1743124-1743125,1743134,1743425,1743554,1743679,1743696-1743698,1743700-1743701,1744058,1744064-1744065,1744125,1744194,1744229,1744270,1744323,1744432,1744684,1744697,1744705,1744713,1744760,1744786,1745083,1745142-1745143,1745145,1745177,1745179-1745180,1745227,1745248,1745254,1745337,1745467,1745473,1745576,1745735,1745744,1746304,1746306-1746307,1746319,1746327,1746338,1746340-1746341,1746344,1746427,1746441,1746473,1746490,1746492,1746495-1746496,1746499-1746501,1746503-1746507,1746509,1746549,1746551,1746554,1746556,1746558,1746584,1746620,1746649,1746724,1746939,1746989,1747014,1747028,1747035,1747210,1747225,1747234,1747253,1747404,1747506,1747536,1747
924,1747980,1747993,1748001,1748253,1748452,1748547,1748629,1748676,1748715,1749287,1749296,1749328,1749373,1749465,1749506,1749508,1749665-1749666,1749763,1749865-1749866,1749898,1749978,1749980,1750011,1750015,1750056,1750480,1750617,1750634,1750692,1750697,1750700,1750703,1750707,1750714,1750718,1750723,1750899,1750975,1750995,1751061,1751097,1751173,1751438,1751447,1751463,1751702,1752212,1752737,1752745,1753358,1753363,1754111,1754140-1754141,1754281,1754310,1754467,1754613
Modified: tomcat/tc8.5.x/trunk/java/org/apache/catalina/mapper/Mapper.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/catalina/mapper/Mapper.java?rev=1754718&r1=1754717&r2=1754718&view=diff
==============================================================================
--- tomcat/tc8.5.x/trunk/java/org/apache/catalina/mapper/Mapper.java (original)
+++ tomcat/tc8.5.x/trunk/java/org/apache/catalina/mapper/Mapper.java Mon Aug 1
09:53:57 2016
@@ -65,6 +65,7 @@ public final class Mapper {
* Default host name.
*/
private String defaultHostName = null;
+ private volatile MappedHost defaultHost = null;
/**
@@ -82,10 +83,16 @@ public final class Mapper {
*
* @param defaultHostName Default host name
*/
- public void setDefaultHostName(String defaultHostName) {
- this.defaultHostName = defaultHostName;
+ public synchronized void setDefaultHostName(String defaultHostName) {
+ this.defaultHostName = renameWildcardHost(defaultHostName);
+ if (this.defaultHostName == null) {
+ defaultHost = null;
+ } else {
+ defaultHost = exactFind(hosts, this.defaultHostName);
+ }
}
+
/**
* Add a new host to the mapper.
*
@@ -95,10 +102,14 @@ public final class Mapper {
*/
public synchronized void addHost(String name, String[] aliases,
Host host) {
+ name = renameWildcardHost(name);
MappedHost[] newHosts = new MappedHost[hosts.length + 1];
MappedHost newHost = new MappedHost(name, host);
if (insertMap(hosts, newHosts, newHost)) {
hosts = newHosts;
+ if (newHost.name.equals(defaultHostName)) {
+ defaultHost = newHost;
+ }
if (log.isDebugEnabled()) {
log.debug(sm.getString("mapper.addHost.success", name));
}
@@ -121,6 +132,7 @@ public final class Mapper {
}
List<MappedHost> newAliases = new ArrayList<>(aliases.length);
for (String alias : aliases) {
+ alias = renameWildcardHost(alias);
MappedHost newAlias = new MappedHost(alias, newHost);
if (addHostAliasImpl(newAlias)) {
newAliases.add(newAlias);
@@ -136,6 +148,7 @@ public final class Mapper {
* @param name Virtual host name
*/
public synchronized void removeHost(String name) {
+ name = renameWildcardHost(name);
// Find and remove the old host
MappedHost host = exactFind(hosts, name);
if (host == null || host.isAlias()) {
@@ -164,6 +177,7 @@ public final class Mapper {
// just in case...
return;
}
+ alias = renameWildcardHost(alias);
MappedHost newAlias = new MappedHost(alias, realHost);
if (addHostAliasImpl(newAlias)) {
realHost.addAlias(newAlias);
@@ -174,6 +188,9 @@ public final class Mapper {
MappedHost[] newHosts = new MappedHost[hosts.length + 1];
if (insertMap(hosts, newHosts, newAlias)) {
hosts = newHosts;
+ if (newAlias.name.equals(defaultHostName)) {
+ defaultHost = newAlias;
+ }
if (log.isDebugEnabled()) {
log.debug(sm.getString("mapper.addHostAlias.success",
newAlias.name, newAlias.getRealHostName()));
@@ -202,6 +219,7 @@ public final class Mapper {
* @param alias The alias to remove
*/
public synchronized void removeHostAlias(String alias) {
+ alias = renameWildcardHost(alias);
// Find and remove the alias
MappedHost hostMapping = exactFind(hosts, alias);
if (hostMapping == null || !hostMapping.isAlias()) {
@@ -244,6 +262,8 @@ public final class Mapper {
String version, Context context, String[] welcomeResources,
WebResourceRoot resources, Collection<WrapperMappingInfo>
wrappers) {
+ hostName = renameWildcardHost(hostName);
+
MappedHost mappedHost = exactFind(hosts, hostName);
if (mappedHost == null) {
addHost(hostName, new String[0], host);
@@ -308,6 +328,7 @@ public final class Mapper {
public void removeContextVersion(Context ctxt, String hostName,
String path, String version) {
+ hostName = renameWildcardHost(hostName);
contextObjectToContextVersionMap.remove(ctxt);
MappedHost host = exactFind(hosts, hostName);
@@ -351,7 +372,7 @@ public final class Mapper {
*/
public void pauseContextVersion(Context ctxt, String hostName,
String contextPath, String version) {
-
+ hostName = renameWildcardHost(hostName);
ContextVersion contextVersion = findContextVersion(hostName,
contextPath, version, true);
if (contextVersion == null || !ctxt.equals(contextVersion.object)) {
@@ -393,6 +414,7 @@ public final class Mapper {
public void addWrapper(String hostName, String contextPath, String version,
String path, Wrapper wrapper, boolean jspWildCard,
boolean resourceOnly) {
+ hostName = renameWildcardHost(hostName);
ContextVersion contextVersion = findContextVersion(hostName,
contextPath, version, false);
if (contextVersion == null) {
@@ -403,6 +425,7 @@ public final class Mapper {
public void addWrappers(String hostName, String contextPath,
String version, Collection<WrapperMappingInfo> wrappers) {
+ hostName = renameWildcardHost(hostName);
ContextVersion contextVersion = findContextVersion(hostName,
contextPath, version, false);
if (contextVersion == null) {
@@ -503,6 +526,7 @@ public final class Mapper {
*/
public void removeWrapper(String hostName, String contextPath,
String version, String path) {
+ hostName = renameWildcardHost(hostName);
ContextVersion contextVersion = findContextVersion(hostName,
contextPath, version, true);
if (contextVersion == null || contextVersion.isPaused()) {
@@ -587,6 +611,7 @@ public final class Mapper {
*/
public void addWelcomeFile(String hostName, String contextPath, String
version,
String welcomeFile) {
+ hostName = renameWildcardHost(hostName);
ContextVersion contextVersion = findContextVersion(hostName,
contextPath, version, false);
if (contextVersion == null) {
return;
@@ -609,6 +634,7 @@ public final class Mapper {
*/
public void removeWelcomeFile(String hostName, String contextPath,
String version, String welcomeFile) {
+ hostName = renameWildcardHost(hostName);
ContextVersion contextVersion = findContextVersion(hostName,
contextPath, version, false);
if (contextVersion == null || contextVersion.isPaused()) {
return;
@@ -641,6 +667,7 @@ public final class Mapper {
* @param version The version of the context to be cleared
*/
public void clearWelcomeFiles(String hostName, String contextPath, String
version) {
+ hostName = renameWildcardHost(hostName);
ContextVersion contextVersion = findContextVersion(hostName,
contextPath, version, false);
if (contextVersion == null) {
return;
@@ -719,12 +746,24 @@ public final class Mapper {
MappedHost[] hosts = this.hosts;
MappedHost mappedHost = exactFindIgnoreCase(hosts, host);
if (mappedHost == null) {
- if (defaultHostName == null) {
- return;
+ // Note: Internally, the Mapper does not use the leading * on a
+ // wildcard host. This is to allow this shortcut.
+ int firstDot = host.indexOf('.');
+ if (firstDot > -1) {
+ int offset = host.getOffset();
+ try {
+ host.setOffset(firstDot + offset);
+ mappedHost = exactFindIgnoreCase(hosts, host);
+ } finally {
+ // Make absolutely sure this gets reset
+ host.setOffset(offset);
+ }
}
- mappedHost = exactFind(hosts, defaultHostName);
if (mappedHost == null) {
- return;
+ mappedHost = defaultHost;
+ if (mappedHost == null) {
+ return;
+ }
}
}
mappingData.host = mappedHost.object;
@@ -1496,6 +1535,22 @@ public final class Mapper {
}
+ /*
+ * To simplify the mapping process, wild card hosts take the form
+ * ".apache.org" rather than "*.apache.org" internally. However, for ease
+ * of use the external form remains "*.apache.org". Any host name passed
+ * into this class needs to be passed through this method to rename and
+ * wild card host names from the external to internal form.
+ */
+ private static String renameWildcardHost(String hostName) {
+ if (hostName.startsWith("*.")) {
+ return hostName.substring(1);
+ } else {
+ return hostName;
+ }
+ }
+
+
// ------------------------------------------------- MapElement Inner Class
Modified: tomcat/tc8.5.x/trunk/test/org/apache/catalina/mapper/TestMapper.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/test/org/apache/catalina/mapper/TestMapper.java?rev=1754718&r1=1754717&r2=1754718&view=diff
==============================================================================
--- tomcat/tc8.5.x/trunk/test/org/apache/catalina/mapper/TestMapper.java
(original)
+++ tomcat/tc8.5.x/trunk/test/org/apache/catalina/mapper/TestMapper.java Mon
Aug 1 09:53:57 2016
@@ -88,6 +88,9 @@ public class TestMapper extends LoggingB
mapper.addHost("zzzuyopjvewpovewjhfewoih", new String[0],
createHost("blah12"));
mapper.addHost("xxxxgqwiwoih", new String[0], createHost("blah13"));
mapper.addHost("qwigqwiwoih", new String[0], createHost("blah14"));
+ mapper.addHost("qwerty.net", new String[0], createHost("blah15"));
+ mapper.addHost("*.net", new String[0], createHost("blah16"));
+ mapper.addHost("zzz.com", new String[0], createHost("blah17"));
mapper.addHostAlias("iowejoiejfoiew", "iowejoiejfoiew_alias");
mapper.setDefaultHostName("ylwrehirkuewh");
@@ -135,6 +138,14 @@ public class TestMapper extends LoggingB
null,
Arrays.asList(new WrapperMappingInfo[] { new
WrapperMappingInfo(
"/bobou/*", createWrapper("wrapper7"), false, false)
}));
+
+ host = createHost("blah16");
+ mapper.addContextVersion("*.net", host, "", "0",
createContext("context4"),
+ new String[0], null, null);
+ mapper.addWrappers("*.net", "", "0", Arrays
+ .asList(new WrapperMappingInfo[] {
+ new WrapperMappingInfo("/",
+ createWrapper("context4-defaultWrapper"),
false, false) }));
}
@Test
@@ -153,14 +164,14 @@ public class TestMapper extends LoggingB
mapper.addHostAlias("iowejoiejfoiew", "iowejoiejfoiew_alias");
// Check we have the right number
- // (added 16 including one host alias. Three duplicates do not
increase the count.)
- assertEquals(16, mapper.hosts.length);
+ // (added 17 including one host alias. Three duplicates do not
increase the count.)
+ assertEquals(19, mapper.hosts.length);
// Make sure adding a duplicate *does not* overwrite
- final int iowPos = 3;
+ final int iowPos = 4;
assertEquals("blah7", mapper.hosts[iowPos].object.getName());
- final int qwigPos = 8;
+ final int qwigPos = 10;
assertEquals("blah14", mapper.hosts[qwigPos].object.getName());
// Check for alphabetical order of host names
@@ -185,38 +196,38 @@ public class TestMapper extends LoggingB
Host hostZ = createHost("zzzz");
Context contextZ = createContext("contextZ");
- assertEquals(16, mapper.hosts.length);
+ assertEquals(19, mapper.hosts.length);
mapper.addContextVersion("zzzz", hostZ, "/", "", contextZ, null, null,
null);
- assertEquals(17, mapper.hosts.length);
+ assertEquals(20, mapper.hosts.length);
mapper.addHost("zzzz", new String[] { "zzzz_alias1", "zzzz_alias2" },
hostZ);
- assertEquals(19, mapper.hosts.length);
+ assertEquals(22, mapper.hosts.length);
- assertEquals("zzzz", mapper.hosts[16].name);
- assertEquals("zzzz_alias1", mapper.hosts[17].name);
- assertEquals("zzzz_alias2", mapper.hosts[18].name);
- assertEquals(2, mapper.hosts[16].getAliases().size());
+ assertEquals("zzzz", mapper.hosts[19].name);
+ assertEquals("zzzz_alias1", mapper.hosts[20].name);
+ assertEquals("zzzz_alias2", mapper.hosts[21].name);
+ assertEquals(2, mapper.hosts[19].getAliases().size());
assertSame(contextZ,
- mapper.hosts[16].contextList.contexts[0].versions[0].object);
+ mapper.hosts[19].contextList.contexts[0].versions[0].object);
assertSame(contextZ,
- mapper.hosts[18].contextList.contexts[0].versions[0].object);
+ mapper.hosts[21].contextList.contexts[0].versions[0].object);
}
@Test
public void testRemoveHost() {
- assertEquals(16, mapper.hosts.length);
+ assertEquals(19, mapper.hosts.length);
mapper.removeHostAlias("iowejoiejfoiew");
mapper.removeHost("iowejoiejfoiew_alias");
- assertEquals(16, mapper.hosts.length); // No change
+ assertEquals(19, mapper.hosts.length); // No change
mapper.removeHostAlias("iowejoiejfoiew_alias");
- assertEquals(15, mapper.hosts.length); // Removed
+ assertEquals(18, mapper.hosts.length); // Removed
mapper.addHostAlias("iowejoiejfoiew", "iowejoiejfoiew_alias");
- assertEquals(16, mapper.hosts.length);
+ assertEquals(19, mapper.hosts.length);
- final int iowPos = 3;
+ final int iowPos = 4;
Mapper.MappedHost hostMapping = mapper.hosts[iowPos];
Mapper.MappedHost aliasMapping = mapper.hosts[iowPos + 1];
assertEquals("iowejoiejfoiew_alias", aliasMapping.name);
@@ -229,7 +240,7 @@ public class TestMapper extends LoggingB
assertSame(hostMapping, aliasMapping.getRealHost());
mapper.removeHost("iowejoiejfoiew");
- assertEquals(14, mapper.hosts.length); // Both host and alias removed
+ assertEquals(17, mapper.hosts.length); // Both host and alias removed
for (Mapper.MappedHost host : mapper.hosts) {
assertTrue(host.name, !host.name.startsWith("iowejoiejfoiew"));
}
@@ -240,6 +251,8 @@ public class TestMapper extends LoggingB
MappingData mappingData = new MappingData();
MessageBytes host = MessageBytes.newInstance();
host.setString("iowejoiejfoiew");
+ MessageBytes wildcard = MessageBytes.newInstance();
+ wildcard.setString("foo.net");
MessageBytes alias = MessageBytes.newInstance();
alias.setString("iowejoiejfoiew_alias");
MessageBytes uri = MessageBytes.newInstance();
@@ -271,6 +284,20 @@ public class TestMapper extends LoggingB
assertTrue(mappingData.redirectPath.isNull());
mappingData.recycle();
+ uri.recycle();
+ uri.setString("/foo/bar/bla/bobou/foo");
+ uri.toChars();
+ uri.getCharChunk().setLimit(-1);
+ mapper.map(wildcard, uri, null, mappingData);
+ assertEquals("blah16", mappingData.host.getName());
+ assertEquals("context4", mappingData.context.getName());
+ assertEquals("context4-defaultWrapper", mappingData.wrapper.getName());
+ assertEquals("", mappingData.contextPath.toString());
+ assertEquals("/foo/bar/bla/bobou/foo",
mappingData.wrapperPath.toString());
+ assertTrue(mappingData.pathInfo.isNull());
+ assertTrue(mappingData.redirectPath.isNull());
+
+ mappingData.recycle();
uri.setString("/foo/bar/bla/bobou/foo");
uri.toChars();
uri.getCharChunk().setLimit(-1);
@@ -287,7 +314,7 @@ public class TestMapper extends LoggingB
@Test
public void testAddRemoveContextVersion() throws Exception {
final String hostName = "iowejoiejfoiew";
- final int iowPos = 3;
+ final int iowPos = 4;
final String contextPath = "/foo/bar";
final int contextPos = 2;
@@ -394,7 +421,7 @@ public class TestMapper extends LoggingB
@Test
public void testReloadContextVersion() throws Exception {
final String hostName = "iowejoiejfoiew";
- final int iowPos = 3;
+ final int iowPos = 4;
final String contextPath = "/foo/bar";
final int contextPos = 2;
Modified:
tomcat/tc8.5.x/trunk/test/org/apache/catalina/mapper/TestMapperPerformance.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/test/org/apache/catalina/mapper/TestMapperPerformance.java?rev=1754718&r1=1754717&r2=1754718&view=diff
==============================================================================
---
tomcat/tc8.5.x/trunk/test/org/apache/catalina/mapper/TestMapperPerformance.java
(original)
+++
tomcat/tc8.5.x/trunk/test/org/apache/catalina/mapper/TestMapperPerformance.java
Mon Aug 1 09:53:57 2016
@@ -26,24 +26,42 @@ public class TestMapperPerformance exten
@Test
public void testPerformance() throws Exception {
+ String[] requestedHostNames = new String[] {
+ "xxxxxxxxxxx",
+ "iowejoiejfoiew",
+ "iowejoiejfoiex",
+ "owefojiwefoi",
+ "owefojiwefoix",
+ "qwerty.net",
+ "foo.net",
+ "zzz.com",
+ "abc.com"};
+
+ for (String requestedHostName : requestedHostNames) {
+ testPerformance(requestedHostName);
+ }
+ }
+
+ private void testPerformance(String requestedHostName) throws Exception {
// Takes ~1s on markt's laptop. If this takes more than 5s something
// probably needs looking at. If this fails repeatedly then we may need
// to increase this limit.
final long maxTime = 5000;
- long time = testPerformanceImpl();
+ long time = testPerformanceImpl(requestedHostName);
+ log.info("Host [" + requestedHostName + "], Time [" + time + "]ms");
if (time >= maxTime) {
// Rerun to reject occasional failures, e.g. because of gc
log.warn("testPerformance() test completed in " + time + " ms");
- time = testPerformanceImpl();
+ time = testPerformanceImpl(requestedHostName);
log.warn("testPerformance() test rerun completed in " + time + "
ms");
}
assertTrue(String.valueOf(time), time < maxTime);
}
- private long testPerformanceImpl() throws Exception {
+ private long testPerformanceImpl(String requestedHostName) throws
Exception {
MappingData mappingData = new MappingData();
MessageBytes host = MessageBytes.newInstance();
- host.setString("iowejoiejfoiew");
+ host.setString(requestedHostName);
MessageBytes uri = MessageBytes.newInstance();
uri.setString("/foo/bar/blah/bobou/foo");
uri.toChars();
Modified: tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml?rev=1754718&r1=1754717&r2=1754718&view=diff
==============================================================================
--- tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml Mon Aug 1 09:53:57 2016
@@ -48,6 +48,12 @@
<subsection name="Catalina">
<changelog>
<fix>
+ <bug>18500</bug>: Add limited support for wildcard host names and host
+ aliases. Names of the form <code>*.domainname</code> are now permitted.
+ Note that an exact host name match takes precedence over a wild card
+ host name match. (markt)
+ </fix>
+ <fix>
<bug>59813</bug>: Ensure that circular relations of the Class-Path
attribute from JAR manifests will be processed correctly. (violetagg)
</fix>
Modified: tomcat/tc8.5.x/trunk/webapps/docs/config/host.xml
URL:
http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/webapps/docs/config/host.xml?rev=1754718&r1=1754717&r2=1754718&view=diff
==============================================================================
--- tomcat/tc8.5.x/trunk/webapps/docs/config/host.xml (original)
+++ tomcat/tc8.5.x/trunk/webapps/docs/config/host.xml Mon Aug 1 09:53:57 2016
@@ -192,7 +192,10 @@
have a name that matches the <code>defaultHost</code> setting for that
Engine. See <a href="#Host_Name_Aliases">Host Name Aliases</a> for
information on how to assign more than one network name to the same
- virtual host.</p>
+ virtual host. If the name takes the form of <code>*.domainname</code>
+ (e.g. <code>*.apache.org</code>) then it will be treated as a match for
+ any host in that domain unless a host that has an exactly matching name
+ is found.</p>
</attribute>
<attribute name="startStopThreads" required="false">
@@ -476,6 +479,10 @@
involved must be registered in your DNS server to resolve to the
same computer that is running this instance of Catalina.</p>
+ <p>Aliases may also use the wildcard form (<code>*.domainname</code>)
+ permitted for the <strong>name</strong> attribute of a
+ <strong>Host</strong>.</p>
+
</subsection>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]