Apache Tomcat 3.3.1 =================== Release Notes ============= $Id$ This document describes the changes that have been made since the release of Tomcat 3.3 Final. ========= Bug Fixes ========= The release in which the fix appears is indicated in brackets. Feature Additions: Bug No. Description [b1] Restored prefix attribute to InvokerInterceptor. It was available in Tomcat 3.2.x. [b1] Added SingleThreadModel pooling to ServletHandler. The default is to use pooling. [b1] Added optional checking (configured on SessionId module) to ensure that the SSL session IDs match for each request within a Tomcat session. This check is disabled by default. [b1] Added org.apache.tomcat.util.net.URL class from Tomcat 4.0 so response.encodeURL() can work under SSL without JSSE. This can occur if you have Apache forwarding SSL requests to a Tomcat that doesn't have JSSE installed. [b1] Fixed logic for response.encodeURL() so that it will work correctly if the input URL includes an anchor tag. [b1] Improved the handling of invalid web.xml files. Now you get the same error messages every time you parse the file. [b1] Moved the setting of the default "*.jsp" mapping so that it is now possible to entirely disable support for jsp files. [b1] Fixed problem with jsp_precompile parameter to JSP files. [b1] Context properties and ContextManager properties can now be set with elements, i.e: For backwards compatibility, the ContextManager "lower-case-p" version supported by Tomcat 3.3. is still supported. [b1] Added variable substitution handling to ContextXmlReader, allowing variable substitution to be used in declarations. [b1] Added support for PureTLS as an SSL option. Also, any attribute used to create the socket factory, such as "rootfile" (or "keystoreType" for JSSE), is now settable on the Http10Connector element in server.xml. [b1] The configuration files generated by ApacheConfig, IISConfig and NSConfig were improved for the case when the forwardAll attribute is false. Primarily, a servlet mapping like "/foo/*" now generates a mod_jk mapping for "/foo" as well as "/foo/*" to better match the servlet spec. [b1] The default log handler was updated to specify autoFlush=true for the PrintWriter so the output doesn't just go to a buffer. Since this logger is replaced a new logger set by the LogSetter module, its reduction in efficiency won't affect normal operation. [b1] ServerXmlReader now logs a warning if the modules.xml file isn't found. [b1] The internal test script, test-tomcat.xml, has been made more configurable and the Admin app internal test page, test.jsp, has been updated to make use of this. With appropriate input settings, the tests can be run against Tomcat standalone, Apache, IIS, and Netscape (v4.1) without any failures. [b1] Japanese resource strings were added and StaticInterceptor and ErrorHandler modules were updated to take advantage of them. In addition, useAcceptLanguage and useCharset attributes were added to the StaticInterceptor module to allow configuration of how the locale and character set encoding of the directory listings are derived. [b1] Added a socketCloseDelay attribute to Http10Interceptor. The default is -1, which disables the delay. If set > 0, a Thread.sleep() is executed prior to reading and discarding unread input and closing the socket. This is intended to help diagnose problems resulting from unread input that arrives during the closing of the socket. [b1] Make the App-classloader configurable to allow using the 1.1 loader even when running under Java2. This should allow for better jar reloading at the cost of not enforcing sealing etc. [b1] The IISConf module was updated to support an isapiRedirector attribute which specifies the name of the redirector plugin DLL. It also now writes a "properties" file the can be used for configuration of the redirector instead of registry settings. [b1] The isapi_redirect.dll was enhanced to support a uri_select configuration setting that controls which form of URL is forwarded to Tomcat. The normalized/decoded URL used by Tomcat 3.3 is still the default. The original URL or re-encoded normalized/decoded URL may be forwarded instead. This was done to provide better support for isapi_redirect.dll's use with web servers other than Tomcat 3.3, such as Tomcat 3.2.x. [b1] Added a useWebAppCL attribute to JspInterceptor. When true, Java compilation using "sun.tools.javac.Main" will run in the web application's classloader. When false (the default), Java compilation using "sun.tools.javac.Main" runs in the container classloader. Using a value of true may help on certain HP-UX systems. In all other cases, useWebAppCL should be false. Currently webWebAppCL="true" can not be used when running under a security manager, otherwise security exceptions will prevent JSPs from compiling. [b1] Added "reloadable" attribute to AutoWebApp module. If true, reloading will be enabled in all added contexts. If false, reloading will be disabled. The default is true. [b1] Added "defaultRedirectStatus" attribute to ErrorHandler module. It may be set to "301" or "302". The default is "301". It determines the status code set by the "redirect" handler if a status code has not already been set. This primarily affects the status code used when the StaticInterceptor module redirects a "directory" URL that doesn't end with a '/' and redirects to welcome files. [b1] Added shutdown support using Ajp13 and updated StopTomcat task to support automatic or explicit use of Ajp12 or Ajp13 protocol to shutdown Tomcat. This includes use of an optional "secret" password with either protocol. [rc1] Added hostChar, hostDotChar, and pathSlashChar attributes to AutoWebApp module. These make configurable the special characters used in the directory name to delimit a virtual host name and act as substitution characters. Also, fixed behavior so that hostChar isn't included in the context path name. [rc1] Startup error output has been improved. Messages will be shown if modules.xml or server.xml isn't present. Also, the port number is now shown when JVM_Bind exceptions occur. [F] Ajp12Connector and Ajp13Connector now accepts ContextMananger properties called ajpid12 and ajpid13, respectively. This property overrides the ajpidFile attribute of these modules, allowing the ajpid file to be specified via command line arguments. For consistency, the same arguments are also accepted by the StopTomcat task to specify the file and protocol to use for shutdown. [F] The Ajp13Connector now accepts shutdownEnable in addition to shutDownEnable at attributes that control if shutdown is enabled via the Ajp13 protocol. shutdownEnable was added since it uses a more intuitive uppercase/lowercase spelling. [F] The PasswordPrompter add-on was refactored to use introspection and accept customizable prompt specifications. It can now set additional passwords, such as the keystore password added to Http10Connector and the "secret" for Ajp12Connector and Ajp13Connector modules. It can set other types of attributes as well. [F] Refactored the PasswordPrompter add-on module to be configurable and to be able to perform prompting for context local modules. Added a "readme" file to document its use. [F] The facade classes in org.apache.tomcat.facade are now declared as public classes. This allows their methods to be called using introspection from a web application. Server: Bug No. Description [b1] Fixed problem with JSP page names that match a Windows DOS device name, such as aux.jsp. Instead of potentially hanging the thread that services the request, these requests now return "404 Not Found". [b1] DecodeInterceptor was updated to not convert '+' to space in the path portion of the request URL. RFC2396 allows '+' in the path of a URL. [b1] Modified IntrospectionUtils.getClassPath() to add "classes" directory to the list prior to jars. [b1] Fixed problem in AccessInterceptor where the beginning characters of the login or error page match the context path. Tomcat could mistakenly think that the context path had been incorrectly included in the login or error page setting. It can still make this mistake if the page is under a sub-directory with the same name as the context path. [b1] The missing jdbcRealm.getCredentialsSQLException property string was added. [b1] Fixed bug with useJspServlet option in JspInterceptor. If set to true untrusted web applications couldn't run the JspServlet because jasper.jar and tools.jar weren't accessible. [b1] Fixed problem with jsp_precompile parameter to JSP files. [b1] Eliminated some hard coded '\n' line separators used by Jasper in the translated Java file. [b1] Fixed the position of the ;jsessionid when Tomcat generates a 401 response. Now it is before the query string instead of after. [b1] Do not return a body with 304 responses (forbidden by HTTP/1.x and confusing to NS < 6.x). [b1] HttpServletRequestFacade now resets the reader when recycled. Previously, calling getReader() on a recycled facade on which getReader() was called, you would get the old reader rather than a new reader for the current request. [F] Fixed a bug in TrustedLoader with respect to reloading trusted modules when more than one is present. [F] Modified PoolTcpConnector checkSocketFactory() method to set the module's socketFactory when obtaining an SSL socket factory, instead of using a local variable. This allows the PasswordPrompter add-on to set SSL socket attributes, such as the keystore and certificate passwords. [F] A couple of "off by 1" bugs were fixed in the CharChunk and ByteChunk utility classes. 1657 JSPs with tag names that contain '-' or '.' will now compile without [b1] an "Invalid expression" error 4382 tomcat.sh script no longer deletes the ajp12.id file which could [b1] cause a problem shutting down if Tomcat was accidentally started twice. 4418 Ported Tomcat 3.2.x fix for race condition in ServerSocketFactory. [b1] 4436 Reduce log output from DecodeInterceptor if debug level is zero. This [b1] avoids having a log entry for each request. 4564 Fix bug in Http10Interceptor where getRemoteAddr() returns 127.0.0.1 [b1] instead of correct address. 4599 ThreadPool was updated to not reset the maxThreads, maxSpareThreads [b1] and minSpareThreads values in its start() method. 4923 Default permissions were added in PolicyInterceptor to allow direct [b1] read access to the webapp docBase and work directories. This is in addition to the permissions allowing access to the contents of these directories. These new permissions allows "exists()" to be executed on those directories without a security exception when running under a security manager. 4955 Fixed bug in the parsing of the query string to [b1] RequestDispatcher.include/forward wasn't handling the case where only the parameter name was specified. 4948 Fix DependClassLoader to be a Java2 ClassLoader when running under [b1] a Java2 JVM. 5005 If requested JSP file doesn't exist, avoid creating work directories [b1] and version file. 5191 Fix parsing of JSP comments with extra '-' characters. [b1] 5497 Ignore the If-Modified-Since header when including a static page. [b1] 5724 Supress the check for WEB-INF in the "Default Servlet" (aka [b1] StaticInterceptor). The check was redundant, and was causing Spec problems. 5983 Fix the flushing of unread POST data on the HTTP connector. On the [b1] reported bug, it was mostly a nuisance. In other cases (see 6143) it was causing major problems. To avoid DOS attacks, the number of flush attempts is configurable, with a default of 20. 5994 Fix seconds calculation problem in DateTool [b1] 6234 Recycle the Writer in the ResponseFacade if it is the error state when [b1] the facade is recycled. 6348 Fix problem with getNamedDispatcher() when used with a JSP mapped [b1] in the web.xml. 6515 Block setting of Date-Headers from within an include. [rc1] 6518 Fix an edge condition where in some cases a JSP file beginning with [rc1] a number wouldn't get mangled correctly. 6604 Fix a problem when using the AccessLog without a "Default Context" [rc1] defined. 6887 Fix a problem locating an error-page when using virtual hosts. [F] Jasper: Bug No. Description [F] Fixed incorrect use of '\' in the servlet mappings written by JspC on Windows systems. Configuration: Bug No. Description [b1] Updated JSSEImplemention to support a separate keystorePass attribute as the keystore password. It will default to the keypass attribute if not set. [F] The conf/jk/wrapper.properties was improved. The improvements include putting quotes around the java command portion of the wrapper.cmd_line property. Also a wrapper.jvm.options property was added to simplify specification of JVM arguments. [F] PoolTcpConnector was modified to allow the PasswordPrompter add-on module to successfully set connection attributes for secure connections. [F] conf/jk/wrapper.properties was updated to work with a spaces in the JDK path and a wrapper.jvm.options property was added to make it easier to add options. [F] conf/jk/uriworkermap.properties and conf/jk/obj.conf example files were updated to be more current. 4313 Bug in property substitution for server.xml and apps.xml files was [b1] fixed. 4826 Fixed AutoWebApp so the dir attribute can be an absolute path on [b1] Windows systems. 5365 Fixed the JasperMangler to handle Java reserved words correctly. [b1] 5390 Fixed the behavior of LoadOnStartup servlets when the servlet is [b1] actually a JSP page. 5958 ApacheConfig, IISConfig, and NSConfig were updated so mappings that [b1] end with "/*" will write a mapping with and without the ending "/*". 6004 Updated Http10Connector to accept any attribute. The attributes [b1] without predefined setters will be included with the predefined ones that are made available when the secure socket factory is created. 6137 Fix the admin webapp to be more careful when using the remove-context [b1] feature. Also, the boxes were mis-labeled. 6341 Fix the "guess home" logic so that it can work on Mac OS [rc1] 6717 Fix a problem where the Http10 Connector would fail to parse the [rc1] HTTP headers if the headers are extremely big. Connectors: Bug No. Description [b1] A bug was fixed in isapi_redirect.dll where the query string would be lost if the URI was shortened during normalization of the URI. The presence of escaped characters or character sequences such as "/../" would cause this to happen. [b1] A bug was fixed in isapi_redirect.dll where it would mistake an encoded '?' in the URI path as the query string delimitor. 5769 A -n option has been added to jk_nt_service.exe so that the service [rc1] display name can be different from the service name should it contain characters not valid for the service name. 6579 Make certain that we don't dump more output than is available when [rc1] debugging Ajp13. Documentation: Bug No. Description [b1] Tomcat-on-NetWare-HowTo.html updated to fix errors related to new functionality in Tomcat 3.3. [b1] tomcat-ug.html updated with additional classloader information and details on the variable substitution available in Context declarations. [b1] serverxml.html was updated to document features added to Ajp13Connector, AutoWebApp, ErrorHandler, Http10Connector, IISConfig, JspInteceptor, LoaderInterceptor11, SessionId, and StaticInterceptor. A note was added to Ajp12Connector to document the requirement for maxThreads to be 2 or more if it is to be used to shutdown Tomcat. Section on variable substitution was updated. [b1] tomcat-iis-howto.html updated to make it clearer that the "Filter Dlls" key is used only on Win98. It was also updated to document the use of a "properties" file instead of the registry and the new "uri_select" parameter. [b1] JDBCRealm-howto.html updated to name the correct class and its jar location for digested passwords. [b1] tomcat-ssl-howto.html was updated to document how to use PureTLS. [b1] The faq document was updated to indicate that segmentation faults while Tomcat is running is a JVM problem and not a Tomcat bug. [rc1] Updated server.xml to document features added to AutoWebApp. [rc1] Updated tomcat-ssl-howto.html to fix incorrect case for "clientauth" attribute. [F] serverxml.html and tomcat-ug.html were updated to document the new ajp12id and ajp13id startup and shutdown arguments.