diff --git java/org/apache/catalina/loader/WebappLoader.java java/org/apache/catalina/loader/WebappLoader.java
index 6c1e9ec..3e4ebdc 100644
--- java/org/apache/catalina/loader/WebappLoader.java
+++ java/org/apache/catalina/loader/WebappLoader.java
@@ -57,7 +57,7 @@ import org.apache.catalina.core.StandardContext;
import org.apache.catalina.mbeans.MBeanUtils;
import org.apache.catalina.util.LifecycleMBeanBase;
import org.apache.naming.resources.DirContextURLStreamHandler;
-import org.apache.naming.resources.DirContextURLStreamHandlerFactory;
+import org.apache.naming.resources.TomcatURLStreamHandlerFactory;
import org.apache.naming.resources.Resource;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.modeler.Registry;
@@ -560,7 +560,7 @@ public class WebappLoader extends LifecycleMBeanBase
// Register a stream handler factory for the JNDI protocol
URLStreamHandlerFactory streamHandlerFactory =
- DirContextURLStreamHandlerFactory.getInstance();
+ TomcatURLStreamHandlerFactory.getInstance();
if (first) {
first = false;
try {
diff --git java/org/apache/catalina/realm/MemoryRealm.java java/org/apache/catalina/realm/MemoryRealm.java
index b8776de..0baf646 100644
--- java/org/apache/catalina/realm/MemoryRealm.java
+++ java/org/apache/catalina/realm/MemoryRealm.java
@@ -19,17 +19,18 @@
package org.apache.catalina.realm;
-import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
import java.security.Principal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
-import org.apache.catalina.Globals;
import org.apache.catalina.LifecycleException;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.digester.Digester;
+import org.apache.tomcat.util.file.ConfigFileLoader;
/**
@@ -282,30 +283,42 @@ public class MemoryRealm extends RealmBase {
@Override
protected void startInternal() throws LifecycleException {
- // Validate the existence of our database file
- File file = new File(pathname);
- if (!file.isAbsolute())
- file = new File(System.getProperty(Globals.CATALINA_BASE_PROP), pathname);
- if (!file.exists() || !file.canRead())
- throw new LifecycleException
- (sm.getString("memoryRealm.loadExist",
- file.getAbsolutePath()));
-
- // Load the contents of the database file
- if (log.isDebugEnabled())
- log.debug(sm.getString("memoryRealm.loadPath",
- file.getAbsolutePath()));
- Digester digester = getDigester();
+ String pathName = getPathname();
+ InputStream is = null;
+
try {
- synchronized (digester) {
- digester.push(this);
- digester.parse(file);
+ is = ConfigFileLoader.getInputStream(pathName);
+
+ // Load the contents of the database file
+ if (log.isDebugEnabled()) {
+ log.debug(sm.getString("memoryRealm.loadPath", pathName));
}
- } catch (Exception e) {
- throw new LifecycleException
- (sm.getString("memoryRealm.readXml"), e);
+
+ Digester digester = getDigester();
+ try {
+ synchronized (digester) {
+ digester.push(this);
+ digester.parse(is);
+ }
+ } catch (Exception e) {
+ throw new LifecycleException
+ (sm.getString("memoryRealm.readXml"), e);
+ } finally {
+ digester.reset();
+ }
+
+ } catch (IOException ioe) {
+ throw new LifecycleException(sm.getString("memoryRealm.loadExist",
+ pathName), ioe);
+
} finally {
- digester.reset();
+ if (is != null) {
+ try {
+ is.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
}
super.startInternal();
diff --git java/org/apache/catalina/users/MemoryUserDatabase.java java/org/apache/catalina/users/MemoryUserDatabase.java
index 4395e36..7ca6d78 100644
--- java/org/apache/catalina/users/MemoryUserDatabase.java
+++ java/org/apache/catalina/users/MemoryUserDatabase.java
@@ -17,9 +17,9 @@
package org.apache.catalina.users;
import java.io.File;
-import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.HashMap;
@@ -34,6 +34,7 @@ import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.digester.AbstractObjectCreationFactory;
import org.apache.tomcat.util.digester.Digester;
+import org.apache.tomcat.util.file.ConfigFileLoader;
import org.apache.tomcat.util.res.StringManager;
import org.xml.sax.Attributes;
@@ -394,52 +395,44 @@ public class MemoryUserDatabase implements UserDatabase {
groups.clear();
roles.clear();
- // Construct a reader for the XML input file (if it exists)
- File file = new File(pathname);
- if (!file.isAbsolute()) {
- file = new File(System.getProperty(Globals.CATALINA_BASE_PROP),
- pathname);
- }
- if (!file.exists()) {
- log.error(sm.getString("memoryUserDatabase.fileNotFound",
- file.getAbsolutePath()));
- return;
- }
+ String pathName = getPathname();
+ InputStream is = null;
- // Construct a digester to read the XML input file
- Digester digester = new Digester();
- try {
- digester.setFeature(
- "http://apache.org/xml/features/allow-java-encodings",
- true);
- } catch (Exception e) {
- log.warn(sm.getString("memoryUserDatabase.xmlFeatureEncoding"), e);
- }
- digester.addFactoryCreate
- ("tomcat-users/group",
- new MemoryGroupCreationFactory(this), true);
- digester.addFactoryCreate
- ("tomcat-users/role",
- new MemoryRoleCreationFactory(this), true);
- digester.addFactoryCreate
- ("tomcat-users/user",
- new MemoryUserCreationFactory(this), true);
-
- // Parse the XML input file to load this database
- FileInputStream fis = null;
try {
- fis = new FileInputStream(file);
- digester.parse(fis);
+ is = ConfigFileLoader.getInputStream(pathName);
+
+ // Construct a digester to read the XML input file
+ Digester digester = new Digester();
+ try {
+ digester.setFeature(
+ "http://apache.org/xml/features/allow-java-encodings",
+ true);
+ } catch (Exception e) {
+ log.warn(sm.getString("memoryUserDatabase.xmlFeatureEncoding"), e);
+ }
+ digester.addFactoryCreate
+ ("tomcat-users/group",
+ new MemoryGroupCreationFactory(this), true);
+ digester.addFactoryCreate
+ ("tomcat-users/role",
+ new MemoryRoleCreationFactory(this), true);
+ digester.addFactoryCreate
+ ("tomcat-users/user",
+ new MemoryUserCreationFactory(this), true);
+
+ // Parse the XML input to load this database
+ digester.parse(is);
+ } catch (IOException ioe) {
+ log.error(sm.getString("memoryUserDatabase.fileNotFound", pathName));
} finally {
- if (fis != null) {
+ if (is != null) {
try {
- fis.close();
+ is.close();
} catch (IOException ioe) {
// Ignore
}
}
}
-
}
}
diff --git java/org/apache/naming/resources/ClasspathURLStreamHandler.java java/org/apache/naming/resources/ClasspathURLStreamHandler.java
new file mode 100644
index 0000000..25b56f9
--- /dev/null
+++ java/org/apache/naming/resources/ClasspathURLStreamHandler.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.naming.resources;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+
+import org.apache.tomcat.util.res.StringManager;
+
+public class ClasspathURLStreamHandler extends URLStreamHandler {
+
+ private static final StringManager sm =
+ StringManager.getManager(Constants.Package);
+
+
+ @Override
+ protected URLConnection openConnection(URL u) throws IOException {
+ String path = u.getPath();
+
+ // Thread context class loader first
+ URL classpathUrl = Thread.currentThread().getContextClassLoader().getResource(path);
+ if (classpathUrl == null) {
+ // This class's class loader if no joy with the tccl
+ classpathUrl = ClasspathURLStreamHandler.class.getResource(path);
+ }
+
+ if (classpathUrl == null) {
+ throw new FileNotFoundException(sm.getString("classpathUrlStreamHandler.notFound", u));
+ }
+
+ return classpathUrl.openConnection();
+ }
+}
diff --git java/org/apache/naming/resources/DirContextURLStreamHandlerFactory.java java/org/apache/naming/resources/DirContextURLStreamHandlerFactory.java
deleted file mode 100644
index bf41555..0000000
--- java/org/apache/naming/resources/DirContextURLStreamHandlerFactory.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.naming.resources;
-
-import java.net.URLStreamHandler;
-import java.net.URLStreamHandlerFactory;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-/**
- * Factory for Stream handlers to a JNDI directory context that also supports
- * users specifying additional stream handler.
- *
- * @author Remy Maucherat
- */
-public class DirContextURLStreamHandlerFactory
- implements URLStreamHandlerFactory {
-
- // Singleton
- private static DirContextURLStreamHandlerFactory instance =
- new DirContextURLStreamHandlerFactory();
-
- public static DirContextURLStreamHandlerFactory getInstance() {
- return instance;
- }
-
- public static void addUserFactory(URLStreamHandlerFactory factory) {
- instance.userFactories.add(factory);
- }
-
-
- private List userFactories =
- new CopyOnWriteArrayList();
-
- private DirContextURLStreamHandlerFactory() {
- // Hide the default constructor
- }
-
-
- /**
- * Creates a new URLStreamHandler instance with the specified protocol.
- * Will return null if the protocol is not jndi
.
- *
- * @param protocol the protocol (must be "jndi" here)
- * @return a URLStreamHandler for the jndi protocol, or null if the
- * protocol is not JNDI
- */
- @Override
- public URLStreamHandler createURLStreamHandler(String protocol) {
- if (protocol.equals("jndi")) {
- return new DirContextURLStreamHandler();
- } else {
- for (URLStreamHandlerFactory factory : userFactories) {
- URLStreamHandler handler =
- factory.createURLStreamHandler(protocol);
- if (handler != null) {
- return handler;
- }
- }
- return null;
- }
- }
-
-
-}
diff --git java/org/apache/naming/resources/LocalStrings.properties java/org/apache/naming/resources/LocalStrings.properties
index 4cc7cff..e18f90c 100644
--- java/org/apache/naming/resources/LocalStrings.properties
+++ java/org/apache/naming/resources/LocalStrings.properties
@@ -43,3 +43,4 @@ standardResources.exists=File base {0} does not exist
standardResources.notStarted=Resources has not yet been started
standardResources.null=Document base cannot be null
standardResources.slash=Document base {0} must not end with a slash
+classpathUrlStreamHandler.notFound=Unable to load the resource [{0}] using the thread context class loader or the current class's class loader
diff --git java/org/apache/naming/resources/TomcatURLStreamHandlerFactory.java java/org/apache/naming/resources/TomcatURLStreamHandlerFactory.java
new file mode 100644
index 0000000..02f4bb2
--- /dev/null
+++ java/org/apache/naming/resources/TomcatURLStreamHandlerFactory.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.naming.resources;
+
+import java.net.URLStreamHandler;
+import java.net.URLStreamHandlerFactory;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * Factory for Stream handlers to a JNDI directory context,
+ * or for Stream handlers to a classpath url,
+ * which also supports users specifying additional stream handler.
+ *
+ * @author Remy Maucherat
+ */
+public class TomcatURLStreamHandlerFactory
+ implements URLStreamHandlerFactory {
+
+ // Singleton
+ private static TomcatURLStreamHandlerFactory instance =
+ new TomcatURLStreamHandlerFactory();
+
+ public static TomcatURLStreamHandlerFactory getInstance() {
+ return instance;
+ }
+
+ public static void addUserFactory(URLStreamHandlerFactory factory) {
+ instance.userFactories.add(factory);
+ }
+
+
+ private List userFactories =
+ new CopyOnWriteArrayList();
+
+ private TomcatURLStreamHandlerFactory() {
+ // Hide the default constructor
+ }
+
+
+ /**
+ * Creates a new URLStreamHandler instance with the specified protocol.
+ * Will return null if the protocol is not jndi
.
+ *
+ * @param protocol the protocol (must be "jndi" here)
+ * @return a URLStreamHandler for the jndi protocol, or null if the
+ * protocol is not JNDI
+ */
+ @Override
+ public URLStreamHandler createURLStreamHandler(String protocol) {
+ if (protocol.equals("jndi")) {
+ return new DirContextURLStreamHandler();
+ } else if (protocol.equals("classpath")) {
+ return new ClasspathURLStreamHandler();
+ } else {
+ for (URLStreamHandlerFactory factory : userFactories) {
+ URLStreamHandler handler =
+ factory.createURLStreamHandler(protocol);
+ if (handler != null) {
+ return handler;
+ }
+ }
+ return null;
+ }
+ }
+
+
+}
diff --git java/org/apache/tomcat/util/file/ConfigFileLoader.java java/org/apache/tomcat/util/file/ConfigFileLoader.java
new file mode 100644
index 0000000..f0a2661
--- /dev/null
+++ java/org/apache/tomcat/util/file/ConfigFileLoader.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.tomcat.util.file;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URL;
+
+/**
+ * This class is used to obtain {@link InputStream}s for configuration files
+ * from a given location String. This allows greater flexibility than these
+ * files having to be loaded directly from a file system.
+ */
+public class ConfigFileLoader {
+
+ private static final URI CATALINA_BASE_URI;
+
+ static {
+ File catalinaBase = new File(System.getProperty("catalina.base"));
+ CATALINA_BASE_URI = catalinaBase.toURI();
+ }
+
+ private ConfigFileLoader() {
+ // Utility class. Hide the default constructor.
+ }
+
+
+ /**
+ * Load the resource from the specified location.
+ *
+ * @param location The location for the resource of interest. The location
+ * may be a URL or a file path. Relative paths will be
+ * resolved against CATALINA_BASE.
+ *
+ * @return The InputStream for the given resource. The caller is responsible
+ * for closing this stream when it is no longer used.
+ *
+ * @throws IOException If an InputStream cannot be created using the
+ * provided location
+ */
+ public static InputStream getInputStream(String location) throws IOException {
+
+ // Absolute URIs will be left alone
+ // Relative files will be resolved relative to catalina base
+ // Absolute files will be converted to URIs
+ URI uri = CATALINA_BASE_URI.resolve(location);
+ URL url = uri.toURL();
+
+ return url.openConnection().getInputStream();
+ }
+}
\ No newline at end of file
diff --git java/org/apache/tomcat/util/net/AbstractEndpoint.java java/org/apache/tomcat/util/net/AbstractEndpoint.java
index c4ad4ce..9f0349b 100644
--- java/org/apache/tomcat/util/net/AbstractEndpoint.java
+++ java/org/apache/tomcat/util/net/AbstractEndpoint.java
@@ -16,7 +16,6 @@
*/
package org.apache.tomcat.util.net;
-import java.io.File;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.InetSocketAddress;
@@ -728,25 +727,6 @@ public abstract class AbstractEndpoint {
}
}
-
- public String adjustRelativePath(String path, String relativeTo) {
- // Empty or null path can't point to anything useful. The assumption is
- // that the value is deliberately empty / null so leave it that way.
- if (path == null || path.length() == 0) {
- return path;
- }
- String newPath = path;
- File f = new File(newPath);
- if ( !f.isAbsolute()) {
- newPath = relativeTo + File.separator + newPath;
- f = new File(newPath);
- }
- if (!f.exists()) {
- getLog().warn("configured file:["+newPath+"] does not exist.");
- }
- return newPath;
- }
-
protected abstract Log getLog();
// Flags to indicate optional feature support
// Some of these are always hard-coded, some are hard-coded to false (i.e.
@@ -833,8 +813,7 @@ public abstract class AbstractEndpoint {
private String keystoreFile = System.getProperty("user.home")+"/.keystore";
public String getKeystoreFile() { return keystoreFile;}
public void setKeystoreFile(String s ) {
- keystoreFile = adjustRelativePath(s,
- System.getProperty(Constants.CATALINA_BASE_PROP));
+ keystoreFile = s;
}
private String keystorePass = null;
@@ -874,8 +853,7 @@ public abstract class AbstractEndpoint {
private String truststoreFile = System.getProperty("javax.net.ssl.trustStore");
public String getTruststoreFile() {return truststoreFile;}
public void setTruststoreFile(String s) {
- truststoreFile = adjustRelativePath(s,
- System.getProperty(Constants.CATALINA_BASE_PROP));
+ truststoreFile = s;
}
private String truststorePass =
diff --git java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java
index 7a4ade6..7cab87f 100644
--- java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java
+++ java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java
@@ -17,8 +17,6 @@
package org.apache.tomcat.util.net.jsse;
-import java.io.File;
-import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
@@ -63,6 +61,7 @@ import javax.net.ssl.X509KeyManager;
import org.apache.tomcat.util.compat.JreCompat;
import org.apache.tomcat.util.compat.JreVendor;
+import org.apache.tomcat.util.file.ConfigFileLoader;
import org.apache.tomcat.util.net.AbstractEndpoint;
import org.apache.tomcat.util.net.Constants;
import org.apache.tomcat.util.net.SSLUtil;
@@ -431,12 +430,7 @@ public class JSSESocketFactory implements ServerSocketFactory, SSLUtil {
}
if(!("PKCS11".equalsIgnoreCase(type) ||
"".equalsIgnoreCase(path))) {
- File keyStoreFile = new File(path);
- if (!keyStoreFile.isAbsolute()) {
- keyStoreFile = new File(System.getProperty(
- Constants.CATALINA_BASE_PROP), path);
- }
- istream = new FileInputStream(keyStoreFile);
+ istream = ConfigFileLoader.getInputStream(path);
}
char[] storePass = null;
@@ -718,16 +712,11 @@ public class JSSESocketFactory implements ServerSocketFactory, SSLUtil {
protected Collection extends CRL> getCRLs(String crlf)
throws IOException, CRLException, CertificateException {
- File crlFile = new File(crlf);
- if( !crlFile.isAbsolute() ) {
- crlFile = new File(
- System.getProperty(Constants.CATALINA_BASE_PROP), crlf);
- }
Collection extends CRL> crls = null;
InputStream is = null;
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
- is = new FileInputStream(crlFile);
+ is = ConfigFileLoader.getInputStream(crlf);
crls = cf.generateCRLs(is);
} catch(IOException iex) {
throw iex;
diff --git test/org/apache/naming/resources/TestClasspathUrlStreamHandler.java test/org/apache/naming/resources/TestClasspathUrlStreamHandler.java
new file mode 100644
index 0000000..fd5693f
--- /dev/null
+++ test/org/apache/naming/resources/TestClasspathUrlStreamHandler.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.naming.resources;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Properties;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class TestClasspathUrlStreamHandler {
+
+ @BeforeClass
+ public static void setup() {
+ URL.setURLStreamHandlerFactory(TomcatURLStreamHandlerFactory.getInstance());
+ }
+
+ @Test
+ public void testClasspathURL01() throws IOException {
+ URL u = new URL("classpath:/org/apache/naming/resources/LocalStrings.properties");
+ InputStream is = u.openStream();
+ Properties p = new Properties();
+ p.load(is);
+ String msg = (String) p.get("resources.null");
+ Assert.assertEquals("Document base cannot be null", msg);
+ }
+}
\ No newline at end of file
diff --git test/org/apache/naming/resources/TestDirContextURLStreamHandlerFactory.java test/org/apache/naming/resources/TestDirContextURLStreamHandlerFactory.java
deleted file mode 100644
index 73d46dc..0000000
--- test/org/apache/naming/resources/TestDirContextURLStreamHandlerFactory.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.naming.resources;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLStreamHandler;
-import java.net.URLStreamHandlerFactory;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-import org.junit.Test;
-
-public class TestDirContextURLStreamHandlerFactory {
-
- @Test
- public void testUserSuppliedFactory() throws Exception {
-
- URL url = null;
-
- // Initially unknown
- try {
- url = new URL("foo://www.apache.org");
- } catch (MalformedURLException ignore) {
- // Ignore
- }
- assertNull(url);
-
- // Set the factory
- URL.setURLStreamHandlerFactory(
- DirContextURLStreamHandlerFactory.getInstance());
-
- // Still unknown
- try {
- url = new URL("foo://www.apache.org");
- } catch (MalformedURLException ignore) {
- // Ignore
- }
- assertNull(url);
-
- // Register a user factory
- DirContextURLStreamHandlerFactory.addUserFactory(
- new FooURLStreamHandlerFactory());
-
- // Now it works
- try {
- url = new URL("foo://www.apache.org");
- } catch (MalformedURLException ignore) {
- // Ignore
- }
- assertNotNull(url);
- }
-
- public static class FooURLStreamHandlerFactory
- implements URLStreamHandlerFactory {
-
- @Override
- public URLStreamHandler createURLStreamHandler(String protocol) {
- if ("foo".equals(protocol)) {
- // This is good enough for this test but not for actual use
- return new DirContextURLStreamHandler();
- } else {
- return null;
- }
- }
- }
-}
diff --git test/org/apache/naming/resources/TestTomcatURLStreamHandlerFactory.java test/org/apache/naming/resources/TestTomcatURLStreamHandlerFactory.java
new file mode 100644
index 0000000..64cf7c4
--- /dev/null
+++ test/org/apache/naming/resources/TestTomcatURLStreamHandlerFactory.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.naming.resources;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLStreamHandler;
+import java.net.URLStreamHandlerFactory;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import org.junit.Test;
+
+public class TestTomcatURLStreamHandlerFactory {
+
+ @Test
+ public void testUserSuppliedFactory() throws Exception {
+
+ URL url = null;
+
+ // Initially unknown
+ try {
+ url = new URL("foo://www.apache.org");
+ } catch (MalformedURLException ignore) {
+ // Ignore
+ }
+ assertNull(url);
+
+ // Set the factory
+ URL.setURLStreamHandlerFactory(
+ TomcatURLStreamHandlerFactory.getInstance());
+
+ // Still unknown
+ try {
+ url = new URL("foo://www.apache.org");
+ } catch (MalformedURLException ignore) {
+ // Ignore
+ }
+ assertNull(url);
+
+ // Register a user factory
+ TomcatURLStreamHandlerFactory.addUserFactory(
+ new FooURLStreamHandlerFactory());
+
+ // Now it works
+ try {
+ url = new URL("foo://www.apache.org");
+ } catch (MalformedURLException ignore) {
+ // Ignore
+ }
+ assertNotNull(url);
+ }
+
+ public static class FooURLStreamHandlerFactory
+ implements URLStreamHandlerFactory {
+
+ @Override
+ public URLStreamHandler createURLStreamHandler(String protocol) {
+ if ("foo".equals(protocol)) {
+ // This is good enough for this test but not for actual use
+ return new DirContextURLStreamHandler();
+ } else {
+ return null;
+ }
+ }
+ }
+}
diff --git test/org/apache/tomcat/util/file/TestConfigFileLoader.java test/org/apache/tomcat/util/file/TestConfigFileLoader.java
new file mode 100644
index 0000000..8cf4e1a
--- /dev/null
+++ test/org/apache/tomcat/util/file/TestConfigFileLoader.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.tomcat.util.file;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+import org.apache.naming.resources.TomcatURLStreamHandlerFactory;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class TestConfigFileLoader {
+
+ @BeforeClass
+ public static void setup() {
+ URL.setURLStreamHandlerFactory(
+ TomcatURLStreamHandlerFactory.getInstance());
+ File buildDir = new File(
+ System.getProperty("tomcat.test.tomcatbuild", "output/build"));
+ System.setProperty("catalina.base", buildDir.getAbsolutePath());
+ }
+
+ @Test
+ public void test01() throws IOException {
+ doTest("classpath:org/apache/catalina/mbeans-descriptors.xml");
+ }
+
+ @Test(expected=FileNotFoundException.class)
+ public void test02() throws IOException {
+ doTest("classpath:org/apache/catalina/foo");
+ }
+
+ @Test
+ public void test03() throws IOException {
+ doTest("conf/server.xml");
+ }
+
+ @Test(expected=FileNotFoundException.class)
+ public void test04() throws IOException {
+ doTest("conf/unknown");
+ }
+
+ private void doTest(String path) throws IOException {
+ InputStream is = null;
+ try {
+ is = ConfigFileLoader.getInputStream(path);
+ Assert.assertNotNull(is);
+ } finally {
+ if (is != null) {
+ is.close();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git webapps/docs/changelog.xml.orig webapps/docs/changelog.xml.orig
new file mode 100644
index 0000000..b734ed6
--- /dev/null
+++ webapps/docs/changelog.xml.orig
@@ -0,0 +1,4780 @@
+
+
+
+]>
+
+
+
+ &project;
+
+
+ Changelog
+
+
+
+
+
+<<<<<<< HEAD
+
+=======
+
+
+
+
+ Add support for the custom classpath
protocol in URLs. It
+ an be used anywhere Tomcat accepts a URL for a configuration parameter.
+ (markt)
+
+
+ 56777: Allow file based configuration resources (user
+ database, certificate revocation lists, keystores an dtrust stores) to
+ be configured using URLs as well as files. (markt)
+
+
+ Perform null-checking on input and stored credentials in all Realms
+ before passing credentials off to CredentialHandlers for matching.
+ (schultz)
+
+
+
+
+
+
+ Add the new ciphers from RFC6655 and RFC7251 to the OpenSSL to JSSE
+ cipher mapping. (markt)
+
+
+ Remove DES, RC2 and RC4 from DEFAULT for the OpenSSL to JSSE cipher
+ mapping to align with the OpenSSL development branch. (markt)
+
+
+
+
+
+
+ Improve the error message when JSP parser encounters an error parsing an
+ attribute value. (markt)
+
+
+
+
+
+
+ 58474: Provide a reference to the differences between
+ CATALINA_HOME
and CATALINA_BASE
in the sample
+ application that is part of the documentation web application. (markt)
+
+
+
+
+
+
+ Ensure JULI adapters does not include the LogFactoryImpl class. Patch
+ provided by Benjamin Gandon. (markt)
+
+
+
+
+
+
+
+
+ 58187: Correct a regression in the fix for 57765
+ that meant that deployment of web applications deployed via the Manager
+ application was delayed until the next execution of the automatic
+ deployment background process. (markt)
+
+
+ 58284: Correctly implement session serialization so
+ non-serializable attributes are skipped with a warning. Patch provided
+ by Andrew Shore. (markt)
+
+
+ 58313: Fix concurrent access of encoders map when clearing
+ encoders prior to switch to async. (markt)
+
+
+ 58320: Fix concurrent access of request attributes which is
+ possible during asynchronous processing. (markt)
+
+
+ 58352: Always trigger a thread dump if Tomcat fails to stop
+ gracefully from catalina.sh
even if using
+ -force
. Patch provided by Alexandre Garnier. (markt)
+
+
+ 58368: Fix a rare data race in the code that obtains the
+ ApplicationFilterFactory
instance. (markt)
+
+
+ 58369: Fix a rare data race in the code that obtains the
+ CookieProcessor for a StandardContext instance. (markt)
+
+
+ Ensure the JAASRealm uses the configured CredentialHandler. (markt)
+
+
+ 58372: Fix rare data races closed and suspended flags that
+ could be triggered by async and/or comet processing. (markt)
+
+
+ 58373: Fix rare data race with the application event
+ listeners for StandardContext. (markt)
+
+
+ 58374: Fix a rare data race in the AsyncContext
+ implementation for access to the internal Tomcat request object to which
+ it holds a reference. (markt)
+
+
+ 58380: Fix two rare data races in the standard session
+ implementation on the flag that tracks if the session is new and on the
+ field that tracks the maximum inactive period. (markt)
+
+
+ 58385: Fix a rare data race in the internal flag Tomcat uses
+ to keep track of whether or not a request is being used for Comet
+ processing. (markt)
+
+
+ 58394: Fix a rare data race in Mapper when adding or removing
+ a host. (markt)
+
+
+ 58398: Fix a rare data race in LifecycleSupport
.
+ (markt)
+
+
+ 58412: Ensure that the AsyncFileHandler
has the
+ source class and method name available for logging. (fschumacher)
+
+
+ 58416: Correctly detect when a forced stop fails to stop
+ Tomcat because the Tomcat process is waiting on some system call or is
+ uninterruptible. (markt)
+
+
+ 58436: Fix some rare data races in JULI's
+ ClassLoaderLogManager
during shutdown. (markt)
+
+
+ 58845: Fix off-by one error in calculation of valid
+ characters in a cookie domain. Patch provided by Thorsten Ehlers.
+ (markt)
+
+
+
+
+
+
+ Correct some edge cases in RequestUtil.normalize()
. (markt)
+
+
+ 58275: The IBM JREs accept cipher suite names starting with
+ TLS_
or SSL_
but when listing the supported
+ cipher suites only the SSL_
version is reported. This can
+ break Tomcat's check that at least one requested cipher suite is
+ supported. Tomcat now includes a work-around so either form of the
+ cipher suite name can be used when running on an IBM JRE. (markt)
+
+
+ 58357: For reasons not currently understood when the
+ APR/native connector is used with OpenSSL reads can return an error code
+ when there is no apparent error. This was work-around for HTTP upgrade
+ connections by treating this as EAGAIN
. The same fix has
+ now been applied to the standard HTTP connector. (markt)
+
+
+ Minor clean-up in NIO2 SSL handshake code to address some theoretical
+ concurrency issues. (markt)
+
+
+ 58367: Fix a rare data race in the code that obtains the
+ reason phrase for a given HTTP response code. (markt)
+
+
+ 58370: Fix a rare data race in the connector shutdown code.
+ (markt)
+
+
+ 58371: Fix a rare data race when accessing request URI in
+ String form when switching from non-async to async due to early
+ triggering of the gathering of request statistics. (markt)
+
+
+ 58375: Fix a rare data race on the internal flag Tomcat uses
+ to mark a response as committed. (markt)
+
+
+ 58377: Fix a rare data race on the internal flag Tomcat uses
+ to mark a request as using HTTP keep-alive when switching to
+ asynchronous processing. (markt)
+
+
+ 58379: Fix a rare data race on the interal reference Tomcat
+ retains to the socket when switching to asynchronous processing. (markt)
+
+
+ 58387: Fix a rare data race when closing Comet connections.
+ (markt)
+
+
+ 58388: Fix a data race when determining if Comet processing
+ is occurring on a container or non-container thread. (markt)
+
+
+ 58389: Fix a rare data race while shutting down the thread
+ pools on Connector stop. (markt)
+
+
+ Clean up use of error flag on socket wrapper prompted by
+ 58390. (markt)
+
+
+ Remove some unnecessary code from the NIO Poller and fix
+ 58396 as a side-effect. (markt)
+
+
+ 57799: Remove useless sendfile check for NIO SSL. (remm)
+
+
+
+
+
+
+ 57136: Correct a regression in the previous fix for this
+ issue. \${
should only an escape for ${
within
+ an EL expression. Within a JSP page \$
should be an escape
+ for $
. The EL specification applies when parsing the
+ expression delimited by ${
and }
. Parsing of
+ the delimiting ${
and }
is the responsibility
+ of the JSP specification. (markt)
+
+
+ 58296: Fix a memory leak in the JSP unloading feature that
+ meant that using a value other than -1
for
+ maxLoadedJsps
triggered a memory leak once the limit was
+ reached. (markt)
+
+
+ 58327: Cache the expression string for value expression
+ literals since it is frequently used and may be expensive to evaluate.
+ Patch provided by Andreas Kohn. (markt)
+
+
+ 58340: Improve error reporting for tag files packaged in
+ JARs. (markt)
+
+
+ 58424: When parsing TLD files, allow whitespace around
+ boolean configuration values. (schultz)
+
+
+ Fix a possible resource leak reported by coverity scan. (fschumacher)
+
+
+ 58427: Enforce the JSP specification defined limitations of
+ which elements are allowed in an implicit.tld file. (markt)
+
+
+ 58444: Ensure that JSPs work with any custom base class that
+ meets the requirements defined in the JSP specification without
+ requiring that base class to implement Tomcat specific code. (markt)
+
+
+
+
+
+
+ Fix a default clusterListeners in SimpleTcpCluster
. The
+ optimal default value is different for each session manager.
+ ClusterSessionListener
is never used in
+ BackupManager
. (kfujino)
+
+
+ Correct log messages in case of using BackupManager
.
+ (kfujino)
+
+
+
+
+
+
+ 58342: Fix a copy and paste error that meant MessageHandler
+ removal could fail for binary and pong MessageHandlers. Patch provided
+ by DJ. (markt)
+
+
+ Data races detected by RV-Predict, mostly caused by completion handlers
+ running in separate threads. (markt)
+
+
+ 58414: Correctly handle sending zero length messages when
+ using per message deflate. (markt)
+
+
+
+
+
+
+ Correct documentation for cluster-howto. (kfujino)
+
+
+ Add missing documentation for property alwaysAddExpires
for
+ the LegacyCookieProcessor
. (markt)
+
+
+
+
+
+
+ Add support for configurations of ChannelListener
and
+ MembershipListener
in server.xml. (kfujino)
+
+
+ Correct log messages in case of using ReplicatedMap
.
+ (kfujino)
+
+
+ 58381: Fix a rare data race in the NioReceiver
.
+ (markt)
+
+
+ 58382: Fix multiple rare data races in the default membership
+ implementation. (markt)
+
+
+ 58383: Fix a data race in SenderState
. (markt)
+
+
+ 58386: Fix a data race in ObjectReader
. (markt)
+
+
+ 58391: Fix multiple data races in
+ NonBlockingCoordinator
, most of which were associated with
+ ensuring that log messages contained the correct information. (markt)
+
+
+ 58392: Fix a data race in
+ DomainFilterInterceptor
. (markt)
+
+
+ 58393: Fix a data race on the listener in
+ McastService
. (markt)
+
+
+ 58395: Fix multiple data races in MemberImpl
+ that were likely to cause issues if certain properties were updated
+ concurrently (such updates are unlikely in normal usage). (markt)
+
+
+ Remove some unnecessary code from PooledParallelSender
and
+ fix 58397. (markt)
+
+
+
+
+
+
+ Make sure the pool has been properly configured when attributes that
+ related to the pool size are changed via JMX. (kfujino)
+
+
+
+
+
+
+ Ensure logging works for all tests in a class rather than just the first
+ one executed. (markt)
+
+
+ 58344: Add build properties to enable tests to be executed
+ against alternative binaries. Based on a patch by Petr Sumbera. (markt)
+
+
+
+
+
+>>>>>>> TOMCAT_8_0_28
+
+
+
+ 58255: Document the Semaphore valve. Patch provided by
+ Kyohei Nakamura. (markt)
+
+
+
+
+
+
+
+
+ Make the WAR manifest file available for WebResource instances from an
+ unpacked WAR in the same way the manifest is available if the WAR is not
+ unpacked. (markt)
+
+
+ Ensure that only /WEB-INF/classes/
and
+ /WEB-INF/lib/
are excluded from the web resource caching.
+ (Resources loaded from these locations are cached by the web application
+ class loader.) (markt)
+
+
+ 57741: Enable the CGI servlet to use the standard error page
+ mechanism. Note that if the CGI servlet's debug init parameter is
+ set to 10 or higher then the standard error page mechanism will be
+ bypassed and a debug response generated by the CGI servlet will be
+ returned instead. (markt)
+
+
+ 58031: Make the (first) reason parameter parsing failed
+ available as a request attribute and then use it to provide a better
+ status code via the FailedRequstFilter (if configured). (markt)
+
+
+ 58086: Correct a regression in the fix for 58086 that
+ incorrectly handled WAR URLs. (violetagg)
+
+
+ 58096: Classes loaded from /WEB-INF/classes/
+ should use that directory as their code base. (markt)
+
+
+ Fix possible resource leaks by closing streams properly.
+ Issues reported by Coverity Scan. (violetagg)
+
+
+ 58116: Fix regression in the fix for 57281 that
+ broke Comet support when running under a security manager. Based on a
+ patch provided by Johno Crawford. (markt)
+
+
+ 58125: Avoid a possible ClassCircularityError
+ when running under a security manager. (markt)
+
+
+ 58179: Fix a thread safety issues that could mean concurrent
+ threads setting the same attribute on a ServletContext
+ could both see null
as the old value. (markt)
+
+
+ Allow web archives bigger than 2G to be deployed using ANT tasks.
+ (violetagg)
+
+
+ 58192: Correct a regression in the previous fix for
+ 58023. Ensure that classes are associated with their manifest
+ even if the class file is first read (and cached) without the manifest.
+ (markt)
+
+
+ Fix thread safety issue in the AsyncContext
implementation
+ that meant a sequence of start();dispatch();
calls using
+ non-container threads could result in a previous dispatch interfering
+ with a subsequent start. (markt)
+
+
+ 58228: Make behaviour of
+ ServletContext.getResource()
and
+ ServletContext.getResourceAsStream()
consistent with each
+ other and the expected behaviour of the GET_RESOURCE_REQUIRE_SLASH
+ system property. (markt)
+
+
+ 58230: Fix input stream corruption if non-blocking I/O is
+ used and the first read is made immediately after the switch to async
+ mode rather than in response to onDataAvaiable()
and that
+ read does not read all the available data. (markt)
+
+
+ Ensure that log4javascript*.jar
was not excluded from the
+ standard JAR scanning by default. (markt)
+
+
+
+
+
+
+ 57943: Prevent the same socket being added to the cache
+ twice. Patch based on analysis by Ian Luo / Sun Qi. (markt)
+
+
+ Add text/javascript,application/javascript
to the default
+ list of compressable MIME types. (violetagg)
+
+
+ 58103: When pipelining requests, and the previous request was
+ an async request, ensure that the socket is removed from the waiting
+ requests so that the async timeout thread doesn't process it during the
+ next request. (markt)
+
+
+ 58151: Correctly handle EOF in the AJP APR/native connector
+ to prevent the connector entering a loop and generate excessive CPU
+ load. (markt)
+
+
+ In the AJP and HTTP NIO connectors, ensure that the socket timeout is
+ correctly set before adding the socket back to the poller for read.
+ (markt)
+
+
+ 58157: Ensure that the handling of async timeouts does not
+ result in an unnecessary dispatch to a container thread that could
+ result in the current socket being added to the Poller multiple times
+ with multiple attempts to process the same event for the same socket.
+ (markt)
+
+
+ Correct a couple of edge cases in RequestUtil.normalize()
.
+ (markt)
+
+
+
+
+
+
+ 58110: Like scriptlet sections, declaration sections of JSP
+ pages have a one-to-one mapping of lines to the generated .java file.
+ Use this information to provide more accurate error messages if a
+ compilation error occurs in a declaration section. (markt)
+
+
+ 58119: When tags are compiled they must be placed in the
+ org/apache/jsp/tag/web directory. Correct a regression in the fix for
+ 52725. (violetagg)
+
+
+ Fix a resource leak in JspC identified by Eclipse. (markt)
+
+
+ 58178: Expressions in a tag file should use the tag
+ file's PageContext
rather than that of the containing
+ page. (markt)
+
+
+ Following on from the fix for 58178, expressions in a tag
+ file should use the tag file's imports rather than those of the
+ containing page. (markt)
+
+
+
+
+
+
+ 58166: Allow applications to send close codes in the range
+ 3000-4999 inclusive. (markt)
+
+
+ 58232: Avoid possible NPE when adding endpoints
+ programmatically to the
+ javax.websocket.server.ServerContainer
.
+ Based on a patch provided by bastian.(violetagg)
+
+
+
+
+
+
+ Correct the incorrect document of QueryTimeoutInterceptor
.
+ The setting value is not in milliseconds but in seconds. (kfujino)
+
+
+ 58112: Update the documentation for using the Catalina tasks
+ in an Apache Ant build file. (markt)
+
+
+ Improve the Javadoc for some of the APR socket read functions that have
+ inconsistent behaviour for return values. (markt)
+
+
+
+
+
+
+ 58042: The default value of logFailed
attribute
+ of SlowQueryReport
is changed to false
so that
+ the failed queries are not logged by default. (kfujino)
+
+
+ Fix potential NPE in QueryTimeoutInterceptor
. (kfujino)
+
+
+ Add support for stopping the pool cleaner via JMX. (kfujino)
+
+
+ The fairness
attribute and
+ ignoreExceptionOnPreLoad
attribute do not allow a change
+ via JMX. (kfujino)
+
+
+ If the timeBetweenEvictionRunsMillis
attribute is changed
+ via jmx, it should restart the pool cleaner because this attribute
+ affects the execution interval of the pool cleaner. (kfujino)
+
+
+ Eliminate the dependence on maxActive
of busy queues and
+ idle queue in order to enable the expansion of the pool size via JMX.
+ (kfujino)
+
+
+
+
+
+
+ Update optional Checkstyle library to 6.8.1. (kkolinko)
+
+
+ Update sample Eclipse IDE configuration to exclude test/webapp* and
+ similar paths from compiler sourcepath. (kkolinko)
+
+
+ Update package renamed Apache Commons Pool to Commons Pool 2.4.2.
+ (markt)
+
+
+ Update package renamed Apache Commons DBCP to Commons DBCP 2.1.1.
+ (markt)
+
+
+ Support the use of the threads
attribute on Ant's
+ junit task. Note that using this with a value of greater than one will
+ disbale Cobertura code coverage. (markt)
+
+
+
+
+
+
+
+
+ 57938: Correctly handle empty form fields when a form is
+ submitted as multipart/form-data
, the
+ maxPostSize
attribute of the Connector has been set to a
+ negative value and the Context has been configured with a value of
+ true
for allowCasualMultipartParsing
. The
+ meaning of the value zero for the maxPostSize
has also been
+ changed to mean a limit of zero rather than no limit to align it with
+ maxSavePostSize
and to be more intuitive. (markt)
+
+
+ 57977: Correctly bind and unbind the web application class
+ loader during execution of the PersistentValve. (markt)
+
+
+ Remove some unnecessary code from the web application class loader and
+ deprecate the now unused validate()
method since the
+ requirements of SRV.10.7.2 are met using cleaner code in
+ loadClass(String, boolean)
and filter()
.
+ (markt)
+
+
+ Correct a bug that prevented the web application class loader's
+ filter()
from working correctly. It only returned
+ true
for classes in sub-packages of the listed packages,
+ but not classes located in the packages themselves. (markt)
+
+
+ Add the WebSocket API classes to the list of classes that the web
+ application class loader will always delegate to its parent for loading
+ first. (markt)
+
+
+ 58015: Ensure that whenever the web application class loader
+ checks to see if it should delegate first, it also checks the result
+ of the filter()
method which may indicate that it should
+ always delegate first for the current class/resource regardless of the
+ value of the delegate configuration option. (markt)
+
+
+ 58023: Fix potentially excessive memory usage due to
+ unnecessary caching of JAR manifests in the web application class
+ loader. (markt)
+
+
+ 57700: Ensure that Container event
+ ADD_CHILD_EVENT
will be sent in all cases. (violetagg)
+
+
+ 58086: Ensure that WAR URLs are handled properly when using
+ ANT for web application deployment. Based on a patch provided by Lukasz
+ Jader. (violetagg)
+
+
+ Fix CredentialHandler element handling in storeconfig. (remm)
+
+
+
+
+
+
+ 57265: Further fix to address a potential threading issue
+ when sendfile is used in conjunction with TLS. (markt)
+
+
+ 57936: Improve robustness of the acceptor thread count
+ parameter for NIO2, since it must be set to 1. Submitted by
+ Oliver Kant. (remm)
+
+
+ 57943: Added a work-around to catch
+ ConcurrentModificationException
s during Poller timeout
+ processing that were causing the Poller thread to stop. The root cause
+ of these exceptions is currently unknown. (markt)
+
+
+ 57944: Ensure that if non-blocking I/O listeners are set on
+ a non-container thread that the expected listener events are still
+ triggered. (markt)
+
+
+ Fix possible very long (1000 seconds) timeout with APR/native connector.
+ (markt)
+
+
+ Support "-" separator in the SSLProtocol configuration of the
+ APR/native connector for protocol exclusion. (rjung)
+
+
+ 58004: Fix AJP buffering output data even in blocking mode.
+ (remm)
+
+
+
+
+
+
+ 57969: Provide path parameters to POJO via per session
+ javax.websocket.server.ServerEndpointConfig
as they vary
+ between different requests. (violetagg)
+
+
+ 57974: Session.getOpenSessions should return all sessions
+ associated with a given endpoint instance, rather than all sessions
+ from the endpoint class. (remm)
+
+
+
+
+
+
+ 57282: Update request processing sequence diagrams. Updated
+ diagrams provided by Stephen Chen. (markt)
+
+
+ 57971: Correct the documentation for the cluster
+ configuration setting recoverySleepTime
. (markt)
+
+
+ 57758: Add document of testOnConnect
attribute
+ in jdbc-pool doc. (kfujino)
+
+
+ Add description of validatorClassName
attribute to testXXXX
+ attributes in jdbc-pool docs. (kfujino)
+
+
+
+
+
+
+ Use StringManager
to provide i18n support in the
+ org.apache.catalina.tribes
packages. (kfujino)
+
+
+ Do not set the nodes that failed to replication to the backup nodes.
+ Ensure that the nodes that the data has been successfully replicated are
+ set to the backup node. (kfujino)
+
+
+ When failed to replication, rather than all member is handled as a
+ failed member, exclude the failure members from backup members.
+ (kfujino)
+
+
+
+
+
+
+ Refactoring of the removeOldest
method in
+ SlowQueryReport
to behave as expected. (kfujino)
+
+
+ 57783: Fix NullPointerException
in
+ SlowQueryReport
. To avoid this NPE, Refactor
+ SlowQueryReport#removeOldest
and handle the abandoned
+ connection properly. (kfujino)
+
+
+ 58042: In SlowQueryReportJmx
, the
+ LogSlow
and logFailed
attributes that
+ inherited from SlowQueryReport
are used as a condition of
+ whether JMX notifications are sent. (kfujino)
+
+
+ Ensure that specified Boolean
attribute values of
+ SlowQueryReport
reflect correctly. The LogSlow
+ and the logFailed
are not system property, these are
+ attributes of SlowQueryReport
. (kfujino)
+
+
+
+
+
+
+ Update package renamed Apache Commons BCEL to r1682271 to pick up some
+ some code clean up. (markt)
+
+
+ Update package renamed Apache Commons DBCP to r1682314 to pick up the
+ DBCP 2.1 release and additional fixes since then. (markt)
+
+
+ Update package renamed Apache Commons Pool to the 2.4 release. (markt)
+
+
+ Update package renamed Apache Commons File upload to r1682322 to pick up
+ the post 1.3.1 fixes. (markt)
+
+
+ Update package renamed Apache Commons Codec to r1682326. No functional
+ changes. Javadoc only. (markt)
+
+
+ Update optional Checkstyle library to 6.7. (kkolinko)
+
+
+
+
+
+
+
+
+ 54618: Add a new HttpHeaderSecurityFilter
that
+ adds the Strict-Transport-Security
,
+ X-Frame-Options
and X-Content-Type-Options
+ HTTP headers to the response. (markt)
+
+
+ 57875: Add javax.websocket.*
to the classes for
+ which the web application class loader always delegates first. (markt)
+
+
+ 57871: Ensure that setting the the allowHttpSepsInV0 property
+ of a LegacyCookieProcessor to false only prevents HTTP separators from
+ being used without quotes. (markt)
+
+
+ Add a workaround for issues with SPNEGO authentication when running on
+ Java 8 update 40 and later. The workaround should be safe for earlier
+ Java versions but it can be disabled with the
+ applyJava8u40Fix
attribute of the SPNEGO authenticator if
+ necessary. (markt)
+
+
+ 57926: Restore the original X-Forwarded-By
and
+ X-Forwarded-For
headers after processing by the
+ RemoteIPValve
. (markt)
+
+
+
+
+
+
+ Follow up to previous fix that removed the behavior difference between
+ NIO and NIO2 for SSL, which caused corruption with NIO2.
+ (remm)
+
+
+ 57931: Ensure that TLS connections with the NIO or NIO2 HTTP
+ connectors that experience issues during the handshake (e.g. missing or
+ invalid client certificate) are closed cleanly and that the client
+ receives the correct error code rather than simply closing the
+ connection. (markt)
+
+
+
+
+
+
+ 56438: Add debug logging to TLD discovery that logs positive
+ and negative results for JARs, resource paths and directories. Patch
+ provided by VIN. (markt)
+
+
+ 57802: Correct the default implementation of
+ convertToType()
provided by
+ javax.el.ELResolver
. (markt)
+
+
+ 57887: Fix compilation of recursive tag files packaged in a
+ JAR. (markt)
+
+
+
+
+
+
+ Make sure that stream is closed after using it in
+ DeltaSession.applyDiff()
. (kfujino)
+
+
+ Use StringManager
to provide i18n support in the
+ org.apache.catalina.ha packages
. (kfujino)
+
+
+ Add the context name to log messages when replication context failed to
+ start. (kfujino)
+
+
+
+
+
+
+ 57875: Update the web application class loader documentation
+ to reflect the more relaxed approach to SRV.10.7.2 in Tomcat 8 onwards.
+ (markt)
+
+
+ 57896: Document system property
+ org.apache.tomcat.util.http.ServerCookie.PRESERVE_COOKIE_HEADER
+ that was introduced in Tomcat 8.0.0. (kkolinko)
+
+
+
+
+
+
+ Ensure that the state transfer flag is updated to true only when the map
+ states have been transferred correctly from existing map members.
+ (kfujino)
+
+
+
+
+
+
+ Update optional Checkstyle library to 6.6. (kkolinko)
+
+
+
+
+
+
+
+
+ 57736: Change the format of the Tomcat specific URLs for
+ resources inside JARs that are in turn packed in a WAR. The
+ ^/
sequence has been replaced by */
so that
+ the resulting URLs are compliant with RFC 2396 and do not trigger
+ exceptions when converted to URIs. The old format will continue to be
+ accepted. (markt)
+
+
+ 57752: Exclude non-cached resources from the Cache statistics
+ for resource lookups. Patch provided by Adam Mlodzinski. (markt)
+
+
+ Allow logging of the remote port in the access log using the format
+ pattern %{remote}p
. (rjung)
+
+
+ 57556: Refine the previous fix for this issue so that the
+ real path returned only has a trailing separator if the requested path
+ ended with /
. (markt)
+
+
+ 57765: When checking last modified times as part of the
+ automatic deployment process, account for the fact that
+ File.lastModified()
has a resolution of one second to
+ ensure that if a file has been modified within the last second, the
+ latest version of the file is always used. Note that a side-effect of
+ this change is that files with modification times in the future are
+ treated as if they are unmodified. (markt)
+
+
+ Align redeploy resource modification checking with reload modification
+ checking so that now, in both cases, a change in modification time
+ rather than an increase in modification time is used to determine if the
+ resource has changed. (markt)
+
+
+ Cleanup o.a.tomcat.util.digester.Digester
from debug
+ messages that do not give any valuable information. Patch provided
+ by Polina Genova. (violetagg)
+
+
+ 57772: When reloading a web application and a directory
+ representing an expanded WAR needs to be deleted, delete the directory
+ after the web application has been stopped rather than before to avoid
+ potential ClassNotFoundExceptions. (markt)
+
+
+ Fix wrong logger name of
+ org.apache.catalina.webresources.StandardRoot
. (kfujino)
+
+
+ 57801: Improve the error message in the start script in case
+ the PID read from the PID file is already owned by a process. (rjung)
+
+
+ 57841: Improve error logging during web application start.
+ (markt)
+
+
+ 57856: Ensure that any scheme/port changes implemented by the
+ RemoteIpFilter
also affect
+ HttpServletResponse.sendRedirect()
. (markt)
+
+
+ 57863: Fix the RewriteMap support in RewriteValve that did
+ not use the correct key value to look up entries. Based on a patch
+ provided by Tatsuya Bessho. (markt)
+
+
+
+
+
+
+ 57779: When an I/O error occurs on a non-container thread
+ only dispatch to a container thread to handle the error if using Servlet
+ 3+ asynchronous processing. This avoids potential deadlocks if an
+ application is performing I/O on a non-container thread without using
+ the Servlet 3+ asynchronous API. (markt)
+
+
+ Remove the experimental support for SPDY. No current user agent supports
+ the version of SPDY that the experiment targeted. Note: HTTP/2 support
+ is under development for Tomcat 9 and may be back-ported to Tomcat 8
+ once complete. (markt)
+
+
+ Possible incomplete writes with SSL NIO2. (remm)
+
+
+ Incorrect reads with SSL NIO2 caused by a bad strategy for handling IO
+ differences between NIO and NIO2 that don't seem to be justified.
+ (remm)
+
+
+ After some errors, the pending flags could remain set when using SSL
+ NIO2. (remm)
+
+
+ 57833: When using JKS based keystores for NIO or NIO2, ensure
+ that the key alias is always converted to lower case since that is what
+ JKS key stores expect. Based on a patch by Santosh Giri Govind M.
+ (markt)
+
+
+ 57837: Add text/css
to the default list of
+ compressable MIME types. (markt)
+
+
+
+
+
+
+ 57845: Ensure that, if the same JSP is accessed directly and
+ via a <jsp-file>
declaration in web.xml, updates to
+ the JSP are visible (subject to the normal rules on re-compilation)
+ regardless of how the JSP is accessed. (markt)
+
+
+ 57855: Explicitly handle the case where a
+ MethodExpression
is invoked with null or the wrong number
+ of parameters. Rather than failing with an
+ ArrayIndexOutOfBoundsException
or a
+ NullPointerException
throw an
+ IllegalArgumentException
with a useful error message.
+ (markt)
+
+
+
+
+
+
+ Avoid unnecessary call of DeltaRequest.addSessionListener()
+ in non-primary nodes. (kfujino)
+
+
+ Add new attribute that send all actions for session across Tomcat
+ cluster nodes. (kfujino)
+
+
+ Remove unused pathname
attribute in mbean definition of
+ BackupManager
. (kfujino)
+
+
+
+
+
+
+ 57761: Ensure that the opening HTTP request is correctly
+ formatted when the WebSocket client connects to a server root. (remm)
+
+
+ 57762: Ensure that the WebSocket client correctly detects
+ when the connection to the server is dropped. (markt)
+
+
+ 57776: Revert the 8.0.21 fix for the
+ permessage-deflate
implementation and incorrect op-codes
+ since the fix was unnecessary (the bug only affected trunk) and the fix
+ broke rather than fixed permessage-deflate
if an
+ uncompressed message was converted into more than one compressed
+ message. (markt)
+
+
+ Fix log name typo in WsRemoteEndpointImplServer
class,
+ caused by a copy-paste. (markt/kkolinko)
+
+
+ 57788: Avoid NPE when looking up a class hierarchy without
+ finding anything. (remm)
+
+
+
+
+
+
+ 57759: Add information to the keyAlias documentation to make
+ it clear that the order keys are read from the keystore is
+ implementation dependent. (markt)
+
+
+ 57864: Update the documentation web application to make it
+ clearer that hex values are not valid for cluster send options. Based on
+ a patch by Kyohei Nakamura. (markt)
+
+
+
+
+
+
+ Fix a concurrency issue when a backup message that has all session data
+ and a backup message that has diff data are processing at the same time.
+ This fix ensures that MapOwner
is set to
+ ReplicatedMapEntry
. (kfujino)
+
+
+
+
+
+
+ Add missing pom for tomcat-storeconfig. (remm)
+
+
+ Update optional Checkstyle library to 6.5. (kkolinko)
+
+
+ 57707: Improve error message when trying to run a release
+ build on a non-Windows platform and Wine is not available. (markt)
+
+
+
+
+
+
+
+
+ 49785: Enable StartTLS connections for JNDIRealm.
+ (fschumacher)
+
+
+ When docBase refers internal war and unpackWARs is set to false, avoid
+ registration of the invalid redeploy resource that has been added ".war"
+ extension in duplicate. (kfujino)
+
+
+ If WAR exists, it is not necessary to trigger a reload when adding a
+ Directory. (kfujino)
+
+
+ 55988: Add support for Java 8 JSSE server-preferred TLS
+ cipher suite ordering. This feature requires Java 8
+ and is controlled by useServerCipherSuitesOrder
+ attribute on an HTTP connector.
+ Based upon a patch provided by Ognjen Blagojevic. (schultz)
+
+
+ 56608: When deploying an external WAR, add watched resources
+ in the expanded directory based on whether the expanded directory is
+ expected to exist rather than if it does exist. (markt)
+
+
+ When triggering a reload due to a modified watched resource, ensure
+ that multiple changed watched resources only trigger one reload rather
+ than a series of reloads. (markt)
+
+
+ 57601: Ensure that HEAD requests return the correct content
+ length (i.e. the same as for a GET) when the requested resource includes
+ a resource served by the Default servlet. (jboynes/markt)
+
+
+ 57602: Ensure that HEAD requests return the correct content
+ length (i.e. the same as for a GET) when the requested resource includes
+ a resource served by a servlet that extends HttpServlet
.
+ (markt)
+
+
+ 57621: When an async request completes, ensure that any
+ remaining request body data is swallowed. (markt)
+
+
+ 57637: Do not create unnecessary sessions when using
+ PersistentValve. (jboynes/fschumacher)
+
+
+ 57645: Correct a regression in the fix for
+ 57190 that incorrectly required the path passed to
+ ServletContext.getContext(String)
to be an exact match to a
+ path to an existing context. (markt)
+
+
+ Make sure that unpackWAR
attribute of Context
+ is handled correctly in HostConfig
. (kfujino)
+
+
+ When deploying a WAR file that contains a context.xml file and
+ unpackWARs
is false
ignore any context.xml
+ file that may exist in an expanded directory associated with the WAR.
+ (markt)
+
+
+ 57675: Correctly quote strings when using the extended
+ access log. (markt)
+
+
+ Enable Tomcat to detect when a WAR file has been changed while Tomcat is
+ not running. Tomcat does this by adding a META-INF/war-tracking file to
+ the expanded directory and setting the last modified time of this file
+ to the last modified time of the WAR. If Tomcat detects a modified WAR
+ via this mechanism the web application will be redeployed (i.e. the
+ expanded directory will be removed and the modified WAR expanded in its
+ place). (markt)
+
+
+ 57704: Fix potential NPEs during web application start/stop
+ when org.apache.tomcat.InstanceManager
is not initialized.
+ (violetagg)
+
+
+ Use the simplified digest output for digest.bat|sh when generating
+ digests with no salt and a single iteration to make it easier to use
+ with DIGEST authentication. (markt)
+
+
+ Add support for LAST_ACCESS_AT_START
system property to
+ SingleSignOn
. (kfujino)
+
+
+ Refactor Authenticator implementations to reduce code duplication.
+ (markt)
+
+
+ 57724: Handle the case in the CORS filter where a user agent
+ includes an origin header for a non-CORS request. (markt)
+
+
+ When searching for SCIs
+ o.a.catalina.Context.getParentClassLoader
will be used
+ instead of java.lang.ClassLoader.getParent
. Thus one can
+ provide the correct parent class loader when running embedded Tomcat in
+ other environments such as OSGi. (violetagg)
+
+
+ 57743: Fix a locked file / resource leak issue when a JAR is
+ accessed just before or during web application undeploy. Patch provided
+ by Pavel Avgustinov. (markt)
+
+
+
+
+
+
+ 57540: Make TLS/SSL protocol available in a new request
+ attribute
+ (org.apache.tomcat.util.net.secure_protocol_version
).
+ (Note that AJP connectors will require mod_jk 1.2.41 or later,
+ or an as-yet-unknown version of mod_proxy_ajp, or configure the proxy
+ to send the AJP_SSL_PROTOCOL request attribute to Tomcat. Please see
+ the bug comments for details.)
+ Based upon a patch provided by Ralf Hauser. (schultz)
+
+
+ Fix a cipher ordering issue when using the OpenSSL syntax for JSSE
+ cipher configuration to ensure that ephemeral ECDH with AES is preferred
+ to ephemeral ECDH with anything else. (markt)
+
+
+ 57570: Make the processing of trailer headers with chunked
+ input optional and disabled by default. (markt)
+
+
+ 57592: Correctly handle the case where an
+ AsyncContext
is used for non-blocking I/O and is completed
+ during a write operation. (markt)
+
+
+ 57638: Avoid an IllegalArgumentException when an AJP request
+ body chunk larger than the socket read buffer is being read. This
+ typically requires a larger than default AJP packetSize. (markt)
+
+
+ 57674: Avoid a BufferOverflowException when an AJP response
+ body chunk larger than the socket write buffer is being written. This
+ typically requires a larger than default AJP packetSize. (markt)
+
+
+ Align the OpenSSL syntax cipher configuration with the OpenSSL 1.0.2
+ branch. (markt)
+
+
+ Numerous fixes to the APR/native connector to improve robustness.
+ (markt)
+
+
+ Stop caching and re-using SocketWrapper instances. With the introduction
+ of upgrade and non-blocking I/O, I/O can occur on non-container threads.
+ This makes it nearly impossible to track whether a SocketWrapper is
+ still being referenced or not, making re-use a risky proposition.
+ (markt)
+
+
+ Refactor Connector authentication (only used by AJP) into a separate
+ method. (markt)
+
+
+ 57708: Implement a new feature for AJP connectors - Tomcat
+ Authorization. If the new tomcatAuthorization attribute is set to
+ true
(it is disabled by default) Tomcat will take an
+ authenticated user name from the AJP protocol and use the appropriate
+ Realm for the request to authorize (i.e. add roles) to that user.
+ (markt)
+
+
+ Fix an issue that meant that any pipe-lined data read by Tomcat before
+ an asynchronous request completed was lost during the completion of the
+ asynchronous request. This mean that the pipe-lined request(s) would be
+ lost and/or corrupted. (markt)
+
+
+ Update the minimum recommended version of the Tomcat Native library (if
+ used) to 1.1.33. (markt)
+
+
+
+
+
+
+ 57135: Package imports via
+ javax.el.ImportHandler
should only import public, concrete
+ classes. (markt)
+
+
+ 57583: Cache 'Not Found' results in
+ javax.el.ImportHandler.resolveClass()
to save repeated
+ attempts to load classes that are known not to exist to improve
+ performance. (markt)
+
+
+ 57626: Correct a regression introduced in the 8.0.16 fix for
+ ensuring Jars were closed after use, that broke recompilation of
+ modified JSPs that depended on a tag file packaged in a Jar. (markt)
+
+
+ 57627: Correctly determine last modified times for
+ dependencies when a tag file packaged in a JAR depends on a tag file
+ packaged in a second JAR. (markt)
+
+
+ 57647: Ensure INFO message is logged when scanning jars for
+ TLDs if the scan does not find a TLD in any jar. Previously a message
+ would only be logged if a TLD was not found in all scanned jars. (jboynes)
+
+
+ 57662: Update all references to the ECJ compiler to version
+ 4.4.2. (violetagg)
+
+
+
+
+
+
+ Remove unnecessary method that always returns true. The domain filtering
+ works on DomainFilterInterceptor
. (kfujino)
+
+
+
+
+
+
+ Correct a bug in the permessage-deflate
implementation that
+ meant that the incorrect op-codes were used if an uncompressed message
+ was converted into more than one compressed message. (markt)
+
+
+ 57676: List conflicting WebSocket endpoint classes when
+ there is a path conflict. Based upon a patch proposed by yangkun.
+ (schultz)
+
+
+
+
+
+
+ 56058: Add links to the AccessLogValve documentation for
+ configuring reverse proxies and/or Tomcat to ensure that the desired
+ information is used entered in the access log when Tomcat is running
+ behind a reverse proxy. (markt)
+
+
+ 57587: Update the JNDI Datasource HOWTO for DBCP2. Patch
+ provided by Phil Steitz. (markt)
+
+
+ Remove incorrect note from context configuration page in the
+ documentation web application that stated WAR files located outside the
+ appBase were never unpacked. (markt)
+
+
+ 57644: Update examples to use Apache Standard Taglib 1.2.5.
+ (jboynes)
+
+
+ 57683: Ensure that if a client aborts their connection to the
+ stock ticker example (the only way a client can disconnect), the example
+ continues to work for existing and new clients. (markt)
+
+
+ Make it clear that when using digested passwords with DIGEST
+ authentication that no salt and only a single iteration must be used
+ when generating the digest. (markt)
+
+
+
+
+
+
+ 57377: Remove the restriction that prevented the use of SSL
+ when specifying a bind address with the JMXRemoteLifecycleListener. Also
+ enable SSL to be configured for the registry as well as the server.
+ (markt)
+
+
+
+
+
+
+ When a map member has been added to ReplicatedMap
, make
+ sure to add it to backup nodes list of all other members. (kfujino)
+
+
+ Make sure that refuse the messages from a different domain in
+ DomainFilterInterceptor
. (kfujino)
+
+
+
+
+
+
+ Update optional Checkstyle library to 6.4.1. (kkolinko)
+
+
+ 57703: Update the http-method
definition for
+ web applications using a Servlet 2.5 descriptor as per Servlet 2.5 MR 6.
+ (markt)
+
+
+ Update to Tomcat Native Library version 1.1.33 to pick up the Windows
+ binaries that are based on OpenSSL 1.0.1m and APR 1.5.1. (markt)
+
+
+
+
+
+
+
+
+ Fix a concurrency issue that meant that a change in socket timeout (e.g.
+ when switching to asynchronous I/O) did not always take effect
+ immediately. (markt)
+
+
+
+
+
+
+
+
+ Clarify threaded usage of variables by removing volatile marker
+ in NonceInfo. Issue reported by Coverity Scan. (fschumacher)
+
+
+ 57180: Further fixes to support the use of arbitrary HTTP
+ methods with the CORS filter. (markt)
+
+
+ 57472: Fix performance regression in resources implementation
+ when signed JARs are used in a web application. (markt)
+
+
+ Warn about problematic setting of appBase. (fschumacher)
+
+
+ Fix exception while authentication in JDBCRealm. (fschumacher)
+
+
+ 57534: CORS Filter should only look at media type component of
+ Content-Type request header. (markt)
+
+
+ 57556: Align getRealPath()
behaviour with that
+ of earlier versions and include a trailing separator if the real path
+ refers to a directory. (markt)
+
+
+ Ensure that Servlet 3.0 async requests where startAsync()
+ is called in one container thread and dispatch()
is called
+ in a different container thread complete correctly. (markt)
+
+
+ Ensure that user name checking in the optional SecurityListener is
+ case-insensitive (as documented) and than the case-insensitive
+ comparison is performed using the system default Locale. (markt)
+
+
+ 57021: Improve logging in AprLifecycleListener and
+ jni.Library when Tomcat-Native DLL fails to load. Based on a patch by
+ Pravallika Peddi. (markt/kkolinko)
+
+
+
+
+
+
+ Fix several bugs that could cause multiple registrations for write
+ events for a single socket when using Servlet 3.0 async. Typically, the
+ side effects of these multiple registrations would be exceptions
+ appearing in the logs. (markt)
+
+
+ 57432: Align SSL_OP_NO_TLSv1_1
and
+ SSL_OP_NO_TLSv1_2
constant values with OpenSSL (they had
+ been swapped). (markt)
+
+
+ 57509: Improve length check when writing HTTP/1.1
+ response headers: reserve space for 4 extra bytes. (kkolinko)
+
+
+ 57544: Fix potential infinite loop when preparing a kept
+ alive HTTP connection for the next request. (markt)
+
+
+ 57546: Ensure that a dropped network connection does not
+ leave references to the UpgradeProcessor associated with the connection
+ in memory. (markt)
+
+
+ When applying the maxSwallowSize
limit to a connection read
+ that many bytes first before closing the connection to give the client a
+ chance to read the response. (markt)
+
+
+ Prevent an async timeout being processed multiple times for the same
+ socket when running on slow and/or heavily loaded systems. (markt)
+
+
+ 57581: Change statistics byte counter in coyote Request
+ object to be long to allow values above 2Gb. (kkolinko)
+
+
+ Use the data that supports cipher definition using OpenSSL syntax to
+ improve the quality of values provided for the
+ javax.servlet.request.key_size
request attribute. (markt)
+
+
+ Fix a concurrency issue in the APR Poller that meant it was possible
+ under low load for a socket queued to be added to the Poller not to be
+ added for 10 seconds. (markt)
+
+
+
+
+
+
+ 57123: Update all references to the ECJ compiler to version
+ 4.4.1. With thanks to Ralph Schaer for uploading the 4.4.1 JAR to Maven
+ Central. (markt)
+
+
+ 57564: Make JspC amenable to subclassing. Patch provided by
+ Jan Bartel. (markt)
+
+
+ Simplify code in ProtectedFunctionMapper
class of
+ Jasper runtime. (kkolinko)
+
+
+ 57574: Do not check existence of a Java package in
+ javax.el.ImportHandler.importPackage()
. (kkolinko)
+
+
+
+
+
+
+ 57490: Make it possible to use Tomcat's WebSocket client
+ within a web application when running under a SecurityManager. Based on
+ a patch by Mikael Sterner. (markt)
+
+
+ Add some debug logging to the WebSocket session to track session
+ creation and session closure. (markt)
+
+
+
+
+
+
+ Clarify documentation for useBodyEncodingForURI
+ attribute of a connector. (kkolinko)
+
+
+ Fix possible resource leaks by closing streams properly. Issues
+ reported by Coverity Scan. (fschumacher)
+
+
+ 57503: Make clear that the JULI integration for log4j only
+ works with log4j 1.2.x. (markt)
+
+
+ 57496: Remove hard-coded URL in JSP SVG example. (markt)
+
+
+
+
+
+
+ Fix a possible deadlock when receiver thread invokes
+ mapMemberAdded()
while ping thread invokes
+ memberAlive()
. (kfujino)
+
+
+
+
+
+
+ Enhance bean factory used for JNDI resources. New attribute
+ forceString
allows to support non-standard
+ string argument property setters. (rjung)
+
+
+ Assign newly created stream to field instead of leaking it uselessly.
+ Issue reported by Coverity Scan. (fschumacher)
+
+
+ Update optional Checkstyle library to 6.3. (kkolinko)
+
+
+ Guard the digester from MbeansDescriptorsDigesterSource with its own
+ lock object. (fschumacher)
+
+
+ Refactor the unit tests and add some new test properties to make it
+ easier to exclude performance tests and relax timing tests. This is
+ primarily for the ASF CI system where these tests frequently fail.
+ (markt)
+
+
+ 57558: Add missing JAR in Ant task definition required by
+ the validate task. (markt)
+
+
+ List names of Testsuites that have failed or skipped tests when
+ running the tests with Ant. (kkolinko)
+
+
+
+
+
+
+
+
+ 57178: The CORS filter now treats null
as a
+ valid origin that matches *
. Patch provided by Gregor
+ Zurowski. (markt)
+
+
+ 57425: Don't add attributes with null value or name to the
+ replicated context. (fschumacher)
+
+
+ 57431: Enable usage of custom class for context creation when
+ using embedded tomcat. (fschumacher)
+
+
+ 57446: Ensure that ServletContextListener
s that
+ have limited access to ServletContext
methods are called
+ with the same ServletContext
instance for both
+ contextInitialized()
and contextDestroyed()
.
+ (markt)
+
+
+ 57455: Explicitly block the use of the double-quote character
+ when configuring the common, server and shared class loaders since
+ double-quote is used to quote values that contain commas. (markt)
+
+
+ 57461: When an instance of
+ org.apache.catalina.startup.VersionLoggerListener
logs the
+ result of System.getProperty("java.home")
don't report it
+ in a manner that makes it look like the JAVA_HOME
+ environment variable. (markt)
+
+
+ 57476: Ensure the responses written as part of a forward are
+ fully written. This fixes a regression in 8.0.15 caused by the fix for
+ 57252. (markt)
+
+
+ While closing streams for given resources ensure that if an exception
+ happens it will be handled properly. Issue is reported by Coverity Scan.
+ (violetagg)
+
+
+ 57481: Fix IllegalStateException
at the end of
+ the request when using non-blocking reads with the HTTP BIO connector.
+ (markt)
+
+
+ Change Response to use UEncoder instances with shared safeChars.
+ (fschumacher)
+
+
+ Ensure that when static resources are served from JARs, only static
+ resources are served. (markt)
+
+
+ Allow VersionLoggerListener
to log all system properties.
+ This feature is off by default. (kkolinko)
+
+
+
+
+
+
+ Ensure that classes imported via the page directive are made available
+ to the EL environment via the ImportHandler. Issue is reported by
+ Coverity Scan. (violetagg)
+
+
+ 57441: Do not trigger an error when using functions defined
+ by lambdas or imported via an ImportHandler in an EL expression in a
+ JSP. (markt)
+
+
+
+
+
+
+ Fix mbean descriptor of ClusterSingleSignOn
. (kfujino)
+
+
+ 57473: Add sanity check to FarmWebDeployer's WarWatcher to
+ detect suspected incorrect permissions on the watch directory. (schultz)
+
+
+
+
+
+
+ Clarify the handling of Copy message and Copy nodes. (kfujino)
+
+
+ Copy node does not need to send the entry data. It is enough to send
+ only the node information of the entry. (kfujino)
+
+
+ ReplicatedMap should send the Copy message when replicating. (kfujino)
+
+
+ Fix behavior of ReplicatedMap when member has disappeared. If map entry
+ is primary, rebuild the backup members. If primary node of map entry has
+ disappeared, backup node is promoted to primary. (kfujino)
+
+
+
+
+
+
+
+
+ Correct a regression in the previous fix for 57252 that broke
+ request listeners for non-async requests that triggered an error that
+ was handled by the ErrorReportingValve. (markt/violetagg)
+
+
+
+
+
+
+ Add flushing to send ack in the NIO2 connector. (remm)
+
+
+
+
+
+
+
+
+ 57172: Provide a better error message if something attempts to
+ access a resource through a web application class loader that has been
+ stopped. (markt/kkolinko)
+
+
+ 57173: Revert the fix for 56953 that broke
+ annotation scanning in some cases. (markt)
+
+
+ 57180: Do not limit the CORS filter to only accepting
+ requests that use an HTTP method defined in RFC 7231. (markt)
+
+
+ 57190: Fix ServletContext.getContext(String)
+ when parallel deployment is used so that the correct ServletContext is
+ returned. (markt)
+
+
+ 57208: Prevent NPE in JNDI Realm when no results are found
+ in a directory context for a user with specified user name. Based on
+ a patch provided by Jason McIntosh. (violetagg)
+
+
+ 57209: Add a new attribute, userSearchAsUser to the JNDI
+ Realm. (markt)
+
+
+ 57215: Ensure that the result of calling
+ HttpServletRequest.getContextPath()
is neither decoded nor
+ normalized as required by the Servlet specification. (markt)
+
+
+ 57216: Improve handling of invalid context paths. A context
+ path should either be an empty string or start with a
+ '/'
and do not end with a
+ '/'
. Invalid context path are automatically
+ corrected and a warning is logged. The null
and
+ "/"
values are now correctly changed to
+ ""
. (markt/kkolinko)
+
+
+ Update storeconfig with the CredentialHandler element. (remm)
+
+
+ Correct message that is logged when load-on-startup servlet fails
+ to load. It was logging a wrong name. (kkolinko)
+
+
+ 57239: Correct several message typos. Includes patch by
+ vladk. (kkolinko)
+
+
+ Fix closing of Jars during annotation scanning. (schultz/kkolinko)
+
+
+ Fix a concurrency issue in async processing. Ensure that a non-container
+ thread can not change the async state until the container thread has
+ completed. (markt)
+
+
+ 57252: Provide application configured error pages with a
+ chance to handle an async error before the built-in error reporting.
+ (markt)
+
+
+ 57281: Enable non-public Filter and Servlet classes to be
+ configured programmatically via the Servlet 3.0 API and then used
+ without error when running under a SecurityManager. (markt)
+
+
+ 57308: Remove unnecessary calls to
+ System.getProperty()
where more suitable API calls are
+ available. (markt)
+
+
+ Add unit tests for RemoteAddrValve and RemoteHostValve. (rjung)
+
+
+ Allow to configure RemoteAddrValve and RemoteHostValve to
+ adopt behavior depending on the connector port. Implemented
+ by optionally adding the connector port to the string compared
+ with the patterns allow
and deny
. Configured
+ using addConnectorPort
attribute on valve. (rjung)
+
+
+ Optionally trigger authentication instead of denial in
+ RemoteAddrValve and RemoteHostValve. This only works in
+ combination with preemptiveAuthentication
+ on the application context. Configured using
+ invalidAuthenticationWhenDeny
attribute on valve. (rjung)
+
+
+ Remove the obsolete jndi
protocol usage from the scanning
+ process performed by StandardJarScanner. (violetagg)
+
+
+ Prevent file descriptors leak and ensure that files are closed after
+ retrieving the last modification time. (violetagg)
+
+
+ Make o.a.catalina.webresources.StandardRoot
easier for
+ extending. (violetagg)
+
+
+ 57326: Enable AsyncListener
implementations to
+ re-register themselves during AsyncListener.onStartAsync
.
+ (markt)
+
+
+ 57331: Allow ExpiresFilter to use "year" as synonym for
+ "years" in its configuration. (kkolinko)
+
+
+ Ensure that if the RewriteValve rewrites a request that subsequent calls
+ to HttpServletRequest.getRequestURI()
return the undecoded
+ URI. (markt)
+
+
+ Ensure that if the RewriteValve rewrites a request to a non-normalized
+ URI that the URI is normalized before the URI is mapped to ensure that
+ the correct mapping is applied. (markt)
+
+
+ Prevent NPEs being logged during post-processing for requests that have
+ been re-written by the RewriteValve. (markt)
+
+
+ Various StoreConfig improvements including removing a dependency on the
+ StandardServer
implementation, improve consistency of
+ behaviour when MBean is not registered and improve error messages when
+ accessed via the Manager application. (markt)
+
+
+ Improve SnoopServlet in unit tests. (rjung)
+
+
+ Add RequestDescriptor class to unit tests.
+ Adjust TestRewriteValve to use RequestDescriptor. (rjung)
+
+
+ Add more AJP unit tests. (rjung)
+
+
+ 57363: Log to stderr if LogManager is unable to read
+ configuration files rather than swallowing the exception silently.
+ (markt)
+
+
+
+
+
+
+ Allow HTTP upgrade process to complete without data corruption when
+ additional content is sent along with the upgrade header. (remm)
+
+
+ 57187: Regression handling the special * URL. (remm)
+
+
+ 57234: Make SSL protocol filtering to remove insecure
+ protocols case insensitive. (markt)
+
+
+ 57265: Fix some potential concurrency issues with sendFile
+ and the NIO connector. (markt)
+
+
+ 57324: If the client uses Expect: 100-continue
+ and Tomcat responds with a non-2xx response code, Tomcat also closes the
+ connection. If Tomcat knows the connection is going to be closed when
+ committing the response, Tomcat will now also send the
+ Connection: close
response header. (markt)
+
+
+ 57340: When using Comet, ensure that Socket and SocketWrapper
+ are only returned to their respective caches once on socket close (it is
+ possible for multiple threads to call close concurrently). (markt)
+
+
+ 57347: AJP response contains wrong status reason phrase
+ (rjung)
+
+
+ 57391: Allow TLS Session Tickets to be disabled when using
+ the APR/native HTTP connector. Patch provided by Josiah Purtlebaugh.
+ (markt)
+
+
+
+
+
+
+ 57142: As per the clarification from the JSP specification
+ maintenance lead, classes and packages imported via the page directive
+ must be made available to the EL environment via the ImportHandler.
+ (markt)
+
+
+ 57247: Correct the default Java source and target versions in
+ the JspC usage message to 1.7
for Java 7. (markt)
+
+
+ 57309: Ensure that the current EL Resolver is given an
+ opportunity to perform type coercion before applying the default EL
+ coercion rules. (markt)
+
+
+ Improve the calculation of the resource's last-modified, performed by
+ JspCompilationContext, in a way to support URLs with protocol different
+ than jar:file
. (violetagg)
+
+
+ Fix potential issue with BeanELResolver when running under a security
+ manager. Some classes may not be accessible but may have accessible
+ interfaces. (markt)
+
+
+
+
+
+
+ In order to enable define in Cluster
element,
+ ClusterSingleSignOn
implements ClusterValve
.
+ (kfujino)
+
+
+ 57338: Improve the ability of the
+ ClusterSingleSignOn
valve to handle nodes being added and
+ removed from the Cluster at run time. (markt)
+
+
+
+
+
+
+ Correct multiple issues with the flushing of batched messages that could
+ lead to duplicate and/or corrupt messages. (markt)
+
+
+ Correctly implement headers case insensitivity. (markt/remm)
+
+
+ Allow optional use of user extensions. (remm)
+
+
+ Allow using partial binary message handlers. (remm)
+
+
+ Limit ping/pong message size. (remm)
+
+
+ Allow configuration of the time interval for the periodic event. (remm)
+
+
+ More accurate annotations processing. (remm)
+
+
+ Allow optional default for origin header in the client. (remm)
+
+
+
+
+
+
+ Update documentation for CGI servlet. Recommend to copy the servlet
+ declaration into web application instead of enabling it globally.
+ Correct documentation for cgiPathPrefix. (kkolinko)
+
+
+ Improve HTML version of build instructions and align with
+ BUILDING.txt. (kkolinko)
+
+
+ Improve Tomcat Manager documentation. Rearrange, add section on
+ HTML GUI, document /expire command and Server Status page. (kkolinko)
+
+
+ 57238: Update information on SSL/TLS on Security and SSL
+ documentation pages. Patch by Glen Peterson. (kkolinko)
+
+
+ 57245: Correct the reference to allowLinking
in
+ the security configuration guide since that attribute has moved from the
+ Context element to the nested Resources element. (markt)
+
+
+ Fix ambiguity of section links on Valves configuration reference page.
+ (kkolinko)
+
+
+ 57261: Fix vminfo and threaddump Manager commands to start
+ their output with an "OK" line. Document them. Based on a patch by
+ Oleg Trokhov. (kkolinko)
+
+
+ 57267: Document the StoreConfigLifecycleListener
+ and the /save
command for the Manager application. (markt)
+
+
+ 57323: Correct display of outdated sessions in sessions
+ count listing in Manager application. (kkolinko)
+
+
+ Add document of ClusterSingleSignOn
. (kfujino)
+
+
+
+
+
+
+ When downloading required libraries at build time, use random name
+ for temporary file and automatically create destination directory
+ (base.path
). (kkolinko)
+
+
+ Update optional Checkstyle library to 6.2. (kkolinko)
+
+
+ Simplify setproxy
task in build.xml
.
+ Taskdef there is not needed since Ant 1.8.2. (kkolinko)
+
+
+ Update "ide-eclipse" target in build.xml
to create Eclipse
+ project that uses Java 7 compliance settings instead of workspace-wide
+ defaults. (kkolinko)
+
+
+ Update the package renamed copy of Apache Commons Pool 2 to the 2.3
+ release to pick up various fixes since the 2.2 release including one for
+ a possible infinite loop. (markt)
+
+
+ 57285: Restore the manifest entry that marks the Windows
+ uninstaller application as requiring elevated privileges. (markt)
+
+
+ 57344: Provide sha1 checksum files for Tomcat downloads.
+ Correct filename patterns for apache-tomcat-*-embed.tar.gz archive
+ to exclude an *.asc file. (kkolinko)
+
+
+
+
+
+
+
+
+ 43548: Add an XML schema for the tomcat-users.xml file.
+ (markt)
+
+
+ 43682: Add support for referring to the current context, host
+ and service name in per Context logging.properties files by using the
+ properties ${classloader.webappName}
,
+ ${classloader.hostName}
and
+ ${classloader.serviceName}
. (markt)
+
+
+ 47919: Extend the information logged when Tomcat starts to
+ optionally log the values of command line arguments (enabled by
+ default) and environment variables (disabled by default). Note that
+ the values added to CATALINA_OPTS and JAVA_OPTS environment variables
+ will be logged, as they are used to build up the command line. (markt)
+
+
+ 49939: Expose the method that clears the static resource
+ cache for a web application via JMX. (markt)
+
+
+ 55951: Allow cookies to use UTF-8 encoded values in HTTP
+ headers. This requires the use of the RFC6265
+ CookieProcessor. (markt)
+
+
+ 55984: Using the allow separators in version 0 cookies option
+ with the legacy cookie processor should only apply to version 0 cookies.
+ Version 1 cookies with values that contain separators should not be
+ affected and should continue to be quoted. (markt)
+
+
+ 56393: Add support for RFC6265 cookie parsing and generation.
+ This is currently disabled by default and may be enabled via the
+ CookieProcessor element of a Context.
+ (markt)
+
+
+ 56394: Introduce new configuration element CookieProcessor in
+ Context to allow context-specific configuration of cookie processing
+ options. Attributes of Context element that were added in Tomcat 8.0.13
+ to allow configuration of a new experimental RFC6265 based cookie parser
+ (useRfc6265
and cookieEncoding
) are
+ replaced by this new configuration element. (markt)
+
+
+ Improve the previous fix for 56401. Avoid logging version
+ information in the constructor since it then gets logged at undesirable
+ times such as when using StoreConfig
. (markt)
+
+
+ 56403: Add pluggable password derivation support to the
+ Realms via the new CredentialHandler
interface.
+ (markt/schultz)
+
+
+ 57016: When using the PersistentValve
do not
+ remove sessions from the store when persisting them. (markt)
+
+
+ Deprecate the use of system properties to control cookie parsing and
+ replace them with attributes on the new CookieProcessor
+ that may be configured on a per context basis. (markt)
+
+
+ Correct an edge case and allow a cookie if the value starts with an
+ equals character and the CookieProcessor
is not configured
+ to allow equals characters in cookie values but is configured to allow
+ name only cookies. (markt)
+
+
+ 57022: Ensure SPNEGO authentication continues to work with
+ the JNDI Realm using delegated credentials with recent Oracle JREs.
+ (markt)
+
+
+ 57027: Add additional validation for stored credentials used
+ by Realms when the credential is stored using hex encoding. (markt)
+
+
+ 57038: Add a WebResource.getCodeBase()
method,
+ implement for all WebResource
implementations and then use
+ it in the web application class loader to set the correct code base for
+ resources loaded from JARs and WARs. (markt)
+
+
+ Correct a couple of NPEs in the JNDI Realm that could be triggered with
+ when not specifying a roleBase and enabling roleSearchAsUser. (markt)
+
+
+ Correctly handle relative values for the docBase attribute of a Context.
+ (markt)
+
+
+ Ensure that log messages generated by the web application class loader
+ correctly identify the associated Context when multiple versions of a
+ Context with the same path are present. (markt)
+
+
+ Remove the unnecessary registration of context.xml as a redeploy
+ resource. The context.xml having an external docBase has already been
+ registered as a redeploy resource at first. (kfujino)
+
+
+ 57089: Ensure that configuration of a session ID generator is
+ not lost when a web application is reloaded. (markt)
+
+
+ 57105: When parsing web.xml do not limit the buffer element
+ of the jsp-property-group element to integer values as the allowed
+ values are <number>kb
or none
. (markt)
+
+
+ Update the minimum required version of the Tomcat Native library (if
+ used) to 1.1.32. (markt)
+
+
+ Update storeconfig with newly introduced elements: SessionIdGenerator,
+ CookieProcessor, JarScanner and JarScanFilter. (remm)
+
+
+ Throw a NullPointerException
if a null string is passed to
+ the write(String,int,int)
method of the
+ PrintWriter
obtained from the ServletResponse
.
+ (markt)
+
+
+ Cookie rewrite flag abbreviation should be CO rather than C. (remm)
+
+
+ 57153: When the StandardJarScanner is configured to scan the
+ full class path, ensure that class path entries added directly to the
+ web application class loader are scanned. (markt)
+
+
+ AsyncContext should remain usable until fireOnComplete is called. (remm)
+
+
+ AsyncContext createListener should wrap any instantiation exception
+ using a ServletException. (remm)
+
+
+ 57155: Allow a web application to be configured that does not
+ have a docBase on the file system. This is primarily intended for use
+ when embedding. (markt)
+
+
+ Propagate header ordering from fileupload to the part implementation.
+ (remm)
+
+
+
+
+
+
+ 53952: Add support for TLSv1.1 and TLSv1.2 for APR connector.
+ Based upon a patch by Marcel Šebek. This feature requires
+ Tomcat Native library 1.1.32 or later. (schultz/jfclere)
+
+
+ Cache the Encoder
instances used to convert Strings to byte
+ arrays in the Connectors (e.g. when writing HTTP headers) to improve
+ throughput. (markt)
+
+
+ Disable SSLv3 by default for JSSE based HTTPS connectors (BIO, NIO and
+ NIO2). The change also ensures that SSLv2 is disabled for these
+ connectors although SSLv2 should already be disabled by default by the
+ JRE. (markt)
+
+
+ Disable SSLv3 by default for the APR/native HTTPS connector. (markt)
+
+
+ Do not increase remaining counter at end of stream in
+ IdentityInputFilter. (kkolinko)
+
+
+ Trigger an error if an invalid attempt is made to use non-blocking IO.
+ (markt)
+
+
+ 57157: Allow calls to
+ AsyncContext.start(Runnable)
during non-blocking IO reads
+ and writes. (markt)
+
+
+ Async state MUST_COMPLETE should still be started. (remm)
+
+
+
+
+
+
+ 57099: Ensure that semi-colons are not permitted in JSP
+ import page directives. (markt)
+
+
+ 57113: Fix broken package imports in Expression Language when
+ more than one package was imported and the desired class was not in the
+ last package imported. (markt)
+
+
+ 57132: Fix import conflicts reporting in Expression Language.
+ (kkolinko)
+
+
+ When coercing an object to a given type, only attempt coercion to an
+ array if both the object type and the target type are an array type.
+ (violetagg/markt)
+
+
+ Improve handling of invalid input to
+ javax.el.ImportHandler.resolveClass()
. (markt)
+
+
+ Allow the same class to be added to an instance of
+ javax.el.ImportHandler
more than once without triggering
+ an error. The second and subsequent calls for the same class will be
+ ignored. (markt)
+
+
+ 57136: Ensure only \${
and \#{
are
+ treated as escapes for ${
and #{
rather than
+ \$
and \#
being treated as escapes for
+ $
and #
when processing literal expressions in
+ expression language. (markt)
+
+
+ When coercing an object to an array type in Expression Language, handle
+ the case where the source object is an array of primitives.
+ (markt/kkolinko)
+
+
+ Do not throw an exception on missing JSP file servlet initialization.
+ (remm)
+
+
+ 57148: When coercing an object to a given type and a
+ PropertyEditor
has been registered for the type correctly
+ coerce the empty string to null
if the
+ PropertyEditor
throws an exception. (kkolinko/markt)
+
+
+ 57153: Correctly scan for TLDs located in directories that
+ represent expanded JARs files that have been added to the web application
+ class loader's class path. (markt)
+
+
+ 57141: Enable EL in JSPs to refer to static fields of
+ imported classes including the standard java.lang.*
+ imports. (markt)
+
+
+
+
+
+
+ Add support for the SessionIdGenerator
to cluster manager
+ template. (kfujino)
+
+
+ Avoid possible integer overflows reported by Coverity Scan. (fschumacher)
+
+
+
+
+
+
+ 57054: Correctly handle the case in the WebSocket client
+ when the HTTP response to the upgrade request can not be read in a
+ single pass; either because the buffer is too small or the server sent
+ the response in multiple packets. (markt)
+
+
+ Extend support for the permessage-deflate
extension to the
+ client implementation. (markt)
+
+
+ Fix client subprotocol handling. (remm)
+
+
+ Add null checks for arguments in remote endpoint. (remm/kkolinko)
+
+
+ 57091: Work around the behaviour of the Oracle JRE when
+ creating new threads in an applet environment that breaks the WebSocket
+ client implementation. Patch provided by Niklas Hallqvist. (markt)
+
+
+ 57118: Ensure that that an EncodeException
is
+ thrown by RemoteEndpoint.Basic.sendObject(Object)
rather
+ than an IOException
when no suitable Encoder
+ is configured for the given Object. (markt)
+
+
+
+
+
+
+ Correct a couple of broken links in the Javadoc. (markt)
+
+
+ Correct documentation for ServerCookie.ALLOW_NAME_ONLY
+ system property. (kkolinko)
+
+
+ 57049: Clarified that jvmRoute
can be set in
+ <Engine>
's jvmRoute
or in a system
+ property. (schultz)
+
+
+ Correct version of Java WebSocket mentioned in documentation
+ (s/1.0/1.1/). (markt/kkolinko)
+
+
+ Suppress timestamp comments in Javadoc. (kkolinko)
+
+
+ 57147: Various corrections to the JDBC Store section of the
+ session manager configuration page of the documentation web application.
+ (markt)
+
+
+
+
+
+
+ 45282: Improve shutdown of NIO receiver so that sockets are
+ closed cleanly. (fhanik/markt)
+
+
+
+
+
+
+ 57005: Fix javadoc errors when building with Java 8. Patch
+ provided by Pierre Viret. (markt)
+
+
+ 57079: Use Tomcat version number for jdbc-pool module when
+ building and shipping the module as part of Tomcat. (markt)
+
+
+ Fix broken overview page in javadoc generated via "javadoc" task in
+ jdbc-pool build.xml file. (kkolinko)
+
+
+
+
+
+
+ 56079: The uninstaller packaged with the Apache Tomcat
+ Windows installer is now digitally signed. (markt)
+
+
+ Fix timestamps in Tomcat build and jdbc-pool to use 24-hour format
+ instead of 12-hour one and use UTC timezone. (markt/kkolinko)
+
+
+ Update the package renamed copy of Apache Commons DBCP 2 to revision
+ 1631450 to pick up additional fixes since the 2.0.1 release including
+ Javadoc corrections to fix errors when compiling with Java 8. (markt)
+
+
+ 56596: Update to Tomcat Native Library version 1.1.32 to
+ pick up the Windows binaries that are based on OpenSSL 1.0.1j and APR
+ 1.5.1. (markt)
+
+
+ In Tomcat tests: log name of the current test method at start time.
+ (kkolinko)
+
+
+
+
+
+
+
+
+ 56079: The Apache Tomcat Windows installer, the Apache Tomcat
+ Windows service and the Apache Tomcat Windows service monitor
+ application are now digitally signed. (markt)
+
+
+
+
+
+
+
+
+ 55917: Allow bytes in the range 0x80 to 0xFF to appear in
+ cookie values if the cookie is a V1 (RFC2109) cookie and the value is
+ correctly quoted. The new RFC6265 based cookie parser must be enabled to
+ correctly handle these cookies. (markt)
+
+
+ 55918: Do not permit control characters to appear in quoted
+ V1 (RFC2109) cookie values. The new RFC6265 based cookie parser must be
+ enabled to correctly handle these cookies. (markt)
+
+
+ 55921: Correctly handle (ignore the cookie) unescaped JSON in
+ a cookie value. The new RFC6265 based cookie parser must be enabled to
+ correctly handle these cookies. (markt)
+
+
+ 56401: Log version information when Tomcat starts.
+ (markt/kkolinko)
+
+
+ 56530: Add a web application class loader implementation that
+ supports the parallel loading of web application classes. (markt)
+
+
+ 56900: Fix some potential resource leaks when reading
+ property files reported by Coverity Scan. Based on patches provided by
+ Felix Schumacher. (markt)
+
+
+ 56902: Fix a potential resource leak in the Default Servlet
+ reported by Coverity Scan. Based on a patch provided by Felix
+ Schumacher. (markt)
+
+
+ 56903: Correct the return value for
+ StandardContext.getResourceOnlyServlets()
so that multiple
+ names are separated by commas. Identified by Coverity Scan and fixed
+ based on a patch by Felix Schumacher. (markt)
+
+
+ Add an additional implementation of a RFC6265 based cookie parser along
+ with new Context options to select and configure it. This parser is
+ currently considered experimental and is not used by default. (markt)
+
+
+ Fixed the multipart elements merge operation performed during web
+ application deployment. Identified by Coverity Scan. (violetagg)
+
+
+ Correct the information written by
+ ExtendedAccessLogValve
when a format token x-O(XXX) is
+ used so that multiple values for a header XXX are separated by commas.
+ Identified by Coverity Scan. (violetagg)
+
+
+ Fix a potential resource leak when reading MANIFEST.MF file for
+ extension dependencies reported by Coverity Scan. (violetagg)
+
+
+ Fix some potential resource leaks when reading properties, files and
+ other resources. Reported by Coverity Scan. (violetagg)
+
+
+ Correct the previous fix for 56825 that enabled pre-emptive
+ authentication to work with the SSL authenticator. (markt)
+
+
+ Refactor to reduce code duplication identified by Simian. (markt)
+
+
+ When using parallel deployment and undeployOldVersions
+ feature is enabled on a Host, correctly undeploy context of old
+ version. Make sure that Tomcat does not undeploy older Context if
+ current context is not running. (kfujino)
+
+
+ Fix a rare threading issue when locking resources via WebDAV.
+ (markt)
+
+
+ Fix a rare threading issue when using HTTP digest authentication.
+ (markt)
+
+
+ When deploying war, add XML file in the config base to the redeploy
+ resources if war does not have META-INF/context.xml or
+ deployXML
is false. If XML file is created in the config
+ base, redeploy will occur. (kfujino)
+
+
+ Various changes to reduce unnecessary code in Tomcat's copy of
+ Apache Commons BCEL to reduce the time taken for annotation scanning
+ when web applications start. Includes contributions from kkolinko and
+ hzhang9. (markt)
+
+
+ 56938: Ensure web applications that have mixed case context
+ paths and are deployed as directories are correctly removed on undeploy
+ when running on a case sensitive file system. (markt)
+
+
+ 57004: Add stuckThreadCount
property to
+ StuckThreadDetectionValve
's JMX bean. Patch provided by
+ Jiří Pejchal. (schultz)
+
+
+ 57011: Ensure that the request and response are correctly
+ recycled when processing errors during async processing. (markt)
+
+
+
+
+
+
+ 56910: Prevent the invalid value of -1
being
+ used for maxConnections
with APR connectors. (markt)
+
+
+ Ensure that AJP connectors enable the KeepAliveTimeout
.
+ (kfujino)
+
+
+ Reduce duplicated code. All AJP connectors use common method to
+ configuration of processor. (kfujino)
+
+
+
+
+
+
+ 43001: Enable the JspC Ant task to set the JspC option
+ mappedFile
. (markt)
+
+
+ Ensure that the implementation of
+ javax.servlet.jsp.PageContext.include(String)
+ and
+ javax.servlet.jsp.PageContext.include(String, boolean)
+ will throw IOException
when an I/O error occur during
+ the operation. (violetagg)
+
+
+ 56908: Fix some potential resource leaks when reading
+ jar files. Reported by Coverity Scan. Patch provided by Felix
+ Schumacher. (violetagg)
+
+
+ Fix a potential resource leak in JDTCompiler when checking whether
+ a resource is a package. Reported by Coverity Scan. (fschumacher)
+
+
+ 56991: Deprecate the use of a request attribute to pass a
+ <jsp-file> declaration to Jasper and prevent an infinite loop
+ if this technique is used in conjunction with an include. (markt)
+
+
+
+
+
+
+ 56905: Make destruction on web application stop of thread
+ group used for WebSocket connections more robust. (kkolinko/markt)
+
+
+ 56907: Ensure that client IO threads are stopped if a secure
+ WebSocket client connection fails. (markt)
+
+
+ 56982: Return the actual negotiated extensions rather than an
+ empty list for Session.getNegotiatedExtensions()
. (markt)
+
+
+ Update the WebSocket implementation to support the Java WebSocket
+ specification version 1.1. (markt)
+
+
+
+
+
+
+ Add JarScanner
to the nested components listed for a
+ Context. (markt)
+
+
+ Update the Windows authentication documentation after some additional
+ testing to answer the remaining questions. (markt)
+
+
+
+
+
+
+ 56895: Correctly compose JAVA_OPTS
in
+ catalina.bat
so that escape sequences are preserved. Patch
+ by Lucas Theisen. (markt)
+
+
+ 56988: Allow to use relative path in base.path
+ setting when building Tomcat. (kkolinko)
+
+
+ 56990: Ensure that the ide-eclipse
build target
+ downloads all the libraries required by the default Eclipse
+ configuration files. (markt)
+
+
+ Update the package renamed copy of Apache Commons DBCP 2 to revision
+ 1626988 to pick up the fixes since the 2.0.1 release including support
+ for custom eviction policies. (markt)
+
+
+ Update the package renamed copy of Apache Commons Pool 2 to revision
+ 1627271 to pick up the fixes since the 2.2 release including some memory
+ leak fixes and support for application provided eviction policies.
+ (markt)
+
+
+
+
+
+
+
+
+ Make the session id generator extensible by adding a
+ SessionIdGenerator
interface, an abstract
+ base class and a standard implementation. (rjung)
+
+
+ 56882: Fix regression in processing of includes and forwards
+ when Context have been reloaded. Tomcat was responding with HTTP Status
+ 503 (Servlet xxx is currently unavailable). (kkolinko)
+
+
+
+
+
+
+ When building a list of JSSE ciphers from an OpenSSL cipher definition,
+ ignore unknown criteria rather than throwing a
+ NullPointerException
. (markt)
+
+
+ Add support for the EECDH alias when using the OpenSSL cipher syntax to
+ define JSSE ciphers. (markt)
+
+
+
+
+
+
+ Correct a logic error in the JasperElResolver
. There was no
+ functional impact but the code was less efficient as a result of the
+ error. Based on a patch by martinschaef. (markt)
+
+
+ 56568: Enable any HTTP method to be used to request a JSP
+ page that has the isErrorPage
page directive set to
+ true
. (markt)
+
+
+
+
+
+
+ Extend support for the permessage-deflate
extension to
+ compression of outgoing messages on the server side. (markt)
+
+
+
+
+
+
+ 56323: Include the *.bat
files when installing
+ Tomcat via the Windows installer. (markt)
+
+
+
+
+
+
+
+
+ 56658: Fix regression that a context was inaccessible after
+ reload. (kkolinko)
+
+
+ 56710: Do not map requests to servlets when context is
+ being reloaded. (kkolinko)
+
+
+ 56712: Fix session idle time calculations in
+ PersistenceManager
. (kkolinko)
+
+
+ 56717: Fix duplicate registration of
+ MapperListener
during repeated starts of embedded Tomcat.
+ (kkolinko)
+
+
+ 56724: Write an error message to Tomcat logs if container
+ background thread is aborted unexpectedly. (kkolinko)
+
+
+ When scanning class files (e.g. for annotations) and reading the number
+ of parameters in a MethodParameters
structure only read a
+ single byte (rather than two bytes) as per the JVM specification. Patch
+ provided by Francesco Komauli. (markt)
+
+
+ Allow the JNDI Realm to start even if the directory is not available.
+ The directory not being available is not fatal once the Realm is started
+ and it need not be fatal when the Realm starts. Based on a patch by
+ Cédric Couralet. (markt)
+
+
+ 56736: Avoid an incorrect IllegalStateException
+ if the async timeout fires after a non-container thread has called
+ AsyncContext.dispatch()
but before a container thread
+ starts processing the dispatch. (markt)
+
+
+ 56739: If an application handles an error on an application
+ thread during asynchronous processing by calling
+ HttpServletResponse.sendError()
, then ensure that the
+ application is given an opportunity to report that error via an
+ appropriate application defined error page if one is configured. (markt)
+
+
+ 56784: Fix a couple of rare but theoretically possible
+ atomicity bugs. (markt)
+
+
+ 56785: Avoid NullPointerException
if directory
+ exists on the class path that is not readable by the Tomcat user.
+ (markt)
+
+
+ 56796: Remove unnecessary sleep when stopping a web
+ application. (markt)
+
+
+ 56801: Improve performance of
+ org.apache.tomcat.util.file.Matcher
which is to filter JARs
+ for scanning during web application start. Based on a patch by Sheldon
+ Shao. (markt)
+
+
+ 56815: When the gzip
option is enabled for the
+ DefaultServlet
ensure that a suitable Vary
+ header is returned for resources that might be returned directly in
+ compressed form. (markt)
+
+
+ Do not mark threads from the container thread pool as container threads
+ when being used to process AsyncContext.start(Runnable)
so
+ processing is correctly transferred back to a genuine container thread
+ when necessary. (markt)
+
+
+ Add simple caching for calls to StandardRoot.getResources()
+ in the new (for 8.0.x) resources implementation. (markt)
+
+
+ 56825: Enable pre-emptive authentication to work with the
+ SSL authenticator. Based on a patch by jlmonteiro. (markt)
+
+
+ 56840: Avoid NPE when the rewrite valve is mapped to
+ a context. (remm)
+
+
+ Correctly handle multiple accept-language
headers rather
+ than just using the first header to determine the user's preferred
+ Locale. (markt)
+
+
+ 56848: Improve handling of accept-language
+ headers. (markt)
+
+
+ 56857: Fix thread safety issue when calling ServletContext
+ methods while running under a security manager. (markt)
+
+
+
+
+
+
+ Fix NIO2 sendfile state tracking and error handling to fix
+ various corruption issues. (remm)
+
+
+ Missing timeout for NIO2 sendfile writes. (remm)
+
+
+ Allow inline processing for NIO2 sendfile and optimize keepalive
+ behavior. (remm)
+
+
+ Fix excessive NIO2 sendfile direct memory use in some cases, sendfile
+ will now instead use the regular socket write buffer as configured.
+ (remm)
+
+
+ 56661: Fix getLocalAddr()
for AJP connectors.
+ The complete fix is only available with a recent AJP forwarder like
+ the forthcoming mod_jk 1.2.41. (rjung)
+
+
+ Use default ciphers defined as
+ HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5
so
+ that no weak ciphers are enabled by default. (remm)
+
+
+ 56780: Enable Tomcat to start when using SSL with an IBM JRE
+ in strict SP800-131a mode. (markt)
+
+
+ 56810: Remove use of Java 8 specific API calls in unit tests
+ for OpenSSL to JSSE cipher conversion. (markt)
+
+
+
+
+
+
+ 56709: Fix system property name in a log message. Submitted
+ by Robert Kish. (remm)
+
+
+ 56797: When matching a method in an EL expression, do not
+ treat bridge methods as duplicates of the method they bridge to. In this
+ case always call the target of the bridge method. (markt)
+
+
+
+
+
+
+ 56746: Allow secure WebSocket client threads to use the
+ current context class loader rather than explicitly setting it to the
+ class loader that loaded the WebSocket implementation. This allows
+ WebSocket client connections from within web applications to access,
+ amongst other things, the JNDI resources associated with the web
+ application. (markt)
+
+
+
+
+
+
+ Correct the label in the list of sessions by idle time for the bin that
+ represents the idle time immediately below the maximum permitted idle
+ time when using the expire command of the Manager application. (markt)
+
+
+
+
+
+
+ 53088: More identifiable thread name. (fhanik)
+
+
+ 53200: Selective logging for slow versus failed queries.
+ (fhanik)
+
+
+ 53853: More flexible classloading. (fhanik)
+
+
+ 54225: Disallow empty init SQL. (fhanik)
+
+
+ 54227: Evaluate max age upon borrow. (fhanik)
+
+
+ 54235: Disallow nested pools exploitating using data source.
+ (fhanik)
+
+
+ 54395: Fix JDBC interceptor parsing bug. (fhanik)
+
+
+ 54537: Performance improvement in
+ StatementFinalizer
. (fhanik)
+
+
+ 54978: Make sure proper connection validation always happens,
+ regardless of config. (fhanik)
+
+
+ 56318: Ability to trace statement creation in
+ StatementFinalizer
. (fhanik)
+
+
+ 56789: getPool() returns the actual pool, always. (fhanik)
+
+
+
+
+
+
+ 56788: Display the full version in the list of installed
+ applications when installed via the Windows installer package. Patch
+ provided by Alexandre Garnier. (markt)
+
+
+ 56829: Add the ability for users to define their own values
+ for _RUNJAVA
and _RUNJDB
environment
+ variables. Be more strict with executable filename on Windows
+ (s/java/java.exe/). Based on a patch by Neeme Praks. (markt/kkolinko)
+
+
+
+
+
+
+
+
+ 44312: Log an error if there is a conflict between Host and
+ Alias names. Improve host management methods in Mapper
+ to avoid occasionally removing a wrong host. Check that host management
+ operations are performed on the host and not on an alias. (kkolinko)
+
+
+ 56611: Refactor code to remove inefficient calls to
+ Method.isAnnotationPresent()
. Based on a patch by Jian Mou.
+ (markt/kkolinko)
+
+
+ Fix regression in
+ StandardContext.removeApplicationListener()
, introduced by
+ the fix for bug 56588. (kkolinko)
+
+
+ 56653: Fix concurrency issue with lists of contexts in
+ Mapper
when stopping Contexts. (kkolinko)
+
+
+ 56657: When using parallel deployment, if the same session id
+ matches different versions of a web application, prefer the latest
+ version. Ensure that remapping selects the version that we expect.
+ (kkolinko)
+
+
+ Assert that mapping result object is empty before performing mapping
+ work in Mapper
. (kkolinko)
+
+
+ Remove context
and wrapper
fields in
+ Request
class and deprecate their setters. (kkolinko)
+
+
+ 56658: Avoid delay between registrations of mappings for
+ context and for its servlets. (kkolinko)
+
+
+ 56665: Correct the generation of the effective web.xml when
+ elements contain an empty string as value. (violetagg)
+
+
+ Fix storeconfig exception routing issues, so that a major problem
+ should avoid configuration overwrite. (remm)
+
+
+ Add configuration fields for header names in SSLValve. (remm)
+
+
+ 56666: When clearing the SSO cookie use the same values for
+ domain, path, httpOnly and secure as were used to set the SSO cookie.
+ (markt)
+
+
+ 56677: Ensure that
+ HttpServletRequest.getServletContext()
returns the correct
+ value during a cross-context dispatch. (markt)
+
+
+ 56684: Ensure that Tomcat does not shut down if the socket
+ waiting for the shutdown command experiences a
+ SocketTimeoutException
. (markt)
+
+
+ 56693: Fix various issues in the static resource cache
+ implementation where the cache retained a stale entry after the
+ successful completion of an operation that always invalidates the cache
+ entry such as a delete operation.
+ (markt)
+
+
+ When the current PathInfo is modified as a result of dispatching a
+ request, ensure that a call to
+ HttpServletRequest.getPathTranslated()
returns a value that
+ is based on the modified PathInfo. (markt)
+
+
+ 56698: When persisting idle sessions, only persist newly idle
+ sessions. Patch provided by Felix Schumacher. (markt)
+
+
+
+
+
+
+ 56663: Fix edge cases demonstrated by ByteCounter relating
+ to data available, remaining and extra write events, mostly occurring
+ with non blocking Servlet 3.1. (remm)
+
+
+ Avoid possible NPE stopping endpoints that are not started (stop
+ shouldn't do anything in that case). (remm)
+
+
+ 56704: Add support for OpenSSL syntax for ciphers when
+ using JSSE SSL connectors. Submitted by Emmanuel Hugonnet. (remm)
+
+
+ Allow to configure maxSwallowSize
attribute of an HTTP
+ connector via JMX. (kkolinko)
+
+
+
+
+
+
+ 56543: Update to the Eclipse JDT Compiler 4.4. (violetagg)
+
+
+ 56652: Add support for method parameters that use arrays and
+ varargs to ELProcessor.defineFunction()
.(markt)
+
+
+
+
+
+
+ Add support for the permessage-deflate
extension. This is
+ currently limited to decompressing incoming messages on the server side.
+ It is expected that support will be extended to outgoing messages and to
+ the client side shortly. (markt)
+
+
+
+
+
+
+ Attempt to obfuscate session cookie values associated with other web
+ applications when viewing HTTP request headers with the Cookies example
+ from the examples web application. This reduces the opportunity to use
+ this example for malicious purposes should the advice to remove the
+ examples web application from security sensitive systems be ignored.
+ (markt)
+
+
+ 56694: Remove references to Manager
attribute
+ checkInterval
from documentation and Javadoc since it no
+ longer exists. Based on a patch by Felix Schumacher. Also remove other
+ references to checkInterval
that are no longer valid.
+ (markt)
+
+
+
+
+
+
+ Update the API stability section of the release notes now that Tomcat 8
+ has had its first stable release. (markt)
+
+
+ Improve build.xml
so that when Eclipse JDT Compiler is
+ updated, it will delete the old JAR from build/lib
+ directory. (kkolinko)
+
+
+ Simplify implementation of "setproxy" target in build.xml
.
+ (kkolinko)
+
+
+ Update optional Checkstyle library to 5.7. (kkolinko)
+
+
+ 56596: Update to Tomcat Native Library version 1.1.31 to
+ pick up the Windows binaries that are based on OpenSSL 1.0.1h. (markt)
+
+
+ 56685: Add quotes necessary for daemon.sh
to
+ work correctly on Solaris. Based on a suggestion by lfuka. (markt)
+
+
+ Update package renamed Apache Commons Pool2 to r1609323 to pick various
+ bug fixes. (markt)
+
+
+ Update package renamed Apache Commons DBCP2 to r1609329 to pick up a
+ minor bug fix. (markt)
+
+
+ Update package renamed Apache Commons FileUpload to r1596086 to pick
+ various bug fixes. (markt)
+
+
+
+
+
+
+
+
+ 55282: Ensure that one and the same application listener is
+ added only once when starting the web application. (violetagg)
+
+
+ 55975: Apply consistent escaping for double quote and
+ backslash characters when escaping cookie values. (markt)
+
+
+ 56387: Improve the code that handles an attempt to load a
+ class after a web application has been stopped. Use common code to handle
+ this case regardless of the access path and don't throw an exception
+ purely to log a stack trace. (markt)
+
+
+ 56399: Improve implementation of CoyoteAdapter.checkRecycled()
+ to do not use an exception for flow control. (kkolinko)
+
+
+ 56461: New failCtxIfServletStartFails
attribute
+ on Context and Host configuration to force the context startup to fail
+ if a load-on-startup servlet fails its startup. (slaurent)
+
+
+ 56526: Improved the StuckThreadDetectionValve
to
+ optionally interrupt stuck threads to attempt to unblock them.
+ (slaurent)
+
+
+ 56545: Pre-load two additional classes, the loading of which
+ may otherwise be triggered by a web application which in turn would
+ trigger an exception when running under a security manager. (markt)
+
+
+ 56546: Reduce logging level for stack traces of stuck web
+ application threads printed by WebappClassLoader.clearReferencesThreads()
+ from error to info. (kkolinko)
+
+
+ Refactor and simplify common code in object factories in
+ org.apache.catalina.naming
package, found thanks to Simian
+ (Similarity Analyser) tool. Improve handling of Throwable.
+ (markt/kkolinko)
+
+
+ Relax cookie naming restrictions. Cookie attribute names used in the
+ Set-Cookie
header may be used unambiguously as cookie
+ names. The restriction that prevented such usage has been removed.
+ (jboynes/markt)
+
+
+ Further relax cookie naming restrictions. Version 0 (a.k.a Netscape
+ format) cookies may now use names that start with the $
+ character. (jboynes/markt)
+
+
+ Restrict cookie naming so that the =
character is no longer
+ permitted in a version 0 (a.k.a. Netscape format) cookie name. While
+ Tomcat allowed this, browsers always truncated the name at the
+ =
character leading to a mis-match between the cookie the
+ server set and the cookie returned by the browser. (jboynes/markt)
+
+
+ Add a simple ServiceLoader
based discovery mechanism to the
+ JULI LogFactory
to make it easier to use JULI and Tomcat
+ components that depend on JULI (such as Jasper) independently from
+ Tomcat. Patch provided by Greg Wilkins. (markt)
+
+
+ 56578: Correct regression in the fix for 56339
+ that prevented sessions from expiring when using clustering. (markt)
+
+
+ 56588: Remove code previously added to enforce the
+ requirements of section 4.4 of the Servlet 3.1 specification. The code
+ is no longer required now that Jasper initialization has been refactored
+ and TLD defined listeners are added via a different code path that
+ already enforces the specification requirements. (markt)
+
+
+ 56600: In WebdavServlet: Do not waste time generating
+ response for broken PROPFIND request. (kkolinko)
+
+
+ Provide a better error message when asynchronous operations are not
+ supported by a filter or servlet. Patch provided by Romain Manni-Bucau.
+ (violetagg)
+
+
+ 56606: User entries in tomcat-users.xml
file
+ are recommended to use "username" attribute rather than legacy "name"
+ attribute. Fix inconsistencies in Windows installer, examples. Update
+ digester rules and documentation for MemoryRealm
.
+ (markt/kkolinko)
+
+
+
+
+
+
+ 56518: When using NIO, do not attempt to write to the socket
+ if the thread is marked interrupted as this will lead to a connection
+ limit leak. This fix was based on analysis of the issue by hanyong.
+ (markt)
+
+
+ 56521: Re-use the asynchronous write buffer between writes to
+ reduce allocation and GC overhead. Based on a patch by leonzhx. Also
+ make the buffer size configurable and remove copying of data within
+ buffer when the buffer is only partially written on a subsequent write.
+ (markt)
+
+
+ Ensure that a request without a body is correctly handled during Comet
+ processing. This fixes the Comet chat example. (markt)
+
+
+ Fix input concurrency issue in NIO2 upgrade. (remm)
+
+
+ Correct a copy/paste error and return a 500 response rather than a 400
+ response when an internal server error occurs on early stages of
+ request processing. (markt)
+
+
+ 56582: Use switch(actionCode) in processors instead of a
+ chain of "elseif"s. (kkolinko)
+
+
+ 56582#c1: Implement DISPATCH_EXECUTE action for AJP
+ connectors. (kkolinko)
+
+
+ Fix CVE-2014-0227:
+ Various improvements to ChunkedInputFilter including clean-up, i18n for
+ error messages and adding an error flag to allow subsequent attempts at
+ reading after an error to fail fast. (markt)
+
+
+ If request contains an unrecognized Expect header, respond with error
+ 417 (Expectation Failed), according to RFC2616 chapter 14.20. (markt)
+
+
+ When an error occurs after the response has been committed close the
+ connection immediately rather than attempting to finish the response to
+ make it easier for the client to differentiate between a complete
+ response and one that failed part way though. (markt)
+
+
+ Remove the beta tag from the NIO2 connectors. (remm)
+
+
+ 56620: Avoid bogus access log entries when pausing the NIO
+ HTTP connector and ensure that access log entries generated by error
+ conditions use the correct request start time. (markt)
+
+
+ Improve configuration of cache sizes in the endpoint. (markt)
+
+
+ Fix CVE-2014-0230:
+ Add a new limit, defaulting to 2MB, for the amount of data Tomcat will
+ swallow for an aborted upload. The limit is configurable by
+ maxSwallowSize
attribute of an HTTP connector. (markt)
+
+
+
+
+
+
+ 56334#c15: Fix a regression in EL parsing when quoted string
+ follows a whitespace. (kkolinko/markt)
+
+
+ 56543: Update to the Eclipse JDT Compiler 4.4RC4 to pick up
+ some fixes for Java 8 support. (markt/kkolinko)
+
+
+ 56561: Avoid NoSuchElementException
while
+ handling attributes with empty string value. (violetagg)
+
+
+ Do not configure a JspFactory
in the
+ JasperInitializer
if one has already been set as might be
+ the case in some embedding scenarios. (markt)
+
+
+ Add a simple implementation of InstanceManager
and have
+ Jasper use it if no other InstanceManager
is provided. This
+ makes it easier to use Jasper independently from Tomcat. Patch provided
+ by Greg Wilkins. (markt)
+
+
+ 56568: Allow any HTTP method when a JSP is being used as an
+ error page. (markt)
+
+
+ 56581: If an error on a JSP page occurs when response has
+ already been committed, do not clear the buffer of JspWriter, but flush
+ it. It will make more clear where the error occurred. (kkolinko)
+
+
+ 56612: Correctly parse two consecutive escaped single quotes
+ when used in UEL expression in a JSP. (markt)
+
+
+ Move code that parses EL expressions within JSP template text from
+ Parser
to JspReader
class for better
+ performance. (kkolinko)
+
+
+ 56636: Correctly identify the required method when specified
+ via ELProcessor.defineFunction(String,String,String,String)
+ when using Expression Language. (markt)
+
+
+ 56638: When using
+ ELProcessor.defineFunction(String,String,String,String)
and
+ no function name is specified, use the method name as the function name
+ as required by the specification. (markt)
+
+
+
+
+
+
+ 56446: Clearer handling of exceptions when calling a method
+ on a POJO based WebSocket endpoint. Based on a suggestion by Eugene
+ Chung. (markt)
+
+
+ When a WebSocket client attempts to write to a closed connection, handle
+ the resulting IllegalStateException
in a manner consistent
+ with the handling of an IOException
. (markt)
+
+
+ Add more varied endpoints for echo testing. (remm)
+
+
+ 56577: Improve the executor configuration used for the
+ callbacks associated with asynchronous writes. (markt)
+
+
+
+
+
+
+ Set the path for cookies created by the examples web application so they
+ only returned to the examples application. This reduces the opportunity
+ for using such cookies for malicious purposes should the advice to
+ remove the examples web application from security sensitive systems be
+ ignored. (markt/kkolinko)
+
+
+ Attempt to obfuscate session cookie values associated with other web
+ applications when viewing HTTP request headers with the Request Header
+ example from the examples web application. This reduces the opportunity
+ to use this example for malicious purposes should the advice to remove
+ the examples web application from security sensitive systems be ignored.
+ (markt)
+
+
+ Add options for all of the WebSocket echo endpoints to the WebSocket
+ echo example in the examples web application. (markt)
+
+
+ Ensure that the asynchronous WebSocket echo endpoint in the examples
+ web application always waits for the previous message to complete before
+ it sends the next. (markt)
+
+
+
+
+
+
+ Update package renamed Apache Commons DBCP2 to r1596858. (markt)
+
+
+
+
+
+
+
+
+ 56536: Ensure that
+ HttpSessionBindingListener.valueUnbound()
uses the correct
+ class loader when the SingleSignOn
valve is used. (markt)
+
+
+
+
+
+
+ 56529: Avoid NoSuchElementException
while handling
+ attributes with empty string value in custom tags. Patch provided by
+ Hariprasad Manchi. (violetagg)
+
+
+
+
+
+
+
+
+ 56523: When using SPNEGO authentication, log the exceptions
+ associated with failed user logins at debug level rather than error
+ level. (markt)
+
+
+
+
+
+
+ 56399: Assert that both Coyote and Catalina request objects
+ have been properly recycled. (kkolinko)
+
+
+
+
+
+
+ 56522: When setting a value for a
+ ValueExpression
, ensure that the expected coercions take
+ place such as a null
string being coerced to an empty
+ string. (markt)
+
+
+
+
+
+
+ Copy missing resources file from Apache Commons DBCP 2 to packaged
+ renamed copy of DBCP 2. (markt)
+
+
+
+
+
+
+
+
+ Fix extension validation which was broken by refactoring for new
+ resources implementation. (markt)
+
+
+ Fix custom UTF-8 decoder so that a byte of value 0xC1 is always rejected
+ immediately as it is never valid in a UTF-8 byte sequence. Update UTF-8
+ decoder tests to account for UTF-8 decoding improvements in Java 8.
+ The custom UTF-8 decoder is still required due to bugs in the UTF-8
+ decoder provided by Java. Java 8's decoder is better than Java
+ 7's but it is still buggy. (markt)
+
+
+ 56027: Add more options for managing FIPS mode in the
+ AprLifecycleListener. (schultz/kkolinko)
+
+
+ 56320: Fix a file descriptor leak in the default servlet when
+ sendfile is used. (markt)
+
+
+ 56321: When a WAR is modified, undeploy the web application
+ before deleting any expanded directory as the undeploy process may
+ refer to classes that need to be loaded from the expanded directory. If
+ the expanded directory is deleted first, any attempt to load a new class
+ during undeploy will fail. (markt)
+
+
+ 56327: Enable AJP as well as HTTP connectors to be created
+ via JMX. Patch by kiran. (markt)
+
+
+ 56339: Avoid an infinite loop if an application calls
+ session.invalidate()
from the session destroyed event for
+ that session. (markt)
+
+
+ 56365: Simplify file name pattern matching code in
+ StandardJarScanner
. Improve documentation. (kkolinko)
+
+
+ Ensure that the static resource cache is able to detect when a cache
+ entry is invalidated by being overridden by a new resource in a
+ different WebResourceSet
. (markt)
+
+
+ 56369: Ensure that removing an MBean notification listener
+ reverts all the operations performed when adding an MBean notification
+ listener. (markt)
+
+
+ Improve implementation of Lifecycle
for
+ WebappClassLoader
. State is now correctly reported rather
+ than always reporting as NEW
. (markt)
+
+
+ 56382: Information about finished deployment and its execution
+ time is added to the log files. Patch is provided by Danila Galimov.
+ (violetagg)
+
+
+ 56383: Properties for disabling server information and error
+ report are added to the org.apache.catalina.valves.ErrorReportValve
.
+ Based on the patch provided by Nick Bunn. (violetagg/kkolinko)
+
+
+ 56390: Fix JAR locking issue with JARs containing TLDs and
+ the TLD cache that prevented the undeployment of web applications when
+ the WAR was deleted. (markt)
+
+
+ Fix CVE-2014-0119:
+ Only create XML parsing objects if required and fix associated potential
+ memory leak in the default Servlet.
+ Extend XML factory, parser etc. memory leak protection to cover some
+ additional locations where, theoretically, a memory leak could occur.
+ (markt)
+
+
+ Modify generic exception handling so that
+ StackOverflowError
is not treated as a fatal error and can
+ handled and/or logged as required. (markt)
+
+
+ 56409: Avoid StackOverflowError
on non-Windows
+ systems if a file named \
is encountered when scanning for
+ TLDs. (markt)
+
+
+ 56430: Extend checks for suspicious URL patterns to include
+ patterns of the form *.a.b
which are not valid patterns for
+ extension mappings. (markt)
+
+
+ 56441: Raise the visibility of exceptions thrown when a
+ problem is encountered calling a getter or setter on a component
+ attribute. The logging level is raised from debug to warning. (markt)
+
+
+ 56463: Property for disabling server information is added to
+ the DefaultServlet
. Server information is presented in the
+ response sent to the client when directory listings is enabled.
+ (violetagg)
+
+
+ 56472: Allow NamingContextListener to clean up on stop if its
+ start failed. (kkolinko)
+
+
+ 56481: Work around case insensitivity issue in
+ URLClassLoader
exposed by some recent refactoring. (markt)
+
+
+ 56492: Avoid eclipse debugger pausing on uncaught exceptions
+ when tomcat renews its threads. (slaurent)
+
+
+ Add the org.apache.naming
package to the packages requiring
+ code to have the defineClassInPackage
permission when
+ running under a security manager. (markt)
+
+
+ Make the naming context tokens for containers more robust by using a
+ separate object. Require RuntimePermission when introducing a new token.
+ (markt/kkolinko)
+
+
+ 56501: HttpServletRequest.getContextPath()
+ should return the undecoded context path used by the user agent. (markt)
+
+
+ Minor fixes to ThreadLocalLeakPreventionListener
. Do not
+ trigger threads renewal for failed contexts. Do not ignore
+ threadRenewalDelay
setting. Improve documentation. (kkolinko)
+
+
+ Correct regression introduced in 1239520 that broke loading
+ of users from tomcat-users.xml
when using the
+ JAASMemoryLoginModule
. (markt)
+
+
+ Correct regression introduced in 797162 that broke
+ authentication of users when using the
+ JAASMemoryLoginModule
. (markt)
+
+
+
+
+
+
+ More cleanup of NIO2 endpoint shutdown. (remm)
+
+
+ 56336: AJP output corruption and errors. (remm)
+
+
+ Handle various cases of incomplete writes in NIO2. (remm)
+
+
+ Code cleanups and i18n in NIO2. (remm)
+
+
+ Fix extra onDataAvailable calls in the NIO2 connector. (remm)
+
+
+ Fix gather writes in NIO2 SSL. (remm)
+
+
+ Upgrade the NIO2 connectors to beta, but still not ready for production. (remm)
+
+
+ Fix code duplication between NIO and NIO2. (remm)
+
+
+ 56348: Fix slow asynchronous read when read was performed on
+ a non-container thread. (markt)
+
+
+ 56416: Correct documentation for default value of socket
+ linger for the AJP and HTTP connectors. (markt)
+
+
+ Fix possible corruption if doing keepalive after a comet request. (remm)
+
+
+ 56518: Fix connection limit latch leak when a non-container
+ thread is interrupted during asynchronous processing. (markt)
+
+
+
+
+
+
+ 56334: Fix a regression in the handling of back-slash
+ escaping introduced by the fix for 55735. (markt/kkolinko)
+
+
+ 56425: Improve method matching for EL expressions. When
+ looking for matching methods, an exact match between parameter types is
+ preferred followed by an assignable match followed by a coercible match.
+ (markt)
+
+
+ Correct the handling of back-slash escaping in the EL parser and no
+ longer require that \$
or \#
must be followed
+ by {
in order for the back-slash escaping to take effect.
+ (markt)
+
+
+
+
+
+
+ Remove the implementation of
+ org.apache.catalina.LifecycleListener
from
+ org.apache.catalina.ha.tcp.SimpleTcpCluster
.
+ SimpleTcpCluster
does not work as
+ LifecycleListener
, it works as nested components of Host or
+ Engine. (kfujino)
+
+
+ Remove cluster and replicationValve from cluster manager template. These
+ instance are not necessary to template. (kfujino)
+
+
+ Add support for cross context session replication to
+ org.apache.catalina.ha.session.BackupManager
. (kfujino)
+
+
+ Remove the unnecessary cross context check. It does not matter whether
+ the context that is referenced by other context is set to
+ crossContext
=true. The context that refers to the different
+ context must be set to crossContext
=true. (kfujino)
+
+
+ Move to org.apache.catalina.ha.session.ClusterManagerBase
+ common logics of
+ org.apache.catalina.ha.session.BackupManager
and
+ org.apache.catalina.ha.session.DeltaManager
. (kfujino)
+
+
+ Simplify the code of o.a.c.ha.tcp.SimpleTcpCluster
. In
+ order to add or remove cluster valve to Container, use pipeline instead
+ of IntrospectionUtils
. (kfujino)
+
+
+ There is no need to set cluster instance when
+ SimpleTcpCluster.unregisterClusterValve
is called.
+ Set null than cluster instance for cleanup. (kfujino)
+
+
+
+
+
+
+ 56343: Avoid a NPE if Tomcat's Java WebSocket 1.0
+ implementation is used with the Java WebSocket 1.0 API JAR from the
+ reference implementation. (markt)
+
+
+ Increase the default maximum size of the executor used by the WebSocket
+ implementation for call backs associated with asynchronous writes from
+ 10 to 200. (markt)
+
+
+ Add a warning if the thread group created for WebSocket asynchronous
+ write call backs can not be destroyed when the web application is
+ stopped. (markt)
+
+
+ Ensure that threads created to support WebSocket clients are stopped
+ when no longer required. This will happen automatically for WebSocket
+ client connections initiated by web applications but stand alone clients
+ must call WsWebSocketContainer.destroy()
. (markt)
+
+
+ 56449: When creating a new session, add the message handlers
+ to the session before calling Endpoint.onOpen()
so the
+ message handlers are in place should the onOpen()
method
+ trigger the sending of any messages. (markt)
+
+
+ 56458: Report WebSocket sessions that are created over secure
+ connections as secure rather than as not secure. (markt)
+
+
+ Stop threads used for secure WebSocket client connections when they are
+ no longer required and give them better names for easier debugging while
+ they are running. (markt)
+
+
+
+
+
+
+ Add Support for copyXML
attribute of Host to Host Manager.
+ (kfujino)
+
+
+ Ensure that "name" request parameter is used as a application base of
+ host if "webapps" request parameter is not set when adding host in
+ HostManager Application. (kfujino)
+
+
+ Correct documentation on Windows service options, aligning it with
+ Apache Commons Daemon documentation. (kkolinko)
+
+
+ 56418: Ensure that the Manager web application does not
+ report success for a web application deployment that fails. (slaurent)
+
+
+ Improve valves documentation. Split valves into groups. (kkolinko)
+
+
+ 56513: Make the documentation crystal clear that using
+ sendfile will disable any compression that Tomcat may otherwise have
+ applied to the response. (markt)
+
+
+
+
+
+
+ Review source code and take advantage of Java 7's
+ try-with-resources syntax where possible. (markt)
+
+
+ Align DisplayName of Tomcat installed by service.bat
with
+ one installed by the *.exe installer. Print a warning in case if neither
+ server nor client jvm is found by service.bat
. (kkolinko)
+
+
+ 56363: Update to version 1.1.30 of Tomcat Native library.
+ (schultz)
+
+
+ Update package renamed Apache Commons BCEL to r1593495 to pick up some
+ additional changes for Java 7 support and some code clean up. (markt)
+
+
+ Update package renamed Apache Commons FileUpload to r1569132 to pick up
+ some small improvements (e.g. better null
protection) and
+ some code clean up. (markt)
+
+
+ Update package renamed Apache Commons Codec to r1586336 to pick up some
+ Javadoc fixes and some code clean up. (markt)
+
+
+ Switch to including Apache Commons DBCP via a package renamed svn copy
+ rather than building from a source release for consistency with other
+ Commons packages and to allow faster releases to fix DBCP related
+ issues. (markt)
+
+
+ Update package renamed Apache Commons Pool2 and DBCP2 to r1593563 to
+ pick various bug fixes. (markt)
+
+
+ In tests: allow to configure directory where JUnit reports and access
+ log are written to. (kkolinko)
+
+
+
+
+
+
+
+
+ Rework the fix for 56190 as the previous fix did not recycle
+ the request in all cases leading to mis-routing of requests. (markt)
+
+
+ Allow web applications to package tomcat-jdbc.jar and their JDBC driver
+ of choice in the web application. (markt)
+
+
+ 56293: Cache resources loaded by the class loader from
+ /META-INF/services/
for better performance for repeated
+ look ups. (markt)
+
+
+
+
+
+
+ Fix possibly incomplete final flush with NIO2 when using non blocking
+ mode. (remm)
+
+
+ Cleanup NIO2 endpoint shutdown. (remm)
+
+
+ Fix rare race condition notifying onWritePossible in the NIO2
+ HTTP/1.1 connector. (remm)
+
+
+
+
+
+
+ 54475: Add Java 8 support to SMAP generation for JSPs. Patch
+ by Robbie Gibson. (markt)
+
+
+
+
+
+
+ 56273: If the Manager web application does not perform an
+ operation because the web application is already being serviced, report
+ an error rather than reporting success. (markt)
+
+
+ 56304: Add a note to the documentation about not using
+ WebSocket with BIO HTTP in production. (markt)
+
+
+
+
+
+
+
+
+ Restore the ability to use the addURL()
method of the
+ web application class loader to add external resources to the web
+ application. (markt)
+
+
+ Improve the robustness of web application undeployment based on some
+ code analysis triggered by the report for 54315. (markt)
+
+
+ 56125: Correctly construct the URL for a resource that
+ represents the root of a JAR file. (markt)
+
+
+ Generate a valid root element for the effective web.xml for a web
+ application for all supported versions of web.xml. (markt)
+
+
+ Make it easier for applications embedding and/or extending Tomcat to
+ modify the javaseClassLoader
attribute of the
+ WebappClassLoader
. (markt)
+
+
+ Add missing support for <deny-uncovered-http-methods>
+ element when merging web.xml files. (markt)
+
+
+ Improve merging process for web.xml files to take account of the
+ elements and attributes supported by the Servlet version of the merged
+ file. (markt)
+
+
+ Avoid NullPointerException
in resource cache when making an
+ invalid request for a resource outside of the web application. (markt)
+
+
+ Remove an unnecessary null check identified by FindBugs. (markt)
+
+
+ In WebappClassLoader, when reporting threads that are still running
+ while web application is being stopped, print their stack traces to
+ the log. (kkolinko)
+
+
+ 56190: The response should be closed (i.e. no further output
+ is permitted) when a call to AsyncContext.complete()
takes
+ effect. (markt)
+
+
+ 56236: Enable Tomcat to work with alternative Servlet and
+ JSP API JARs that package the XML schemas in such as way as to require
+ a dependency on the JSP API before enabling validation for web.xml.
+ Tomcat has no such dependency. (markt)
+
+
+ 56244: Fix MBeans descriptor for WebappClassLoader MBean.
+ (kkolinko)
+
+
+ Add a work around for validating XML documents (often TLDs) that use
+ just the file name to refer to refer to the JavaEE schema on which they
+ are based. (markt)
+
+
+ Add methods of get the idle time from last client access time to
+ org.apache.catalina.Session
. (kfujino)
+
+
+ 56246: Fix NullPointerException in MemoryRealm when
+ authenticating an unknown user. (markt)
+
+
+ 56248: Allow the deployer to update an existing WAR file
+ without undeploying the existing application if the update flag is set.
+ This allows any existing custom context.xml for the application to be
+ retained. To update an application and remove any existing context.xml
+ simply undeploy the old version of the application before deploying the
+ new version. (markt)
+
+
+ 56253: When listing resources that are provided by a JAR, fix
+ possible StringIndexOutOfBoundsException
s. Add some unit
+ tests for this and similar scenarios and fix the additional issues those
+ unit tests identified. Based on a patch by Larry Isaacs. (markt)
+
+
+ Fix CVE-2014-0096:
+ Redefine the globalXsltFile
initialisation parameter of the
+ DefaultServlet as relative to CATALINA_BASE/conf or CATALINA_HOME/conf.
+ Prevent user supplied XSLTs used by the DefaultServlet from defining
+ external entities. (markt)
+
+
+
+
+
+
+ In some circumstances asynchronous requests could time out too soon.
+ (markt)
+
+
+ 56172: Avoid possible request corruption when using the AJP
+ NIO connector and a request is sent using more than one AJP message.
+ Patch provided by Amund Elstad. (markt)
+
+
+ Add experimental NIO2 connector. Based on code developed by
+ Nabil Benothman. (remm)
+
+
+ Fix CVE-2014-0075:
+ Improve processing of chuck size from chunked headers. Avoid overflow
+ and use a bit shift instead of a multiplication as it is marginally
+ faster. (markt/kkolinko)
+
+
+ Fix CVE-2014-0095:
+ Correct regression introduced in 8.0.0-RC2 as part of the Servlet 3.1
+ non-blocking IO support that broke handling of requests with an explicit
+ content length of zero. (markt/kkolinko)
+
+
+ Fix CVE-2014-0099:
+ Fix possible overflow when parsing long values from a byte array.
+ (markt)
+
+
+
+
+
+
+ Change the default compiler source and compiler target versions to 1.7
+ since Tomcat 8 requires a minimum of Java 7. (markt)
+
+
+ 56179: Fix parsing of EL expressions that contain unnecessary
+ parentheses. (markt)
+
+
+ 56177: Handle dependency tracking for TLDs when using JspC
+ with a tag library JAR that is located outside of the web application.
+ (markt)
+
+
+ Remove an unnecessary null check identified by FindBugs. (markt)
+
+
+ 56199: Restore validateXml option for JspC which determines
+ if web.xml will be parsed with a validating parser. (markt)
+
+
+ 56223: Throw an IllegalStateException
if a call
+ is made to ServletContext.setInitParameter()
after the
+ ServletContext has been initialized. (markt)
+
+
+ 56265: Do not escape values of dynamic tag attributes
+ containing EL expressions. (kkolinko)
+
+
+ Make the default compiler source and target versions for JSPs Java 7
+ since Tomcat 8 requires Java 7 as a minimum. (markt)
+
+
+ 56283: Update to the Eclipse JDT Compiler P20140317-1600
+ which adds support for Java 8 syntax to JSPs. Add support for value
+ "1.8" for the compilerSourceVM
and
+ compilerTargetVM
options. (markt)
+
+
+
+
+
+
+ Avoid a possible deadlock when one thread is shutting down a connection
+ while another thread is trying to write to it. (markt)
+
+
+ Avoid NPE when flushing batched messages. (markt)
+
+
+
+
+
+
+ 56093: Add the SSL Valve to the documentation web
+ application. (markt)
+
+
+ 56217: Improve readability by using left alignment for the
+ table cell containing the request information on the Manager application
+ status page. (markt)
+
+
+ Fixed java.lang.NegativeArraySizeException
when using
+ "Expire sessions" command in the manager web application on a
+ context where the session timeout is disabled. (kfujino)
+
+
+ Add support for LAST_ACCESS_AT_START
system property to
+ Manager web application. (kfujino)
+
+
+
+
+
+
+ 56115: Expose the httpusecaches
property of
+ Ant's get
task as some users may need to change the
+ default. Based on a suggestion by Anthony. (markt)
+
+
+ 56143: Improve service.bat
so that it can be
+ launched from a non-UAC console. This includes using a single call to
+ tomcat8.exe
to install the Windows service rather than
+ three calls, and using command line arguments instead of environment
+ variables to pass the settings. (markt/kkolinko)
+
+
+ Simplify Windows *.bat files: remove %OS% checks, as current java does
+ not run on ancient non-NT operating systems. (kkolinko)
+
+
+ Align options between service.bat
and exe
+ Windows installer. For service.bat
the changes are in
+ --Classpath, --DisplayName, --StartPath, --StopPath. For
+ exe
installer the changes are in --JvmMs, --JvmMx options,
+ which are now 128 Mb and 256 Mb respectively instead of being empty.
+ Explicitly specify --LogPath path when uninstalling Windows service,
+ avoiding default value for that option. (kkolinko)
+
+
+ 56137: Explicitly use NIO connector in SSL example in
+ server.xml so it doesn't break if APR is enabled. (markt)
+
+
+ 56139: Avoid a web application class loader leak in some unit
+ tests when running on Windows. (markt)
+
+
+ Correct build script to avoid building JARs with empty packages. (markt)
+
+
+ Allow to limit JUnit test run to a number of selected test case
+ methods. (kkolinko)
+
+
+ Update Commons Pool 2 to 2.2. (markt)
+
+
+ Update Commons DBCP 2 to the 2.0 release. (markt)
+
+
+ 56189: Remove used file cpappend.bat from the distribution.
+ (markt)
+
+
+ 56204: Remove unnecessary dependency between tasks in the
+ build script. (markt)
+
+
+ Add definition of org.apache.catalina.ant.FindLeaksTask
.
+ (kfujino)
+
+
+ Implement org.apache.catalina.ant.VminfoTask
,
+ org.apache.catalina.ant.ThreaddumpTask
and
+ org.apache.catalina.ant.SslConnectorCiphersTask
. (kfujino)
+
+
+ Add the option to the Apache Ant tasks to ignore the constraint of the
+ first line of the response message that must be "OK -"
+ (ignoreResponseConstraint
in AbstractCatalinaTask
).
+ Default is false. (kfujino)
+
+
+
+
+
+
+
+
+ Fix build of Apache Commons DBCP2 classes. (kkolinko)
+
+
+ Update Commons DBCP 2 to snapshot 170 dated 07 Feb 2014. This enables
+ DBCP to work with a SecurityManager such that only DBCP needs to be
+ granted the necessary permissions to communicate with the database.
+ (markt)
+
+
+
+
+
+
+
+
+ 56082: Fix a concurrency bug in JULI's LogManager
+ implementation. (markt)
+
+
+ 56085: ServletContext.getRealPath(String)
should
+ return null
for invalid input rather than throwing an
+ IllegalArgumentException
. (markt)
+
+
+ Fix WebDAV support that was broken by the refactoring for the new
+ resources implementation. (markt)
+
+
+ Simplify Catalina.initDirs(). (kkolinko)
+
+
+ 56096: When the attribute rmiBindAddress
of the
+ JMX Remote Lifecycle Listener is specified it's value will be used when
+ constructing the address of a JMX API connector server. Patch is
+ provided by Jim Talbut. (violetagg)
+
+
+ When environment entry with one and the same name is defined in the web
+ deployment descriptor and with annotation then the one specified in the
+ web deployment descriptor is with priority. (violetagg)
+
+
+ Fix passing the value of false for xmlBlockExternal
option
+ of Context to Jasper, as the default was changed in 8.0.1. (kkolinko)
+
+
+
+
+
+
+ Enable non-blocking reads to take place on non-container threads.
+ (markt)
+
+
+
+
+
+
+ Simplify the code of
+ o.a.c.ha.tcp.SimpleTcpCluster.createManager(String)
.
+ Remove unnecessary class cast. (kfujino)
+
+
+
+
+
+
+ In Manager web application improve handling of file upload errors.
+ Display a message instead of error 500 page. Simplify. (kkolinko)
+
+
+
+
+
+
+ 56104: Correct the version number on the welcome page of the
+ Windows installer. (markt)
+
+
+ Update Commons DBCP 2 to snapshot 168 dated 05 Feb 2014. (markt)
+
+
+ Fix CVE-2014-0050, a denial of service with a malicious, malformed
+ Content-Type header and multipart request processing. Fixed by merging
+ latest code (r1565159) from Commons FileUpload. (markt)
+
+
+
+
+
+
+
+
+ Change default value of xmlBlockExternal
attribute of
+ Context. It is true
now. (kkolinko)
+
+
+
+
+
+
+ Correct regression in the fix for 55996 that meant that
+ asynchronous requests might timeout too early. (markt)
+
+
+
+
+
+
+ Change default value of the blockExternal
attribute of
+ JspC task. The default value is true
. Add support for
+ -no-blockExternal
switch when JspC is run as a
+ standalone application. (kkolinko)
+
+
+
+
+
+
+ Do not return an empty string for the
+ Sec-WebSocket-Protocol
HTTP header when no sub-protocol has
+ been requested or no sub-protocol could be agreed as RFC6455 requires
+ that no Sec-WebSocket-Protocol
header is returned in this
+ case. (markt)
+
+
+
+
+
+
+
+
+ Implement JSR 340 - Servlet 3.1. The JSR 340 implementation includes
+ contributions from Nick Williams and Jeremy Boynes. (markt)
+
+
+ Implement JSR 245 MR2 - JSP 2.3. (markt)
+
+
+ Implement JSR 341 - Unified Expression Language 3.0. (markt)
+
+
+ Implement JSR 356 - WebSockets. The JSR 356 implementation includes
+ contributions from Nick Williams, Rossen Stoyanchev and Niki Dokovski.
+ (markt)
+
+
+ 46727: Refactor default servlet to make it easier to
+ sub-class to implement finer grained control of the file encoding. Based
+ on a patch by Fred Toth. (markt)
+
+
+ 45995: Align Tomcat with Apache httpd and perform MIME type
+ mapping based on file extension in a case insensitive manner. (markt)
+
+
+ Remove duplicate code that converted a Host's appBase attribute to
+ a canonical file. (markt)
+
+
+ 51408: Replace calls to Charset.defaultCharset()
+ with an explicit reference to the ISO-8859-1 Charset. (markt)
+
+
+ Refactor initialization code to use a single, consistent approach to
+ determining the Catalina home (binary) and base (instance) directories.
+ The search order for home is catalina.home
system property,
+ parent of current directory if boootstrap.jar is present and finally
+ current working directory. The search order for Catalina base is
+ catalina.base
system property falling back to the value for
+ Catalina home. (markt)
+
+
+ 52092: JULI now uses the OneLineFormatter
and
+ AsyncFileHandler
by default. (markt)
+
+
+ 52558: Refactor CometConnectionManagerValve
so
+ that it does not prevent the session from being serialized in when
+ running in a cluster. (markt)
+
+
+ 52767: Remove reference to MySQL specific autoReconnect
+ property in JDBCAccessLogValve
. (markt)
+
+
+ Make the Mapper type-safe. Hosts, Contexts and Wrappers are no
+ longer handled as plain objects, instead they keep their type.
+ Code using the Mapper doesn't need to cast objects returned by
+ the mapper. (rjung)
+
+
+ Move Manager, Loader and Resources from Container to Context since
+ Context is the only place they are used. The documentation already
+ states (and has done for some time) that Context is the only valid
+ location for these nested components. (markt)
+
+
+ Move the Mapper from the Connector to the Service since the Mapper is
+ identical for all Connectors of a given Service and it is common for
+ there to be multiple Connectors for a Service (http, https and ajp).
+ This means there is now only ever one Mapper per Service rather than
+ possibly multiple identically configured Mapper objects. (markt)
+
+
+ Remove the per Context Mapper objects and use the Mapper from the
+ Service. This removes the need to maintain two copies of the mappings
+ for Servlets and Filters. (markt)
+
+
+ Implement a new Resources implementation that merges Aliases,
+ VirtualLoader, VirtualDirContext, JAR resources and external
+ repositories into a single framework rather than a separate one for each
+ feature. (markt)
+
+
+ URL rewrite valve, similar in functionality to mod_rewrite. (remm)
+
+
+ Port storeconfig functionality, which can persist to server.xml and
+ context.xml runtime container configuration changes. (remm)
+
+
+ 54095: Add support to the Default Servlet for serving
+ gzipped versions of static resources directly from disk as an
+ alternative to Tomcat compressing them on each request. Patch by
+ Philippe Marschall. (markt)
+
+
+ 54708: Change the name of the working directory for the ROOT
+ application (located under $CATALINA_BASE/work by default) from _ to
+ ROOT. (markt)
+
+
+ Change default configuration so that a change to the global web.xml file
+ will trigger a reload of all web applications. (markt)
+
+
+ 55101: Make BASIC authentication more tolerant of whitespace.
+ Patch provided by Brian Burch. (markt)
+
+
+ 55166: Move JSP descriptor and tag library descriptor schemas
+ to servlet-api.jar to enable relative references between the schemas to
+ be correctly resolved. (markt)
+
+
+ Refactor the descriptor parsing code into a separate module that can be
+ used by both Catalina and Jasper. Includes patches provided by Jeremy
+ Boynes. (violetagg/markt)
+
+
+ 55246: Move TLD scanning to a ServletContainerInitializer
+ provided by Jasper. Includes removal of TldConfig lifecycle listener and
+ associated Context properties. (jboynes)
+
+
+ 55317: Facilitate weaving by allowing ClassFileTransformer to
+ be added to WebappClassLoader. Patch by Nick Williams. (markt)
+
+
+ 55620: Enable Tomcat to start when either $CATALINA_HOME
+ and/or $CATALINA_BASE contains a comma character. Prevent Tomcat from
+ starting when $CATALINA_HOME and/or $CATALINA_BASE contains a semi-colon
+ on Windows. Prevent Tomcat from starting when $CATALINA_HOME and/or
+ $CATALINA_BASE contains a colon on Linux/FreeBSD/etc. (markt)
+
+
+ Initialize the JSP runtime in Jasper's initializer to avoid need for a
+ Jasper-specific lifecycle listener. JasperListener
has been
+ removed. (jboynes)
+
+
+ Change ordering of elements of JMX objects names so components are
+ grouped more logically in JConsole. Generally, components are now
+ grouped by Host and then by Context. (markt)
+
+
+ Context listener to allow better EE and framework integration. (remm)
+
+
+ 57896: Support defensive copying of "cookie" header so that
+ unescaping double quotes in a cookie value does not corrupt original
+ value of "cookie" header. This is an opt-in feature, enabled by
+ org.apache.tomcat.util.http.ServerCookie.PRESERVE_COOKIE_HEADER
+ system property. (remm/kkolinko)
+
+
+
+
+
+
+ Experimental support for SPDY. Includes contributions from Sheldon Shao.
+ (costin)
+
+
+ The default connector is now the Java NIO connector even when specifying
+ HTTP/1.1 as protocol (fhanik)
+
+
+ Update default value of pollerThreadCount for the NIO connector. The new
+ default value will never go above 2 regardless of available processors.
+ (fhanik)
+
+
+ 54010: Remove some unnecessary code (duplicate calls to
+ configure the scheme as https for AJP requests originally received over
+ HTTPS). (markt)
+
+
+ Refactor char encoding/decoding using NIO APIs. (remm)
+
+
+ Change the default URIEncoding for all connectors from ISO-8859-1 to
+ UTF-8. (markt)
+
+
+
+
+
+
+ Simplify API of ErrorDispatcher
class by using varargs.
+ (kkolinko)
+
+
+ Update Jasper to use the new common web.xml parsing code. Includes
+ patches by Jeremy Boynes. (markt/violetagg)
+
+
+ Create test cases for JspC. Patch by Jeremy Boynes. (markt)
+
+
+ 55246: TLD scanning is now performed by JasperInitializer
+ (a ServletContainerInitializer) removing the need for support within the
+ Servlet container itself. The scan is now performed only once rather than
+ in two passes reducing startup time. (jboynes)
+
+
+ 55251: Do not allow JspC task to fail silently if the web.xml
+ or web.xml fragment can not be generated. (markt)
+
+
+
+
+
+
+ Remove unused JvmRouteSessionIDBinderListener and SessionIDMessage.
+ (kfujino)
+
+
+ Modify method signature in ReplicationValve. Cluster instance is not
+ necessary to argument of method. (kfujino)
+
+
+ Remove unused expireSessionsOnShutdown
attribute in
+ org.apache.catalina.ha.session.BackupManager
. (kfujino)
+
+
+
+
+
+
+ Extend the diagnostic information provided by the Manager web
+ application to include details of the configured SSL ciphers suites for
+ each connector. (markt)
+
+
+ 48550: Update examples web application to use UTF-8. (markt)
+
+
+ 55383: Improve the design and correct the HTML markup of
+ the documentation web application. Patches provided by Konstantin
+ Preißer. (markt)
+
+
+
+
+
+
+ Refactor AbstractReplicatedMap
to use generics. A key
+ side-effect of this is that the class now implements
+ Map<K,V>
rather than extends
+ ConcurrentMap
. (markt)
+
+
+
+
+
+
+ Remove unused, deprecated code. (markt)
+
+
+ Remove static info String and associated getInfo() method where present.
+ (markt)
+
+
+ (1353242, 1353410):
+ Remove Ant tasks jasper2
and jkstatus
.
+ The correct names are jasper
and jkupdate
.
+ (kkolinko)
+
+
+ 53529: Clean-up the handling of
+ InterruptedException
throughout the code base. (markt)
+
+
+ 54899: Provide an initial implementation of NetBeans support.
+ Patch provided by Brian Burch. (markt)
+
+
+ 55166: Move the JSP descriptor and tag library descriptor
+ schema definition files from jsp-api.jar to servlet-api.jar so relative
+ includes between the J2EE, Servlet and JSP schemas are correctly
+ resolved. (markt)
+
+
+ 55372: When starting Tomcat with the jpda
option
+ to enable remote debugging, by default only listen on localhost for
+ connections from a debugger. Prior to this change, Tomcat listened on
+ all known addresses. (markt)
+
+
+
+
+
+
diff --git webapps/docs/config/http.xml webapps/docs/config/http.xml
index 4384fce..1ccdcfb 100644
--- webapps/docs/config/http.xml
+++ webapps/docs/config/http.xml
@@ -1017,7 +1017,8 @@
The certificate revocation list to be used to verify client
certificates. If not defined, client certificates will not be checked
- against a certificate revocation list.
+ against a certificate revocation list. The file may be specified using a
+ URL, an absolute path or a relative (to CATAINA_BASE) path.
@@ -1042,7 +1043,8 @@
the file ".keystore
" in the operating system home
directory of the user that is running Tomcat. If your
keystoreType
doesn't need a file use ""
- (empty string) for this parameter.
+ (empty string) for this parameter. The file may be specified using a
+ URL, an absolute path or a relative (to CATAINA_BASE) path.
@@ -1136,7 +1138,8 @@
The trust store file to use to validate client certificates. The
default is the value of the javax.net.ssl.trustStore
system
property. If neither this attribute nor the default system property is
- set, no trust store will be configured.
+ set, no trust store will be configured. The file may be specified using a
+ URL, an absolute path or a relative (to CATAINA_BASE) path.
diff --git webapps/docs/config/realm.xml webapps/docs/config/realm.xml
index 34c4c8b..9b3007a 100644
--- webapps/docs/config/realm.xml
+++ webapps/docs/config/realm.xml
@@ -811,8 +811,8 @@
- Absolute or relative (to $CATALINA_BASE) pathname to the XML file
- containing our user information. See below for details on the
+
URL, absolute path or relative path (to $CATALINA_BASE) for the XML
+ file containing our user information. See below for details on the
XML element format required. If no pathname is specified, the
default value is conf/tomcat-users.xml
.
diff --git webapps/docs/jndi-resources-howto.xml webapps/docs/jndi-resources-howto.xml
index 0a5e36f..1df48c4 100644
--- webapps/docs/jndi-resources-howto.xml
+++ webapps/docs/jndi-resources-howto.xml
@@ -471,8 +471,9 @@ public class MyBean2 {
pathname="conf/tomcat-users.xml"
readonly="false" />]]>
- The pathname
attribute can be absolute or relative. If
- relative, it is relative to $CATALINA_BASE
.
+ The pathname
attribute can be a URL, an absolute path or a
+ relative path. If relative, it is relative to $CATALINA_BASE
.
+
The readonly
attribute is optional and defaults to
true
if not supplied. If the XML is writeable then it will be