Version in base suite: 11.0.15-1~deb13u1
Base version: tomcat11_11.0.15-1~deb13u1
Target version: tomcat11_11.0.22-1~deb13u1
Base file: /srv/ftp-master.debian.org/ftp/pool/main/t/tomcat11/tomcat11_11.0.15-1~deb13u1.dsc
Target file: /srv/ftp-master.debian.org/policy/pool/main/t/tomcat11/tomcat11_11.0.22-1~deb13u1.dsc
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/res/install-win/Uninstall.exe.sig |binary
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/res/install-win/tomcat-installer.exe.sig |binary
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/test/org/apache/tomcat/util/net/ca.jks |binary
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/test/org/apache/tomcat/util/net/localhost-crl-rsa.jks |binary
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/test/org/apache/tomcat/util/net/localhost-ec.jks |binary
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/test/org/apache/tomcat/util/net/localhost-rsa-copy1.jks |binary
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/test/org/apache/tomcat/util/net/localhost-rsa.jks |binary
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/client-keystore.p12 |binary
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/ocsp-client-good.der |binary
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/ocsp-client-revoked.der |binary
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/ocsp-good.der |binary
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/ocsp-revoked.der |binary
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/trustStore.p12 |binary
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/test/org/apache/tomcat/util/net/user1.jks |binary
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/test/org/apache/tomcat/util/net/user2-crl.jks |binary
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/test/org/apache/tomcat/util/net/user3-crl-long.jks |binary
/srv/release.debian.org/tmp/zsMpCzb1JJ/tomcat11-11.0.22/test/webapp/WEB-INF/lib/bug69623-lib.jar |binary
tomcat11-11.0.22/.github/workflows/ci.yml | 2
tomcat11-11.0.22/.gitignore | 1
tomcat11-11.0.22/BUILDING.txt | 115 +
tomcat11-11.0.22/CONTRIBUTING.md | 61
tomcat11-11.0.22/MERGE.txt | 6
tomcat11-11.0.22/NOTICE | 2
tomcat11-11.0.22/README.md | 10
tomcat11-11.0.22/bin/catalina.bat | 2
tomcat11-11.0.22/bin/catalina.sh | 4
tomcat11-11.0.22/build.properties.default | 86 -
tomcat11-11.0.22/build.properties.release | 10
tomcat11-11.0.22/build.xml | 258 +++
tomcat11-11.0.22/debian/ant.properties | 3
tomcat11-11.0.22/debian/changelog | 45
tomcat11-11.0.22/debian/control | 5
tomcat11-11.0.22/debian/copyright | 4
tomcat11-11.0.22/debian/patches/0004-split-deploy-webapps-target-from-deploy-target.patch | 14
tomcat11-11.0.22/debian/patches/0005-skip-test-failures.patch | 12
tomcat11-11.0.22/debian/patches/0010-debianize-build-xml.patch | 14
tomcat11-11.0.22/debian/patches/0013-dont-look-for-build-properties-in-user-home.patch | 17
tomcat11-11.0.22/debian/patches/0018-fix-manager-webapp.patch | 18
tomcat11-11.0.22/debian/patches/0019-add-distribution-to-error-page.patch | 16
tomcat11-11.0.22/debian/patches/0021-dont-test-unsupported-ciphers.patch | 20
tomcat11-11.0.22/debian/patches/0023-disable-shutdown-by-socket.patch | 12
tomcat11-11.0.22/debian/patches/0024-systemd-log-formatter.patch | 12
tomcat11-11.0.22/debian/patches/0025-invalid-configuration-exit-status.patch | 15
tomcat11-11.0.22/debian/patches/0026-easymock4-compatibility.patch | 34
tomcat11-11.0.22/debian/patches/0030-eclipse-jdt-classpath.patch | 12
tomcat11-11.0.22/debian/patches/0031-eclipse-jdt-compatibility.patch | 24
tomcat11-11.0.22/debian/patches/disable-jacoco.patch | 20
tomcat11-11.0.22/debian/patches/exclude-TestJNDIRealmIntegration.patch | 20
tomcat11-11.0.22/debian/patches/series | 4
tomcat11-11.0.22/debian/tomcat11-common.links | 2
tomcat11-11.0.22/java/jakarta/el/ImportHandler.java | 3
tomcat11-11.0.22/java/org/apache/catalina/AccessLog.java | 2
tomcat11-11.0.22/java/org/apache/catalina/Context.java | 1
tomcat11-11.0.22/java/org/apache/catalina/JmxEnabled.java | 4
tomcat11-11.0.22/java/org/apache/catalina/WebResource.java | 40
tomcat11-11.0.22/java/org/apache/catalina/WebResourceRoot.java | 12
tomcat11-11.0.22/java/org/apache/catalina/ant/AbstractCatalinaCommandTask.java | 23
tomcat11-11.0.22/java/org/apache/catalina/authenticator/AuthenticatorBase.java | 115 +
tomcat11-11.0.22/java/org/apache/catalina/authenticator/DigestAuthenticator.java | 5
tomcat11-11.0.22/java/org/apache/catalina/authenticator/FormAuthenticator.java | 38
tomcat11-11.0.22/java/org/apache/catalina/authenticator/SSLAuthenticator.java | 2
tomcat11-11.0.22/java/org/apache/catalina/authenticator/SingleSignOn.java | 9
tomcat11-11.0.22/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java | 194 --
tomcat11-11.0.22/java/org/apache/catalina/connector/CoyoteAdapter.java | 11
tomcat11-11.0.22/java/org/apache/catalina/connector/Request.java | 3
tomcat11-11.0.22/java/org/apache/catalina/connector/Response.java | 48
tomcat11-11.0.22/java/org/apache/catalina/core/AprLifecycleListener.java | 133 +
tomcat11-11.0.22/java/org/apache/catalina/core/LocalStrings.properties | 3
tomcat11-11.0.22/java/org/apache/catalina/core/LocalStrings_fr.properties | 3
tomcat11-11.0.22/java/org/apache/catalina/core/LocalStrings_ja.properties | 3
tomcat11-11.0.22/java/org/apache/catalina/core/OpenSSLLifecycleListener.java | 23
tomcat11-11.0.22/java/org/apache/catalina/core/StandardContext.java | 16
tomcat11-11.0.22/java/org/apache/catalina/filters/CsrfPreventionFilter.java | 83 +
tomcat11-11.0.22/java/org/apache/catalina/ha/context/ReplicatedContext.java | 10
tomcat11-11.0.22/java/org/apache/catalina/ha/tcp/ReplicationValve.java | 19
tomcat11-11.0.22/java/org/apache/catalina/ha/tcp/SendMessageData.java | 2
tomcat11-11.0.22/java/org/apache/catalina/manager/Constants.java | 2
tomcat11-11.0.22/java/org/apache/catalina/manager/HTMLManagerServlet.java | 26
tomcat11-11.0.22/java/org/apache/catalina/manager/host/Constants.java | 2
tomcat11-11.0.22/java/org/apache/catalina/manager/host/HostManagerServlet.java | 3
tomcat11-11.0.22/java/org/apache/catalina/mapper/LocalStrings.properties | 1
tomcat11-11.0.22/java/org/apache/catalina/mapper/LocalStrings_fr.properties | 1
tomcat11-11.0.22/java/org/apache/catalina/mapper/LocalStrings_ja.properties | 1
tomcat11-11.0.22/java/org/apache/catalina/mapper/Mapper.java | 2
tomcat11-11.0.22/java/org/apache/catalina/mapper/MappingData.java | 6
tomcat11-11.0.22/java/org/apache/catalina/realm/DigestCredentialHandlerBase.java | 42
tomcat11-11.0.22/java/org/apache/catalina/realm/LockOutRealm.java | 25
tomcat11-11.0.22/java/org/apache/catalina/realm/MessageDigestCredentialHandler.java | 10
tomcat11-11.0.22/java/org/apache/catalina/realm/RealmBase.java | 32
tomcat11-11.0.22/java/org/apache/catalina/servlets/WebdavServlet.java | 111 +
tomcat11-11.0.22/java/org/apache/catalina/startup/LocalStrings_zh_CN.properties | 4
tomcat11-11.0.22/java/org/apache/catalina/storeconfig/OpenSSLConfSF.java | 13
tomcat11-11.0.22/java/org/apache/catalina/tribes/group/AbsoluteOrder.java | 67
tomcat11-11.0.22/java/org/apache/catalina/tribes/group/interceptors/EncryptInterceptor.java | 61
tomcat11-11.0.22/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties | 5
tomcat11-11.0.22/java/org/apache/catalina/tribes/group/interceptors/LocalStrings_fr.properties | 3
tomcat11-11.0.22/java/org/apache/catalina/tribes/group/interceptors/LocalStrings_ja.properties | 3
tomcat11-11.0.22/java/org/apache/catalina/tribes/group/interceptors/LocalStrings_ko.properties | 1
tomcat11-11.0.22/java/org/apache/catalina/tribes/group/interceptors/LocalStrings_zh_CN.properties | 1
tomcat11-11.0.22/java/org/apache/catalina/tribes/membership/cloud/AbstractStreamProvider.java | 2
tomcat11-11.0.22/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java | 10
tomcat11-11.0.22/java/org/apache/catalina/tribes/membership/cloud/LocalStrings.properties | 4
tomcat11-11.0.22/java/org/apache/catalina/tribes/membership/cloud/TokenStreamProvider.java | 2
tomcat11-11.0.22/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java | 2
tomcat11-11.0.22/java/org/apache/catalina/util/ServerInfo.java | 215 +++
tomcat11-11.0.22/java/org/apache/catalina/util/URLEncoder.java | 14
tomcat11-11.0.22/java/org/apache/catalina/valves/AbstractAccessLogValve.java | 480 ++++++-
tomcat11-11.0.22/java/org/apache/catalina/valves/ExtendedAccessLogValve.java | 19
tomcat11-11.0.22/java/org/apache/catalina/valves/LoadBalancerDrainingValve.java | 30
tomcat11-11.0.22/java/org/apache/catalina/valves/LocalStrings_fr.properties | 2
tomcat11-11.0.22/java/org/apache/catalina/valves/LocalStrings_zh_CN.properties | 3
tomcat11-11.0.22/java/org/apache/catalina/valves/rewrite/RewriteValve.java | 1
tomcat11-11.0.22/java/org/apache/catalina/webresources/AbstractArchiveResource.java | 45
tomcat11-11.0.22/java/org/apache/catalina/webresources/AbstractArchiveResourceSet.java | 47
tomcat11-11.0.22/java/org/apache/catalina/webresources/AbstractResource.java | 5
tomcat11-11.0.22/java/org/apache/catalina/webresources/CachedResource.java | 5
tomcat11-11.0.22/java/org/apache/catalina/webresources/LocalStrings_zh_CN.properties | 1
tomcat11-11.0.22/java/org/apache/coyote/AbstractProtocol.java | 435 ++++++
tomcat11-11.0.22/java/org/apache/coyote/CompressionConfig.java | 34
tomcat11-11.0.22/java/org/apache/coyote/LocalStrings.properties | 1
tomcat11-11.0.22/java/org/apache/coyote/Request.java | 4
tomcat11-11.0.22/java/org/apache/coyote/Response.java | 9
tomcat11-11.0.22/java/org/apache/coyote/UpgradeProtocol.java | 10
tomcat11-11.0.22/java/org/apache/coyote/ajp/AbstractAjpProtocol.java | 120 +
tomcat11-11.0.22/java/org/apache/coyote/ajp/AjpProcessor.java | 3
tomcat11-11.0.22/java/org/apache/coyote/http11/AbstractHttp11Protocol.java | 9
tomcat11-11.0.22/java/org/apache/coyote/http11/LocalStrings_fr.properties | 1
tomcat11-11.0.22/java/org/apache/coyote/http11/LocalStrings_ja.properties | 1
tomcat11-11.0.22/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java | 115 +
tomcat11-11.0.22/java/org/apache/coyote/http11/filters/ChunkedOutputFilter.java | 57
tomcat11-11.0.22/java/org/apache/coyote/http11/filters/GzipOutputFilter.java | 6
tomcat11-11.0.22/java/org/apache/coyote/http2/HPackHuffman.java | 105 +
tomcat11-11.0.22/java/org/apache/coyote/http2/Hpack.java | 7
tomcat11-11.0.22/java/org/apache/coyote/http2/HpackDecoder.java | 54
tomcat11-11.0.22/java/org/apache/coyote/http2/HpackEncoder.java | 34
tomcat11-11.0.22/java/org/apache/coyote/http2/Http2Parser.java | 38
tomcat11-11.0.22/java/org/apache/coyote/http2/Http2Protocol.java | 23
tomcat11-11.0.22/java/org/apache/coyote/http2/Http2UpgradeHandler.java | 9
tomcat11-11.0.22/java/org/apache/coyote/http2/LocalStrings.properties | 11
tomcat11-11.0.22/java/org/apache/coyote/http2/LocalStrings_fr.properties | 2
tomcat11-11.0.22/java/org/apache/coyote/http2/LocalStrings_ja.properties | 2
tomcat11-11.0.22/java/org/apache/coyote/http2/LocalStrings_ko.properties | 1
tomcat11-11.0.22/java/org/apache/coyote/http2/LocalStrings_zh_CN.properties | 1
tomcat11-11.0.22/java/org/apache/coyote/http2/Stream.java | 206 +--
tomcat11-11.0.22/java/org/apache/coyote/http2/StreamException.java | 6
tomcat11-11.0.22/java/org/apache/coyote/http2/StreamProcessor.java | 15
tomcat11-11.0.22/java/org/apache/el/ExpressionFactoryImpl.java | 2
tomcat11-11.0.22/java/org/apache/el/parser/AstValue.java | 9
tomcat11-11.0.22/java/org/apache/jasper/compiler/Compiler.java | 31
tomcat11-11.0.22/java/org/apache/jasper/compiler/Generator.java | 21
tomcat11-11.0.22/java/org/apache/jasper/compiler/JDTCompiler.java | 22
tomcat11-11.0.22/java/org/apache/jasper/compiler/PageInfo.java | 3
tomcat11-11.0.22/java/org/apache/jasper/compiler/TagFileProcessor.java | 25
tomcat11-11.0.22/java/org/apache/jasper/compiler/TagLibraryInfoImpl.java | 37
tomcat11-11.0.22/java/org/apache/jasper/compiler/TextOptimizer.java | 1
tomcat11-11.0.22/java/org/apache/jasper/runtime/JspWriterImpl.java | 2
tomcat11-11.0.22/java/org/apache/naming/LocalStrings_zh_CN.properties | 2
tomcat11-11.0.22/java/org/apache/tomcat/Jar.java | 26
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/AbandonedTrace.java | 14
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSource.java | 46
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSourceFactory.java | 81 -
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSourceMXBean.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/ConnectionFactory.java | 8
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/ConnectionFactoryFactory.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/Constants.java | 12
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/DataSourceConnectionFactory.java | 12
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/DataSourceMXBean.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/DelegatingCallableStatement.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/DelegatingConnection.java | 33
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/DelegatingDatabaseMetaData.java | 13
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/DelegatingPreparedStatement.java | 9
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/DelegatingResultSet.java | 21
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/DelegatingStatement.java | 47
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/DriverConnectionFactory.java | 4
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/DriverFactory.java | 4
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/DriverManagerConnectionFactory.java | 16
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/Jdbc41Bridge.java | 12
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/LifetimeExceededException.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/ListException.java | 5
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/ObjectNameWrapper.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/PStmtKey.java | 196 +-
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/PoolableCallableStatement.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/PoolableConnection.java | 44
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/PoolableConnectionFactory.java | 56
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/PoolableConnectionMXBean.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/PoolablePreparedStatement.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/PoolingConnection.java | 40
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/PoolingDataSource.java | 5
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/PoolingDriver.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/SQLExceptionList.java | 6
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/SwallowedExceptionLogger.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/Utils.java | 6
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/cpdsadapter/ConnectionImpl.java | 67
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/cpdsadapter/DriverAdapterCPDS.java | 56
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/cpdsadapter/PStmtKeyCPDS.java | 26
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/cpdsadapter/PooledConnectionImpl.java | 157 +-
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/cpdsadapter/package-info.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/datasources/AbstractConnectionFactory.java | 147 ++
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/datasources/CPDSConnectionFactory.java | 221 ---
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/datasources/CharArray.java | 26
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/datasources/InstanceKeyDataSource.java | 208 +--
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/datasources/InstanceKeyDataSourceFactory.java | 10
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/datasources/KeyedCPDSConnectionFactory.java | 182 --
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/datasources/PerUserPoolDataSource.java | 9
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/datasources/PerUserPoolDataSourceFactory.java | 4
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/datasources/PoolKey.java | 7
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/datasources/PooledConnectionAndInfo.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/datasources/PooledConnectionManager.java | 31
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/datasources/SharedPoolDataSource.java | 7
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/datasources/SharedPoolDataSourceFactory.java | 4
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/datasources/UserPassKey.java | 20
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/datasources/package-info.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/managed/BasicManagedDataSource.java | 6
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/managed/DataSourceXAConnectionFactory.java | 38
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/managed/LocalXAConnectionFactory.java | 20
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/managed/ManagedConnection.java | 34
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/managed/ManagedDataSource.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/managed/PoolableManagedConnection.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/managed/PoolableManagedConnectionFactory.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/managed/SynchronizationAdapter.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/managed/TransactionContext.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/managed/TransactionContextListener.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/managed/TransactionRegistry.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/managed/XAConnectionFactory.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/managed/package-info.java | 3
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/dbcp2/package-info.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/BaseObject.java | 9
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/BaseObjectPool.java | 9
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/DestroyMode.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/KeyedObjectPool.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/KeyedPooledObjectFactory.java | 4
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/ObjectPool.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/PoolUtils.java | 50
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/PooledObject.java | 35
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/PooledObjectFactory.java | 164 +-
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/PooledObjectState.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/SwallowedExceptionListener.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/TrackedUse.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/UsageTracking.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/AbandonedConfig.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/BaseGenericObjectPool.java | 126 +
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/BaseObjectPoolConfig.java | 63
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/CallStack.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/DefaultEvictionPolicy.java | 11
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/DefaultPooledObject.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/DefaultPooledObjectInfo.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/DefaultPooledObjectInfoMBean.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/EvictionConfig.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/EvictionPolicy.java | 4
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/EvictionTimer.java | 35
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/GenericKeyedObjectPool.java | 257 +++
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/GenericKeyedObjectPoolConfig.java | 82 +
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/GenericKeyedObjectPoolMXBean.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/GenericObjectPool.java | 233 +--
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/GenericObjectPoolConfig.java | 9
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/GenericObjectPoolMXBean.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/InterruptibleReentrantLock.java | 8
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/LinkedBlockingDeque.java | 70 -
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/NoOpCallStack.java | 4
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/PoolImplUtils.java | 34
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/PooledSoftReference.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/SoftReferenceObjectPool.java | 14
tomcat11-11.0.22/java/org/apache/tomcat/dbcp/pool2/impl/ThrowableCallStack.java | 4
tomcat11-11.0.22/java/org/apache/tomcat/jni/SSL.java | 28
tomcat11-11.0.22/java/org/apache/tomcat/jni/SSLConf.java | 14
tomcat11-11.0.22/java/org/apache/tomcat/jni/SSLContext.java | 28
tomcat11-11.0.22/java/org/apache/tomcat/util/bcel/Const.java | 138 +-
tomcat11-11.0.22/java/org/apache/tomcat/util/bcel/classfile/AnnotationElementValue.java | 5
tomcat11-11.0.22/java/org/apache/tomcat/util/bcel/classfile/AnnotationEntry.java | 8
tomcat11-11.0.22/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java | 24
tomcat11-11.0.22/java/org/apache/tomcat/util/bcel/classfile/Constant.java | 8
tomcat11-11.0.22/java/org/apache/tomcat/util/bcel/classfile/ConstantClass.java | 4
tomcat11-11.0.22/java/org/apache/tomcat/util/bcel/classfile/ConstantDouble.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/util/bcel/classfile/ConstantFloat.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/util/bcel/classfile/ConstantInteger.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/util/bcel/classfile/ConstantLong.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/util/bcel/classfile/ConstantPool.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/util/bcel/classfile/JavaClass.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/util/bcel/classfile/SimpleElementValue.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/util/bcel/package-info.java | 4
tomcat11-11.0.22/java/org/apache/tomcat/util/buf/Asn1Parser.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/util/http/HeaderUtil.java | 30
tomcat11-11.0.22/java/org/apache/tomcat/util/http/RequestUtil.java | 10
tomcat11-11.0.22/java/org/apache/tomcat/util/http/parser/ChunkExtension.java | 130 +
tomcat11-11.0.22/java/org/apache/tomcat/util/http/parser/EntityTag.java | 4
tomcat11-11.0.22/java/org/apache/tomcat/util/http/parser/HttpParser.java | 92 +
tomcat11-11.0.22/java/org/apache/tomcat/util/http/parser/LocalStrings.properties | 2
tomcat11-11.0.22/java/org/apache/tomcat/util/http/parser/LocalStrings_fr.properties | 2
tomcat11-11.0.22/java/org/apache/tomcat/util/http/parser/LocalStrings_ja.properties | 2
tomcat11-11.0.22/java/org/apache/tomcat/util/http/parser/Upgrade.java | 6
tomcat11-11.0.22/java/org/apache/tomcat/util/net/AbstractEndpoint.java | 11
tomcat11-11.0.22/java/org/apache/tomcat/util/net/LocalStrings.properties | 6
tomcat11-11.0.22/java/org/apache/tomcat/util/net/LocalStrings_fr.properties | 5
tomcat11-11.0.22/java/org/apache/tomcat/util/net/LocalStrings_ja.properties | 5
tomcat11-11.0.22/java/org/apache/tomcat/util/net/Nio2Endpoint.java | 1
tomcat11-11.0.22/java/org/apache/tomcat/util/net/NioChannel.java | 6
tomcat11-11.0.22/java/org/apache/tomcat/util/net/NioEndpoint.java | 23
tomcat11-11.0.22/java/org/apache/tomcat/util/net/SSLHostConfig.java | 285 +++-
tomcat11-11.0.22/java/org/apache/tomcat/util/net/SSLSupport.java | 3
tomcat11-11.0.22/java/org/apache/tomcat/util/net/SSLUtilBase.java | 30
tomcat11-11.0.22/java/org/apache/tomcat/util/net/SecureNio2Channel.java | 19
tomcat11-11.0.22/java/org/apache/tomcat/util/net/SecureNioChannel.java | 27
tomcat11-11.0.22/java/org/apache/tomcat/util/net/SocketWrapperBase.java | 4
tomcat11-11.0.22/java/org/apache/tomcat/util/net/jsse/JSSEUtil.java | 5
tomcat11-11.0.22/java/org/apache/tomcat/util/net/jsse/LocalStrings.properties | 1
tomcat11-11.0.22/java/org/apache/tomcat/util/net/jsse/LocalStrings_fr.properties | 1
tomcat11-11.0.22/java/org/apache/tomcat/util/net/jsse/LocalStrings_ja.properties | 1
tomcat11-11.0.22/java/org/apache/tomcat/util/net/openssl/OpenSSLConfCmd.java | 14
tomcat11-11.0.22/java/org/apache/tomcat/util/net/openssl/OpenSSLContext.java | 30
tomcat11-11.0.22/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java | 34
tomcat11-11.0.22/java/org/apache/tomcat/util/net/openssl/OpenSSLStatus.java | 45
tomcat11-11.0.22/java/org/apache/tomcat/util/net/openssl/ciphers/Group.java | 6
tomcat11-11.0.22/java/org/apache/tomcat/util/net/openssl/ciphers/OpenSSLCipherConfigurationParser.java | 85 -
tomcat11-11.0.22/java/org/apache/tomcat/util/net/openssl/ciphers/SignatureScheme.java | 21
tomcat11-11.0.22/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLContext.java | 114 +
tomcat11-11.0.22/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java | 151 +-
tomcat11-11.0.22/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLLibrary.java | 31
tomcat11-11.0.22/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLUtil.java | 2
tomcat11-11.0.22/java/org/apache/tomcat/util/openssl/openssl_h.java | 479 ++++++-
tomcat11-11.0.22/java/org/apache/tomcat/util/openssl/openssl_h_Compatibility.java | 66
tomcat11-11.0.22/java/org/apache/tomcat/util/openssl/openssl_h_Macros.java | 18
tomcat11-11.0.22/java/org/apache/tomcat/util/security/ConstantTime.java | 142 ++
tomcat11-11.0.22/java/org/apache/tomcat/websocket/Authenticator.java | 30
tomcat11-11.0.22/java/org/apache/tomcat/websocket/BasicAuthenticator.java | 4
tomcat11-11.0.22/java/org/apache/tomcat/websocket/DigestAuthenticator.java | 20
tomcat11-11.0.22/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java | 32
tomcat11-11.0.22/java/org/apache/tomcat/websocket/WsWebSocketContainer.java | 93 -
tomcat11-11.0.22/modules/cxf/pom.xml | 4
tomcat11-11.0.22/modules/jdbc-pool/NOTICE | 2
tomcat11-11.0.22/res/bnd/jasper.jar.tmp.bnd | 1
tomcat11-11.0.22/res/bnd/tomcat-embed-jasper.jar.tmp.bnd | 1
tomcat11-11.0.22/res/checkstyle/header-al2.txt | 2
tomcat11-11.0.22/res/ide-support/eclipse/eclipse.classpath | 3
tomcat11-11.0.22/res/ide-support/eclipse/java-compiler-errors-warnings.txt | 3
tomcat11-11.0.22/res/ide-support/idea/tomcat.iml | 27
tomcat11-11.0.22/res/ide-support/netbeans/nb-tomcat-build.properties | 2
tomcat11-11.0.22/res/ide-support/netbeans/project.xml | 2
tomcat11-11.0.22/res/maven/mvn.properties.default | 2
tomcat11-11.0.22/res/maven/mvn.properties.release | 2
tomcat11-11.0.22/res/maven/tomcat-embed-jasper.pom | 2
tomcat11-11.0.22/res/maven/tomcat-jasper.pom | 2
tomcat11-11.0.22/res/maven/tomcat-servlet-api.pom | 2
tomcat11-11.0.22/res/openssl/openssl-tomcat.conf | 23
tomcat11-11.0.22/res/rat/rat-excludes.txt | 9
tomcat11-11.0.22/test-profiles.properties.default | 104 +
tomcat11-11.0.22/test/org/apache/catalina/authenticator/TestDigestAuthenticatorAlgorithms.java | 6
tomcat11-11.0.22/test/org/apache/catalina/authenticator/TestDigestAuthenticatorB.java | 135 +
tomcat11-11.0.22/test/org/apache/catalina/authenticator/TestSSLAuthenticator.java | 40
tomcat11-11.0.22/test/org/apache/catalina/connector/TestResponse.java | 45
tomcat11-11.0.22/test/org/apache/catalina/connector/TestValidateClientSessionId.java | 89 +
tomcat11-11.0.22/test/org/apache/catalina/core/TestStandardContext.java | 54
tomcat11-11.0.22/test/org/apache/catalina/filters/TestCsrfPreventionFilter.java | 102 +
tomcat11-11.0.22/test/org/apache/catalina/filters/TestHttpHeaderSecurityFilter.java | 191 ++
tomcat11-11.0.22/test/org/apache/catalina/filters/TestRateLimitFilter.java | 94 -
tomcat11-11.0.22/test/org/apache/catalina/filters/TestRateLimitFilterWithExactRateLimiter.java | 115 -
tomcat11-11.0.22/test/org/apache/catalina/filters/TestRemoteCIDRFilter.java | 11
tomcat11-11.0.22/test/org/apache/catalina/filters/TesterHttpServletRequest.java | 12
tomcat11-11.0.22/test/org/apache/catalina/filters/TesterRateLimitClientBase.java | 73 +
tomcat11-11.0.22/test/org/apache/catalina/loader/TestVirtualWebappLoader.java | 4
tomcat11-11.0.22/test/org/apache/catalina/nonblocking/TestNonBlockingAPI.java | 2
tomcat11-11.0.22/test/org/apache/catalina/realm/TestLockoutRealm.java | 117 +
tomcat11-11.0.22/test/org/apache/catalina/realm/TestRealmBase.java | 82 +
tomcat11-11.0.22/test/org/apache/catalina/servlets/TestWebdavBoundedByteArrayOutputStream.java | 121 +
tomcat11-11.0.22/test/org/apache/catalina/servlets/TestWebdavServlet.java | 83 +
tomcat11-11.0.22/test/org/apache/catalina/session/FileStoreTest.java | 100 -
tomcat11-11.0.22/test/org/apache/catalina/session/TestFileStore.java | 130 +
tomcat11-11.0.22/test/org/apache/catalina/startup/LoggingBaseTest.java | 2
tomcat11-11.0.22/test/org/apache/catalina/startup/TomcatBaseTest.java | 8
tomcat11-11.0.22/test/org/apache/catalina/storeconfig/TestStoreConfig.java | 18
tomcat11-11.0.22/test/org/apache/catalina/tribes/group/interceptors/TestEncryptInterceptor.java | 58
tomcat11-11.0.22/test/org/apache/catalina/tribes/group/interceptors/TestEncryptInterceptorAlgorithms.java | 162 ++
tomcat11-11.0.22/test/org/apache/catalina/util/TestServerInfo.java | 497 +++++++
tomcat11-11.0.22/test/org/apache/catalina/util/TestURLEncoder.java | 28
tomcat11-11.0.22/test/org/apache/catalina/valves/TestAccessLogValve.java | 12
tomcat11-11.0.22/test/org/apache/catalina/valves/TestAccessLogValveFile.java | 273 +++
tomcat11-11.0.22/test/org/apache/catalina/valves/TestFilterValve.java | 229 +++
tomcat11-11.0.22/test/org/apache/catalina/valves/TestJsonErrorReportValve.java | 412 ++++++
tomcat11-11.0.22/test/org/apache/catalina/valves/TestLoadBalancerDrainingValve.java | 28
tomcat11-11.0.22/test/org/apache/catalina/valves/TestPersistentValve.java | 134 +
tomcat11-11.0.22/test/org/apache/catalina/valves/TestProxyErrorReportValve.java | 277 ++++
tomcat11-11.0.22/test/org/apache/catalina/valves/TestSemaphoreValve.java | 440 ++++++
tomcat11-11.0.22/test/org/apache/catalina/webresources/TestCachedResource.java | 35
tomcat11-11.0.22/test/org/apache/coyote/TestCompressionConfig.java | 60
tomcat11-11.0.22/test/org/apache/coyote/http11/TestHttp11Processor.java | 30
tomcat11-11.0.22/test/org/apache/coyote/http11/filters/TestChunkedInputFilter.java | 95 +
tomcat11-11.0.22/test/org/apache/coyote/http11/filters/TestChunkedOutputFilter.java | 123 +
tomcat11-11.0.22/test/org/apache/coyote/http2/Http2TestBase.java | 31
tomcat11-11.0.22/test/org/apache/coyote/http2/TestHPackHuffman.java | 45
tomcat11-11.0.22/test/org/apache/coyote/http2/TestHttp2RequestParameters.java | 52
tomcat11-11.0.22/test/org/apache/coyote/http2/TestHttp2Section_6_2.java | 36
tomcat11-11.0.22/test/org/apache/coyote/http2/TestHttp2Section_8_1.java | 54
tomcat11-11.0.22/test/org/apache/coyote/http2/TestHttp2Section_8_2.java | 121 +
tomcat11-11.0.22/test/org/apache/coyote/http2/TestHttp2Section_8_3.java | 74 +
tomcat11-11.0.22/test/org/apache/coyote/http2/TestHttp2Section_8_5.java | 84 +
tomcat11-11.0.22/test/org/apache/coyote/http2/TestLargeUpload.java | 7
tomcat11-11.0.22/test/org/apache/coyote/http2/TestStreamProcessor.java | 6
tomcat11-11.0.22/test/org/apache/el/TestValueExpressionImpl.java | 29
tomcat11-11.0.22/test/org/apache/jasper/compiler/TestGenerator.java | 43
tomcat11-11.0.22/test/org/apache/jasper/compiler/TestTagLibraryInfoImpl.java | 120 +
tomcat11-11.0.22/test/org/apache/juli/TestFileHandlerNonRotatable.java | 12
tomcat11-11.0.22/test/org/apache/tomcat/integration/httpd/HttpdIntegrationBaseTest.java | 176 ++
tomcat11-11.0.22/test/org/apache/tomcat/integration/httpd/TestBasicProxy.java | 73 +
tomcat11-11.0.22/test/org/apache/tomcat/integration/httpd/TestChunkedTransferEncodingWithProxy.java | 96 +
tomcat11-11.0.22/test/org/apache/tomcat/integration/httpd/TestErrorHandling.java | 81 +
tomcat11-11.0.22/test/org/apache/tomcat/integration/httpd/TestFullReverseProxy.java | 111 +
tomcat11-11.0.22/test/org/apache/tomcat/integration/httpd/TestLargePayloadWithProxy.java | 111 +
tomcat11-11.0.22/test/org/apache/tomcat/integration/httpd/TestRemoteIpValveWithProxy.java | 81 +
tomcat11-11.0.22/test/org/apache/tomcat/integration/httpd/TestSSLValveWithProxy01.java | 88 +
tomcat11-11.0.22/test/org/apache/tomcat/integration/httpd/TestSSLValveWithProxy02.java | 86 +
tomcat11-11.0.22/test/org/apache/tomcat/integration/httpd/TestSessionWithProxy.java | 117 +
tomcat11-11.0.22/test/org/apache/tomcat/integration/httpd/TesterHttpd.java | 149 ++
tomcat11-11.0.22/test/org/apache/tomcat/jni/TesterLibraryLoad.java | 37
tomcat11-11.0.22/test/org/apache/tomcat/security/TestSecurity2017.java | 43
tomcat11-11.0.22/test/org/apache/tomcat/security/TestSecurity2017Ocsp.java | 113 +
tomcat11-11.0.22/test/org/apache/tomcat/security/TestSecurity2018.java | 79 +
tomcat11-11.0.22/test/org/apache/tomcat/security/TestSecurity2019.java | 185 ++
tomcat11-11.0.22/test/org/apache/tomcat/security/TestSecurity2023.java | 99 +
tomcat11-11.0.22/test/org/apache/tomcat/unittest/TesterRequest.java | 10
tomcat11-11.0.22/test/org/apache/tomcat/unittest/TesterResponseWithStatus.java | 36
tomcat11-11.0.22/test/org/apache/tomcat/util/http/TestRequestUtilNormalize.java | 3
tomcat11-11.0.22/test/org/apache/tomcat/util/http/parser/TestChunkExtension.java | 186 ++
tomcat11-11.0.22/test/org/apache/tomcat/util/http/parser/TestMediaType.java | 6
tomcat11-11.0.22/test/org/apache/tomcat/util/net/TestAlpnFallback.java | 52
tomcat11-11.0.22/test/org/apache/tomcat/util/net/TestLargeClientHello.java | 91 +
tomcat11-11.0.22/test/org/apache/tomcat/util/net/TestSSLHostConfig.java | 91 +
tomcat11-11.0.22/test/org/apache/tomcat/util/net/TestSSLHostConfigCipher.java | 161 ++
tomcat11-11.0.22/test/org/apache/tomcat/util/net/TestSSLHostConfigProtocol.java | 153 ++
tomcat11-11.0.22/test/org/apache/tomcat/util/net/TestSsl.java | 4
tomcat11-11.0.22/test/org/apache/tomcat/util/net/TestSslHandshakeFailure.java | 83 +
tomcat11-11.0.22/test/org/apache/tomcat/util/net/TesterKeystoreGenerator.java | 103 +
tomcat11-11.0.22/test/org/apache/tomcat/util/net/TesterSupport.java | 113 +
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ca-cert.pem | 74 -
tomcat11-11.0.22/test/org/apache/tomcat/util/net/index.db | 7
tomcat11-11.0.22/test/org/apache/tomcat/util/net/localhost-crl-rsa-cert.pem | 108 +
tomcat11-11.0.22/test/org/apache/tomcat/util/net/localhost-crl-rsa-key.pem | 28
tomcat11-11.0.22/test/org/apache/tomcat/util/net/localhost-ec-cert.pem | 130 -
tomcat11-11.0.22/test/org/apache/tomcat/util/net/localhost-ec-key.pem | 13
tomcat11-11.0.22/test/org/apache/tomcat/util/net/localhost-rsa-cert.pem | 165 +-
tomcat11-11.0.22/test/org/apache/tomcat/util/net/localhost-rsa-key.pem | 52
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp-responder-rsa-cert.pem | 105 +
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp-responder-rsa-key.pem | 28
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/OcspBaseTest.java | 186 ++
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/TestOcspEnabled.java | 121 +
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/TestOcspIntegration.java | 432 ------
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/TestOcspSoftFail.java | 57
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/TestOcspSoftFailInternalError.java | 111 +
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/TestOcspSoftFailTryLater.java | 111 +
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/TestOcspTimeout.java | 73 +
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/TesterOcspResponder.java | 112 +
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/TesterOcspResponderNoResponse.java | 113 +
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/TesterOcspResponderServlet.java | 271 +++
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/ca-cert.pem | 19
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/client-password | 1
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/generate-ocsp-test-artifacts.sh | 172 --
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/server-cert.pem | 86 -
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/server-key.pem | 28
tomcat11-11.0.22/test/org/apache/tomcat/util/net/ocsp/trust-password | 1
tomcat11-11.0.22/test/org/apache/tomcat/util/net/openssl/ciphers/TestCipher.java | 14
tomcat11-11.0.22/test/org/apache/tomcat/util/net/openssl/ciphers/TestOpenSSLCipherConfigurationParser.java | 143 +-
tomcat11-11.0.22/test/org/apache/tomcat/util/net/openssl/ciphers/TesterOpenSSL.java | 27
tomcat11-11.0.22/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java | 57
tomcat11-11.0.22/test/org/apache/tomcat/websocket/TesterWebSocketClientProxy.java | 61
tomcat11-11.0.22/test/org/apache/tomcat/websocket/server/TestClose.java | 19
tomcat11-11.0.22/test/webapp/WEB-INF/classes/bug69623-a.mdd | 16
tomcat11-11.0.22/test/webapp/jsp/generator/dependants-order-a.jspf | 17
tomcat11-11.0.22/test/webapp/jsp/generator/dependants-order-b.jspf | 17
tomcat11-11.0.22/test/webapp/jsp/generator/dependants-order-c.jspf | 17
tomcat11-11.0.22/test/webapp/jsp/generator/dependants-order.jsp | 19
tomcat11-11.0.22/test/webapp/jsp/generator/external-taglib.jsp | 19
tomcat11-11.0.22/webapps/docs/changelog.xml | 683 +++++++++-
tomcat11-11.0.22/webapps/docs/cluster-howto.xml | 10
tomcat11-11.0.22/webapps/docs/config/ajp.xml | 1
tomcat11-11.0.22/webapps/docs/config/cluster-interceptor.xml | 19
tomcat11-11.0.22/webapps/docs/config/cluster-manager.xml | 47
tomcat11-11.0.22/webapps/docs/config/cluster-valve.xml | 46
tomcat11-11.0.22/webapps/docs/config/cluster.xml | 97 -
tomcat11-11.0.22/webapps/docs/config/filter.xml | 128 +
tomcat11-11.0.22/webapps/docs/config/http.xml | 126 +
tomcat11-11.0.22/webapps/docs/config/http2.xml | 21
tomcat11-11.0.22/webapps/docs/config/listeners.xml | 31
tomcat11-11.0.22/webapps/docs/config/realm.xml | 6
tomcat11-11.0.22/webapps/docs/config/server.xml | 2
tomcat11-11.0.22/webapps/docs/config/valve.xml | 184 ++
tomcat11-11.0.22/webapps/docs/ssl-howto.xml | 37
tomcat11-11.0.22/webapps/docs/windows-auth-howto.xml | 17
tomcat11-11.0.22/webapps/examples/WEB-INF/classes/LocalStrings_zh_CN.properties | 2
tomcat11-11.0.22/webapps/manager/WEB-INF/jsp/connectorCerts.jsp | 2
tomcat11-11.0.22/webapps/manager/WEB-INF/jsp/connectorCiphers.jsp | 2
tomcat11-11.0.22/webapps/manager/WEB-INF/jsp/connectorTrustedCerts.jsp | 2
tomcat11-11.0.22/webapps/manager/WEB-INF/jsp/sessionDetail.jsp | 2
tomcat11-11.0.22/webapps/manager/WEB-INF/jsp/sessionsList.jsp | 2
491 files changed, 18428 insertions(+), 4495 deletions(-)
dpkg-source: warning: cannot verify inline signature for /srv/release.debian.org/tmp/tmps7zhhhk8/tomcat11_11.0.15-1~deb13u1.dsc: no acceptable signature found
dpkg-source: warning: cannot verify inline signature for /srv/release.debian.org/tmp/tmps7zhhhk8/tomcat11_11.0.22-1~deb13u1.dsc: no acceptable signature found
diff -Nru tomcat11-11.0.15/.github/workflows/ci.yml tomcat11-11.0.22/.github/workflows/ci.yml
--- tomcat11-11.0.15/.github/workflows/ci.yml 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/.github/workflows/ci.yml 2026-05-01 18:56:05.000000000 +0000
@@ -46,7 +46,7 @@
run: |
ant -noinput echoproperties deploy embed test-nio test-status
env:
- ANT_OPTS: -Dtest.openssl.exists=false -Dtest.excludePerformance=true -Dtest.exclude=jakarta/servlet/http/TestHttpServletResponseSendError.java,org/apache/catalina/authenticator/TestFormAuthenticatorA.java,org/apache/catalina/authenticator/TestFormAuthenticatorB.java,org/apache/catalina/authenticator/TestFormAuthenticatorC.java,org/apache/catalina/authenticator/TestSSOnonLoginAndBasicAuthenticator.java,org/apache/catalina/authenticator/TestSSOnonLoginAndDigestAuthenticator.java,org/apache/catalina/core/TestAsyncContextImpl.java,org/apache/catalina/core/TestAsyncContextStateChanges.java,org/apache/catalina/core/TestStandardContextResources.java,org/apache/catalina/core/TestStandardWrapper.java,org/apache/catalina/loader/TestVirtualContext.java,org/apache/catalina/mapper/TestMapperWebapps.java,org/apache/catalina/nonblocking/TestNonBlockingAPI.java,org/apache/catalina/servlets/TestDefaultServletEncodingPassThroughBom.java,org/apache/catalina/servlets/TestDefaultServletEncodingWithBom.java,org/apache/catalina/servlets/TestDefaultServletEncodingWithoutBom.java,org/apache/catalina/servlets/TestDefaultServletIfMatchRequests.java,org/apache/catalina/servlets/TestDefaultServlet.java,org/apache/catalina/servlets/TestDefaultServletOptions.java,org/apache/catalina/servlets/TestWebdavServletOptionsFile.java,org/apache/catalina/startup/TestContextConfig.java,org/apache/catalina/startup/TestHostConfigAutomaticDeploymentA.java,org/apache/catalina/startup/TestHostConfigAutomaticDeploymentB.java,org/apache/catalina/startup/TestHostConfigAutomaticDeploymentC.java,org/apache/catalina/valves/rewrite/TestRewriteValve.java,org/apache/catalina/valves/TestStuckThreadDetectionValve.java,org/apache/coyote/ajp/TestAbstractAjpProcessor.java,org/apache/coyote/http11/filters/TestChunkedInputFilter.java,org/apache/coyote/http11/TestHttp11InputBufferCRLF.java,org/apache/coyote/http11/TestHttp11InputBuffer.java,org/apache/coyote/http11/TestHttp11Processor.java,org/apache/coyote/http2/TestAsync.java,org/apache/coyote/http2/TestHttp2ConnectionTimeouts.java,org/apache/coyote/http2/TestHttp2Limits.java,org/apache/coyote/http2/TestHttp2Section_6_8.java,org/apache/coyote/http2/TestHttp2Timeouts.java,org/apache/coyote/http2/TestStreamQueryString.java,org/apache/el/TestELInJsp.java,org/apache/jasper/compiler/TestCompiler.java,org/apache/jasper/compiler/TestEncodingDetector.java,org/apache/jasper/compiler/TestGenerator.java,org/apache/jasper/compiler/TestJspConfig.java,org/apache/jasper/compiler/TestJspDocumentParser.java,org/apache/jasper/compiler/TestValidator.java,org/apache/jasper/optimizations/TestELInterpreterTagSetters.java,org/apache/jasper/optimizations/TestStringInterpreterTagSetters.java,org/apache/jasper/runtime/TestCustomHttpJspPage.java,org/apache/jasper/runtime/TestJspContextWrapper.java,org/apache/jasper/runtime/TestJspRuntimeLibrary.java,org/apache/jasper/runtime/TestPageContextImpl.java,org/apache/jasper/servlet/TestTldScanner.java,org/apache/naming/resources/TestWarDirContext.java,org/apache/naming/TestEnvEntry.java,org/apache/tomcat/util/net/TestClientCert.java,org/apache/tomcat/util/net/TestCustomSslTrustManager.java,org/apache/tomcat/util/net/TestSSLHostConfigCompat.java,org/apache/tomcat/util/net/TestSsl.java,org/apache/tomcat/websocket/server/TestSlowClient.java,org/apache/tomcat/websocket/server/TestWsRemoteEndpointImplServerDeadlock.java,org/apache/tomcat/websocket/TestWebSocketFrameClientSSL.java,org/apache/tomcat/websocket/TestWsWebSocketContainer.java,org/apache/tomcat/websocket/TestWsWebSocketContainerTimeoutServer.java,org/apache/catalina/tribes/group/interceptors/TestTcpFailureDetector.java,org/apache/catalina/filters/TestRateLimitFilter.java,jakarta/servlet/http/TestHttpServletDoHeadInvalidWrite*.java,jakarta/servlet/http/TestHttpServletDoHeadValidWrite*.java
+ ANT_OPTS: -Dtest.openssl.exists=false -Dtest.excludePerformance=true -Dtest.profile=smoke
- name: Upload logs
if: ${{ !cancelled() }}
diff -Nru tomcat11-11.0.15/.gitignore tomcat11-11.0.22/.gitignore
--- tomcat11-11.0.15/.gitignore 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/.gitignore 2026-05-01 18:56:05.000000000 +0000
@@ -52,4 +52,3 @@
modules/jdbc-pool/bin
modules/jdbc-pool/includes
webapps/docs/jdbc-pool.xml
-/test/org/apache/tomcat/util/net/ocsp/ocsp-work/
diff -Nru tomcat11-11.0.15/BUILDING.txt tomcat11-11.0.22/BUILDING.txt
--- tomcat11-11.0.15/BUILDING.txt 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/BUILDING.txt 2026-05-01 18:56:05.000000000 +0000
@@ -54,7 +54,7 @@
listed above and that compilation will fail if a later version of Java is
used.
- See Apache Commons DBCP 2 project web site for more details on
+ See Apache Commons DBCP 2 project website for more details on
available versions of the library and its requirements,
https://commons.apache.org/dbcp/
@@ -140,7 +140,7 @@
The base.path property specifies the place where Tomcat dependencies
required by the build are downloaded. It is recommended to place this
- directory outside of the source tree, so that you do not waste your
+ directory outside the source tree, so that you do not waste your
time re-downloading the libraries.
* NOTE: The default value of the base.path property configures the build script
@@ -252,10 +252,10 @@
(5.4) Building the Windows installer
The Windows installer uses the NSIS installer framework.
-It can be build on Windows, on any other platform which provides
+It can be built on Windows, on any other platform which provides
the Wine Windows emulator or the NSIS binary "makensis".
-Linux and MacOS are platforms, on which you can install Wine or
+Linux and macOS are platforms, on which you can install Wine or
"makensis".
Selecting between Wine and makensis on non-Windows platforms can
@@ -279,7 +279,7 @@
For details see below.
Provided that Wine or "makensis" is available on non-Windows platforms,
- a full release build may be made on Windows, Linux or MacOS.
+ a full release build may be made on Windows, Linux or macOS.
If you do not want to build the Windows installer, the skip.installer
property may be set to skip the creation of the Windows installer.
@@ -293,14 +293,15 @@
# Location of GPG executable (used only for releases)
gpg.exec=/path/to/gpg
- You do not need it if you do not plan to sign the release.
-
- If "gpg.exec" property does not point to an existing file, it will be
- ignored and this feature will be deactivated.
-
You will be prompted for the GPG passphrase when the release build
starts, unless "gpg.passphrase" property is set.
+ The ant target "verify-release" also uses the property "gpg.exec" to
+ call the GPG executable. If you want to use "verify-release" but you
+ do not want to sign the release artefacts, set "gpg.exec" and also
+ "gpg.sign.files=false".
+
+
3. If building the Windows installer on Windows
If running the build in a UAC enabled environment, building the Windows
@@ -367,7 +368,7 @@
the NSIS binary distribution that "ant download-dist" installed. When using
"NSIS_CONFIG_CONST_DATA_PATH=no" the binary is independent of the value of "PREFIX".
- In addition set the ant property "nsis.tool" to "makensis" in
+ In addition, set the ant property "nsis.tool" to "makensis" in
build.properties.
6. Build the release:
@@ -533,13 +534,22 @@
junit.formatter.usefile=false
- 5. It is possible to speed up testing by letting JUnit to run several
+ 5. It is possible to speed up testing by letting JUnit run several
tests in parallel.
This is configured by setting "test.threads" property. The recommended
value is one thread per core.
- 6. Optional support is provided for the Cobertura code coverage tool.
+ 6. Test output can be suppressed for cleaner console output, especially useful
+ when running tests with multiple threads:
+
+ ant test -Dtest.silent=true
+
+ This suppresses JUnit console output while still saving all test results to
+ individual log files in output/build/logs. The test-status target will still
+ display a summary of any failures or skipped tests.
+
+ 7. Optional support is provided for the Cobertura code coverage tool.
NOTE: Cobertura is licensed under GPL v2 with parts of it being under
Apache License v1.1. See https://cobertura.github.io/cobertura/ for details.
@@ -558,7 +568,7 @@
output/coverage
- 7. The performance tests are written to run on reasonably powerful machines
+ 8. The performance tests are written to run on reasonably powerful machines
(such as a developer may use day to day) assuming no other resource hungry
processes are running.
@@ -570,7 +580,7 @@
Where there is no benefit in running an absolute performance test as part
of a standard test run, the test will be excluded by naming it
- Tester*Performance.java.
+ Test*Performance.java.
The relative tests are included as part of a standard test run however,
where the assumptions made about host capabilities are not true (e.g. on
@@ -579,30 +589,97 @@
test.excludePerformance=true
- 8. Some tests are require large heaps (e.g. 8GB). The CI systems used by the
+ 9. Some tests are require large heaps (e.g. 8GB). The CI systems used by the
project either cannot support heaps of this size or do not support them by
default. These tests are therefore disabled by default and may be enabled by
using the following property:
test.includeLargeHeap=true
- 9. Some tests include checks that the access log valve entries are as expected.
+ 10. Some tests include checks that the access log valve entries are as expected.
These checks include timings. On slower / loaded systems these checks will
often fail. The checks may be relaxed by using the following property:
test.relaxTiming=true
- 10. It is known that some platforms (e.g. OSX El Capitan) require IPv4 to
+ 11. It is known that some platforms (e.g. OSX El Capitan) require IPv4 to
be the default for the multicast tests to work. This is configured by
the following property:
java.net.preferIPv4Stack=true
- 11. By default the output of unit tests is sent to the console and can be
+ 12. By default, the output of unit tests is sent to the console and can be
quite verbose. The output can be deactivated by setting the property:
test.verbose=false
+(7.5) Running httpd integration tests
+
+ Tomcat includes integration tests that verify Tomcat's behavior when
+ running behind an Apache HTTP Server (httpd) reverse proxy. These tests
+ require a working httpd installation and are skipped when httpd is not
+ available.
+
+ 1. Prerequisites
+
+ An Apache HTTP Server (httpd) installation is required.
+ The following httpd modules must be available:
+
+ - mod_proxy
+ - mod_proxy_http
+ - mod_headers
+ - mod_ssl
+ - mod_authz_core
+ - mod_unixd (Linux and macOS only)
+ - mod_mpm_event or mod_mpm_prefork (Linux and macOS)
+
+ On most Linux distributions, httpd can be installed via the system
+ package manager:
+
+ # Debian/Ubuntu
+ sudo apt install apache2
+
+ # RHEL/Fedora
+ sudo dnf install httpd
+
+ On macOS, httpd is included with the system or can be installed via
+ Homebrew:
+
+ brew install httpd
+
+ 2. Configuration
+
+ If the httpd binary is on the system PATH, the tests will find it
+ automatically. If httpd is installed in a non-standard location, set
+ the "test.httpd.path" property in your build.properties file to point
+ to the httpd binary:
+
+ test.httpd.path=/usr/sbin/httpd
+
+ 3. Running the tests
+ Integration tests are excluded from the default test run. To run
+ them, use the integration test profile:
+
+ ant test -Dtest.profile=integration
+
+ The httpd integration tests are located in:
+
+ test/org/apache/tomcat/integration/httpd/
+
+ 4. How the tests work
+
+ Each test starts an httpd instance in foreground mode (-X) with a
+ generated configuration that proxies requests to a Tomcat instance
+ managed by the test framework. A file lock (httpd-binary.lock) is
+ used to serialize test classes so that only one httpd instance runs
+ at a time.
+
+ The base class (HttpdIntegrationBaseTest) handles platform-specific
+ httpd module loading automatically. Test subclasses only need to
+ provide the test-specific httpd directives (proxy rules, extra
+ modules, etc.).
+
+
(8) Source code checks
(8.1) Checkstyle
diff -Nru tomcat11-11.0.15/CONTRIBUTING.md tomcat11-11.0.22/CONTRIBUTING.md
--- tomcat11-11.0.15/CONTRIBUTING.md 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/CONTRIBUTING.md 2026-05-01 18:56:05.000000000 +0000
@@ -157,6 +157,67 @@
* Java source: { at end of line, 4 space indents
* XML source: 2 space indents
+## Changelog Entries
+
+Every code change that affects functionality, behavior, or user-visible features should have a corresponding entry in `webapps/docs/changelog.xml`.
+
+### When Changelog Entries Are Needed
+
+Add a changelog entry for:
+- New features or APIs
+- Bug fixes
+- Changes to defaults or existing behavior
+- Removals or deprecations
+- Significant refactoring that affects performance or behavior
+- Documentation updates to public APIs
+
+Skip changelog entries for:
+- Test-only changes (unless fixing a test infrastructure issue)
+- Build script maintenance
+- Internal code cleanup with no user impact
+
+### Entry Types
+
+Use the appropriate XML element based on the nature of your change:
+
+- `` tags for class names, method names, and configuration attributes
+- Use `` tags for technical terms
+- Don't forget attribution at the end
+- Don't be vague ("Fix bug" -> "Fix NPE when processing empty request headers")
+- Don't include implementation details unless relevant to users
+
## Did we miss something?
Have you reviewed this guide and found it lacking? Or are you confused about
diff -Nru tomcat11-11.0.15/MERGE.txt tomcat11-11.0.22/MERGE.txt
--- tomcat11-11.0.15/MERGE.txt 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/MERGE.txt 2026-05-01 18:56:05.000000000 +0000
@@ -37,7 +37,7 @@
Sub-tree:
src/main/java/org/apache/bcel
The SHA1 ID / tag for the most recent commit to be merged to Tomcat is:
-rel/commons-bcel-6.10.0 (2024-07-23)
+rel/commons-bcel-6.12.0 (2026-01-22)
FileUpload
----------
@@ -58,7 +58,7 @@
Sub-tree
src/main/java/org/apache/commons/pool2
The SHA1 ID / tag for the most recent commit to be merged to Tomcat is:
-rel/commons-pool-2.12.1 (2025-01-27)
+rel/commons-pool-2.13.1 (2025-12-30)
DBCP2
No unused code removed
@@ -66,4 +66,4 @@
src/main/java/org/apache/commons/dbcp2
src/main/resources/org/apache/commons/dbcp2
The SHA1 ID / tag for the most recent commit to be merged to Tomcat is:
-rel/commons-dbcp-2.13.0 (2024-12-02)
+rel/commons-dbcp-2.14.0 (2025-12-16)
diff -Nru tomcat11-11.0.15/NOTICE tomcat11-11.0.22/NOTICE
--- tomcat11-11.0.15/NOTICE 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/NOTICE 2026-05-01 18:56:05.000000000 +0000
@@ -1,5 +1,5 @@
Apache Tomcat
-Copyright 1999-2025 The Apache Software Foundation
+Copyright 1999-2026 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (https://www.apache.org/).
diff -Nru tomcat11-11.0.15/README.md tomcat11-11.0.22/README.md
--- tomcat11-11.0.15/README.md 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/README.md 2026-05-01 18:56:05.000000000 +0000
@@ -48,18 +48,16 @@
### Installation
-Please see [RUNNING.txt](RUNNING.txt) for more info.
+Please see [RUNNING.txt](RUNNING.txt) for more information.
### Licensing
-Please see [LICENSE](LICENSE) for more info.
+Please see [LICENSE](LICENSE) for more information.
### Support and Mailing List Information
* Free community support is available through the
-[tomcat-users](https://tomcat.apache.org/lists.html#tomcat-users) email list and
-a dedicated [IRC channel](https://tomcat.apache.org/irc.html) (#tomcat on
-Freenode).
+[tomcat-users](https://tomcat.apache.org/lists.html#tomcat-users) email list.
* If you want freely available support for running Apache Tomcat, please see the
resources page [here](https://tomcat.apache.org/findhelp.html).
@@ -76,4 +74,4 @@
### Contributing
-Please see [CONTRIBUTING](CONTRIBUTING.md) for more info.
+Please see [CONTRIBUTING](CONTRIBUTING.md) for more information.
diff -Nru tomcat11-11.0.15/bin/catalina.bat tomcat11-11.0.22/bin/catalina.bat
--- tomcat11-11.0.15/bin/catalina.bat 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/bin/catalina.bat 2026-05-01 18:56:05.000000000 +0000
@@ -306,7 +306,7 @@
goto execCmd
:doVersion
-%_EXECJAVA% %JAVA_OPTS% -classpath "%CATALINA_HOME%\lib\catalina.jar" org.apache.catalina.util.ServerInfo
+%_EXECJAVA% %JAVA_OPTS% -classpath "%CATALINA_HOME%\bin\tomcat-juli.jar;%CATALINA_HOME%\lib\*" -Dcatalina.home="%CATALINA_HOME%" -Dcatalina.base="%CATALINA_BASE%" org.apache.catalina.util.ServerInfo
goto end
diff -Nru tomcat11-11.0.15/bin/catalina.sh tomcat11-11.0.22/bin/catalina.sh
--- tomcat11-11.0.15/bin/catalina.sh 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/bin/catalina.sh 2026-05-01 18:56:05.000000000 +0000
@@ -565,7 +565,9 @@
elif [ "$1" = "version" ] ; then
eval "\"$_RUNJAVA\"" "$JAVA_OPTS" \
- -classpath "\"$CATALINA_HOME/lib/catalina.jar\"" \
+ -classpath "\"$CATALINA_HOME/bin/tomcat-juli.jar:$CATALINA_HOME/lib/*\"" \
+ -Dcatalina.home="\"$CATALINA_HOME\"" \
+ -Dcatalina.base="\"$CATALINA_BASE\"" \
org.apache.catalina.util.ServerInfo
else
diff -Nru tomcat11-11.0.15/build.properties.default tomcat11-11.0.22/build.properties.default
--- tomcat11-11.0.15/build.properties.default 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/build.properties.default 2026-05-01 18:56:05.000000000 +0000
@@ -31,7 +31,7 @@
# ----- Version Control Flags -----
version.major=11
version.minor=0
-version.build=15
+version.build=22
version.patch=0
version.suffix=
version.dev=-dev
@@ -76,6 +76,8 @@
test.accesslog=false
# Display the tests output on the console
test.verbose=true
+# Suppress JUnit console output (useful for parallel testing)
+test.silent=false
# Number of parallel threads to use for testing. The recommended value is one
# thread per core.
@@ -100,6 +102,8 @@
# ----- Release build settings -----
# Location of GPG executable
gpg.exec=/path/to/gpg
+# Release artefact signing with gpg
+gpg.sign.files=true
# Code signing of Windows installer
# See https://infra.apache.org/digicert-use.html for setup instructions
@@ -141,15 +145,11 @@
# ----- Eclipse JDT, version 4.7 or later -----#
# See https://cwiki.apache.org/confluence/display/TOMCAT/Managing+Tomcat%27s+Dependency+on+the+Eclipse+JDT+Core+Batch+Compiler
#
-# Checksum is from "SHA512 Checksums for 4.36" link at
-# https://download.eclipse.org/eclipse/downloads/drops4/R-4.36-202505281830/
-# https://download.eclipse.org/eclipse/downloads/drops4/R-4.36-202505281830/checksum/eclipse-4.36-SUMSSHA512
-#
-jdt.version=4.37
-jdt.release=R-4.37-202509050730
+jdt.version=4.39
+jdt.release=R-4.39-202602260420
jdt.checksum.enabled=true
jdt.checksum.algorithm=SHA-512
-jdt.checksum.value=06d8974af46d81f7a03c257b54fb5854a9b9ba8ab2733db4946745142e07e7dc3e69ea864d4b011230ffb8f92243503d7ffb6ac2ddf9b747c1bbc155c55fb583
+jdt.checksum.value=af25493d4a429fd24256f69a085a618afffe23bb09b284976fb9e82f651715a0455b704ee800432b43dd409f74874765089cd65fc148e2175d251f9ef830ce0a
jdt.home=${base.path}/ecj-${jdt.version}
jdt.jar=${jdt.home}/ecj-${jdt.version}.jar
# The download will be moved to the archive area eventually. We are taking care of that in advance.
@@ -157,14 +157,14 @@
jdt.loc.2=https://download.eclipse.org/eclipse/downloads/drops4/${jdt.release}/ecj-${jdt.version}.jar
# ----- Tomcat native library -----
-tomcat-native.version=2.0.9
-tomcat-native-openssl.version=3.5.0
+tomcat-native.version=2.0.14
+tomcat-native-openssl.version=3.5.5
tomcat-native.src.checksum.enabled=true
tomcat-native.src.checksum.algorithm=SHA-512
-tomcat-native.src.checksum.value=c8eb81de1cf7316174c36038c2133b013fd18ba11df09c41edb927ff33fef46863ef706b6193487ecde1eed7055d4c47fa23fc29d5a8d53f0c4b6d69b0ce9b33
+tomcat-native.src.checksum.value=33d626fab35cbfa7398ca90cabd99950c6362ab4e19637012850fd84ecc78184e4c6c975ece92dc8d6461b6a8c2f83221cbc7374ff154422e7722606a4a144c7
tomcat-native.win.checksum.enabled=true
tomcat-native.win.checksum.algorithm=SHA-512
-tomcat-native.win.checksum.value=8e8a580425671025913259659b61c497354d682735481663730e800c8f8b4d16d3322d9c75037146f901af22341a903fa9700d18d8d2cd874745a18563cde0d5
+tomcat-native.win.checksum.value=82c46733be9f84f11bcbf97cc1db3b9c9b861c32f30b9dee3fb3ebe1d400325587eb6b77c384622515583d455f170017201cfac62498f0a0886211839bdfa56f
tomcat-native.home=${base.path}/tomcat-native-${tomcat-native.version}
tomcat-native.tar.gz=${tomcat-native.home}/tomcat-native.tar.gz
tomcat-native.loc.1=${base-tomcat.loc.1}/tomcat-connectors/native/${tomcat-native.version}/source/tomcat-native-${tomcat-native.version}-src.tar.gz
@@ -173,33 +173,33 @@
tomcat-native.win.2=${base-tomcat.loc.2}/tomcat-connectors/native/${tomcat-native.version}/binaries/tomcat-native-${tomcat-native.version}-openssl-${tomcat-native-openssl.version}-win32-bin.zip
# ----- NSIS, version 3.0 or later -----
-nsis.version=3.11
+nsis.version=3.12
nsis.checksum.enabled=true
nsis.bin.checksum.algorithm=MD5|SHA-1
-nsis.bin.checksum.value=b7c063bee3afc8127dca0fd64c4e22ce|ef7ff767e5cbd9edd22add3a32c9b8f4500bb10d
+nsis.bin.checksum.value=757c22153dd8b90f5e297310d9966997|364fd795b0cafc1fbff3e966f103a8f8fc8fb7f1
nsis.bin.home=${base.path}/nsis-${nsis.version}
nsis.executable.windows=${nsis.bin.home}/makensis.exe
nsis.bin.loc=${base-sf.loc}/nsis/nsis-${nsis.version}.zip
nsis.src.checksum.algorithm=MD5|SHA-1
-nsis.src.checksum.value=63bdc1b7676c96486532c98c0b4d2fb5|63ddba57fe46b1e0a4810ece2a7980f069c031b6
+nsis.src.checksum.value=8ec7c3e1228ac4eb96e5e421610b4aae|432e99150881c061c7e313eb1aac45763d951572
nsis.src.home=${base.path}/nsis-${nsis.version}-src
nsis.src.loc=${base-sf.loc}/nsis/nsis-${nsis.version}-src.tar.bz2
# ----- Commons Daemon, version 1.2.0 or later -----
-commons-daemon.version=1.5.0
+commons-daemon.version=1.5.1
-# checksum for commons-daemon-1.5.0-bin.tar.gz
+# checksum for commons-daemon-1.5.1-bin.tar.gz
commons-daemon.bin.checksum.enabled=true
commons-daemon.bin.checksum.algorithm=SHA-512
-commons-daemon.bin.checksum.value=2b6365d3301b2bdf71851aa1be8b09f46b082ad93a564fbd1e64d69ad7f607807c45813fad182138150ea69fd231cd3b4812601ce011f42bd145979c005dca1b
+commons-daemon.bin.checksum.value=740b832b8a7b5df8f2aa8029cf6ee88b8be6f4f5e42e34587a70bbf2cbe5b7e7dd75da375d2f3f1f7f2e6a5d89b5ceba5433499773852df67e8bbeb88b466786
-# checksums for commons-daemon-1.5.0-native-src.tar.gz, commons-daemon-1.5.0-bin-windows.zip
+# checksums for commons-daemon-1.5.1-native-src.tar.gz, commons-daemon-1.5.1-bin-windows.zip
commons-daemon.native.src.checksum.enabled=true
commons-daemon.native.src.checksum.algorithm=SHA-512
-commons-daemon.native.src.checksum.value=8b3c22912b2fb87e5b8452f62e40d9ca328d33e5ea4db66e32139c341772e8147de300958d2e32b7a6289f0e2f3eb1e2114f10f6dc5c74232cd9f6fa2177a1f8
+commons-daemon.native.src.checksum.value=ced2238b4fb47a208e7c9aa435e7981b5d42fd9e07d11d7f72da2b7239c388a3b7d6b7ce3424624aecfbe7a8471ee316cdd46a040fadb129096705fa3325129b
commons-daemon.native.win.checksum.enabled=true
commons-daemon.native.win.checksum.algorithm=SHA-512
-commons-daemon.native.win.checksum.value=e5d4d94e350d44ca2c9f34f65439bbc663b9d4df6edda10c83d3c8a76522bd3881cb4523152739369c89ec9bdc672c9b456d46ed72e12c366d6be8ba4619575d
+commons-daemon.native.win.checksum.value=26cef55a0237aab449d2133e56815393729c3965c6fd063326bccdb569be91ddfe500b247ba3df3e9baac511452825d3d0333d165abd24932717a372a294a463
commons-daemon.home=${base.path}/commons-daemon-${commons-daemon.version}
commons-daemon.jar=${commons-daemon.home}/commons-daemon-${commons-daemon.version}.jar
@@ -242,37 +242,37 @@
easymock.loc=${base-maven.loc}/org/easymock/easymock/${easymock.version}/easymock-${easymock.version}.jar
# ----- objenesis, used by EasyMock, version 3.3 or later -----
-objenesis.version=3.4
+objenesis.version=3.5
objenesis.checksum.enabled=true
-objenesis.checksum.algorithm=MD5|SHA-1
-objenesis.checksum.value=51242320cb2bb25a3f36e2e21fa87de0|675cbe121a68019235d27f6c34b4f0ac30e07418
+objenesis.checksum.algorithm=SHA-512
+objenesis.checksum.value=7587fabe1dd4a639e869e4478a097665d34686de8c1ec5794356a5ebc27501fdad42a365e0f000bdf30b0b0f73d6c02523346fc6cfb9109239e5b2f7876e981e
objenesis.home=${base.path}/objenesis-${objenesis.version}
objenesis.jar=${objenesis.home}/objenesis-${objenesis.version}.jar
objenesis.loc=${base-maven.loc}/org/objenesis/objenesis/${objenesis.version}/objenesis-${objenesis.version}.jar
# ----- byte-buddy, used by EasyMock, version 1.12.18 or later -----
-bytebuddy.version=1.18.2
+bytebuddy.version=1.18.8
bytebuddy.checksum.enabled=true
bytebuddy.checksum.algorithm=SHA-512
-bytebuddy.checksum.value=fc5395040b177a382cff96fda197d624d3d914510e19d8ec68de9b472dc80ae48fcdb7283547774d4e4b3b74ff92107e8258c498d527c46846b5246fc9b09db9
+bytebuddy.checksum.value=0e50f1c029c91831fada246eb57a3898e327aed0e9b8b5052c1d66ff58b0d1a8b9a1c255b60da286a30cca60c1a964377c40e5fb7988bf4839f8c8ab1289b5f6
bytebuddy.home=${base.path}/byte-buddy-${bytebuddy.version}
bytebuddy.jar=${bytebuddy.home}/byte-buddy-${bytebuddy.version}.jar
bytebuddy.loc=${base-maven.loc}/net/bytebuddy/byte-buddy/${bytebuddy.version}/byte-buddy-${bytebuddy.version}.jar
# ----- UnboundID, used by unit tests, version 5.1.4 or later -----
-unboundid.version=7.0.3
+unboundid.version=7.0.4
unboundid.checksum.enabled=true
-unboundid.checksum.algorithm=SHA-512
-unboundid.checksum.value=25fef7f28e06bedfa54672370e0e4cfb5ef8041f1bd5abf2826ad022e5131bf1d3791314888a939f3fe25edbc28d28afffdd7125cfae16876ead0bf50c68351a
+unboundid.checksum.algorithm=MD5|SHA-1
+unboundid.checksum.value=7006a217741934517b1cdd6aa12c6d9f|2fe2d5461a87a58aee97f836e3af63ef8ce7b29e
unboundid.home=${base.path}/unboundid-${unboundid.version}
unboundid.jar=${unboundid.home}/unboundid-ldapsdk-${unboundid.version}.jar
unboundid.loc=${base-maven.loc}/com/unboundid/unboundid-ldapsdk/${unboundid.version}/unboundid-ldapsdk-${unboundid.version}.jar
# ----- Checkstyle, version 6.16 or later -----
-checkstyle.version=12.2.0
+checkstyle.version=12.3.1
checkstyle.checksum.enabled=true
checkstyle.checksum.algorithm=SHA-512
-checkstyle.checksum.value=ddf947de9dbf6be0c69171d49415b1b0cc268f47d1a8fab04551b08086fb0100c87623cde9d99fca1cbfc92e33eb4afcea66d38a3c70155ec141c1f014453990
+checkstyle.checksum.value=8406977982d6e5eb9dba561ccb319daa9d98fc7172217f0c36644d5830121124181752c425dcf34fb7579232983d923e430a5d6b119272ab8615e7b1e4f10bf1
checkstyle.home=${base.path}/checkstyle-${checkstyle.version}
checkstyle.jar=${checkstyle.home}/checkstyle-${checkstyle.version}-all.jar
checkstyle.loc=${base-gh.loc}/checkstyle/checkstyle/releases/download/checkstyle-${checkstyle.version}/checkstyle-${checkstyle.version}-all.jar
@@ -297,10 +297,10 @@
# ----- bnd, version 6.3.0 or later -----
# ----- provides OSGI metadata for JARs -----
-bnd.version=7.1.0
+bnd.version=7.2.3
bnd.checksum.enabled=true
bnd.checksum.algorithm=MD5|SHA-1
-bnd.checksum.value=9cee533d5f3973d6135e557934160180|49e4ebe633c608c498cbfc7d7a4e9dda5fefa2fc
+bnd.checksum.value=56f0d8c7d872b88cfc5411f6caa96379|8eaec893e3ed1058acf5b780ce354db5b8226ade
bnd.home=${base.path}/bnd-${bnd.version}
bnd.jar=${bnd.home}/biz.aQute.bnd-${bnd.version}.jar
@@ -347,3 +347,23 @@
derby-shared.loc=${base-maven.loc}/org/apache/derby/derbyshared/${derby.version}/derbyshared-${derby.version}.jar
derby-tools.jar=${derby.home}/derby-tools-${derby.version}.jar
derby-tools.loc=${base-maven.loc}/org/apache/derby/derbytools/${derby.version}/derbytools-${derby.version}.jar
+
+# ----- Bouncy Castle, used by unit tests ----
+bouncycastle.version=1.84
+bouncycastle-provider.checksum.enabled=true
+bouncycastle-provider.checksum.algorithm=SHA-512
+bouncycastle-provider.checksum.value=4b7e5696830023bad1594d9f9766898f78018ec7d6ec34de23f2a6683b02803b92ffe8ab5d21f1a717eb4fafa8e22dcf3a4b6dd275bd86c7cb02609987fe92f5
+bouncycastle-pkix.checksum.enabled=true
+bouncycastle-pkix.checksum.algorithm=SHA-512
+bouncycastle-pkix.checksum.value=01644d7e0c6041ea8c8629f6ad73f7206efa2797d954da1507dd43c5d262a161194ed84e960234cf5c53787033f1181aa4965e0d6ebfe82ca040de13ca307565
+bouncycastle-util.checksum.enabled=true
+bouncycastle-util.checksum.algorithm=SHA-512
+bouncycastle-util.checksum.value=e001b244723fb3c4d1e06862bb857512015a92d7e18650ae3447a3d258274ec8ed37b8cba958397b00f8dd73463943e9a9489dd5dbddbe24b24cd6fae5ca8a62
+
+bouncycastle.home=${base.path}/bouncycastle-${bouncycastle.version}
+bouncycastle-provider.jar=${bouncycastle.home}/bouncycastle-provider-${bouncycastle.version}.jar
+bouncycastle-provider.loc=${base-maven.loc}/org/bouncycastle/bcprov-jdk18on/${bouncycastle.version}/bcprov-jdk18on-${bouncycastle.version}.jar
+bouncycastle-pkix.jar=${bouncycastle.home}/bouncycastle-pkix-${bouncycastle.version}.jar
+bouncycastle-pkix.loc=${base-maven.loc}/org/bouncycastle/bcpkix-jdk18on/${bouncycastle.version}/bcpkix-jdk18on-${bouncycastle.version}.jar
+bouncycastle-util.jar=${bouncycastle.home}/bouncycastle-util-${bouncycastle.version}.jar
+bouncycastle-util.loc=${base-maven.loc}/org/bouncycastle/bcutil-jdk18on/${bouncycastle.version}/bcutil-jdk18on-${bouncycastle.version}.jar
diff -Nru tomcat11-11.0.15/build.properties.release tomcat11-11.0.22/build.properties.release
--- tomcat11-11.0.15/build.properties.release 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/build.properties.release 2026-05-01 18:56:05.000000000 +0000
@@ -24,7 +24,7 @@
version.dev=
# Ensure consistent timestamps for reproducible builds.
-ant.tstamp.now.iso=2025-12-02T16:32:48Z
+ant.tstamp.now.iso=2026-05-01T18:29:05Z
# Enable insertion of detached signatures into the Windows installer.
do.codesigning=true
@@ -37,11 +37,11 @@
# build since this data is embedded in various files, particularly JAR file
# manifests, as part of the build process.
#
-# Apache Ant: Apache Ant(TM) version 1.10.15 compiled on August 25 2024
+# Apache Ant: Apache Ant(TM) version 1.10.17 compiled on April 6 2026
#
# Java Name: OpenJDK 64-Bit Server VM
# Java Vendor: Eclipse Adoptium
-# Java Version: 25.0.1+8-LTS
+# Java Version: 25.0.3+9-LTS
# The following is provided for information only. Builds will be repeatable
# whether or not the build environment is consistent with this information.
@@ -50,5 +50,5 @@
# File encoding: UTF-8
#
# Release Manager: markt
-release-java-version=25.0.1+8-LTS
-release-ant-version=1.10.15
+release-java-version=25.0.3+9-LTS
+release-ant-version=1.10.17
diff -Nru tomcat11-11.0.15/build.xml tomcat11-11.0.22/build.xml
--- tomcat11-11.0.15/build.xml 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/build.xml 2026-05-01 18:56:05.000000000 +0000
@@ -198,7 +198,7 @@
$CATALINA_BASE/conf/[enginename]/[hostname] folder. Here is an
example:
true if the attributes will be logged, otherwise false
diff -Nru tomcat11-11.0.15/java/org/apache/catalina/Context.java tomcat11-11.0.22/java/org/apache/catalina/Context.java
--- tomcat11-11.0.15/java/org/apache/catalina/Context.java 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/java/org/apache/catalina/Context.java 2026-05-01 18:56:05.000000000 +0000
@@ -60,7 +60,6 @@
* * The child containers attached to a Context are generally implementations of Wrapper (representing individual servlet * definitions). - *
*/
public interface Context extends Container, ContextBind {
diff -Nru tomcat11-11.0.15/java/org/apache/catalina/JmxEnabled.java tomcat11-11.0.22/java/org/apache/catalina/JmxEnabled.java
--- tomcat11-11.0.15/java/org/apache/catalina/JmxEnabled.java 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/java/org/apache/catalina/JmxEnabled.java 2026-05-01 18:56:05.000000000 +0000
@@ -27,6 +27,8 @@
public interface JmxEnabled extends MBeanRegistration {
/**
+ * Returns the domain under which this component will be / has been registered.
+ *
* @return the domain under which this component will be / has been registered.
*/
String getDomain();
@@ -42,6 +44,8 @@
/**
+ * Returns the name under which this component has been registered with JMX.
+ *
* @return the name under which this component has been registered with JMX.
*/
ObjectName getObjectName();
diff -Nru tomcat11-11.0.15/java/org/apache/catalina/WebResource.java tomcat11-11.0.22/java/org/apache/catalina/WebResource.java
--- tomcat11-11.0.15/java/org/apache/catalina/WebResource.java 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/java/org/apache/catalina/WebResource.java 2026-05-01 18:56:05.000000000 +0000
@@ -26,17 +26,23 @@
*/
public interface WebResource {
/**
+ * Returns the last modified time.
+ *
* @return {@link java.io.File#lastModified()}.
*/
long getLastModified();
/**
+ * Returns the last modified time in HTTP format.
+ *
* @return the last modified time of this resource in the correct format for the HTTP Last-Modified header as
* specified by RFC 2616.
*/
String getLastModifiedHttp();
/**
+ * Checks if this resource exists.
+ *
* @return {@link java.io.File#exists()}.
*/
boolean exists();
@@ -51,48 +57,64 @@
boolean isVirtual();
/**
+ * Checks if this resource is a directory.
+ *
* @return {@link java.io.File#isDirectory()}.
*/
boolean isDirectory();
/**
+ * Checks if this resource is a file.
+ *
* @return {@link java.io.File#isFile()}.
*/
boolean isFile();
/**
+ * Deletes this resource.
+ *
* @return {@link java.io.File#delete()}.
*/
boolean delete();
/**
+ * Returns the name of this resource.
+ *
* @return {@link java.io.File#getName()}.
*/
String getName();
/**
+ * Returns the content length of this resource.
+ *
* @return {@link java.io.File#length()}.
*/
long getContentLength();
/**
+ * Returns the canonical path of this resource.
+ *
* @return {@link java.io.File#getCanonicalPath()}.
*/
String getCanonicalPath();
/**
+ * Checks if this resource can be read.
+ *
* @return {@link java.io.File#canRead()}.
*/
boolean canRead();
/**
+ * Returns the webapp path of this resource.
+ *
* @return The path of this resource relative to the web application root. If the resource is a directory, the
* return value will end in '/'.
*/
String getWebappPath();
/**
- * Return the weak ETag calculated from the content length and last modified.
+ * Returns the weak ETag calculated from the content length and last modified.
*
* @return The ETag for this resource
*/
@@ -116,12 +138,14 @@
void setMimeType(String mimeType);
/**
+ * Returns the MIME type for this Resource.
+ *
* @return the MIME type for this Resource.
*/
String getMimeType();
/**
- * Obtain an InputStream based on the contents of this resource.
+ * Obtains an InputStream based on the contents of this resource.
*
* @return An InputStream based on the contents of this resource or null if the resource does not exist
* or does not represent a file
@@ -129,18 +153,24 @@
InputStream getInputStream();
/**
+ * Returns the binary content of this resource.
+ *
* @return the binary content of this resource or {@code null} if it is not available in a byte[] because, for
* example, it is too big.
*/
byte[] getContent();
/**
+ * Returns the creation time of this resource.
+ *
* @return The time the file was created. If not available, the result of {@link #getLastModified()} will be
* returned.
*/
long getCreation();
/**
+ * Returns a URL to access this resource.
+ *
* @return a URL to access the resource or null if no such URL is available or if the resource does not
* exist.
*/
@@ -160,11 +190,15 @@
}
/**
+ * Returns a reference to the WebResourceRoot of which this WebResource is a part.
+ *
* @return a reference to the WebResourceRoot of which this WebResource is a part.
*/
WebResourceRoot getWebResourceRoot();
/**
+ * Returns the certificates that were used to sign this resource to verify it.
+ *
* @return the certificates that were used to sign this resource to verify it or @null if none.
*
* @see java.util.jar.JarEntry#getCertificates()
@@ -172,6 +206,8 @@
Certificate[] getCertificates();
/**
+ * Returns the manifest associated with this resource.
+ *
* @return the manifest associated with this resource or @null if none.
*
* @see java.util.jar.JarFile#getManifest()
diff -Nru tomcat11-11.0.15/java/org/apache/catalina/WebResourceRoot.java tomcat11-11.0.22/java/org/apache/catalina/WebResourceRoot.java
--- tomcat11-11.0.15/java/org/apache/catalina/WebResourceRoot.java 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/java/org/apache/catalina/WebResourceRoot.java 2026-05-01 18:56:05.000000000 +0000
@@ -207,6 +207,8 @@
void addPreResources(WebResourceSet webResourceSet);
/**
+ * Returns the array of WebResourceSet configured to this web application as a 'Pre' resource.
+ *
* @return the array of WebResourceSet configured to this web application as a 'Pre' resource.
*/
WebResourceSet[] getPreResources();
@@ -219,6 +221,8 @@
void addJarResources(WebResourceSet webResourceSet);
/**
+ * Returns the array of WebResourceSet configured to this web application as a 'Jar' resource.
+ *
* @return the array of WebResourceSet configured to this web application as a 'Jar' resource.
*/
WebResourceSet[] getJarResources();
@@ -231,11 +235,15 @@
void addPostResources(WebResourceSet webResourceSet);
/**
+ * Returns the array of WebResourceSet configured to this web application as a 'Post' resource.
+ *
* @return the array of WebResourceSet configured to this web application as a 'Post' resource.
*/
WebResourceSet[] getPostResources();
/**
+ * Returns the web application this WebResourceRoot is associated with.
+ *
* @return the web application this WebResourceRoot is associated with.
*/
Context getContext();
@@ -271,6 +279,8 @@
void setCachingAllowed(boolean cachingAllowed);
/**
+ * Checks if caching is permitted for this web application.
+ *
* @return true if caching is permitted for this web application.
*/
boolean isCachingAllowed();
@@ -428,6 +438,8 @@
}
/**
+ * Checks if the main resources are read only.
+ *
* @return {@code true} if the main resources are read only, otherwise {@code false}. The default implementation
* returns {@code false}.
*/
diff -Nru tomcat11-11.0.15/java/org/apache/catalina/ant/AbstractCatalinaCommandTask.java tomcat11-11.0.22/java/org/apache/catalina/ant/AbstractCatalinaCommandTask.java
--- tomcat11-11.0.15/java/org/apache/catalina/ant/AbstractCatalinaCommandTask.java 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/java/org/apache/catalina/ant/AbstractCatalinaCommandTask.java 2026-05-01 18:56:05.000000000 +0000
@@ -21,6 +21,9 @@
import org.apache.tools.ant.BuildException;
+/**
+ * Abstract task for Catalina commands.
+ */
public abstract class AbstractCatalinaCommandTask extends AbstractCatalinaTask {
/**
@@ -28,10 +31,20 @@
*/
protected String path = null;
+ /**
+ * Returns the path.
+ *
+ * @return the path
+ */
public String getPath() {
return this.path;
}
+ /**
+ * Sets the path.
+ *
+ * @param path The path to set
+ */
public void setPath(String path) {
this.path = path;
}
@@ -41,10 +54,20 @@
*/
protected String version = null;
+ /**
+ * Returns the version.
+ *
+ * @return the version
+ */
public String getVersion() {
return this.version;
}
+ /**
+ * Sets the version.
+ *
+ * @param version The version to set
+ */
public void setVersion(String version) {
this.version = version;
}
diff -Nru tomcat11-11.0.15/java/org/apache/catalina/authenticator/AuthenticatorBase.java tomcat11-11.0.22/java/org/apache/catalina/authenticator/AuthenticatorBase.java
--- tomcat11-11.0.15/java/org/apache/catalina/authenticator/AuthenticatorBase.java 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/java/org/apache/catalina/authenticator/AuthenticatorBase.java 2026-05-01 18:56:05.000000000 +0000
@@ -210,7 +210,6 @@
* {@code remote-user} and {@code auth-type} to a reverse proxy. This is useful, e.g., for access log consistency or
* other decisions to make.
*/
-
protected boolean sendAuthInfoResponseHeaders = false;
protected SessionIdGeneratorBase sessionIdGenerator = null;
@@ -220,6 +219,8 @@
*/
protected SingleSignOn sso = null;
+ private SsoReauthenticationMode ssoReauthenticationMode = SsoReauthenticationMode.DEFAULT;
+
private AllowCorsPreflight allowCorsPreflight = AllowCorsPreflight.NEVER;
private volatile String jaspicAppContextID = null;
@@ -229,6 +230,15 @@
// ------------------------------------------------------------- Properties
+ public String getSsoReauthenticationMode() {
+ return ssoReauthenticationMode.name().toLowerCase(Locale.ENGLISH);
+ }
+
+ public void setSsoReauthenticationMode(String ssoReauthenticationMode) {
+ this.ssoReauthenticationMode =
+ SsoReauthenticationMode.valueOf(ssoReauthenticationMode.trim().toUpperCase(Locale.ENGLISH));
+ }
+
public String getAllowCorsPreflight() {
return allowCorsPreflight.name().toLowerCase(Locale.ENGLISH);
}
@@ -519,9 +529,11 @@
if (constraints != null) {
hasAuthConstraint = true;
for (int i = 0; i < constraints.length && hasAuthConstraint; i++) {
- if (!constraints[i].getAuthConstraint()) {
+ if (constraints[i].getAllRoles() || constraints[i].getAuthenticatedUsers()) {
+ // NO-OP - has hasAuthConstraint
+ } else if (!constraints[i].getAuthConstraint()) {
hasAuthConstraint = false;
- } else if (!constraints[i].getAllRoles() && !constraints[i].getAuthenticatedUsers()) {
+ } else {
String[] roles = constraints[i].findAuthRoles();
if (roles == null || roles.length == 0) {
hasAuthConstraint = false;
@@ -878,40 +890,87 @@
* Check to see if the user has already been authenticated earlier in the processing chain or if there is enough
* information available to authenticate the user without requiring further user interaction.
*
- * @param request The current request
- * @param response The current response
- * @param useSSO Should information available from SSO be used to attempt to authenticate the current user?
+ * @param request The current request
+ * @param response The current response
+ * @param useSsoCachedUserAndPassword Should the user and password available from SSO be used to attempt to
+ * authenticate the current user?
*
* @return true if the user was authenticated via the cache, otherwise false
*/
- protected boolean checkForCachedAuthentication(Request request, HttpServletResponse response, boolean useSSO) {
+ protected boolean checkForCachedAuthentication(Request request, HttpServletResponse response,
+ boolean useSsoCachedUserAndPassword) {
- // Has the user already been authenticated?
- Principal principal = request.getUserPrincipal();
+ /*
+ * There are two methods for authentication caching implemented by the SSO Valve. The first caches the
+ * authenticated Principal returned by the Realm. The second caches the user name and password passed to the
+ * Realm that were used for authentication.
+ *
+ * If cached authentication is not available or fails for any reason, the Authenticator will attempt the normal
+ * authentication process for the Authenticator.
+ *
+ * Which cached authentication methods are used depends on the configuration of the SSO Valve and/or the
+ * Authenticator.
+ *
+ * If the SSO Valve is configured to require re-authentication, any cached Principal will not be used unless the
+ * Authenticator is explicitly configured (via ssoReauthenticationMode) to use it.
+ *
+ * If the SSO Valve is configured to require re-authentication, whether the cached user name and password can be
+ * used will be determined by the calling Authenticator type unless the Authenticator's ssoReauthenticationMode
+ * is explicitly configured.
+ */
+
+ // Determine which - if any - checks for cached authentication will be made.
+ boolean checkPrincipal = false;
+ boolean checkPassword = false;
+
+ // Will be null if SSO is not configured or there is no current SSO session
String ssoId = (String) request.getNote(Constants.REQ_SSOID_NOTE);
- if (principal != null) {
- if (log.isDebugEnabled()) {
- log.debug(sm.getString("authenticator.check.found", principal.getName()));
- }
- // Associate the session with any existing SSO session. Even if
- // useSSO is false, this will ensure coordinated session
- // invalidation at log out.
+
+ if (sso == null) {
+ // There is no SSO - check in case some other component has set the Principal
+ checkPrincipal = true;
+ } else if (ssoReauthenticationMode == SsoReauthenticationMode.DEFAULT && !sso.getRequireReauthentication() ||
+ ssoReauthenticationMode == SsoReauthenticationMode.PRINCIPAL) {
+ checkPrincipal = true;
+ // If checkPrincipal is enabled then checkPassword is enabled if there is an SSO session
if (ssoId != null) {
- associate(ssoId, request.getSessionInternal(true));
+ checkPassword = true;
}
- return true;
+ } else if (ssoId != null && (ssoReauthenticationMode == SsoReauthenticationMode.PASSWORD ||
+ sso.getRequireReauthentication() && useSsoCachedUserAndPassword)) {
+ checkPassword = true;
}
- // Is there an SSO session against which we can try to reauthenticate?
- if (useSSO && ssoId != null) {
+ // Check for a cached Principal. Most likely from SSO but could be another component.
+ if (checkPrincipal) {
+ if (ssoId != null && sso != null && sso.getRequireReauthentication()) {
+ // There is a valid SSO session but SSO Valve won't have cached the Principal.
+ sso.populateRequestFromSsoEntry(request, ssoId);
+ }
+
+ // Has the user already been authenticated?
+ Principal principal = request.getUserPrincipal();
+ if (principal != null) {
+ if (log.isDebugEnabled()) {
+ log.debug(sm.getString("authenticator.check.found", principal.getName()));
+ }
+ // Associate the session with any existing SSO session. Even if
+ // useSSO is false, this will ensure coordinated session
+ // invalidation at log out.
+ if (ssoId != null) {
+ associate(ssoId, request.getSessionInternal(true));
+ }
+ return true;
+ }
+ }
+
+ // Check for a user and password cached by SSO
+ if (checkPassword) {
if (log.isDebugEnabled()) {
log.debug(sm.getString("authenticator.check.sso", ssoId));
}
/*
- * Try to reauthenticate using data cached by SSO. If this fails, either the original SSO logon was of
- * DIGEST or SSL (which we can't reauthenticate ourselves because there is no cached username and password),
- * or the realm denied the user's reauthentication for some reason. In either case we have to prompt the
- * user for a logon
+ * Try to reauthenticate using data cached by SSO. If this fails we have to prompt the user for credentials.
*/
if (reauthenticateFromSSO(ssoId, request)) {
return true;
@@ -1294,4 +1353,12 @@
FILTER,
ALWAYS
}
+
+
+ protected enum SsoReauthenticationMode {
+ DEFAULT,
+ PRINCIPAL,
+ PASSWORD,
+ FULL
+ }
}
diff -Nru tomcat11-11.0.15/java/org/apache/catalina/authenticator/DigestAuthenticator.java tomcat11-11.0.22/java/org/apache/catalina/authenticator/DigestAuthenticator.java
--- tomcat11-11.0.15/java/org/apache/catalina/authenticator/DigestAuthenticator.java 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/java/org/apache/catalina/authenticator/DigestAuthenticator.java 2026-05-01 18:56:05.000000000 +0000
@@ -43,6 +43,7 @@
import org.apache.tomcat.util.buf.StringUtils;
import org.apache.tomcat.util.http.parser.Authorization;
import org.apache.tomcat.util.security.ConcurrentMessageDigest;
+import org.apache.tomcat.util.security.ConstantTime;
/**
@@ -273,8 +274,6 @@
* authentication. Reauthenticating with the cached user name and password should be sufficient for DIGEST in
* that scenario. However, the original behaviour to reauthenticate has been retained in case of any (very
* unlikely) backwards compatibility issues.
- *
- * TODO: Make the reauthentication behaviour configurable per authenticator.
*/
if (checkForCachedAuthentication(request, response, false)) {
return true;
@@ -602,7 +601,7 @@
byte[] buffer =
ConcurrentMessageDigest.digest(NONCE_DIGEST, serverIpTimeKey.getBytes(StandardCharsets.ISO_8859_1));
String digestServerIpTimeKey = HexUtils.toHexString(buffer);
- if (!digestServerIpTimeKey.equals(digestclientIpTimeKey)) {
+ if (!ConstantTime.equals(digestServerIpTimeKey, digestclientIpTimeKey, true)) {
return false;
}
diff -Nru tomcat11-11.0.15/java/org/apache/catalina/authenticator/FormAuthenticator.java tomcat11-11.0.22/java/org/apache/catalina/authenticator/FormAuthenticator.java
--- tomcat11-11.0.15/java/org/apache/catalina/authenticator/FormAuthenticator.java 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/java/org/apache/catalina/authenticator/FormAuthenticator.java 2026-05-01 18:56:05.000000000 +0000
@@ -357,15 +357,7 @@
// a resource is protected for some HTTP methods but not protected for
// GET which is used after authentication when redirecting to the
// protected resource.
- // TODO: This is similar to the FormAuthenticator.matchRequest() logic
- // Is there a way to remove the duplication?
- Session session = request.getSessionInternal(false);
- if (session != null) {
- SavedRequest savedRequest = (SavedRequest) session.getNote(Constants.FORM_REQUEST_NOTE);
- return savedRequest != null && decodedRequestURI.equals(savedRequest.getDecodedRequestURI());
- }
-
- return false;
+ return matchRequest(request, false);
}
@@ -499,15 +491,21 @@
}
+ protected boolean matchRequest(Request request) {
+ return matchRequest(request, true);
+ }
+
/**
* Does this request match the saved one (so that it must be the redirect we signaled after successful
* authentication?)
*
* @param request The request to be verified
+ * @param strict true to check for a valid Principal and valid Session ID, false to only
+ * check for a valid saved request and matching URI
*
* @return true if the requests matched the saved one
*/
- protected boolean matchRequest(Request request) {
+ protected boolean matchRequest(Request request, boolean strict) {
// Has a session been created?
Session session = request.getSessionInternal(false);
if (session == null) {
@@ -520,17 +518,19 @@
return false;
}
- // Is there a saved principal?
- if (cache && session.getPrincipal() == null || !cache && request.getPrincipal() == null) {
- return false;
- }
-
- // Does session id match?
- if (getChangeSessionIdOnAuthentication()) {
- String expectedSessionId = (String) session.getNote(Constants.SESSION_ID_NOTE);
- if (expectedSessionId == null || !expectedSessionId.equals(request.getRequestedSessionId())) {
+ if (strict) {
+ // Is there a saved principal?
+ if (cache && session.getPrincipal() == null || !cache && request.getPrincipal() == null) {
return false;
}
+
+ // Does session id match?
+ if (getChangeSessionIdOnAuthentication()) {
+ String expectedSessionId = (String) session.getNote(Constants.SESSION_ID_NOTE);
+ if (expectedSessionId == null || !expectedSessionId.equals(request.getRequestedSessionId())) {
+ return false;
+ }
+ }
}
// Does the request URI match?
diff -Nru tomcat11-11.0.15/java/org/apache/catalina/authenticator/SSLAuthenticator.java tomcat11-11.0.22/java/org/apache/catalina/authenticator/SSLAuthenticator.java
--- tomcat11-11.0.15/java/org/apache/catalina/authenticator/SSLAuthenticator.java 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/java/org/apache/catalina/authenticator/SSLAuthenticator.java 2026-05-01 18:56:05.000000000 +0000
@@ -69,8 +69,6 @@
* since it will not make any TLS information (client certificate etc) available that a web application may
* depend on. Therefore, the reauthentication behaviour for CLIENT-CERT is to perform a normal CLIENT-CERT
* authentication.
- *
- * TODO: Make the reauthentication behaviour configurable per authenticator.
*/
if (checkForCachedAuthentication(request, response, false)) {
return true;
diff -Nru tomcat11-11.0.15/java/org/apache/catalina/authenticator/SingleSignOn.java tomcat11-11.0.22/java/org/apache/catalina/authenticator/SingleSignOn.java
--- tomcat11-11.0.15/java/org/apache/catalina/authenticator/SingleSignOn.java 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/java/org/apache/catalina/authenticator/SingleSignOn.java 2026-05-01 18:56:05.000000000 +0000
@@ -506,6 +506,15 @@
}
+ protected void populateRequestFromSsoEntry(Request request, String ssoId) {
+ SingleSignOnEntry entry = cache.get(ssoId);
+ if (entry != null) {
+ request.setAuthType(entry.getAuthType());
+ request.setUserPrincipal(entry.getPrincipal());
+ }
+ }
+
+
/**
* Register the specified Principal as being associated with the specified value for the single sign on identifier.
*
diff -Nru tomcat11-11.0.15/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java tomcat11-11.0.22/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java
--- tomcat11-11.0.15/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java 2026-05-01 18:56:05.000000000 +0000
@@ -20,7 +20,6 @@
import java.io.IOException;
import java.security.Principal;
import java.util.Base64;
-import java.util.LinkedHashMap;
import java.util.concurrent.CompletionException;
import java.util.regex.Pattern;
@@ -93,14 +92,29 @@
}
}
- private boolean applyJava8u40Fix = true;
-
+ /**
+ * This attribute is now hard-coded to {@code false} as the work-around this attribute enabled is no longer
+ * required.
+ *
+ * @return Always {@code false}
+ *
+ * @deprecated This method will be removed from Tomcat 12 onwards.
+ */
+ @Deprecated
public boolean getApplyJava8u40Fix() {
- return applyJava8u40Fix;
+ return false;
}
+ /**
+ * This method is now a NO-OP as the work-around this attribute enabled is no longer required.
+ *
+ * @param applyJava8u40Fix Ignored
+ *
+ * @deprecated This method will be removed from Tomcat 12 onwards.
+ */
+ @Deprecated
public void setApplyJava8u40Fix(boolean applyJava8u40Fix) {
- this.applyJava8u40Fix = applyJava8u40Fix;
+ // NO-OP
}
@@ -144,8 +158,6 @@
* Reauthenticating with the cached user name and password may not be sufficient for SPNEGO since it will not
* make the delegated credentials available that a web application may depend on. Therefore, the
* reauthentication behaviour for SPNEGO is to perform a normal SPNEGO authentication.
- *
- * TODO: Make the reauthentication behaviour configurable per authenticator.
*/
if (checkForCachedAuthentication(request, response, false)) {
return true;
@@ -181,10 +193,6 @@
authorizationBC.getLength());
byte[] decoded = Base64.getDecoder().decode(encoded);
- if (getApplyJava8u40Fix()) {
- SpnegoTokenFixer.fix(decoded);
- }
-
if (decoded.length == 0) {
if (log.isDebugEnabled()) {
log.debug(sm.getString("spnegoAuthenticator.authHeaderNoToken"));
@@ -306,168 +314,4 @@
MessageBytes authorizationHeader = request.getCoyoteRequest().getMimeHeaders().getValue("authorization");
return authorizationHeader != null && authorizationHeader.startsWithIgnoreCase("negotiate ", 0);
}
-
-
- /**
- * This class implements a hack around an incompatibility between the SPNEGO implementation in Windows and the
- * SPNEGO implementation in Java 8 update 40 onwards. It was introduced by the change to fix this bug:
- * JDK-8048194 (note: the change applied is not the
- * one suggested in the bug report)
- *
- * It is not clear to me if Windows, Java or Tomcat is at fault here. I think it is Java, but I could be wrong. - *
- * This hack works by re-ordering the list of mechTypes in the NegTokenInit token.
- */
- public static class SpnegoTokenFixer {
-
- public static void fix(byte[] token) {
- SpnegoTokenFixer fixer = new SpnegoTokenFixer(token);
- fixer.fix();
- }
-
-
- private final byte[] token;
- private int pos = 0;
-
-
- private SpnegoTokenFixer(byte[] token) {
- this.token = token;
- }
-
-
- // Fixes the token in-place
- private void fix() {
- /*
- * Useful references: http://tools.ietf.org/html/rfc4121#page-5 http://tools.ietf.org/html/rfc2743#page-81
- * https://msdn.microsoft.com/en-us/library/ms995330.aspx
- */
-
- // Scan until we find the mech types list. If we find anything
- // unexpected, abort the fix process.
- if (!tag(0x60)) {
- return;
- }
- if (!length()) {
- return;
- }
- if (!oid("1.3.6.1.5.5.2")) {
- return;
- }
- if (!tag(0xa0)) {
- return;
- }
- if (!length()) {
- return;
- }
- if (!tag(0x30)) {
- return;
- }
- if (!length()) {
- return;
- }
- if (!tag(0xa0)) {
- return;
- }
- lengthAsInt();
- if (!tag(0x30)) {
- return;
- }
- // Now at the start of the mechType list.
- // Read the mechTypes into an ordered set
- int mechTypesLen = lengthAsInt();
- int mechTypesStart = pos;
- LinkedHashMapparameterName present.
+ */
+ public static String removeQueryParameters(String url, String parameterName) {
+ if (null != parameterName) {
+ // Check for query string
+ int q = url.indexOf('?');
+ if (q > -1) {
+
+ // Look for parameter end
+ int start = q + 1;
+ int pos = url.indexOf('&', start);
+
+ int iterations = 0;
+
+ while (-1 < pos) {
+ // Process all parameters
+ if (++iterations > 100000) {
+ // Just in case things get out of control
+ throw new IllegalStateException("Way too many loop iterations");
+ }
+
+ int eq = url.indexOf('=', start);
+ int paramNameEnd;
+ if (-1 == eq || eq > pos) {
+ paramNameEnd = pos;
+ // Found no equal sign at all or past next & ; Parameter is all name.
+ } else {
+ // Found this param's equal sign
+ paramNameEnd = eq;
+ }
+ if (parameterName.equals(url.substring(start, paramNameEnd))) {
+ // Remove the parameter
+ url = url.substring(0, start) + url.substring(pos + 1); // +1 to consume the &
+ } else {
+ start = pos + 1; // Go to next parameter
+ }
+ pos = url.indexOf('&', start);
+ }
+
+ // Check final parameter
+ String paramName;
+ pos = url.indexOf('=', start);
+
+ if (-1 < pos) {
+ paramName = url.substring(start, pos);
+ } else {
+ paramName = url.substring(start);
+ // No value
+ }
+ if (paramName.equals(parameterName)) {
+ // Remove this parameter
+
+ // Remove any trailing ? or & as well
+ char c = url.charAt(start - 1);
+ if ('?' == c || '&' == c) {
+ start--;
+ }
+
+ url = url.substring(0, start);
+ } else {
+ // Remove trailing ? if it's there. Is this worth it?
+ int length = url.length();
+ if (length == q + 1) {
+ url = url.substring(0, length - 1);
+ }
+ }
+ }
+ }
+
+ return url;
+ }
+
/*
* Return the specified URL with the nonce added to the query string.
*
diff -Nru tomcat11-11.0.15/java/org/apache/catalina/ha/context/ReplicatedContext.java tomcat11-11.0.22/java/org/apache/catalina/ha/context/ReplicatedContext.java
--- tomcat11-11.0.15/java/org/apache/catalina/ha/context/ReplicatedContext.java 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/java/org/apache/catalina/ha/context/ReplicatedContext.java 2026-05-01 18:56:05.000000000 +0000
@@ -118,9 +118,13 @@
@Override
public ServletContext getServletContext() {
if (context == null) {
- context = new ReplApplContext(this);
- if (getAltDDName() != null) {
- context.setAttribute(Globals.ALT_DD_ATTR, getAltDDName());
+ synchronized (this) {
+ if (context == null) {
+ context = new ReplApplContext(this);
+ if (getAltDDName() != null) {
+ context.setAttribute(Globals.ALT_DD_ATTR, getAltDDName());
+ }
+ }
}
}
diff -Nru tomcat11-11.0.15/java/org/apache/catalina/ha/tcp/ReplicationValve.java tomcat11-11.0.22/java/org/apache/catalina/ha/tcp/ReplicationValve.java
--- tomcat11-11.0.15/java/org/apache/catalina/ha/tcp/ReplicationValve.java 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/java/org/apache/catalina/ha/tcp/ReplicationValve.java 2026-05-01 18:56:05.000000000 +0000
@@ -362,16 +362,19 @@
start = System.currentTimeMillis();
}
try {
- // send invalid sessions
sendInvalidSessions(clusterManager);
- // send replication
- sendSessionReplicationMessage(request, clusterManager);
- if (isCrossContext) {
- sendCrossContextSession();
+ try {
+ sendSessionReplicationMessage(request, clusterManager);
+ } catch (Exception e) {
+ log.error(sm.getString("ReplicationValve.send.failure"), e);
+ }
+ try {
+ if (isCrossContext) {
+ sendCrossContextSession();
+ }
+ } catch (Exception e) {
+ log.error(sm.getString("ReplicationValve.send.failure"), e);
}
- } catch (Exception e) {
- // FIXME we have a lot of sends, but the trouble with one node stops the correct replication to other nodes!
- log.error(sm.getString("ReplicationValve.send.failure"), e);
} finally {
if (doStatistics()) {
updateStats(totalstart, start, isAsync);
diff -Nru tomcat11-11.0.15/java/org/apache/catalina/ha/tcp/SendMessageData.java tomcat11-11.0.22/java/org/apache/catalina/ha/tcp/SendMessageData.java
--- tomcat11-11.0.15/java/org/apache/catalina/ha/tcp/SendMessageData.java 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/java/org/apache/catalina/ha/tcp/SendMessageData.java 2026-05-01 18:56:05.000000000 +0000
@@ -19,6 +19,8 @@
import org.apache.catalina.tribes.Member;
/**
+ * Data about a message send operation.
+ *
* @param message The message that was sent
* @param destination The destination of the message
* @param exception The exception, if any, when attempting to send the message
diff -Nru tomcat11-11.0.15/java/org/apache/catalina/manager/Constants.java tomcat11-11.0.22/java/org/apache/catalina/manager/Constants.java
--- tomcat11-11.0.15/java/org/apache/catalina/manager/Constants.java 2025-12-02 16:54:08.000000000 +0000
+++ tomcat11-11.0.22/java/org/apache/catalina/manager/Constants.java 2026-05-01 18:56:05.000000000 +0000
@@ -131,7 +131,7 @@
HTML_TAIL_SECTION =
"
\n" +
"