diff --git a/.fmf/version b/.fmf/version
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/.fmf/version
@@ -0,0 +1 @@
+1
diff --git a/.gitignore b/.gitignore
index 19a3666..8df7f18 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,7 +10,7 @@ x86_64
/httpd-2.2.21.tar.bz2
/clog
/httpd-2.2.22.tar.bz2
-/httpd-2.4.?
+/httpd-2.4.??/
/httpd-2.4.2.tar.bz2
/httpd-2.4.3.tar.bz2
/httpd-2.4.4.tar.bz2
@@ -28,3 +28,31 @@ x86_64
/httpd.service.8
/httpd-2.4.26.tar.bz2
/httpd-2.4.27.tar.bz2
+/httpd-*.tar.bz2
+/httpd*.8
+/results_httpd
+/htcacheclean.service.8
+/httpd.conf.5
+/httpd-2.4.41.tar.bz2.asc
+/apachectl.8
+/httpd-2.4.43.tar.bz2.asc
+/KEYS
+/httpd-2.4.46.tar.bz2.asc
+/httpd-2.4.48.tar.bz2.asc
+/httpd-2.4.49.tar.bz2.asc
+/httpd-2.4.50.tar.bz2.asc
+/httpd-2.4.51.tar.bz2.asc
+/httpd-2.4.52.tar.bz2.asc
+/httpd-2.4.53.tar.bz2.asc
+/httpd-2.4.54.tar.bz2.asc
+/httpd-2.4.55.tar.bz2.asc
+/httpd-2.4.56.tar.bz2.asc
+/httpd-2.4.57.tar.bz2.asc
+/httpd-2.4.58.tar.bz2.asc
+/httpd-2.4.59.tar.bz2.asc
+/httpd-2.4.61.tar.bz2.asc
+/httpd-2.4.62.tar.bz2.asc
+/httpd-2.4.63.tar.bz2.asc
+/httpd-2.4.64.tar.bz2.asc
+/httpd-2.4.65.tar.bz2.asc
+/httpd-2.4.66.tar.bz2.asc
diff --git a/00-base.conf b/00-base.conf
index ec9acf1..bae2bf6 100644
--- a/00-base.conf
+++ b/00-base.conf
@@ -15,6 +15,7 @@ LoadModule authn_dbd_module modules/mod_authn_dbd.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_socache_module modules/mod_authn_socache.so
+LoadModule authnz_fcgi_module modules/mod_authnz_fcgi.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule authz_dbd_module modules/mod_authz_dbd.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
@@ -54,6 +55,7 @@ LoadModule slotmem_plain_module modules/mod_slotmem_plain.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule socache_dbm_module modules/mod_socache_dbm.so
LoadModule socache_memcache_module modules/mod_socache_memcache.so
+LoadModule socache_redis_module modules/mod_socache_redis.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule status_module modules/mod_status.so
LoadModule substitute_module modules/mod_substitute.so
diff --git a/00-brotli.conf b/00-brotli.conf
new file mode 100644
index 0000000..c2e0e9e
--- /dev/null
+++ b/00-brotli.conf
@@ -0,0 +1 @@
+LoadModule brotli_module modules/mod_brotli.so
diff --git a/00-mpm.conf b/00-mpm.conf
index 7bfd1d4..a4a70b8 100644
--- a/00-mpm.conf
+++ b/00-mpm.conf
@@ -1,9 +1,14 @@
# Select the MPM module which should be used by uncommenting exactly
-# one of the following LoadModule lines:
+# one of the following LoadModule lines. See the httpd.conf(5) man
+# page for more information on changing the MPM.
# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
-LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
+#
+# NOTE: If enabling prefork, the httpd_graceful_shutdown SELinux
+# boolean should be enabled, to allow graceful stop/shutdown.
+#
+#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
@@ -16,4 +21,3 @@ LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
#LoadModule mpm_event_module modules/mod_mpm_event.so
-
diff --git a/00-proxy.conf b/00-proxy.conf
index 448eb63..f0f84c2 100644
--- a/00-proxy.conf
+++ b/00-proxy.conf
@@ -14,4 +14,5 @@ LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
+LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
diff --git a/01-cgi.conf b/01-cgi.conf
index 5b8b936..4b680cf 100644
--- a/01-cgi.conf
+++ b/01-cgi.conf
@@ -2,10 +2,7 @@
# which has been configured in 00-mpm.conf. mod_cgid should be used
# with a threaded MPM; mod_cgi with the prefork MPM.
-
- LoadModule cgid_module modules/mod_cgid.so
-
-
+
LoadModule cgid_module modules/mod_cgid.so
diff --git a/README.confd b/README.confd
index f5e9661..6071deb 100644
--- a/README.confd
+++ b/README.confd
@@ -5,5 +5,5 @@ processed as httpd configuration files. The directory is used in
addition to the directory /etc/httpd/conf.modules.d/, which contains
configuration files necessary to load modules.
-Files are processed in alphabetical order.
-
+Files are processed in sorted order. See httpd.conf(5) for more
+information.
diff --git a/README.confmod b/README.confmod
index d33d1d4..f4b055d 100644
--- a/README.confmod
+++ b/README.confmod
@@ -6,4 +6,5 @@ configuration fragments necessary only to load modules.
Administrators should use the directory "/etc/httpd/conf.d" to modify
the configuration of httpd, or any modules.
-Files are processed in alphanumeric order.
+Files are processed in sorted order and should have a two digit
+numeric prefix. See httpd.conf(5) for more information.
diff --git a/action-configtest.sh b/action-configtest.sh
index 6685b0a..711d9cd 100644
--- a/action-configtest.sh
+++ b/action-configtest.sh
@@ -1,2 +1,2 @@
#!/bin/sh
-exec /sbin/apachectl configtest "$@"
+exec /usr/sbin/httpd -t
diff --git a/action-graceful.sh b/action-graceful.sh
index dc68b2e..4976087 100644
--- a/action-graceful.sh
+++ b/action-graceful.sh
@@ -1,2 +1,2 @@
#!/bin/sh
-exec /sbin/apachectl graceful "$@"
+exec /sbin/apachectl graceful
diff --git a/apache-poweredby.png b/apache-poweredby.png
new file mode 100644
index 0000000..5663a23
Binary files /dev/null and b/apache-poweredby.png differ
diff --git a/apachectl.sh b/apachectl.sh
new file mode 100755
index 0000000..823db3b
--- /dev/null
+++ b/apachectl.sh
@@ -0,0 +1,74 @@
+#!/usr/bin/sh
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+###
+### NOTE: This is a replacement version of the "apachectl" script with
+### some differences in behaviour to the version distributed with
+### Apache httpd. Please read the apachectl(8) man page for more
+### information.
+###
+
+if [ "x$1" = "x-k" ]; then
+ shift
+fi
+
+ACMD="$1"
+ARGV="$@"
+SVC='httpd.service'
+HTTPD='@HTTPDBIN@'
+
+if [ "x$2" != "x" ] ; then
+ echo Passing arguments to httpd using apachectl is no longer supported.
+ echo You can only start/stop/restart httpd using this script.
+ echo To pass extra arguments to httpd, see the $SVC'(8)'
+ echo man page.
+ exit 1
+fi
+
+case $ACMD in
+start|stop|restart|status)
+ /usr/bin/systemctl --no-pager $ACMD $SVC
+ ERROR=$?
+ ;;
+graceful)
+ if /usr/bin/systemctl -q is-active $SVC; then
+ /usr/bin/systemctl kill --signal=SIGUSR1 --kill-who=main $SVC
+ else
+ /usr/bin/systemctl start $SVC
+ fi
+ ERROR=$?
+ ;;
+graceful-stop)
+ /usr/bin/systemctl kill --signal=SIGWINCH --kill-who=main $SVC
+ ERROR=$?
+ ;;
+configtest|-t)
+ $HTTPD -t
+ ERROR=$?
+ ;;
+-v|-V)
+ $HTTPD $ACMD
+ ERROR=$?
+ ;;
+*)
+ echo apachectl: The \"$ACMD\" option is not supported. 1>&2
+ ERROR=2
+ ;;
+esac
+
+exit $ERROR
+
diff --git a/apachectl.xml b/apachectl.xml
new file mode 100644
index 0000000..217fbda
--- /dev/null
+++ b/apachectl.xml
@@ -0,0 +1,192 @@
+
+[
+
+]>
+
+
+
+ apachectl
+ httpd
+ Apache man pageApache Software Foundation contributors
+ Fedora man pageDanaFrank
+
+
+
+ apachectl
+ 8
+
+
+
+ apachectl
+ Server control interface for httpd
+
+
+
+
+ apachectl
+ command
+
+
+
+
+
+
+ Description
+
+ apachectl is a front end to the Apache HyperText
+ Transfer Protocol (HTTP) server. It is designed to help the
+ administrator control the functioning of the Apache
+ httpd daemon.
+
+ The apachectl script takes one-word arguments like
+ ,
+ , and
+ , and translates them
+ into appropriate signals to httpd.
+
+ The apachectl script returns a 0 exit value on
+ success, and >0 if an error occurs.
+
+
+ Compatibility
+
+ The version of apachectl used on this
+ system is a replacement script intended to be mostly (but not
+ completely) compatible with the version provided with
+ Apache httpd. This
+ apachectl mostly acts as a wrapper around
+ systemctl and manipulates the
+ systemd service for httpd.
+ The interface to the Apache version of
+ apachectl is described at .
+
+ The following differences are present in the version of
+ apachectl present on this system:
+
+
+ Option arguments passed when starting
+ httpd are not allowed. These should be
+ configured in the systemd service directly (see httpd.service8).
+
+ The "fullstatus" option is
+ not available.
+
+ The "status" option does
+ not use or rely on the running server's
+ server-status output.
+
+
+
+
+
+
+
+ Options
+
+
+
+
+ Start the Apache httpd daemon. Gives an error if it
+ is already running. This is equivalent to systemctl start httpd.service.
+
+
+
+
+
+
+ Stops the Apache httpd daemon. This is equivalent to
+ systemctl stop httpd.service.
+
+
+
+
+
+
+ Restarts the Apache httpd daemon. If the daemon is
+ not running, it is started. This is equivalent
+ to systemctl restart httpd.service.
+
+
+
+
+
+
+ Displays a brief status report. This is equivalent to systemctl status httpd.service.
+
+
+
+
+
+
+ Gracefully restarts the Apache httpd daemon. If the
+ daemon is not running, it is started. This differs from a normal
+ restart in that currently open connections are not aborted. A side
+ effect is that old log files will not be closed immediately. This
+ means that if used in a log rotation script, a substantial delay may
+ be necessary to ensure that the old log files are closed before
+ processing them. This is equivalent to
+ systemctl kill --signal=SIGUSR1 --kill-who=main httpd.service.
+
+
+
+
+
+
+ Gracefully stops the Apache httpd daemon.
+ This differs from a normal stop in that currently open connections are not
+ aborted. A side effect is that old log files will not be closed immediately.
+ This is equivalent to
+ systemctl kill --signal=SIGWINCH --kill-who=main httpd.service.
+
+
+
+
+ |
+
+ Run a configuration file syntax test. It parses the configuration
+ files and either reports Syntax OK
+ or detailed information about the particular syntax error. This is
+ equivalent to httpd -t.
+
+
+
+
+
+
+ Reporting Bugs
+ Please report bugs by filing an issue in @BUG_REPORT_URL@.
+
+
+
+ See also
+
+
+ httpd8,
+ httpd.conf5,
+ systemd1,
+ systemctl1,
+ httpd.service8
+
+
+
+
diff --git a/ci.fmf b/ci.fmf
new file mode 100644
index 0000000..c5aa0e0
--- /dev/null
+++ b/ci.fmf
@@ -0,0 +1 @@
+resultsdb-testcase: separate
diff --git a/config.layout b/config.layout
new file mode 100644
index 0000000..3a9f6c8
--- /dev/null
+++ b/config.layout
@@ -0,0 +1,24 @@
+# Layout used in Fedora httpd packaging.
+
+ prefix: /etc/httpd
+ localstatedir: /var
+ exec_prefix: /usr
+ bindir: ${exec_prefix}/bin
+ sbindir: ${exec_prefix}/sbin
+ libdir: ${exec_prefix}/lib
+ libexecdir: ${exec_prefix}/libexec
+ mandir: ${exec_prefix}/man
+ sysconfdir: /etc/httpd/conf
+ datadir: ${exec_prefix}/share/httpd
+ installbuilddir: ${libdir}/httpd/build
+ errordir: ${datadir}/error
+ iconsdir: ${datadir}/icons
+ htdocsdir: ${localstatedir}/www/html
+ manualdir: ${datadir}/manual
+ cgidir: ${localstatedir}/www/cgi-bin
+ includedir: ${exec_prefix}/include/httpd
+ runtimedir: ${prefix}/run
+ logfiledir: ${localstatedir}/log/httpd
+ statedir: ${prefix}/state
+ proxycachedir: ${localstatedir}/cache/httpd/proxy
+
diff --git a/gating.yaml b/gating.yaml
new file mode 100644
index 0000000..fb11fa9
--- /dev/null
+++ b/gating.yaml
@@ -0,0 +1,27 @@
+--- !Policy
+product_versions:
+ - fedora-*
+decision_contexts: [bodhi_update_push_testing]
+subject_type: koji_build
+rules:
+ - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build./plans/tier1-public.functional}
+
+#gating rawhide
+--- !Policy
+product_versions:
+ - fedora-*
+decision_contexts: [bodhi_update_push_stable]
+subject_type: koji_build
+rules:
+ - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build./plans/tier1-public.functional}
+
+#gating rhel
+--- !Policy
+product_versions:
+ - rhel-*
+decision_context: osci_compose_gate
+rules:
+ - !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1.functional}
+ - !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier2.functional}
+ - !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier3.functional}
+ - !PassingTestCaseRule {test_case_name: osci.brew-build./plans/tier1-internal.functional}
diff --git a/htcacheclean.service b/htcacheclean.service
index 166067b..e3eeef9 100644
--- a/htcacheclean.service
+++ b/htcacheclean.service
@@ -1,10 +1,16 @@
[Unit]
-Description=Disk Cache Cleaning Daemon for Apache HTTP Server
+Description=Disk Cache Cleaning Daemon for the Apache HTTP Server
After=httpd.service
+Documentation=man:htcacheclean.service(8)
[Service]
Type=forking
User=apache
PIDFile=/run/httpd/htcacheclean/pid
+Environment=LANG=C
EnvironmentFile=/etc/sysconfig/htcacheclean
ExecStart=/usr/sbin/htcacheclean -P /run/httpd/htcacheclean/pid -d $INTERVAL -p $CACHE_ROOT -l $LIMIT $OPTIONS
+PrivateTmp=true
+
+[Install]
+WantedBy=multi-user.target
diff --git a/htcacheclean.service.xml b/htcacheclean.service.xml
new file mode 100644
index 0000000..c2a98d1
--- /dev/null
+++ b/htcacheclean.service.xml
@@ -0,0 +1,128 @@
+
+
+
+
+
+ htcacheclean systemd unit
+ httpd
+ AuthorOrtonJoejorton@redhat.com
+
+
+
+ htcacheclean.service
+ 8
+
+
+
+ htcacheclean.service
+ htcacheclean unit file for systemd
+
+
+
+
+ /usr/lib/systemd/system/htcacheclean.service
+
+
+
+
+ Description
+
+ This manual page describes the systemd
+ unit file for the htcacheclean daemon. This
+ unit file provides a service which runs
+ htcacheclean in daemon mode,
+ periodically cleaning the disk cache root to ensure disk space
+ usage is within configured limits.
+
+
+
+
+ Options
+
+ The service is configured by configuration file
+ /etc/sysconfig/htcacheclean. The following
+ variables are used, following standard systemd
+ EnvironmentFile= syntax:
+
+
+
+ INTERVAL=
+
+ Sets the interval between cache clean runs, in
+ minutes. By default this is configured as
+ 15.
+
+
+
+ CACHE_ROOT=
+
+ Sets the directory name used for the cache
+ root. By default this is configured as
+ /var/cache/httpd/proxy.
+
+
+
+ LIMIT=
+
+ Sets the total disk cache space limit, in
+ bytes. Use a K or M
+ suffix to signify kilobytes or megabytes. By default this is
+ set to 100M.
+
+
+
+ OPTIONS=
+
+ Any other options to pass to
+ htcacheclean.
+
+
+
+
+
+ Files
+
+ /usr/lib/systemd/system/htcacheclean.service,
+ /etc/sysconfig/htcacheclean
+
+
+
+ Reporting Bugs
+ Please report bugs by filing an issue in @BUG_REPORT_URL@.
+
+
+
+ See also
+
+
+ htcacheclean8,
+ httpd8,
+ httpd.service8,
+ systemd.exec8
+
+
+
+
+
+
diff --git a/httpd-2.4.1-apctl.patch b/httpd-2.4.1-apctl.patch
deleted file mode 100644
index b31c3c5..0000000
--- a/httpd-2.4.1-apctl.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-
-- fail gracefully if links is not installed on target system
-- source sysconfig/httpd for custom env. vars etc.
-- make httpd -t work even in SELinux
-- pass $OPTIONS to all $HTTPD invocation
-
-Upstream-HEAD: vendor
-Upstream-2.0: vendor
-Upstream-Status: Vendor-specific changes for better initscript integration
-
---- httpd-2.4.1/support/apachectl.in.apctl
-+++ httpd-2.4.1/support/apachectl.in
-@@ -44,19 +44,25 @@ ARGV="$@"
- # the path to your httpd binary, including options if necessary
- HTTPD='@exp_sbindir@/@progname@'
- #
--# pick up any necessary environment variables
--if test -f @exp_sbindir@/envvars; then
-- . @exp_sbindir@/envvars
--fi
- #
- # a command that outputs a formatted text version of the HTML at the
- # url given on the command line. Designed for lynx, however other
- # programs may work.
--LYNX="@LYNX_PATH@ -dump"
-+if [ -x "@LYNX_PATH@" ]; then
-+ LYNX="@LYNX_PATH@ -dump"
-+else
-+ LYNX=none
-+fi
- #
- # the URL to your server's mod_status status page. If you do not
- # have one, then status and fullstatus will not work.
- STATUSURL="http://localhost:@PORT@/server-status"
-+
-+# Source /etc/sysconfig/httpd for $HTTPD setting, etc.
-+if [ -r /etc/sysconfig/httpd ]; then
-+ . /etc/sysconfig/httpd
-+fi
-+
- #
- # Set this variable to a command that increases the maximum
- # number of file descriptors allowed per child process. This is
-@@ -76,9 +82,27 @@ if [ "x$ARGV" = "x" ] ; then
- ARGV="-h"
- fi
-
-+function checklynx() {
-+if [ "$LYNX" = "none" ]; then
-+ echo "The 'links' package is required for this functionality."
-+ exit 8
-+fi
-+}
-+
-+function testconfig() {
-+# httpd is denied terminal access in SELinux, so run in the
-+# current context to get stdout from $HTTPD -t.
-+if test -x /usr/sbin/selinuxenabled && /usr/sbin/selinuxenabled; then
-+ runcon -- `id -Z` $HTTPD $OPTIONS -t
-+else
-+ $HTTPD $OPTIONS -t
-+fi
-+ERROR=$?
-+}
-+
- case $ACMD in
- start|stop|restart|graceful|graceful-stop)
-- $HTTPD -k $ARGV
-+ $HTTPD $OPTIONS -k $ARGV
- ERROR=$?
- ;;
- startssl|sslstart|start-SSL)
-@@ -88,17 +112,18 @@ startssl|sslstart|start-SSL)
- ERROR=2
- ;;
- configtest)
-- $HTTPD -t
-- ERROR=$?
-+ testconfig
- ;;
- status)
-+ checklynx
- $LYNX $STATUSURL | awk ' /process$/ { print; exit } { print } '
- ;;
- fullstatus)
-+ checklynx
- $LYNX $STATUSURL
- ;;
- *)
-- $HTTPD "$@"
-+ $HTTPD $OPTIONS "$@"
- ERROR=$?
- esac
-
diff --git a/httpd-2.4.10-mod_systemd.patch b/httpd-2.4.10-mod_systemd.patch
deleted file mode 100644
index 88d76ac..0000000
--- a/httpd-2.4.10-mod_systemd.patch
+++ /dev/null
@@ -1,172 +0,0 @@
-diff --git a/modules/arch/unix/config5.m4 b/modules/arch/unix/config5.m4
-index 77027a8..7a13d5a 100644
---- a/modules/arch/unix/config5.m4
-+++ b/modules/arch/unix/config5.m4
-@@ -18,6 +18,16 @@ APACHE_MODULE(privileges, Per-virtualhost Unix UserIDs and enhanced security for
- fi
- ])
-
-+APACHE_MODULE(systemd, Systemd support, , , all, [
-+ if test "${ac_cv_header_systemd_sd_daemon_h}" = "no" || test -z "${SYSTEMD_LIBS}"; then
-+ AC_MSG_WARN([Your system does not support systemd.])
-+ enable_systemd="no"
-+ else
-+ APR_ADDTO(MOD_SYSTEMD_LDADD, [$SYSTEMD_LIBS])
-+ enable_systemd="yes"
-+ fi
-+])
-+
- APR_ADDTO(INCLUDES, [-I\$(top_srcdir)/$modpath_current])
-
- APACHE_MODPATH_FINISH
-diff --git a/modules/arch/unix/mod_systemd.c b/modules/arch/unix/mod_systemd.c
-new file mode 100644
-index 0000000..5381c98
---- /dev/null
-+++ b/modules/arch/unix/mod_systemd.c
-@@ -0,0 +1,145 @@
-+/* Licensed to the Apache Software Foundation (ASF) under one or more
-+ * contributor license agreements. See the NOTICE file distributed with
-+ * this work for additional information regarding copyright ownership.
-+ * The ASF licenses this file to You under the Apache License, Version 2.0
-+ * (the "License"); you may not use this file except in compliance with
-+ * the License. You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ */
-+
-+#include
-+#include
-+#include "ap_mpm.h"
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include "unixd.h"
-+#include "scoreboard.h"
-+#include "mpm_common.h"
-+
-+#include "systemd/sd-daemon.h"
-+
-+#if APR_HAVE_UNISTD_H
-+#include
-+#endif
-+
-+static int shutdown_timer = 0;
-+static int shutdown_counter = 0;
-+static unsigned long bytes_served;
-+static pid_t mainpid;
-+
-+static int systemd_pre_mpm(apr_pool_t *p, ap_scoreboard_e sb_type)
-+{
-+ int rv;
-+
-+ ap_extended_status = 1;
-+ mainpid = getpid();
-+
-+ rv = sd_notifyf(0, "READY=1\n"
-+ "STATUS=Processing requests...\n"
-+ "MAINPID=%" APR_PID_T_FMT, mainpid);
-+ if (rv < 0) {
-+ ap_log_perror(APLOG_MARK, APLOG_ERR, 0, p, APLOGNO(02395)
-+ "sd_notifyf returned an error %d", rv);
-+ }
-+
-+ return OK;
-+}
-+
-+static int systemd_monitor(apr_pool_t *p, server_rec *s)
-+{
-+ ap_sload_t sload;
-+ apr_interval_time_t up_time;
-+ char bps[5];
-+ int rv;
-+
-+ ap_get_sload(&sload);
-+ /* up_time in seconds */
-+ up_time = (apr_uint32_t) apr_time_sec(apr_time_now() -
-+ ap_scoreboard_image->global->restart_time);
-+
-+ apr_strfsize((unsigned long)((float) (sload.bytes_served)
-+ / (float) up_time), bps);
-+
-+ rv = sd_notifyf(0, "READY=1\n"
-+ "STATUS=Total requests: %lu; Idle/Busy workers %d/%d;"
-+ "Requests/sec: %.3g; Bytes served/sec: %sB/sec\n",
-+ sload.access_count, sload.idle, sload.busy,
-+ ((float) sload.access_count) / (float) up_time, bps);
-+
-+ if (rv < 0) {
-+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(02396)
-+ "sd_notifyf returned an error %d", rv);
-+ }
-+
-+ /* Shutdown httpd when nothing is sent for shutdown_timer seconds. */
-+ if (sload.bytes_served == bytes_served) {
-+ /* mpm_common.c: INTERVAL_OF_WRITABLE_PROBES is 10 */
-+ shutdown_counter += 10;
-+ if (shutdown_timer > 0 && shutdown_counter >= shutdown_timer) {
-+ rv = sd_notifyf(0, "READY=1\n"
-+ "STATUS=Stopped as result of IdleShutdown "
-+ "timeout.");
-+ if (rv < 0) {
-+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(02804)
-+ "sd_notifyf returned an error %d", rv);
-+ }
-+ kill(mainpid, AP_SIG_GRACEFUL);
-+ }
-+ }
-+ else {
-+ shutdown_counter = 0;
-+ }
-+
-+ bytes_served = sload.bytes_served;
-+
-+ return DECLINED;
-+}
-+
-+static void systemd_register_hooks(apr_pool_t *p)
-+{
-+ /* We know the PID in this hook ... */
-+ ap_hook_pre_mpm(systemd_pre_mpm, NULL, NULL, APR_HOOK_LAST);
-+ /* Used to update httpd's status line using sd_notifyf */
-+ ap_hook_monitor(systemd_monitor, NULL, NULL, APR_HOOK_MIDDLE);
-+}
-+
-+static const char *set_shutdown_timer(cmd_parms *cmd, void *dummy,
-+ const char *arg)
-+{
-+ const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-+ if (err != NULL) {
-+ return err;
-+ }
-+
-+ shutdown_timer = atoi(arg);
-+ return NULL;
-+}
-+
-+static const command_rec systemd_cmds[] =
-+{
-+AP_INIT_TAKE1("IdleShutdown", set_shutdown_timer, NULL, RSRC_CONF,
-+ "Number of seconds in idle-state after which httpd is shutdown"),
-+ {NULL}
-+};
-+
-+AP_DECLARE_MODULE(systemd) = {
-+ STANDARD20_MODULE_STUFF,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL,
-+ systemd_cmds,
-+ systemd_register_hooks,
-+};
diff --git a/httpd-2.4.10-sigint.patch b/httpd-2.4.10-sigint.patch
deleted file mode 100644
index ecdd82e..0000000
--- a/httpd-2.4.10-sigint.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-diff --git a/server/mpm/prefork/prefork.c b/server/mpm/prefork/prefork.c
-index 559f90a..a386a75 100644
---- a/server/mpm/prefork/prefork.c
-+++ b/server/mpm/prefork/prefork.c
-@@ -220,6 +220,9 @@ static void clean_child_exit(int code)
- {
- retained->mpm->mpm_state = AP_MPMQ_STOPPING;
-
-+ apr_signal(SIGHUP, SIG_IGN);
-+ apr_signal(SIGTERM, SIG_IGN);
-+
- if (pchild) {
- apr_pool_destroy(pchild);
- }
-@@ -699,6 +702,13 @@ static int make_child(server_rec *s, int slot, int bucket)
- */
- apr_signal(SIGHUP, just_die);
- apr_signal(SIGTERM, just_die);
-+ /* Ignore SIGINT in child. This fixes race-condition in signals
-+ * handling when httpd is runnning on foreground and user hits ctrl+c.
-+ * In this case, SIGINT is sent to all children followed by SIGTERM
-+ * from the main process, which interrupts the SIGINT handler and
-+ * leads to inconsistency.
-+ */
-+ apr_signal(SIGINT, SIG_IGN);
- /* The child process just closes listeners on AP_SIG_GRACEFUL.
- * The pod is used for signalling the graceful restart.
- */
diff --git a/httpd-2.4.17-socket-activation.patch b/httpd-2.4.17-socket-activation.patch
deleted file mode 100644
index d5cbdf2..0000000
--- a/httpd-2.4.17-socket-activation.patch
+++ /dev/null
@@ -1,301 +0,0 @@
-diff --git a/server/listen.c b/server/listen.c
-index 1d9be83..f5f7754 100644
---- a/server/listen.c
-+++ b/server/listen.c
-@@ -34,6 +34,10 @@
- #include
- #endif
-
-+#ifdef HAVE_SYSTEMD
-+#include
-+#endif
-+
- /* we know core's module_index is 0 */
- #undef APLOG_MODULE_INDEX
- #define APLOG_MODULE_INDEX AP_CORE_MODULE_INDEX
-@@ -59,9 +63,12 @@ static int ap_listenbacklog;
- static int ap_listencbratio;
- static int send_buffer_size;
- static int receive_buffer_size;
-+#ifdef HAVE_SYSTEMD
-+static int use_systemd = -1;
-+#endif
-
- /* TODO: make_sock is just begging and screaming for APR abstraction */
--static apr_status_t make_sock(apr_pool_t *p, ap_listen_rec *server)
-+static apr_status_t make_sock(apr_pool_t *p, ap_listen_rec *server, int do_bind_listen)
- {
- apr_socket_t *s = server->sd;
- int one = 1;
-@@ -94,20 +101,6 @@ static apr_status_t make_sock(apr_pool_t *p, ap_listen_rec *server)
- return stat;
- }
-
--#if APR_HAVE_IPV6
-- if (server->bind_addr->family == APR_INET6) {
-- stat = apr_socket_opt_set(s, APR_IPV6_V6ONLY, v6only_setting);
-- if (stat != APR_SUCCESS && stat != APR_ENOTIMPL) {
-- ap_log_perror(APLOG_MARK, APLOG_CRIT, stat, p, APLOGNO(00069)
-- "make_sock: for address %pI, apr_socket_opt_set: "
-- "(IPV6_V6ONLY)",
-- server->bind_addr);
-- apr_socket_close(s);
-- return stat;
-- }
-- }
--#endif
--
- /*
- * To send data over high bandwidth-delay connections at full
- * speed we must force the TCP window to open wide enough to keep the
-@@ -169,21 +162,37 @@ static apr_status_t make_sock(apr_pool_t *p, ap_listen_rec *server)
- }
- #endif
-
-- if ((stat = apr_socket_bind(s, server->bind_addr)) != APR_SUCCESS) {
-- ap_log_perror(APLOG_MARK, APLOG_STARTUP|APLOG_CRIT, stat, p, APLOGNO(00072)
-- "make_sock: could not bind to address %pI",
-- server->bind_addr);
-- apr_socket_close(s);
-- return stat;
-- }
-+ if (do_bind_listen) {
-+#if APR_HAVE_IPV6
-+ if (server->bind_addr->family == APR_INET6) {
-+ stat = apr_socket_opt_set(s, APR_IPV6_V6ONLY, v6only_setting);
-+ if (stat != APR_SUCCESS && stat != APR_ENOTIMPL) {
-+ ap_log_perror(APLOG_MARK, APLOG_CRIT, stat, p, APLOGNO(00069)
-+ "make_sock: for address %pI, apr_socket_opt_set: "
-+ "(IPV6_V6ONLY)",
-+ server->bind_addr);
-+ apr_socket_close(s);
-+ return stat;
-+ }
-+ }
-+#endif
-
-- if ((stat = apr_socket_listen(s, ap_listenbacklog)) != APR_SUCCESS) {
-- ap_log_perror(APLOG_MARK, APLOG_STARTUP|APLOG_ERR, stat, p, APLOGNO(00073)
-- "make_sock: unable to listen for connections "
-- "on address %pI",
-- server->bind_addr);
-- apr_socket_close(s);
-- return stat;
-+ if ((stat = apr_socket_bind(s, server->bind_addr)) != APR_SUCCESS) {
-+ ap_log_perror(APLOG_MARK, APLOG_STARTUP|APLOG_CRIT, stat, p, APLOGNO(00072)
-+ "make_sock: could not bind to address %pI",
-+ server->bind_addr);
-+ apr_socket_close(s);
-+ return stat;
-+ }
-+
-+ if ((stat = apr_socket_listen(s, ap_listenbacklog)) != APR_SUCCESS) {
-+ ap_log_perror(APLOG_MARK, APLOG_STARTUP|APLOG_ERR, stat, p, APLOGNO(00073)
-+ "make_sock: unable to listen for connections "
-+ "on address %pI",
-+ server->bind_addr);
-+ apr_socket_close(s);
-+ return stat;
-+ }
- }
-
- #ifdef WIN32
-@@ -277,6 +286,124 @@ static apr_status_t close_listeners_on_exec(void *v)
- return APR_SUCCESS;
- }
-
-+
-+#ifdef HAVE_SYSTEMD
-+
-+static int find_systemd_socket(process_rec * process, apr_port_t port) {
-+ int fdcount, fd;
-+ int sdc = sd_listen_fds(0);
-+
-+ if (sdc < 0) {
-+ ap_log_perror(APLOG_MARK, APLOG_CRIT, sdc, process->pool, APLOGNO(02486)
-+ "find_systemd_socket: Error parsing enviroment, sd_listen_fds returned %d",
-+ sdc);
-+ return -1;
-+ }
-+
-+ if (sdc == 0) {
-+ ap_log_perror(APLOG_MARK, APLOG_CRIT, sdc, process->pool, APLOGNO(02487)
-+ "find_systemd_socket: At least one socket must be set.");
-+ return -1;
-+ }
-+
-+ fdcount = atoi(getenv("LISTEN_FDS"));
-+ for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + fdcount; fd++) {
-+ if (sd_is_socket_inet(fd, 0, 0, -1, port) > 0) {
-+ return fd;
-+ }
-+ }
-+
-+ return -1;
-+}
-+
-+static apr_status_t alloc_systemd_listener(process_rec * process,
-+ int fd, const char *proto,
-+ ap_listen_rec **out_rec)
-+{
-+ apr_status_t rv;
-+ struct sockaddr sa;
-+ socklen_t len = sizeof(struct sockaddr);
-+ apr_os_sock_info_t si;
-+ ap_listen_rec *rec;
-+ *out_rec = NULL;
-+
-+ memset(&si, 0, sizeof(si));
-+
-+ rv = getsockname(fd, &sa, &len);
-+
-+ if (rv != 0) {
-+ rv = apr_get_netos_error();
-+ ap_log_perror(APLOG_MARK, APLOG_CRIT, rv, process->pool, APLOGNO(02489)
-+ "getsockname on %d failed.", fd);
-+ return rv;
-+ }
-+
-+ si.os_sock = &fd;
-+ si.family = sa.sa_family;
-+ si.local = &sa;
-+ si.type = SOCK_STREAM;
-+ si.protocol = APR_PROTO_TCP;
-+
-+ rec = apr_palloc(process->pool, sizeof(ap_listen_rec));
-+ rec->active = 0;
-+ rec->next = 0;
-+
-+
-+ rv = apr_os_sock_make(&rec->sd, &si, process->pool);
-+ if (rv != APR_SUCCESS) {
-+ ap_log_perror(APLOG_MARK, APLOG_CRIT, rv, process->pool, APLOGNO(02490)
-+ "apr_os_sock_make on %d failed.", fd);
-+ return rv;
-+ }
-+
-+ rv = apr_socket_addr_get(&rec->bind_addr, APR_LOCAL, rec->sd);
-+ if (rv != APR_SUCCESS) {
-+ ap_log_perror(APLOG_MARK, APLOG_CRIT, rv, process->pool, APLOGNO(02491)
-+ "apr_socket_addr_get on %d failed.", fd);
-+ return rv;
-+ }
-+
-+ rec->protocol = apr_pstrdup(process->pool, proto);
-+
-+ *out_rec = rec;
-+
-+ return make_sock(process->pool, rec, 0);
-+}
-+
-+static const char *set_systemd_listener(process_rec *process, apr_port_t port,
-+ const char *proto)
-+{
-+ ap_listen_rec *last, *new;
-+ apr_status_t rv;
-+ int fd = find_systemd_socket(process, port);
-+ if (fd < 0) {
-+ return "Systemd socket activation is used, but this port is not "
-+ "configured in systemd";
-+ }
-+
-+ last = ap_listeners;
-+ while (last && last->next) {
-+ last = last->next;
-+ }
-+
-+ rv = alloc_systemd_listener(process, fd, proto, &new);
-+ if (rv != APR_SUCCESS) {
-+ return "Failed to setup socket passed by systemd using socket activation";
-+ }
-+
-+ if (last == NULL) {
-+ ap_listeners = last = new;
-+ }
-+ else {
-+ last->next = new;
-+ last = new;
-+ }
-+
-+ return NULL;
-+}
-+
-+#endif /* HAVE_SYSTEMD */
-+
- static const char *alloc_listener(process_rec *process, char *addr,
- apr_port_t port, const char* proto,
- void *slave)
-@@ -479,7 +606,7 @@ static int open_listeners(apr_pool_t *pool)
- }
- }
- #endif
-- if (make_sock(pool, lr) == APR_SUCCESS) {
-+ if (make_sock(pool, lr, 1) == APR_SUCCESS) {
- ++num_open;
- }
- else {
-@@ -591,8 +718,28 @@ AP_DECLARE(int) ap_setup_listeners(server_rec *s)
- }
- }
-
-- if (open_listeners(s->process->pool)) {
-- return 0;
-+#ifdef HAVE_SYSTEMD
-+ if (use_systemd) {
-+ const char *userdata_key = "ap_open_systemd_listeners";
-+ void *data;
-+ /* clear the enviroment on our second run
-+ * so that none of our future children get confused.
-+ */
-+ apr_pool_userdata_get(&data, userdata_key, s->process->pool);
-+ if (!data) {
-+ apr_pool_userdata_set((const void *)1, userdata_key,
-+ apr_pool_cleanup_null, s->process->pool);
-+ }
-+ else {
-+ sd_listen_fds(1);
-+ }
-+ }
-+ else
-+#endif
-+ {
-+ if (open_listeners(s->process->pool)) {
-+ return 0;
-+ }
- }
-
- for (lr = ap_listeners; lr; lr = lr->next) {
-@@ -682,7 +829,7 @@ AP_DECLARE(apr_status_t) ap_duplicate_listeners(apr_pool_t *p, server_rec *s,
- duplr->bind_addr);
- return stat;
- }
-- make_sock(p, duplr);
-+ make_sock(p, duplr, 1);
- #if AP_NONBLOCK_WHEN_MULTI_LISTEN
- use_nonblock = (ap_listeners && ap_listeners->next);
- stat = apr_socket_opt_set(duplr->sd, APR_SO_NONBLOCK, use_nonblock);
-@@ -809,6 +956,11 @@ AP_DECLARE_NONSTD(const char *) ap_set_listener(cmd_parms *cmd, void *dummy,
- if (argc < 1 || argc > 2) {
- return "Listen requires 1 or 2 arguments.";
- }
-+#ifdef HAVE_SYSTEMD
-+ if (use_systemd == -1) {
-+ use_systemd = sd_listen_fds(0) > 0;
-+ }
-+#endif
-
- rv = apr_parse_addr_port(&host, &scope_id, &port, argv[0], cmd->pool);
- if (rv != APR_SUCCESS) {
-@@ -840,6 +992,12 @@ AP_DECLARE_NONSTD(const char *) ap_set_listener(cmd_parms *cmd, void *dummy,
- ap_str_tolower(proto);
- }
-
-+#ifdef HAVE_SYSTEMD
-+ if (use_systemd) {
-+ return set_systemd_listener(cmd->server->process, port, proto);
-+ }
-+#endif
-+
- return alloc_listener(cmd->server->process, host, port, proto, NULL);
- }
-
diff --git a/httpd-2.4.17-sslciphdefault.patch b/httpd-2.4.17-sslciphdefault.patch
deleted file mode 100644
index 8efc461..0000000
--- a/httpd-2.4.17-sslciphdefault.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1109119
-
-Don't prepend !aNULL etc if PROFILE= is used with SSLCipherSuite.
-
---- httpd-2.4.17/modules/ssl/ssl_engine_config.c.sslciphdefault
-+++ httpd-2.4.17/modules/ssl/ssl_engine_config.c
-@@ -708,8 +708,10 @@ const char *ssl_cmd_SSLCipherSuite(cmd_p
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg;
-
-- /* always disable null and export ciphers */
-- arg = apr_pstrcat(cmd->pool, arg, ":!aNULL:!eNULL:!EXP", NULL);
-+ /* Disable null and export ciphers by default, except for PROFILE=
-+ * configs where the parser doesn't cope. */
-+ if (strncmp(arg, "PROFILE=", 8) != 0)
-+ arg = apr_pstrcat(cmd->pool, arg, ":!aNULL:!eNULL:!EXP", NULL);
-
- if (cmd->path) {
- dc->szCipherSuite = arg;
-@@ -1428,8 +1430,10 @@ const char *ssl_cmd_SSLProxyCipherSuite(
- {
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-
-- /* always disable null and export ciphers */
-- arg = apr_pstrcat(cmd->pool, arg, ":!aNULL:!eNULL:!EXP", NULL);
-+ /* Disable null and export ciphers by default, except for PROFILE=
-+ * configs where the parser doesn't cope. */
-+ if (strncmp(arg, "PROFILE=", 8) != 0)
-+ arg = apr_pstrcat(cmd->pool, arg, ":!aNULL:!eNULL:!EXP", NULL);
-
- sc->proxy->auth.cipher_suite = arg;
-
diff --git a/httpd-2.4.18-sslmultiproxy.patch b/httpd-2.4.18-sslmultiproxy.patch
deleted file mode 100644
index 3f00f3f..0000000
--- a/httpd-2.4.18-sslmultiproxy.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-diff --git a/modules/ssl/mod_ssl.c b/modules/ssl/mod_ssl.c
-index 717a694..a3ce718 100644
---- a/modules/ssl/mod_ssl.c
-+++ b/modules/ssl/mod_ssl.c
-@@ -395,6 +395,9 @@ static SSLConnRec *ssl_init_connection_ctx(conn_rec *c)
- return sslconn;
- }
-
-+static typeof(ssl_proxy_enable) *othermod_proxy_enable;
-+static typeof(ssl_engine_disable) *othermod_engine_disable;
-+
- int ssl_proxy_enable(conn_rec *c)
- {
- SSLSrvConfigRec *sc;
-@@ -403,6 +406,12 @@ int ssl_proxy_enable(conn_rec *c)
- sc = mySrvConfig(sslconn->server);
-
- if (!sc->proxy_enabled) {
-+ if (othermod_proxy_enable) {
-+ ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c,
-+ "mod_ssl proxy not configured, passing through to other module.");
-+ return othermod_proxy_enable(c);
-+ }
-+
- ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(01961)
- "SSL Proxy requested for %s but not enabled "
- "[Hint: SSLProxyEngine]", sc->vhost_id);
-@@ -422,6 +431,10 @@ int ssl_engine_disable(conn_rec *c)
-
- SSLConnRec *sslconn = myConnConfig(c);
-
-+ if (othermod_engine_disable) {
-+ othermod_engine_disable(c);
-+ }
-+
- if (sslconn) {
- sc = mySrvConfig(sslconn->server);
- }
-@@ -621,6 +634,9 @@ static void ssl_register_hooks(apr_pool_t *p)
- ap_hook_post_read_request(ssl_hook_ReadReq, pre_prr,NULL, APR_HOOK_MIDDLE);
-
- ssl_var_register(p);
-+
-+ othermod_proxy_enable = APR_RETRIEVE_OPTIONAL_FN(ssl_proxy_enable);
-+ othermod_engine_disable = APR_RETRIEVE_OPTIONAL_FN(ssl_engine_disable);
-
- APR_REGISTER_OPTIONAL_FN(ssl_proxy_enable);
- APR_REGISTER_OPTIONAL_FN(ssl_engine_disable);
-diff --git a/modules/ssl/ssl_engine_vars.c b/modules/ssl/ssl_engine_vars.c
-index a6b0d0d..24fd8c7 100644
---- a/modules/ssl/ssl_engine_vars.c
-+++ b/modules/ssl/ssl_engine_vars.c
-@@ -54,6 +54,8 @@ static char *ssl_var_lookup_ssl_cipher(apr_pool_t *p, SSLConnRec *sslconn, char
- static void ssl_var_lookup_ssl_cipher_bits(SSL *ssl, int *usekeysize, int *algkeysize);
- static char *ssl_var_lookup_ssl_version(apr_pool_t *p, char *var);
- static char *ssl_var_lookup_ssl_compress_meth(SSL *ssl);
-+static APR_OPTIONAL_FN_TYPE(ssl_is_https) *othermod_is_https;
-+static APR_OPTIONAL_FN_TYPE(ssl_var_lookup) *othermod_var_lookup;
-
- static SSLConnRec *ssl_get_effective_config(conn_rec *c)
- {
-@@ -68,7 +70,9 @@ static SSLConnRec *ssl_get_effective_config(conn_rec *c)
- static int ssl_is_https(conn_rec *c)
- {
- SSLConnRec *sslconn = ssl_get_effective_config(c);
-- return sslconn && sslconn->ssl;
-+
-+ return (sslconn && sslconn->ssl)
-+ || (othermod_is_https && othermod_is_https(c));
- }
-
- static const char var_interface[] = "mod_ssl/" AP_SERVER_BASEREVISION;
-@@ -137,6 +141,9 @@ void ssl_var_register(apr_pool_t *p)
- {
- char *cp, *cp2;
-
-+ othermod_is_https = APR_RETRIEVE_OPTIONAL_FN(ssl_is_https);
-+ othermod_var_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
-+
- APR_REGISTER_OPTIONAL_FN(ssl_is_https);
- APR_REGISTER_OPTIONAL_FN(ssl_var_lookup);
- APR_REGISTER_OPTIONAL_FN(ssl_ext_list);
-@@ -272,6 +279,15 @@ char *ssl_var_lookup(apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r,
- */
- if (result == NULL && c != NULL) {
- SSLConnRec *sslconn = ssl_get_effective_config(c);
-+
-+ if (strlen(var) > 4 && strcEQn(var, "SSL_", 4)
-+ && (!sslconn || !sslconn->ssl) && othermod_var_lookup) {
-+ /* For an SSL_* variable, if mod_ssl is not enabled for
-+ * this connection and another SSL module is present, pass
-+ * through to that module. */
-+ return othermod_var_lookup(p, s, c, r, var);
-+ }
-+
- if (strlen(var) > 4 && strcEQn(var, "SSL_", 4)
- && sslconn && sslconn->ssl)
- result = ssl_var_lookup_ssl(p, sslconn, r, var+4);
diff --git a/httpd-2.4.2-icons.patch b/httpd-2.4.2-icons.patch
deleted file mode 100644
index 1341999..0000000
--- a/httpd-2.4.2-icons.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-
-- Fix config for /icons/ dir to allow symlink to poweredby.png.
-- Avoid using coredump GIF for a directory called "core"
-
-Upstream-Status: vendor specific patch
-
---- httpd-2.4.2/docs/conf/extra/httpd-autoindex.conf.in.icons
-+++ httpd-2.4.2/docs/conf/extra/httpd-autoindex.conf.in
-@@ -21,7 +21,7 @@ IndexOptions FancyIndexing HTMLTable Ver
- Alias /icons/ "@exp_iconsdir@/"
-
-
-- Options Indexes MultiViews
-+ Options Indexes MultiViews FollowSymlinks
- AllowOverride None
- Require all granted
-
-@@ -53,7 +53,7 @@ AddIcon /icons/dvi.gif .dvi
- AddIcon /icons/uuencoded.gif .uu
- AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
- AddIcon /icons/tex.gif .tex
--AddIcon /icons/bomb.gif core
-+AddIcon /icons/bomb.gif core.
-
- AddIcon /icons/back.gif ..
- AddIcon /icons/hand.right.gif README
diff --git a/httpd-2.4.25-detect-systemd.patch b/httpd-2.4.25-detect-systemd.patch
deleted file mode 100644
index f8e302b..0000000
--- a/httpd-2.4.25-detect-systemd.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-diff -uap httpd-2.4.25/acinclude.m4.detectsystemd httpd-2.4.25/acinclude.m4
-diff -uap httpd-2.4.25/acinclude.m4.detectsystemd httpd-2.4.25/acinclude.m4
-diff -uap httpd-2.4.25/acinclude.m4.detectsystemd httpd-2.4.25/acinclude.m4
---- httpd-2.4.25/acinclude.m4.detectsystemd
-+++ httpd-2.4.25/acinclude.m4
-@@ -604,6 +604,30 @@
- fi
- ])
-
-+AC_DEFUN(APACHE_CHECK_SYSTEMD, [
-+dnl Check for systemd support for listen.c's socket activation.
-+case $host in
-+*-linux-*)
-+ if test -n "$PKGCONFIG" && $PKGCONFIG --exists libsystemd; then
-+ SYSTEMD_LIBS=`$PKGCONFIG --libs libsystemd`
-+ elif test -n "$PKGCONFIG" && $PKGCONFIG --exists libsystemd-daemon; then
-+ SYSTEMD_LIBS=`$PKGCONFIG --libs libsystemd-daemon`
-+ else
-+ AC_CHECK_LIB(systemd-daemon, sd_notify, SYSTEMD_LIBS="-lsystemd-daemon")
-+ fi
-+ if test -n "$SYSTEMD_LIBS"; then
-+ AC_CHECK_HEADERS(systemd/sd-daemon.h)
-+ if test "${ac_cv_header_systemd_sd_daemon_h}" = "no" || test -z "${SYSTEMD_LIBS}"; then
-+ AC_MSG_WARN([Your system does not support systemd.])
-+ else
-+ APR_ADDTO(HTTPD_LIBS, [$SYSTEMD_LIBS])
-+ AC_DEFINE(HAVE_SYSTEMD, 1, [Define if systemd is supported])
-+ fi
-+ fi
-+ ;;
-+esac
-+])
-+
- dnl
- dnl APACHE_EXPORT_ARGUMENTS
- dnl Export (via APACHE_SUBST) the various path-related variables that
-diff -uap httpd-2.4.25/configure.in.detectsystemd httpd-2.4.25/configure.in
---- httpd-2.4.25/configure.in.detectsystemd
-+++ httpd-2.4.25/configure.in
-@@ -234,6 +234,7 @@
- AC_MSG_NOTICE([Using external PCRE library from $PCRE_CONFIG])
- APR_ADDTO(PCRE_INCLUDES, [`$PCRE_CONFIG --cflags`])
- APR_ADDTO(PCRE_LIBS, [`$PCRE_CONFIG --libs`])
-+ APR_ADDTO(HTTPD_LIBS, [\$(PCRE_LIBS)])
- else
- AC_MSG_ERROR([pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/])
- fi
-@@ -504,6 +510,8 @@
- AC_DEFINE(HAVE_GMTOFF, 1, [Define if struct tm has a tm_gmtoff field])
- fi
-
-+APACHE_CHECK_SYSTEMD
-+
- dnl ## Set up any appropriate OS-specific environment variables for apachectl
-
- case $host in
-@@ -668,6 +676,7 @@
- APACHE_SUBST(BUILTIN_LIBS)
- APACHE_SUBST(SHLIBPATH_VAR)
- APACHE_SUBST(OS_SPECIFIC_VARS)
-+APACHE_SUBST(HTTPD_LIBS)
-
- PRE_SHARED_CMDS='echo ""'
- POST_SHARED_CMDS='echo ""'
---- httpd-2.4.25/Makefile.in.detectsystemd
-+++ httpd-2.4.25/Makefile.in
-@@ -4,7 +4,7 @@
-
- PROGRAM_NAME = $(progname)
- PROGRAM_SOURCES = modules.c
--PROGRAM_LDADD = buildmark.o $(HTTPD_LDFLAGS) $(PROGRAM_DEPENDENCIES) $(PCRE_LIBS) $(EXTRA_LIBS) $(AP_LIBS) $(LIBS)
-+PROGRAM_LDADD = buildmark.o $(HTTPD_LDFLAGS) $(PROGRAM_DEPENDENCIES) $(HTTPD_LIBS) $(EXTRA_LIBS) $(AP_LIBS) $(LIBS)
- PROGRAM_PRELINK = $(COMPILE) -c $(top_srcdir)/server/buildmark.c
- PROGRAM_DEPENDENCIES = \
- server/libmain.la \
diff --git a/httpd-2.4.25-r1738878.patch b/httpd-2.4.25-r1738878.patch
deleted file mode 100644
index e4b46cc..0000000
--- a/httpd-2.4.25-r1738878.patch
+++ /dev/null
@@ -1,140 +0,0 @@
-diff --git a/modules/proxy/ajp.h b/modules/proxy/ajp.h
-index c119a7e..267150a 100644
---- a/modules/proxy/ajp.h
-+++ b/modules/proxy/ajp.h
-@@ -413,12 +413,14 @@ apr_status_t ajp_ilink_receive(apr_socket_t *sock, ajp_msg_t *msg);
- * @param sock backend socket
- * @param r current request
- * @param buffsize max size of the AJP packet.
-+ * @param secret authentication secret
- * @param uri requested uri
- * @return APR_SUCCESS or error
- */
- apr_status_t ajp_send_header(apr_socket_t *sock, request_rec *r,
- apr_size_t buffsize,
-- apr_uri_t *uri);
-+ apr_uri_t *uri,
-+ const char *secret);
-
- /**
- * Read the ajp message and return the type of the message.
-diff --git a/modules/proxy/ajp_header.c b/modules/proxy/ajp_header.c
-index 67353a7..680a8f3 100644
---- a/modules/proxy/ajp_header.c
-+++ b/modules/proxy/ajp_header.c
-@@ -213,7 +213,8 @@ AJPV13_REQUEST/AJPV14_REQUEST=
-
- static apr_status_t ajp_marshal_into_msgb(ajp_msg_t *msg,
- request_rec *r,
-- apr_uri_t *uri)
-+ apr_uri_t *uri,
-+ const char *secret)
- {
- int method;
- apr_uint32_t i, num_headers = 0;
-@@ -293,17 +294,15 @@ static apr_status_t ajp_marshal_into_msgb(ajp_msg_t *msg,
- i, elts[i].key, elts[i].val);
- }
-
--/* XXXX need to figure out how to do this
-- if (s->secret) {
-+ if (secret) {
- if (ajp_msg_append_uint8(msg, SC_A_SECRET) ||
-- ajp_msg_append_string(msg, s->secret)) {
-+ ajp_msg_append_string(msg, secret)) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(03228)
-- "Error ajp_marshal_into_msgb - "
-+ "ajp_marshal_into_msgb: "
- "Error appending secret");
- return APR_EGENERAL;
- }
- }
-- */
-
- if (r->user) {
- if (ajp_msg_append_uint8(msg, SC_A_REMOTE_USER) ||
-@@ -671,7 +670,8 @@ static apr_status_t ajp_unmarshal_response(ajp_msg_t *msg,
- apr_status_t ajp_send_header(apr_socket_t *sock,
- request_rec *r,
- apr_size_t buffsize,
-- apr_uri_t *uri)
-+ apr_uri_t *uri,
-+ const char *secret)
- {
- ajp_msg_t *msg;
- apr_status_t rc;
-@@ -683,7 +683,7 @@ apr_status_t ajp_send_header(apr_socket_t *sock,
- return rc;
- }
-
-- rc = ajp_marshal_into_msgb(msg, r, uri);
-+ rc = ajp_marshal_into_msgb(msg, r, uri, secret);
- if (rc != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(00988)
- "ajp_send_header: ajp_marshal_into_msgb failed");
-diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c
-index f6fb473..f693f63 100644
---- a/modules/proxy/mod_proxy.c
-+++ b/modules/proxy/mod_proxy.c
-@@ -314,6 +314,12 @@ static const char *set_worker_param(apr_pool_t *p,
- (int)sizeof(worker->s->upgrade));
- }
- }
-+ else if (!strcasecmp(key, "secret")) {
-+ if (PROXY_STRNCPY(worker->s->secret, val) != APR_SUCCESS) {
-+ return apr_psprintf(p, "Secret length must be < %d characters",
-+ (int)sizeof(worker->s->secret));
-+ }
-+ }
- else {
- if (set_worker_hc_param_f) {
- return set_worker_hc_param_f(p, s, worker, key, val, NULL);
-diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h
-index 8a0ad10..f92c185 100644
---- a/modules/proxy/mod_proxy.h
-+++ b/modules/proxy/mod_proxy.h
-@@ -352,6 +352,7 @@ PROXY_WORKER_HC_FAIL )
- #define PROXY_WORKER_MAX_HOSTNAME_SIZE 64
- #define PROXY_BALANCER_MAX_HOSTNAME_SIZE PROXY_WORKER_MAX_HOSTNAME_SIZE
- #define PROXY_BALANCER_MAX_STICKY_SIZE 64
-+#define PROXY_WORKER_MAX_SECRET_SIZE 64
-
- /* RFC-1035 mentions limits of 255 for host-names and 253 for domain-names,
- * dotted together(?) this would fit the below size (+ trailing NUL).
-@@ -443,6 +444,7 @@ typedef struct {
- hcmethod_t method; /* method to use for health check */
- apr_interval_time_t interval;
- char upgrade[PROXY_WORKER_MAX_SCHEME_SIZE];/* upgrade protocol used by mod_proxy_wstunnel */
-+ char secret[PROXY_WORKER_MAX_SECRET_SIZE]; /* authentication secret (e.g. AJP13) */
- } proxy_worker_shared;
-
- #define ALIGNED_PROXY_WORKER_SHARED_SIZE (APR_ALIGN_DEFAULT(sizeof(proxy_worker_shared)))
-diff --git a/modules/proxy/mod_proxy_ajp.c b/modules/proxy/mod_proxy_ajp.c
-index 051724e..e706518 100644
---- a/modules/proxy/mod_proxy_ajp.c
-+++ b/modules/proxy/mod_proxy_ajp.c
-@@ -193,6 +193,7 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r,
- apr_off_t content_length = 0;
- int original_status = r->status;
- const char *original_status_line = r->status_line;
-+ const char *secret = NULL;
-
- if (psf->io_buffer_size_set)
- maxsize = psf->io_buffer_size;
-@@ -202,12 +203,15 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r,
- maxsize = AJP_MSG_BUFFER_SZ;
- maxsize = APR_ALIGN(maxsize, 1024);
-
-+ if (*conn->worker->s->secret)
-+ secret = conn->worker->s->secret;
-+
- /*
- * Send the AJP request to the remote server
- */
-
- /* send request headers */
-- status = ajp_send_header(conn->sock, r, maxsize, uri);
-+ status = ajp_send_header(conn->sock, r, maxsize, uri, secret);
- if (status != APR_SUCCESS) {
- conn->close = 1;
- ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, APLOGNO(00868)
diff --git a/httpd-2.4.25-selinux.patch b/httpd-2.4.25-selinux.patch
deleted file mode 100644
index fa4614a..0000000
--- a/httpd-2.4.25-selinux.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-
-Log the SELinux context at startup.
-
-Upstream-Status: unlikely to be any interest in this upstream
-
---- httpd-2.4.1/configure.in.selinux
-+++ httpd-2.4.1/configure.in
-@@ -458,6 +458,11 @@ fopen64
- dnl confirm that a void pointer is large enough to store a long integer
- APACHE_CHECK_VOID_PTR_LEN
-
-+AC_CHECK_LIB(selinux, is_selinux_enabled, [
-+ AC_DEFINE(HAVE_SELINUX, 1, [Defined if SELinux is supported])
-+ APR_ADDTO(HTTPD_LIBS, [-lselinux])
-+])
-+
- AC_CACHE_CHECK([for gettid()], ac_cv_gettid,
- [AC_TRY_RUN(#define _GNU_SOURCE
- #include
---- httpd-2.4.1/server/core.c.selinux
-+++ httpd-2.4.1/server/core.c
-@@ -58,6 +58,10 @@
- #include
- #endif
-
-+#ifdef HAVE_SELINUX
-+#include
-+#endif
-+
- /* LimitRequestBody handling */
- #define AP_LIMIT_REQ_BODY_UNSET ((apr_off_t) -1)
- #define AP_DEFAULT_LIMIT_REQ_BODY ((apr_off_t) 0)
-@@ -4452,6 +4456,28 @@ static int core_post_config(apr_pool_t *
- }
- #endif
-
-+#ifdef HAVE_SELINUX
-+ {
-+ static int already_warned = 0;
-+ int is_enabled = is_selinux_enabled() > 0;
-+
-+ if (is_enabled && !already_warned) {
-+ security_context_t con;
-+
-+ if (getcon(&con) == 0) {
-+
-+ ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, NULL,
-+ "SELinux policy enabled; "
-+ "httpd running as context %s", con);
-+
-+ already_warned = 1;
-+
-+ freecon(con);
-+ }
-+ }
-+ }
-+#endif
-+
- return OK;
- }
-
diff --git a/httpd-2.4.26-r1800306.patch b/httpd-2.4.26-r1800306.patch
deleted file mode 100644
index 4a8bc2d..0000000
--- a/httpd-2.4.26-r1800306.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-# ./pullrev.sh 1800306
-
-http://svn.apache.org/viewvc?view=revision&revision=1800306
-
-diff -uap httpd-2.4.26/modules/mappers/mod_actions.c.r1800306 httpd-2.4.26/modules/mappers/mod_actions.c
---- httpd-2.4.26/modules/mappers/mod_actions.c.r1800306
-+++ httpd-2.4.26/modules/mappers/mod_actions.c
-@@ -186,8 +186,7 @@
- ap_field_noparam(r->pool, r->content_type);
-
- if (action && (t = apr_table_get(conf->action_types, action))) {
-- int virtual = (*t++ == '0' ? 0 : 1);
-- if (!virtual && r->finfo.filetype == APR_NOFILE) {
-+ if (*t++ == '0' && r->finfo.filetype == APR_NOFILE) {
- ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(00652)
- "File does not exist: %s", r->filename);
- return HTTP_NOT_FOUND;
-@@ -198,9 +197,6 @@
- * (will be REDIRECT_HANDLER there)
- */
- apr_table_setn(r->subprocess_env, "HANDLER", action);
-- if (virtual) {
-- apr_table_setn(r->notes, "virtual_script", "1");
-- }
- }
-
- if (script == NULL)
-diff -uap httpd-2.4.26/modules/proxy/mod_proxy_fcgi.c.r1800306 httpd-2.4.26/modules/proxy/mod_proxy_fcgi.c
---- httpd-2.4.26/modules/proxy/mod_proxy_fcgi.c.r1800306
-+++ httpd-2.4.26/modules/proxy/mod_proxy_fcgi.c
-@@ -321,7 +321,6 @@
- apr_status_t rv;
- apr_size_t avail_len, len, required_len;
- int next_elem, starting_elem;
-- int fpm = 0;
- fcgi_req_config_t *rconf = ap_get_module_config(r->request_config, &proxy_fcgi_module);
- fcgi_dirconf_t *dconf = ap_get_module_config(r->per_dir_config, &proxy_fcgi_module);
-
-@@ -354,8 +353,6 @@
- *qs = '\0';
- }
- }
-- } else {
-- fpm = 1;
- }
-
- if (newfname) {
-@@ -364,38 +361,9 @@
- }
- }
-
--#if 0
-- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(09999)
-- "r->filename: %s", (r->filename ? r->filename : "nil"));
-- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(09999)
-- "r->uri: %s", (r->uri ? r->uri : "nil"));
-- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(09999)
-- "r->path_info: %s", (r->path_info ? r->path_info : "nil"));
--#endif
--
- ap_add_common_vars(r);
- ap_add_cgi_vars(r);
-
-- if (fpm || apr_table_get(r->notes, "virtual_script")) {
-- /*
-- * Adjust SCRIPT_NAME, PATH_INFO and PATH_TRANSLATED for PHP-FPM
-- * TODO: Right now, PATH_INFO and PATH_TRANSLATED look OK...
-- */
-- const char *pend;
-- const char *script_name = apr_table_get(r->subprocess_env, "SCRIPT_NAME");
-- pend = script_name + strlen(script_name);
-- if (r->path_info && *r->path_info) {
-- pend = script_name + ap_find_path_info(script_name, r->path_info) - 1;
-- }
-- while (pend != script_name && *pend != '/') {
-- pend--;
-- }
-- apr_table_setn(r->subprocess_env, "SCRIPT_NAME", pend);
-- ap_log_rerror(APLOG_MARK, APLOG_TRACE4, 0, r,
-- "fpm:virtual_script: Modified SCRIPT_NAME to: %s",
-- pend);
-- }
--
- /* XXX are there any FastCGI specific env vars we need to send? */
-
- /* Give admins final option to fine-tune env vars */
diff --git a/httpd-2.4.3-apctl-systemd.patch b/httpd-2.4.3-apctl-systemd.patch
deleted file mode 100644
index c6bf5da..0000000
--- a/httpd-2.4.3-apctl-systemd.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-
-Make apachectl run via systemctl.
-
-Note: "apachectl graceful" is documented to start httpd if not running.
-
-Upstream-Status: vendor specific patch
-
---- httpd-2.4.18/support/apachectl.in.apctlsystemd
-+++ httpd-2.4.18/support/apachectl.in
-@@ -100,9 +100,28 @@ fi
- ERROR=$?
- }
-
-+if [ "x$2" != "x" ] ; then
-+ echo Passing arguments to httpd using apachectl is no longer supported.
-+ echo You can only start/stop/restart httpd using this script.
-+ echo If you want to pass extra arguments to httpd, edit the
-+ echo /etc/sysconfig/httpd config file.
-+fi
-+
- case $ACMD in
--start|stop|restart|graceful|graceful-stop)
-- $HTTPD $OPTIONS -k $ARGV
-+start|stop|restart|status)
-+ /usr/bin/systemctl $ACMD httpd.service
-+ ERROR=$?
-+ ;;
-+graceful)
-+ if /usr/bin/systemctl -q is-active httpd.service; then
-+ /usr/bin/systemctl reload httpd.service
-+ else
-+ /usr/bin/systemctl start httpd.service
-+ fi
-+ ERROR=$?
-+ ;;
-+graceful-stop)
-+ /usr/bin/systemctl stop httpd.service
- ERROR=$?
- ;;
- startssl|sslstart|start-SSL)
-@@ -114,10 +133,6 @@ startssl|sslstart|start-SSL)
- configtest)
- testconfig
- ;;
--status)
-- checklynx
-- $LYNX $STATUSURL | awk ' /process$/ { print; exit } { print } '
-- ;;
- fullstatus)
- checklynx
- $LYNX $STATUSURL
diff --git a/httpd-2.4.3-layout.patch b/httpd-2.4.3-layout.patch
deleted file mode 100644
index 163c66b..0000000
--- a/httpd-2.4.3-layout.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-
-Add layout for Fedora.
-
---- httpd-2.4.3/config.layout.layout
-+++ httpd-2.4.3/config.layout
-@@ -370,3 +370,27 @@
- logfiledir: ${localstatedir}/log/httpd
- proxycachedir: ${localstatedir}/cache/httpd
-
-+
-+# Fedora/RHEL layout
-+
-+ prefix: /usr
-+ exec_prefix: ${prefix}
-+ bindir: ${prefix}/bin
-+ sbindir: ${prefix}/sbin
-+ libdir: ${prefix}/lib
-+ libexecdir: ${prefix}/libexec
-+ mandir: ${prefix}/man
-+ sysconfdir: /etc/httpd/conf
-+ datadir: ${prefix}/share/httpd
-+ installbuilddir: ${libdir}/httpd/build
-+ errordir: ${datadir}/error
-+ iconsdir: ${datadir}/icons
-+ htdocsdir: /var/www/html
-+ manualdir: ${datadir}/manual
-+ cgidir: /var/www/cgi-bin
-+ includedir: ${prefix}/include/httpd
-+ localstatedir: /var
-+ runtimedir: /run/httpd
-+ logfiledir: ${localstatedir}/log/httpd
-+ proxycachedir: ${localstatedir}/cache/httpd/proxy
-+
diff --git a/httpd-2.4.4-export.patch b/httpd-2.4.4-export.patch
deleted file mode 100644
index eb670c6..0000000
--- a/httpd-2.4.4-export.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-
-There is no need to "suck in" the apr/apr-util symbols when using
-a shared libapr{,util}, it just bloats the symbol table; so don't.
-
-Upstream-HEAD: needed
-Upstream-2.0: omit
-Upstream-Status: EXPORT_DIRS change is conditional on using shared apr
-
---- httpd-2.4.4/server/Makefile.in.export
-+++ httpd-2.4.4/server/Makefile.in
-@@ -57,9 +57,6 @@ export_files:
- ( for dir in $(EXPORT_DIRS); do \
- ls $$dir/*.h ; \
- done; \
-- for dir in $(EXPORT_DIRS_APR); do \
-- ls $$dir/ap[ru].h $$dir/ap[ru]_*.h 2>/dev/null; \
-- done; \
- ) | sed -e s,//,/,g | sort -u > $@
-
- exports.c: export_files
diff --git a/httpd-2.4.4-mod_unique_id.patch b/httpd-2.4.4-mod_unique_id.patch
deleted file mode 100644
index 30bdfe0..0000000
--- a/httpd-2.4.4-mod_unique_id.patch
+++ /dev/null
@@ -1,239 +0,0 @@
---- trunk/modules/metadata/mod_unique_id.c 2011/12/02 23:02:04 1209766
-+++ trunk/modules/metadata/mod_unique_id.c 2013/07/10 16:20:31 1501827
-@@ -31,14 +31,11 @@
- #include "http_log.h"
- #include "http_protocol.h" /* for ap_hook_post_read_request */
-
--#if APR_HAVE_UNISTD_H
--#include /* for getpid() */
--#endif
-+#define ROOT_SIZE 10
-
- typedef struct {
- unsigned int stamp;
-- unsigned int in_addr;
-- unsigned int pid;
-+ char root[ROOT_SIZE];
- unsigned short counter;
- unsigned int thread_index;
- } unique_id_rec;
-@@ -64,20 +61,15 @@
- * gethostbyname (gethostname()) is unique across all the machines at the
- * "site".
- *
-- * We also further assume that pids fit in 32-bits. If something uses more
-- * than 32-bits, the fix is trivial, but it requires the unrolled uuencoding
-- * loop to be extended. * A similar fix is needed to support multithreaded
-- * servers, using a pid/tid combo.
-- *
-- * Together, the in_addr and pid are assumed to absolutely uniquely identify
-- * this one child from all other currently running children on all servers
-- * (including this physical server if it is running multiple httpds) from each
-+ * The root is assumed to absolutely uniquely identify this one child
-+ * from all other currently running children on all servers (including
-+ * this physical server if it is running multiple httpds) from each
- * other.
- *
-- * The stamp and counter are used to distinguish all hits for a particular
-- * (in_addr,pid) pair. The stamp is updated using r->request_time,
-- * saving cpu cycles. The counter is never reset, and is used to permit up to
-- * 64k requests in a single second by a single child.
-+ * The stamp and counter are used to distinguish all hits for a
-+ * particular root. The stamp is updated using r->request_time,
-+ * saving cpu cycles. The counter is never reset, and is used to
-+ * permit up to 64k requests in a single second by a single child.
- *
- * The 144-bits of unique_id_rec are encoded using the alphabet
- * [A-Za-z0-9@-], resulting in 24 bytes of printable characters. That is then
-@@ -92,7 +84,7 @@
- * module change.
- *
- * It is highly desirable that identifiers exist for "eternity". But future
-- * needs (such as much faster webservers, moving to 64-bit pids, or moving to a
-+ * needs (such as much faster webservers, or moving to a
- * multithreaded server) may dictate a need to change the contents of
- * unique_id_rec. Such a future implementation should ensure that the first
- * field is still a time_t stamp. By doing that, it is possible for a site to
-@@ -100,7 +92,15 @@
- * wait one entire second, and then start all of their new-servers. This
- * procedure will ensure that the new space of identifiers is completely unique
- * from the old space. (Since the first four unencoded bytes always differ.)
-+ *
-+ * Note: previous implementations used 32-bits of IP address plus pid
-+ * in place of the PRNG output in the "root" field. This was
-+ * insufficient for IPv6-only hosts, required working DNS to determine
-+ * a unique IP address (fragile), and needed a [0, 1) second sleep
-+ * call at startup to avoid pid reuse. Use of the PRNG avoids all
-+ * these issues.
- */
-+
- /*
- * Sun Jun 7 05:43:49 CEST 1998 -- Alvaro
- * More comments:
-@@ -116,8 +116,6 @@
- * htonl/ntohl. Well, this shouldn't be a problem till year 2106.
- */
-
--static unsigned global_in_addr;
--
- /*
- * XXX: We should have a per-thread counter and not use cur_unique_id.counter
- * XXX: in all threads, because this is bad for performance on multi-processor
-@@ -129,7 +127,7 @@
- /*
- * Number of elements in the structure unique_id_rec.
- */
--#define UNIQUE_ID_REC_MAX 5
-+#define UNIQUE_ID_REC_MAX 4
-
- static unsigned short unique_id_rec_offset[UNIQUE_ID_REC_MAX],
- unique_id_rec_size[UNIQUE_ID_REC_MAX],
-@@ -138,113 +136,32 @@
-
- static int unique_id_global_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *main_server)
- {
-- char str[APRMAXHOSTLEN + 1];
-- apr_status_t rv;
-- char *ipaddrstr;
-- apr_sockaddr_t *sockaddr;
--
- /*
- * Calculate the sizes and offsets in cur_unique_id.
- */
- unique_id_rec_offset[0] = APR_OFFSETOF(unique_id_rec, stamp);
- unique_id_rec_size[0] = sizeof(cur_unique_id.stamp);
-- unique_id_rec_offset[1] = APR_OFFSETOF(unique_id_rec, in_addr);
-- unique_id_rec_size[1] = sizeof(cur_unique_id.in_addr);
-- unique_id_rec_offset[2] = APR_OFFSETOF(unique_id_rec, pid);
-- unique_id_rec_size[2] = sizeof(cur_unique_id.pid);
-- unique_id_rec_offset[3] = APR_OFFSETOF(unique_id_rec, counter);
-- unique_id_rec_size[3] = sizeof(cur_unique_id.counter);
-- unique_id_rec_offset[4] = APR_OFFSETOF(unique_id_rec, thread_index);
-- unique_id_rec_size[4] = sizeof(cur_unique_id.thread_index);
-+ unique_id_rec_offset[1] = APR_OFFSETOF(unique_id_rec, root);
-+ unique_id_rec_size[1] = sizeof(cur_unique_id.root);
-+ unique_id_rec_offset[2] = APR_OFFSETOF(unique_id_rec, counter);
-+ unique_id_rec_size[2] = sizeof(cur_unique_id.counter);
-+ unique_id_rec_offset[3] = APR_OFFSETOF(unique_id_rec, thread_index);
-+ unique_id_rec_size[3] = sizeof(cur_unique_id.thread_index);
- unique_id_rec_total_size = unique_id_rec_size[0] + unique_id_rec_size[1] +
-- unique_id_rec_size[2] + unique_id_rec_size[3] +
-- unique_id_rec_size[4];
-+ unique_id_rec_size[2] + unique_id_rec_size[3];
-
- /*
- * Calculate the size of the structure when encoded.
- */
- unique_id_rec_size_uu = (unique_id_rec_total_size*8+5)/6;
-
-- /*
-- * Now get the global in_addr. Note that it is not sufficient to use one
-- * of the addresses from the main_server, since those aren't as likely to
-- * be unique as the physical address of the machine
-- */
-- if ((rv = apr_gethostname(str, sizeof(str) - 1, p)) != APR_SUCCESS) {
-- ap_log_error(APLOG_MARK, APLOG_ALERT, rv, main_server, APLOGNO(01563)
-- "unable to find hostname of the server");
-- return HTTP_INTERNAL_SERVER_ERROR;
-- }
--
-- if ((rv = apr_sockaddr_info_get(&sockaddr, str, AF_INET, 0, 0, p)) == APR_SUCCESS) {
-- global_in_addr = sockaddr->sa.sin.sin_addr.s_addr;
-- }
-- else {
-- ap_log_error(APLOG_MARK, APLOG_ALERT, rv, main_server, APLOGNO(01564)
-- "unable to find IPv4 address of \"%s\"", str);
--#if APR_HAVE_IPV6
-- if ((rv = apr_sockaddr_info_get(&sockaddr, str, AF_INET6, 0, 0, p)) == APR_SUCCESS) {
-- memcpy(&global_in_addr,
-- (char *)sockaddr->ipaddr_ptr + sockaddr->ipaddr_len - sizeof(global_in_addr),
-- sizeof(global_in_addr));
-- ap_log_error(APLOG_MARK, APLOG_ALERT, rv, main_server, APLOGNO(01565)
-- "using low-order bits of IPv6 address "
-- "as if they were unique");
-- }
-- else
--#endif
-- return HTTP_INTERNAL_SERVER_ERROR;
-- }
--
-- apr_sockaddr_ip_get(&ipaddrstr, sockaddr);
-- ap_log_error(APLOG_MARK, APLOG_INFO, 0, main_server, APLOGNO(01566) "using ip addr %s",
-- ipaddrstr);
--
-- /*
-- * If the server is pummelled with restart requests we could possibly end
-- * up in a situation where we're starting again during the same second
-- * that has been used in previous identifiers. Avoid that situation.
-- *
-- * In truth, for this to actually happen not only would it have to restart
-- * in the same second, but it would have to somehow get the same pids as
-- * one of the other servers that was running in that second. Which would
-- * mean a 64k wraparound on pids ... not very likely at all.
-- *
-- * But protecting against it is relatively cheap. We just sleep into the
-- * next second.
-- */
-- apr_sleep(apr_time_from_sec(1) - apr_time_usec(apr_time_now()));
- return OK;
- }
-
- static void unique_id_child_init(apr_pool_t *p, server_rec *s)
- {
-- pid_t pid;
--
-- /*
-- * Note that we use the pid because it's possible that on the same
-- * physical machine there are multiple servers (i.e. using Listen). But
-- * it's guaranteed that none of them will share the same pids between
-- * children.
-- *
-- * XXX: for multithread this needs to use a pid/tid combo and probably
-- * needs to be expanded to 32 bits
-- */
-- pid = getpid();
-- cur_unique_id.pid = pid;
--
-- /*
-- * Test our assumption that the pid is 32-bits. It's possible that
-- * 64-bit machines will declare pid_t to be 64 bits but only use 32
-- * of them. It would have been really nice to test this during
-- * global_init ... but oh well.
-- */
-- if ((pid_t)cur_unique_id.pid != pid) {
-- ap_log_error(APLOG_MARK, APLOG_CRIT, 0, s, APLOGNO(01567)
-- "oh no! pids are greater than 32-bits! I'm broken!");
-- }
--
-- cur_unique_id.in_addr = global_in_addr;
-+ ap_random_insecure_bytes(&cur_unique_id.root,
-+ sizeof(cur_unique_id.root));
-
- /*
- * If we use 0 as the initial counter we have a little less protection
-@@ -253,13 +170,6 @@
- */
- ap_random_insecure_bytes(&cur_unique_id.counter,
- sizeof(cur_unique_id.counter));
--
-- /*
-- * We must always use network ordering for these bytes, so that
-- * identifiers are comparable between machines of different byte
-- * orderings. Note in_addr is already in network order.
-- */
-- cur_unique_id.pid = htonl(cur_unique_id.pid);
- }
-
- /* NOTE: This is *NOT* the same encoding used by base64encode ... the last two
-@@ -291,10 +201,8 @@
- unsigned short counter;
- int i,j,k;
-
-- new_unique_id.in_addr = cur_unique_id.in_addr;
-- new_unique_id.pid = cur_unique_id.pid;
-+ memcpy(&new_unique_id.root, &cur_unique_id.root, ROOT_SIZE);
- new_unique_id.counter = cur_unique_id.counter;
--
- new_unique_id.stamp = htonl((unsigned int)apr_time_sec(r->request_time));
- new_unique_id.thread_index = htonl((unsigned int)r->connection->id);
-
diff --git a/httpd-2.4.4-r1337344+.patch b/httpd-2.4.4-r1337344+.patch
deleted file mode 100644
index 6e5c3e7..0000000
--- a/httpd-2.4.4-r1337344+.patch
+++ /dev/null
@@ -1,250 +0,0 @@
-# ./pullrev.sh 1337344 1341905 1342065 1341930
-
-suexec enhancements:
-
-1) use syslog for logging
-2) use capabilities not setuid/setgid root binary
-
-http://svn.apache.org/viewvc?view=revision&revision=1337344
-http://svn.apache.org/viewvc?view=revision&revision=1341905
-http://svn.apache.org/viewvc?view=revision&revision=1342065
-http://svn.apache.org/viewvc?view=revision&revision=1341930
-
---- httpd-2.4.4/configure.in.r1337344+
-+++ httpd-2.4.4/configure.in
-@@ -734,7 +734,24 @@ APACHE_HELP_STRING(--with-suexec-gidmin,
-
- AC_ARG_WITH(suexec-logfile,
- APACHE_HELP_STRING(--with-suexec-logfile,Set the logfile),[
-- AC_DEFINE_UNQUOTED(AP_LOG_EXEC, "$withval", [SuExec log file] ) ] )
-+ if test "x$withval" = "xyes"; then
-+ AC_DEFINE_UNQUOTED(AP_LOG_EXEC, "$withval", [SuExec log file])
-+ fi
-+])
-+
-+AC_ARG_WITH(suexec-syslog,
-+APACHE_HELP_STRING(--with-suexec-syslog,Set the logfile),[
-+ if test $withval = "yes"; then
-+ if test "x${with_suexec_logfile}" != "xno"; then
-+ AC_MSG_NOTICE([hint: use "--without-suexec-logfile --with-suexec-syslog"])
-+ AC_MSG_ERROR([suexec does not support both logging to file and syslog])
-+ fi
-+ AC_CHECK_FUNCS([vsyslog], [], [
-+ AC_MSG_ERROR([cannot support syslog from suexec without vsyslog()])])
-+ AC_DEFINE(AP_LOG_SYSLOG, 1, [SuExec log to syslog])
-+ fi
-+])
-+
-
- AC_ARG_WITH(suexec-safepath,
- APACHE_HELP_STRING(--with-suexec-safepath,Set the safepath),[
-@@ -744,6 +761,15 @@ AC_ARG_WITH(suexec-umask,
- APACHE_HELP_STRING(--with-suexec-umask,umask for suexec'd process),[
- AC_DEFINE_UNQUOTED(AP_SUEXEC_UMASK, 0$withval, [umask for suexec'd process] ) ] )
-
-+INSTALL_SUEXEC=setuid
-+AC_ARG_ENABLE([suexec-capabilities],
-+APACHE_HELP_STRING(--enable-suexec-capabilities,Use Linux capability bits not setuid root suexec), [
-+INSTALL_SUEXEC=caps
-+AC_DEFINE(AP_SUEXEC_CAPABILITIES, 1,
-+ [Enable if suexec is installed with Linux capabilities, not setuid])
-+])
-+APACHE_SUBST(INSTALL_SUEXEC)
-+
- dnl APR should go after the other libs, so the right symbols can be picked up
- if test x${apu_found} != xobsolete; then
- AP_LIBS="$AP_LIBS `$apu_config --avoid-ldap --link-libtool`"
---- httpd-2.4.4/docs/manual/suexec.html.en.r1337344+
-+++ httpd-2.4.4/docs/manual/suexec.html.en
-@@ -372,6 +372,21 @@
- together with the --enable-suexec option to let
- APACI accept your request for using the suEXEC feature.
-
-+
--enable-suexec-capabilities
-+
-+
Linux specific: Normally,
-+ the suexec binary is installed "setuid/setgid
-+ root", which allows it to run with the full privileges of the
-+ root user. If this option is used, the suexec
-+ binary will instead be installed with only the setuid/setgid
-+ "capability" bits set, which is the subset of full root
-+ priviliges required for suexec operation. Note that
-+ the suexec binary may not be able to write to a log
-+ file in this mode; it is recommended that the
-+ --with-suexec-syslog --without-suexec-logfile
-+ options are used in conjunction with this mode, so that syslog
-+ logging is used instead.
-+
-
--with-suexec-bin=PATH
-
-
The path to the suexec binary must be hard-coded
-@@ -433,6 +448,12 @@
- "suexec_log" and located in your standard logfile
- directory (--logfiledir).
-
-+
--with-suexec-syslog
-+
-+
If defined, suexec will log notices and errors to syslog
-+ instead of a logfile. This option must be combined
-+ with --without-suexec-logfile.
-+
-
--with-suexec-safepath=PATH
-
-
Define a safe PATH environment to pass to CGI
-@@ -550,9 +571,12 @@ Group webgroup
-
-
The suEXEC wrapper will write log information
- to the file defined with the --with-suexec-logfile
-- option as indicated above. If you feel you have configured and
-- installed the wrapper properly, have a look at this log and the
-- error_log for the server to see where you may have gone astray.
-+ option as indicated above, or to syslog if --with-suexec-syslog
-+ is used. If you feel you have configured and
-+ installed the wrapper properly, have a look at the log and the
-+ error_log for the server to see where you may have gone astray.
-+ The output of "suexec -V" will show the options
-+ used to compile suexec, if using a binary distribution.