From 0dd9fa7ebfa100600553863cd548e2f1312407c15aa9fee165561b6181eb92f1 Mon Sep 17 00:00:00 2001 From: Fridrich Strba Date: Tue, 10 Jun 2025 13:48:55 +0000 Subject: [PATCH 1/7] - Hardening permissions (bsc#1242722) OBS-URL: https://build.opensuse.org/package/show/Java:packages/tomcat11?expand=0&rev=11 --- .gitattributes | 23 + .gitignore | 1 + _constraints | 7 + allowLinking.xslt | 19 + apache-tomcat-11.0.6-src.tar.gz | 3 + apache-tomcat-11.0.6-src.tar.gz.asc | 16 + tomcat-bootstrap-MANIFEST.MF.patch | 11 + tomcat-digest.script | 48 ++ tomcat-fix_catalina.patch | 11 + tomcat-functions | 42 ++ tomcat-javadoc.patch | 13 + tomcat-jdt.patch | 110 ++++ tomcat-jsvc.service | 21 + tomcat-logrotate_everything.patch | 12 + tomcat-named.service | 26 + tomcat-osgi-build.patch | 29 + tomcat-preamble | 61 ++ tomcat-rpmlintrc | 2 + tomcat-secretRequired-default.patch | 13 + tomcat-server | 25 + tomcat-tomcat-users-webapp.patch | 19 + tomcat-tool-wrapper.script | 48 ++ tomcat.conf | 52 ++ tomcat.keyring | 512 +++++++++++++++++ tomcat.logrotate | 10 + tomcat.service | 25 + tomcat.sysconfig | 0 tomcat.wrapper | 24 + tomcat11.changes | 21 + tomcat11.spec | 847 ++++++++++++++++++++++++++++ valve.xslt | 16 + 31 files changed, 2067 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 _constraints create mode 100644 allowLinking.xslt create mode 100644 apache-tomcat-11.0.6-src.tar.gz create mode 100644 apache-tomcat-11.0.6-src.tar.gz.asc create mode 100644 tomcat-bootstrap-MANIFEST.MF.patch create mode 100644 tomcat-digest.script create mode 100644 tomcat-fix_catalina.patch create mode 100644 tomcat-functions create mode 100644 tomcat-javadoc.patch create mode 100644 tomcat-jdt.patch create mode 100644 tomcat-jsvc.service create mode 100644 tomcat-logrotate_everything.patch create mode 100644 tomcat-named.service create mode 100644 tomcat-osgi-build.patch create mode 100644 tomcat-preamble create mode 100644 tomcat-rpmlintrc create mode 100644 tomcat-secretRequired-default.patch create mode 100644 tomcat-server create mode 100644 tomcat-tomcat-users-webapp.patch create mode 100644 tomcat-tool-wrapper.script create mode 100644 tomcat.conf create mode 100644 tomcat.keyring create mode 100644 tomcat.logrotate create mode 100644 tomcat.service create mode 100644 tomcat.sysconfig create mode 100644 tomcat.wrapper create mode 100644 tomcat11.changes create mode 100644 tomcat11.spec create mode 100644 valve.xslt diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/_constraints b/_constraints new file mode 100644 index 0000000..290ed62 --- /dev/null +++ b/_constraints @@ -0,0 +1,7 @@ + + + + 2048 + + + diff --git a/allowLinking.xslt b/allowLinking.xslt new file mode 100644 index 0000000..817e15c --- /dev/null +++ b/allowLinking.xslt @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/apache-tomcat-11.0.6-src.tar.gz b/apache-tomcat-11.0.6-src.tar.gz new file mode 100644 index 0000000..ec59d00 --- /dev/null +++ b/apache-tomcat-11.0.6-src.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d331ffe634a0f8976a25cbf70d088a50118e8611157c8a06eaeeabe70402eac1 +size 6923455 diff --git a/apache-tomcat-11.0.6-src.tar.gz.asc b/apache-tomcat-11.0.6-src.tar.gz.asc new file mode 100644 index 0000000..5400109 --- /dev/null +++ b/apache-tomcat-11.0.6-src.tar.gz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEqcXfTSLpmZjZh1pREMAcWi9gWecFAmfr/o8ACgkQEMAcWi9g +WecdvxAA9qQwEx53mR0rlzpXAVc5ORdDmyC/rGY59oxyCsq22sWpLPRi5NBpohv7 +xRqnnFJVi+YC8c1J+M4g+d1hJWRwC0S6auydofL2EbkKx3t6WbD+ku0syXfz+5ia +D4rOo55HZKEFXiMJexBLadC8VCTmKjT3Jng66/XLrAtlPHhcdyzaI+umbqTi2yNu +VoWVB6IDAxW6YoubouhHt35EXQTTYL8EqE6iLKsNgxHOula/Yj/L2lAgiiIU/aPV +gtJfP7WiR34Gdug/ppAdE0aatxkp+lANd5s1TPMGhmDvkI+n8tMpAeA91Q2cBoOT +KpVJvKnSID5xxiJVHRSNPgGUxR5s0USAEkLkJpKIgjwnEaIsJZwPJXepdSRaNURt +MP1/mYO9/5Fi93oUx+1RrJCmrTUlF4nA/zfSFOt49fovhU20l42zEHjFsNKVmqet +8eaBOwfjpiurr0vPklziJ3kdyV2AiiX+n9prNzAh5tZ3I9bripSWPYFG1gBw0Ln6 +As3X5EjaQto1YkLOQ9oKNzzNVKoQ5wh/dfGxr4VY0FFuXBIWRiy5IFXEZH55ssGZ +7m5jqIDUmyQ+M+J+WvdVSHJfzGO9O8Ms9DIKrEoMV9gXcz9eMtFvbECFeCDFJQit +CD3T8rL5AlbDoU+GV111a94RMiUnvZUe2EtQockfMOHP1o/LhLk= +=+ON7 +-----END PGP SIGNATURE----- diff --git a/tomcat-bootstrap-MANIFEST.MF.patch b/tomcat-bootstrap-MANIFEST.MF.patch new file mode 100644 index 0000000..e0ee35d --- /dev/null +++ b/tomcat-bootstrap-MANIFEST.MF.patch @@ -0,0 +1,11 @@ +Index: apache-tomcat-11.0.5-src/res/META-INF/bootstrap.jar.manifest +=================================================================== +--- apache-tomcat-11.0.5-src.orig/res/META-INF/bootstrap.jar.manifest ++++ apache-tomcat-11.0.5-src/res/META-INF/bootstrap.jar.manifest +@@ -1,6 +1,5 @@ + Manifest-Version: 1.0 + Main-Class: org.apache.catalina.startup.Bootstrap +-Class-Path: commons-daemon.jar + Specification-Title: Apache Tomcat Bootstrap + Specification-Version: @VERSION_MAJOR_MINOR@ + Specification-Vendor: Apache Software Foundation diff --git a/tomcat-digest.script b/tomcat-digest.script new file mode 100644 index 0000000..2f3cacf --- /dev/null +++ b/tomcat-digest.script @@ -0,0 +1,48 @@ +#!/bin/sh +# +# tomcat-digest script +# JPackage Project + +# Set default JAVA_HOME +export JAVA_HOME="${JAVA_HOME:-%{?java_home}}" + +# Source functions library +if [ -f /usr/share/java-utils/java-functions ] ; then + . /usr/share/java-utils/java-functions +else + echo "Can't find functions library, aborting" + exit 1 +fi + +# Get the tomcat config (use this for environment specific settings) +if [ -z "${TOMCAT_CFG}" ]; then + TOMCAT_CFG="/etc/tomcat/tomcat.conf" +fi + +if [ -r "$TOMCAT_CFG" ]; then + . $TOMCAT_CFG +fi + +set_javacmd + +# CLASSPATH munging +if [ -n "$JSSE_HOME" ]; then + CLASSPATH="${CLASSPATH}:$(build-classpath jcert jnet jsse 2>/dev/null)" +fi +CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/bootstrap.jar" +CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/tomcat-juli.jar" +export CLASSPATH + +# Configuration +MAIN_CLASS="org.apache.catalina.startup.Tool" +BASE_FLAGS="-Dcatalina.home=\"$CATALINA_HOME\"" +BASE_OPTIONS="" +BASE_JARS="commons-daemon tomcat/catalina tomcat/servlet" + +# Set parameters +set_classpath $BASE_JARS +set_flags $BASE_FLAGS +set_options $BASE_OPTIONS + +# Let's start +run -server org.apache.catalina.realm.RealmBase "$@" diff --git a/tomcat-fix_catalina.patch b/tomcat-fix_catalina.patch new file mode 100644 index 0000000..69ad0dc --- /dev/null +++ b/tomcat-fix_catalina.patch @@ -0,0 +1,11 @@ +Index: apache-tomcat-11.0.5-src/conf/logging.properties +=================================================================== +--- apache-tomcat-11.0.5-src.orig/conf/logging.properties ++++ apache-tomcat-11.0.5-src/conf/logging.properties +@@ -74,3 +74,6 @@ org.apache.catalina.core.ContainerBase.[ + + # To see debug messages for WebSocket handling, uncomment the following line: + #org.apache.tomcat.websocket.level = FINE ++ ++1catalina.org.apache.juli.AsyncFileHandler.suffix = out ++1catalina.org.apache.juli.AsyncFileHandler.rotatable = false diff --git a/tomcat-functions b/tomcat-functions new file mode 100644 index 0000000..721021c --- /dev/null +++ b/tomcat-functions @@ -0,0 +1,42 @@ +#!/bin/bash + +if [ -r /usr/share/java-utils/java-functions ]; then + . /usr/share/java-utils/java-functions +else + echo "Can't read Java functions library, aborting" + exit 1 +fi + +_save_function() { + local ORIG_FUNC=$(declare -f $1) + local NEWNAME_FUNC="$2${ORIG_FUNC#$1}" + eval "$NEWNAME_FUNC" +} + +run_jsvc(){ + if [ -x /usr/bin/jsvc ]; then + TOMCAT_USER="tomcat" + JSVC="/usr/bin/jsvc" + + JSVC_OPTS="-nodetach -pidfile /var/run/jsvc-tomcat${NAME}.pid -user ${TOMCAT_USER} -outfile ${CATALINA_BASE}/logs/catalina.out -errfile ${CATALINA_BASE}/logs/catalina.out" + if [ "$1" = "stop" ]; then + JSVC_OPTS="${JSVC_OPTS} -stop" + fi + + exec "${JSVC}" ${JSVC_OPTS} ${FLAGS} -classpath "${CLASSPATH}" ${OPTIONS} "${MAIN_CLASS}" "${@}" + else + echo "Can't find /usr/bin/jsvc executable" + fi + +} + +_save_function run run_java + +run() { + if [ "${USE_JSVC}" = "true" ] ; then + run_jsvc $@ + else + run_java $@ + fi +} + diff --git a/tomcat-javadoc.patch b/tomcat-javadoc.patch new file mode 100644 index 0000000..60c8d07 --- /dev/null +++ b/tomcat-javadoc.patch @@ -0,0 +1,13 @@ +Index: apache-tomcat-11.0.5-src/build.xml +=================================================================== +--- apache-tomcat-11.0.5-src.orig/build.xml ++++ apache-tomcat-11.0.5-src/build.xml +@@ -2416,8 +2416,6 @@ + + + +- +- + + + diff --git a/tomcat-jdt.patch b/tomcat-jdt.patch new file mode 100644 index 0000000..5b4a71a --- /dev/null +++ b/tomcat-jdt.patch @@ -0,0 +1,110 @@ +Index: apache-tomcat-11.0.6-src/java/org/apache/jasper/compiler/JDTCompiler.java +=================================================================== +--- apache-tomcat-11.0.6-src.orig/java/org/apache/jasper/compiler/JDTCompiler.java ++++ apache-tomcat-11.0.6-src/java/org/apache/jasper/compiler/JDTCompiler.java +@@ -310,21 +310,21 @@ public class JDTCompiler extends org.apa + } else if (opt.equals("15")) { + settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_15); + } else if (opt.equals("16")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_16); ++ settings.put(CompilerOptions.OPTION_Source, "16"); + } else if (opt.equals("17")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_Source, "17"); + } else if (opt.equals("18")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_18); ++ settings.put(CompilerOptions.OPTION_Source, "18"); + } else if (opt.equals("19")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_19); ++ settings.put(CompilerOptions.OPTION_Source, "19"); + } else if (opt.equals("20")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_20); ++ settings.put(CompilerOptions.OPTION_Source, "20"); + } else if (opt.equals("21")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_21); ++ settings.put(CompilerOptions.OPTION_Source, "21"); + } else if (opt.equals("22")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_22); ++ settings.put(CompilerOptions.OPTION_Source, "22"); + } else if (opt.equals("23")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_23); ++ settings.put(CompilerOptions.OPTION_Source, "23"); + } else if (opt.equals("24")) { + // Constant not available in latest ECJ version shipped with + // Tomcat. May be supported in a snapshot build. +@@ -337,11 +337,11 @@ public class JDTCompiler extends org.apa + settings.put(CompilerOptions.OPTION_Source, "25"); + } else { + log.warn(Localizer.getMessage("jsp.warning.unknown.sourceVM", opt)); +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_Source, "17"); + } + } else { + // Default to 17 +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_Source, "17"); + } + + // Target JVM +@@ -391,29 +391,29 @@ public class JDTCompiler extends org.apa + settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_15); + settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_15); + } else if (opt.equals("16")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_16); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_16); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "16"); ++ settings.put(CompilerOptions.OPTION_Compliance, "16"); + } else if (opt.equals("17")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_17); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "17"); ++ settings.put(CompilerOptions.OPTION_Compliance, "17"); + } else if (opt.equals("18")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_18); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_18); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "18"); ++ settings.put(CompilerOptions.OPTION_Compliance, "18"); + } else if (opt.equals("19")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_19); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_19); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "19"); ++ settings.put(CompilerOptions.OPTION_Compliance, "19"); + } else if (opt.equals("20")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_20); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_20); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "20"); ++ settings.put(CompilerOptions.OPTION_Compliance, "20"); + } else if (opt.equals("21")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_21); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_21); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "21"); ++ settings.put(CompilerOptions.OPTION_Compliance, "21"); + } else if (opt.equals("22")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_22); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_22); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "22"); ++ settings.put(CompilerOptions.OPTION_Compliance, "22"); + } else if (opt.equals("23")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_23); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_23); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "23"); ++ settings.put(CompilerOptions.OPTION_Compliance, "23"); + } else if (opt.equals("24")) { + // Constant not available in latest ECJ version shipped with + // Tomcat. May be supported in a snapshot build. +@@ -428,12 +428,12 @@ public class JDTCompiler extends org.apa + settings.put(CompilerOptions.OPTION_Compliance, "25"); + } else { + log.warn(Localizer.getMessage("jsp.warning.unknown.targetVM", opt)); +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "17"); + } + } else { + // Default to 17 +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_17); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "17"); ++ settings.put(CompilerOptions.OPTION_Compliance, "17"); + } + + final IProblemFactory problemFactory = new DefaultProblemFactory(Locale.getDefault()); diff --git a/tomcat-jsvc.service b/tomcat-jsvc.service new file mode 100644 index 0000000..34f8a26 --- /dev/null +++ b/tomcat-jsvc.service @@ -0,0 +1,21 @@ +# Systemd unit file for tomcat +# +# To create clones of this service: +# 1) By default SERVICE_NAME=tomcat. When cloned, the value must be defined +# before tomcat-sysd is called. +# 2) Create /etc/sysconfig/${SERVICE_NAME} from /etc/sysconfig/tomcat +# to override tomcat defaults + +[Unit] +Description=Apache Tomcat Web Application Container JSVC wrapper +After=syslog.target network.target + +[Service] +Type=simple +EnvironmentFile=/etc/tomcat/tomcat.conf +Environment="NAME=" "USE_JSVC=true" +ExecStart=@LIBEXECDIR@/tomcat/server start +ExecStop=@LIBEXECDIR@/tomcat/server stop + +[Install] +WantedBy=multi-user.target diff --git a/tomcat-logrotate_everything.patch b/tomcat-logrotate_everything.patch new file mode 100644 index 0000000..1248a85 --- /dev/null +++ b/tomcat-logrotate_everything.patch @@ -0,0 +1,12 @@ +Index: apache-tomcat-11.0.5-src/conf/logging.properties +=================================================================== +--- apache-tomcat-11.0.5-src.orig/conf/logging.properties ++++ apache-tomcat-11.0.5-src/conf/logging.properties +@@ -77,3 +77,7 @@ org.apache.catalina.core.ContainerBase.[ + + 1catalina.org.apache.juli.AsyncFileHandler.suffix = out + 1catalina.org.apache.juli.AsyncFileHandler.rotatable = false ++ ++2localhost.org.apache.juli.AsyncFileHandler.rotatable = false ++3manager.org.apache.juli.AsyncFileHandler.rotatable = false ++4host-manager.org.apache.juli.AsyncFileHandler.rotatable = false diff --git a/tomcat-named.service b/tomcat-named.service new file mode 100644 index 0000000..2d742a7 --- /dev/null +++ b/tomcat-named.service @@ -0,0 +1,26 @@ +# Systemd unit file for tomcat instances. +# +# To create clones of this service: +# 0. systemctl enable tomcat@name.service +# 1. create catalina.base directory structure in +# /var/lib/tomcats/name +# 2. profit. + +[Unit] +Description=Apache Tomcat Web Application Container +After=syslog.target network.target + +[Service] +Type=simple +EnvironmentFile=/etc/tomcat/tomcat.conf +Environment="NAME=%I" +EnvironmentFile=-/etc/sysconfig/tomcat@%I +ExecStart=@LIBEXECDIR@/tomcat/server start +ExecStop=@LIBEXECDIR@/tomcat/server stop +SuccessExitStatus=143 +User=tomcat +Group=tomcat + +[Install] +WantedBy=multi-user.target + diff --git a/tomcat-osgi-build.patch b/tomcat-osgi-build.patch new file mode 100644 index 0000000..737fe51 --- /dev/null +++ b/tomcat-osgi-build.patch @@ -0,0 +1,29 @@ +Index: apache-tomcat-11.0.5-src/build.xml +=================================================================== +--- apache-tomcat-11.0.5-src.orig/build.xml ++++ apache-tomcat-11.0.5-src/build.xml +@@ -231,9 +231,9 @@ + + + +- + + ++ + + + +@@ -3973,6 +3973,13 @@ Read the Building page on the Apache Tom + + + ++ ++ ++ ++ ++ ++ ++ + + + diff --git a/tomcat-preamble b/tomcat-preamble new file mode 100644 index 0000000..23c40dd --- /dev/null +++ b/tomcat-preamble @@ -0,0 +1,61 @@ +#!/bin/bash + +. @LIBEXECDIR@/tomcat/functions + +# Get the tomcat config (use this for environment specific settings) + +if [ -z "${TOMCAT_CFG_LOADED}" ]; then + if [ -z "${TOMCAT_CFG}" ]; then + TOMCAT_CFG="/etc/tomcat/tomcat.conf" + fi + . $TOMCAT_CFG +fi + +if [ -d "${TOMCAT_CONFD=/etc/tomcat/conf.d}" ]; then + for file in ${TOMCAT_CONFD}/*.conf ; do + if [ -f "$file" ] ; then + . "$file" + fi + done +fi + +if [ -z "$CATALINA_BASE" ]; then + if [ -n "$NAME" ]; then + if [ -z "$TOMCATS_BASE" ]; then + TOMCATS_BASE="/var/lib/tomcats/" + fi + CATALINA_BASE="${TOMCATS_BASE}${NAME}" + else + CATALINA_BASE="${CATALINA_HOME}" + fi +fi + +# Include the optional setenv.sh script. +# (See section 3.4 of https://tomcat.apache.org/tomcat-8.0-doc/RUNNING.txt) +if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then + . "$CATALINA_BASE/bin/setenv.sh" +elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then + . "$CATALINA_HOME/bin/setenv.sh" +fi + +VERBOSE=1 +set_javacmd +cd ${CATALINA_HOME} +# CLASSPATH munging +if [ ! -z "$CLASSPATH" ] ; then + CLASSPATH="$CLASSPATH": +fi + +if [ -n "$JSSE_HOME" ]; then + CLASSPATH="${CLASSPATH}$(build-classpath jcert jnet jsse 2>/dev/null):" +fi +CLASSPATH="${CLASSPATH}${CATALINA_HOME}/bin/bootstrap.jar" +CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/tomcat-juli.jar" +CLASSPATH="${CLASSPATH}:$(build-classpath commons-daemon 2>/dev/null)" + +if [ -z "$LOGGING_PROPERTIES" ] ; then + LOGGING_PROPERTIES="${CATALINA_BASE}/conf/logging.properties" + if [ ! -f "${LOGGING_PROPERTIES}" ] ; then + LOGGING_PROPERTIES="${CATALINA_HOME}/conf/logging.properties" + fi +fi diff --git a/tomcat-rpmlintrc b/tomcat-rpmlintrc new file mode 100644 index 0000000..20bc763 --- /dev/null +++ b/tomcat-rpmlintrc @@ -0,0 +1,2 @@ +#fix of bnc#520532 +addFilter(".*non-etc-or-var-file-marked-as-conffile /usr/share/tomcat/tomcat-webapps/ROOT.*") diff --git a/tomcat-secretRequired-default.patch b/tomcat-secretRequired-default.patch new file mode 100644 index 0000000..3d5932d --- /dev/null +++ b/tomcat-secretRequired-default.patch @@ -0,0 +1,13 @@ +Index: apache-tomcat-11.0.5-src/java/org/apache/coyote/ajp/AbstractAjpProtocol.java +=================================================================== +--- apache-tomcat-11.0.5-src.orig/java/org/apache/coyote/ajp/AbstractAjpProtocol.java ++++ apache-tomcat-11.0.5-src/java/org/apache/coyote/ajp/AbstractAjpProtocol.java +@@ -155,7 +155,7 @@ public abstract class AbstractAjpProtoco + } + + +- private boolean secretRequired = true; ++ private boolean secretRequired = false; + + public void setSecretRequired(boolean secretRequired) { + this.secretRequired = secretRequired; diff --git a/tomcat-server b/tomcat-server new file mode 100644 index 0000000..18eb831 --- /dev/null +++ b/tomcat-server @@ -0,0 +1,25 @@ +#!/bin/bash + +. @LIBEXECDIR@/tomcat/preamble + +MAIN_CLASS=org.apache.catalina.startup.Bootstrap + +FLAGS="$JAVA_OPTS" +OPTIONS="-Dcatalina.base=$CATALINA_BASE \ +-Dcatalina.home=$CATALINA_HOME \ +-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS \ +-Djava.io.tmpdir=$CATALINA_TMPDIR \ +-Djava.util.logging.config.file=${LOGGING_PROPERTIES} \ +-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" + +if [ "$1" = "start" ] ; then + FLAGS="${FLAGS} $CATALINA_OPTS" + if [ "${SECURITY_MANAGER}" = "true" ] ; then + OPTIONS="${OPTIONS} \ + -Djava.security.manager \ + -Djava.security.policy==${CATALINA_BASE}/conf/catalina.policy" + fi + run start +elif [ "$1" = "stop" ] ; then + run stop +fi diff --git a/tomcat-tomcat-users-webapp.patch b/tomcat-tomcat-users-webapp.patch new file mode 100644 index 0000000..0257617 --- /dev/null +++ b/tomcat-tomcat-users-webapp.patch @@ -0,0 +1,19 @@ +Index: apache-tomcat-11.0.5-src/conf/tomcat-users.xml +=================================================================== +--- apache-tomcat-11.0.5-src.orig/conf/tomcat-users.xml ++++ apache-tomcat-11.0.5-src/conf/tomcat-users.xml +@@ -53,4 +53,14 @@ + + + --> ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + diff --git a/tomcat-tool-wrapper.script b/tomcat-tool-wrapper.script new file mode 100644 index 0000000..a342e17 --- /dev/null +++ b/tomcat-tool-wrapper.script @@ -0,0 +1,48 @@ +#!/bin/sh +# +# tomcat-digest script +# JPackage Project + +# Set default JAVA_HOME +export JAVA_HOME="${JAVA_HOME:-%{?java_home}}" + +# Source functions library +if [ -f /usr/share/java-utils/java-functions ] ; then + . /usr/share/java-utils/java-functions +else + echo "Can't find functions library, aborting" + exit 1 +fi + +# Get the tomcat config (use this for environment specific settings) +if [ -z "${TOMCAT_CFG}" ]; then + TOMCAT_CFG="/etc/tomcat/tomcat.conf" +fi + +if [ -r "$TOMCAT_CFG" ]; then + . $TOMCAT_CFG +fi + +set_javacmd + +# CLASSPATH munging +if [ -n "$JSSE_HOME" ]; then + CLASSPATH="${CLASSPATH}:$(build-classpath jcert jnet jsse 2>/dev/null)" +fi +CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/bootstrap.jar" +CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/tomcat-juli.jar" +export CLASSPATH + +# Configuration +MAIN_CLASS="org.apache.catalina.startup.Tool" +BASE_OPTIONS="" +BASE_FLAGS="-Dcatalina.home=\"$CATALINA_HOME\"" +BASE_JARS="commons-daemon tomcat/catalina tomcat/servlet" + +# Set parameters +set_classpath $BASE_JARS +set_flags $BASE_FLAGS +set_options $BASE_OPTIONS + +# Let's start +run "$@" diff --git a/tomcat.conf b/tomcat.conf new file mode 100644 index 0000000..d014c6b --- /dev/null +++ b/tomcat.conf @@ -0,0 +1,52 @@ +# System-wide configuration file for tomcat services +# This will be loaded by systemd as an environment file, +# so please keep the syntax. For shell expansion support +# place your custom files as /etc/tomcat/conf.d/*.conf +# +# There are 2 "classes" of startup behavior in this package. +# The old one, the default service named tomcat.service. +# The new named instances are called tomcat@instance.service. +# +# Use this file to change default values for all services. +# Change the service specific ones to affect only one service. +# For tomcat.service it's /etc/sysconfig/tomcat, for +# tomcat@instance it's /etc/sysconfig/tomcat@instance. + +# This variable is used to figure out if config is loaded or not. +TOMCAT_CFG_LOADED="1" + +# In new-style instances, if CATALINA_BASE isn't specified, it will +# be constructed by joining TOMCATS_BASE and NAME. +TOMCATS_BASE="/var/lib/tomcats/" + +# Where your java installation lives +#JAVA_HOME="/usr/libi64/jvm/jre" + +# Where your tomcat installation lives +CATALINA_HOME="@@@TCHOME@@@" + +# System-wide tmp +CATALINA_TMPDIR="/var/cache/tomcat/temp" + +# You can pass some parameters to java here if you wish to +#JAVA_OPTS="-Xminf0.1 -Xmaxf0.3" + +# Use JAVA_OPTS to set java.library.path for libtcnative.so +#JAVA_OPTS="-Djava.library.path=/usr/lib" + +# Set default javax.sql.DataSource factory to apache commons one. See rhbz#1214381 +JAVA_OPTS="-Djavax.sql.DataSource.Factory=org.apache.commons.dbcp.BasicDataSourceFactory" + +# You can change your tomcat locale here +#LANG="en_US" + +# Run tomcat under the Java Security Manager +SECURITY_MANAGER="false" + +# Time to wait in seconds, before killing process +# TODO(stingray): does nothing, fix. +# SHUTDOWN_WAIT="30" + +# If you wish to further customize your tomcat environment, +# put your own definitions here +# (i.e. LD_LIBRARY_PATH for some jdbc drivers) diff --git a/tomcat.keyring b/tomcat.keyring new file mode 100644 index 0000000..6ad5a5c --- /dev/null +++ b/tomcat.keyring @@ -0,0 +1,512 @@ +This file contains the PGP&GPG keys of various Apache developers. +Please don't use them for email unless you have to. Their main +purpose is code signing. + +Apache users: pgp < KEYS +Apache developers: + (pgpk -ll && pgpk -xa ) >> this file. + or + (gpg --fingerprint --list-sigs + && gpg --armor --export ) >> this file. + +Apache developers: please ensure that your key is also available via the +PGP keyservers (such as pgpkeys.mit.edu). + + +pub 4096R/2F6059E7 2009-09-18 + Key fingerprint = A9C5 DF4D 22E9 9998 D987 5A51 10C0 1C5A 2F60 59E7 +uid Mark E D Thomas +sub 4096R/5E763BEC 2009-09-18 + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: GPGTools - http://gpgtools.org + +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 +c3EtcnwlXI07qk8nmCl1XudlS5KHeJ5axWLEDNJCvEuJGy4moaFllwmTUtxDzRK/ +zG6QSJEPfH8VZiEl6HBpgzlBB5aToxc+Wy7UpGzwaNrA6KvwSaB+jSxrZYtHbwBq +2U3ttmamynBF1izPuOeJAn4EEAECAGgFAksM3mcgHFNhbmRlciBUZW1tZSA8c2Fu +ZGVyQHRlbW1lLm5ldD4iHFNhbmRlciBUZW1tZSA8c2N0ZW1tZUBhcGFjaGUub3Jn +Ph0cU2FuZGVyIFRlbW1lIDxzYW5kZXJAbWUuY29tPgAKCRCbuGOw9Ru4igbUD/9+ ++F4uqkO+F6g1QNiyFM47K1NaFLga/lNp72mOOIlZMORXpBJGeL9DhbDvN5KIQqR4 +I5wCONGtzeU8P7M+uLapFZmofROABlACUeVhOPx8fOCeNz9xU4f33dKJJnAsIfis +SMMyJR9Xz/IbNWvM6Kb7hU+L86G2cZPD8uvZ7oHyY4wZWtjTHM0ne/usodJffxIj +oQFhn0vAC8hBNWStI8UUih+n+iqvvXA2cB9v3Ni3VjQOGLKSZ5Ke2jpKdYTl5zST +frHfjgjGvIdkWz0hbVMzL+urU9oIChBK6Nr3DxY/XvO8PmFGh7V+M9C/gahLCrNz +fD3vKGi7OYkp6dODPnREpOSZ7elGO5mGQnSosqzrLb7kw/vEobBbxsYDwxxl+ONZ +8yxUaBpvRIrwqNEwb1YxlMCLnpRs7TJxxitq+zF7F0MxB5sqdLHSNqxcfbxpTflz +Tn/H9h34aF7f4Qkn276XKIomhge4su7jxHNH/G9gTk6oicdalBFRMFwBRpaOivno +FmSGa1Yt7C1mBBQkRXjw52ZRx8MHKnccNNgpk5Xc7+VT9nqmoulq1JfzLsrtu4D1 +TaleWOVN4X4FYk3S2VWxLV5dhmuCy7hP0ZsXOTBjLXC5wMxJcp7I3IlIx39a6U7O +vhWbguPxyXR3AjBUsMRfO0pGZKXxDI3N+yHOWAtDcokCkwQQAQIAfQUCTNK0KDUc +SmltIEphZ2llbHNraSAoUmVsZWFzZSBTaWduaW5nIEtleSkgPGppbUBhcGFjaGUu +b3JnPiAcSmltIEphZ2llbHNraSA8amltQGphZ3VORVQuY29tPh8cSmltIEphZ2ll +bHNraSA8amltQGppbWphZy5jb20+AAoJEDTqduZ5FIWo/wEP/immECQXMIMQ9zj7 +4RU2R6YV7Slzc3YATfjwOgOwzQ3qF+UTSHui7eiYoHOwRK0OTKW6fe7bh9/XeWLB +sglUl+RNuvCNHAQNg9/p7x9mJL05e3OnGpVLVnq/yQezCWo1GWIPxodwmoyI2C3S +iUapfKN1q0Ml6nwZOyHsgNCFYDVhmtEnIcK7/PXLpeYTpTBuXETZZQY++XyZDiVI +le2W3uxrY0k8zVPvGSXGIh2iHtAuCrJoNKY+webEe5QVNoAYnNyu5de+50gpQOr+ +wYsvuf7S1MAPAX2L48U/JvpBfDikZR8qujvCDAAe0bnom/Ov/eWtnONi4hpsD4T3 +kcElxWOph3mEm1YUksGmoWE0FvE6o7r04XF+VrIA/YwcgC5wGgGmYFU4DR384hMZ +1EMAsd8cKdYBja/PA4BTcA6Vc0uJVFaB8o117m7r7sHKRsD7CHbbKcK8ZtRNDQa3 +SzTMqLhsRDRl5wp9Bwq6l++BKPpvEnpbs8SdW+TxrxpM/0aIhQ6ZS5RKJvhZK3Ap +3cgYBVW23CwPtVc+40/t8XqBRRlzbLdfWhEC+FU4f9RHS+DQRFSxl/xXeLtDBH75 +1WbhkRIRTktQxapEDuRFfd02Oeo356/r0TYUQHL4bwYEbTBm+HO1KJn64BCaUMOU +pW881K8SHQaHMr1iiQUpvMkTcofRiQKpBBABAgCTBQJM0uOxIBxTYW5kZXIgVGVt +bWUgPHNhbmRlckB0ZW1tZS5uZXQ+IhxTYW5kZXIgVGVtbWUgPHNjdGVtbWVAYXBh +Y2hlLm9yZz4dHFNhbmRlciBUZW1tZSA8c2FuZGVyQG1lLmNvbT4qHFNhbmRlciBU +ZW1tZSA8c2N0ZW1tZUBrZXlzaW50aGVjbG91ZC5jb20+AAoJEJu4Y7D1G7iKG0YP +/3AweZFnchITlhDdEkozl8M89VZGTBqfU6Rg7mNxL/HDnJRtBBGXmSQ5NLygX+kS +PKci3KRbjbeVEmEcWs/ZfzxN4gR+6y8ohUOaA0UDrZYctYkzG1d7HbkcM1lmvtde +Gelj1j/+eu4LRu5h9oczkqRnWV5xnqz7xsEH9Rrcgm39RpNzFf43Joo25iqdVGk4 +yBVjoHQsnD1qZwdZQ0EHxYozNkGfa6j7VXAzCYVstfRMPGKrYH/xRg2jNy750z/p +apgT3GXbpvcB9Z3gj2LRn+FKLxoH2WLf2DabdzyZz9KXfnG4ZeOd2BrFXexKT2MQ +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 +yZUcTCEB33B2jQ9z0XUEp+6B2F5iZQ== +=4AB7 +-----END PGP PUBLIC KEY BLOCK----- + +pub rsa4096 2019-05-05 [SC] + 48F8 E69F 6390 C9F2 5CFE DCD2 6824 8959 359E 722B +uid [ultimate] Remy Maucherat +sig 3 68248959359E722B 2019-05-05 Remy Maucherat +sub rsa4096 2019-05-05 [E] +sig 68248959359E722B 2019-05-05 Remy Maucherat + +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=l4Ry +-----END PGP PUBLIC KEY BLOCK----- + diff --git a/tomcat.logrotate b/tomcat.logrotate new file mode 100644 index 0000000..1cf5a19 --- /dev/null +++ b/tomcat.logrotate @@ -0,0 +1,10 @@ +@@@TCLOG@@@/catalina.out @@@TCLOG@@@/localhost_access_log.txt @@@TCLOG@@@/host-manager.log @@@TCLOG@@@/localhost.log @@@TCLOG@@@/manager.log{ + notifempty + copytruncate + weekly + rotate 52 + compress + missingok + su tomcat tomcat + create 0644 tomcat tomcat +} diff --git a/tomcat.service b/tomcat.service new file mode 100644 index 0000000..07731a2 --- /dev/null +++ b/tomcat.service @@ -0,0 +1,25 @@ +# Systemd unit file for default tomcat +# +# To create clones of this service: +# DO NOTHING, use tomcat@.service instead. + +[Unit] +Description=Apache Tomcat Web Application Container +After=syslog.target network.target + +[Service] +TasksMax=576 +LimitNOFILE=8192 +Type=simple +EnvironmentFile=/etc/tomcat/tomcat.conf +Environment="NAME=" +EnvironmentFile=-/etc/sysconfig/tomcat +ExecStart=@LIBEXECDIR@/tomcat/server start +ExecStop=@LIBEXECDIR@/tomcat/server stop +SuccessExitStatus=143 +User=tomcat +Group=tomcat + + +[Install] +WantedBy=multi-user.target diff --git a/tomcat.sysconfig b/tomcat.sysconfig new file mode 100644 index 0000000..473a0f4 diff --git a/tomcat.wrapper b/tomcat.wrapper new file mode 100644 index 0000000..420d649 --- /dev/null +++ b/tomcat.wrapper @@ -0,0 +1,24 @@ +#!/bin/bash + +if [ "$1" = "version" ]; then + . @LIBEXECDIR@/tomcat/preamble + exec ${JAVACMD} -classpath ${CATALINA_HOME}/lib/catalina.jar \ + org.apache.catalina.util.ServerInfo +fi + +SRV="tomcat" +if [ -n "$2" ]; then + SRV="tomcat@$2" +fi + +if [ "$1" = "start" ]; then + systemctl start ${SRV}.service +elif [ "$1" = "stop" ]; then + systemctl stop ${SRV}.service +elif [ "$1" = "version" ]; then + ${JAVACMD} -classpath ${CATALINA_HOME}/lib/catalina.jar \ + org.apache.catalina.util.ServerInfo +else + echo "Usage: $0 {start|stop|version} [server-id]" + exit 1 +fi diff --git a/tomcat11.changes b/tomcat11.changes new file mode 100644 index 0000000..e5e49c7 --- /dev/null +++ b/tomcat11.changes @@ -0,0 +1,21 @@ +------------------------------------------------------------------- +Tue Jun 10 13:09:57 UTC 2025 - Michele Bussolotto + +- Hardening permissions (bsc#1242722) + +------------------------------------------------------------------- +Fri May 9 07:06:53 UTC 2025 - Fridrich Strba + +- Do not require standalone versions of apis that tomcat itself + carries +- Do not version dependencies + +------------------------------------------------------------------- +Fri May 2 14:56:19 UTC 2025 - Fridrich Strba + +- Make conflicts and provides more generic + +------------------------------------------------------------------- +Mon Apr 28 10:21:33 UTC 2025 - Ricardo Mestre + +- Initial packaging of tomcat11 11.0.6 diff --git a/tomcat11.spec b/tomcat11.spec new file mode 100644 index 0000000..7660aaa --- /dev/null +++ b/tomcat11.spec @@ -0,0 +1,847 @@ +# +# spec file for package tomcat11 +# +# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2000-2009, JPackage Project +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +%define app_name tomcat +%define jspspec_major 4 +%define jspspec_minor 0 +%define jspspec %{jspspec_major}.%{jspspec_minor} +%define servletspec_major 6 +%define servletspec_minor 1 +%define servletspec %{servletspec_major}.%{servletspec_minor} +%define elspec_major 6 +%define elspec_minor 0 +%define elspec %{elspec_major}.%{elspec_minor} +%define major_version 11 +%define minor_version 0 +%define micro_version 6 +%define java_major 1 +%define java_minor 17 +%define java_version %{java_major}.%{java_minor} +%define packdname apache-tomcat-%{version}-src +# FHS 2.3 compliant tree structure - http://www.pathname.com/fhs/2.3/ +%global basedir /srv/%{app_name} +%define appdir %{basedir}/webapps +%define bindir %{_datadir}/%{app_name}/bin +%define confdir %{_sysconfdir}/%{app_name} +%define homedir %{_datadir}/%{app_name} +%define libdir %{_javadir}/%{app_name} +%define logdir %{_localstatedir}/log/%{app_name} +%define cachedir %{_localstatedir}/cache/%{app_name} +%define tempdir %{cachedir}/temp +%define workdir %{cachedir}/work +%define tomcatappdir %{_datadir}/%{app_name}/%{app_name}-webapps +%define javac_target 17 +#Compat macro for new _fillupdir macro introduced in Nov 2017 +%if ! %{defined _fillupdir} + %define _fillupdir %{_localstatedir}/adm/fillup-templates +%endif +Name: %{app_name}%{major_version} +Version: %{major_version}.%{minor_version}.%{micro_version} +Release: 0 +Summary: Apache Servlet/JSP/EL Engine, RI for Servlet %{servletspec}/JSP %{jspspec}/EL %{elspec} API +License: Apache-2.0 +Group: Productivity/Networking/Web/Servers +URL: https://tomcat.apache.org +Source0: https://archive.apache.org/dist/%{app_name}/%{app_name}-%{major_version}/v%{version}/src/%{packdname}.tar.gz +Source1: %{app_name}.conf +Source3: %{app_name}.sysconfig +Source4: %{app_name}.wrapper +Source5: %{app_name}.logrotate +Source6: %{app_name}-digest.script +Source7: %{app_name}-tool-wrapper.script +Source11: %{app_name}.service +Source20: %{app_name}-jsvc.service +Source21: %{app_name}-functions +Source30: %{app_name}-preamble +Source31: %{app_name}-server +Source32: %{app_name}-named.service +Source100: valve.xslt +Source101: allowLinking.xslt +Source1000: %{app_name}-rpmlintrc +Source1001: https://archive.apache.org/dist/%{app_name}/%{app_name}-%{major_version}/v%{version}/src/%{packdname}.tar.gz.asc +Source1002: %{app_name}.keyring +# #PATCH-FIX-UPSTREAM: from jpackage.org package +Patch0: %{app_name}-bootstrap-MANIFEST.MF.patch +# #PATCH-FIX-UPSTREAM: from jpackage.org package +Patch1: %{app_name}-%{app_name}-users-webapp.patch +# # PATCH-FIX-OPENSUSE: build javadoc with the same java source level as the class files +Patch2: %{app_name}-javadoc.patch +# # PATCH-FIX-OPENSUSE: include all necessary aqute-bnd jars +Patch3: %{app_name}-osgi-build.patch +# PATCH-FIX-OPENSUSE: build against our ecj that does not have CompilerOptions.VERSION_16 +Patch4: %{app_name}-jdt.patch +# # PATCH-FIX-OPENSUSE: set ajp connector secreteRequired to false by default to avoid tomcat not starting +Patch5: %{app_name}-secretRequired-default.patch +Patch6: %{app_name}-fix_catalina.patch +Patch7: %{app_name}-logrotate_everything.patch +BuildRequires: ant +BuildRequires: ant-antlr +BuildRequires: apache-commons-collections +BuildRequires: apache-commons-daemon +BuildRequires: apache-commons-dbcp +BuildRequires: apache-commons-pool2 +BuildRequires: aqute-bnd +BuildRequires: ecj +BuildRequires: fdupes +BuildRequires: findutils +BuildRequires: jakarta-taglibs-standard +BuildRequires: java-devel >= 17 +BuildRequires: javapackages-local +BuildRequires: junit +BuildRequires: osgi-annotation +BuildRequires: osgi-compendium +BuildRequires: osgi-core +BuildRequires: pkgconfig +BuildRequires: sed +BuildRequires: systemd-rpm-macros +BuildRequires: tomcat-jakartaee-migration >= 1.0.7 +BuildRequires: unzip +BuildRequires: wsdl4j +BuildRequires: zip +BuildRequires: pkgconfig(systemd) +Requires: %{name}-lib = %{version}-%{release} +Requires: apache-commons-daemon +Requires: apache-commons-dbcp +Requires: apache-commons-logging +Requires: apache-commons-pool2 +Requires: java >= %{java_version} +Requires: libtcnative-1-0 >= 1.2.38 +Requires: logrotate +Requires(post): %fillup_prereq +Requires(post): libxslt-tools +# for runuser +Requires(post): util-linux +Requires(pre): shadow +Conflicts: %{app_name}-implementation +Provides: %{app_name}-implementation = %{version} +Provides: group(tomcat) +Provides: user(tomcat) +BuildArch: noarch +%systemd_ordering + +%description +Tomcat is the servlet container that is used in the official Reference +Implementation for the Java Servlet and JavaServer Pages technologies. +The Java Servlet and JavaServer Pages specifications are developed by +Sun under the Java Community Process. + +ATTENTION: This tomcat is built with java %{java_version}. + +%package admin-webapps +Summary: The host manager and manager web applications for Apache Tomcat +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version}-%{release} +Requires(post): libxslt-tools +# for runuser +Requires(post): util-linux +Conflicts: %{app_name}-implementation-admin-webapps +Provides: %{app_name}-implementation-admin-webapps = %{version} + +%description admin-webapps +The host manager and manager web-based applications for Apache Tomcat. + +%package embed +Summary: Libraries for Embedding Apache Tomcat +Group: Productivity/Networking/Web/Servers +Conflicts: %{app_name}-implementation-embed +Provides: %{app_name}-implementation-embed = %{version} + +%description embed +Embeddeding support (various libraries) for Apache Tomcat. + +%package docs-webapp +Summary: The "docs" web application for Apache Tomcat +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version}-%{release} +Requires(post): libxslt-tools +# for runuser +Requires(post): util-linux +Conflicts: %{app_name}-implementation-docs-webapp +Provides: %{app_name}-implementation-docs-webapp = %{version} + +%description docs-webapp +The documentation of web application for Apache Tomcat. + +%package el-%{elspec_major}_%{elspec_minor}-api +Summary: Expression Language v%{elspec} API +Group: Development/Libraries/Java +Requires(post): update-alternatives +Requires(preun): update-alternatives +Conflicts: %{app_name}-implementation-el-api +Provides: %{app_name}-el-%{elspec}-api = %{version}-%{release} +Provides: %{app_name}-implementation-el-api = %{version} +Provides: el_%{elspec_major}_%{elspec_minor}_api = %{version}-%{release} +Provides: el_api = %{elspec} +Obsoletes: %{app_name}-el-2_2-api < %{version} +Obsoletes: el_api < %{elspec} + +%description el-%{elspec_major}_%{elspec_minor}-api +Expression Language API version %{elspec}. + +%package doc +Summary: Javadoc generated documentation for Apache Tomcat +Group: Documentation/HTML +Conflicts: %{app_name}-implementation-javadoc +Provides: %{app_name}-implementation-javadoc = %{version} +BuildArch: noarch + +%description doc +Javadoc generated documentation files for Apache Tomcat. + +%package jsp-%{jspspec_major}_%{jspspec_minor}-api +Summary: Apache Tomcat JSP API implementation classes +Group: Productivity/Networking/Web/Servers +Requires(post): update-alternatives +Requires(postun): update-alternatives +Conflicts: %{app_name}-implementation-jsp-api +Provides: %{app_name}-implementation-jsp-api = %{version} +Provides: %{app_name}-jsp-%{jspspec}-api +Provides: jsp = %{jspspec} +Provides: jsp%{jspspec_major}%{jspspec_minor} +Obsoletes: %{app_name}-jsp-2_2-api < %{version} +Obsoletes: jsp < %{jspspec} + +%description jsp-%{jspspec_major}_%{jspspec_minor}-api +Apache Tomcat JSP API implementation classes version %{jspspec} + +%package jsvc +Summary: Apache jsvc wrapper for Apache Tomcat as separate service +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version}-%{release} +Requires: apache-commons-daemon-jsvc +Conflicts: %{app_name}-implementation-jsvc +Provides: %{app_name}-implementation-jsvc = %{version} +%systemd_ordering + +%description jsvc +Systemd service and wrapper scripts to start tomcat with jsvc, +which allows tomcat to perform some privileged operations +(e.g. bind to a port < 1024) and then switch identity to a non-privileged user. + +%package lib +Summary: Libraries needed to run the Tomcat Web container +Group: Productivity/Networking/Web/Servers +Requires: %{app_name}-el-%{elspec}-api = %{version}-%{release} +Requires: %{app_name}-jsp-%{jspspec}-api = %{version}-%{release} +Requires: %{app_name}-servlet-%{servletspec}-api = %{version}-%{release} +Requires: mvn(org.apache.tomcat:tomcat-websocket-client-api) +Requires(post): ecj >= 4.4 +Requires(preun): coreutils +Conflicts: %{app_name}-implementation-lib +Provides: %{app_name}-implementation-lib = %{version} +Provides: jakarta-commons-dbcp-tomcat5 = 1.4 +Obsoletes: jakarta-commons-dbcp-tomcat5 < 1.4 + +%description lib +Libraries required to successfully run the Tomcat Web container + +%package servlet-%{servletspec_major}_%{servletspec_minor}-api +Summary: Apache Tomcat Servlet API implementation classes +Group: Productivity/Networking/Web/Servers +Requires(post): update-alternatives +Requires(postun): update-alternatives +Conflicts: %{app_name}-implementation-servlet-api +Provides: %{app_name}-implementation-servlet-api = %{version} +Provides: %{app_name}-servlet-%{servletspec}-api = %{version}-%{release} +Provides: servlet = %{servletspec} +Provides: servlet11 +Provides: servlet60 +Obsoletes: %{app_name}-servlet-3_0-api < %{version} +Obsoletes: %{app_name}-servlet-3_1-api < %{version} +Obsoletes: servlet < %{servletspec} + +%description servlet-%{servletspec_major}_%{servletspec_minor}-api +Apache Tomcat Servlet API implementation classes version %{servletspec} + +%package webapps +Summary: ROOT and examples web applications for Apache Tomcat +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version}-%{release} +Requires: jakarta-taglibs-standard >= 1.1 +Requires(post): libxslt-tools +# for runuser +Requires(post): util-linux +Conflicts: %{app_name}-implementation-webapps +Provides: %{app_name}-implementation-webapps = %{version} + +%description webapps +The ROOT and examples web applications for Apache Tomcat + +%prep +%autosetup -p1 -n %{packdname} + +# remove pre-built binaries and windows files +find . -type f \( -name "*.bat" -o -name "*.class" -o -name Thumbs.db -o -name "*.gz" -o \ + -name "*.jar" -o -name "*.war" -o -name "*.zip" \) -print -delete + +# remove date from docs +sed -i -e '/build-date/ d' webapps/docs/tomcat-docs.xsl + +%build + +ln -s $(build-classpath jakarta-taglibs-core) webapps/examples/WEB-INF/lib/jstl.jar +ln -s $(build-classpath jakarta-taglibs-standard) webapps/examples/WEB-INF/lib/standard.jar + +export CLASSPATH= +export OPT_JAR_LIST="xalan-j2-serializer" +export ANT_OPTS=-Xmx500M + +# we don't care about the tarballs and we're going to replace +# so just create a dummy file for later removal +touch HACK +mkdir -p HACKDIR +touch HACKDIR/build.xml + +ant -Dbase.path="." \ + -Djava.%{java_minor}.home="%{java_home}" \ + -Dbuild.compiler="modern" \ + -Dcommons-collections.jar="$(build-classpath commons-collections)" \ + -Dcommons-daemon.jar="$(build-classpath commons-daemon)" \ + -Dcommons-daemon.native.src.tgz="HACK" \ + -Djasper-jdt.jar="$(build-classpath ecj/ecj)" \ + -Djdt.jar="$(build-classpath ecj/ecj)" \ + -Dtomcat-native.tar.gz="HACK" \ + -Dtomcat-native.home="." \ + -Dcommons-daemon.native.win.mgr.exe="HACK" \ + -Dnsis.exe="HACK" \ + -Djaxrpc-lib.jar="$(build-classpath geronimo-jaxrpc-1.1-api)" \ + -Dwsdl4j-lib.jar="$(build-classpath wsdl4j)" \ + -Dsaaj-api.jar="$(build-classpath geronimo-saaj-1.1-api)" \ + -Dbnd.jar="$(build-classpath aqute-bnd/biz.aQute.bnd)" \ + -Dbnd.dir="%{_javadir}/aqute-bnd" \ + -Dosgiannotation.jar="$(build-classpath osgi-annotation/osgi.annotation)" \ + -Dosgi-annotations.jar="$(build-classpath aqute-bnd/biz.aQute.bnd.annotation)" \ + -Dosgicmpn.jar="$(build-classpath osgi-compendium/osgi.cmpn)" \ + -Dosgicore.jar="$( build-classpath osgi-core/osgi.core)" \ + -Dannotation.jar="$(build-classpath aqute-bnd/biz.aQute.bnd.annotation)" \ + -Dosgicmpn.jar="$(build-classpath osgi-compendium/osgi.cmpn)" \ + -Dslf4j-api.jar="$(build-classpath slf4j/slf4j-api)" \ + -Dcommons-pool.home="$(build-classpath commons-pool2)" \ + -Dcommons-dbcp.home="$(build-classpath commons-dbcp2)" \ + -Dmigration-lib.jar="$(build-classpath tomcat-jakartaee-migration)" \ + -Dno.build.dbcp=true \ + -Dversion="%{version}" \ + -Dversion.build="%{micro_version}" \ + deploy javadoc package embed-jars + +# remove some jars that we'll replace with symlinks later +rm output/build/bin/commons-daemon.jar \ + output/build/lib/ecj.jar + +pushd output/dist/src/webapps/docs/appdev/sample/src +mkdir -p ../web/WEB-INF/classes +javac -source %{java_minor} -target %{javac_target} -cp ../../../../../../../../output/build/lib/servlet-api.jar -d ../web/WEB-INF/classes mypackage/Hello.java +pushd ../web +jar cf ../../../../../../../../output/build/webapps/docs/appdev/sample/sample.war * +popd +popd + +%install +# build initial path structure +install -d -m 0755 %{buildroot}%{_bindir} +install -d -m 0755 %{buildroot}%{_sbindir} +install -d -m 0755 %{buildroot}%{_javadocdir}/%{app_name} +install -d -m 0755 %{buildroot}%{_initddir} +install -d -m 0755 %{buildroot}%{_sysconfdir}/logrotate.d +install -d -m 0755 %{buildroot}%{_sysconfdir}/sysconfig +install -d -m 0755 %{buildroot}%{appdir} +install -d -m 0755 %{buildroot}%{tomcatappdir} +install -d -m 0755 %{buildroot}%{bindir} +install -d -m 0775 %{buildroot}%{confdir} +install -d -m 0755 %{buildroot}%{cachedir}/Catalina/localhost +install -d -m 0755 %{buildroot}%{confdir}/conf.d +/bin/echo "Place your custom *.conf files here. Shell expansion is supported." > %{buildroot}%{confdir}/conf.d/README +install -d -m 0755 %{buildroot}%{libdir} +install -d -m 0775 %{buildroot}%{logdir} +/bin/touch %{buildroot}%{logdir}/catalina.out +install -d -m 0775 %{buildroot}%{_localstatedir}/lib/tomcats +/bin/echo "%{app_name}-%{major_version}.%{minor_version}.%{micro_version} RPM installed" >> %{buildroot}%{logdir}/catalina.out +install -d -m 0775 %{buildroot}%{homedir} +install -d -m 0775 %{buildroot}%{tempdir} +install -d -m 0775 %{buildroot}%{workdir} +install -d -m 0755 %{buildroot}%{_unitdir} +install -d -m 0755 %{buildroot}%{_libexecdir}/%{app_name} +install -d -m 0755 %{buildroot}%{_fillupdir} + +cp -a %{SOURCE100} %{buildroot}%{confdir} +cp -a %{SOURCE101} %{buildroot}%{confdir} + +# move things into place +# First copy supporting libs to tomcat lib +pushd output/build + cp -a bin/*.{jar,xml} %{buildroot}%{bindir} + cp -a conf/*.{properties,xml} %{buildroot}%{confdir} + cp -a lib/*.jar %{buildroot}%{libdir} + cp -a webapps/* %{buildroot}%{tomcatappdir} +popd +# tomcat embedded +pushd output/embed + cp -a *.jar %{buildroot}%{libdir} +popd + +# doc +cp -a output/dist/webapps/docs/api/* %{buildroot}%{_javadocdir}/%{app_name} + +sed -e "s|\@\@\@TCHOME\@\@\@|%{homedir}|g" \ + -e "s|\@\@\@TCTEMP\@\@\@|%{tempdir}|g" \ + -e "s|\@\@\@LIBDIR\@\@\@|%{_libdir}|g" %{SOURCE1} \ + > %{buildroot}%{confdir}/%{app_name}.conf +sed -e "s|\@\@\@TCHOME\@\@\@|%{homedir}|g" \ + -e "s|\@\@\@TCTEMP\@\@\@|%{tempdir}|g" \ + -e "s|\@\@\@LIBDIR\@\@\@|%{_libdir}|g" %{SOURCE3} \ + > %{buildroot}%{_fillupdir}/sysconfig.%{app_name} +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE4} \ + > %{buildroot}%{_sbindir}/%{app_name} +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE11} \ + > %{buildroot}%{_unitdir}/%{app_name}.service +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE20} \ + > %{buildroot}%{_unitdir}/%{app_name}-jsvc.service +sed -e "s|\@\@\@TCLOG\@\@\@|%{logdir}|g" %{SOURCE5} \ + > %{buildroot}%{_sysconfdir}/logrotate.d/%{app_name}10 +sed -e "s|\@\@\@TCHOME\@\@\@|%{homedir}|g" \ + -e "s|\@\@\@TCTEMP\@\@\@|%{tempdir}|g" \ + -e "s|\@\@\@LIBDIR\@\@\@|%{_libdir}|g" %{SOURCE6} \ + > %{buildroot}%{_bindir}/%{app_name}-digest +sed -e "s|\@\@\@TCHOME\@\@\@|%{homedir}|g" \ + -e "s|\@\@\@TCTEMP\@\@\@|%{tempdir}|g" \ + -e "s|\@\@\@LIBDIR\@\@\@|%{_libdir}|g" %{SOURCE7} \ + > %{buildroot}%{_bindir}/%{app_name}-tool-wrapper + +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE21} \ + > %{buildroot}%{_libexecdir}/%{app_name}/functions +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE30} \ + > %{buildroot}%{_libexecdir}/%{app_name}/preamble +chmod 0755 %{buildroot}%{_libexecdir}/%{app_name}/preamble +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE31} \ + > %{buildroot}%{_libexecdir}/%{app_name}/server +chmod 0755 %{buildroot}%{_libexecdir}/%{app_name}/server +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE32} \ + > %{buildroot}%{_unitdir}/%{app_name}@.service + +ln -sf %{_sbindir}/service %{buildroot}/%{_sbindir}/rc%{app_name} +ln -sf %{_sbindir}/service %{buildroot}/%{_sbindir}/rc%{app_name}-jsvc + +# create jsp and servlet and el API symlinks +pushd %{buildroot}%{_javadir} + mv %{app_name}/jsp-api.jar %{app_name}-jsp-%{jspspec}-api.jar + ln -s %{app_name}-jsp-%{jspspec}-api.jar %{app_name}-jsp-api.jar + mv %{app_name}/servlet-api.jar %{app_name}-servlet-%{servletspec}-api.jar + ln -s %{app_name}-servlet-%{servletspec}-api.jar %{app_name}-servlet-api.jar + ln -s %{app_name}-servlet-%{servletspec}-api.jar %{app_name}-servlet.jar + mv %{app_name}/el-api.jar %{app_name}-el-%{elspec}-api.jar + ln -s %{app_name}-el-%{elspec}-api.jar %{app_name}-el-api.jar +popd + +pushd output/build + %{_bindir}/build-jar-repository -s lib commons-collections \ + commons-dbcp2 commons-pool2 ecj/ecj 2>&1 + # need to use -p here with b-j-r otherwise the examples webapp fails to + # load with a java.io.IOException + %{_bindir}/build-jar-repository -p webapps/examples/WEB-INF/lib \ + taglibs-core.jar taglibs-standard.jar 2>&1 +popd + +pushd %{buildroot}%{libdir} + # symlink JSP and servlet and el API jars + ln -s ../%{app_name}-jsp-%{jspspec}-api.jar . + ln -s ../%{app_name}-servlet-%{servletspec}-api.jar . + ln -s ../%{app_name}-el-%{elspec}-api.jar . + ln -s $(build-classpath commons-collections) commons-collections.jar + rm -f commons-dbcp.jar + ln -s $(build-classpath commons-dbcp2) commons-dbcp2.jar + ln -s $(build-classpath commons-pool2) commons-pool2.jar + rm ecj.jar + ln -s $(build-classpath ecj/ecj) ecj.jar + ln -s $(build-classpath ecj/ecj) jasper-jdt.jar + + # Temporary copy the juli jar here from %%{_datadir}/java/tomcat (for maven depmap) + cp -a %{buildroot}%{bindir}/tomcat-juli.jar ./ +popd + +# symlink to the FHS locations where we've installed things +pushd %{buildroot}%{homedir} + ln -s %{appdir} webapps + ln -s %{confdir} conf + ln -s %{libdir} lib + ln -s %{logdir} logs + ln -s %{tempdir} temp + ln -s %{workdir} work +popd + +# install sample webapp +mkdir -p %{buildroot}%{tomcatappdir}/sample +pushd %{buildroot}%{tomcatappdir}/sample +jar xf %{buildroot}%{tomcatappdir}/docs/appdev/sample/sample.war +popd + +pushd %{buildroot}%{tomcatappdir}/examples/WEB-INF/lib +ln -s -f $(build-classpath jakarta-taglibs-core) jstl.jar +ln -s -f $(build-classpath jakarta-taglibs-standard) standard.jar +popd + +rm %{buildroot}%{tomcatappdir}/docs/appdev/sample/sample.war + +# Install the maven metadata +install -d -m 0755 %{buildroot}%{_mavenpomdir} +pushd output/dist/src/res/maven +for pom in *.pom; do + # fix-up version in all pom files + sed -i 's/@MAVEN.DEPLOY.VERSION@/%{version}/g' $pom +done + +# we won't install dbcp, juli-adapters and juli-extras pom files +for libname in annotations-api catalina jasper-el jasper catalina-ha jaspic-api; do + %{mvn_install_pom} %{app_name}-$libname.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-$libname.pom + %add_maven_depmap JPP.%{app_name}-$libname.pom %{app_name}/$libname.jar +done + +# servlet-api jsp-api and el-api are not in tomcat subdir, since they are widely re-used elsewhere +%{mvn_install_pom} %{app_name}-jsp-api.pom %{buildroot}%{_mavenpomdir}/JPP-%{app_name}-jsp-api.pom +%add_maven_depmap JPP-%{app_name}-jsp-api.pom %{app_name}-jsp-api.jar -f jsp-api -a "org.eclipse.jetty.orbit:jakarta.servlet.jsp" + +%{mvn_install_pom} %{app_name}-el-api.pom %{buildroot}%{_mavenpomdir}/JPP-%{app_name}-el-api.pom +%add_maven_depmap JPP-%{app_name}-el-api.pom %{app_name}-el-api.jar -f el-api -a "org.eclipse.jetty.orbit:jakarta.el" + +%{mvn_install_pom} %{app_name}-servlet-api.pom %{buildroot}%{_mavenpomdir}/JPP-%{app_name}-servlet-api.pom +# Generate a depmap fragment javax.servlet:servlet-api pointing to +# tomcat-servlet-3.0-api for backwards compatibility +# also provide jetty depmap (originally in jetty package, but it's cleaner to have it here +%add_maven_depmap JPP-tomcat-servlet-api.pom tomcat-servlet-api.jar -f servlet-api -a "org.mortbay.jetty:servlet-api" + +# two special pom where jar files have different names +%{mvn_install_pom} %{app_name}-tribes.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-catalina-tribes.pom +%add_maven_depmap JPP.%{app_name}-catalina-tribes.pom %{app_name}/catalina-tribes.jar + +%{mvn_install_pom} %{app_name}-coyote.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-coyote.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-coyote.pom %{app_name}/%{app_name}-coyote.jar + +%{mvn_install_pom} %{app_name}-jni.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-jni.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-jni.pom %{app_name}/%{app_name}-jni.jar + +%{mvn_install_pom} %{app_name}-juli.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-juli.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-juli.pom %{app_name}/%{app_name}-juli.jar + +%{mvn_install_pom} %{app_name}-jdbc.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-jdbc.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-jdbc.pom %{app_name}/%{app_name}-jdbc.jar + +%{mvn_install_pom} %{app_name}-dbcp.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-dbcp.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-dbcp.pom %{app_name}/%{app_name}-dbcp.jar + +%{mvn_install_pom} %{app_name}-api.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-api.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-api.pom %{app_name}/%{app_name}-api.jar + +%{mvn_install_pom} %{app_name}-util.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-util.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-util.pom %{app_name}/%{app_name}-util.jar + +%{mvn_install_pom} %{app_name}-util-scan.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-util-scan.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-util-scan.pom %{app_name}/%{app_name}-util-scan.jar + +%{mvn_install_pom} %{app_name}-websocket-api.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-websocket-api.pom +%add_maven_depmap JPP.%{app_name}-websocket-api.pom %{app_name}/websocket-api.jar + +%{mvn_install_pom} %{app_name}-websocket-client-api.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-websocket-client-api.pom +%add_maven_depmap JPP.%{app_name}-websocket-client-api.pom %{app_name}/websocket-client-api.jar + +%{mvn_install_pom} %{app_name}-websocket.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-websocket.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-websocket.pom %{app_name}/%{app_name}-websocket.jar + +%{mvn_install_pom} %{app_name}-embed-core.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-embed-core.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-embed-core.pom %{app_name}/%{app_name}-embed-core.jar -f embed + +%{mvn_install_pom} %{app_name}-embed-el.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-embed-el.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-embed-el.pom %{app_name}/%{app_name}-embed-el.jar -f embed + +%{mvn_install_pom} %{app_name}-embed-jasper.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-embed-jasper.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-embed-jasper.pom %{app_name}/%{app_name}-embed-jasper.jar -f embed + +%{mvn_install_pom} %{app_name}-embed-websocket.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-embed-websocket.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-embed-websocket.pom %{app_name}/%{app_name}-embed-websocket.jar -f embed + +# replace temporary copy with link +ln -s -f %{bindir}/tomcat-juli.jar %{buildroot}%{libdir}/ + +# bnc#424675 +ln -s %{cachedir}/Catalina %{buildroot}/%{confdir} +rm -rf %{buildroot}/%{confdir}/Catalina +ln -s %{cachedir}/Catalina %{buildroot}/%{confdir}/ + +# bnc#418664 +install -d -m 0755 %{buildroot}/%{_sysconfdir}/ant.d/ +echo "tomcat/catalina-ant" > %{buildroot}/%{_sysconfdir}/ant.d/catalina-ant +%fdupes %{buildroot} /srv/%{app_name} +#bnc#565901 +ln -sf %{_sbindir}/%{app_name} %{buildroot}/%{bindir}/catalina.sh + +# Install update-alternatives content +mkdir -p %{buildroot}%{_sysconfdir}/alternatives +ln -s -f %{_sysconfdir}/alternatives/el_api %{buildroot}%{_javadir}/%{app_name}-el_api.jar +ln -s -f %{_sysconfdir}/alternatives/jsp %{buildroot}%{_javadir}/%{app_name}-jsp.jar +# To avoid conflicts with servletapi4 and servletapi5 create a link to incorrect /etc/alternatives/servlet.jar. +# It will be changed anyways to the correct symlink by update-alternatives. +ln -s -f %{_sysconfdir}/alternatives/servlet.jar %{buildroot}%{_javadir}/servlet.jar + +%pre +# add the tomcat user and group +getent group tomcat >/dev/null || %{_sbindir}/groupadd -r tomcat +getent passwd tomcat >/dev/null || %{_sbindir}/useradd -c "Apache Tomcat" \ + -g tomcat -s /sbin/nologin -r -d %{homedir} tomcat +%service_add_pre %{app_name}.service + +%post +%service_add_post %{app_name}.service +%{fillup_only %{app_name}} +chown -R tomcat:tomcat %{confdir}/server.xml +runuser -u tomcat -g tomcat -- xsltproc --output %{confdir}/server.xml %{confdir}/valve.xslt %{confdir}/server.xml + +%preun +%service_del_preun %{app_name}.service + +%postun +%service_del_postun %{app_name}.service + +%pre jsvc +%service_add_pre %{app_name}-jsvc.service + +%post jsvc +%service_add_post %{app_name}-jsvc.service + +%preun jsvc +%service_del_preun %{app_name}-jsvc.service + +%postun jsvc +%service_del_postun %{app_name}-jsvc.service + +%post el-%{elspec_major}_%{elspec_minor}-api +update-alternatives --install %{_javadir}/%{app_name}-el_api.jar el_api %{_javadir}/%{app_name}-el-%{elspec}-api.jar 20300 + +%postun el-%{elspec_major}_%{elspec_minor}-api +if [ $1 -eq 0 ] ; then + update-alternatives --remove el_api %{_javadir}/%{app_name}-el-%{elspec}-api.jar +fi + +%post jsp-%{jspspec_major}_%{jspspec_minor}-api +update-alternatives --install %{_javadir}/%{app_name}-jsp.jar jsp \ + %{_javadir}/%{app_name}-jsp-%{jspspec}-api.jar 20200 + +%postun jsp-%{jspspec_major}_%{jspspec_minor}-api +if [ $1 -eq 0 ] ; then + update-alternatives --remove jsp \ + %{_javadir}/%{app_name}-jsp-%{jspspec}-api.jar +fi + +%post servlet-%{servletspec_major}_%{servletspec_minor}-api +update-alternatives --install %{_javadir}/servlet.jar servlet \ + %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar 30000 +# Fix for bsc#1092163. +# Keep the /usr/share/java/tomcat-servlet.jar symlink for compatibility. +# In case of update from an older version where /usr/share/java/tomcat-servlet.jar is an alternatives symlink +# the update-alternatives in the new version will cause a rename tomcat-servlet.jar -> servlet.jar. +# This makes sure the %{app_name}-servlet.jar is recreated if it's missing because of the rename. +if [ ! -f %{_javadir}/%{app_name}-servlet.jar ]; then + echo "Recreating symlink %{_javadir}/%{app_name}-servlet.jar" + ln -s %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar %{_javadir}/%{app_name}-servlet.jar +fi + +%postun servlet-%{servletspec_major}_%{servletspec_minor}-api +if [ $1 -eq 0 ] ; then + if [ ! -f %{_sysconfdir}/alternatives/servlet ]; then + # servlet was removed on uninstall. + # Create a broken symlink to make sure update-alternatives works correctly and falls back + # to servletapi5 or servletapi4 if they're installed. + ln -s %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar %{_sysconfdir}/alternatives/servlet + fi + update-alternatives --remove servlet \ + %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar +fi + +%post lib +# those links are no longer needed +rm -f \ + %{libdir}/\[commons-collections-tomcat5\].jar \ + %{libdir}/\[commons-dbcp-tomcat5\].jar \ + %{libdir}/\[commons-pool-tomcat5\].jar \ + %{libdir}/\[ecj\].jar >/dev/null 2>&1 + +%post webapps +chown -R tomcat:tomcat %{tomcatappdir}/examples/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/examples/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/examples/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/examples ]; then + ln -sf %{tomcatappdir}/examples %{_datadir}/%{app_name}/webapps/examples +fi +#use the same context.xml for sample war +mkdir -p %{tomcatappdir}/ROOT/META-INF +chown -R tomcat:tomcat %{tomcatappdir}/ROOT/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/ROOT/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/examples/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/ROOT ]; then + ln -sf %{tomcatappdir}/ROOT %{_datadir}/%{app_name}/webapps/ROOT +fi +#use the same context.xml for sample war +mkdir -p %{tomcatappdir}/webapps/sample/META-INF +chown -R tomcat:tomcat %{tomcatappdir}/sample/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/sample/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/examples/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/sample ]; then + ln -sf %{tomcatappdir}/sample %{_datadir}/%{app_name}/webapps/sample +fi + +%postun webapps +if [ $1 -eq 0 ]; then # uninstall only + rm %{tomcatappdir}/ROOT/META-INF/context.xml + rm %{tomcatappdir}/sample/META-INF/context.xml +fi + +%post admin-webapps +chown -R tomcat:tomcat %{tomcatappdir}/manager/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/manager/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/manager/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/manager ]; then + ln -sf %{tomcatappdir}/manager %{_datadir}/%{app_name}/webapps/manager +fi + +chown -R tomcat:tomcat %{tomcatappdir}/host-manager/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/host-manager/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/host-manager/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/host-manager ]; then + ln -sf %{tomcatappdir}/host-manager %{_datadir}/%{app_name}/webapps/host-manager +fi + +%post docs-webapp +chown -R tomcat:tomcat %{tomcatappdir}/docs/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/docs/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/docs/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/docs ]; then + ln -sf %{tomcatappdir}/docs %{_datadir}/%{app_name}/webapps/docs +fi + +%files +%doc {LICENSE,NOTICE,RELEASE*} +%{_bindir}/%{app_name}-digest +%{_bindir}/%{app_name}-tool-wrapper +%{_sbindir}/%{app_name} +%{_unitdir}/%{app_name}.service +%{_sbindir}/rc%{app_name} +%{_unitdir}/%{app_name}@.service +%dir %{_libexecdir}/%{app_name} +%dir %{_localstatedir}/lib/%{app_name}s +%{_libexecdir}/%{app_name}/functions +%{_libexecdir}/%{app_name}/preamble +%{_libexecdir}/%{app_name}/server +#bnc#565901 +%{bindir}/catalina.sh +%config(noreplace) %{_sysconfdir}/logrotate.d/%{app_name}10 +%dir %{basedir} +%dir %{confdir} +%attr(0775,root,tomcat) %dir %{appdir} +%attr(0770,tomcat,tomcat) %dir %{logdir} +%attr(0660,tomcat,tomcat) %{logdir}/catalina.out +%attr(0770,root,tomcat) %dir %{cachedir} +%attr(0775,root,tomcat) %dir %{cachedir}/Catalina + +# tomcat group writtable dirs - bnc#625415 +%attr(0770,root,tomcat) %dir %{tempdir} +%attr(0770,root,tomcat) %dir %{workdir} +%attr(0775,root,tomcat) %dir %{tomcatappdir} + +%{confdir}/Catalina +%dir %{confdir}/conf.d +%config(noreplace) %{confdir}/conf.d/README +%config(noreplace) %{confdir}/%{app_name}.conf +%config(noreplace) %{confdir}/*.properties +%config(noreplace) %{confdir}/context.xml +%config(noreplace) %{confdir}/server.xml +# keep tomcat-users.xml readable only by root and tomcat group +%attr(0640,root,tomcat) %config(noreplace) %{confdir}/tomcat-users.xml +%config(noreplace) %{confdir}/web.xml +%config(noreplace) %{confdir}/jaspic-providers.xml +%dir %{homedir} +%{bindir}/bootstrap.jar +%{bindir}/catalina-tasks.xml +%{homedir}/lib +%{homedir}/temp +%{homedir}/webapps +%{homedir}/work +%{homedir}/logs +%{homedir}/conf +%{_fillupdir}/sysconfig.%{app_name} +%{confdir}/allowLinking.xslt +%{confdir}/valve.xslt + +%files admin-webapps +%defattr(0644,root,tomcat,0755) +%{tomcatappdir}/host-manager +%config(noreplace) %{tomcatappdir}/host-manager/META-INF/context.xml +%{tomcatappdir}/manager +%config(noreplace) %{tomcatappdir}/manager/META-INF/context.xml + +%files docs-webapp +%{tomcatappdir}/docs + +%files el-%{elspec_major}_%{elspec_minor}-api -f output/dist/src/res/maven/.mfiles-el-api +%{_javadir}/%{app_name}-el-%{elspec}-api.jar +%{_javadir}/%{app_name}-el-api.jar +%{libdir}/%{app_name}-el-%{elspec}-api.jar +%ghost %{_javadir}/%{app_name}-el_1_0_api.jar +%ghost %{_javadir}/%{app_name}-el_api.jar +%ghost %{_sysconfdir}/alternatives/%{app_name}-el_api.jar +%ghost %{_sysconfdir}/alternatives/el_1_0_api +%ghost %{_sysconfdir}/alternatives/el_api + +%files doc +%doc %{_javadocdir}/%{app_name} + +%files jsp-%{jspspec_major}_%{jspspec_minor}-api -f output/dist/src/res/maven/.mfiles-jsp-api +%{_javadir}/%{app_name}-jsp-%{jspspec}-api.jar +%{_javadir}/%{app_name}-jsp-api.jar +%ghost %{_javadir}/%{app_name}-jsp.jar +%ghost %{_sysconfdir}/alternatives/%{app_name}-jsp.jar +%ghost %{_sysconfdir}/alternatives/jsp + +%files lib -f output/dist/src/res/maven/.mfiles +%{libdir} +%dir %{bindir} +%{bindir}/tomcat-juli.jar +%exclude %{libdir}/%{app_name}-el-%{elspec}-api.jar +%exclude %{libdir}/%{app_name}*-embed-*.jar +# bnc#418664 +%dir %{_sysconfdir}/ant.d +%config(noreplace) %{_sysconfdir}/ant.d/catalina-ant + +%files embed -f output/dist/src/res/maven/.mfiles-embed +%dir %{libdir} + +%files servlet-%{servletspec_major}_%{servletspec_minor}-api -f output/dist/src/res/maven/.mfiles-servlet-api +%license LICENSE +%{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar +%{_javadir}/%{app_name}-servlet-api.jar +%{_javadir}/%{app_name}-servlet.jar +%{_javadir}/servlet.jar +%ghost %{_sysconfdir}/alternatives/tomcat-servlet.jar +%ghost %attr(-,root,root) %{_sysconfdir}/alternatives/servlet.jar +%ghost %attr(-,root,root) %{_sysconfdir}/alternatives/servlet + +%files webapps +%defattr(0644,root,tomcat,0755) +#bnc#520532 +%config(noreplace) %{tomcatappdir}/ROOT +%{tomcatappdir}/examples +%config(noreplace) %{tomcatappdir}/examples/META-INF/context.xml +%{tomcatappdir}/sample + +%files jsvc +%defattr(755,root,root,0755) +%{_unitdir}/%{app_name}-jsvc.service +%{_sbindir}/rc%{app_name}-jsvc + +%changelog diff --git a/valve.xslt b/valve.xslt new file mode 100644 index 0000000..a3c791c --- /dev/null +++ b/valve.xslt @@ -0,0 +1,16 @@ + + + + + + + + + + + + false + + + + -- 2.51.1 From 40f2d1761b42b6182a7bc58672543c09df0ac84a3f02ac4855171131235a9d2f Mon Sep 17 00:00:00 2001 From: Fridrich Strba Date: Tue, 24 Jun 2025 12:02:11 +0000 Subject: [PATCH 2/7] - Update to Tomcat 11.0.8 * Fixed CVEs: + CVE-2025-46701: refactor CGI servlet to access resources via WebResources (bsc#1243815) + CVE-2025-48988: limits the total number of parts in a multi-part request and limits the size of the headers provided with each part (bsc#1244656) + CVE-2025-49125: Expand checks for webAppMount (bsc#1244649) * Catalina + Add: Support for the java:module namespace which mirrors the java:comp namespace. + Fix: 69690: Calling HttpServletRequest.getParameter() and related methods for a request with content type multipart/form-data when the mapped servlet does not have a @MultipartConfig or equivalent should not trigger an exception. Note that calling getPart() or getParts() is these circumstances will trigger an exception. + Add: Support parsing of multiple path parameters separated by ; in a single URL segment. Based on pull request #860 by Chenjp. + Fix: 69699: Encode redirect URL used by the rewrite valve with the session id if appropriate, and handle cross context with different session configuration when using rewrite. + Add: #863: Support for comments at the end of lines in text rewrite map files to align behaviour with Apache httpd. Pull request provided by Chenjp. + Fix: 69706: Saved request serialization issue in FORM introduced when allowing infinite session timeouts. + Fix: Expand the path checks for Pre-Resources and Post-Resources mounted at a path within the web application. + Fix: Process possible path parameters rewrite production in the rewrite valve. + Fix: 69588: Enable allowLinking to be set on PreResources, JarResources and PostResources. If not set explicitly, the setting will be inherited from the Resources. + Add: 69633: Support for Filters using context root mappings. + Fix: 69643: Optimize directory listing for large amount of files. Patch submitted by Loic de l'Eprevier. + Fix: #843: Off by one validation logic for partial PUT ranges and associated test case. Submitted by Chenjp. + Refactor: GCI servlet to access resources via the WebResource API. + Fix: 69662: Report name in exception message when a naming lookup failure occurs. Based on code submitted by Donald Smith. + Fix: Ensure that the FORM authentication attribute authenticationSessionTimeout works correctly when sessions have an infinite timeout when authentication starts. + Add: Provide a content type based on file extension when web application resources are accessed via a URL. * Coyote + Refactor: #861: TaskQueue to use the new interface RetryableQueue which enables better integration of custom Executors which provide their own BlockingQueue implementation. Pull request provided by Paulo Almeida. + Add: Finer grained control of multi-part request processing via two new attributes on the Connector element. maxPartCount limits the total number of parts in a multi-part request and maxPartHeaderSize limits the size of the headers provided with each part. Add support for these new attributes to the ParameterLimitValve. * Jasper + Fix: 69696: Mark the JSP wrapper for reload after a failed compilation. + Fix: 69635: Add support to jakarta.el.ImportHandler for resolving inner classes. + Add: #842: Support for optimized execution of c:set and c:remove tags, when activated via JSP servlet param useNonstandardTagOptimizations. + Fix: An edge case compilation bug for JSP and tag files on case insensitive file systems that was exposed by the test case for 69635. * Web applications + Fix: 69694: Improve error reporting of deployment tasks done using the manager webapp when a copy operation fails. + Add: 68876: Documentation. Update the UML diagrams for server start-up, request processing and authentication using PlantUML and include the source files for each diagram. * Other + Add: Thread name to webappClassLoader.stackTraceRequestThread message. Patch provided by Felix Zhang. + Update: Tomcat Native to 2.0.9. + Update: The internal fork of Apache Commons FileUpload to 1.6.0-RC1 (2025-06-05). + Update: EasyMock to 5.6.0. + Update: Checkstyle to 10.25.0. + Fix: Use the full path when the installer for Windows sets calls icacls.exe to set file permissions. + Update: Improvements to Japanese translations provided by tak7iji. + Update: Jacoco to 0.8.13. + Code: Explicitly set the locale to be used for Javadoc. For official releases, this locale will be English (US) to support reproducible builds. + Update: Byte Buddy to 1.17.5. + Update: Checkstyle to 10.23.1. + Update: File extension to media type mappings to align with the current list used by the Apache Web Server (httpd). + Update: Improvements to French translations. + Update: Improvements to Japanese translations provided by tak7iji. OBS-URL: https://build.opensuse.org/package/show/Java:packages/tomcat11?expand=0&rev=13 --- .gitattributes | 23 + .gitignore | 1 + _constraints | 7 + allowLinking.xslt | 19 + apache-tomcat-11.0.6-src.tar.gz | 3 + apache-tomcat-11.0.6-src.tar.gz.asc | 16 + apache-tomcat-11.0.8-src.tar.gz | 3 + apache-tomcat-11.0.8-src.tar.gz.asc | 16 + tomcat-bootstrap-MANIFEST.MF.patch | 11 + tomcat-digest.script | 48 ++ tomcat-fix_catalina.patch | 11 + tomcat-functions | 42 ++ tomcat-javadoc.patch | 13 + tomcat-jdt.patch | 110 ++++ tomcat-jsvc.service | 21 + tomcat-logrotate_everything.patch | 12 + tomcat-named.service | 26 + tomcat-osgi-build.patch | 29 + tomcat-preamble | 61 ++ tomcat-rpmlintrc | 2 + tomcat-secretRequired-default.patch | 13 + tomcat-server | 25 + tomcat-tomcat-users-webapp.patch | 19 + tomcat-tool-wrapper.script | 48 ++ tomcat.conf | 52 ++ tomcat.keyring | 512 +++++++++++++++++ tomcat.logrotate | 10 + tomcat.service | 25 + tomcat.sysconfig | 0 tomcat.wrapper | 24 + tomcat11.changes | 119 ++++ tomcat11.spec | 847 ++++++++++++++++++++++++++++ valve.xslt | 16 + 33 files changed, 2184 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 _constraints create mode 100644 allowLinking.xslt create mode 100644 apache-tomcat-11.0.6-src.tar.gz create mode 100644 apache-tomcat-11.0.6-src.tar.gz.asc create mode 100644 apache-tomcat-11.0.8-src.tar.gz create mode 100644 apache-tomcat-11.0.8-src.tar.gz.asc create mode 100644 tomcat-bootstrap-MANIFEST.MF.patch create mode 100644 tomcat-digest.script create mode 100644 tomcat-fix_catalina.patch create mode 100644 tomcat-functions create mode 100644 tomcat-javadoc.patch create mode 100644 tomcat-jdt.patch create mode 100644 tomcat-jsvc.service create mode 100644 tomcat-logrotate_everything.patch create mode 100644 tomcat-named.service create mode 100644 tomcat-osgi-build.patch create mode 100644 tomcat-preamble create mode 100644 tomcat-rpmlintrc create mode 100644 tomcat-secretRequired-default.patch create mode 100644 tomcat-server create mode 100644 tomcat-tomcat-users-webapp.patch create mode 100644 tomcat-tool-wrapper.script create mode 100644 tomcat.conf create mode 100644 tomcat.keyring create mode 100644 tomcat.logrotate create mode 100644 tomcat.service create mode 100644 tomcat.sysconfig create mode 100644 tomcat.wrapper create mode 100644 tomcat11.changes create mode 100644 tomcat11.spec create mode 100644 valve.xslt diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/_constraints b/_constraints new file mode 100644 index 0000000..290ed62 --- /dev/null +++ b/_constraints @@ -0,0 +1,7 @@ + + + + 2048 + + + diff --git a/allowLinking.xslt b/allowLinking.xslt new file mode 100644 index 0000000..817e15c --- /dev/null +++ b/allowLinking.xslt @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/apache-tomcat-11.0.6-src.tar.gz b/apache-tomcat-11.0.6-src.tar.gz new file mode 100644 index 0000000..ec59d00 --- /dev/null +++ b/apache-tomcat-11.0.6-src.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d331ffe634a0f8976a25cbf70d088a50118e8611157c8a06eaeeabe70402eac1 +size 6923455 diff --git a/apache-tomcat-11.0.6-src.tar.gz.asc b/apache-tomcat-11.0.6-src.tar.gz.asc new file mode 100644 index 0000000..5400109 --- /dev/null +++ b/apache-tomcat-11.0.6-src.tar.gz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEqcXfTSLpmZjZh1pREMAcWi9gWecFAmfr/o8ACgkQEMAcWi9g +WecdvxAA9qQwEx53mR0rlzpXAVc5ORdDmyC/rGY59oxyCsq22sWpLPRi5NBpohv7 +xRqnnFJVi+YC8c1J+M4g+d1hJWRwC0S6auydofL2EbkKx3t6WbD+ku0syXfz+5ia +D4rOo55HZKEFXiMJexBLadC8VCTmKjT3Jng66/XLrAtlPHhcdyzaI+umbqTi2yNu +VoWVB6IDAxW6YoubouhHt35EXQTTYL8EqE6iLKsNgxHOula/Yj/L2lAgiiIU/aPV +gtJfP7WiR34Gdug/ppAdE0aatxkp+lANd5s1TPMGhmDvkI+n8tMpAeA91Q2cBoOT +KpVJvKnSID5xxiJVHRSNPgGUxR5s0USAEkLkJpKIgjwnEaIsJZwPJXepdSRaNURt +MP1/mYO9/5Fi93oUx+1RrJCmrTUlF4nA/zfSFOt49fovhU20l42zEHjFsNKVmqet +8eaBOwfjpiurr0vPklziJ3kdyV2AiiX+n9prNzAh5tZ3I9bripSWPYFG1gBw0Ln6 +As3X5EjaQto1YkLOQ9oKNzzNVKoQ5wh/dfGxr4VY0FFuXBIWRiy5IFXEZH55ssGZ +7m5jqIDUmyQ+M+J+WvdVSHJfzGO9O8Ms9DIKrEoMV9gXcz9eMtFvbECFeCDFJQit +CD3T8rL5AlbDoU+GV111a94RMiUnvZUe2EtQockfMOHP1o/LhLk= +=+ON7 +-----END PGP SIGNATURE----- diff --git a/apache-tomcat-11.0.8-src.tar.gz b/apache-tomcat-11.0.8-src.tar.gz new file mode 100644 index 0000000..10d70a6 --- /dev/null +++ b/apache-tomcat-11.0.8-src.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d1763f3c89cae11822b117ed9dd4e4379cd025a92a94717929553837db94c5b +size 7145586 diff --git a/apache-tomcat-11.0.8-src.tar.gz.asc b/apache-tomcat-11.0.8-src.tar.gz.asc new file mode 100644 index 0000000..a21b832 --- /dev/null +++ b/apache-tomcat-11.0.8-src.tar.gz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEqcXfTSLpmZjZh1pREMAcWi9gWecFAmhB4W8ACgkQEMAcWi9g +Wed9LRAAk7Z42oFegd844e7hKjv7+YUe/kBbl1QsMQvuo2pnotrZr2mbu/xjnj8D +JzrYYsN8o971yFGn/3VTfIv8TomH0ENpcm+Y8yHaVenPBE14Do+WpxpIwdRvj7w8 +/E0+UFF88uCKoZCT9udy5TgdF89XklYMau9pTPqi5kB+AXlXUeLCi2lNlZ4A1Pmm +Zn+uk+zcBXj58VVZ3mquEqW+kopwM61rg2jJmYLQToDlZ5jHm1q2Mx27wGOjNTOx +aqu1+sfQlc/zMn/NvkURZ1GdJ25L2rWG1EPdKg0Fb1142L8zBpMiNSLYthupi9gA +QqRm8zWV1su6j2rLrmoL6GfdJnpt0vpY+MuyevuB/12pp1EWuprmjFTO3pLtvA5y +PkLeCbpaGXAW75ZZw0fJGzeXN6I24X0Uwsg+2TFxLUWOuR5W87ovayXnpf6SeU3k +OP3jq7ZeJD//5C+d4nhPTR+BMrlceIMWR9z8bVGkFaAcjIUvSZ9kwrmO7GGUQxUM +appmtbrmtRkTsHciaVpyfhcxOm6KcIbTbkZI4g3pwS0NUPIGHmgcQWE2RS4YxEHp +8PwP9dOnlC102Pf8B4d6u3JN3EgyB9BR9mw8Ge4xkCldHQeSuQEZuUIVzIM7ey7k +heWNDzFKad+J9SruayyQiJHXjyzpXfTLzNuY7e/lGgPUsY0OmVo= +=GwjZ +-----END PGP SIGNATURE----- diff --git a/tomcat-bootstrap-MANIFEST.MF.patch b/tomcat-bootstrap-MANIFEST.MF.patch new file mode 100644 index 0000000..e0ee35d --- /dev/null +++ b/tomcat-bootstrap-MANIFEST.MF.patch @@ -0,0 +1,11 @@ +Index: apache-tomcat-11.0.5-src/res/META-INF/bootstrap.jar.manifest +=================================================================== +--- apache-tomcat-11.0.5-src.orig/res/META-INF/bootstrap.jar.manifest ++++ apache-tomcat-11.0.5-src/res/META-INF/bootstrap.jar.manifest +@@ -1,6 +1,5 @@ + Manifest-Version: 1.0 + Main-Class: org.apache.catalina.startup.Bootstrap +-Class-Path: commons-daemon.jar + Specification-Title: Apache Tomcat Bootstrap + Specification-Version: @VERSION_MAJOR_MINOR@ + Specification-Vendor: Apache Software Foundation diff --git a/tomcat-digest.script b/tomcat-digest.script new file mode 100644 index 0000000..2f3cacf --- /dev/null +++ b/tomcat-digest.script @@ -0,0 +1,48 @@ +#!/bin/sh +# +# tomcat-digest script +# JPackage Project + +# Set default JAVA_HOME +export JAVA_HOME="${JAVA_HOME:-%{?java_home}}" + +# Source functions library +if [ -f /usr/share/java-utils/java-functions ] ; then + . /usr/share/java-utils/java-functions +else + echo "Can't find functions library, aborting" + exit 1 +fi + +# Get the tomcat config (use this for environment specific settings) +if [ -z "${TOMCAT_CFG}" ]; then + TOMCAT_CFG="/etc/tomcat/tomcat.conf" +fi + +if [ -r "$TOMCAT_CFG" ]; then + . $TOMCAT_CFG +fi + +set_javacmd + +# CLASSPATH munging +if [ -n "$JSSE_HOME" ]; then + CLASSPATH="${CLASSPATH}:$(build-classpath jcert jnet jsse 2>/dev/null)" +fi +CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/bootstrap.jar" +CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/tomcat-juli.jar" +export CLASSPATH + +# Configuration +MAIN_CLASS="org.apache.catalina.startup.Tool" +BASE_FLAGS="-Dcatalina.home=\"$CATALINA_HOME\"" +BASE_OPTIONS="" +BASE_JARS="commons-daemon tomcat/catalina tomcat/servlet" + +# Set parameters +set_classpath $BASE_JARS +set_flags $BASE_FLAGS +set_options $BASE_OPTIONS + +# Let's start +run -server org.apache.catalina.realm.RealmBase "$@" diff --git a/tomcat-fix_catalina.patch b/tomcat-fix_catalina.patch new file mode 100644 index 0000000..69ad0dc --- /dev/null +++ b/tomcat-fix_catalina.patch @@ -0,0 +1,11 @@ +Index: apache-tomcat-11.0.5-src/conf/logging.properties +=================================================================== +--- apache-tomcat-11.0.5-src.orig/conf/logging.properties ++++ apache-tomcat-11.0.5-src/conf/logging.properties +@@ -74,3 +74,6 @@ org.apache.catalina.core.ContainerBase.[ + + # To see debug messages for WebSocket handling, uncomment the following line: + #org.apache.tomcat.websocket.level = FINE ++ ++1catalina.org.apache.juli.AsyncFileHandler.suffix = out ++1catalina.org.apache.juli.AsyncFileHandler.rotatable = false diff --git a/tomcat-functions b/tomcat-functions new file mode 100644 index 0000000..721021c --- /dev/null +++ b/tomcat-functions @@ -0,0 +1,42 @@ +#!/bin/bash + +if [ -r /usr/share/java-utils/java-functions ]; then + . /usr/share/java-utils/java-functions +else + echo "Can't read Java functions library, aborting" + exit 1 +fi + +_save_function() { + local ORIG_FUNC=$(declare -f $1) + local NEWNAME_FUNC="$2${ORIG_FUNC#$1}" + eval "$NEWNAME_FUNC" +} + +run_jsvc(){ + if [ -x /usr/bin/jsvc ]; then + TOMCAT_USER="tomcat" + JSVC="/usr/bin/jsvc" + + JSVC_OPTS="-nodetach -pidfile /var/run/jsvc-tomcat${NAME}.pid -user ${TOMCAT_USER} -outfile ${CATALINA_BASE}/logs/catalina.out -errfile ${CATALINA_BASE}/logs/catalina.out" + if [ "$1" = "stop" ]; then + JSVC_OPTS="${JSVC_OPTS} -stop" + fi + + exec "${JSVC}" ${JSVC_OPTS} ${FLAGS} -classpath "${CLASSPATH}" ${OPTIONS} "${MAIN_CLASS}" "${@}" + else + echo "Can't find /usr/bin/jsvc executable" + fi + +} + +_save_function run run_java + +run() { + if [ "${USE_JSVC}" = "true" ] ; then + run_jsvc $@ + else + run_java $@ + fi +} + diff --git a/tomcat-javadoc.patch b/tomcat-javadoc.patch new file mode 100644 index 0000000..60c8d07 --- /dev/null +++ b/tomcat-javadoc.patch @@ -0,0 +1,13 @@ +Index: apache-tomcat-11.0.5-src/build.xml +=================================================================== +--- apache-tomcat-11.0.5-src.orig/build.xml ++++ apache-tomcat-11.0.5-src/build.xml +@@ -2416,8 +2416,6 @@ + + + +- +- + + + diff --git a/tomcat-jdt.patch b/tomcat-jdt.patch new file mode 100644 index 0000000..5b4a71a --- /dev/null +++ b/tomcat-jdt.patch @@ -0,0 +1,110 @@ +Index: apache-tomcat-11.0.6-src/java/org/apache/jasper/compiler/JDTCompiler.java +=================================================================== +--- apache-tomcat-11.0.6-src.orig/java/org/apache/jasper/compiler/JDTCompiler.java ++++ apache-tomcat-11.0.6-src/java/org/apache/jasper/compiler/JDTCompiler.java +@@ -310,21 +310,21 @@ public class JDTCompiler extends org.apa + } else if (opt.equals("15")) { + settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_15); + } else if (opt.equals("16")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_16); ++ settings.put(CompilerOptions.OPTION_Source, "16"); + } else if (opt.equals("17")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_Source, "17"); + } else if (opt.equals("18")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_18); ++ settings.put(CompilerOptions.OPTION_Source, "18"); + } else if (opt.equals("19")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_19); ++ settings.put(CompilerOptions.OPTION_Source, "19"); + } else if (opt.equals("20")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_20); ++ settings.put(CompilerOptions.OPTION_Source, "20"); + } else if (opt.equals("21")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_21); ++ settings.put(CompilerOptions.OPTION_Source, "21"); + } else if (opt.equals("22")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_22); ++ settings.put(CompilerOptions.OPTION_Source, "22"); + } else if (opt.equals("23")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_23); ++ settings.put(CompilerOptions.OPTION_Source, "23"); + } else if (opt.equals("24")) { + // Constant not available in latest ECJ version shipped with + // Tomcat. May be supported in a snapshot build. +@@ -337,11 +337,11 @@ public class JDTCompiler extends org.apa + settings.put(CompilerOptions.OPTION_Source, "25"); + } else { + log.warn(Localizer.getMessage("jsp.warning.unknown.sourceVM", opt)); +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_Source, "17"); + } + } else { + // Default to 17 +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_Source, "17"); + } + + // Target JVM +@@ -391,29 +391,29 @@ public class JDTCompiler extends org.apa + settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_15); + settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_15); + } else if (opt.equals("16")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_16); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_16); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "16"); ++ settings.put(CompilerOptions.OPTION_Compliance, "16"); + } else if (opt.equals("17")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_17); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "17"); ++ settings.put(CompilerOptions.OPTION_Compliance, "17"); + } else if (opt.equals("18")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_18); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_18); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "18"); ++ settings.put(CompilerOptions.OPTION_Compliance, "18"); + } else if (opt.equals("19")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_19); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_19); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "19"); ++ settings.put(CompilerOptions.OPTION_Compliance, "19"); + } else if (opt.equals("20")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_20); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_20); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "20"); ++ settings.put(CompilerOptions.OPTION_Compliance, "20"); + } else if (opt.equals("21")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_21); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_21); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "21"); ++ settings.put(CompilerOptions.OPTION_Compliance, "21"); + } else if (opt.equals("22")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_22); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_22); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "22"); ++ settings.put(CompilerOptions.OPTION_Compliance, "22"); + } else if (opt.equals("23")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_23); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_23); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "23"); ++ settings.put(CompilerOptions.OPTION_Compliance, "23"); + } else if (opt.equals("24")) { + // Constant not available in latest ECJ version shipped with + // Tomcat. May be supported in a snapshot build. +@@ -428,12 +428,12 @@ public class JDTCompiler extends org.apa + settings.put(CompilerOptions.OPTION_Compliance, "25"); + } else { + log.warn(Localizer.getMessage("jsp.warning.unknown.targetVM", opt)); +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "17"); + } + } else { + // Default to 17 +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_17); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "17"); ++ settings.put(CompilerOptions.OPTION_Compliance, "17"); + } + + final IProblemFactory problemFactory = new DefaultProblemFactory(Locale.getDefault()); diff --git a/tomcat-jsvc.service b/tomcat-jsvc.service new file mode 100644 index 0000000..34f8a26 --- /dev/null +++ b/tomcat-jsvc.service @@ -0,0 +1,21 @@ +# Systemd unit file for tomcat +# +# To create clones of this service: +# 1) By default SERVICE_NAME=tomcat. When cloned, the value must be defined +# before tomcat-sysd is called. +# 2) Create /etc/sysconfig/${SERVICE_NAME} from /etc/sysconfig/tomcat +# to override tomcat defaults + +[Unit] +Description=Apache Tomcat Web Application Container JSVC wrapper +After=syslog.target network.target + +[Service] +Type=simple +EnvironmentFile=/etc/tomcat/tomcat.conf +Environment="NAME=" "USE_JSVC=true" +ExecStart=@LIBEXECDIR@/tomcat/server start +ExecStop=@LIBEXECDIR@/tomcat/server stop + +[Install] +WantedBy=multi-user.target diff --git a/tomcat-logrotate_everything.patch b/tomcat-logrotate_everything.patch new file mode 100644 index 0000000..1248a85 --- /dev/null +++ b/tomcat-logrotate_everything.patch @@ -0,0 +1,12 @@ +Index: apache-tomcat-11.0.5-src/conf/logging.properties +=================================================================== +--- apache-tomcat-11.0.5-src.orig/conf/logging.properties ++++ apache-tomcat-11.0.5-src/conf/logging.properties +@@ -77,3 +77,7 @@ org.apache.catalina.core.ContainerBase.[ + + 1catalina.org.apache.juli.AsyncFileHandler.suffix = out + 1catalina.org.apache.juli.AsyncFileHandler.rotatable = false ++ ++2localhost.org.apache.juli.AsyncFileHandler.rotatable = false ++3manager.org.apache.juli.AsyncFileHandler.rotatable = false ++4host-manager.org.apache.juli.AsyncFileHandler.rotatable = false diff --git a/tomcat-named.service b/tomcat-named.service new file mode 100644 index 0000000..2d742a7 --- /dev/null +++ b/tomcat-named.service @@ -0,0 +1,26 @@ +# Systemd unit file for tomcat instances. +# +# To create clones of this service: +# 0. systemctl enable tomcat@name.service +# 1. create catalina.base directory structure in +# /var/lib/tomcats/name +# 2. profit. + +[Unit] +Description=Apache Tomcat Web Application Container +After=syslog.target network.target + +[Service] +Type=simple +EnvironmentFile=/etc/tomcat/tomcat.conf +Environment="NAME=%I" +EnvironmentFile=-/etc/sysconfig/tomcat@%I +ExecStart=@LIBEXECDIR@/tomcat/server start +ExecStop=@LIBEXECDIR@/tomcat/server stop +SuccessExitStatus=143 +User=tomcat +Group=tomcat + +[Install] +WantedBy=multi-user.target + diff --git a/tomcat-osgi-build.patch b/tomcat-osgi-build.patch new file mode 100644 index 0000000..737fe51 --- /dev/null +++ b/tomcat-osgi-build.patch @@ -0,0 +1,29 @@ +Index: apache-tomcat-11.0.5-src/build.xml +=================================================================== +--- apache-tomcat-11.0.5-src.orig/build.xml ++++ apache-tomcat-11.0.5-src/build.xml +@@ -231,9 +231,9 @@ + + + +- + + ++ + + + +@@ -3973,6 +3973,13 @@ Read the Building page on the Apache Tom + + + ++ ++ ++ ++ ++ ++ ++ + + + diff --git a/tomcat-preamble b/tomcat-preamble new file mode 100644 index 0000000..23c40dd --- /dev/null +++ b/tomcat-preamble @@ -0,0 +1,61 @@ +#!/bin/bash + +. @LIBEXECDIR@/tomcat/functions + +# Get the tomcat config (use this for environment specific settings) + +if [ -z "${TOMCAT_CFG_LOADED}" ]; then + if [ -z "${TOMCAT_CFG}" ]; then + TOMCAT_CFG="/etc/tomcat/tomcat.conf" + fi + . $TOMCAT_CFG +fi + +if [ -d "${TOMCAT_CONFD=/etc/tomcat/conf.d}" ]; then + for file in ${TOMCAT_CONFD}/*.conf ; do + if [ -f "$file" ] ; then + . "$file" + fi + done +fi + +if [ -z "$CATALINA_BASE" ]; then + if [ -n "$NAME" ]; then + if [ -z "$TOMCATS_BASE" ]; then + TOMCATS_BASE="/var/lib/tomcats/" + fi + CATALINA_BASE="${TOMCATS_BASE}${NAME}" + else + CATALINA_BASE="${CATALINA_HOME}" + fi +fi + +# Include the optional setenv.sh script. +# (See section 3.4 of https://tomcat.apache.org/tomcat-8.0-doc/RUNNING.txt) +if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then + . "$CATALINA_BASE/bin/setenv.sh" +elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then + . "$CATALINA_HOME/bin/setenv.sh" +fi + +VERBOSE=1 +set_javacmd +cd ${CATALINA_HOME} +# CLASSPATH munging +if [ ! -z "$CLASSPATH" ] ; then + CLASSPATH="$CLASSPATH": +fi + +if [ -n "$JSSE_HOME" ]; then + CLASSPATH="${CLASSPATH}$(build-classpath jcert jnet jsse 2>/dev/null):" +fi +CLASSPATH="${CLASSPATH}${CATALINA_HOME}/bin/bootstrap.jar" +CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/tomcat-juli.jar" +CLASSPATH="${CLASSPATH}:$(build-classpath commons-daemon 2>/dev/null)" + +if [ -z "$LOGGING_PROPERTIES" ] ; then + LOGGING_PROPERTIES="${CATALINA_BASE}/conf/logging.properties" + if [ ! -f "${LOGGING_PROPERTIES}" ] ; then + LOGGING_PROPERTIES="${CATALINA_HOME}/conf/logging.properties" + fi +fi diff --git a/tomcat-rpmlintrc b/tomcat-rpmlintrc new file mode 100644 index 0000000..20bc763 --- /dev/null +++ b/tomcat-rpmlintrc @@ -0,0 +1,2 @@ +#fix of bnc#520532 +addFilter(".*non-etc-or-var-file-marked-as-conffile /usr/share/tomcat/tomcat-webapps/ROOT.*") diff --git a/tomcat-secretRequired-default.patch b/tomcat-secretRequired-default.patch new file mode 100644 index 0000000..3d5932d --- /dev/null +++ b/tomcat-secretRequired-default.patch @@ -0,0 +1,13 @@ +Index: apache-tomcat-11.0.5-src/java/org/apache/coyote/ajp/AbstractAjpProtocol.java +=================================================================== +--- apache-tomcat-11.0.5-src.orig/java/org/apache/coyote/ajp/AbstractAjpProtocol.java ++++ apache-tomcat-11.0.5-src/java/org/apache/coyote/ajp/AbstractAjpProtocol.java +@@ -155,7 +155,7 @@ public abstract class AbstractAjpProtoco + } + + +- private boolean secretRequired = true; ++ private boolean secretRequired = false; + + public void setSecretRequired(boolean secretRequired) { + this.secretRequired = secretRequired; diff --git a/tomcat-server b/tomcat-server new file mode 100644 index 0000000..18eb831 --- /dev/null +++ b/tomcat-server @@ -0,0 +1,25 @@ +#!/bin/bash + +. @LIBEXECDIR@/tomcat/preamble + +MAIN_CLASS=org.apache.catalina.startup.Bootstrap + +FLAGS="$JAVA_OPTS" +OPTIONS="-Dcatalina.base=$CATALINA_BASE \ +-Dcatalina.home=$CATALINA_HOME \ +-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS \ +-Djava.io.tmpdir=$CATALINA_TMPDIR \ +-Djava.util.logging.config.file=${LOGGING_PROPERTIES} \ +-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" + +if [ "$1" = "start" ] ; then + FLAGS="${FLAGS} $CATALINA_OPTS" + if [ "${SECURITY_MANAGER}" = "true" ] ; then + OPTIONS="${OPTIONS} \ + -Djava.security.manager \ + -Djava.security.policy==${CATALINA_BASE}/conf/catalina.policy" + fi + run start +elif [ "$1" = "stop" ] ; then + run stop +fi diff --git a/tomcat-tomcat-users-webapp.patch b/tomcat-tomcat-users-webapp.patch new file mode 100644 index 0000000..0257617 --- /dev/null +++ b/tomcat-tomcat-users-webapp.patch @@ -0,0 +1,19 @@ +Index: apache-tomcat-11.0.5-src/conf/tomcat-users.xml +=================================================================== +--- apache-tomcat-11.0.5-src.orig/conf/tomcat-users.xml ++++ apache-tomcat-11.0.5-src/conf/tomcat-users.xml +@@ -53,4 +53,14 @@ + + + --> ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + diff --git a/tomcat-tool-wrapper.script b/tomcat-tool-wrapper.script new file mode 100644 index 0000000..a342e17 --- /dev/null +++ b/tomcat-tool-wrapper.script @@ -0,0 +1,48 @@ +#!/bin/sh +# +# tomcat-digest script +# JPackage Project + +# Set default JAVA_HOME +export JAVA_HOME="${JAVA_HOME:-%{?java_home}}" + +# Source functions library +if [ -f /usr/share/java-utils/java-functions ] ; then + . /usr/share/java-utils/java-functions +else + echo "Can't find functions library, aborting" + exit 1 +fi + +# Get the tomcat config (use this for environment specific settings) +if [ -z "${TOMCAT_CFG}" ]; then + TOMCAT_CFG="/etc/tomcat/tomcat.conf" +fi + +if [ -r "$TOMCAT_CFG" ]; then + . $TOMCAT_CFG +fi + +set_javacmd + +# CLASSPATH munging +if [ -n "$JSSE_HOME" ]; then + CLASSPATH="${CLASSPATH}:$(build-classpath jcert jnet jsse 2>/dev/null)" +fi +CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/bootstrap.jar" +CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/tomcat-juli.jar" +export CLASSPATH + +# Configuration +MAIN_CLASS="org.apache.catalina.startup.Tool" +BASE_OPTIONS="" +BASE_FLAGS="-Dcatalina.home=\"$CATALINA_HOME\"" +BASE_JARS="commons-daemon tomcat/catalina tomcat/servlet" + +# Set parameters +set_classpath $BASE_JARS +set_flags $BASE_FLAGS +set_options $BASE_OPTIONS + +# Let's start +run "$@" diff --git a/tomcat.conf b/tomcat.conf new file mode 100644 index 0000000..d014c6b --- /dev/null +++ b/tomcat.conf @@ -0,0 +1,52 @@ +# System-wide configuration file for tomcat services +# This will be loaded by systemd as an environment file, +# so please keep the syntax. For shell expansion support +# place your custom files as /etc/tomcat/conf.d/*.conf +# +# There are 2 "classes" of startup behavior in this package. +# The old one, the default service named tomcat.service. +# The new named instances are called tomcat@instance.service. +# +# Use this file to change default values for all services. +# Change the service specific ones to affect only one service. +# For tomcat.service it's /etc/sysconfig/tomcat, for +# tomcat@instance it's /etc/sysconfig/tomcat@instance. + +# This variable is used to figure out if config is loaded or not. +TOMCAT_CFG_LOADED="1" + +# In new-style instances, if CATALINA_BASE isn't specified, it will +# be constructed by joining TOMCATS_BASE and NAME. +TOMCATS_BASE="/var/lib/tomcats/" + +# Where your java installation lives +#JAVA_HOME="/usr/libi64/jvm/jre" + +# Where your tomcat installation lives +CATALINA_HOME="@@@TCHOME@@@" + +# System-wide tmp +CATALINA_TMPDIR="/var/cache/tomcat/temp" + +# You can pass some parameters to java here if you wish to +#JAVA_OPTS="-Xminf0.1 -Xmaxf0.3" + +# Use JAVA_OPTS to set java.library.path for libtcnative.so +#JAVA_OPTS="-Djava.library.path=/usr/lib" + +# Set default javax.sql.DataSource factory to apache commons one. See rhbz#1214381 +JAVA_OPTS="-Djavax.sql.DataSource.Factory=org.apache.commons.dbcp.BasicDataSourceFactory" + +# You can change your tomcat locale here +#LANG="en_US" + +# Run tomcat under the Java Security Manager +SECURITY_MANAGER="false" + +# Time to wait in seconds, before killing process +# TODO(stingray): does nothing, fix. +# SHUTDOWN_WAIT="30" + +# If you wish to further customize your tomcat environment, +# put your own definitions here +# (i.e. LD_LIBRARY_PATH for some jdbc drivers) diff --git a/tomcat.keyring b/tomcat.keyring new file mode 100644 index 0000000..6ad5a5c --- /dev/null +++ b/tomcat.keyring @@ -0,0 +1,512 @@ +This file contains the PGP&GPG keys of various Apache developers. +Please don't use them for email unless you have to. Their main +purpose is code signing. + +Apache users: pgp < KEYS +Apache developers: + (pgpk -ll && pgpk -xa ) >> this file. + or + (gpg --fingerprint --list-sigs + && gpg --armor --export ) >> this file. + +Apache developers: please ensure that your key is also available via the +PGP keyservers (such as pgpkeys.mit.edu). + + +pub 4096R/2F6059E7 2009-09-18 + Key fingerprint = A9C5 DF4D 22E9 9998 D987 5A51 10C0 1C5A 2F60 59E7 +uid Mark E D Thomas +sub 4096R/5E763BEC 2009-09-18 + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: GPGTools - http://gpgtools.org + +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 +c3EtcnwlXI07qk8nmCl1XudlS5KHeJ5axWLEDNJCvEuJGy4moaFllwmTUtxDzRK/ +zG6QSJEPfH8VZiEl6HBpgzlBB5aToxc+Wy7UpGzwaNrA6KvwSaB+jSxrZYtHbwBq +2U3ttmamynBF1izPuOeJAn4EEAECAGgFAksM3mcgHFNhbmRlciBUZW1tZSA8c2Fu +ZGVyQHRlbW1lLm5ldD4iHFNhbmRlciBUZW1tZSA8c2N0ZW1tZUBhcGFjaGUub3Jn +Ph0cU2FuZGVyIFRlbW1lIDxzYW5kZXJAbWUuY29tPgAKCRCbuGOw9Ru4igbUD/9+ ++F4uqkO+F6g1QNiyFM47K1NaFLga/lNp72mOOIlZMORXpBJGeL9DhbDvN5KIQqR4 +I5wCONGtzeU8P7M+uLapFZmofROABlACUeVhOPx8fOCeNz9xU4f33dKJJnAsIfis +SMMyJR9Xz/IbNWvM6Kb7hU+L86G2cZPD8uvZ7oHyY4wZWtjTHM0ne/usodJffxIj +oQFhn0vAC8hBNWStI8UUih+n+iqvvXA2cB9v3Ni3VjQOGLKSZ5Ke2jpKdYTl5zST +frHfjgjGvIdkWz0hbVMzL+urU9oIChBK6Nr3DxY/XvO8PmFGh7V+M9C/gahLCrNz +fD3vKGi7OYkp6dODPnREpOSZ7elGO5mGQnSosqzrLb7kw/vEobBbxsYDwxxl+ONZ +8yxUaBpvRIrwqNEwb1YxlMCLnpRs7TJxxitq+zF7F0MxB5sqdLHSNqxcfbxpTflz +Tn/H9h34aF7f4Qkn276XKIomhge4su7jxHNH/G9gTk6oicdalBFRMFwBRpaOivno +FmSGa1Yt7C1mBBQkRXjw52ZRx8MHKnccNNgpk5Xc7+VT9nqmoulq1JfzLsrtu4D1 +TaleWOVN4X4FYk3S2VWxLV5dhmuCy7hP0ZsXOTBjLXC5wMxJcp7I3IlIx39a6U7O +vhWbguPxyXR3AjBUsMRfO0pGZKXxDI3N+yHOWAtDcokCkwQQAQIAfQUCTNK0KDUc +SmltIEphZ2llbHNraSAoUmVsZWFzZSBTaWduaW5nIEtleSkgPGppbUBhcGFjaGUu +b3JnPiAcSmltIEphZ2llbHNraSA8amltQGphZ3VORVQuY29tPh8cSmltIEphZ2ll +bHNraSA8amltQGppbWphZy5jb20+AAoJEDTqduZ5FIWo/wEP/immECQXMIMQ9zj7 +4RU2R6YV7Slzc3YATfjwOgOwzQ3qF+UTSHui7eiYoHOwRK0OTKW6fe7bh9/XeWLB +sglUl+RNuvCNHAQNg9/p7x9mJL05e3OnGpVLVnq/yQezCWo1GWIPxodwmoyI2C3S +iUapfKN1q0Ml6nwZOyHsgNCFYDVhmtEnIcK7/PXLpeYTpTBuXETZZQY++XyZDiVI +le2W3uxrY0k8zVPvGSXGIh2iHtAuCrJoNKY+webEe5QVNoAYnNyu5de+50gpQOr+ +wYsvuf7S1MAPAX2L48U/JvpBfDikZR8qujvCDAAe0bnom/Ov/eWtnONi4hpsD4T3 +kcElxWOph3mEm1YUksGmoWE0FvE6o7r04XF+VrIA/YwcgC5wGgGmYFU4DR384hMZ +1EMAsd8cKdYBja/PA4BTcA6Vc0uJVFaB8o117m7r7sHKRsD7CHbbKcK8ZtRNDQa3 +SzTMqLhsRDRl5wp9Bwq6l++BKPpvEnpbs8SdW+TxrxpM/0aIhQ6ZS5RKJvhZK3Ap +3cgYBVW23CwPtVc+40/t8XqBRRlzbLdfWhEC+FU4f9RHS+DQRFSxl/xXeLtDBH75 +1WbhkRIRTktQxapEDuRFfd02Oeo356/r0TYUQHL4bwYEbTBm+HO1KJn64BCaUMOU +pW881K8SHQaHMr1iiQUpvMkTcofRiQKpBBABAgCTBQJM0uOxIBxTYW5kZXIgVGVt +bWUgPHNhbmRlckB0ZW1tZS5uZXQ+IhxTYW5kZXIgVGVtbWUgPHNjdGVtbWVAYXBh +Y2hlLm9yZz4dHFNhbmRlciBUZW1tZSA8c2FuZGVyQG1lLmNvbT4qHFNhbmRlciBU +ZW1tZSA8c2N0ZW1tZUBrZXlzaW50aGVjbG91ZC5jb20+AAoJEJu4Y7D1G7iKG0YP +/3AweZFnchITlhDdEkozl8M89VZGTBqfU6Rg7mNxL/HDnJRtBBGXmSQ5NLygX+kS +PKci3KRbjbeVEmEcWs/ZfzxN4gR+6y8ohUOaA0UDrZYctYkzG1d7HbkcM1lmvtde +Gelj1j/+eu4LRu5h9oczkqRnWV5xnqz7xsEH9Rrcgm39RpNzFf43Joo25iqdVGk4 +yBVjoHQsnD1qZwdZQ0EHxYozNkGfa6j7VXAzCYVstfRMPGKrYH/xRg2jNy750z/p +apgT3GXbpvcB9Z3gj2LRn+FKLxoH2WLf2DabdzyZz9KXfnG4ZeOd2BrFXexKT2MQ +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 +yZUcTCEB33B2jQ9z0XUEp+6B2F5iZQ== +=4AB7 +-----END PGP PUBLIC KEY BLOCK----- + +pub rsa4096 2019-05-05 [SC] + 48F8 E69F 6390 C9F2 5CFE DCD2 6824 8959 359E 722B +uid [ultimate] Remy Maucherat +sig 3 68248959359E722B 2019-05-05 Remy Maucherat +sub rsa4096 2019-05-05 [E] +sig 68248959359E722B 2019-05-05 Remy Maucherat + +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=l4Ry +-----END PGP PUBLIC KEY BLOCK----- + diff --git a/tomcat.logrotate b/tomcat.logrotate new file mode 100644 index 0000000..1cf5a19 --- /dev/null +++ b/tomcat.logrotate @@ -0,0 +1,10 @@ +@@@TCLOG@@@/catalina.out @@@TCLOG@@@/localhost_access_log.txt @@@TCLOG@@@/host-manager.log @@@TCLOG@@@/localhost.log @@@TCLOG@@@/manager.log{ + notifempty + copytruncate + weekly + rotate 52 + compress + missingok + su tomcat tomcat + create 0644 tomcat tomcat +} diff --git a/tomcat.service b/tomcat.service new file mode 100644 index 0000000..07731a2 --- /dev/null +++ b/tomcat.service @@ -0,0 +1,25 @@ +# Systemd unit file for default tomcat +# +# To create clones of this service: +# DO NOTHING, use tomcat@.service instead. + +[Unit] +Description=Apache Tomcat Web Application Container +After=syslog.target network.target + +[Service] +TasksMax=576 +LimitNOFILE=8192 +Type=simple +EnvironmentFile=/etc/tomcat/tomcat.conf +Environment="NAME=" +EnvironmentFile=-/etc/sysconfig/tomcat +ExecStart=@LIBEXECDIR@/tomcat/server start +ExecStop=@LIBEXECDIR@/tomcat/server stop +SuccessExitStatus=143 +User=tomcat +Group=tomcat + + +[Install] +WantedBy=multi-user.target diff --git a/tomcat.sysconfig b/tomcat.sysconfig new file mode 100644 index 0000000..473a0f4 diff --git a/tomcat.wrapper b/tomcat.wrapper new file mode 100644 index 0000000..420d649 --- /dev/null +++ b/tomcat.wrapper @@ -0,0 +1,24 @@ +#!/bin/bash + +if [ "$1" = "version" ]; then + . @LIBEXECDIR@/tomcat/preamble + exec ${JAVACMD} -classpath ${CATALINA_HOME}/lib/catalina.jar \ + org.apache.catalina.util.ServerInfo +fi + +SRV="tomcat" +if [ -n "$2" ]; then + SRV="tomcat@$2" +fi + +if [ "$1" = "start" ]; then + systemctl start ${SRV}.service +elif [ "$1" = "stop" ]; then + systemctl stop ${SRV}.service +elif [ "$1" = "version" ]; then + ${JAVACMD} -classpath ${CATALINA_HOME}/lib/catalina.jar \ + org.apache.catalina.util.ServerInfo +else + echo "Usage: $0 {start|stop|version} [server-id]" + exit 1 +fi diff --git a/tomcat11.changes b/tomcat11.changes new file mode 100644 index 0000000..d8ec926 --- /dev/null +++ b/tomcat11.changes @@ -0,0 +1,119 @@ +------------------------------------------------------------------- +Tue Jun 24 10:09:09 UTC 2025 - Michele Bussolotto + +- Update to Tomcat 11.0.8 + * Fixed CVEs: + + CVE-2025-46701: refactor CGI servlet to access resources via + WebResources (bsc#1243815) + + CVE-2025-48988: limits the total number of parts in a + multi-part request and limits the size of + the headers provided with each part (bsc#1244656) + + CVE-2025-49125: Expand checks for webAppMount (bsc#1244649) + * Catalina + + Add: Support for the java:module namespace which mirrors the + java:comp namespace. + + Fix: 69690: Calling HttpServletRequest.getParameter() and related + methods for a request with content type multipart/form-data when + the mapped servlet does not have a @MultipartConfig or equivalent + should not trigger an exception. Note that calling getPart() or + getParts() is these circumstances will trigger an exception. + + Add: Support parsing of multiple path parameters separated by ; in a + single URL segment. Based on pull request #860 by Chenjp. + + Fix: 69699: Encode redirect URL used by the rewrite valve with the + session id if appropriate, and handle cross context with different + session configuration when using rewrite. + + Add: #863: Support for comments at the end of lines in text rewrite + map files to align behaviour with Apache httpd. Pull request + provided by Chenjp. + + Fix: 69706: Saved request serialization issue in FORM introduced + when allowing infinite session timeouts. + + Fix: Expand the path checks for Pre-Resources and Post-Resources + mounted at a path within the web application. + + Fix: Process possible path parameters rewrite production in the + rewrite valve. + + Fix: 69588: Enable allowLinking to be set on PreResources, + JarResources and PostResources. If not set explicitly, the setting + will be inherited from the Resources. + + Add: 69633: Support for Filters using context root mappings. + + Fix: 69643: Optimize directory listing for large amount of files. + Patch submitted by Loic de l'Eprevier. + + Fix: #843: Off by one validation logic for partial PUT ranges and + associated test case. Submitted by Chenjp. + + Refactor: GCI servlet to access resources via the WebResource API. + + Fix: 69662: Report name in exception message when a naming lookup + failure occurs. Based on code submitted by Donald Smith. + + Fix: Ensure that the FORM authentication attribute + authenticationSessionTimeout works correctly when sessions have an + infinite timeout when authentication starts. + + Add: Provide a content type based on file extension when web + application resources are accessed via a URL. + * Coyote + + Refactor: #861: TaskQueue to use the new interface RetryableQueue + which enables better integration of custom Executors which provide + their own BlockingQueue implementation. Pull request provided by + Paulo Almeida. + + Add: Finer grained control of multi-part request processing via two + new attributes on the Connector element. maxPartCount limits the + total number of parts in a multi-part request and maxPartHeaderSize + limits the size of the headers provided with each part. Add support + for these new attributes to the ParameterLimitValve. + * Jasper + + Fix: 69696: Mark the JSP wrapper for reload after a failed + compilation. + + Fix: 69635: Add support to jakarta.el.ImportHandler for resolving + inner classes. + + Add: #842: Support for optimized execution of c:set and c:remove + tags, when activated via JSP servlet param + useNonstandardTagOptimizations. + + Fix: An edge case compilation bug for JSP and tag files on case + insensitive file systems that was exposed by the test case for + 69635. + * Web applications + + Fix: 69694: Improve error reporting of deployment tasks done using + the manager webapp when a copy operation fails. + + Add: 68876: Documentation. Update the UML diagrams for server + start-up, request processing and authentication using PlantUML and + include the source files for each diagram. + * Other + + Add: Thread name to webappClassLoader.stackTraceRequestThread + message. Patch provided by Felix Zhang. + + Update: Tomcat Native to 2.0.9. + + Update: The internal fork of Apache Commons FileUpload to 1.6.0-RC1 + (2025-06-05). + + Update: EasyMock to 5.6.0. + + Update: Checkstyle to 10.25.0. + + Fix: Use the full path when the installer for Windows sets calls + icacls.exe to set file permissions. + + Update: Improvements to Japanese translations provided by tak7iji. + + Update: Jacoco to 0.8.13. + + Code: Explicitly set the locale to be used for Javadoc. For + official releases, this locale will be English (US) to support + reproducible builds. + + Update: Byte Buddy to 1.17.5. + + Update: Checkstyle to 10.23.1. + + Update: File extension to media type mappings to align with the + current list used by the Apache Web Server (httpd). + + Update: Improvements to French translations. + + Update: Improvements to Japanese translations provided by tak7iji. + +------------------------------------------------------------------- +Tue Jun 10 13:09:57 UTC 2025 - Michele Bussolotto + +- Hardening permissions (bsc#1242722) + +------------------------------------------------------------------- +Fri May 9 07:06:53 UTC 2025 - Fridrich Strba + +- Do not require standalone versions of apis that tomcat itself + carries +- Do not version dependencies + +------------------------------------------------------------------- +Fri May 2 14:56:19 UTC 2025 - Fridrich Strba + +- Make conflicts and provides more generic + +------------------------------------------------------------------- +Mon Apr 28 10:21:33 UTC 2025 - Ricardo Mestre + +- Initial packaging of tomcat11 11.0.6 diff --git a/tomcat11.spec b/tomcat11.spec new file mode 100644 index 0000000..f65c4d8 --- /dev/null +++ b/tomcat11.spec @@ -0,0 +1,847 @@ +# +# spec file for package tomcat11 +# +# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2000-2009, JPackage Project +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +%define app_name tomcat +%define jspspec_major 4 +%define jspspec_minor 0 +%define jspspec %{jspspec_major}.%{jspspec_minor} +%define servletspec_major 6 +%define servletspec_minor 1 +%define servletspec %{servletspec_major}.%{servletspec_minor} +%define elspec_major 6 +%define elspec_minor 0 +%define elspec %{elspec_major}.%{elspec_minor} +%define major_version 11 +%define minor_version 0 +%define micro_version 8 +%define java_major 1 +%define java_minor 17 +%define java_version %{java_major}.%{java_minor} +%define packdname apache-tomcat-%{version}-src +# FHS 2.3 compliant tree structure - http://www.pathname.com/fhs/2.3/ +%global basedir /srv/%{app_name} +%define appdir %{basedir}/webapps +%define bindir %{_datadir}/%{app_name}/bin +%define confdir %{_sysconfdir}/%{app_name} +%define homedir %{_datadir}/%{app_name} +%define libdir %{_javadir}/%{app_name} +%define logdir %{_localstatedir}/log/%{app_name} +%define cachedir %{_localstatedir}/cache/%{app_name} +%define tempdir %{cachedir}/temp +%define workdir %{cachedir}/work +%define tomcatappdir %{_datadir}/%{app_name}/%{app_name}-webapps +%define javac_target 17 +#Compat macro for new _fillupdir macro introduced in Nov 2017 +%if ! %{defined _fillupdir} + %define _fillupdir %{_localstatedir}/adm/fillup-templates +%endif +Name: %{app_name}%{major_version} +Version: %{major_version}.%{minor_version}.%{micro_version} +Release: 0 +Summary: Apache Servlet/JSP/EL Engine, RI for Servlet %{servletspec}/JSP %{jspspec}/EL %{elspec} API +License: Apache-2.0 +Group: Productivity/Networking/Web/Servers +URL: https://tomcat.apache.org +Source0: https://archive.apache.org/dist/%{app_name}/%{app_name}-%{major_version}/v%{version}/src/%{packdname}.tar.gz +Source1: %{app_name}.conf +Source3: %{app_name}.sysconfig +Source4: %{app_name}.wrapper +Source5: %{app_name}.logrotate +Source6: %{app_name}-digest.script +Source7: %{app_name}-tool-wrapper.script +Source11: %{app_name}.service +Source20: %{app_name}-jsvc.service +Source21: %{app_name}-functions +Source30: %{app_name}-preamble +Source31: %{app_name}-server +Source32: %{app_name}-named.service +Source100: valve.xslt +Source101: allowLinking.xslt +Source1000: %{app_name}-rpmlintrc +Source1001: https://archive.apache.org/dist/%{app_name}/%{app_name}-%{major_version}/v%{version}/src/%{packdname}.tar.gz.asc +Source1002: %{app_name}.keyring +# #PATCH-FIX-UPSTREAM: from jpackage.org package +Patch0: %{app_name}-bootstrap-MANIFEST.MF.patch +# #PATCH-FIX-UPSTREAM: from jpackage.org package +Patch1: %{app_name}-%{app_name}-users-webapp.patch +# # PATCH-FIX-OPENSUSE: build javadoc with the same java source level as the class files +Patch2: %{app_name}-javadoc.patch +# # PATCH-FIX-OPENSUSE: include all necessary aqute-bnd jars +Patch3: %{app_name}-osgi-build.patch +# PATCH-FIX-OPENSUSE: build against our ecj that does not have CompilerOptions.VERSION_16 +Patch4: %{app_name}-jdt.patch +# # PATCH-FIX-OPENSUSE: set ajp connector secreteRequired to false by default to avoid tomcat not starting +Patch5: %{app_name}-secretRequired-default.patch +Patch6: %{app_name}-fix_catalina.patch +Patch7: %{app_name}-logrotate_everything.patch +BuildRequires: ant +BuildRequires: ant-antlr +BuildRequires: apache-commons-collections +BuildRequires: apache-commons-daemon +BuildRequires: apache-commons-dbcp +BuildRequires: apache-commons-pool2 +BuildRequires: aqute-bnd +BuildRequires: ecj +BuildRequires: fdupes +BuildRequires: findutils +BuildRequires: jakarta-taglibs-standard +BuildRequires: java-devel >= 17 +BuildRequires: javapackages-local +BuildRequires: junit +BuildRequires: osgi-annotation +BuildRequires: osgi-compendium +BuildRequires: osgi-core +BuildRequires: pkgconfig +BuildRequires: sed +BuildRequires: systemd-rpm-macros +BuildRequires: tomcat-jakartaee-migration >= 1.0.7 +BuildRequires: unzip +BuildRequires: wsdl4j +BuildRequires: zip +BuildRequires: pkgconfig(systemd) +Requires: %{name}-lib = %{version}-%{release} +Requires: apache-commons-daemon +Requires: apache-commons-dbcp +Requires: apache-commons-logging +Requires: apache-commons-pool2 +Requires: java >= %{java_version} +Requires: libtcnative-1-0 >= 1.2.38 +Requires: logrotate +Requires(post): %fillup_prereq +Requires(post): libxslt-tools +# for runuser +Requires(post): util-linux +Requires(pre): shadow +Conflicts: %{app_name}-implementation +Provides: %{app_name}-implementation = %{version} +Provides: group(tomcat) +Provides: user(tomcat) +BuildArch: noarch +%systemd_ordering + +%description +Tomcat is the servlet container that is used in the official Reference +Implementation for the Java Servlet and JavaServer Pages technologies. +The Java Servlet and JavaServer Pages specifications are developed by +Sun under the Java Community Process. + +ATTENTION: This tomcat is built with java %{java_version}. + +%package admin-webapps +Summary: The host manager and manager web applications for Apache Tomcat +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version}-%{release} +Requires(post): libxslt-tools +# for runuser +Requires(post): util-linux +Conflicts: %{app_name}-implementation-admin-webapps +Provides: %{app_name}-implementation-admin-webapps = %{version} + +%description admin-webapps +The host manager and manager web-based applications for Apache Tomcat. + +%package embed +Summary: Libraries for Embedding Apache Tomcat +Group: Productivity/Networking/Web/Servers +Conflicts: %{app_name}-implementation-embed +Provides: %{app_name}-implementation-embed = %{version} + +%description embed +Embeddeding support (various libraries) for Apache Tomcat. + +%package docs-webapp +Summary: The "docs" web application for Apache Tomcat +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version}-%{release} +Requires(post): libxslt-tools +# for runuser +Requires(post): util-linux +Conflicts: %{app_name}-implementation-docs-webapp +Provides: %{app_name}-implementation-docs-webapp = %{version} + +%description docs-webapp +The documentation of web application for Apache Tomcat. + +%package el-%{elspec_major}_%{elspec_minor}-api +Summary: Expression Language v%{elspec} API +Group: Development/Libraries/Java +Requires(post): update-alternatives +Requires(preun): update-alternatives +Conflicts: %{app_name}-implementation-el-api +Provides: %{app_name}-el-%{elspec}-api = %{version}-%{release} +Provides: %{app_name}-implementation-el-api = %{version} +Provides: el_%{elspec_major}_%{elspec_minor}_api = %{version}-%{release} +Provides: el_api = %{elspec} +Obsoletes: %{app_name}-el-2_2-api < %{version} +Obsoletes: el_api < %{elspec} + +%description el-%{elspec_major}_%{elspec_minor}-api +Expression Language API version %{elspec}. + +%package doc +Summary: Javadoc generated documentation for Apache Tomcat +Group: Documentation/HTML +Conflicts: %{app_name}-implementation-javadoc +Provides: %{app_name}-implementation-javadoc = %{version} +BuildArch: noarch + +%description doc +Javadoc generated documentation files for Apache Tomcat. + +%package jsp-%{jspspec_major}_%{jspspec_minor}-api +Summary: Apache Tomcat JSP API implementation classes +Group: Productivity/Networking/Web/Servers +Requires(post): update-alternatives +Requires(postun): update-alternatives +Conflicts: %{app_name}-implementation-jsp-api +Provides: %{app_name}-implementation-jsp-api = %{version} +Provides: %{app_name}-jsp-%{jspspec}-api +Provides: jsp = %{jspspec} +Provides: jsp%{jspspec_major}%{jspspec_minor} +Obsoletes: %{app_name}-jsp-2_2-api < %{version} +Obsoletes: jsp < %{jspspec} + +%description jsp-%{jspspec_major}_%{jspspec_minor}-api +Apache Tomcat JSP API implementation classes version %{jspspec} + +%package jsvc +Summary: Apache jsvc wrapper for Apache Tomcat as separate service +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version}-%{release} +Requires: apache-commons-daemon-jsvc +Conflicts: %{app_name}-implementation-jsvc +Provides: %{app_name}-implementation-jsvc = %{version} +%systemd_ordering + +%description jsvc +Systemd service and wrapper scripts to start tomcat with jsvc, +which allows tomcat to perform some privileged operations +(e.g. bind to a port < 1024) and then switch identity to a non-privileged user. + +%package lib +Summary: Libraries needed to run the Tomcat Web container +Group: Productivity/Networking/Web/Servers +Requires: %{app_name}-el-%{elspec}-api = %{version}-%{release} +Requires: %{app_name}-jsp-%{jspspec}-api = %{version}-%{release} +Requires: %{app_name}-servlet-%{servletspec}-api = %{version}-%{release} +Requires: mvn(org.apache.tomcat:tomcat-websocket-client-api) +Requires(post): ecj >= 4.4 +Requires(preun): coreutils +Conflicts: %{app_name}-implementation-lib +Provides: %{app_name}-implementation-lib = %{version} +Provides: jakarta-commons-dbcp-tomcat5 = 1.4 +Obsoletes: jakarta-commons-dbcp-tomcat5 < 1.4 + +%description lib +Libraries required to successfully run the Tomcat Web container + +%package servlet-%{servletspec_major}_%{servletspec_minor}-api +Summary: Apache Tomcat Servlet API implementation classes +Group: Productivity/Networking/Web/Servers +Requires(post): update-alternatives +Requires(postun): update-alternatives +Conflicts: %{app_name}-implementation-servlet-api +Provides: %{app_name}-implementation-servlet-api = %{version} +Provides: %{app_name}-servlet-%{servletspec}-api = %{version}-%{release} +Provides: servlet = %{servletspec} +Provides: servlet11 +Provides: servlet60 +Obsoletes: %{app_name}-servlet-3_0-api < %{version} +Obsoletes: %{app_name}-servlet-3_1-api < %{version} +Obsoletes: servlet < %{servletspec} + +%description servlet-%{servletspec_major}_%{servletspec_minor}-api +Apache Tomcat Servlet API implementation classes version %{servletspec} + +%package webapps +Summary: ROOT and examples web applications for Apache Tomcat +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version}-%{release} +Requires: jakarta-taglibs-standard >= 1.1 +Requires(post): libxslt-tools +# for runuser +Requires(post): util-linux +Conflicts: %{app_name}-implementation-webapps +Provides: %{app_name}-implementation-webapps = %{version} + +%description webapps +The ROOT and examples web applications for Apache Tomcat + +%prep +%autosetup -p1 -n %{packdname} + +# remove pre-built binaries and windows files +find . -type f \( -name "*.bat" -o -name "*.class" -o -name Thumbs.db -o -name "*.gz" -o \ + -name "*.jar" -o -name "*.war" -o -name "*.zip" \) -print -delete + +# remove date from docs +sed -i -e '/build-date/ d' webapps/docs/tomcat-docs.xsl + +%build + +ln -s $(build-classpath jakarta-taglibs-core) webapps/examples/WEB-INF/lib/jstl.jar +ln -s $(build-classpath jakarta-taglibs-standard) webapps/examples/WEB-INF/lib/standard.jar + +export CLASSPATH= +export OPT_JAR_LIST="xalan-j2-serializer" +export ANT_OPTS=-Xmx500M + +# we don't care about the tarballs and we're going to replace +# so just create a dummy file for later removal +touch HACK +mkdir -p HACKDIR +touch HACKDIR/build.xml + +ant -Dbase.path="." \ + -Djava.%{java_minor}.home="%{java_home}" \ + -Dbuild.compiler="modern" \ + -Dcommons-collections.jar="$(build-classpath commons-collections)" \ + -Dcommons-daemon.jar="$(build-classpath commons-daemon)" \ + -Dcommons-daemon.native.src.tgz="HACK" \ + -Djasper-jdt.jar="$(build-classpath ecj/ecj)" \ + -Djdt.jar="$(build-classpath ecj/ecj)" \ + -Dtomcat-native.tar.gz="HACK" \ + -Dtomcat-native.home="." \ + -Dcommons-daemon.native.win.mgr.exe="HACK" \ + -Dnsis.exe="HACK" \ + -Djaxrpc-lib.jar="$(build-classpath geronimo-jaxrpc-1.1-api)" \ + -Dwsdl4j-lib.jar="$(build-classpath wsdl4j)" \ + -Dsaaj-api.jar="$(build-classpath geronimo-saaj-1.1-api)" \ + -Dbnd.jar="$(build-classpath aqute-bnd/biz.aQute.bnd)" \ + -Dbnd.dir="%{_javadir}/aqute-bnd" \ + -Dosgiannotation.jar="$(build-classpath osgi-annotation/osgi.annotation)" \ + -Dosgi-annotations.jar="$(build-classpath aqute-bnd/biz.aQute.bnd.annotation)" \ + -Dosgicmpn.jar="$(build-classpath osgi-compendium/osgi.cmpn)" \ + -Dosgicore.jar="$( build-classpath osgi-core/osgi.core)" \ + -Dannotation.jar="$(build-classpath aqute-bnd/biz.aQute.bnd.annotation)" \ + -Dosgicmpn.jar="$(build-classpath osgi-compendium/osgi.cmpn)" \ + -Dslf4j-api.jar="$(build-classpath slf4j/slf4j-api)" \ + -Dcommons-pool.home="$(build-classpath commons-pool2)" \ + -Dcommons-dbcp.home="$(build-classpath commons-dbcp2)" \ + -Dmigration-lib.jar="$(build-classpath tomcat-jakartaee-migration)" \ + -Dno.build.dbcp=true \ + -Dversion="%{version}" \ + -Dversion.build="%{micro_version}" \ + deploy javadoc package embed-jars + +# remove some jars that we'll replace with symlinks later +rm output/build/bin/commons-daemon.jar \ + output/build/lib/ecj.jar + +pushd output/dist/src/webapps/docs/appdev/sample/src +mkdir -p ../web/WEB-INF/classes +javac -source %{java_minor} -target %{javac_target} -cp ../../../../../../../../output/build/lib/servlet-api.jar -d ../web/WEB-INF/classes mypackage/Hello.java +pushd ../web +jar cf ../../../../../../../../output/build/webapps/docs/appdev/sample/sample.war * +popd +popd + +%install +# build initial path structure +install -d -m 0755 %{buildroot}%{_bindir} +install -d -m 0755 %{buildroot}%{_sbindir} +install -d -m 0755 %{buildroot}%{_javadocdir}/%{app_name} +install -d -m 0755 %{buildroot}%{_initddir} +install -d -m 0755 %{buildroot}%{_sysconfdir}/logrotate.d +install -d -m 0755 %{buildroot}%{_sysconfdir}/sysconfig +install -d -m 0755 %{buildroot}%{appdir} +install -d -m 0755 %{buildroot}%{tomcatappdir} +install -d -m 0755 %{buildroot}%{bindir} +install -d -m 0775 %{buildroot}%{confdir} +install -d -m 0755 %{buildroot}%{cachedir}/Catalina/localhost +install -d -m 0755 %{buildroot}%{confdir}/conf.d +/bin/echo "Place your custom *.conf files here. Shell expansion is supported." > %{buildroot}%{confdir}/conf.d/README +install -d -m 0755 %{buildroot}%{libdir} +install -d -m 0775 %{buildroot}%{logdir} +/bin/touch %{buildroot}%{logdir}/catalina.out +install -d -m 0775 %{buildroot}%{_localstatedir}/lib/tomcats +/bin/echo "%{app_name}-%{major_version}.%{minor_version}.%{micro_version} RPM installed" >> %{buildroot}%{logdir}/catalina.out +install -d -m 0775 %{buildroot}%{homedir} +install -d -m 0775 %{buildroot}%{tempdir} +install -d -m 0775 %{buildroot}%{workdir} +install -d -m 0755 %{buildroot}%{_unitdir} +install -d -m 0755 %{buildroot}%{_libexecdir}/%{app_name} +install -d -m 0755 %{buildroot}%{_fillupdir} + +cp -a %{SOURCE100} %{buildroot}%{confdir} +cp -a %{SOURCE101} %{buildroot}%{confdir} + +# move things into place +# First copy supporting libs to tomcat lib +pushd output/build + cp -a bin/*.{jar,xml} %{buildroot}%{bindir} + cp -a conf/*.{properties,xml} %{buildroot}%{confdir} + cp -a lib/*.jar %{buildroot}%{libdir} + cp -a webapps/* %{buildroot}%{tomcatappdir} +popd +# tomcat embedded +pushd output/embed + cp -a *.jar %{buildroot}%{libdir} +popd + +# doc +cp -a output/dist/webapps/docs/api/* %{buildroot}%{_javadocdir}/%{app_name} + +sed -e "s|\@\@\@TCHOME\@\@\@|%{homedir}|g" \ + -e "s|\@\@\@TCTEMP\@\@\@|%{tempdir}|g" \ + -e "s|\@\@\@LIBDIR\@\@\@|%{_libdir}|g" %{SOURCE1} \ + > %{buildroot}%{confdir}/%{app_name}.conf +sed -e "s|\@\@\@TCHOME\@\@\@|%{homedir}|g" \ + -e "s|\@\@\@TCTEMP\@\@\@|%{tempdir}|g" \ + -e "s|\@\@\@LIBDIR\@\@\@|%{_libdir}|g" %{SOURCE3} \ + > %{buildroot}%{_fillupdir}/sysconfig.%{app_name} +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE4} \ + > %{buildroot}%{_sbindir}/%{app_name} +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE11} \ + > %{buildroot}%{_unitdir}/%{app_name}.service +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE20} \ + > %{buildroot}%{_unitdir}/%{app_name}-jsvc.service +sed -e "s|\@\@\@TCLOG\@\@\@|%{logdir}|g" %{SOURCE5} \ + > %{buildroot}%{_sysconfdir}/logrotate.d/%{app_name}10 +sed -e "s|\@\@\@TCHOME\@\@\@|%{homedir}|g" \ + -e "s|\@\@\@TCTEMP\@\@\@|%{tempdir}|g" \ + -e "s|\@\@\@LIBDIR\@\@\@|%{_libdir}|g" %{SOURCE6} \ + > %{buildroot}%{_bindir}/%{app_name}-digest +sed -e "s|\@\@\@TCHOME\@\@\@|%{homedir}|g" \ + -e "s|\@\@\@TCTEMP\@\@\@|%{tempdir}|g" \ + -e "s|\@\@\@LIBDIR\@\@\@|%{_libdir}|g" %{SOURCE7} \ + > %{buildroot}%{_bindir}/%{app_name}-tool-wrapper + +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE21} \ + > %{buildroot}%{_libexecdir}/%{app_name}/functions +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE30} \ + > %{buildroot}%{_libexecdir}/%{app_name}/preamble +chmod 0755 %{buildroot}%{_libexecdir}/%{app_name}/preamble +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE31} \ + > %{buildroot}%{_libexecdir}/%{app_name}/server +chmod 0755 %{buildroot}%{_libexecdir}/%{app_name}/server +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE32} \ + > %{buildroot}%{_unitdir}/%{app_name}@.service + +ln -sf %{_sbindir}/service %{buildroot}/%{_sbindir}/rc%{app_name} +ln -sf %{_sbindir}/service %{buildroot}/%{_sbindir}/rc%{app_name}-jsvc + +# create jsp and servlet and el API symlinks +pushd %{buildroot}%{_javadir} + mv %{app_name}/jsp-api.jar %{app_name}-jsp-%{jspspec}-api.jar + ln -s %{app_name}-jsp-%{jspspec}-api.jar %{app_name}-jsp-api.jar + mv %{app_name}/servlet-api.jar %{app_name}-servlet-%{servletspec}-api.jar + ln -s %{app_name}-servlet-%{servletspec}-api.jar %{app_name}-servlet-api.jar + ln -s %{app_name}-servlet-%{servletspec}-api.jar %{app_name}-servlet.jar + mv %{app_name}/el-api.jar %{app_name}-el-%{elspec}-api.jar + ln -s %{app_name}-el-%{elspec}-api.jar %{app_name}-el-api.jar +popd + +pushd output/build + %{_bindir}/build-jar-repository -s lib commons-collections \ + commons-dbcp2 commons-pool2 ecj/ecj 2>&1 + # need to use -p here with b-j-r otherwise the examples webapp fails to + # load with a java.io.IOException + %{_bindir}/build-jar-repository -p webapps/examples/WEB-INF/lib \ + taglibs-core.jar taglibs-standard.jar 2>&1 +popd + +pushd %{buildroot}%{libdir} + # symlink JSP and servlet and el API jars + ln -s ../%{app_name}-jsp-%{jspspec}-api.jar . + ln -s ../%{app_name}-servlet-%{servletspec}-api.jar . + ln -s ../%{app_name}-el-%{elspec}-api.jar . + ln -s $(build-classpath commons-collections) commons-collections.jar + rm -f commons-dbcp.jar + ln -s $(build-classpath commons-dbcp2) commons-dbcp2.jar + ln -s $(build-classpath commons-pool2) commons-pool2.jar + rm ecj.jar + ln -s $(build-classpath ecj/ecj) ecj.jar + ln -s $(build-classpath ecj/ecj) jasper-jdt.jar + + # Temporary copy the juli jar here from %%{_datadir}/java/tomcat (for maven depmap) + cp -a %{buildroot}%{bindir}/tomcat-juli.jar ./ +popd + +# symlink to the FHS locations where we've installed things +pushd %{buildroot}%{homedir} + ln -s %{appdir} webapps + ln -s %{confdir} conf + ln -s %{libdir} lib + ln -s %{logdir} logs + ln -s %{tempdir} temp + ln -s %{workdir} work +popd + +# install sample webapp +mkdir -p %{buildroot}%{tomcatappdir}/sample +pushd %{buildroot}%{tomcatappdir}/sample +jar xf %{buildroot}%{tomcatappdir}/docs/appdev/sample/sample.war +popd + +pushd %{buildroot}%{tomcatappdir}/examples/WEB-INF/lib +ln -s -f $(build-classpath jakarta-taglibs-core) jstl.jar +ln -s -f $(build-classpath jakarta-taglibs-standard) standard.jar +popd + +rm %{buildroot}%{tomcatappdir}/docs/appdev/sample/sample.war + +# Install the maven metadata +install -d -m 0755 %{buildroot}%{_mavenpomdir} +pushd output/dist/src/res/maven +for pom in *.pom; do + # fix-up version in all pom files + sed -i 's/@MAVEN.DEPLOY.VERSION@/%{version}/g' $pom +done + +# we won't install dbcp, juli-adapters and juli-extras pom files +for libname in annotations-api catalina jasper-el jasper catalina-ha jaspic-api; do + %{mvn_install_pom} %{app_name}-$libname.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-$libname.pom + %add_maven_depmap JPP.%{app_name}-$libname.pom %{app_name}/$libname.jar +done + +# servlet-api jsp-api and el-api are not in tomcat subdir, since they are widely re-used elsewhere +%{mvn_install_pom} %{app_name}-jsp-api.pom %{buildroot}%{_mavenpomdir}/JPP-%{app_name}-jsp-api.pom +%add_maven_depmap JPP-%{app_name}-jsp-api.pom %{app_name}-jsp-api.jar -f jsp-api -a "org.eclipse.jetty.orbit:jakarta.servlet.jsp" + +%{mvn_install_pom} %{app_name}-el-api.pom %{buildroot}%{_mavenpomdir}/JPP-%{app_name}-el-api.pom +%add_maven_depmap JPP-%{app_name}-el-api.pom %{app_name}-el-api.jar -f el-api -a "org.eclipse.jetty.orbit:jakarta.el" + +%{mvn_install_pom} %{app_name}-servlet-api.pom %{buildroot}%{_mavenpomdir}/JPP-%{app_name}-servlet-api.pom +# Generate a depmap fragment javax.servlet:servlet-api pointing to +# tomcat-servlet-3.0-api for backwards compatibility +# also provide jetty depmap (originally in jetty package, but it's cleaner to have it here +%add_maven_depmap JPP-tomcat-servlet-api.pom tomcat-servlet-api.jar -f servlet-api -a "org.mortbay.jetty:servlet-api" + +# two special pom where jar files have different names +%{mvn_install_pom} %{app_name}-tribes.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-catalina-tribes.pom +%add_maven_depmap JPP.%{app_name}-catalina-tribes.pom %{app_name}/catalina-tribes.jar + +%{mvn_install_pom} %{app_name}-coyote.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-coyote.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-coyote.pom %{app_name}/%{app_name}-coyote.jar + +%{mvn_install_pom} %{app_name}-jni.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-jni.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-jni.pom %{app_name}/%{app_name}-jni.jar + +%{mvn_install_pom} %{app_name}-juli.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-juli.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-juli.pom %{app_name}/%{app_name}-juli.jar + +%{mvn_install_pom} %{app_name}-jdbc.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-jdbc.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-jdbc.pom %{app_name}/%{app_name}-jdbc.jar + +%{mvn_install_pom} %{app_name}-dbcp.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-dbcp.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-dbcp.pom %{app_name}/%{app_name}-dbcp.jar + +%{mvn_install_pom} %{app_name}-api.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-api.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-api.pom %{app_name}/%{app_name}-api.jar + +%{mvn_install_pom} %{app_name}-util.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-util.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-util.pom %{app_name}/%{app_name}-util.jar + +%{mvn_install_pom} %{app_name}-util-scan.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-util-scan.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-util-scan.pom %{app_name}/%{app_name}-util-scan.jar + +%{mvn_install_pom} %{app_name}-websocket-api.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-websocket-api.pom +%add_maven_depmap JPP.%{app_name}-websocket-api.pom %{app_name}/websocket-api.jar + +%{mvn_install_pom} %{app_name}-websocket-client-api.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-websocket-client-api.pom +%add_maven_depmap JPP.%{app_name}-websocket-client-api.pom %{app_name}/websocket-client-api.jar + +%{mvn_install_pom} %{app_name}-websocket.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-websocket.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-websocket.pom %{app_name}/%{app_name}-websocket.jar + +%{mvn_install_pom} %{app_name}-embed-core.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-embed-core.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-embed-core.pom %{app_name}/%{app_name}-embed-core.jar -f embed + +%{mvn_install_pom} %{app_name}-embed-el.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-embed-el.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-embed-el.pom %{app_name}/%{app_name}-embed-el.jar -f embed + +%{mvn_install_pom} %{app_name}-embed-jasper.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-embed-jasper.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-embed-jasper.pom %{app_name}/%{app_name}-embed-jasper.jar -f embed + +%{mvn_install_pom} %{app_name}-embed-websocket.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-embed-websocket.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-embed-websocket.pom %{app_name}/%{app_name}-embed-websocket.jar -f embed + +# replace temporary copy with link +ln -s -f %{bindir}/tomcat-juli.jar %{buildroot}%{libdir}/ + +# bnc#424675 +ln -s %{cachedir}/Catalina %{buildroot}/%{confdir} +rm -rf %{buildroot}/%{confdir}/Catalina +ln -s %{cachedir}/Catalina %{buildroot}/%{confdir}/ + +# bnc#418664 +install -d -m 0755 %{buildroot}/%{_sysconfdir}/ant.d/ +echo "tomcat/catalina-ant" > %{buildroot}/%{_sysconfdir}/ant.d/catalina-ant +%fdupes %{buildroot} /srv/%{app_name} +#bnc#565901 +ln -sf %{_sbindir}/%{app_name} %{buildroot}/%{bindir}/catalina.sh + +# Install update-alternatives content +mkdir -p %{buildroot}%{_sysconfdir}/alternatives +ln -s -f %{_sysconfdir}/alternatives/el_api %{buildroot}%{_javadir}/%{app_name}-el_api.jar +ln -s -f %{_sysconfdir}/alternatives/jsp %{buildroot}%{_javadir}/%{app_name}-jsp.jar +# To avoid conflicts with servletapi4 and servletapi5 create a link to incorrect /etc/alternatives/servlet.jar. +# It will be changed anyways to the correct symlink by update-alternatives. +ln -s -f %{_sysconfdir}/alternatives/servlet.jar %{buildroot}%{_javadir}/servlet.jar + +%pre +# add the tomcat user and group +getent group tomcat >/dev/null || %{_sbindir}/groupadd -r tomcat +getent passwd tomcat >/dev/null || %{_sbindir}/useradd -c "Apache Tomcat" \ + -g tomcat -s /sbin/nologin -r -d %{homedir} tomcat +%service_add_pre %{app_name}.service + +%post +%service_add_post %{app_name}.service +%{fillup_only %{app_name}} +chown -R tomcat:tomcat %{confdir}/server.xml +runuser -u tomcat -g tomcat -- xsltproc --output %{confdir}/server.xml %{confdir}/valve.xslt %{confdir}/server.xml + +%preun +%service_del_preun %{app_name}.service + +%postun +%service_del_postun %{app_name}.service + +%pre jsvc +%service_add_pre %{app_name}-jsvc.service + +%post jsvc +%service_add_post %{app_name}-jsvc.service + +%preun jsvc +%service_del_preun %{app_name}-jsvc.service + +%postun jsvc +%service_del_postun %{app_name}-jsvc.service + +%post el-%{elspec_major}_%{elspec_minor}-api +update-alternatives --install %{_javadir}/%{app_name}-el_api.jar el_api %{_javadir}/%{app_name}-el-%{elspec}-api.jar 20300 + +%postun el-%{elspec_major}_%{elspec_minor}-api +if [ $1 -eq 0 ] ; then + update-alternatives --remove el_api %{_javadir}/%{app_name}-el-%{elspec}-api.jar +fi + +%post jsp-%{jspspec_major}_%{jspspec_minor}-api +update-alternatives --install %{_javadir}/%{app_name}-jsp.jar jsp \ + %{_javadir}/%{app_name}-jsp-%{jspspec}-api.jar 20200 + +%postun jsp-%{jspspec_major}_%{jspspec_minor}-api +if [ $1 -eq 0 ] ; then + update-alternatives --remove jsp \ + %{_javadir}/%{app_name}-jsp-%{jspspec}-api.jar +fi + +%post servlet-%{servletspec_major}_%{servletspec_minor}-api +update-alternatives --install %{_javadir}/servlet.jar servlet \ + %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar 30000 +# Fix for bsc#1092163. +# Keep the /usr/share/java/tomcat-servlet.jar symlink for compatibility. +# In case of update from an older version where /usr/share/java/tomcat-servlet.jar is an alternatives symlink +# the update-alternatives in the new version will cause a rename tomcat-servlet.jar -> servlet.jar. +# This makes sure the %{app_name}-servlet.jar is recreated if it's missing because of the rename. +if [ ! -f %{_javadir}/%{app_name}-servlet.jar ]; then + echo "Recreating symlink %{_javadir}/%{app_name}-servlet.jar" + ln -s %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar %{_javadir}/%{app_name}-servlet.jar +fi + +%postun servlet-%{servletspec_major}_%{servletspec_minor}-api +if [ $1 -eq 0 ] ; then + if [ ! -f %{_sysconfdir}/alternatives/servlet ]; then + # servlet was removed on uninstall. + # Create a broken symlink to make sure update-alternatives works correctly and falls back + # to servletapi5 or servletapi4 if they're installed. + ln -s %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar %{_sysconfdir}/alternatives/servlet + fi + update-alternatives --remove servlet \ + %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar +fi + +%post lib +# those links are no longer needed +rm -f \ + %{libdir}/\[commons-collections-tomcat5\].jar \ + %{libdir}/\[commons-dbcp-tomcat5\].jar \ + %{libdir}/\[commons-pool-tomcat5\].jar \ + %{libdir}/\[ecj\].jar >/dev/null 2>&1 + +%post webapps +chown -R tomcat:tomcat %{tomcatappdir}/examples/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/examples/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/examples/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/examples ]; then + ln -sf %{tomcatappdir}/examples %{_datadir}/%{app_name}/webapps/examples +fi +#use the same context.xml for sample war +mkdir -p %{tomcatappdir}/ROOT/META-INF +chown -R tomcat:tomcat %{tomcatappdir}/ROOT/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/ROOT/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/examples/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/ROOT ]; then + ln -sf %{tomcatappdir}/ROOT %{_datadir}/%{app_name}/webapps/ROOT +fi +#use the same context.xml for sample war +mkdir -p %{tomcatappdir}/webapps/sample/META-INF +chown -R tomcat:tomcat %{tomcatappdir}/sample/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/sample/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/examples/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/sample ]; then + ln -sf %{tomcatappdir}/sample %{_datadir}/%{app_name}/webapps/sample +fi + +%postun webapps +if [ $1 -eq 0 ]; then # uninstall only + rm %{tomcatappdir}/ROOT/META-INF/context.xml + rm %{tomcatappdir}/sample/META-INF/context.xml +fi + +%post admin-webapps +chown -R tomcat:tomcat %{tomcatappdir}/manager/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/manager/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/manager/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/manager ]; then + ln -sf %{tomcatappdir}/manager %{_datadir}/%{app_name}/webapps/manager +fi + +chown -R tomcat:tomcat %{tomcatappdir}/host-manager/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/host-manager/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/host-manager/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/host-manager ]; then + ln -sf %{tomcatappdir}/host-manager %{_datadir}/%{app_name}/webapps/host-manager +fi + +%post docs-webapp +chown -R tomcat:tomcat %{tomcatappdir}/docs/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/docs/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/docs/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/docs ]; then + ln -sf %{tomcatappdir}/docs %{_datadir}/%{app_name}/webapps/docs +fi + +%files +%doc {LICENSE,NOTICE,RELEASE*} +%{_bindir}/%{app_name}-digest +%{_bindir}/%{app_name}-tool-wrapper +%{_sbindir}/%{app_name} +%{_unitdir}/%{app_name}.service +%{_sbindir}/rc%{app_name} +%{_unitdir}/%{app_name}@.service +%dir %{_libexecdir}/%{app_name} +%dir %{_localstatedir}/lib/%{app_name}s +%{_libexecdir}/%{app_name}/functions +%{_libexecdir}/%{app_name}/preamble +%{_libexecdir}/%{app_name}/server +#bnc#565901 +%{bindir}/catalina.sh +%config(noreplace) %{_sysconfdir}/logrotate.d/%{app_name}10 +%dir %{basedir} +%dir %{confdir} +%attr(0775,root,tomcat) %dir %{appdir} +%attr(0770,tomcat,tomcat) %dir %{logdir} +%attr(0660,tomcat,tomcat) %{logdir}/catalina.out +%attr(0770,root,tomcat) %dir %{cachedir} +%attr(0775,root,tomcat) %dir %{cachedir}/Catalina + +# tomcat group writtable dirs - bnc#625415 +%attr(0770,root,tomcat) %dir %{tempdir} +%attr(0770,root,tomcat) %dir %{workdir} +%attr(0775,root,tomcat) %dir %{tomcatappdir} + +%{confdir}/Catalina +%dir %{confdir}/conf.d +%config(noreplace) %{confdir}/conf.d/README +%config(noreplace) %{confdir}/%{app_name}.conf +%config(noreplace) %{confdir}/*.properties +%config(noreplace) %{confdir}/context.xml +%config(noreplace) %{confdir}/server.xml +# keep tomcat-users.xml readable only by root and tomcat group +%attr(0640,root,tomcat) %config(noreplace) %{confdir}/tomcat-users.xml +%config(noreplace) %{confdir}/web.xml +%config(noreplace) %{confdir}/jaspic-providers.xml +%dir %{homedir} +%{bindir}/bootstrap.jar +%{bindir}/catalina-tasks.xml +%{homedir}/lib +%{homedir}/temp +%{homedir}/webapps +%{homedir}/work +%{homedir}/logs +%{homedir}/conf +%{_fillupdir}/sysconfig.%{app_name} +%{confdir}/allowLinking.xslt +%{confdir}/valve.xslt + +%files admin-webapps +%defattr(0644,root,tomcat,0755) +%{tomcatappdir}/host-manager +%config(noreplace) %{tomcatappdir}/host-manager/META-INF/context.xml +%{tomcatappdir}/manager +%config(noreplace) %{tomcatappdir}/manager/META-INF/context.xml + +%files docs-webapp +%{tomcatappdir}/docs + +%files el-%{elspec_major}_%{elspec_minor}-api -f output/dist/src/res/maven/.mfiles-el-api +%{_javadir}/%{app_name}-el-%{elspec}-api.jar +%{_javadir}/%{app_name}-el-api.jar +%{libdir}/%{app_name}-el-%{elspec}-api.jar +%ghost %{_javadir}/%{app_name}-el_1_0_api.jar +%ghost %{_javadir}/%{app_name}-el_api.jar +%ghost %{_sysconfdir}/alternatives/%{app_name}-el_api.jar +%ghost %{_sysconfdir}/alternatives/el_1_0_api +%ghost %{_sysconfdir}/alternatives/el_api + +%files doc +%doc %{_javadocdir}/%{app_name} + +%files jsp-%{jspspec_major}_%{jspspec_minor}-api -f output/dist/src/res/maven/.mfiles-jsp-api +%{_javadir}/%{app_name}-jsp-%{jspspec}-api.jar +%{_javadir}/%{app_name}-jsp-api.jar +%ghost %{_javadir}/%{app_name}-jsp.jar +%ghost %{_sysconfdir}/alternatives/%{app_name}-jsp.jar +%ghost %{_sysconfdir}/alternatives/jsp + +%files lib -f output/dist/src/res/maven/.mfiles +%{libdir} +%dir %{bindir} +%{bindir}/tomcat-juli.jar +%exclude %{libdir}/%{app_name}-el-%{elspec}-api.jar +%exclude %{libdir}/%{app_name}*-embed-*.jar +# bnc#418664 +%dir %{_sysconfdir}/ant.d +%config(noreplace) %{_sysconfdir}/ant.d/catalina-ant + +%files embed -f output/dist/src/res/maven/.mfiles-embed +%dir %{libdir} + +%files servlet-%{servletspec_major}_%{servletspec_minor}-api -f output/dist/src/res/maven/.mfiles-servlet-api +%license LICENSE +%{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar +%{_javadir}/%{app_name}-servlet-api.jar +%{_javadir}/%{app_name}-servlet.jar +%{_javadir}/servlet.jar +%ghost %{_sysconfdir}/alternatives/tomcat-servlet.jar +%ghost %attr(-,root,root) %{_sysconfdir}/alternatives/servlet.jar +%ghost %attr(-,root,root) %{_sysconfdir}/alternatives/servlet + +%files webapps +%defattr(0644,root,tomcat,0755) +#bnc#520532 +%config(noreplace) %{tomcatappdir}/ROOT +%{tomcatappdir}/examples +%config(noreplace) %{tomcatappdir}/examples/META-INF/context.xml +%{tomcatappdir}/sample + +%files jsvc +%defattr(755,root,root,0755) +%{_unitdir}/%{app_name}-jsvc.service +%{_sbindir}/rc%{app_name}-jsvc + +%changelog diff --git a/valve.xslt b/valve.xslt new file mode 100644 index 0000000..a3c791c --- /dev/null +++ b/valve.xslt @@ -0,0 +1,16 @@ + + + + + + + + + + + + false + + + + -- 2.51.1 From 94472b2357b431c7a64cc9fff6ff3a0342b26cb1d5abe3f8247ef3b06fef5f30 Mon Sep 17 00:00:00 2001 From: Fridrich Strba Date: Thu, 14 Aug 2025 08:00:45 +0000 Subject: [PATCH 3/7] - Update to Tomcat 11.0.9 - adapt tomcat-jdt.patch * Fixed CVEs: + CVE-2025-52520: Align size tracking for multipart requests with FileUpload's use of long. (bsc#1246388) + CVE-2025-53506: Apply the initial HTTP/2 connection limits earlier. (bsc#1246318) * Catalina + Fix: Ensure application configured welcome files override the defaults when configuring an embedded web application programmatically. (markt) + Update: Optimize Request#getCharsetHolder to avoid repeated parsing when charset is null. Patch provided by morning-gu. (schultz) + Fix: Allow the default servlet to set the content length when the content length is known, no content has been written and a Writer is being used. (markt) + Fix: 69717: Correct a regression in the fix for CVE-2025-49125 that prevented access to PreResources and PostResources when mounted below the web application root with a path that was terminated with a file separator. (remm/markt) + Fix: 69731: Fix an issue that meant that the value of maxParameterCount applied was smaller than intended for multipart uploads with non-file parts when the parts were processed before query string parameters. (markt) + Fix: Align size tracking for multipart requests with FileUpload's use of long. (schultz) * Coyote + Fix: 69710: Increase the default for maxPartCount from 10 to 50. Update the documentation to provide more details on the memory requirements to support multi-part uploads while avoiding a denial of service risk. (markt) + Fix: 69713: Correctly handle an HTTP/2 data frame that includes padding when the headers include a content-length. (remm/markt) + Fix: Correctly collect statistics for HTTP/2 requests and avoid counting one request multiple times. Based on pull request #868 by qingdaoheze. (markt) + Fix: Fix JMX value for keepAliveCount on the endpoint. Also add the value of useVirtualThreads in JMX. (remm) + Fix: 69728: Remove incorrect warning when HTTP/2 is used with optional certificate verification and improve the warnings when a web application tries to use CLIENT-CERT with either HTTP/2 or a JSSE implementation of TLS 1.3. (markt) + Fix: When setting the initial HTTP/2 connection limit, apply those limits earlier. (markt) * Jasper + Code: Remove IMPL_OBJ_START from EL grammar for IDENTIFIER. (markt) + Code: Remove the INSTANCEOF and FUNCTIONSUFFIX definitions from the EL grammar as both are unused. (markt) * Web applications + Add: Documentation. Provide more explicit guidance regarding the security considerations for enabling write access to the web application via WebDAV, HTTP PUT requests or similar. (markt) + Add: Documentation. Add a section on reverse proxies to the security considerations page. (markt) * Other + Update: Update to the Eclipse JDT compiler 4.36. (markt) + Update: Update UnboundID to 7.0.3. (markt) + Update: Update Checkstyle to 10.25.1. (markt) + Update: Improvements to French translations. (remm) + Update: Improvements to Japanese translations provided by tak7iji. (markt) OBS-URL: https://build.opensuse.org/package/show/Java:packages/tomcat11?expand=0&rev=15 --- .gitattributes | 23 + .gitignore | 1 + _constraints | 7 + allowLinking.xslt | 19 + apache-tomcat-11.0.6-src.tar.gz | 3 + apache-tomcat-11.0.6-src.tar.gz.asc | 16 + apache-tomcat-11.0.8-src.tar.gz | 3 + apache-tomcat-11.0.8-src.tar.gz.asc | 16 + apache-tomcat-11.0.9-src.tar.gz | 3 + apache-tomcat-11.0.9-src.tar.gz.asc | 16 + tomcat-bootstrap-MANIFEST.MF.patch | 11 + tomcat-digest.script | 48 ++ tomcat-fix_catalina.patch | 11 + tomcat-functions | 42 ++ tomcat-javadoc.patch | 13 + tomcat-jdt.patch | 118 ++++ tomcat-jsvc.service | 21 + tomcat-logrotate_everything.patch | 12 + tomcat-named.service | 26 + tomcat-osgi-build.patch | 29 + tomcat-preamble | 61 ++ tomcat-rpmlintrc | 2 + tomcat-secretRequired-default.patch | 13 + tomcat-server | 25 + tomcat-tomcat-users-webapp.patch | 19 + tomcat-tool-wrapper.script | 48 ++ tomcat.conf | 52 ++ tomcat.keyring | 512 +++++++++++++++++ tomcat.logrotate | 10 + tomcat.service | 25 + tomcat.sysconfig | 0 tomcat.wrapper | 24 + tomcat11.changes | 182 ++++++ tomcat11.spec | 847 ++++++++++++++++++++++++++++ valve.xslt | 16 + 35 files changed, 2274 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 _constraints create mode 100644 allowLinking.xslt create mode 100644 apache-tomcat-11.0.6-src.tar.gz create mode 100644 apache-tomcat-11.0.6-src.tar.gz.asc create mode 100644 apache-tomcat-11.0.8-src.tar.gz create mode 100644 apache-tomcat-11.0.8-src.tar.gz.asc create mode 100644 apache-tomcat-11.0.9-src.tar.gz create mode 100644 apache-tomcat-11.0.9-src.tar.gz.asc create mode 100644 tomcat-bootstrap-MANIFEST.MF.patch create mode 100644 tomcat-digest.script create mode 100644 tomcat-fix_catalina.patch create mode 100644 tomcat-functions create mode 100644 tomcat-javadoc.patch create mode 100644 tomcat-jdt.patch create mode 100644 tomcat-jsvc.service create mode 100644 tomcat-logrotate_everything.patch create mode 100644 tomcat-named.service create mode 100644 tomcat-osgi-build.patch create mode 100644 tomcat-preamble create mode 100644 tomcat-rpmlintrc create mode 100644 tomcat-secretRequired-default.patch create mode 100644 tomcat-server create mode 100644 tomcat-tomcat-users-webapp.patch create mode 100644 tomcat-tool-wrapper.script create mode 100644 tomcat.conf create mode 100644 tomcat.keyring create mode 100644 tomcat.logrotate create mode 100644 tomcat.service create mode 100644 tomcat.sysconfig create mode 100644 tomcat.wrapper create mode 100644 tomcat11.changes create mode 100644 tomcat11.spec create mode 100644 valve.xslt diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/_constraints b/_constraints new file mode 100644 index 0000000..290ed62 --- /dev/null +++ b/_constraints @@ -0,0 +1,7 @@ + + + + 2048 + + + diff --git a/allowLinking.xslt b/allowLinking.xslt new file mode 100644 index 0000000..817e15c --- /dev/null +++ b/allowLinking.xslt @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/apache-tomcat-11.0.6-src.tar.gz b/apache-tomcat-11.0.6-src.tar.gz new file mode 100644 index 0000000..ec59d00 --- /dev/null +++ b/apache-tomcat-11.0.6-src.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d331ffe634a0f8976a25cbf70d088a50118e8611157c8a06eaeeabe70402eac1 +size 6923455 diff --git a/apache-tomcat-11.0.6-src.tar.gz.asc b/apache-tomcat-11.0.6-src.tar.gz.asc new file mode 100644 index 0000000..5400109 --- /dev/null +++ b/apache-tomcat-11.0.6-src.tar.gz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEqcXfTSLpmZjZh1pREMAcWi9gWecFAmfr/o8ACgkQEMAcWi9g +WecdvxAA9qQwEx53mR0rlzpXAVc5ORdDmyC/rGY59oxyCsq22sWpLPRi5NBpohv7 +xRqnnFJVi+YC8c1J+M4g+d1hJWRwC0S6auydofL2EbkKx3t6WbD+ku0syXfz+5ia +D4rOo55HZKEFXiMJexBLadC8VCTmKjT3Jng66/XLrAtlPHhcdyzaI+umbqTi2yNu +VoWVB6IDAxW6YoubouhHt35EXQTTYL8EqE6iLKsNgxHOula/Yj/L2lAgiiIU/aPV +gtJfP7WiR34Gdug/ppAdE0aatxkp+lANd5s1TPMGhmDvkI+n8tMpAeA91Q2cBoOT +KpVJvKnSID5xxiJVHRSNPgGUxR5s0USAEkLkJpKIgjwnEaIsJZwPJXepdSRaNURt +MP1/mYO9/5Fi93oUx+1RrJCmrTUlF4nA/zfSFOt49fovhU20l42zEHjFsNKVmqet +8eaBOwfjpiurr0vPklziJ3kdyV2AiiX+n9prNzAh5tZ3I9bripSWPYFG1gBw0Ln6 +As3X5EjaQto1YkLOQ9oKNzzNVKoQ5wh/dfGxr4VY0FFuXBIWRiy5IFXEZH55ssGZ +7m5jqIDUmyQ+M+J+WvdVSHJfzGO9O8Ms9DIKrEoMV9gXcz9eMtFvbECFeCDFJQit +CD3T8rL5AlbDoU+GV111a94RMiUnvZUe2EtQockfMOHP1o/LhLk= +=+ON7 +-----END PGP SIGNATURE----- diff --git a/apache-tomcat-11.0.8-src.tar.gz b/apache-tomcat-11.0.8-src.tar.gz new file mode 100644 index 0000000..10d70a6 --- /dev/null +++ b/apache-tomcat-11.0.8-src.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d1763f3c89cae11822b117ed9dd4e4379cd025a92a94717929553837db94c5b +size 7145586 diff --git a/apache-tomcat-11.0.8-src.tar.gz.asc b/apache-tomcat-11.0.8-src.tar.gz.asc new file mode 100644 index 0000000..a21b832 --- /dev/null +++ b/apache-tomcat-11.0.8-src.tar.gz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEqcXfTSLpmZjZh1pREMAcWi9gWecFAmhB4W8ACgkQEMAcWi9g +Wed9LRAAk7Z42oFegd844e7hKjv7+YUe/kBbl1QsMQvuo2pnotrZr2mbu/xjnj8D +JzrYYsN8o971yFGn/3VTfIv8TomH0ENpcm+Y8yHaVenPBE14Do+WpxpIwdRvj7w8 +/E0+UFF88uCKoZCT9udy5TgdF89XklYMau9pTPqi5kB+AXlXUeLCi2lNlZ4A1Pmm +Zn+uk+zcBXj58VVZ3mquEqW+kopwM61rg2jJmYLQToDlZ5jHm1q2Mx27wGOjNTOx +aqu1+sfQlc/zMn/NvkURZ1GdJ25L2rWG1EPdKg0Fb1142L8zBpMiNSLYthupi9gA +QqRm8zWV1su6j2rLrmoL6GfdJnpt0vpY+MuyevuB/12pp1EWuprmjFTO3pLtvA5y +PkLeCbpaGXAW75ZZw0fJGzeXN6I24X0Uwsg+2TFxLUWOuR5W87ovayXnpf6SeU3k +OP3jq7ZeJD//5C+d4nhPTR+BMrlceIMWR9z8bVGkFaAcjIUvSZ9kwrmO7GGUQxUM +appmtbrmtRkTsHciaVpyfhcxOm6KcIbTbkZI4g3pwS0NUPIGHmgcQWE2RS4YxEHp +8PwP9dOnlC102Pf8B4d6u3JN3EgyB9BR9mw8Ge4xkCldHQeSuQEZuUIVzIM7ey7k +heWNDzFKad+J9SruayyQiJHXjyzpXfTLzNuY7e/lGgPUsY0OmVo= +=GwjZ +-----END PGP SIGNATURE----- diff --git a/apache-tomcat-11.0.9-src.tar.gz b/apache-tomcat-11.0.9-src.tar.gz new file mode 100644 index 0000000..50744af --- /dev/null +++ b/apache-tomcat-11.0.9-src.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec730c795382eaf5bf26bb0efbe0f974497f7e47ce44b6a2c5808f519703dd78 +size 7149332 diff --git a/apache-tomcat-11.0.9-src.tar.gz.asc b/apache-tomcat-11.0.9-src.tar.gz.asc new file mode 100644 index 0000000..089c82a --- /dev/null +++ b/apache-tomcat-11.0.9-src.tar.gz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEqcXfTSLpmZjZh1pREMAcWi9gWecFAmhkURgACgkQEMAcWi9g +WeckXQ//fn7jwCs78FjdqvF65OV3hTkhWcmd7JHBc0at/9ol/FofUE2s4VanpqKc +ykjQuxbHMA/gajpgvUNeW0CuJjlFAfRPl0pibCw3rdkUHH5i/JO65zvNpN0wQjWj +8Jxb8KZfgn0LtQnYSa4h7hFN3D17GiAJkmWgdpJY/fJpeQep3zBvEX0WZx6bSQfn +zEBmbXVC+oLd+M60j/q9K2cwpl8QVqy2kKejvIS0pz4Nugg9jm/MifwMAAfzqhoO +L2xstI3sTxpAQfuD3tHuqjuUKIcX+QnyfeBdTNAizP7nuwy4jb262HoWO42reJCz +MTe3kzeev0BvemdCVBvT6ZURgoYfpVtGlzRu79/8kxmyayvqAFSVBOZEz0G9IkXL +L9MdLCIwIZqEU7gM2k7Ayi2jrnBDj1edAX/C+/qFCwU8juXCpxLMGEwwld1ns14n +XZ8NsFjKSZ01a2bowLtGXrj0yWGyGTt1lhj6vMNQl1v7c3/e+kuwBQkB0yZVjrZu +lbA2WHZT5B0RFG3QgFucvRRJwHxdFZ8ZApYpNcdkwT58Lz1ZF1t7ovg5lWBdB9MN +izN925A0zAbt8is3++d0J7QRcVopCHd+551f4pZID0upiBb5IBOB7GPF0/6ucRac +LiGm74GGISa1OLu545N6g8m3r1CzhfAktcd+no/25WgoaeN04ro= +=TW1e +-----END PGP SIGNATURE----- diff --git a/tomcat-bootstrap-MANIFEST.MF.patch b/tomcat-bootstrap-MANIFEST.MF.patch new file mode 100644 index 0000000..e0ee35d --- /dev/null +++ b/tomcat-bootstrap-MANIFEST.MF.patch @@ -0,0 +1,11 @@ +Index: apache-tomcat-11.0.5-src/res/META-INF/bootstrap.jar.manifest +=================================================================== +--- apache-tomcat-11.0.5-src.orig/res/META-INF/bootstrap.jar.manifest ++++ apache-tomcat-11.0.5-src/res/META-INF/bootstrap.jar.manifest +@@ -1,6 +1,5 @@ + Manifest-Version: 1.0 + Main-Class: org.apache.catalina.startup.Bootstrap +-Class-Path: commons-daemon.jar + Specification-Title: Apache Tomcat Bootstrap + Specification-Version: @VERSION_MAJOR_MINOR@ + Specification-Vendor: Apache Software Foundation diff --git a/tomcat-digest.script b/tomcat-digest.script new file mode 100644 index 0000000..2f3cacf --- /dev/null +++ b/tomcat-digest.script @@ -0,0 +1,48 @@ +#!/bin/sh +# +# tomcat-digest script +# JPackage Project + +# Set default JAVA_HOME +export JAVA_HOME="${JAVA_HOME:-%{?java_home}}" + +# Source functions library +if [ -f /usr/share/java-utils/java-functions ] ; then + . /usr/share/java-utils/java-functions +else + echo "Can't find functions library, aborting" + exit 1 +fi + +# Get the tomcat config (use this for environment specific settings) +if [ -z "${TOMCAT_CFG}" ]; then + TOMCAT_CFG="/etc/tomcat/tomcat.conf" +fi + +if [ -r "$TOMCAT_CFG" ]; then + . $TOMCAT_CFG +fi + +set_javacmd + +# CLASSPATH munging +if [ -n "$JSSE_HOME" ]; then + CLASSPATH="${CLASSPATH}:$(build-classpath jcert jnet jsse 2>/dev/null)" +fi +CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/bootstrap.jar" +CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/tomcat-juli.jar" +export CLASSPATH + +# Configuration +MAIN_CLASS="org.apache.catalina.startup.Tool" +BASE_FLAGS="-Dcatalina.home=\"$CATALINA_HOME\"" +BASE_OPTIONS="" +BASE_JARS="commons-daemon tomcat/catalina tomcat/servlet" + +# Set parameters +set_classpath $BASE_JARS +set_flags $BASE_FLAGS +set_options $BASE_OPTIONS + +# Let's start +run -server org.apache.catalina.realm.RealmBase "$@" diff --git a/tomcat-fix_catalina.patch b/tomcat-fix_catalina.patch new file mode 100644 index 0000000..69ad0dc --- /dev/null +++ b/tomcat-fix_catalina.patch @@ -0,0 +1,11 @@ +Index: apache-tomcat-11.0.5-src/conf/logging.properties +=================================================================== +--- apache-tomcat-11.0.5-src.orig/conf/logging.properties ++++ apache-tomcat-11.0.5-src/conf/logging.properties +@@ -74,3 +74,6 @@ org.apache.catalina.core.ContainerBase.[ + + # To see debug messages for WebSocket handling, uncomment the following line: + #org.apache.tomcat.websocket.level = FINE ++ ++1catalina.org.apache.juli.AsyncFileHandler.suffix = out ++1catalina.org.apache.juli.AsyncFileHandler.rotatable = false diff --git a/tomcat-functions b/tomcat-functions new file mode 100644 index 0000000..721021c --- /dev/null +++ b/tomcat-functions @@ -0,0 +1,42 @@ +#!/bin/bash + +if [ -r /usr/share/java-utils/java-functions ]; then + . /usr/share/java-utils/java-functions +else + echo "Can't read Java functions library, aborting" + exit 1 +fi + +_save_function() { + local ORIG_FUNC=$(declare -f $1) + local NEWNAME_FUNC="$2${ORIG_FUNC#$1}" + eval "$NEWNAME_FUNC" +} + +run_jsvc(){ + if [ -x /usr/bin/jsvc ]; then + TOMCAT_USER="tomcat" + JSVC="/usr/bin/jsvc" + + JSVC_OPTS="-nodetach -pidfile /var/run/jsvc-tomcat${NAME}.pid -user ${TOMCAT_USER} -outfile ${CATALINA_BASE}/logs/catalina.out -errfile ${CATALINA_BASE}/logs/catalina.out" + if [ "$1" = "stop" ]; then + JSVC_OPTS="${JSVC_OPTS} -stop" + fi + + exec "${JSVC}" ${JSVC_OPTS} ${FLAGS} -classpath "${CLASSPATH}" ${OPTIONS} "${MAIN_CLASS}" "${@}" + else + echo "Can't find /usr/bin/jsvc executable" + fi + +} + +_save_function run run_java + +run() { + if [ "${USE_JSVC}" = "true" ] ; then + run_jsvc $@ + else + run_java $@ + fi +} + diff --git a/tomcat-javadoc.patch b/tomcat-javadoc.patch new file mode 100644 index 0000000..60c8d07 --- /dev/null +++ b/tomcat-javadoc.patch @@ -0,0 +1,13 @@ +Index: apache-tomcat-11.0.5-src/build.xml +=================================================================== +--- apache-tomcat-11.0.5-src.orig/build.xml ++++ apache-tomcat-11.0.5-src/build.xml +@@ -2416,8 +2416,6 @@ + + + +- +- + + + diff --git a/tomcat-jdt.patch b/tomcat-jdt.patch new file mode 100644 index 0000000..897d152 --- /dev/null +++ b/tomcat-jdt.patch @@ -0,0 +1,118 @@ +Index: apache-tomcat-11.0.9-src/java/org/apache/jasper/compiler/JDTCompiler.java +=================================================================== +--- apache-tomcat-11.0.9-src.orig/java/org/apache/jasper/compiler/JDTCompiler.java ++++ apache-tomcat-11.0.9-src/java/org/apache/jasper/compiler/JDTCompiler.java +@@ -318,23 +318,23 @@ public class JDTCompiler extends org.apa + } else if (opt.equals("15")) { + settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_15); + } else if (opt.equals("16")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_16); ++ settings.put(CompilerOptions.OPTION_Source, "16"); + } else if (opt.equals("17")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_Source, "17"); + } else if (opt.equals("18")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_18); ++ settings.put(CompilerOptions.OPTION_Source, "18"); + } else if (opt.equals("19")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_19); ++ settings.put(CompilerOptions.OPTION_Source, "19"); + } else if (opt.equals("20")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_20); ++ settings.put(CompilerOptions.OPTION_Source, "20"); + } else if (opt.equals("21")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_21); ++ settings.put(CompilerOptions.OPTION_Source, "21"); + } else if (opt.equals("22")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_22); ++ settings.put(CompilerOptions.OPTION_Source, "22"); + } else if (opt.equals("23")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_23); ++ settings.put(CompilerOptions.OPTION_Source, "23"); + } else if (opt.equals("24")) { +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_24); ++ settings.put(CompilerOptions.OPTION_Source, "24"); + } else if (opt.equals("25")) { + // Constant not available in latest ECJ version shipped with + // Tomcat. May be supported in a snapshot build. +@@ -342,11 +342,11 @@ public class JDTCompiler extends org.apa + settings.put(CompilerOptions.OPTION_Source, "25"); + } else { + log.warn(Localizer.getMessage("jsp.warning.unknown.sourceVM", opt)); +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_Source, "17"); + } + } else { + // Default to 17 +- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_Source, "17"); + } + + // Target JVM +@@ -396,32 +396,32 @@ public class JDTCompiler extends org.apa + settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_15); + settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_15); + } else if (opt.equals("16")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_16); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_16); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "16"); ++ settings.put(CompilerOptions.OPTION_Compliance, "16"); + } else if (opt.equals("17")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_17); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "17"); ++ settings.put(CompilerOptions.OPTION_Compliance, "17"); + } else if (opt.equals("18")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_18); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_18); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "18"); ++ settings.put(CompilerOptions.OPTION_Compliance, "18"); + } else if (opt.equals("19")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_19); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_19); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "19"); ++ settings.put(CompilerOptions.OPTION_Compliance, "19"); + } else if (opt.equals("20")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_20); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_20); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "20"); ++ settings.put(CompilerOptions.OPTION_Compliance, "20"); + } else if (opt.equals("21")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_21); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_21); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "21"); ++ settings.put(CompilerOptions.OPTION_Compliance, "21"); + } else if (opt.equals("22")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_22); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_22); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "22"); ++ settings.put(CompilerOptions.OPTION_Compliance, "22"); + } else if (opt.equals("23")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_23); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_23); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "23"); ++ settings.put(CompilerOptions.OPTION_Compliance, "23"); + } else if (opt.equals("24")) { +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_24); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_24); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "24"); ++ settings.put(CompilerOptions.OPTION_Compliance, "24"); + } else if (opt.equals("25")) { + // Constant not available in latest ECJ version shipped with + // Tomcat. May be supported in a snapshot build. +@@ -430,12 +430,12 @@ public class JDTCompiler extends org.apa + settings.put(CompilerOptions.OPTION_Compliance, "25"); + } else { + log.warn(Localizer.getMessage("jsp.warning.unknown.targetVM", opt)); +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "17"); + } + } else { + // Default to 17 +- settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_17); +- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_17); ++ settings.put(CompilerOptions.OPTION_TargetPlatform, "17"); ++ settings.put(CompilerOptions.OPTION_Compliance, "17"); + } + + final IProblemFactory problemFactory = new DefaultProblemFactory(Locale.getDefault()); diff --git a/tomcat-jsvc.service b/tomcat-jsvc.service new file mode 100644 index 0000000..34f8a26 --- /dev/null +++ b/tomcat-jsvc.service @@ -0,0 +1,21 @@ +# Systemd unit file for tomcat +# +# To create clones of this service: +# 1) By default SERVICE_NAME=tomcat. When cloned, the value must be defined +# before tomcat-sysd is called. +# 2) Create /etc/sysconfig/${SERVICE_NAME} from /etc/sysconfig/tomcat +# to override tomcat defaults + +[Unit] +Description=Apache Tomcat Web Application Container JSVC wrapper +After=syslog.target network.target + +[Service] +Type=simple +EnvironmentFile=/etc/tomcat/tomcat.conf +Environment="NAME=" "USE_JSVC=true" +ExecStart=@LIBEXECDIR@/tomcat/server start +ExecStop=@LIBEXECDIR@/tomcat/server stop + +[Install] +WantedBy=multi-user.target diff --git a/tomcat-logrotate_everything.patch b/tomcat-logrotate_everything.patch new file mode 100644 index 0000000..1248a85 --- /dev/null +++ b/tomcat-logrotate_everything.patch @@ -0,0 +1,12 @@ +Index: apache-tomcat-11.0.5-src/conf/logging.properties +=================================================================== +--- apache-tomcat-11.0.5-src.orig/conf/logging.properties ++++ apache-tomcat-11.0.5-src/conf/logging.properties +@@ -77,3 +77,7 @@ org.apache.catalina.core.ContainerBase.[ + + 1catalina.org.apache.juli.AsyncFileHandler.suffix = out + 1catalina.org.apache.juli.AsyncFileHandler.rotatable = false ++ ++2localhost.org.apache.juli.AsyncFileHandler.rotatable = false ++3manager.org.apache.juli.AsyncFileHandler.rotatable = false ++4host-manager.org.apache.juli.AsyncFileHandler.rotatable = false diff --git a/tomcat-named.service b/tomcat-named.service new file mode 100644 index 0000000..2d742a7 --- /dev/null +++ b/tomcat-named.service @@ -0,0 +1,26 @@ +# Systemd unit file for tomcat instances. +# +# To create clones of this service: +# 0. systemctl enable tomcat@name.service +# 1. create catalina.base directory structure in +# /var/lib/tomcats/name +# 2. profit. + +[Unit] +Description=Apache Tomcat Web Application Container +After=syslog.target network.target + +[Service] +Type=simple +EnvironmentFile=/etc/tomcat/tomcat.conf +Environment="NAME=%I" +EnvironmentFile=-/etc/sysconfig/tomcat@%I +ExecStart=@LIBEXECDIR@/tomcat/server start +ExecStop=@LIBEXECDIR@/tomcat/server stop +SuccessExitStatus=143 +User=tomcat +Group=tomcat + +[Install] +WantedBy=multi-user.target + diff --git a/tomcat-osgi-build.patch b/tomcat-osgi-build.patch new file mode 100644 index 0000000..737fe51 --- /dev/null +++ b/tomcat-osgi-build.patch @@ -0,0 +1,29 @@ +Index: apache-tomcat-11.0.5-src/build.xml +=================================================================== +--- apache-tomcat-11.0.5-src.orig/build.xml ++++ apache-tomcat-11.0.5-src/build.xml +@@ -231,9 +231,9 @@ + + + +- + + ++ + + + +@@ -3973,6 +3973,13 @@ Read the Building page on the Apache Tom + + + ++ ++ ++ ++ ++ ++ ++ + + + diff --git a/tomcat-preamble b/tomcat-preamble new file mode 100644 index 0000000..23c40dd --- /dev/null +++ b/tomcat-preamble @@ -0,0 +1,61 @@ +#!/bin/bash + +. @LIBEXECDIR@/tomcat/functions + +# Get the tomcat config (use this for environment specific settings) + +if [ -z "${TOMCAT_CFG_LOADED}" ]; then + if [ -z "${TOMCAT_CFG}" ]; then + TOMCAT_CFG="/etc/tomcat/tomcat.conf" + fi + . $TOMCAT_CFG +fi + +if [ -d "${TOMCAT_CONFD=/etc/tomcat/conf.d}" ]; then + for file in ${TOMCAT_CONFD}/*.conf ; do + if [ -f "$file" ] ; then + . "$file" + fi + done +fi + +if [ -z "$CATALINA_BASE" ]; then + if [ -n "$NAME" ]; then + if [ -z "$TOMCATS_BASE" ]; then + TOMCATS_BASE="/var/lib/tomcats/" + fi + CATALINA_BASE="${TOMCATS_BASE}${NAME}" + else + CATALINA_BASE="${CATALINA_HOME}" + fi +fi + +# Include the optional setenv.sh script. +# (See section 3.4 of https://tomcat.apache.org/tomcat-8.0-doc/RUNNING.txt) +if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then + . "$CATALINA_BASE/bin/setenv.sh" +elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then + . "$CATALINA_HOME/bin/setenv.sh" +fi + +VERBOSE=1 +set_javacmd +cd ${CATALINA_HOME} +# CLASSPATH munging +if [ ! -z "$CLASSPATH" ] ; then + CLASSPATH="$CLASSPATH": +fi + +if [ -n "$JSSE_HOME" ]; then + CLASSPATH="${CLASSPATH}$(build-classpath jcert jnet jsse 2>/dev/null):" +fi +CLASSPATH="${CLASSPATH}${CATALINA_HOME}/bin/bootstrap.jar" +CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/tomcat-juli.jar" +CLASSPATH="${CLASSPATH}:$(build-classpath commons-daemon 2>/dev/null)" + +if [ -z "$LOGGING_PROPERTIES" ] ; then + LOGGING_PROPERTIES="${CATALINA_BASE}/conf/logging.properties" + if [ ! -f "${LOGGING_PROPERTIES}" ] ; then + LOGGING_PROPERTIES="${CATALINA_HOME}/conf/logging.properties" + fi +fi diff --git a/tomcat-rpmlintrc b/tomcat-rpmlintrc new file mode 100644 index 0000000..20bc763 --- /dev/null +++ b/tomcat-rpmlintrc @@ -0,0 +1,2 @@ +#fix of bnc#520532 +addFilter(".*non-etc-or-var-file-marked-as-conffile /usr/share/tomcat/tomcat-webapps/ROOT.*") diff --git a/tomcat-secretRequired-default.patch b/tomcat-secretRequired-default.patch new file mode 100644 index 0000000..3d5932d --- /dev/null +++ b/tomcat-secretRequired-default.patch @@ -0,0 +1,13 @@ +Index: apache-tomcat-11.0.5-src/java/org/apache/coyote/ajp/AbstractAjpProtocol.java +=================================================================== +--- apache-tomcat-11.0.5-src.orig/java/org/apache/coyote/ajp/AbstractAjpProtocol.java ++++ apache-tomcat-11.0.5-src/java/org/apache/coyote/ajp/AbstractAjpProtocol.java +@@ -155,7 +155,7 @@ public abstract class AbstractAjpProtoco + } + + +- private boolean secretRequired = true; ++ private boolean secretRequired = false; + + public void setSecretRequired(boolean secretRequired) { + this.secretRequired = secretRequired; diff --git a/tomcat-server b/tomcat-server new file mode 100644 index 0000000..18eb831 --- /dev/null +++ b/tomcat-server @@ -0,0 +1,25 @@ +#!/bin/bash + +. @LIBEXECDIR@/tomcat/preamble + +MAIN_CLASS=org.apache.catalina.startup.Bootstrap + +FLAGS="$JAVA_OPTS" +OPTIONS="-Dcatalina.base=$CATALINA_BASE \ +-Dcatalina.home=$CATALINA_HOME \ +-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS \ +-Djava.io.tmpdir=$CATALINA_TMPDIR \ +-Djava.util.logging.config.file=${LOGGING_PROPERTIES} \ +-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" + +if [ "$1" = "start" ] ; then + FLAGS="${FLAGS} $CATALINA_OPTS" + if [ "${SECURITY_MANAGER}" = "true" ] ; then + OPTIONS="${OPTIONS} \ + -Djava.security.manager \ + -Djava.security.policy==${CATALINA_BASE}/conf/catalina.policy" + fi + run start +elif [ "$1" = "stop" ] ; then + run stop +fi diff --git a/tomcat-tomcat-users-webapp.patch b/tomcat-tomcat-users-webapp.patch new file mode 100644 index 0000000..0257617 --- /dev/null +++ b/tomcat-tomcat-users-webapp.patch @@ -0,0 +1,19 @@ +Index: apache-tomcat-11.0.5-src/conf/tomcat-users.xml +=================================================================== +--- apache-tomcat-11.0.5-src.orig/conf/tomcat-users.xml ++++ apache-tomcat-11.0.5-src/conf/tomcat-users.xml +@@ -53,4 +53,14 @@ + + + --> ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + diff --git a/tomcat-tool-wrapper.script b/tomcat-tool-wrapper.script new file mode 100644 index 0000000..a342e17 --- /dev/null +++ b/tomcat-tool-wrapper.script @@ -0,0 +1,48 @@ +#!/bin/sh +# +# tomcat-digest script +# JPackage Project + +# Set default JAVA_HOME +export JAVA_HOME="${JAVA_HOME:-%{?java_home}}" + +# Source functions library +if [ -f /usr/share/java-utils/java-functions ] ; then + . /usr/share/java-utils/java-functions +else + echo "Can't find functions library, aborting" + exit 1 +fi + +# Get the tomcat config (use this for environment specific settings) +if [ -z "${TOMCAT_CFG}" ]; then + TOMCAT_CFG="/etc/tomcat/tomcat.conf" +fi + +if [ -r "$TOMCAT_CFG" ]; then + . $TOMCAT_CFG +fi + +set_javacmd + +# CLASSPATH munging +if [ -n "$JSSE_HOME" ]; then + CLASSPATH="${CLASSPATH}:$(build-classpath jcert jnet jsse 2>/dev/null)" +fi +CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/bootstrap.jar" +CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/tomcat-juli.jar" +export CLASSPATH + +# Configuration +MAIN_CLASS="org.apache.catalina.startup.Tool" +BASE_OPTIONS="" +BASE_FLAGS="-Dcatalina.home=\"$CATALINA_HOME\"" +BASE_JARS="commons-daemon tomcat/catalina tomcat/servlet" + +# Set parameters +set_classpath $BASE_JARS +set_flags $BASE_FLAGS +set_options $BASE_OPTIONS + +# Let's start +run "$@" diff --git a/tomcat.conf b/tomcat.conf new file mode 100644 index 0000000..d014c6b --- /dev/null +++ b/tomcat.conf @@ -0,0 +1,52 @@ +# System-wide configuration file for tomcat services +# This will be loaded by systemd as an environment file, +# so please keep the syntax. For shell expansion support +# place your custom files as /etc/tomcat/conf.d/*.conf +# +# There are 2 "classes" of startup behavior in this package. +# The old one, the default service named tomcat.service. +# The new named instances are called tomcat@instance.service. +# +# Use this file to change default values for all services. +# Change the service specific ones to affect only one service. +# For tomcat.service it's /etc/sysconfig/tomcat, for +# tomcat@instance it's /etc/sysconfig/tomcat@instance. + +# This variable is used to figure out if config is loaded or not. +TOMCAT_CFG_LOADED="1" + +# In new-style instances, if CATALINA_BASE isn't specified, it will +# be constructed by joining TOMCATS_BASE and NAME. +TOMCATS_BASE="/var/lib/tomcats/" + +# Where your java installation lives +#JAVA_HOME="/usr/libi64/jvm/jre" + +# Where your tomcat installation lives +CATALINA_HOME="@@@TCHOME@@@" + +# System-wide tmp +CATALINA_TMPDIR="/var/cache/tomcat/temp" + +# You can pass some parameters to java here if you wish to +#JAVA_OPTS="-Xminf0.1 -Xmaxf0.3" + +# Use JAVA_OPTS to set java.library.path for libtcnative.so +#JAVA_OPTS="-Djava.library.path=/usr/lib" + +# Set default javax.sql.DataSource factory to apache commons one. See rhbz#1214381 +JAVA_OPTS="-Djavax.sql.DataSource.Factory=org.apache.commons.dbcp.BasicDataSourceFactory" + +# You can change your tomcat locale here +#LANG="en_US" + +# Run tomcat under the Java Security Manager +SECURITY_MANAGER="false" + +# Time to wait in seconds, before killing process +# TODO(stingray): does nothing, fix. +# SHUTDOWN_WAIT="30" + +# If you wish to further customize your tomcat environment, +# put your own definitions here +# (i.e. LD_LIBRARY_PATH for some jdbc drivers) diff --git a/tomcat.keyring b/tomcat.keyring new file mode 100644 index 0000000..6ad5a5c --- /dev/null +++ b/tomcat.keyring @@ -0,0 +1,512 @@ +This file contains the PGP&GPG keys of various Apache developers. +Please don't use them for email unless you have to. Their main +purpose is code signing. + +Apache users: pgp < KEYS +Apache developers: + (pgpk -ll && pgpk -xa ) >> this file. + or + (gpg --fingerprint --list-sigs + && gpg --armor --export ) >> this file. + +Apache developers: please ensure that your key is also available via the +PGP keyservers (such as pgpkeys.mit.edu). + + +pub 4096R/2F6059E7 2009-09-18 + Key fingerprint = A9C5 DF4D 22E9 9998 D987 5A51 10C0 1C5A 2F60 59E7 +uid Mark E D Thomas +sub 4096R/5E763BEC 2009-09-18 + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: GPGTools - http://gpgtools.org + +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 +c3EtcnwlXI07qk8nmCl1XudlS5KHeJ5axWLEDNJCvEuJGy4moaFllwmTUtxDzRK/ +zG6QSJEPfH8VZiEl6HBpgzlBB5aToxc+Wy7UpGzwaNrA6KvwSaB+jSxrZYtHbwBq +2U3ttmamynBF1izPuOeJAn4EEAECAGgFAksM3mcgHFNhbmRlciBUZW1tZSA8c2Fu +ZGVyQHRlbW1lLm5ldD4iHFNhbmRlciBUZW1tZSA8c2N0ZW1tZUBhcGFjaGUub3Jn +Ph0cU2FuZGVyIFRlbW1lIDxzYW5kZXJAbWUuY29tPgAKCRCbuGOw9Ru4igbUD/9+ ++F4uqkO+F6g1QNiyFM47K1NaFLga/lNp72mOOIlZMORXpBJGeL9DhbDvN5KIQqR4 +I5wCONGtzeU8P7M+uLapFZmofROABlACUeVhOPx8fOCeNz9xU4f33dKJJnAsIfis +SMMyJR9Xz/IbNWvM6Kb7hU+L86G2cZPD8uvZ7oHyY4wZWtjTHM0ne/usodJffxIj +oQFhn0vAC8hBNWStI8UUih+n+iqvvXA2cB9v3Ni3VjQOGLKSZ5Ke2jpKdYTl5zST +frHfjgjGvIdkWz0hbVMzL+urU9oIChBK6Nr3DxY/XvO8PmFGh7V+M9C/gahLCrNz +fD3vKGi7OYkp6dODPnREpOSZ7elGO5mGQnSosqzrLb7kw/vEobBbxsYDwxxl+ONZ +8yxUaBpvRIrwqNEwb1YxlMCLnpRs7TJxxitq+zF7F0MxB5sqdLHSNqxcfbxpTflz +Tn/H9h34aF7f4Qkn276XKIomhge4su7jxHNH/G9gTk6oicdalBFRMFwBRpaOivno +FmSGa1Yt7C1mBBQkRXjw52ZRx8MHKnccNNgpk5Xc7+VT9nqmoulq1JfzLsrtu4D1 +TaleWOVN4X4FYk3S2VWxLV5dhmuCy7hP0ZsXOTBjLXC5wMxJcp7I3IlIx39a6U7O +vhWbguPxyXR3AjBUsMRfO0pGZKXxDI3N+yHOWAtDcokCkwQQAQIAfQUCTNK0KDUc +SmltIEphZ2llbHNraSAoUmVsZWFzZSBTaWduaW5nIEtleSkgPGppbUBhcGFjaGUu +b3JnPiAcSmltIEphZ2llbHNraSA8amltQGphZ3VORVQuY29tPh8cSmltIEphZ2ll +bHNraSA8amltQGppbWphZy5jb20+AAoJEDTqduZ5FIWo/wEP/immECQXMIMQ9zj7 +4RU2R6YV7Slzc3YATfjwOgOwzQ3qF+UTSHui7eiYoHOwRK0OTKW6fe7bh9/XeWLB +sglUl+RNuvCNHAQNg9/p7x9mJL05e3OnGpVLVnq/yQezCWo1GWIPxodwmoyI2C3S +iUapfKN1q0Ml6nwZOyHsgNCFYDVhmtEnIcK7/PXLpeYTpTBuXETZZQY++XyZDiVI +le2W3uxrY0k8zVPvGSXGIh2iHtAuCrJoNKY+webEe5QVNoAYnNyu5de+50gpQOr+ +wYsvuf7S1MAPAX2L48U/JvpBfDikZR8qujvCDAAe0bnom/Ov/eWtnONi4hpsD4T3 +kcElxWOph3mEm1YUksGmoWE0FvE6o7r04XF+VrIA/YwcgC5wGgGmYFU4DR384hMZ +1EMAsd8cKdYBja/PA4BTcA6Vc0uJVFaB8o117m7r7sHKRsD7CHbbKcK8ZtRNDQa3 +SzTMqLhsRDRl5wp9Bwq6l++BKPpvEnpbs8SdW+TxrxpM/0aIhQ6ZS5RKJvhZK3Ap +3cgYBVW23CwPtVc+40/t8XqBRRlzbLdfWhEC+FU4f9RHS+DQRFSxl/xXeLtDBH75 +1WbhkRIRTktQxapEDuRFfd02Oeo356/r0TYUQHL4bwYEbTBm+HO1KJn64BCaUMOU +pW881K8SHQaHMr1iiQUpvMkTcofRiQKpBBABAgCTBQJM0uOxIBxTYW5kZXIgVGVt +bWUgPHNhbmRlckB0ZW1tZS5uZXQ+IhxTYW5kZXIgVGVtbWUgPHNjdGVtbWVAYXBh +Y2hlLm9yZz4dHFNhbmRlciBUZW1tZSA8c2FuZGVyQG1lLmNvbT4qHFNhbmRlciBU +ZW1tZSA8c2N0ZW1tZUBrZXlzaW50aGVjbG91ZC5jb20+AAoJEJu4Y7D1G7iKG0YP +/3AweZFnchITlhDdEkozl8M89VZGTBqfU6Rg7mNxL/HDnJRtBBGXmSQ5NLygX+kS +PKci3KRbjbeVEmEcWs/ZfzxN4gR+6y8ohUOaA0UDrZYctYkzG1d7HbkcM1lmvtde +Gelj1j/+eu4LRu5h9oczkqRnWV5xnqz7xsEH9Rrcgm39RpNzFf43Joo25iqdVGk4 +yBVjoHQsnD1qZwdZQ0EHxYozNkGfa6j7VXAzCYVstfRMPGKrYH/xRg2jNy750z/p +apgT3GXbpvcB9Z3gj2LRn+FKLxoH2WLf2DabdzyZz9KXfnG4ZeOd2BrFXexKT2MQ +TqJIzIAmXU2XgXK2fHeofqTcKD63qgbg2EBg2m4/RvRgO81kCuO6Sq5UVhtyYSk6 +X5O/Z3O4WEtyp2bePWC6tP3x/5ks8OlUDF7Rw2AOUCyU96aa/C3MwrV/cJrbESbo +ZJCnSsn0DMj+96J0qsm49N6nj9xo1VPWE1kfl2+K2uW89IBun5/pTDE5C3m9Qvff +HSTMDY37bVwfoCzfNiOUa+BDQLM7gkjATzbmvY6d4UMnXjQ9GKp/v2Nsz+FV8HJ8 +RQI8yvPLI8hbleX0EJpvrUsLllZR76/IWxoNy7J1KiYD7yuqSoa3clCTPw8EVaAF +q5g64uFMHAADsFSWaID8umypkhH0imS8J4XwKPJfnCroiEYEEBEKAAYFAkzSGcIA +CgkQkdPrePiuutNirgCZAZorRS7z/JqyPwb2a4NgRrSSWXkAoIQxA4OqQQNgmJ/9 +rHQqbuJxkfwBiEYEEhECAAYFAlD3wYIACgkQn5i5pTzaZheV6wCfTLPa0d7TcY6Y +9AdwJfDJXqHDUCkAoJzDpnJgn6VIpXnaSQVAFbxre+VFiQEcBBABAgAGBQJPHwj7 +AAoJEKv3lK+rsTuD3AgH/2YNKl+dNEj/vzvQmvsCQTWXf3OycOiMVKj6nwoEGNzC +/1QTXdTZy+8ZaOg+dLoGnHMuj0TdwgjGPiN5uIWeLss9FIr2BkCJusi0sCINDTA+ +l0qduOY+mhvkw0xJ0SueR8Qn+PK7rxQwLVsScyw5n0mrPyt0ws4BZTiVdXglJxvQ +gseXjSGhgpwPKB7OKlpqvu7wyXe8Nnbxj369yJqZbyDZ6I6Sy4FjhBQGN+woRTyV +LlOoHLaIdstQZ6onUc+LpQj9mZuKt9L7AYJS7FBXRnLLeBdN7sghzotI+/SOv3dz +yX1Q1C7OgItTzgMqtfJKpRlnD7FtOhO4XYg+Sonzs0SJAhwEEAECAAYFAk3T3jsA +CgkQLAdUss4GkvPLsA/+MO159xG0ro1RUswS6xJ3xQms60TNsCuXE/Ty3EXWUV/t +KRcP8sHOcqaGkxwx0BHbUWCHiau7u34IRS6sacHHDcNfZDBpkHbqz+/1uTfODsKT +c0wje0PWWO+XUZTgYUTvcg9cmWqCvkEBoaXhoeYnse0E5bUO94h2gvxzMzs50PV7 ++VBK5VAI7o8b+RQ+pO2Roh8AoE8NNAzMLzZ2kg8lPhd0ibtOxR1zq5RVedLKX+hN +/k+Met/PbJb1CqzccFn6VAmrx76zJPwWO4faicU7UC6v07knmEPfBPyHMo3VdRQj +fAOCt4gmD6/29HuzgLgMNQ/jsVgxTSBymormd2LRUPLMpN+QcB+dZqYaSFi0JSA4 +wmWeIqrXT1PDIWL8XzlEelgZIape6gZcXl9/MpI6BC5IpJFDMYcRHBtSw2UO3jXr +uSilM7ly27FJViWtClIn0ZwjC3MHRExkOkc5uiNbR0DitgDIoIhe673y3NV9VphU +oY4vBFyYM9Q3P8RRS/QWqNw6zdWi2NZHLh9g8CMgxxSirSCmk5oVYSeYczL8v2bq +ceOLEUtkcM7wLQ5Vp6ALT1dLoxdIk2EzZ2Dg8kdjxTvh7XbApxe4AQ4CDPRO6Wef +gOgZJ95xVbKOZtGwpVsz7CJiK38k/Nuv7U7SXhBN5gzSn8Zi+v8UMhhrUn1ffpmJ +AhwEEAECAAYFAk3g95sACgkQGFJGyIKJNBe0ww//T5mReFaaKxP6Rt2rp8NTLkRO +lUk7dIrtljMJ54wGAlFk1CEVM2z68iiJXvHebHYOtj7pkq0kj85WzgZ7vjjXL8cW +HDiMY30fYLmzPj5Wu+qJyWmoo33F0pe6bTee0d5SyAaJ5O8UQ2PoXwJfFghp8iCt +jDhwqXMaz1mXOeFP2gVZD3lp32SrCpmBHwsTn8KsVdtmsY1FmFeIoEZCFTj7ct7I +wpjvCZ1GIBLh5iWECiW7uB31IjK5txCxQvs7Vzb7No4wvzxzDLKbF2O5iht+Zf9e +d+JVWnjf4limSDoZI9zo0e1bFwf4ud85UIsDa6kw0rc+VyiUu35+qn4/hg742pEv +c5BRTFfpQGVJno7QlqxWxYUAGDi/axHh279UGu5L0r/0sCnte/YDPupnIvM5cdei +5dpliN6MjZMLF9efLsP40dSUSAFXwMDutISXktWqSpnaSyqVxFgfieLRKCdXeUO5 +6LOBPD6ahw5SJIpr8H5Q3PA0/s7ipH85VLtgmxq4QCkXDdxFG9+Aj7RNjdlmKoBV +F6kPHgQtnYL9wdlvyk+G65FirZKD17N45UqU5Jpe+4fjQVg8rABPYn6f9iBsxrNa +yLECEn1WPjILwUp+afIaB0/Dl6leF/IjtmKQw2geJf2i6J0YbPn8F10c+9r71k+e +23A58eKO0fm2tHrX/v6JAhwEEAEIAAYFAk3iiCsACgkQQPReIWFFn3qvPA/9EDue +G9lfEJgz6BItHbVHC+CwKrBDqORayojJdgJPk7ugUO62iEITA54aClc2q/YK8wL4 ++AhmnCdp/8cQaC/KdyEQt+SHHh0faqnXcdTDPdXCkb4iwhssue+sUyBTAVo1Jwal +HjYGXqcy9AeuSXjnOIWCHeSoy4EMrfUngyTSIRJPgMh6xvDF7QIQx2mD3UPTrIM6 +iQK/TqZgr5VBZwRX+qgv0NERnTRfJoYG45WLrywF3WXa0JSpTjskg4s08U0zkD7r +5l/Rk1Q6teyc9RWEEmxBJhYCpSX/dwdm3cb/pMOMwiQD/m80c3+2r0STGrjjmo0m +5A42CLKWHD/4yL/Iw8e34Fhsu0KJsxZwgM9R2ov0Pm8fnKva0hUS+UPdn4/lEXQr +86RCGHyQrXDg1W70FHxlr+WAaaWHp83MeZ1CnjB3901Sj/L5URn9kHXLqDgo0ZRs +m/3P+S/T7PU9PJM1OWsaTViHsbT8dm1R9/QJq5y+KdcDI9ZlH5teG94bhY0pR935 +JXn5rkm1A7vtDIou4snrE7rg4rEGHFeRUO7NmneKaEH8s/LZmUb5mEh3NoY6NCjk ++z+dUw1IWaavCPZa8EN1PSjYudg6wRXOC7GioczLPSzD3tzS7N0rudOme5YGx/lK +U9XRaYMG2VSGJCuS/imSOkoAyOkMwelPH4GGAq6JAhwEEgEIAAYFAk8IouwACgkQ +xodfNUHO/eBW6RAAio14ecYMboqD3oJgS6RYd0wxPm2pfvyvi9NEYGdqYwZi8feo +GnZE4NeXeYZyHVR+5GHt6XIzwzUOvvZ4J0VN5AA9xnvtIrypScM/Z6OZzDLfq+PE +LNuWePT8XAJYFRFP/ic0y3TPdPixww7ZQTOjgBXgIgDAHCbJ+fAhhi70MkCpTfd5 +AEPJU4PhoXxckhdIx4DorvMlI87RpwZbMaKGDZxWew0eedUpPoGoCjzZ1Gwso7Fd +nCu5deIttEVP+wStiGahMn4VAWI0zjuUU8EpWW0vZ9dpiGQtJReiBzvH7NTYNTCG +MpodlqV9TR3HG2WYjAw22u7wWhat1HB+WIED5hzNI+x8NbnH2IT+3nISvnApzHMz +nIZTrIYyYCatZ3mPr18R/eUUoHjaJSo+IyfokqD5lvSnvogLlOjkPXF0HECBz6pF +SuEZWxw/Y9b0DEofqSdopqYpssxhSMgsbfk9wiAVuO0oAZ187cxlsaeYnxZzVM9z +q0SfwJ3PpiafUvVLTHPC8PWNNRsbsOWZwlhWr4l6LJ8G2owSFODk6+GZ3oHfzRsX +ApqBV5Q78094HusVdcN9eehnnPJREgxVRGmESzHiv9cbV3xXnHVcBlhtYmboUEVz +k1Yg342KeaW5/AWR6xsTAZRE1aJdNcghtYrQj5Fd99XfsN8RUGJ7H8H6r0eJBBwE +EAEKAAYFAk51z2QACgkQ7bjAgqbuaQhjDR/7Bdipk4r53BrRQS3XTzRGVl35RdE5 +0vUc/11pMHkpg6/1HQrVY2msNBDY+R2tUzuvdH1Z1J0Xc0yBQ2WLWW+pORYnnx2c +hVrrVDFTrtwxkvzS98K9ZJ3q8glSYWEh9KgwvUjCcoKE4FO2fy57ZLYKNuzY9PC5 +euEHUR6jFluGPHGD3CweUc49GN+6nfSXnrIzaLHRKanNc2Vv4nIMTXzqoXd3BeHp +8869EpD6oFD0eB0CuS22AuOdYhtPB24ajTbZv+jSHYlUlKZtmFqG+Jba8tmxV73d +j1xlLrtisrQtrQMmaFsK4sWdrI2FasfvjB40x0u1McPf+eH8YiVYqL9pshbDAR6b +qbVazhTGDtEu80WwSTU8C+cuy9QvE4hClhxLBdGFG4/o3ANvsQZz0CetYBUojJEg +6q7K8BoVZ3My2S8UWO23warFkS1UWanpSPu5GD8qaGiMVAaG6gML3lMKb/PbAldl +cBhqSIpB/3gpfuGrE/z+N4r2nQbXAI2G8+4YgTahsuj0775GtzGpZRAZxSsbZDim +l4n6KfNeET2Zx4vY+kbAX4IxyP/fytk6cqBPrG8e/hdVcMl5MdHSVIfX9Z6KzV6V +drED83LNUCrCt7YQGyu7JcBLk4ytXUow+MxnOOpHKaBiq56wmlO5mwfA3UexysI5 +hxogAVm+w9SoB1hPuZKUyfOyd3xP3Ao2p5LVhF84NIgroNZ3HhxZGnb8xMSNjR4J +eeiYJ0Yl0j3O+xWYfrLOvY1GxEevMQbDgMw6WDWaevC4qsp7co/wxSZLi7f2gNwR +i2YPX2Kg3jKoCBuM0HRCZplnZATq7kCROcZKGvm9o0zGoUNKzh3yqU4A3hWOc4kj +TYrqHT5o1yAOFJtGvFixPmZ0L3c4+U4iVt1Pmo5i3AQKq8/qi9OU0F91Rzkf1Saz +zy+lGqFR+RFfoXIinsoTHbZFbCTP0yfW64f93tk7dSTp4M3Z08MSJfnyS7SRH8iR +isJbfJ62DZgA3gc95Sc79qb1p9WAq/JPzNLQaaq92Th823sVCZ0k5EpqV5vLBOtA +7zKns1ByNsTr1EGGnYyLXcJxgxTtP29kHs7Ia2ZKV3QYFgPdP4QseQdvntYkMN1f +cLs1Lv3JiMp96RMSywSF0tp9iMbVJPUu8uBvU4zXlrVAnUFNKcrORxRIkFDp7WAO +LqkI959Mc8Eerb9CWc/Axh94Rla194Zfpp1ExY5KOCnATGEMP1NU8CVCecVukn/f +yzRzNfCO3VbI6qvgKHCmCPwdXQAsHJiCtNgO70yp0zivQWNGtuiU5ar3lfX5neih +UFTZz1j3yM3EHySQIXHZR3OTbTmVgTZ+7Mp6c2AxuOGAdUQ9Cj5DhkOJuokBHAQQ +AQgABgUCV4TFlgAKCRD0ziNk+2lnsgQPB/0c27VXpwGNZTc7adptXsJAuPgNTIcz +upNwovUnJqC5OZnTyF3F0bQw051voZyoS+MuPk+hSG3pPuVFWhmszQaB+9S9yjrD +Yj4UPeucAkYQGNGwTRe1e7lRrmWguEGSUbHxAGLR3VuFgxeY3Tbera2jyI2k5Oxc +uV7xp9zmNCBvje3nzaIG69fHq+vkemMmdmYusrorZ4kXNmM+vNFIzJWxv0KRb4mm +fDaWGQdH2c7MnqMfAjkTYW70Nm4DcI+8XNsyaQvodkmUKONvjCHneoed+0OS/5MU +V+HLxzoX8bLRw2YIR4GxhQaxixkPgvyQWtIcWpsx8NH3o/PVsdPTQtwPiQIcBBAB +AgAGBQJVBs+xAAoJECS2Qt9ZftCVMtEP/15sUVyYjDBlB6+3WlSLuKp5LXr3L1Vb +YFqA4LfNGzDdY9C4XrxE6G1ZdCK/mYqfFeZjijw7ZoFr+O2GSW1/rr/KOrZu8rtx +J1YWjyds3ebBqS7thBMPomgJpqODUTBSxNxpeDMoOT7DYn1b9mQUrKVlqZnfl+R3 +zBCu+sj5U10b9duEOu3w15AHYSxZwFRATMwssGOzpeH46U1YgGiUZpyVF6WfWUuH +GaYkOdS143H4FehIYxiQIoozeSstFACQNKmJ9bOl9cN8qEcVbXCt+6p9sBQoZnYX +znOwLWnylwdzc5ch6RzBoCxYTthUNOAWVPFiK6OpJwtxUZAJG954o3cYIj9fRP3Q +Ie3gplu8oVF3GJBgUnWZSxsEYddxmWLc2/pTtZdIkoT49eflOslfH99ySXWQh/TQ +878FBwugCifQazivlYHY8WmJ6/xRsLXPD5H5vH0dzxZmnDI7UEshyPczYHNYXdsC +QIYstm/zjfm7CmoOR0oPUUIHwpadeaVPh6sbPXq9VU09OcEOibfdWNvsg07MWbuj +knmIV9+zoBUMj76vpBE776/aXoaAeNWUgK05CUMDLOekICevzu81iVxXYHl+46+H +RGZ7XkvOpkkgjbg+M9xId8q3PjzmGYQYr+Lg+6h3TodkGCQdAPYWCwJh0ZzZE3WZ +RPx3Ae/oX7HOiQIcBBMBCgAGBQJUaz58AAoJECsRil+hXzC5S0gP/Ri70XuaPUp/ +/CXmpwoTdIksSCtbXf/RCMYvpRcWlTctLaJVPTHtzMO5zoRvN1M5P6AEZfPcckCo +HlnbHNJFHxoRaGsKTjLUu2r9FzFZ/3QGOOXemMte1B+33nKiRaW+yVlNht2+ZuQa +JB/X1Ieg1n1qkMV3z6jDEkDuDL/w3bCLmc5/fRWYRK79N7rsJmYqIkZj0kBjQGGz +ElDctTq+6yhKHv9pKHbR84c5Yf144TxR+8rMayv6zaBXCYbso1HdYWIRba2Z0yRB +212YMt4kDk1uxVW6Fc8Jn0JWunHF1pbdkvbQBYUxs57kSp54cEUtdMZtowKN/SMU +UCwTcoEDHt2r6P6eOJC1TkOjtHKRNLsjzTmP2398APhXyisr206XCOGDeDO3wODj +pIFkr2gTjGRQKRNy8JHvI1+6KCrLg/eSrkVpsXxzzPaZxUjW4GM0o+XU/8QGNhiw +IFccOmjHBNfSE/suDKkULqLDuVW3RFDdiSd/pIUPTAk331SYWHo1Bh8C3ViJQBkE +kL9zflvdlyHp7dlpiLuQrfD3SAPJdw7liPdJ6AlCoCFv63I9MDAnoZgGhsZHEAwL +PUwrReHmBZCrq4gRux0EOuJsoYZVkW918O/4K0wgC8FqYc7/JYgQkLRNEe0nRrI6 +lcLJuqNwH+NwjyqoUe5uXU3SzUGVCmu/iQIiBBMBCgAMBQJXQVf2BYMHhh+AAAoJ +ECbR5vsOCGsNzU0P/1oBRmDNViNgy6S9FGYCmZnkYKyzmvRPBRbK6hDSCdGgLtSB +AdFv6hVPXprzOty9kZzpupMck8ETdNRL6ar007Vkl137iGc+OfKujh4z9F46iLvA +0INcg9Ei4suAO4NsVYAa7jz6AHorx3gFRRsmLR8AGtLdy+EMoXQzZAQGrMUGyNsY +SwMEsdJeO74XczkmfHpLQiFRAZjv+RHmJe6IUfkWF5iYoX7rDfvz+vKhjASED4Z0 +h3xChou9mX5Ujm7KxGdEiRAYp7TRAqxbpw7mHtgYrXa5wSlCVGCDNnhGQ1ke6LS6 +97kAAyuR5clBQF/owH89VDM+7ETFVkGUVAtjiqzpnA3/YGzWXhOABxDASmWKqXpp +uxkTAcH2+uBxPFrWRkItGTdM+vDZtN0VqCI2lfqZ93RkUKmrKvAEFTbyRaMpPCH3 +pTFS0DhbCeRoyqJxKC5Fo1teqeuTvFGIysnuWC0SNgQDjLB15RJkMX+Qfc3mvqvY +qiX9RM1ni3jf7IhnXljXRu2Yg/QpogjWa1R62EVqyX1EpLpz0AYBWrO6EvYyF1tM +99IFLglvKTwKYhcUb00ujhmobZ0kvakrMaLei0OTeTWScFPRtzeXJLN6Iu5MtOvI +k+FVXfqajUM/R1wwmS2jv8l9k6kgz3xCJKieitZEyeBACAcHN4x4LpDD9cJYiQIi +BBMBCgAMBQJYGMcvBYMHhh+AAAoJEKI41NSYIPRnv2sQAJ12YZnfA93fxOPDcHWn +eTVQBnhAfX62f5Mt2lUGs2ejzqHugznnt7LbYVYGl0e4w01bPVwSEd7Og6IBPR6o +wx9CPr/aW4lKlxDSKFKsBSgjnBEZSos3GjPxPsgyvsgfP/8g1zZ2b873lNvB4wK8 +3VAJ17JB3DhtC/ZpIEiQq7EveSoYKqWr7Av+Vl0vohziDEf+x76Gp/Z29BbQp2Ug +DsUkNTks6/WSYEJnmHoyXrSRkqFKUXN/IXqys+PdtEKfZP7hHUdtxEisvjqnYFgD +bUYNAHoMDceYRP0Y5s0YC6RZ+CuKel70pN30RykLDdoEz7xiWw84ayAZZJCqMUJ2 +9S61rSztouJ6HR1ueZtT4BK6v/PkgjHUYUx/QjKOjBdo/oE5toUw9FTk3Cd6LVxr +I11gRJcM8cMpeeeMrotveIXBvOSBbUDalTlBkXYSq/2+VxdzWdEqUptv8KRAZBfU +lHOsft8o4lNxL7koBJNggULk+INAJcg+NNlp8ufPddYPvxhZTModx99SW6LY/YlV +uhoK7kXPMKzX1yILdGm1g2sFirQnAHNntHVwqvFN4/X3mGY4/jn7ebNGQKr/o05m +vu8iIwOqbEpeERgsaazI01a5S2ICydX9eWU63hx5rG0CIXapjUsbV900MELcB34O +RHqn5dLpfevue863JGUxPGMjiQEzBBABCAAdFiEEr3zKM9T0WtSOOvGE/Sshck2M +1IAFAlsXD4sACgkQ/Sshck2M1ICdkwf/Y6gAIBctZSb5VwXgwZ/9WVa8m+otcNna +Bs/Uf2txmblNHMQb1vaTyRkRpfz/YirxwfpJFoNouZQaf+Bbl/5ll8xIE1/UGeGD +GzXgjXxs+EJy1Lac4voAf191dGJrPGQ+sJsq/FUqk9Hij2A0/nxajh96WIIRZjbZ +mtbRBicNmifojIti2Iw3vCtu5kPMYSKPd4NIkQj6vg68wUhVObHPdO9DdpUQz5Z9 +YDu7fdhg0xespNvAhYWvHBBmWatTTNISRg54ueo8kLCCtXU18ho/2fUWHoyjfno3 +PZBOr95NaDRXnEqT9iYT0ewlVflciBBbKrVWWWEt8ke/NLJHluvbtokCMwQQAQgA +HRYhBEW+vuyVCr0Fzw71w1CgTQw7ZRfyBQJbN4eOAAoJEFCgTQw7ZRfyEtAP/jNN +2+Sg9Rb3pCL92moMiUklNXBWgxXWfan2QnbOifcfJ7loZvC6uvFkM3O0Nnn5Hwa4 +lZ9Nkb6kUFKitEi1FVihOrVmdS86oxN27+71rLc82qSUqY1EkmhfIggdh0hqXYoy +GnUjsiL3LMHQxBmNoEsO88Wf73+Nh0G60eOPFABArA7EmAdciwW+1V3BTGNMTl62 +l9vtc2YBT9QQw+avanSNbH1AXcYcYJ2bIGZ+O/C0aeMskW5ixhFFMoTWmleZUnlH +vB78vtgv1RC4VXyxrJppbHr7/sS/x2R/8lOle3HefDhxPm16yYwlNBkjnCQyp+0B +1QfeTrmMEsQcUnEvc+bH/YaNTdqbuHoQx9QSDfDZ77d6xE7owdfa8jwLVFdcULjn +IVHfxNXJGBgnpRJU1xKCGNoxtf8xuuG1g1I7K/niFwOU6dcAzHseZ+rk04VqZnlZ +PcNW5+ec/yZSl4o1Upm1xI0+f5NuEWA4IC5l91kykCbVCxddlX4qsi/C6GuFlkbG +ss8JNnHG/pvqGS3JXIGDe8DRF1lb3QVSxytq2N+qoQmhDU/GLEhwrOpLu0inUknw +msUBa5pVMeFKd24OqSOQ1v80euEt+YOW9/gVAxE+y9iSD2qonNw88ivjQmdOwJaO +GwCpDc2kU9fomfC4xc/A3pA8Sc9bI+213tgoMSQxiQEzBBABCAAdFiEEAP4HRkFI +6sfyXBjniwh32RvyOqoFAly3Ic8ACgkQiwh32RvyOqoxbgf/dPt1DU5O06Y/acuf +PzJgY8Hvc2k6Hy8T9YegGFjSXLjEkFqaHJ5rhIRUPoLPcgzj7+aLy+bEqzIuSMkl +NJR0Wtp+rn5tqY8Vt+5BJYACTPrbnFTBaYO6KEygqOsa4kSLg7mNEe9eO2q5HyJX +dnCnMnqKRsjq6lGax+BVSGDfuCQZhrYgyhykkfrkHvaAet7KE/iqO9av2btFE0yH +jpe73QUiaacQePfuMyO5WBIXqfkk1SPEtHn44elF5KGscdMB+VvCo2aMdBXgMAUL +9/EXP1cimnJp5vbEYF+x2M+bp+NTPTqiwuDb6ENDqDdmCIDjFgqM7EgsnpBcC+Q5 +WNrZLbkCDQRKtA7pARAAwjRJMLOWK6AZm7vO/PV39NOoE5eS8w/x3bd7AKfYgnz4 +LnDvpe1PsW6NVx0zCUMBFX0vkcd0W2i2ERvoVOxbiS0Af+TWggzUbqsOSh8kLSVB +/s6POCKqnzMxvGjknR4Ncq9sSh+EE5oEDjQbv1tMRGZma6Ok42DcJJNqcFytsriJ +mT1DsvpitahfFpt4U7ZDxPhRUjRSGnhw6Expsf9EYrvyu3TSU6wtE5UaZ9iunetM +wed2GE3PtA2Eg8gdBbqV4gMf/lxBp90O3jYtgVesOdL+a+dUD/M6bYhX5THxSjQH +1fMUuTLXkHffGEuaqnfyz6N4EuRxT0Gki9JN0Uwpb+30DR3GRapr9DlqYses5tp6 +WMYarEwxnkmudv7l3oVVxeSbm2BYnzEi6WxlWana5huYa9nMnMbIxYmNMyTmkYrZ +jfyVmzhi4sK3DeLpCjchZ7RRuYz2hZyXcfax38iTXhfXIL/SZWXhcSelqiAIZSjr +h9yvP6ctEjxOmThX0aNGFMb4duSv7IjnDy5utd2jscmO2H0PDBNr4J+yNJgLYPWp +vmBQ2mxqo/N/aHcGXc2b9k9plB58mxUyRQbjFhlimLLWA0unmRJobqWz71CpA7oP +5jvoHaPqUihfWEugzOUbQnUzSauDWWOdMqQW+UUo/iDRz6HCKdlfww0288krLusA +EQEAAYkCHwQYAQoACQUCSrQO6QIbDAAKCRAQwBxaL2BZ5y3tD/4t+KCuXBNi5alB +CExHEzveMdRF9FJrSqJEX0NwGFivF3hQ/HJkrcu9oTJC/tXNFf/+EHOd0lMiyFl5 +PBSlhe4XS988rgapUW+ee9tQmAt+RgP40fdKdJNb6+9NYGmrdnDUzlQtP+h/XBOc +mF0/szK/U0oigg8DjYYUm5gCWXOl9H4LJgg+yOcVCOVa4oTf1sdAmQba1xlMhOIY +BWmEhqbWZpGOS59XvpyNfOQXWu26S8HACBqyPZ2LVV4H+9cmxinTz7RX1yKD17nL +Z/fTOzZ1gYTbhg5rNmFpDgu3nlgU8SpGQ1kd70ZkcudgehsUe1EpPyl7O8qhj5H0 +/3OAmRXzrq2VF17gtz7zpntA0JqsBMbSaK5qBuBcurLhBT634WDIoE8u5Em1Uwjg +TI0Cx/lPxRTbIb4PfjP2b2ik/tJaUbwUrhuZ4LAtGztMVrF4W+qnx9oed4OFXMBb +wgS+SH6oAHlGwpxhhzXBlqZsHXm+w+2oazWUhxFFGEe5U245GEtNf0AznBMDWTqg +0SCVEDjlKt+e9tVXkTpHYWZjGbRZbEHkCbFqKhq0KP5BGInFZTFToI5jjszmuX0W +/yKpRpQZ+GuJnt4VrYSy7TMvjjhIpuhDY57VUwUIkz/2Kq8Vg2wpGg+29nvcGOTd +yZUcTCEB33B2jQ9z0XUEp+6B2F5iZQ== +=4AB7 +-----END PGP PUBLIC KEY BLOCK----- + +pub rsa4096 2019-05-05 [SC] + 48F8 E69F 6390 C9F2 5CFE DCD2 6824 8959 359E 722B +uid [ultimate] Remy Maucherat +sig 3 68248959359E722B 2019-05-05 Remy Maucherat +sub rsa4096 2019-05-05 [E] +sig 68248959359E722B 2019-05-05 Remy Maucherat + +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=l4Ry +-----END PGP PUBLIC KEY BLOCK----- + diff --git a/tomcat.logrotate b/tomcat.logrotate new file mode 100644 index 0000000..1cf5a19 --- /dev/null +++ b/tomcat.logrotate @@ -0,0 +1,10 @@ +@@@TCLOG@@@/catalina.out @@@TCLOG@@@/localhost_access_log.txt @@@TCLOG@@@/host-manager.log @@@TCLOG@@@/localhost.log @@@TCLOG@@@/manager.log{ + notifempty + copytruncate + weekly + rotate 52 + compress + missingok + su tomcat tomcat + create 0644 tomcat tomcat +} diff --git a/tomcat.service b/tomcat.service new file mode 100644 index 0000000..07731a2 --- /dev/null +++ b/tomcat.service @@ -0,0 +1,25 @@ +# Systemd unit file for default tomcat +# +# To create clones of this service: +# DO NOTHING, use tomcat@.service instead. + +[Unit] +Description=Apache Tomcat Web Application Container +After=syslog.target network.target + +[Service] +TasksMax=576 +LimitNOFILE=8192 +Type=simple +EnvironmentFile=/etc/tomcat/tomcat.conf +Environment="NAME=" +EnvironmentFile=-/etc/sysconfig/tomcat +ExecStart=@LIBEXECDIR@/tomcat/server start +ExecStop=@LIBEXECDIR@/tomcat/server stop +SuccessExitStatus=143 +User=tomcat +Group=tomcat + + +[Install] +WantedBy=multi-user.target diff --git a/tomcat.sysconfig b/tomcat.sysconfig new file mode 100644 index 0000000..473a0f4 diff --git a/tomcat.wrapper b/tomcat.wrapper new file mode 100644 index 0000000..420d649 --- /dev/null +++ b/tomcat.wrapper @@ -0,0 +1,24 @@ +#!/bin/bash + +if [ "$1" = "version" ]; then + . @LIBEXECDIR@/tomcat/preamble + exec ${JAVACMD} -classpath ${CATALINA_HOME}/lib/catalina.jar \ + org.apache.catalina.util.ServerInfo +fi + +SRV="tomcat" +if [ -n "$2" ]; then + SRV="tomcat@$2" +fi + +if [ "$1" = "start" ]; then + systemctl start ${SRV}.service +elif [ "$1" = "stop" ]; then + systemctl stop ${SRV}.service +elif [ "$1" = "version" ]; then + ${JAVACMD} -classpath ${CATALINA_HOME}/lib/catalina.jar \ + org.apache.catalina.util.ServerInfo +else + echo "Usage: $0 {start|stop|version} [server-id]" + exit 1 +fi diff --git a/tomcat11.changes b/tomcat11.changes new file mode 100644 index 0000000..f2401e6 --- /dev/null +++ b/tomcat11.changes @@ -0,0 +1,182 @@ +------------------------------------------------------------------- +Wed Aug 6 13:07:07 UTC 2025 - Michele Bussolotto + +- Update to Tomcat 11.0.9 + - adapt tomcat-jdt.patch + * Fixed CVEs: + + CVE-2025-52520: Align size tracking for multipart requests with + FileUpload's use of long. (bsc#1246388) + + CVE-2025-53506: Apply the initial HTTP/2 connection limits earlier. + (bsc#1246318) + * Catalina + + Fix: Ensure application configured welcome files override the defaults + when configuring an embedded web application programmatically. (markt) + + Update: Optimize Request#getCharsetHolder to avoid repeated parsing when + charset is null. Patch provided by morning-gu. (schultz) + + Fix: Allow the default servlet to set the content length when the content + length is known, no content has been written and a Writer is being used. + (markt) + + Fix: 69717: Correct a regression in the fix for CVE-2025-49125 that + prevented access to PreResources and PostResources when mounted below the + web application root with a path that was terminated with a file + separator. (remm/markt) + + Fix: 69731: Fix an issue that meant that the value of maxParameterCount + applied was smaller than intended for multipart uploads with non-file + parts when the parts were processed before query string parameters. + (markt) + + Fix: Align size tracking for multipart requests with FileUpload's use of + long. (schultz) + * Coyote + + Fix: 69710: Increase the default for maxPartCount from 10 to 50. Update + the documentation to provide more details on the memory requirements to + support multi-part uploads while avoiding a denial of service risk. + (markt) + + Fix: 69713: Correctly handle an HTTP/2 data frame that includes padding + when the headers include a content-length. (remm/markt) + + Fix: Correctly collect statistics for HTTP/2 requests and avoid counting + one request multiple times. Based on pull request #868 by qingdaoheze. + (markt) + + Fix: Fix JMX value for keepAliveCount on the endpoint. Also add the value + of useVirtualThreads in JMX. (remm) + + Fix: 69728: Remove incorrect warning when HTTP/2 is used with optional + certificate verification and improve the warnings when a web application + tries to use CLIENT-CERT with either HTTP/2 or a JSSE implementation of + TLS 1.3. (markt) + + Fix: When setting the initial HTTP/2 connection limit, apply those limits + earlier. (markt) + * Jasper + + Code: Remove IMPL_OBJ_START from EL grammar for IDENTIFIER. (markt) + + Code: Remove the INSTANCEOF and FUNCTIONSUFFIX definitions from the EL + grammar as both are unused. (markt) + * Web applications + + Add: Documentation. Provide more explicit guidance regarding the security + considerations for enabling write access to the web application via + WebDAV, HTTP PUT requests or similar. (markt) + + Add: Documentation. Add a section on reverse proxies to the security + considerations page. (markt) + * Other + + Update: Update to the Eclipse JDT compiler 4.36. (markt) + + Update: Update UnboundID to 7.0.3. (markt) + + Update: Update Checkstyle to 10.25.1. (markt) + + Update: Improvements to French translations. (remm) + + Update: Improvements to Japanese translations provided by tak7iji. (markt) + +------------------------------------------------------------------- +Tue Jun 24 10:09:09 UTC 2025 - Michele Bussolotto + +- Update to Tomcat 11.0.8 + * Fixed CVEs: + + CVE-2025-46701: refactor CGI servlet to access resources via + WebResources (bsc#1243815) + + CVE-2025-48988: limits the total number of parts in a + multi-part request and limits the size of + the headers provided with each part (bsc#1244656) + + CVE-2025-49125: Expand checks for webAppMount (bsc#1244649) + * Catalina + + Add: Support for the java:module namespace which mirrors the + java:comp namespace. + + Fix: 69690: Calling HttpServletRequest.getParameter() and related + methods for a request with content type multipart/form-data when + the mapped servlet does not have a @MultipartConfig or equivalent + should not trigger an exception. Note that calling getPart() or + getParts() is these circumstances will trigger an exception. + + Add: Support parsing of multiple path parameters separated by ; in a + single URL segment. Based on pull request #860 by Chenjp. + + Fix: 69699: Encode redirect URL used by the rewrite valve with the + session id if appropriate, and handle cross context with different + session configuration when using rewrite. + + Add: #863: Support for comments at the end of lines in text rewrite + map files to align behaviour with Apache httpd. Pull request + provided by Chenjp. + + Fix: 69706: Saved request serialization issue in FORM introduced + when allowing infinite session timeouts. + + Fix: Expand the path checks for Pre-Resources and Post-Resources + mounted at a path within the web application. + + Fix: Process possible path parameters rewrite production in the + rewrite valve. + + Fix: 69588: Enable allowLinking to be set on PreResources, + JarResources and PostResources. If not set explicitly, the setting + will be inherited from the Resources. + + Add: 69633: Support for Filters using context root mappings. + + Fix: 69643: Optimize directory listing for large amount of files. + Patch submitted by Loic de l'Eprevier. + + Fix: #843: Off by one validation logic for partial PUT ranges and + associated test case. Submitted by Chenjp. + + Refactor: GCI servlet to access resources via the WebResource API. + + Fix: 69662: Report name in exception message when a naming lookup + failure occurs. Based on code submitted by Donald Smith. + + Fix: Ensure that the FORM authentication attribute + authenticationSessionTimeout works correctly when sessions have an + infinite timeout when authentication starts. + + Add: Provide a content type based on file extension when web + application resources are accessed via a URL. + * Coyote + + Refactor: #861: TaskQueue to use the new interface RetryableQueue + which enables better integration of custom Executors which provide + their own BlockingQueue implementation. Pull request provided by + Paulo Almeida. + + Add: Finer grained control of multi-part request processing via two + new attributes on the Connector element. maxPartCount limits the + total number of parts in a multi-part request and maxPartHeaderSize + limits the size of the headers provided with each part. Add support + for these new attributes to the ParameterLimitValve. + * Jasper + + Fix: 69696: Mark the JSP wrapper for reload after a failed + compilation. + + Fix: 69635: Add support to jakarta.el.ImportHandler for resolving + inner classes. + + Add: #842: Support for optimized execution of c:set and c:remove + tags, when activated via JSP servlet param + useNonstandardTagOptimizations. + + Fix: An edge case compilation bug for JSP and tag files on case + insensitive file systems that was exposed by the test case for + 69635. + * Web applications + + Fix: 69694: Improve error reporting of deployment tasks done using + the manager webapp when a copy operation fails. + + Add: 68876: Documentation. Update the UML diagrams for server + start-up, request processing and authentication using PlantUML and + include the source files for each diagram. + * Other + + Add: Thread name to webappClassLoader.stackTraceRequestThread + message. Patch provided by Felix Zhang. + + Update: Tomcat Native to 2.0.9. + + Update: The internal fork of Apache Commons FileUpload to 1.6.0-RC1 + (2025-06-05). + + Update: EasyMock to 5.6.0. + + Update: Checkstyle to 10.25.0. + + Fix: Use the full path when the installer for Windows sets calls + icacls.exe to set file permissions. + + Update: Improvements to Japanese translations provided by tak7iji. + + Update: Jacoco to 0.8.13. + + Code: Explicitly set the locale to be used for Javadoc. For + official releases, this locale will be English (US) to support + reproducible builds. + + Update: Byte Buddy to 1.17.5. + + Update: Checkstyle to 10.23.1. + + Update: File extension to media type mappings to align with the + current list used by the Apache Web Server (httpd). + + Update: Improvements to French translations. + + Update: Improvements to Japanese translations provided by tak7iji. + +------------------------------------------------------------------- +Tue Jun 10 13:09:57 UTC 2025 - Michele Bussolotto + +- Hardening permissions (bsc#1242722) + +------------------------------------------------------------------- +Fri May 9 07:06:53 UTC 2025 - Fridrich Strba + +- Do not require standalone versions of apis that tomcat itself + carries +- Do not version dependencies + +------------------------------------------------------------------- +Fri May 2 14:56:19 UTC 2025 - Fridrich Strba + +- Make conflicts and provides more generic + +------------------------------------------------------------------- +Mon Apr 28 10:21:33 UTC 2025 - Ricardo Mestre + +- Initial packaging of tomcat11 11.0.6 diff --git a/tomcat11.spec b/tomcat11.spec new file mode 100644 index 0000000..96671c3 --- /dev/null +++ b/tomcat11.spec @@ -0,0 +1,847 @@ +# +# spec file for package tomcat11 +# +# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2000-2009, JPackage Project +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +%define app_name tomcat +%define jspspec_major 4 +%define jspspec_minor 0 +%define jspspec %{jspspec_major}.%{jspspec_minor} +%define servletspec_major 6 +%define servletspec_minor 1 +%define servletspec %{servletspec_major}.%{servletspec_minor} +%define elspec_major 6 +%define elspec_minor 0 +%define elspec %{elspec_major}.%{elspec_minor} +%define major_version 11 +%define minor_version 0 +%define micro_version 9 +%define java_major 1 +%define java_minor 17 +%define java_version %{java_major}.%{java_minor} +%define packdname apache-tomcat-%{version}-src +# FHS 2.3 compliant tree structure - http://www.pathname.com/fhs/2.3/ +%global basedir /srv/%{app_name} +%define appdir %{basedir}/webapps +%define bindir %{_datadir}/%{app_name}/bin +%define confdir %{_sysconfdir}/%{app_name} +%define homedir %{_datadir}/%{app_name} +%define libdir %{_javadir}/%{app_name} +%define logdir %{_localstatedir}/log/%{app_name} +%define cachedir %{_localstatedir}/cache/%{app_name} +%define tempdir %{cachedir}/temp +%define workdir %{cachedir}/work +%define tomcatappdir %{_datadir}/%{app_name}/%{app_name}-webapps +%define javac_target 17 +#Compat macro for new _fillupdir macro introduced in Nov 2017 +%if ! %{defined _fillupdir} + %define _fillupdir %{_localstatedir}/adm/fillup-templates +%endif +Name: %{app_name}%{major_version} +Version: %{major_version}.%{minor_version}.%{micro_version} +Release: 0 +Summary: Apache Servlet/JSP/EL Engine, RI for Servlet %{servletspec}/JSP %{jspspec}/EL %{elspec} API +License: Apache-2.0 +Group: Productivity/Networking/Web/Servers +URL: https://tomcat.apache.org +Source0: https://archive.apache.org/dist/%{app_name}/%{app_name}-%{major_version}/v%{version}/src/%{packdname}.tar.gz +Source1: %{app_name}.conf +Source3: %{app_name}.sysconfig +Source4: %{app_name}.wrapper +Source5: %{app_name}.logrotate +Source6: %{app_name}-digest.script +Source7: %{app_name}-tool-wrapper.script +Source11: %{app_name}.service +Source20: %{app_name}-jsvc.service +Source21: %{app_name}-functions +Source30: %{app_name}-preamble +Source31: %{app_name}-server +Source32: %{app_name}-named.service +Source100: valve.xslt +Source101: allowLinking.xslt +Source1000: %{app_name}-rpmlintrc +Source1001: https://archive.apache.org/dist/%{app_name}/%{app_name}-%{major_version}/v%{version}/src/%{packdname}.tar.gz.asc +Source1002: %{app_name}.keyring +# #PATCH-FIX-UPSTREAM: from jpackage.org package +Patch0: %{app_name}-bootstrap-MANIFEST.MF.patch +# #PATCH-FIX-UPSTREAM: from jpackage.org package +Patch1: %{app_name}-%{app_name}-users-webapp.patch +# # PATCH-FIX-OPENSUSE: build javadoc with the same java source level as the class files +Patch2: %{app_name}-javadoc.patch +# # PATCH-FIX-OPENSUSE: include all necessary aqute-bnd jars +Patch3: %{app_name}-osgi-build.patch +# PATCH-FIX-OPENSUSE: build against our ecj that does not have CompilerOptions.VERSION_16 +Patch4: %{app_name}-jdt.patch +# # PATCH-FIX-OPENSUSE: set ajp connector secreteRequired to false by default to avoid tomcat not starting +Patch5: %{app_name}-secretRequired-default.patch +Patch6: %{app_name}-fix_catalina.patch +Patch7: %{app_name}-logrotate_everything.patch +BuildRequires: ant +BuildRequires: ant-antlr +BuildRequires: apache-commons-collections +BuildRequires: apache-commons-daemon +BuildRequires: apache-commons-dbcp +BuildRequires: apache-commons-pool2 +BuildRequires: aqute-bnd +BuildRequires: ecj +BuildRequires: fdupes +BuildRequires: findutils +BuildRequires: jakarta-taglibs-standard +BuildRequires: java-devel >= 17 +BuildRequires: javapackages-local +BuildRequires: junit +BuildRequires: osgi-annotation +BuildRequires: osgi-compendium +BuildRequires: osgi-core +BuildRequires: pkgconfig +BuildRequires: sed +BuildRequires: systemd-rpm-macros +BuildRequires: tomcat-jakartaee-migration >= 1.0.7 +BuildRequires: unzip +BuildRequires: wsdl4j +BuildRequires: zip +BuildRequires: pkgconfig(systemd) +Requires: %{name}-lib = %{version}-%{release} +Requires: apache-commons-daemon +Requires: apache-commons-dbcp +Requires: apache-commons-logging +Requires: apache-commons-pool2 +Requires: java >= %{java_version} +Requires: libtcnative-1-0 >= 1.2.38 +Requires: logrotate +Requires(post): %fillup_prereq +Requires(post): libxslt-tools +# for runuser +Requires(post): util-linux +Requires(pre): shadow +Conflicts: %{app_name}-implementation +Provides: %{app_name}-implementation = %{version} +Provides: group(tomcat) +Provides: user(tomcat) +BuildArch: noarch +%systemd_ordering + +%description +Tomcat is the servlet container that is used in the official Reference +Implementation for the Java Servlet and JavaServer Pages technologies. +The Java Servlet and JavaServer Pages specifications are developed by +Sun under the Java Community Process. + +ATTENTION: This tomcat is built with java %{java_version}. + +%package admin-webapps +Summary: The host manager and manager web applications for Apache Tomcat +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version}-%{release} +Requires(post): libxslt-tools +# for runuser +Requires(post): util-linux +Conflicts: %{app_name}-implementation-admin-webapps +Provides: %{app_name}-implementation-admin-webapps = %{version} + +%description admin-webapps +The host manager and manager web-based applications for Apache Tomcat. + +%package embed +Summary: Libraries for Embedding Apache Tomcat +Group: Productivity/Networking/Web/Servers +Conflicts: %{app_name}-implementation-embed +Provides: %{app_name}-implementation-embed = %{version} + +%description embed +Embeddeding support (various libraries) for Apache Tomcat. + +%package docs-webapp +Summary: The "docs" web application for Apache Tomcat +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version}-%{release} +Requires(post): libxslt-tools +# for runuser +Requires(post): util-linux +Conflicts: %{app_name}-implementation-docs-webapp +Provides: %{app_name}-implementation-docs-webapp = %{version} + +%description docs-webapp +The documentation of web application for Apache Tomcat. + +%package el-%{elspec_major}_%{elspec_minor}-api +Summary: Expression Language v%{elspec} API +Group: Development/Libraries/Java +Requires(post): update-alternatives +Requires(preun): update-alternatives +Conflicts: %{app_name}-implementation-el-api +Provides: %{app_name}-el-%{elspec}-api = %{version}-%{release} +Provides: %{app_name}-implementation-el-api = %{version} +Provides: el_%{elspec_major}_%{elspec_minor}_api = %{version}-%{release} +Provides: el_api = %{elspec} +Obsoletes: %{app_name}-el-2_2-api < %{version} +Obsoletes: el_api < %{elspec} + +%description el-%{elspec_major}_%{elspec_minor}-api +Expression Language API version %{elspec}. + +%package doc +Summary: Javadoc generated documentation for Apache Tomcat +Group: Documentation/HTML +Conflicts: %{app_name}-implementation-javadoc +Provides: %{app_name}-implementation-javadoc = %{version} +BuildArch: noarch + +%description doc +Javadoc generated documentation files for Apache Tomcat. + +%package jsp-%{jspspec_major}_%{jspspec_minor}-api +Summary: Apache Tomcat JSP API implementation classes +Group: Productivity/Networking/Web/Servers +Requires(post): update-alternatives +Requires(postun): update-alternatives +Conflicts: %{app_name}-implementation-jsp-api +Provides: %{app_name}-implementation-jsp-api = %{version} +Provides: %{app_name}-jsp-%{jspspec}-api +Provides: jsp = %{jspspec} +Provides: jsp%{jspspec_major}%{jspspec_minor} +Obsoletes: %{app_name}-jsp-2_2-api < %{version} +Obsoletes: jsp < %{jspspec} + +%description jsp-%{jspspec_major}_%{jspspec_minor}-api +Apache Tomcat JSP API implementation classes version %{jspspec} + +%package jsvc +Summary: Apache jsvc wrapper for Apache Tomcat as separate service +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version}-%{release} +Requires: apache-commons-daemon-jsvc +Conflicts: %{app_name}-implementation-jsvc +Provides: %{app_name}-implementation-jsvc = %{version} +%systemd_ordering + +%description jsvc +Systemd service and wrapper scripts to start tomcat with jsvc, +which allows tomcat to perform some privileged operations +(e.g. bind to a port < 1024) and then switch identity to a non-privileged user. + +%package lib +Summary: Libraries needed to run the Tomcat Web container +Group: Productivity/Networking/Web/Servers +Requires: %{app_name}-el-%{elspec}-api = %{version}-%{release} +Requires: %{app_name}-jsp-%{jspspec}-api = %{version}-%{release} +Requires: %{app_name}-servlet-%{servletspec}-api = %{version}-%{release} +Requires: mvn(org.apache.tomcat:tomcat-websocket-client-api) +Requires(post): ecj >= 4.4 +Requires(preun): coreutils +Conflicts: %{app_name}-implementation-lib +Provides: %{app_name}-implementation-lib = %{version} +Provides: jakarta-commons-dbcp-tomcat5 = 1.4 +Obsoletes: jakarta-commons-dbcp-tomcat5 < 1.4 + +%description lib +Libraries required to successfully run the Tomcat Web container + +%package servlet-%{servletspec_major}_%{servletspec_minor}-api +Summary: Apache Tomcat Servlet API implementation classes +Group: Productivity/Networking/Web/Servers +Requires(post): update-alternatives +Requires(postun): update-alternatives +Conflicts: %{app_name}-implementation-servlet-api +Provides: %{app_name}-implementation-servlet-api = %{version} +Provides: %{app_name}-servlet-%{servletspec}-api = %{version}-%{release} +Provides: servlet = %{servletspec} +Provides: servlet11 +Provides: servlet60 +Obsoletes: %{app_name}-servlet-3_0-api < %{version} +Obsoletes: %{app_name}-servlet-3_1-api < %{version} +Obsoletes: servlet < %{servletspec} + +%description servlet-%{servletspec_major}_%{servletspec_minor}-api +Apache Tomcat Servlet API implementation classes version %{servletspec} + +%package webapps +Summary: ROOT and examples web applications for Apache Tomcat +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version}-%{release} +Requires: jakarta-taglibs-standard >= 1.1 +Requires(post): libxslt-tools +# for runuser +Requires(post): util-linux +Conflicts: %{app_name}-implementation-webapps +Provides: %{app_name}-implementation-webapps = %{version} + +%description webapps +The ROOT and examples web applications for Apache Tomcat + +%prep +%autosetup -p1 -n %{packdname} + +# remove pre-built binaries and windows files +find . -type f \( -name "*.bat" -o -name "*.class" -o -name Thumbs.db -o -name "*.gz" -o \ + -name "*.jar" -o -name "*.war" -o -name "*.zip" \) -print -delete + +# remove date from docs +sed -i -e '/build-date/ d' webapps/docs/tomcat-docs.xsl + +%build + +ln -s $(build-classpath jakarta-taglibs-core) webapps/examples/WEB-INF/lib/jstl.jar +ln -s $(build-classpath jakarta-taglibs-standard) webapps/examples/WEB-INF/lib/standard.jar + +export CLASSPATH= +export OPT_JAR_LIST="xalan-j2-serializer" +export ANT_OPTS=-Xmx500M + +# we don't care about the tarballs and we're going to replace +# so just create a dummy file for later removal +touch HACK +mkdir -p HACKDIR +touch HACKDIR/build.xml + +ant -Dbase.path="." \ + -Djava.%{java_minor}.home="%{java_home}" \ + -Dbuild.compiler="modern" \ + -Dcommons-collections.jar="$(build-classpath commons-collections)" \ + -Dcommons-daemon.jar="$(build-classpath commons-daemon)" \ + -Dcommons-daemon.native.src.tgz="HACK" \ + -Djasper-jdt.jar="$(build-classpath ecj/ecj)" \ + -Djdt.jar="$(build-classpath ecj/ecj)" \ + -Dtomcat-native.tar.gz="HACK" \ + -Dtomcat-native.home="." \ + -Dcommons-daemon.native.win.mgr.exe="HACK" \ + -Dnsis.exe="HACK" \ + -Djaxrpc-lib.jar="$(build-classpath geronimo-jaxrpc-1.1-api)" \ + -Dwsdl4j-lib.jar="$(build-classpath wsdl4j)" \ + -Dsaaj-api.jar="$(build-classpath geronimo-saaj-1.1-api)" \ + -Dbnd.jar="$(build-classpath aqute-bnd/biz.aQute.bnd)" \ + -Dbnd.dir="%{_javadir}/aqute-bnd" \ + -Dosgiannotation.jar="$(build-classpath osgi-annotation/osgi.annotation)" \ + -Dosgi-annotations.jar="$(build-classpath aqute-bnd/biz.aQute.bnd.annotation)" \ + -Dosgicmpn.jar="$(build-classpath osgi-compendium/osgi.cmpn)" \ + -Dosgicore.jar="$( build-classpath osgi-core/osgi.core)" \ + -Dannotation.jar="$(build-classpath aqute-bnd/biz.aQute.bnd.annotation)" \ + -Dosgicmpn.jar="$(build-classpath osgi-compendium/osgi.cmpn)" \ + -Dslf4j-api.jar="$(build-classpath slf4j/slf4j-api)" \ + -Dcommons-pool.home="$(build-classpath commons-pool2)" \ + -Dcommons-dbcp.home="$(build-classpath commons-dbcp2)" \ + -Dmigration-lib.jar="$(build-classpath tomcat-jakartaee-migration)" \ + -Dno.build.dbcp=true \ + -Dversion="%{version}" \ + -Dversion.build="%{micro_version}" \ + deploy javadoc package embed-jars + +# remove some jars that we'll replace with symlinks later +rm output/build/bin/commons-daemon.jar \ + output/build/lib/ecj.jar + +pushd output/dist/src/webapps/docs/appdev/sample/src +mkdir -p ../web/WEB-INF/classes +javac -source %{java_minor} -target %{javac_target} -cp ../../../../../../../../output/build/lib/servlet-api.jar -d ../web/WEB-INF/classes mypackage/Hello.java +pushd ../web +jar cf ../../../../../../../../output/build/webapps/docs/appdev/sample/sample.war * +popd +popd + +%install +# build initial path structure +install -d -m 0755 %{buildroot}%{_bindir} +install -d -m 0755 %{buildroot}%{_sbindir} +install -d -m 0755 %{buildroot}%{_javadocdir}/%{app_name} +install -d -m 0755 %{buildroot}%{_initddir} +install -d -m 0755 %{buildroot}%{_sysconfdir}/logrotate.d +install -d -m 0755 %{buildroot}%{_sysconfdir}/sysconfig +install -d -m 0755 %{buildroot}%{appdir} +install -d -m 0755 %{buildroot}%{tomcatappdir} +install -d -m 0755 %{buildroot}%{bindir} +install -d -m 0775 %{buildroot}%{confdir} +install -d -m 0755 %{buildroot}%{cachedir}/Catalina/localhost +install -d -m 0755 %{buildroot}%{confdir}/conf.d +/bin/echo "Place your custom *.conf files here. Shell expansion is supported." > %{buildroot}%{confdir}/conf.d/README +install -d -m 0755 %{buildroot}%{libdir} +install -d -m 0775 %{buildroot}%{logdir} +/bin/touch %{buildroot}%{logdir}/catalina.out +install -d -m 0775 %{buildroot}%{_localstatedir}/lib/tomcats +/bin/echo "%{app_name}-%{major_version}.%{minor_version}.%{micro_version} RPM installed" >> %{buildroot}%{logdir}/catalina.out +install -d -m 0775 %{buildroot}%{homedir} +install -d -m 0775 %{buildroot}%{tempdir} +install -d -m 0775 %{buildroot}%{workdir} +install -d -m 0755 %{buildroot}%{_unitdir} +install -d -m 0755 %{buildroot}%{_libexecdir}/%{app_name} +install -d -m 0755 %{buildroot}%{_fillupdir} + +cp -a %{SOURCE100} %{buildroot}%{confdir} +cp -a %{SOURCE101} %{buildroot}%{confdir} + +# move things into place +# First copy supporting libs to tomcat lib +pushd output/build + cp -a bin/*.{jar,xml} %{buildroot}%{bindir} + cp -a conf/*.{properties,xml} %{buildroot}%{confdir} + cp -a lib/*.jar %{buildroot}%{libdir} + cp -a webapps/* %{buildroot}%{tomcatappdir} +popd +# tomcat embedded +pushd output/embed + cp -a *.jar %{buildroot}%{libdir} +popd + +# doc +cp -a output/dist/webapps/docs/api/* %{buildroot}%{_javadocdir}/%{app_name} + +sed -e "s|\@\@\@TCHOME\@\@\@|%{homedir}|g" \ + -e "s|\@\@\@TCTEMP\@\@\@|%{tempdir}|g" \ + -e "s|\@\@\@LIBDIR\@\@\@|%{_libdir}|g" %{SOURCE1} \ + > %{buildroot}%{confdir}/%{app_name}.conf +sed -e "s|\@\@\@TCHOME\@\@\@|%{homedir}|g" \ + -e "s|\@\@\@TCTEMP\@\@\@|%{tempdir}|g" \ + -e "s|\@\@\@LIBDIR\@\@\@|%{_libdir}|g" %{SOURCE3} \ + > %{buildroot}%{_fillupdir}/sysconfig.%{app_name} +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE4} \ + > %{buildroot}%{_sbindir}/%{app_name} +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE11} \ + > %{buildroot}%{_unitdir}/%{app_name}.service +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE20} \ + > %{buildroot}%{_unitdir}/%{app_name}-jsvc.service +sed -e "s|\@\@\@TCLOG\@\@\@|%{logdir}|g" %{SOURCE5} \ + > %{buildroot}%{_sysconfdir}/logrotate.d/%{app_name}10 +sed -e "s|\@\@\@TCHOME\@\@\@|%{homedir}|g" \ + -e "s|\@\@\@TCTEMP\@\@\@|%{tempdir}|g" \ + -e "s|\@\@\@LIBDIR\@\@\@|%{_libdir}|g" %{SOURCE6} \ + > %{buildroot}%{_bindir}/%{app_name}-digest +sed -e "s|\@\@\@TCHOME\@\@\@|%{homedir}|g" \ + -e "s|\@\@\@TCTEMP\@\@\@|%{tempdir}|g" \ + -e "s|\@\@\@LIBDIR\@\@\@|%{_libdir}|g" %{SOURCE7} \ + > %{buildroot}%{_bindir}/%{app_name}-tool-wrapper + +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE21} \ + > %{buildroot}%{_libexecdir}/%{app_name}/functions +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE30} \ + > %{buildroot}%{_libexecdir}/%{app_name}/preamble +chmod 0755 %{buildroot}%{_libexecdir}/%{app_name}/preamble +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE31} \ + > %{buildroot}%{_libexecdir}/%{app_name}/server +chmod 0755 %{buildroot}%{_libexecdir}/%{app_name}/server +sed -e "s|@LIBEXECDIR@|%{_libexecdir}|g" %{SOURCE32} \ + > %{buildroot}%{_unitdir}/%{app_name}@.service + +ln -sf %{_sbindir}/service %{buildroot}/%{_sbindir}/rc%{app_name} +ln -sf %{_sbindir}/service %{buildroot}/%{_sbindir}/rc%{app_name}-jsvc + +# create jsp and servlet and el API symlinks +pushd %{buildroot}%{_javadir} + mv %{app_name}/jsp-api.jar %{app_name}-jsp-%{jspspec}-api.jar + ln -s %{app_name}-jsp-%{jspspec}-api.jar %{app_name}-jsp-api.jar + mv %{app_name}/servlet-api.jar %{app_name}-servlet-%{servletspec}-api.jar + ln -s %{app_name}-servlet-%{servletspec}-api.jar %{app_name}-servlet-api.jar + ln -s %{app_name}-servlet-%{servletspec}-api.jar %{app_name}-servlet.jar + mv %{app_name}/el-api.jar %{app_name}-el-%{elspec}-api.jar + ln -s %{app_name}-el-%{elspec}-api.jar %{app_name}-el-api.jar +popd + +pushd output/build + %{_bindir}/build-jar-repository -s lib commons-collections \ + commons-dbcp2 commons-pool2 ecj/ecj 2>&1 + # need to use -p here with b-j-r otherwise the examples webapp fails to + # load with a java.io.IOException + %{_bindir}/build-jar-repository -p webapps/examples/WEB-INF/lib \ + taglibs-core.jar taglibs-standard.jar 2>&1 +popd + +pushd %{buildroot}%{libdir} + # symlink JSP and servlet and el API jars + ln -s ../%{app_name}-jsp-%{jspspec}-api.jar . + ln -s ../%{app_name}-servlet-%{servletspec}-api.jar . + ln -s ../%{app_name}-el-%{elspec}-api.jar . + ln -s $(build-classpath commons-collections) commons-collections.jar + rm -f commons-dbcp.jar + ln -s $(build-classpath commons-dbcp2) commons-dbcp2.jar + ln -s $(build-classpath commons-pool2) commons-pool2.jar + rm ecj.jar + ln -s $(build-classpath ecj/ecj) ecj.jar + ln -s $(build-classpath ecj/ecj) jasper-jdt.jar + + # Temporary copy the juli jar here from %%{_datadir}/java/tomcat (for maven depmap) + cp -a %{buildroot}%{bindir}/tomcat-juli.jar ./ +popd + +# symlink to the FHS locations where we've installed things +pushd %{buildroot}%{homedir} + ln -s %{appdir} webapps + ln -s %{confdir} conf + ln -s %{libdir} lib + ln -s %{logdir} logs + ln -s %{tempdir} temp + ln -s %{workdir} work +popd + +# install sample webapp +mkdir -p %{buildroot}%{tomcatappdir}/sample +pushd %{buildroot}%{tomcatappdir}/sample +jar xf %{buildroot}%{tomcatappdir}/docs/appdev/sample/sample.war +popd + +pushd %{buildroot}%{tomcatappdir}/examples/WEB-INF/lib +ln -s -f $(build-classpath jakarta-taglibs-core) jstl.jar +ln -s -f $(build-classpath jakarta-taglibs-standard) standard.jar +popd + +rm %{buildroot}%{tomcatappdir}/docs/appdev/sample/sample.war + +# Install the maven metadata +install -d -m 0755 %{buildroot}%{_mavenpomdir} +pushd output/dist/src/res/maven +for pom in *.pom; do + # fix-up version in all pom files + sed -i 's/@MAVEN.DEPLOY.VERSION@/%{version}/g' $pom +done + +# we won't install dbcp, juli-adapters and juli-extras pom files +for libname in annotations-api catalina jasper-el jasper catalina-ha jaspic-api; do + %{mvn_install_pom} %{app_name}-$libname.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-$libname.pom + %add_maven_depmap JPP.%{app_name}-$libname.pom %{app_name}/$libname.jar +done + +# servlet-api jsp-api and el-api are not in tomcat subdir, since they are widely re-used elsewhere +%{mvn_install_pom} %{app_name}-jsp-api.pom %{buildroot}%{_mavenpomdir}/JPP-%{app_name}-jsp-api.pom +%add_maven_depmap JPP-%{app_name}-jsp-api.pom %{app_name}-jsp-api.jar -f jsp-api -a "org.eclipse.jetty.orbit:jakarta.servlet.jsp" + +%{mvn_install_pom} %{app_name}-el-api.pom %{buildroot}%{_mavenpomdir}/JPP-%{app_name}-el-api.pom +%add_maven_depmap JPP-%{app_name}-el-api.pom %{app_name}-el-api.jar -f el-api -a "org.eclipse.jetty.orbit:jakarta.el" + +%{mvn_install_pom} %{app_name}-servlet-api.pom %{buildroot}%{_mavenpomdir}/JPP-%{app_name}-servlet-api.pom +# Generate a depmap fragment javax.servlet:servlet-api pointing to +# tomcat-servlet-3.0-api for backwards compatibility +# also provide jetty depmap (originally in jetty package, but it's cleaner to have it here +%add_maven_depmap JPP-tomcat-servlet-api.pom tomcat-servlet-api.jar -f servlet-api -a "org.mortbay.jetty:servlet-api" + +# two special pom where jar files have different names +%{mvn_install_pom} %{app_name}-tribes.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-catalina-tribes.pom +%add_maven_depmap JPP.%{app_name}-catalina-tribes.pom %{app_name}/catalina-tribes.jar + +%{mvn_install_pom} %{app_name}-coyote.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-coyote.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-coyote.pom %{app_name}/%{app_name}-coyote.jar + +%{mvn_install_pom} %{app_name}-jni.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-jni.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-jni.pom %{app_name}/%{app_name}-jni.jar + +%{mvn_install_pom} %{app_name}-juli.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-juli.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-juli.pom %{app_name}/%{app_name}-juli.jar + +%{mvn_install_pom} %{app_name}-jdbc.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-jdbc.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-jdbc.pom %{app_name}/%{app_name}-jdbc.jar + +%{mvn_install_pom} %{app_name}-dbcp.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-dbcp.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-dbcp.pom %{app_name}/%{app_name}-dbcp.jar + +%{mvn_install_pom} %{app_name}-api.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-api.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-api.pom %{app_name}/%{app_name}-api.jar + +%{mvn_install_pom} %{app_name}-util.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-util.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-util.pom %{app_name}/%{app_name}-util.jar + +%{mvn_install_pom} %{app_name}-util-scan.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-util-scan.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-util-scan.pom %{app_name}/%{app_name}-util-scan.jar + +%{mvn_install_pom} %{app_name}-websocket-api.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-websocket-api.pom +%add_maven_depmap JPP.%{app_name}-websocket-api.pom %{app_name}/websocket-api.jar + +%{mvn_install_pom} %{app_name}-websocket-client-api.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-websocket-client-api.pom +%add_maven_depmap JPP.%{app_name}-websocket-client-api.pom %{app_name}/websocket-client-api.jar + +%{mvn_install_pom} %{app_name}-websocket.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-websocket.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-websocket.pom %{app_name}/%{app_name}-websocket.jar + +%{mvn_install_pom} %{app_name}-embed-core.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-embed-core.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-embed-core.pom %{app_name}/%{app_name}-embed-core.jar -f embed + +%{mvn_install_pom} %{app_name}-embed-el.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-embed-el.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-embed-el.pom %{app_name}/%{app_name}-embed-el.jar -f embed + +%{mvn_install_pom} %{app_name}-embed-jasper.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-embed-jasper.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-embed-jasper.pom %{app_name}/%{app_name}-embed-jasper.jar -f embed + +%{mvn_install_pom} %{app_name}-embed-websocket.pom %{buildroot}%{_mavenpomdir}/JPP.%{app_name}-%{app_name}-embed-websocket.pom +%add_maven_depmap JPP.%{app_name}-%{app_name}-embed-websocket.pom %{app_name}/%{app_name}-embed-websocket.jar -f embed + +# replace temporary copy with link +ln -s -f %{bindir}/tomcat-juli.jar %{buildroot}%{libdir}/ + +# bnc#424675 +ln -s %{cachedir}/Catalina %{buildroot}/%{confdir} +rm -rf %{buildroot}/%{confdir}/Catalina +ln -s %{cachedir}/Catalina %{buildroot}/%{confdir}/ + +# bnc#418664 +install -d -m 0755 %{buildroot}/%{_sysconfdir}/ant.d/ +echo "tomcat/catalina-ant" > %{buildroot}/%{_sysconfdir}/ant.d/catalina-ant +%fdupes %{buildroot} /srv/%{app_name} +#bnc#565901 +ln -sf %{_sbindir}/%{app_name} %{buildroot}/%{bindir}/catalina.sh + +# Install update-alternatives content +mkdir -p %{buildroot}%{_sysconfdir}/alternatives +ln -s -f %{_sysconfdir}/alternatives/el_api %{buildroot}%{_javadir}/%{app_name}-el_api.jar +ln -s -f %{_sysconfdir}/alternatives/jsp %{buildroot}%{_javadir}/%{app_name}-jsp.jar +# To avoid conflicts with servletapi4 and servletapi5 create a link to incorrect /etc/alternatives/servlet.jar. +# It will be changed anyways to the correct symlink by update-alternatives. +ln -s -f %{_sysconfdir}/alternatives/servlet.jar %{buildroot}%{_javadir}/servlet.jar + +%pre +# add the tomcat user and group +getent group tomcat >/dev/null || %{_sbindir}/groupadd -r tomcat +getent passwd tomcat >/dev/null || %{_sbindir}/useradd -c "Apache Tomcat" \ + -g tomcat -s /sbin/nologin -r -d %{homedir} tomcat +%service_add_pre %{app_name}.service + +%post +%service_add_post %{app_name}.service +%{fillup_only %{app_name}} +chown -R tomcat:tomcat %{confdir}/server.xml +runuser -u tomcat -g tomcat -- xsltproc --output %{confdir}/server.xml %{confdir}/valve.xslt %{confdir}/server.xml + +%preun +%service_del_preun %{app_name}.service + +%postun +%service_del_postun %{app_name}.service + +%pre jsvc +%service_add_pre %{app_name}-jsvc.service + +%post jsvc +%service_add_post %{app_name}-jsvc.service + +%preun jsvc +%service_del_preun %{app_name}-jsvc.service + +%postun jsvc +%service_del_postun %{app_name}-jsvc.service + +%post el-%{elspec_major}_%{elspec_minor}-api +update-alternatives --install %{_javadir}/%{app_name}-el_api.jar el_api %{_javadir}/%{app_name}-el-%{elspec}-api.jar 20300 + +%postun el-%{elspec_major}_%{elspec_minor}-api +if [ $1 -eq 0 ] ; then + update-alternatives --remove el_api %{_javadir}/%{app_name}-el-%{elspec}-api.jar +fi + +%post jsp-%{jspspec_major}_%{jspspec_minor}-api +update-alternatives --install %{_javadir}/%{app_name}-jsp.jar jsp \ + %{_javadir}/%{app_name}-jsp-%{jspspec}-api.jar 20200 + +%postun jsp-%{jspspec_major}_%{jspspec_minor}-api +if [ $1 -eq 0 ] ; then + update-alternatives --remove jsp \ + %{_javadir}/%{app_name}-jsp-%{jspspec}-api.jar +fi + +%post servlet-%{servletspec_major}_%{servletspec_minor}-api +update-alternatives --install %{_javadir}/servlet.jar servlet \ + %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar 30000 +# Fix for bsc#1092163. +# Keep the /usr/share/java/tomcat-servlet.jar symlink for compatibility. +# In case of update from an older version where /usr/share/java/tomcat-servlet.jar is an alternatives symlink +# the update-alternatives in the new version will cause a rename tomcat-servlet.jar -> servlet.jar. +# This makes sure the %{app_name}-servlet.jar is recreated if it's missing because of the rename. +if [ ! -f %{_javadir}/%{app_name}-servlet.jar ]; then + echo "Recreating symlink %{_javadir}/%{app_name}-servlet.jar" + ln -s %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar %{_javadir}/%{app_name}-servlet.jar +fi + +%postun servlet-%{servletspec_major}_%{servletspec_minor}-api +if [ $1 -eq 0 ] ; then + if [ ! -f %{_sysconfdir}/alternatives/servlet ]; then + # servlet was removed on uninstall. + # Create a broken symlink to make sure update-alternatives works correctly and falls back + # to servletapi5 or servletapi4 if they're installed. + ln -s %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar %{_sysconfdir}/alternatives/servlet + fi + update-alternatives --remove servlet \ + %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar +fi + +%post lib +# those links are no longer needed +rm -f \ + %{libdir}/\[commons-collections-tomcat5\].jar \ + %{libdir}/\[commons-dbcp-tomcat5\].jar \ + %{libdir}/\[commons-pool-tomcat5\].jar \ + %{libdir}/\[ecj\].jar >/dev/null 2>&1 + +%post webapps +chown -R tomcat:tomcat %{tomcatappdir}/examples/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/examples/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/examples/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/examples ]; then + ln -sf %{tomcatappdir}/examples %{_datadir}/%{app_name}/webapps/examples +fi +#use the same context.xml for sample war +mkdir -p %{tomcatappdir}/ROOT/META-INF +chown -R tomcat:tomcat %{tomcatappdir}/ROOT/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/ROOT/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/examples/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/ROOT ]; then + ln -sf %{tomcatappdir}/ROOT %{_datadir}/%{app_name}/webapps/ROOT +fi +#use the same context.xml for sample war +mkdir -p %{tomcatappdir}/webapps/sample/META-INF +chown -R tomcat:tomcat %{tomcatappdir}/sample/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/sample/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/examples/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/sample ]; then + ln -sf %{tomcatappdir}/sample %{_datadir}/%{app_name}/webapps/sample +fi + +%postun webapps +if [ $1 -eq 0 ]; then # uninstall only + rm %{tomcatappdir}/ROOT/META-INF/context.xml + rm %{tomcatappdir}/sample/META-INF/context.xml +fi + +%post admin-webapps +chown -R tomcat:tomcat %{tomcatappdir}/manager/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/manager/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/manager/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/manager ]; then + ln -sf %{tomcatappdir}/manager %{_datadir}/%{app_name}/webapps/manager +fi + +chown -R tomcat:tomcat %{tomcatappdir}/host-manager/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/host-manager/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/host-manager/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/host-manager ]; then + ln -sf %{tomcatappdir}/host-manager %{_datadir}/%{app_name}/webapps/host-manager +fi + +%post docs-webapp +chown -R tomcat:tomcat %{tomcatappdir}/docs/META-INF +runuser -u tomcat -g tomcat -- xsltproc --output %{tomcatappdir}/docs/META-INF/context.xml %{confdir}/allowLinking.xslt %{tomcatappdir}/docs/META-INF/context.xml +if [ ! -e %{_datadir}/%{app_name}/webapps/docs ]; then + ln -sf %{tomcatappdir}/docs %{_datadir}/%{app_name}/webapps/docs +fi + +%files +%doc {LICENSE,NOTICE,RELEASE*} +%{_bindir}/%{app_name}-digest +%{_bindir}/%{app_name}-tool-wrapper +%{_sbindir}/%{app_name} +%{_unitdir}/%{app_name}.service +%{_sbindir}/rc%{app_name} +%{_unitdir}/%{app_name}@.service +%dir %{_libexecdir}/%{app_name} +%dir %{_localstatedir}/lib/%{app_name}s +%{_libexecdir}/%{app_name}/functions +%{_libexecdir}/%{app_name}/preamble +%{_libexecdir}/%{app_name}/server +#bnc#565901 +%{bindir}/catalina.sh +%config(noreplace) %{_sysconfdir}/logrotate.d/%{app_name}10 +%dir %{basedir} +%dir %{confdir} +%attr(0775,root,tomcat) %dir %{appdir} +%attr(0770,tomcat,tomcat) %dir %{logdir} +%attr(0660,tomcat,tomcat) %{logdir}/catalina.out +%attr(0770,root,tomcat) %dir %{cachedir} +%attr(0775,root,tomcat) %dir %{cachedir}/Catalina + +# tomcat group writtable dirs - bnc#625415 +%attr(0770,root,tomcat) %dir %{tempdir} +%attr(0770,root,tomcat) %dir %{workdir} +%attr(0775,root,tomcat) %dir %{tomcatappdir} + +%{confdir}/Catalina +%dir %{confdir}/conf.d +%config(noreplace) %{confdir}/conf.d/README +%config(noreplace) %{confdir}/%{app_name}.conf +%config(noreplace) %{confdir}/*.properties +%config(noreplace) %{confdir}/context.xml +%config(noreplace) %{confdir}/server.xml +# keep tomcat-users.xml readable only by root and tomcat group +%attr(0640,root,tomcat) %config(noreplace) %{confdir}/tomcat-users.xml +%config(noreplace) %{confdir}/web.xml +%config(noreplace) %{confdir}/jaspic-providers.xml +%dir %{homedir} +%{bindir}/bootstrap.jar +%{bindir}/catalina-tasks.xml +%{homedir}/lib +%{homedir}/temp +%{homedir}/webapps +%{homedir}/work +%{homedir}/logs +%{homedir}/conf +%{_fillupdir}/sysconfig.%{app_name} +%{confdir}/allowLinking.xslt +%{confdir}/valve.xslt + +%files admin-webapps +%defattr(0644,root,tomcat,0755) +%{tomcatappdir}/host-manager +%config(noreplace) %{tomcatappdir}/host-manager/META-INF/context.xml +%{tomcatappdir}/manager +%config(noreplace) %{tomcatappdir}/manager/META-INF/context.xml + +%files docs-webapp +%{tomcatappdir}/docs + +%files el-%{elspec_major}_%{elspec_minor}-api -f output/dist/src/res/maven/.mfiles-el-api +%{_javadir}/%{app_name}-el-%{elspec}-api.jar +%{_javadir}/%{app_name}-el-api.jar +%{libdir}/%{app_name}-el-%{elspec}-api.jar +%ghost %{_javadir}/%{app_name}-el_1_0_api.jar +%ghost %{_javadir}/%{app_name}-el_api.jar +%ghost %{_sysconfdir}/alternatives/%{app_name}-el_api.jar +%ghost %{_sysconfdir}/alternatives/el_1_0_api +%ghost %{_sysconfdir}/alternatives/el_api + +%files doc +%doc %{_javadocdir}/%{app_name} + +%files jsp-%{jspspec_major}_%{jspspec_minor}-api -f output/dist/src/res/maven/.mfiles-jsp-api +%{_javadir}/%{app_name}-jsp-%{jspspec}-api.jar +%{_javadir}/%{app_name}-jsp-api.jar +%ghost %{_javadir}/%{app_name}-jsp.jar +%ghost %{_sysconfdir}/alternatives/%{app_name}-jsp.jar +%ghost %{_sysconfdir}/alternatives/jsp + +%files lib -f output/dist/src/res/maven/.mfiles +%{libdir} +%dir %{bindir} +%{bindir}/tomcat-juli.jar +%exclude %{libdir}/%{app_name}-el-%{elspec}-api.jar +%exclude %{libdir}/%{app_name}*-embed-*.jar +# bnc#418664 +%dir %{_sysconfdir}/ant.d +%config(noreplace) %{_sysconfdir}/ant.d/catalina-ant + +%files embed -f output/dist/src/res/maven/.mfiles-embed +%dir %{libdir} + +%files servlet-%{servletspec_major}_%{servletspec_minor}-api -f output/dist/src/res/maven/.mfiles-servlet-api +%license LICENSE +%{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar +%{_javadir}/%{app_name}-servlet-api.jar +%{_javadir}/%{app_name}-servlet.jar +%{_javadir}/servlet.jar +%ghost %{_sysconfdir}/alternatives/tomcat-servlet.jar +%ghost %attr(-,root,root) %{_sysconfdir}/alternatives/servlet.jar +%ghost %attr(-,root,root) %{_sysconfdir}/alternatives/servlet + +%files webapps +%defattr(0644,root,tomcat,0755) +#bnc#520532 +%config(noreplace) %{tomcatappdir}/ROOT +%{tomcatappdir}/examples +%config(noreplace) %{tomcatappdir}/examples/META-INF/context.xml +%{tomcatappdir}/sample + +%files jsvc +%defattr(755,root,root,0755) +%{_unitdir}/%{app_name}-jsvc.service +%{_sbindir}/rc%{app_name}-jsvc + +%changelog diff --git a/valve.xslt b/valve.xslt new file mode 100644 index 0000000..a3c791c --- /dev/null +++ b/valve.xslt @@ -0,0 +1,16 @@ + + + + + + + + + + + + false + + + + -- 2.51.1 From 1cc497021794456214d4c6bab8ba46d9e6b49fb11d775138ce885cfb6d4f931f Mon Sep 17 00:00:00 2001 From: mbussolotto Date: Mon, 25 Aug 2025 15:43:27 +0200 Subject: [PATCH 4/7] - Update to Tomcat 11.0.10 --- apache-tomcat-11.0.10-src.tar.gz | 3 +++ apache-tomcat-11.0.10-src.tar.gz.asc | 16 +++++++++++ apache-tomcat-11.0.9-src.tar.gz | 3 --- apache-tomcat-11.0.9-src.tar.gz.asc | 16 ----------- tomcat11.changes | 40 ++++++++++++++++++++++++++++ tomcat11.spec | 2 +- 6 files changed, 60 insertions(+), 20 deletions(-) create mode 100644 apache-tomcat-11.0.10-src.tar.gz create mode 100644 apache-tomcat-11.0.10-src.tar.gz.asc delete mode 100644 apache-tomcat-11.0.9-src.tar.gz delete mode 100644 apache-tomcat-11.0.9-src.tar.gz.asc diff --git a/apache-tomcat-11.0.10-src.tar.gz b/apache-tomcat-11.0.10-src.tar.gz new file mode 100644 index 0000000..58e4409 --- /dev/null +++ b/apache-tomcat-11.0.10-src.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:759abc8708fad0b63eeb49f0098632a343de164e8c08c1406bd3b40dc3914889 +size 7169469 diff --git a/apache-tomcat-11.0.10-src.tar.gz.asc b/apache-tomcat-11.0.10-src.tar.gz.asc new file mode 100644 index 0000000..01aa404 --- /dev/null +++ b/apache-tomcat-11.0.10-src.tar.gz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEqcXfTSLpmZjZh1pREMAcWi9gWecFAmiLoBUACgkQEMAcWi9g +Wef1ZhAA88WDLuHSHd4cMO9XFoQ+GPlYFw/exFo17GJ6W9Hi0iLYwzZKfgup9evq +K86HmhecGHFh2qL7rjo1aB6Kl3ls3yEhIeYNyZA1tdMs7CKtcUyqtVQCR4AG4p9J +hcq8U5dwxCUyl29/pkJw4x7og8WmQh6+5fHy0HEm6xfk1Wie0aAAkIaGKWixo43l +R+ZVmWqbgaHK3QP0EIGtGfS2Q3GELuTyEQD5IokeE8REjgWSixvpmo6xI+JcxeA2 +u9bZguvH2lOmG+grGWWOQKe/JZNXE8nHKoMo1eDeFi9FSw0lsYDLcOHUdsZ2I7PY +yOfkDZ9fEZOvLLnSOcbFjD2bJsXT93p3lL9Gg3/OiA2uhWr7NjLxGHAtVgvpocm9 +FQ79hMhMvGvPjCuY6gI6E+xmbEEocfVGTWLNnHtCfCgcR75sfWXePS3nHZRlbr9b +6AsmXvjJJF9ob+a5qTRYB4lCndYsCcHDbhI5BJqa8c4tN6+FUWcZlimFWpTJmvC7 +C0w0t8AVpOxvaSOWNj+ndbivSBCsouFyPLzFB0xS6wxMZBkmlLcz4m0ydENFKIXz +ruEP3FVZMaEtS7P3tr3MBKSamIYImS84gBT/V0Z1FhS4OEy7PVkZo7vhbxzFfr+t +9wnv4581cn+fYYzPIE/I3kvFztLn30dV3p89hSvmD0nR37WY5xk= +=uKQB +-----END PGP SIGNATURE----- diff --git a/apache-tomcat-11.0.9-src.tar.gz b/apache-tomcat-11.0.9-src.tar.gz deleted file mode 100644 index 50744af..0000000 --- a/apache-tomcat-11.0.9-src.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ec730c795382eaf5bf26bb0efbe0f974497f7e47ce44b6a2c5808f519703dd78 -size 7149332 diff --git a/apache-tomcat-11.0.9-src.tar.gz.asc b/apache-tomcat-11.0.9-src.tar.gz.asc deleted file mode 100644 index 089c82a..0000000 --- a/apache-tomcat-11.0.9-src.tar.gz.asc +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCAAdFiEEqcXfTSLpmZjZh1pREMAcWi9gWecFAmhkURgACgkQEMAcWi9g -WeckXQ//fn7jwCs78FjdqvF65OV3hTkhWcmd7JHBc0at/9ol/FofUE2s4VanpqKc -ykjQuxbHMA/gajpgvUNeW0CuJjlFAfRPl0pibCw3rdkUHH5i/JO65zvNpN0wQjWj -8Jxb8KZfgn0LtQnYSa4h7hFN3D17GiAJkmWgdpJY/fJpeQep3zBvEX0WZx6bSQfn -zEBmbXVC+oLd+M60j/q9K2cwpl8QVqy2kKejvIS0pz4Nugg9jm/MifwMAAfzqhoO -L2xstI3sTxpAQfuD3tHuqjuUKIcX+QnyfeBdTNAizP7nuwy4jb262HoWO42reJCz -MTe3kzeev0BvemdCVBvT6ZURgoYfpVtGlzRu79/8kxmyayvqAFSVBOZEz0G9IkXL -L9MdLCIwIZqEU7gM2k7Ayi2jrnBDj1edAX/C+/qFCwU8juXCpxLMGEwwld1ns14n -XZ8NsFjKSZ01a2bowLtGXrj0yWGyGTt1lhj6vMNQl1v7c3/e+kuwBQkB0yZVjrZu -lbA2WHZT5B0RFG3QgFucvRRJwHxdFZ8ZApYpNcdkwT58Lz1ZF1t7ovg5lWBdB9MN -izN925A0zAbt8is3++d0J7QRcVopCHd+551f4pZID0upiBb5IBOB7GPF0/6ucRac -LiGm74GGISa1OLu545N6g8m3r1CzhfAktcd+no/25WgoaeN04ro= -=TW1e ------END PGP SIGNATURE----- diff --git a/tomcat11.changes b/tomcat11.changes index f2401e6..35f0cfe 100644 --- a/tomcat11.changes +++ b/tomcat11.changes @@ -1,3 +1,43 @@ +------------------------------------------------------------------- +Mon Aug 25 13:38:13 UTC 2025 - Michele Bussolotto + +- Update to Tomcat 11.0.10 + * Fixed CVEs: + + CVE-2025-48989: Update the HTTP/2 overhead documentation (bsc#1243895) + * Catalina + + Fix: Fix bloom filter population for archive indexing when using a + packed WAR containing one or more JAR files. (markt) + * Coyote + + Fix: 69748: Add missing call to set keep-alive timeout when using + HTTP/1.1 following an async request, which was present for AJP. + (remm/markt) + + Fix: 69762: Fix possible overflow during HPACK decoding of integers. + Note that the maximum permitted value of an HPACK decoded integer is + Integer.MAX_VALUE. (markt) + + Fix: Update the HTTP/2 overhead documentation - particularly the code + comments - to reflect the deprecation of the PRIORITY frame and + clarify that a stream reset always triggers an overhead increase. + (markt) + * Cluster + + Update: Add enableStatistics configuration attribute for the + DeltaManager, defaulting to true. (remm) + * WebSocket + + Fix: Align the WebSocket extension handling for WebSocket client + connections with WebSocket server connections. The WebSocket client + now only includes an extension requested by an endpoint in the + opening handshake if the WebSocket client supports that extension. + (markt) + * Web applications + + Fix: Manager and Host Manager. Provide the Manager and Host Manager + web applications with a dedicated favicon file rather than using the + one from the ROOT web application which might not be present or may + represent something entirely different. Pull requests #876 and #878 + by Simon Arame. + * Other + + Update: Update Checkstyle to 10.26.1. (markt) + + Add: Improvements to French translations. (remm) + + Add: Improvements to Japanese translations by tak7iji. (markt) + ------------------------------------------------------------------- Wed Aug 6 13:07:07 UTC 2025 - Michele Bussolotto diff --git a/tomcat11.spec b/tomcat11.spec index 96671c3..bb209b4 100644 --- a/tomcat11.spec +++ b/tomcat11.spec @@ -29,7 +29,7 @@ %define elspec %{elspec_major}.%{elspec_minor} %define major_version 11 %define minor_version 0 -%define micro_version 9 +%define micro_version 10 %define java_major 1 %define java_minor 17 %define java_version %{java_major}.%{java_minor} -- 2.51.1 From 666b4c8cb3c69e96927897323b977334b3f0c12daa69c50ae7a5d4822f05d9f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fridrich=20=C5=A0trba?= Date: Mon, 29 Sep 2025 22:15:40 +0200 Subject: [PATCH 5/7] Trying to remove alternatives --- tomcat11.changes | 5 ++++ tomcat11.spec | 75 ------------------------------------------------ 2 files changed, 5 insertions(+), 75 deletions(-) diff --git a/tomcat11.changes b/tomcat11.changes index 35f0cfe..c4005e6 100644 --- a/tomcat11.changes +++ b/tomcat11.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Wed Oct 1 12:19:04 UTC 2025 - Fridrich Strba + +- Do not use update-alternatives + ------------------------------------------------------------------- Mon Aug 25 13:38:13 UTC 2025 - Michele Bussolotto diff --git a/tomcat11.spec b/tomcat11.spec index bb209b4..88f4f6e 100644 --- a/tomcat11.spec +++ b/tomcat11.spec @@ -181,15 +181,11 @@ The documentation of web application for Apache Tomcat. %package el-%{elspec_major}_%{elspec_minor}-api Summary: Expression Language v%{elspec} API Group: Development/Libraries/Java -Requires(post): update-alternatives -Requires(preun): update-alternatives Conflicts: %{app_name}-implementation-el-api Provides: %{app_name}-el-%{elspec}-api = %{version}-%{release} Provides: %{app_name}-implementation-el-api = %{version} Provides: el_%{elspec_major}_%{elspec_minor}_api = %{version}-%{release} -Provides: el_api = %{elspec} Obsoletes: %{app_name}-el-2_2-api < %{version} -Obsoletes: el_api < %{elspec} %description el-%{elspec_major}_%{elspec_minor}-api Expression Language API version %{elspec}. @@ -207,15 +203,11 @@ Javadoc generated documentation files for Apache Tomcat. %package jsp-%{jspspec_major}_%{jspspec_minor}-api Summary: Apache Tomcat JSP API implementation classes Group: Productivity/Networking/Web/Servers -Requires(post): update-alternatives -Requires(postun): update-alternatives Conflicts: %{app_name}-implementation-jsp-api Provides: %{app_name}-implementation-jsp-api = %{version} Provides: %{app_name}-jsp-%{jspspec}-api -Provides: jsp = %{jspspec} Provides: jsp%{jspspec_major}%{jspspec_minor} Obsoletes: %{app_name}-jsp-2_2-api < %{version} -Obsoletes: jsp < %{jspspec} %description jsp-%{jspspec_major}_%{jspspec_minor}-api Apache Tomcat JSP API implementation classes version %{jspspec} @@ -254,17 +246,13 @@ Libraries required to successfully run the Tomcat Web container %package servlet-%{servletspec_major}_%{servletspec_minor}-api Summary: Apache Tomcat Servlet API implementation classes Group: Productivity/Networking/Web/Servers -Requires(post): update-alternatives -Requires(postun): update-alternatives Conflicts: %{app_name}-implementation-servlet-api Provides: %{app_name}-implementation-servlet-api = %{version} Provides: %{app_name}-servlet-%{servletspec}-api = %{version}-%{release} -Provides: servlet = %{servletspec} Provides: servlet11 Provides: servlet60 Obsoletes: %{app_name}-servlet-3_0-api < %{version} Obsoletes: %{app_name}-servlet-3_1-api < %{version} -Obsoletes: servlet < %{servletspec} %description servlet-%{servletspec_major}_%{servletspec_minor}-api Apache Tomcat Servlet API implementation classes version %{servletspec} @@ -588,14 +576,6 @@ echo "tomcat/catalina-ant" > %{buildroot}/%{_sysconfdir}/ant.d/catalina-ant #bnc#565901 ln -sf %{_sbindir}/%{app_name} %{buildroot}/%{bindir}/catalina.sh -# Install update-alternatives content -mkdir -p %{buildroot}%{_sysconfdir}/alternatives -ln -s -f %{_sysconfdir}/alternatives/el_api %{buildroot}%{_javadir}/%{app_name}-el_api.jar -ln -s -f %{_sysconfdir}/alternatives/jsp %{buildroot}%{_javadir}/%{app_name}-jsp.jar -# To avoid conflicts with servletapi4 and servletapi5 create a link to incorrect /etc/alternatives/servlet.jar. -# It will be changed anyways to the correct symlink by update-alternatives. -ln -s -f %{_sysconfdir}/alternatives/servlet.jar %{buildroot}%{_javadir}/servlet.jar - %pre # add the tomcat user and group getent group tomcat >/dev/null || %{_sbindir}/groupadd -r tomcat @@ -627,49 +607,6 @@ runuser -u tomcat -g tomcat -- xsltproc --output %{confdir}/server.xml %{confdir %postun jsvc %service_del_postun %{app_name}-jsvc.service -%post el-%{elspec_major}_%{elspec_minor}-api -update-alternatives --install %{_javadir}/%{app_name}-el_api.jar el_api %{_javadir}/%{app_name}-el-%{elspec}-api.jar 20300 - -%postun el-%{elspec_major}_%{elspec_minor}-api -if [ $1 -eq 0 ] ; then - update-alternatives --remove el_api %{_javadir}/%{app_name}-el-%{elspec}-api.jar -fi - -%post jsp-%{jspspec_major}_%{jspspec_minor}-api -update-alternatives --install %{_javadir}/%{app_name}-jsp.jar jsp \ - %{_javadir}/%{app_name}-jsp-%{jspspec}-api.jar 20200 - -%postun jsp-%{jspspec_major}_%{jspspec_minor}-api -if [ $1 -eq 0 ] ; then - update-alternatives --remove jsp \ - %{_javadir}/%{app_name}-jsp-%{jspspec}-api.jar -fi - -%post servlet-%{servletspec_major}_%{servletspec_minor}-api -update-alternatives --install %{_javadir}/servlet.jar servlet \ - %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar 30000 -# Fix for bsc#1092163. -# Keep the /usr/share/java/tomcat-servlet.jar symlink for compatibility. -# In case of update from an older version where /usr/share/java/tomcat-servlet.jar is an alternatives symlink -# the update-alternatives in the new version will cause a rename tomcat-servlet.jar -> servlet.jar. -# This makes sure the %{app_name}-servlet.jar is recreated if it's missing because of the rename. -if [ ! -f %{_javadir}/%{app_name}-servlet.jar ]; then - echo "Recreating symlink %{_javadir}/%{app_name}-servlet.jar" - ln -s %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar %{_javadir}/%{app_name}-servlet.jar -fi - -%postun servlet-%{servletspec_major}_%{servletspec_minor}-api -if [ $1 -eq 0 ] ; then - if [ ! -f %{_sysconfdir}/alternatives/servlet ]; then - # servlet was removed on uninstall. - # Create a broken symlink to make sure update-alternatives works correctly and falls back - # to servletapi5 or servletapi4 if they're installed. - ln -s %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar %{_sysconfdir}/alternatives/servlet - fi - update-alternatives --remove servlet \ - %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar -fi - %post lib # those links are no longer needed rm -f \ @@ -792,11 +729,6 @@ fi %{_javadir}/%{app_name}-el-%{elspec}-api.jar %{_javadir}/%{app_name}-el-api.jar %{libdir}/%{app_name}-el-%{elspec}-api.jar -%ghost %{_javadir}/%{app_name}-el_1_0_api.jar -%ghost %{_javadir}/%{app_name}-el_api.jar -%ghost %{_sysconfdir}/alternatives/%{app_name}-el_api.jar -%ghost %{_sysconfdir}/alternatives/el_1_0_api -%ghost %{_sysconfdir}/alternatives/el_api %files doc %doc %{_javadocdir}/%{app_name} @@ -804,9 +736,6 @@ fi %files jsp-%{jspspec_major}_%{jspspec_minor}-api -f output/dist/src/res/maven/.mfiles-jsp-api %{_javadir}/%{app_name}-jsp-%{jspspec}-api.jar %{_javadir}/%{app_name}-jsp-api.jar -%ghost %{_javadir}/%{app_name}-jsp.jar -%ghost %{_sysconfdir}/alternatives/%{app_name}-jsp.jar -%ghost %{_sysconfdir}/alternatives/jsp %files lib -f output/dist/src/res/maven/.mfiles %{libdir} @@ -826,10 +755,6 @@ fi %{_javadir}/%{app_name}-servlet-%{servletspec}-api.jar %{_javadir}/%{app_name}-servlet-api.jar %{_javadir}/%{app_name}-servlet.jar -%{_javadir}/servlet.jar -%ghost %{_sysconfdir}/alternatives/tomcat-servlet.jar -%ghost %attr(-,root,root) %{_sysconfdir}/alternatives/servlet.jar -%ghost %attr(-,root,root) %{_sysconfdir}/alternatives/servlet %files webapps %defattr(0644,root,tomcat,0755) -- 2.51.1 From 6566d954a71c617e54dd37f3f28adc3bfed014be005c24cd3236874b13631f44 Mon Sep 17 00:00:00 2001 From: Ricardo Mestre Date: Thu, 6 Nov 2025 16:23:39 +0000 Subject: [PATCH 6/7] Update to Tomcat 11.0.13 --- apache-tomcat-11.0.10-src.tar.gz | 3 - apache-tomcat-11.0.10-src.tar.gz.asc | 16 ---- apache-tomcat-11.0.13-src.tar.gz | 3 + apache-tomcat-11.0.13-src.tar.gz.asc | 16 ++++ tomcat11.changes | 113 +++++++++++++++++++++++++++ tomcat11.spec | 2 +- 6 files changed, 133 insertions(+), 20 deletions(-) delete mode 100644 apache-tomcat-11.0.10-src.tar.gz delete mode 100644 apache-tomcat-11.0.10-src.tar.gz.asc create mode 100644 apache-tomcat-11.0.13-src.tar.gz create mode 100644 apache-tomcat-11.0.13-src.tar.gz.asc diff --git a/apache-tomcat-11.0.10-src.tar.gz b/apache-tomcat-11.0.10-src.tar.gz deleted file mode 100644 index 58e4409..0000000 --- a/apache-tomcat-11.0.10-src.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:759abc8708fad0b63eeb49f0098632a343de164e8c08c1406bd3b40dc3914889 -size 7169469 diff --git a/apache-tomcat-11.0.10-src.tar.gz.asc b/apache-tomcat-11.0.10-src.tar.gz.asc deleted file mode 100644 index 01aa404..0000000 --- a/apache-tomcat-11.0.10-src.tar.gz.asc +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCAAdFiEEqcXfTSLpmZjZh1pREMAcWi9gWecFAmiLoBUACgkQEMAcWi9g -Wef1ZhAA88WDLuHSHd4cMO9XFoQ+GPlYFw/exFo17GJ6W9Hi0iLYwzZKfgup9evq -K86HmhecGHFh2qL7rjo1aB6Kl3ls3yEhIeYNyZA1tdMs7CKtcUyqtVQCR4AG4p9J -hcq8U5dwxCUyl29/pkJw4x7og8WmQh6+5fHy0HEm6xfk1Wie0aAAkIaGKWixo43l -R+ZVmWqbgaHK3QP0EIGtGfS2Q3GELuTyEQD5IokeE8REjgWSixvpmo6xI+JcxeA2 -u9bZguvH2lOmG+grGWWOQKe/JZNXE8nHKoMo1eDeFi9FSw0lsYDLcOHUdsZ2I7PY -yOfkDZ9fEZOvLLnSOcbFjD2bJsXT93p3lL9Gg3/OiA2uhWr7NjLxGHAtVgvpocm9 -FQ79hMhMvGvPjCuY6gI6E+xmbEEocfVGTWLNnHtCfCgcR75sfWXePS3nHZRlbr9b -6AsmXvjJJF9ob+a5qTRYB4lCndYsCcHDbhI5BJqa8c4tN6+FUWcZlimFWpTJmvC7 -C0w0t8AVpOxvaSOWNj+ndbivSBCsouFyPLzFB0xS6wxMZBkmlLcz4m0ydENFKIXz -ruEP3FVZMaEtS7P3tr3MBKSamIYImS84gBT/V0Z1FhS4OEy7PVkZo7vhbxzFfr+t -9wnv4581cn+fYYzPIE/I3kvFztLn30dV3p89hSvmD0nR37WY5xk= -=uKQB ------END PGP SIGNATURE----- diff --git a/apache-tomcat-11.0.13-src.tar.gz b/apache-tomcat-11.0.13-src.tar.gz new file mode 100644 index 0000000..2c0c97c --- /dev/null +++ b/apache-tomcat-11.0.13-src.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34d962ae8c33029e9bfc960310c81e9a46112b147f1af515fef7caea6a72ae13 +size 7191673 diff --git a/apache-tomcat-11.0.13-src.tar.gz.asc b/apache-tomcat-11.0.13-src.tar.gz.asc new file mode 100644 index 0000000..2032769 --- /dev/null +++ b/apache-tomcat-11.0.13-src.tar.gz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEqcXfTSLpmZjZh1pREMAcWi9gWecFAmjpFScACgkQEMAcWi9g +WeenIxAA9swmm5DatkFudRkx7BQCHt+J5qXnN0r9YCEwIWiXSRFUSqKOesGf3oqD +yXsy/DweapfKTwAhzUnx57ZRgJ09e5cTZ27Y2WoaQwlDNZbJ8pYziBfkIc6We+HS +VlpEtqChNLWc4+x7GdNLswywv5yq5pRcAVHBM2eNSqDEin5uwcj4YTdBT3OPH1dp +HEKkrVOtho2Aj9f8SjHXEDdiDGL4mmUp3o/lajNditLJiAlolXPgbdW326u5phLY +Xylehoe0rBKXls1HVWIdzkRF1YWxyW22dcqVBTI2R/kWyecmbPnXA9eYt4nUVvoc +KpbvSNErt3o+5q7K5GJg8Tp7vy7NqUD4Jd95hDUx+DId8Li6kXaLp6QrzxyiLIAP +QuQfl3ZHjcjSiBBGAZxws0tpaBO4d5INM7Nbdb9Sy0hiCJGTevugJKkl0NOKfb0K +7IUJfofI1ZF9zKuy9uSNwqGAKUSe36qgRXFpEpsbZ9E+ZwXRqldCbyBH+Lk3YsXb +x4Jw8YydPmRdaUdHmK5paicD6DgBh18MSOeoKEHL+t5fNLWExTIKOhly7w9lZSVq +i/SwpvkS0htmPCK8OFyLxHF9oBKbzqMqfs4914pBdbd2TfT1o8xFDHGvUILv3Pho +iuxXwsQtS9XidlgUReDFU9iB3D/Q3PR9FleUpwtnl4ZNe4NQRxc= +=NWy6 +-----END PGP SIGNATURE----- diff --git a/tomcat11.changes b/tomcat11.changes index c4005e6..b814dc3 100644 --- a/tomcat11.changes +++ b/tomcat11.changes @@ -1,3 +1,116 @@ +------------------------------------------------------------------- +Thu Nov 6 16:11:41 UTC 2025 - Ricardo Mestre + +- Update to Tomcat 11.0.13 + * Fixed CVEs: + + CVE-2025-55752: directory traversal via rewrite with possible RCE if PUT + is enabled (bsc#1252753) + + CVE-2025-55754: Improper Neutralization of Escape, Meta, or Control + Sequences vulnerability in Apache Tomcat (bsc#1252905) + + CVE-2025-61795: temporary copies during the processing of multipart + upload can lead to a denial of service (bsc#1252756) + * Catalina + + Add: Add CIDR support for the configuration of internal and trusted + proxies for the RemoteIpFilter and RemoteIpValve. Configuration via + regular expression has been deprecated and will be removed in Tomcat 12. + (markt) + + Fix: Log warnings when the SSO configuration does not comply with the + documentation. (remm) + + Update: Deprecate the RemoteAddrFilter and RemoteAddValve in favour of the + RemoteCIDRFilter and RemoteCIDRValve. (markt) + + Fix: 69837: Fix corruption of the class path generated by the Loader when + running on Windows. (markt) + + Fix: Reject requests that map to invalid Windows file names earlier. + (markt) + + Fix: 69839: Ensure that changes to session IDs (typically after + authentication) are promulgated to the SSO Valve to ensure that SSO + entries are fully clean-up on session expiration. Patch provided by Kim + Johan Andersson. (markt) + + Fix: Fix a race condition in the creation of the storage location for the + FileStore. (markt) + + Update: Change the digest used to calculate strong ETags (if enabled) for + the default Servlet from SHA-1 to SHA-256 to align with the recommendation + in RFC 9110 that hash functions used to generate strong ETags should be + collision resistant. (markt) + + Fix: HTTP methods are case-sensitive so always use case sensitive + comparisons when comparing HTTP methods. (markt) + + Fix: 69814: Ensure that HttpSession.isNew() returns false once the client + has joined the session. (markt) + + Fix: Further performance improvements for ParameterMap. (jengebr/markt) + + Code: Refactor access log time stamps to be based on the Instant request + processing starts. (markt) + + Fix: Fix a case-sensitivity issue in the trailer header allow list. + (markt) + + Fix: Be proactive in cleaning up temporary files after a failed multi-part + upload rather than waiting for GC to do it. (markt) + + Code: Remove a number of unnecessary packages from the + catalina-deployer.jar. (markt) + + Fix: 69781: Fix concurrent access issues in the session FileStore + implementation that were causing lost sessions when the store was used + with the PersistentValve. Based on pull request #882 by Aaron Ogburn. + (markt) + + Code: Refactor WebResource locking to use the new + KeyedReentrantReadWriteLock. (markt) + + Fix: Fix handling of QSA and QSD flags in RewriteValve. (markt) + * Cluster + + Fix: Prevent the channel configuration (sender, receiver, membership + service) from being changed unless the channel is fully stopped. (markt) + + Fix: Handle spurious wake-ups during leader election for + NonBlockingCoordinator. (markt) + + Fix: Handle spurious wake-ups during sending of messages by RpcChannel. + (markt) + * Coyote + + Fix: 69836: Incorrect processing of partitioned setting when generating + session cookie. Patch submitted by Marc Pynaert. (remm) + + Fix: 69848: Fix copy/paste errors in 11.0.12 that meant DELETE requests + received via the AJP connector were processed as OPTIONS requests and + PROPFIND requests were processed as TRACE. (markt) + + Update: Add specific certificate selection code for TLS 1.3 supporting + post quantum cryptography. Certificates defined with type MLDSA will be + selected depending on the TLS client hello. (remm) + + Update: Add groups attribute on SSLHostConfig allowing to restrict which + groups can be enabled on the SSL engine. (remm) + + Add: Optimize the conversion of HTTP method from byte form to String form. + (markt) + + Fix: Store HTTP request headers using the original case for the header + name rather than forcing it to lower case. (markt) + + Fix: 69762: Additional overflow fix for HPACK decoding of integers. Pull + request #880 by Chenjp. (markt) + + Fix: Ensure keys are handed out to OpenSSL even if PEMFile fails to + process it, with appropriate logging. (remm) + + Fix: Add new ML-DSA key algorithm to PEMFile and improve reporting when + reading a key fails. (remm) + + Fix: Fix possible early timeouts for network operations caused by a + spurious wake-up of a waiting thread. Found by Coverity Scan. (markt) + * Web applications + + Fix: Documentation. Clarify the purpose of the maxPostSize attribute of + the Connector element. (markt) + + Fix: Avoid NPE in manager webapp displaying certificate information. + (remm) + * Websocket + + Fix: 69845: When using permessage-deflate with Java 25 onwards, handle the + underlying Inflater and/or Deflater throwing IllegalStateException when + closed rather than NullPointerException as they do in Java 24 and earlier. + (markt) + * Other + + Fix: 69847: Remove remaining references to the + org.apache.tomcat.util.codec.binary package which has been deleted. + (markt) + + Update: Update Byte Buddy to 1.17.7. (markt) + + Update: Update Checkstyle to 11.1.0. (markt) + + Update: Update SpotBugs to 4.9.6. (markt) + + Update: Update Jsign to 7.2. (markt) + + Add: Improvements to Russian translations provided by usmazat. (markt) + + Add: Improvements to French translations. (remm) + + Add: Improvements to Japanese translations provided by tak7iji. (markt) + + Update: Minor refactoring in JULI loggers. Patch provided by minjund. + (schultz) + + Code: Review logging and include the full stack trace and exception + message by default rather then just the exception message when logging an + error or warning in response to an exception. (markt) + + Add: Add escaping to log formatters to align with JSON formatter. (markt) + + Update: Update Checkstyle to 11.0.0. (markt) + ------------------------------------------------------------------- Wed Oct 1 12:19:04 UTC 2025 - Fridrich Strba diff --git a/tomcat11.spec b/tomcat11.spec index 88f4f6e..9b8df2f 100644 --- a/tomcat11.spec +++ b/tomcat11.spec @@ -29,7 +29,7 @@ %define elspec %{elspec_major}.%{elspec_minor} %define major_version 11 %define minor_version 0 -%define micro_version 10 +%define micro_version 13 %define java_major 1 %define java_minor 17 %define java_version %{java_major}.%{java_minor} -- 2.51.1 From 3ced4a4fe86634f2ccb99623f4a096c9d29e3bafe24e9c7822002205b798b146 Mon Sep 17 00:00:00 2001 From: Ricardo Mestre Date: Fri, 6 Mar 2026 13:00:34 +0000 Subject: [PATCH 7/7] Update to Tomcat 11.0.18 --- apache-tomcat-11.0.13-src.tar.gz | 3 - apache-tomcat-11.0.13-src.tar.gz.asc | 16 --- apache-tomcat-11.0.18-src.tar.gz | 3 + apache-tomcat-11.0.18-src.tar.gz.asc | 16 +++ tomcat11.changes | 184 +++++++++++++++++++++++++++ tomcat11.spec | 2 +- 6 files changed, 204 insertions(+), 20 deletions(-) delete mode 100644 apache-tomcat-11.0.13-src.tar.gz delete mode 100644 apache-tomcat-11.0.13-src.tar.gz.asc create mode 100644 apache-tomcat-11.0.18-src.tar.gz create mode 100644 apache-tomcat-11.0.18-src.tar.gz.asc diff --git a/apache-tomcat-11.0.13-src.tar.gz b/apache-tomcat-11.0.13-src.tar.gz deleted file mode 100644 index 2c0c97c..0000000 --- a/apache-tomcat-11.0.13-src.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:34d962ae8c33029e9bfc960310c81e9a46112b147f1af515fef7caea6a72ae13 -size 7191673 diff --git a/apache-tomcat-11.0.13-src.tar.gz.asc b/apache-tomcat-11.0.13-src.tar.gz.asc deleted file mode 100644 index 2032769..0000000 --- a/apache-tomcat-11.0.13-src.tar.gz.asc +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCAAdFiEEqcXfTSLpmZjZh1pREMAcWi9gWecFAmjpFScACgkQEMAcWi9g -WeenIxAA9swmm5DatkFudRkx7BQCHt+J5qXnN0r9YCEwIWiXSRFUSqKOesGf3oqD -yXsy/DweapfKTwAhzUnx57ZRgJ09e5cTZ27Y2WoaQwlDNZbJ8pYziBfkIc6We+HS -VlpEtqChNLWc4+x7GdNLswywv5yq5pRcAVHBM2eNSqDEin5uwcj4YTdBT3OPH1dp -HEKkrVOtho2Aj9f8SjHXEDdiDGL4mmUp3o/lajNditLJiAlolXPgbdW326u5phLY -Xylehoe0rBKXls1HVWIdzkRF1YWxyW22dcqVBTI2R/kWyecmbPnXA9eYt4nUVvoc -KpbvSNErt3o+5q7K5GJg8Tp7vy7NqUD4Jd95hDUx+DId8Li6kXaLp6QrzxyiLIAP -QuQfl3ZHjcjSiBBGAZxws0tpaBO4d5INM7Nbdb9Sy0hiCJGTevugJKkl0NOKfb0K -7IUJfofI1ZF9zKuy9uSNwqGAKUSe36qgRXFpEpsbZ9E+ZwXRqldCbyBH+Lk3YsXb -x4Jw8YydPmRdaUdHmK5paicD6DgBh18MSOeoKEHL+t5fNLWExTIKOhly7w9lZSVq -i/SwpvkS0htmPCK8OFyLxHF9oBKbzqMqfs4914pBdbd2TfT1o8xFDHGvUILv3Pho -iuxXwsQtS9XidlgUReDFU9iB3D/Q3PR9FleUpwtnl4ZNe4NQRxc= -=NWy6 ------END PGP SIGNATURE----- diff --git a/apache-tomcat-11.0.18-src.tar.gz b/apache-tomcat-11.0.18-src.tar.gz new file mode 100644 index 0000000..36475ac --- /dev/null +++ b/apache-tomcat-11.0.18-src.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48ddfe63b95a2db16ad7a317a9d912ebf539bda4560d777edc67095f9f1f6e41 +size 7227123 diff --git a/apache-tomcat-11.0.18-src.tar.gz.asc b/apache-tomcat-11.0.18-src.tar.gz.asc new file mode 100644 index 0000000..7e69245 --- /dev/null +++ b/apache-tomcat-11.0.18-src.tar.gz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEqcXfTSLpmZjZh1pREMAcWi9gWecFAmlzUeYACgkQEMAcWi9g +WedxehAA9WD0jnoGFYW0el9ZOm063565vh0edFA5totlDn892sn33tFw1d/gOP5Z +aX78kfRHrNx0KsEvTJ+UO1NbtqInI2aZ5hiIoYcV9yKCADdkXuyjjLGV7cENlJOy +4PevRB3sEUYnaReikNmnnbMrO5GDed4fvHzApUiXxSTSpzz8uiZD3mr2cl7ZZ369 +nqAgxYWIPWj3GB8IMkpHvksnJr/PaAqTbUUCtCQJNVC+m/0aOtoExYBQ0auQbGpi +qBTXdPxft3WhYMZ1fHjy6s03poYSfP0298hMYShIqPGoERvPtkcVSC90rsrWP/ZS +lFbB/VTCZ9VTI6xMigP0H0iimhpbKMQ2PAfq67hRo5vO0k8Hge6IlwIOM0Ae/88u +ICow3oLvDaUFYBDDFJ5pIAfNWDwgZyJ1W9j+r95UVZX5+Y0/xrQvz3udsPeUueHT +mVyqiFC8YEAlKHtqr7Xsz6BJKCWyFblLESsKMORj08lFuWxUdPhoEDGhnqJgxPrc +c6l4cVKWrN/W1ly5IeTo5YQ7XDaQdQBs0cOQZjECeFhcmdXoyQjLGWV1907uO30A +u8GeSMt7T8W2acQt5u8QsNwqxd42aQevM/8OH3raC9escvM8AylhmZrB/y3By2Ze +uyjEHaTFV9q1w2ijCKyuAqa4JWFta2XU3Qk7/TsvOuq9vcBHoLo= +=y/Ff +-----END PGP SIGNATURE----- diff --git a/tomcat11.changes b/tomcat11.changes index b814dc3..1328f43 100644 --- a/tomcat11.changes +++ b/tomcat11.changes @@ -1,3 +1,187 @@ +------------------------------------------------------------------- +Fri Mar 6 12:58:41 UTC 2026 - Ricardo Mestre + +- Update to Tomcat 11.0.18 + * Fixed CVEs: + + CVE-2025-66614: client certificate verification bypass due to virtual + host mapping (bsc#1258371) + + CVE-2026-24733: improper input validation on HTTP/0.9 requests + (bsc#1258385) + + CVE-2026-24734: certificate revocation bypass due to incomplete OCSP + verification checks (bsc#1258387) + * Catalina + + Fix: 69932: Fix request end access log pattern regression, which would log + the start time of the request instead. (remm) + + Fix: 69623: Additional fix for the long standing regression that meant + that calls to ClassLoader.getResource().getContent() failed when made from + within a web application with resource caching enabled if the target + resource was packaged in a JAR file. (markt) + + Fix: Pull request #923: Avoid adding multiple CSRF tokens to a URL in the + CsrfPreventionFilter. (schultz) + + Fix: 69918: Ensure request parameters are correctly parsed for HTTP/2 + requests when the content-length header is not set. (dsoumis) + + Update: Enable minimum and recommended Tomcat Native versions to be set + separately for Tomcat Native 1.x and 2.x. Update the minimum and + recommended versions for Tomcat Native 1.x to 1.3.4. Update the minimum + and recommended versions for Tomcat Native 2.x to 2.0.12. (markt) + + Add: Add a new ssoReauthenticationMode to the Tomcat provided + Authenticators that provides a per Authenticator override of the SSO Valve + requireReauthentication attribute. (markt) + + Fix: Ensure URL encoding errors in the Rewrite Valve trigger an exception + rather than silently using a replacement character. (markt) + + Fix: 69871: Increase log level to INFO for missing configuration for the + rewrite valve. (remm) + + Fix: Add log warnings for additional Host appBase suspicious values. + (remm) + + Fix: Remove hard dependency on tomcat-jni.jar for catalina.jar. + org.apache.catalina.Connector no longer requires + org.apache.tomcat.jni.AprStatus to be present. (markt) + + Add: Add the ability to use a custom function to generate the client + identifier in the CrawlerSessionManagerValve. This is only available + programmatically. Pull request #902 by Brian Matzon. (markt) + + Fix: Change the SSO reauthentication behaviour for SPNEGO authentication + so that a normal SPNEGO authentication is performed if the SSL Valve is + configured with reauthentication enabled. This is so that the delegated + credentials will be available to the web application. (markt) + + Fix: When generating the class path in the Loader, re-order the check on + individual class path components to avoid a potential + NullPointerException. Identified by Coverity Scan. (markt) + + Fix: Fix SSL socket factory configuration in the JNDI realm. Based on pull + request #915 by Joshua Rogers. (remm) + + Update: Add an attribute, digestInRfc3112Order, to + MessageDigestCredentialHandler to control the order in which the + credential and salt are digested. By default, the current, non-RFC 3112 + compliant, order of salt then credential will be used. This default will + change in Tomcat 12 to the RFC 3112 compliant order of credential then + salt. (markt) + * Cluster + + Add: 62814: Document that human-readable names may be used for + mapSendOptions and align documentation with channelSendOptions. Based on + pull request #929 by archan0621. (markt) + * Clustering + + Fix: Correct a regression introduced in 11.0.11 that broke some clustering + configurations. (markt) + * Coyote + + Fix: 69936: Fix bug in previous fix for Tomcat Native crashes on shutdown + that triggered a significant memory leak. Patch provided by Wes. (markt) + + Fix: Prevent concurrent release of OpenSSLEngine resources and the + termination of the Tomcat Native library as it can cause crashes during + Tomcat shutdown. (markt) + + Fix: Improve warnings when setting ciphers lists in the FFM code, + mirroring the tomcat-native changes. (remm) + + Fix: 69910: Dereference TLS objects right after closing a socket to + improve memory efficiency. (remm) + + Fix: Relax the JSSE vs OpenSSL configuration style checks on SSLHostConfig + to reflect the existing implementation that allows one configuration style + to be used for the trust attributes and a different style for all the + other attributes. (markt) + + Fix: Better warning message when OpenSSLConf configuration elements are + used with a JSSE TLS implementation. (markt) + + Fix: When using OpenSSL via FFM, don't log a warning about missing CA + certificates unless CA certificates were configured and the configuration + failed. (markt) + + Add: For configuration consistency between OpenSSL and JSSE TLS + implementations, TLSv1.3 cipher suites included in the ciphers attribute + of an SSLHostConfig are now always ignored (previously they would be + ignored with OpenSSL implementations and used with JSSE implementations) + and a warning is logged that the cipher suite has been ignored. (markt) + + Add: Add the ciphersuite attribute to SSLHostConfig to configure the + TLSv1.3 cipher suites. (markt) + + Add: Add OCSP support to JSSE based TLS connectors and make the use of + OCSP configurable per connector for both JSSE and OpenSSL based TLS + implementations. Align the checks performed by OpenSSL with those + performed by JSSE. (markt) + + Add: Add support for soft failure of OCSP checks with soft failure support + disabled by default. (markt) + + Add: Add support for configuring the verification flags passed to + OCSP_basic_verify when using an OpenSSL based TLS implementation. (markt) + + Fix: Fix OpenSSL FFM code compatibility with LibreSSL versions below 3.5. + (remm) + + Fix: Don't log an incorrect certificate KeyStore location when creating a + TLS connector if the KeyStore instance has been set directly on the + connector. (markt) + + Fix: HTTP/0.9 only allows GET as the HTTP method. (remm) + + Add: Add strictSni attribute on the Connector to allow matching the + SSLHostConfig configuration associated with the SNI host name to the + SSLHostConfig configuration matched from the HTTP protocol host name. Non + matching configurations will cause the request to be rejected. The + attribute default value is true, enabling the matching. (remm) + + Fix: Graceful failure for OCSP on BoringSSL in the FFM code. (remm) + + Fix: 69866: Fix a memory leak when using a trust store with the OpenSSL + provider. Pull request #912 by aogburn. (markt) + + Fix: Fix potential crash on shutdown when a Connector depends on the + Tomcat Native library. (markt) + + Fix: Fix AJP message length check. Pull request #916 by Joshua Rogers. + (remm) + * Jasper + + Fix: 69333: Correct a regression in the previous fix for 69333 and ensure + that reuse() or release() is always called for a tag. (markt) + + Fix: 69877: Catch IllegalArgumentException when processing URIs when + creating the classpath to handle invalid URIs. (remm) + + Fix: Fix populating the classpath with the webapp classloader + repositories. (remm) + + Fix: 69862: Avoid NPE unwrapping Servlet exception which would hide some + exception details. Patch submitted by Eric Blanquer. (remm) + * Jdbc-pool + + Fix: 64083: If the underlying connection has been closed, don't add it to + the pool when it is returned. Pull request #235 by Alex Panchenko. (markt) + * Web applications + + Fix: Manager: Fix abrupt truncation of the HTML and JSON complete server + status output if one or more of the web applications failed to start. + (schultz) + + Add: Manager: Include web application state in the HTML and JSON complete + server status output. (markt) + + Add: Documentation: Expand the documentation to better explain when OCSP + is supported and when it is not. (markt) + * Websocket + + Fix: 69920: When attempting to write to a closed Writer or OutputStream + obtained from a WebSocket session, throw an IOException rather than an + IllegalStateExcpetion as required by Writer and strongly suggested by + OutputStream. (markt) + * Other + + Add: Add property "gpg.sign.files" to optionally disable release artefact + signing with GPG. (rjung) + + Add: Add test.silent property to suppress JUnit console output during test + execution. Useful for cleaner console output when running tests with + multiple threads. (csutherl) + + Update: Update the internal fork of Commons Pool to 2.13.1. (markt) + + Update: Update the internal fork of Commons DBCP to 2.14.0. (markt) + + Update: Update Commons Daemon to 1.5.1. (markt) + + Update: Update to the Eclipse JDT compiler 4.37. (markt) + + Update: Update ByteBuddy to 1.18.3. (markt) + + Update: Update UnboundID to 7.0.4. (markt) + + Update: Update Checkstyle to 12.3.1. (markt) + + Add: Improvements to French translations. (markt) + + Add: Improvements to Japanese translations provided by tak7iji. (markt) + + Add: Improvements to Chinese translations provided by Yang. vincent.h and + yong hu. (markt) + + Update: Update Tomcat Native to 2.0.12. (markt) + + Add: Add test profile system for selective test execution. Profiles can be + specified via -Dtest.profile= to run specific test subsets without + using patterns directly. Profile patterns are defined in + test-profiles.properties. (csutherl) + + Update: Update file extension to media type mappings to align with the + current list used by the Apache Web Server (httpd). (markt) + + Update: Update the packaged version of the Tomcat Migration Tool for + Jakarta EE to 1.0.10. (markt) + + Update: Update Commons Daemon to 1.5.0. (markt) + + Update: Update Byte Buddy to 1.18.2. (markt) + + Update: Update Checkstyle to 12.2.0. (markt) + + Add: Improvements to Spanish translations provided by White Vogel. (markt) + + Add: Improvements to French translations. (remm) + + Add: Improvements to Japanese translations provided by tak7iji. (markt) + + Update: Update the internal fork of Apache Commons BCEL to 6.11.0. (markt) + + Update: Update to the Eclipse JDT compiler 4.37. (markt) + + Update: Update to Byte Buddy 1.17.8. (markt) + + Update: Update to Checkstyle 12.1.1. (markt) + + Update: Update to Jacoco 0.8.14. (markt) + + Update: Update to SpotBugs 4.9.8. (markt) + + Update: Update to JSign 7.4. (markt) + + Update: Update Maven Resolver Ant Tasks to 1.6.0. (rjung) + + Add: Improvements to French translations. (remm) + + Add: Improvements to Japanese translations provided by tak7iji. (markt) + + ------------------------------------------------------------------- Thu Nov 6 16:11:41 UTC 2025 - Ricardo Mestre diff --git a/tomcat11.spec b/tomcat11.spec index 9b8df2f..6ca155a 100644 --- a/tomcat11.spec +++ b/tomcat11.spec @@ -29,7 +29,7 @@ %define elspec %{elspec_major}.%{elspec_minor} %define major_version 11 %define minor_version 0 -%define micro_version 13 +%define micro_version 18 %define java_major 1 %define java_minor 17 %define java_version %{java_major}.%{java_minor} -- 2.51.1