From 1af9a1c4668f23fa7390f82e120a61d5e38a3c2b Mon Sep 17 00:00:00 2001
From: CentOS Buildsys
Limits the total length of chunk extensions in chunked HTTP requests.
++ If the value is -1
, no limit will be imposed. If not
++ specified, the default value of 8192
will be used.
The maximum size of the request and response HTTP header, specified + in bytes. If not specified, this attribute is set to 8192 (8 KB).
diff --git a/SOURCES/tomcat-7.0.42-CVE-2014-0050.patch b/SOURCES/tomcat-7.0.42-CVE-2014-0050.patch new file mode 100644 index 0000000..8ce8a51 --- /dev/null +++ b/SOURCES/tomcat-7.0.42-CVE-2014-0050.patch @@ -0,0 +1,107 @@ +--- java/org/apache/tomcat/util/http/fileupload/FileUploadBase.java.orig 2014-03-17 18:30:01.467636000 -0400 ++++ java/org/apache/tomcat/util/http/fileupload/FileUploadBase.java 2014-03-17 18:37:43.992207000 -0400 +@@ -805,7 +805,7 @@ + || (!contentType.toLowerCase(Locale.ENGLISH).startsWith(MULTIPART))) { + throw new InvalidContentTypeException(String.format( + "the request doesn't contain a %s or %s stream, content type header is %s", +- MULTIPART_FORM_DATA, MULTIPART_FORM_DATA, contentType)); ++ MULTIPART_FORM_DATA, MULTIPART_MIXED, contentType)); + } + + InputStream input = ctx.getInputStream(); +@@ -816,8 +816,7 @@ + if (requestSize != -1 && requestSize > sizeMax) { + throw new SizeLimitExceededException(String.format( + "the request was rejected because its size (%s) exceeds the configured maximum (%s)", +- Long.valueOf(requestSize), +- Long.valueOf(sizeMax)), ++ Long.valueOf(requestSize), Long.valueOf(sizeMax)), + requestSize, sizeMax); + } + input = new LimitedInputStream(input, sizeMax) { +@@ -844,7 +843,14 @@ + } + + notifier = new MultipartStream.ProgressNotifier(listener, requestSize); +- multi = new MultipartStream(input, boundary, notifier); ++ try { ++ multi = new MultipartStream(input, boundary, notifier); ++ } catch (IllegalArgumentException iae) { ++ throw new InvalidContentTypeException(String.format( ++ "The boundary specified in the %s header is too long", ++ CONTENT_TYPE), iae); ++ } ++ + multi.setHeaderEncoding(charEncoding); + + skipPreamble = true; +@@ -1022,7 +1028,7 @@ + * detail message. + */ + public InvalidContentTypeException() { +- // Nothing to do. ++ super(); + } + + /** +@@ -1035,6 +1041,10 @@ + super(message); + } + ++ public InvalidContentTypeException(String msg, Throwable cause) { ++ super(msg, cause); ++ } ++ + } + + /** +--- java/org/apache/tomcat/util/http/fileupload/MultipartStream.java.orig 2014-03-17 18:30:01.512626000 -0400 ++++ java/org/apache/tomcat/util/http/fileupload/MultipartStream.java 2014-03-17 18:41:15.868033000 -0400 +@@ -278,8 +278,7 @@ + * @param pNotifier The notifier, which is used for calling the + * progress listener, if any. + * +- * @see #MultipartStream(InputStream, byte[], +- * MultipartStream.ProgressNotifier) ++ * @throws IllegalArgumentException If the buffer size is too small + */ + MultipartStream(InputStream input, + byte[] boundary, +@@ -292,8 +291,12 @@ + + // We prepend CR/LF to the boundary to chop trailing CR/LF from + // body-data tokens. +- this.boundary = new byte[boundary.length + BOUNDARY_PREFIX.length]; + this.boundaryLength = boundary.length + BOUNDARY_PREFIX.length; ++ if (bufSize < this.boundaryLength + 1) { ++ throw new IllegalArgumentException( ++ "The buffer size specified for the MultipartStream is too small"); ++ } ++ this.boundary = new byte[this.boundaryLength]; + this.keepRegion = this.boundary.length; + System.arraycopy(BOUNDARY_PREFIX, 0, this.boundary, 0, + BOUNDARY_PREFIX.length); +@@ -313,8 +316,7 @@ + * @param pNotifier An object for calling the progress listener, if any. + * + * +- * @see #MultipartStream(InputStream, byte[], int, +- * MultipartStream.ProgressNotifier) ++ * @see #MultipartStream(InputStream, byte[], int, ProgressNotifier) + */ + MultipartStream(InputStream input, + byte[] boundary, +--- webapps/docs/changelog.xml.orig 2014-03-17 18:30:01.569656000 -0400 ++++ webapps/docs/changelog.xml 2014-03-17 18:44:11.967500000 -0400 +@@ -59,6 +59,11 @@ +ServletContextListener
s defined in one of the
diff --git a/SOURCES/tomcat-7.0.init b/SOURCES/tomcat-7.0.init
deleted file mode 100644
index f5269f5..0000000
--- a/SOURCES/tomcat-7.0.init
+++ /dev/null
@@ -1,319 +0,0 @@
-#!/bin/bash
-#
-# tomcat This shell script takes care of starting and stopping Tomcat
-#
-# chkconfig: - 80 20
-#
-### BEGIN INIT INFO
-# Provides: tomcat
-# Required-Start: $network $syslog
-# Required-Stop: $network $syslog
-# Default-Start:
-# Default-Stop:
-# Description: Release implementation for Servlet 3.0 and JSP 2.2
-# Short-Description: start and stop tomcat
-### END INIT INFO
-#
-# - originally written by Henri Gomez, Keith Irwin, and Nicolas Mailhot
-# - heavily rewritten by Deepak Bhole and Jason Corley
-#
-
-## Source function library.
-#. /etc/rc.d/init.d/functions
-# Source LSB function library.
-if [ -r /lib/lsb/init-functions ]; then
- . /lib/lsb/init-functions
-else
- exit 1
-fi
-
-DISTRIB_ID=`lsb_release -i -s 2>/dev/null`
-
-NAME="$(basename $0)"
-unset ISBOOT
-if [ "${NAME:0:1}" = "S" -o "${NAME:0:1}" = "K" ]; then
- NAME="${NAME:3}"
- ISBOOT="1"
-fi
-
-# For SELinux we need to use 'runuser' not 'su'
-if [ -x "/sbin/runuser" ]; then
- SU="/sbin/runuser -s /bin/sh"
-else
- SU="/bin/su -s /bin/sh"
-fi
-
-# Get the tomcat config (use this for environment specific settings)
-TOMCAT_CFG="/etc/tomcat/tomcat.conf"
-if [ -r "$TOMCAT_CFG" ]; then
- . $TOMCAT_CFG
-fi
-
-# Get instance specific config file
-if [ -r "/etc/sysconfig/${NAME}" ]; then
- . /etc/sysconfig/${NAME}
-fi
-
-# Define which connector port to use
-CONNECTOR_PORT="${CONNECTOR_PORT:-8080}"
-
-# Path to the tomcat launch script
-TOMCAT_SCRIPT="/usr/sbin/tomcat"
-
-# Tomcat program name
-TOMCAT_PROG="${NAME}"
-
-# Define the tomcat username
-TOMCAT_USER="${TOMCAT_USER:-tomcat}"
-
-# Define the tomcat log file
-TOMCAT_LOG="${TOMCAT_LOG:-${CATALINA_HOME}/logs/${NAME}-initd.log}"
-
-
-RETVAL="0"
-
-# Look for open ports, as the function name might imply
-function findFreePorts() {
- local isSet1="false"
- local isSet2="false"
- local isSet3="false"
- local lower="8000"
- randomPort1="0"
- randomPort2="0"
- randomPort3="0"
- local -a listeners="( $(
- netstat -ntl | \
- awk '/^tcp/ {gsub("(.)*:", "", $4); print $4}'
- ) )"
- while [ "$isSet1" = "false" ] || \
- [ "$isSet2" = "false" ] || \
- [ "$isSet3" = "false" ]; do
- let port="${lower}+${RANDOM:0:4}"
- if [ -z `expr " ${listeners[*]} " : ".*\( $port \).*"` ]; then
- if [ "$isSet1" = "false" ]; then
- export randomPort1="$port"
- isSet1="true"
- elif [ "$isSet2" = "false" ]; then
- export randomPort2="$port"
- isSet2="true"
- elif [ "$isSet3" = "false" ]; then
- export randomPort3="$port"
- isSet3="true"
- fi
- fi
- done
-}
-
-function makeHomeDir() {
- if [ ! -d "$CATALINA_HOME" ]; then
- echo "$CATALINA_HOME does not exist, creating"
- if [ ! -d "/usr/share/${NAME}" ]; then
- mkdir /usr/share/${NAME}
- cp -pLR /usr/share/tomcat/* /usr/share/${NAME}
- fi
- mkdir -p /var/log/${NAME} \
- /var/cache/${NAME} \
- /var/tmp/${NAME}
- ln -fs /var/cache/${NAME} ${CATALINA_HOME}/work
- ln -fs /var/tmp/${NAME} ${CATALINA_HOME}/temp
- cp -pLR /usr/share/${NAME}/bin $CATALINA_HOME
- cp -pLR /usr/share/${NAME}/conf $CATALINA_HOME
- ln -fs /usr/share/java/tomcat ${CATALINA_HOME}/lib
- ln -fs /usr/share/tomcat/webapps ${CATALINA_HOME}/webapps
- chown ${TOMCAT_USER}:${TOMCAT_USER} /var/log/${NAME}
- fi
-}
-
-function parseOptions() {
- options=""
- options="$options $(
- awk '!/^#/ && !/^$/ { ORS=" "; print "export ", $0, ";" }' \
- $TOMCAT_CFG
- )"
- if [ -r "/etc/sysconfig/${NAME}" ]; then
- options="$options $(
- awk '!/^#/ && !/^$/ { ORS=" ";
- print "export ", $0, ";" }' \
- /etc/sysconfig/${NAME}
- )"
- fi
- TOMCAT_SCRIPT="$options ${TOMCAT_SCRIPT}"
-}
-
-# See how we were called.
-function start() {
-
- echo -n "Starting ${TOMCAT_PROG}: "
- if [ "$RETVAL" != "0" ]; then
- log_failure_msg
- return
- fi
- if [ -f "/var/lock/subsys/${NAME}" ]; then
- if [ -s "/var/run/${NAME}.pid" ]; then
- read kpid < /var/run/${NAME}.pid
-# if checkpid $kpid 2>&1; then
- if [ -d "/proc/${kpid}" ]; then
- log_success_msg
- if [ "$DISTRIB_ID" = "MandrivaLinux" ]; then
- echo
- fi
- return 0
- fi
- fi
- fi
- # fix permissions on the log and pid files
- export CATALINA_PID="/var/run/${NAME}.pid"
- touch $CATALINA_PID 2>&1 || RETVAL="4"
- if [ "$RETVAL" -eq "0" -a "$?" -eq "0" ]; then
- chown ${TOMCAT_USER}:${TOMCAT_USER} $CATALINA_PID
- fi
- [ "$RETVAL" -eq "0" ] && touch $TOMCAT_LOG 2>&1 || RETVAL="4"
- if [ "$RETVAL" -eq "0" -a "$?" -eq "0" ]; then
- chown ${TOMCAT_USER}:${TOMCAT_USER} $TOMCAT_LOG
- fi
- if [ "$CATALINA_HOME" != "/usr/share/tomcat" -a "$RETVAL" -eq "0" ]; then
- # Create a tomcat directory if it doesn't exist
- makeHomeDir
- # If CATALINA_HOME doesn't exist modify port number so that
- # multiple instances don't interfere with each other
- findFreePorts
- sed -i -e "s/8005/${randomPort1}/g" -e "s/8080/${CONNECTOR_PORT}/g" \
- -e "s/8009/${randomPort2}/g" -e "s/8443/${randomPort3}/g" \
- ${CATALINA_HOME}/conf/server.xml
- fi
- parseOptions
- if [ "$RETVAL" -eq "0" -a "$SECURITY_MANAGER" = "true" ]; then
- $SU - $TOMCAT_USER -c "${TOMCAT_SCRIPT} start-security" \
- >> ${TOMCAT_LOG} 2>&1 || RETVAL="4"
- else
-
- [ "$RETVAL" -eq "0" ] && $SU - $TOMCAT_USER -c "${TOMCAT_SCRIPT} start" >> ${TOMCAT_LOG} 2>&1 || RETVAL="4"
- fi
- if [ "$RETVAL" -eq "0" ]; then
- log_success_msg
- touch /var/lock/subsys/${NAME}
- else
- log_failure_msg "Error code ${RETVAL}"
- fi
- if [ "$DISTRIB_ID" = "MandrivaLinux" ]; then
- echo
- fi
-}
-
-function stop() {
- echo -n "Stopping ${TOMCAT_PROG}: "
- if [ -f "/var/lock/subsys/${NAME}" ]; then
- parseOptions
- if [ "$RETVAL" -eq "0" ]; then
- touch /var/lock/subsys/${NAME} 2>&1 || RETVAL="4"
- [ "$RETVAL" -eq "0" ] && $SU - $TOMCAT_USER -c "${TOMCAT_SCRIPT} stop" >> ${TOMCAT_LOG} 2>&1 || RETVAL="4"
- fi
- if [ "$RETVAL" -eq "0" ]; then
- count="0"
- if [ -s "/var/run/${NAME}.pid" ]; then
- read kpid < /var/run/${NAME}.pid
- until [ "$(ps --pid $kpid | grep -c $kpid)" -eq "0" ] || \
- [ "$count" -gt "$SHUTDOWN_WAIT" ]; do
- if [ "$SHUTDOWN_VERBOSE" = "true" ]; then
- echo "waiting for processes $kpid to exit"
- fi
- sleep 1
- let count="${count}+1"
- done
- if [ "$count" -gt "$SHUTDOWN_WAIT" ]; then
- if [ "$SHUTDOWN_VERBOSE" = "true" ]; then
- log_warning_msg "killing processes which did not stop after ${SHUTDOWN_WAIT} seconds"
- fi
- kill -9 $kpid
- fi
- log_success_msg
- fi
- rm -f /var/lock/subsys/${NAME} /var/run/${NAME}.pid
- else
- log_failure_msg
- RETVAL="4"
- fi
- else
- log_success_msg
- RETVAL="0"
- fi
- if [ "$DISTRIB_ID" = "MandrivaLinux" ]; then
- echo
- fi
-}
-
-function usage()
-{
- echo "Usage: $0 {start|stop|restart|condrestart|try-restart|reload|force-reload|status|version}"
- RETVAL="2"
-}
-
-# See how we were called.
-RETVAL="0"
-case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart)
- stop
- start
- ;;
- condrestart|try-restart)
- if [ -s "/var/run/${NAME}.pid" ]; then
- stop
- start
- fi
- ;;
- reload)
- RETVAL="3"
- ;;
- force-reload)
- if [ -s "/var/run/${NAME}.pid" ]; then
- stop
- start
- fi
- ;;
- status)
- if [ -s "/var/run/${NAME}.pid" ]; then
- read kpid < /var/run/${NAME}.pid
- if [ -d "/proc/${kpid}" ]; then
- log_success_msg "${NAME} (pid ${kpid}) is running..."
- RETVAL="0"
- else
-# The pid file exists but the process is not running
- log_warning_msg "PID file exists, but process is not running"
- RETVAL="1"
- fi
- else
- pid="$(/usr/bin/pgrep -d , -u ${TOMCAT_USER} -G ${TOMCAT_USER} java)"
- if [ -z "$pid" ]; then
-# status ${NAME}
-# RETVAL="$?"
- log_success_msg "${NAME} is stopped"
- RETVAL="3"
- else
- log_success_msg "${NAME} (pid $pid) is running..."
- RETVAL="0"
- fi
- fi
- if [ -f /var/lock/subsys/${NAME} ]; then
- pid="$(/usr/bin/pgrep -d , -u ${TOMCAT_USER} -G ${TOMCAT_USER} java)"
-# The lockfile exists but the process is not running
- if [ -z "$pid" ]; then
- log_failure_msg "${NAME} lockfile exists but process is not running"
- RETVAL="2"
- fi
- fi
- ;;
- version)
- ${TOMCAT_SCRIPT} version
- ;;
- *)
- usage
- ;;
-esac
-
-exit $RETVAL
diff --git a/SPECS/tomcat.spec b/SPECS/tomcat.spec
index ddb2cab..18db988 100644
--- a/SPECS/tomcat.spec
+++ b/SPECS/tomcat.spec
@@ -31,7 +31,7 @@
%global jspspec 2.2
%global major_version 7
%global minor_version 0
-%global micro_version 40
+%global micro_version 42
%global packdname apache-tomcat-%{version}-src
%global servletspec 3.0
%global elspec 2.2
@@ -54,7 +54,7 @@
Name: tomcat
Epoch: 0
Version: %{major_version}.%{minor_version}.%{micro_version}
-Release: 2%{?dist}
+Release: 4%{?dist}
Summary: Apache Servlet/JSP Engine, RI for Servlet %{servletspec}/JSP %{jspspec} API
Group: System Environment/Daemons
@@ -62,7 +62,7 @@ License: ASL 2.0
URL: http://tomcat.apache.org/
Source0: http://www.apache.org/dist/tomcat/tomcat-%{major_version}/v%{version}/src/%{packdname}.tar.gz
Source1: %{name}-%{major_version}.%{minor_version}.conf
-Source2: %{name}-%{major_version}.%{minor_version}.init
+#Source2: %{name}-%{major_version}.%{minor_version}.init
Source3: %{name}-%{major_version}.%{minor_version}.sysconfig
Source4: %{name}-%{major_version}.%{minor_version}.wrapper
Source5: %{name}-%{major_version}.%{minor_version}.logrotate
@@ -83,13 +83,16 @@ Source19: %{name}-%{major_version}.%{minor_version}-jsvc.wrapper
Source20: %{name}-%{major_version}.%{minor_version}-jsvc.service
-Patch0: %{name}-%{major_version}.%{minor_version}-bootstrap-MANIFEST.MF.patch
-Patch1: %{name}-%{major_version}.%{minor_version}-tomcat-users-webapp.patch
+Patch0: %{name}-%{major_version}.%{minor_version}-bootstrap-MANIFEST.MF.patch
+Patch1: %{name}-%{major_version}.%{minor_version}-tomcat-users-webapp.patch
+Patch2: %{name}-%{version}-CVE-2013-4286.patch
+Patch3: %{name}-%{version}-CVE-2013-4322.patch
+Patch4: %{name}-%{version}-CVE-2014-0050.patch
BuildArch: noarch
BuildRequires: ant
-BuildRequires: ant-nodeps
+#BuildRequires: ant-nodeps
BuildRequires: ecj >= 1:4.2.1
BuildRequires: findutils
BuildRequires: apache-commons-collections
@@ -153,15 +156,15 @@ Requires: jpackage-utils
%description javadoc
Javadoc generated documentation for Apache Tomcat.
-%package systemv
-Group: System Environment/Daemons
-Summary: Systemv scripts for Apache Tomcat
-Requires: %{name} = %{epoch}:%{version}-%{release}
-Requires(post): chkconfig
-Requires(postun): chkconfig
+#%package systemv
+#Group: System Environment/Daemons
+#Summary: Systemv scripts for Apache Tomcat
+#Requires: %{name} = %{epoch}:%{version}-%{release}
+#Requires(post): chkconfig
+#Requires(postun): chkconfig
-%description systemv
-SystemV scripts to start and stop tomcat service
+#%description systemv
+#SystemV scripts to start and stop tomcat service
%package jsvc
Group: System Environment/Daemons
@@ -242,11 +245,16 @@ find . -type f \( -name "*.bat" -o -name "*.class" -o -name Thumbs.db -o -name "
%patch0 -p0
%patch1 -p0
+%patch2 -p0
+%patch3 -p0
+%patch4 -p0
+
%{__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
%build
export OPT_JAR_LIST="xalan-j2-serializer"
+
# we don't care about the tarballs and we're going to replace
# tomcat-dbcp.jar with apache-commons-{collections,dbcp,pool}-tomcat5.jar
# so just create a dummy file for later removal
@@ -358,8 +366,8 @@ popd
-e "s|\@\@\@TCTEMP\@\@\@|%{tempdir}|g" \
-e "s|\@\@\@LIBDIR\@\@\@|%{_libdir}|g" %{SOURCE3} \
> ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig/%{name}
-%{__install} -m 0644 %{SOURCE2} \
- ${RPM_BUILD_ROOT}%{_initrddir}/%{name}
+#%{__install} -m 0644 %{SOURCE2} \
+# ${RPM_BUILD_ROOT}%{_initrddir}/%{name}
%{__install} -m 0644 %{SOURCE4} \
${RPM_BUILD_ROOT}%{_sbindir}/%{name}
%{__install} -m 0644 %{SOURCE11} \
@@ -372,7 +380,7 @@ popd
${RPM_BUILD_ROOT}%{_unitdir}/%{name}-jsvc.service
%{__install} -m 0644 %{SOURCE18} \
${RPM_BUILD_ROOT}%{_sbindir}/%{name}-jsvc-sysd
-%{__ln_s} %{name} ${RPM_BUILD_ROOT}%{_sbindir}/d%{name}
+# %{__ln_s} %{name} ${RPM_BUILD_ROOT}%{_sbindir}/d%{name}
%{__sed} -e "s|\@\@\@TCLOG\@\@\@|%{logdir}|g" %{SOURCE5} \
> ${RPM_BUILD_ROOT}%{_sysconfdir}/logrotate.d/%{name}
%{__sed} -e "s|\@\@\@TCHOME\@\@\@|%{homedir}|g" \
@@ -503,15 +511,15 @@ EOF
# add the tomcat user and group
%{_sbindir}/groupadd -g %{tcuid} -r tomcat 2>/dev/null || :
%{_sbindir}/useradd -c "Apache Tomcat" -u %{tcuid} -g tomcat \
- -s /bin/nologin -r -d %{homedir} tomcat 2>/dev/null || :
+ -s /sbin/nologin -r -d %{homedir} tomcat 2>/dev/null || :
%post
# install but don't activate
%systemd_post %{name}.service
-%post systemv
+#%post systemv
# install but don't activate
-/sbin/chkconfig --add %{name}
+#/sbin/chkconfig --add %{name}
%post jsp-%{jspspec}-api
%{_sbindir}/update-alternatives --install %{_javadir}/jsp.jar jsp \
@@ -525,9 +533,11 @@ EOF
%{_sbindir}/update-alternatives --install %{_javadir}/elspec.jar elspec \
%{_javadir}/%{name}-el-%{elspec}-api.jar 20300
-%preun systemv
- %{_initrddir}/%{name} stop >/dev/null 2>&1
- /sbin/chkconfig --del %{name}
+#%preun systemv
+#if [ "$1" = "0" ]; then
+# %{_initrddir}/%{name} stop >/dev/null 2>&1
+# /sbin/chkconfig --del %{name}
+#fi
%preun
# clean tempdir and workdir on removal or upgrade
@@ -665,10 +675,10 @@ fi
%{appdir}/examples
%{appdir}/sample
-%files systemv
-%defattr(755,root,root,0755)
-%{_sbindir}/d%{name}
-%{_initrddir}/%{name}
+#%files systemv
+#%defattr(755,root,root,0755)
+#%{_sbindir}/d%{name}
+#%{_initrddir}/%{name}
%files jsvc
%defattr(755,root,root,0755)
@@ -676,7 +686,36 @@ fi
%{_sbindir}/%{name}-jsvc-sysd
%attr(0644,root,root) %{_unitdir}/%{name}-jsvc.service
+
%changelog
+* Thu Mar 20 2014 David Knox