diff --git a/.gitignore b/.gitignore index e69de29..09a5a07 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,40 @@ +httpd-2.2.16.tar.gz +/httpd-2.2.17.tar.bz2 +x86_64 +/httpd-2.2.17 +/*.rpm +/.build*.log +/noarch +/httpd-2.2.19.tar.gz +/httpd-2.2.20.tar.gz +/httpd-2.2.21.tar.bz2 +/clog +/httpd-2.2.22.tar.bz2 +/httpd-2.4.??/ +/httpd-2.4.2.tar.bz2 +/httpd-2.4.3.tar.bz2 +/httpd-2.4.4.tar.bz2 +/httpd-2.4.6.tar.bz2 +/httpd-2.4.7.tar.bz2 +/httpd-2.4.9.tar.bz2 +/httpd-2.4.10.tar.bz2 +/httpd-2.4.12.tar.bz2 +/httpd-2.4.16.tar.bz2 +/httpd-2.4.17.tar.bz2 +/httpd-2.4.18.tar.bz2 +/httpd-2.4.23.tar.bz2 +/httpd-2.4.25.tar.bz2 +/httpd.socket.8 +/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 diff --git a/00-base.conf b/00-base.conf new file mode 100644 index 0000000..7cabce0 --- /dev/null +++ b/00-base.conf @@ -0,0 +1,69 @@ +# +# This file loads most of the modules included with the Apache HTTP +# Server itself. +# + +LoadModule access_compat_module modules/mod_access_compat.so +LoadModule actions_module modules/mod_actions.so +LoadModule alias_module modules/mod_alias.so +LoadModule allowmethods_module modules/mod_allowmethods.so +LoadModule auth_basic_module modules/mod_auth_basic.so +LoadModule auth_digest_module modules/mod_auth_digest.so +LoadModule authn_anon_module modules/mod_authn_anon.so +LoadModule authn_core_module modules/mod_authn_core.so +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 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 +LoadModule authz_groupfile_module modules/mod_authz_groupfile.so +LoadModule authz_host_module modules/mod_authz_host.so +LoadModule authz_owner_module modules/mod_authz_owner.so +LoadModule authz_user_module modules/mod_authz_user.so +LoadModule autoindex_module modules/mod_autoindex.so +LoadModule brotli_module modules/mod_brotli.so +LoadModule cache_module modules/mod_cache.so +LoadModule cache_disk_module modules/mod_cache_disk.so +LoadModule cache_socache_module modules/mod_cache_socache.so +LoadModule data_module modules/mod_data.so +LoadModule dbd_module modules/mod_dbd.so +LoadModule deflate_module modules/mod_deflate.so +LoadModule dir_module modules/mod_dir.so +LoadModule dumpio_module modules/mod_dumpio.so +LoadModule echo_module modules/mod_echo.so +LoadModule env_module modules/mod_env.so +LoadModule expires_module modules/mod_expires.so +LoadModule ext_filter_module modules/mod_ext_filter.so +LoadModule filter_module modules/mod_filter.so +LoadModule headers_module modules/mod_headers.so +LoadModule include_module modules/mod_include.so +LoadModule info_module modules/mod_info.so +LoadModule log_config_module modules/mod_log_config.so +LoadModule logio_module modules/mod_logio.so +LoadModule macro_module modules/mod_macro.so +LoadModule mime_magic_module modules/mod_mime_magic.so +LoadModule mime_module modules/mod_mime.so +LoadModule negotiation_module modules/mod_negotiation.so +LoadModule remoteip_module modules/mod_remoteip.so +LoadModule reqtimeout_module modules/mod_reqtimeout.so +LoadModule request_module modules/mod_request.so +LoadModule rewrite_module modules/mod_rewrite.so +LoadModule setenvif_module modules/mod_setenvif.so +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 +LoadModule suexec_module modules/mod_suexec.so +LoadModule unique_id_module modules/mod_unique_id.so +LoadModule unixd_module modules/mod_unixd.so +LoadModule userdir_module modules/mod_userdir.so +LoadModule version_module modules/mod_version.so +LoadModule vhost_alias_module modules/mod_vhost_alias.so +LoadModule watchdog_module modules/mod_watchdog.so + diff --git a/00-dav.conf b/00-dav.conf new file mode 100644 index 0000000..e6af8de --- /dev/null +++ b/00-dav.conf @@ -0,0 +1,3 @@ +LoadModule dav_module modules/mod_dav.so +LoadModule dav_fs_module modules/mod_dav_fs.so +LoadModule dav_lock_module modules/mod_dav_lock.so diff --git a/00-lua.conf b/00-lua.conf new file mode 100644 index 0000000..9e0d0db --- /dev/null +++ b/00-lua.conf @@ -0,0 +1 @@ +LoadModule lua_module modules/mod_lua.so diff --git a/00-mpm.conf b/00-mpm.conf new file mode 100644 index 0000000..a4a70b8 --- /dev/null +++ b/00-mpm.conf @@ -0,0 +1,23 @@ +# Select the MPM module which should be used by uncommenting exactly +# 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 +# +# 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 +# See: http://httpd.apache.org/docs/2.4/mod/worker.html +# +#LoadModule mpm_worker_module modules/mod_mpm_worker.so + +# event MPM: A variant of the worker MPM with the goal of consuming +# threads only for connections with active processing +# See: http://httpd.apache.org/docs/2.4/mod/event.html +# +#LoadModule mpm_event_module modules/mod_mpm_event.so diff --git a/00-optional.conf b/00-optional.conf new file mode 100644 index 0000000..ef584ec --- /dev/null +++ b/00-optional.conf @@ -0,0 +1,18 @@ +# +# This file lists modules included with the Apache HTTP Server +# which are not enabled by default. +# + +#LoadModule asis_module modules/mod_asis.so +#LoadModule buffer_module modules/mod_buffer.so +#LoadModule heartbeat_module modules/mod_heartbeat.so +#LoadModule heartmonitor_module modules/mod_heartmonitor.so +#LoadModule usertrack_module modules/mod_usertrack.so +#LoadModule dialup_module modules/mod_dialup.so +#LoadModule charset_lite_module modules/mod_charset_lite.so +#LoadModule log_debug_module modules/mod_log_debug.so +#LoadModule log_forensic_module modules/mod_log_forensic.so +#LoadModule ratelimit_module modules/mod_ratelimit.so +#LoadModule reflector_module modules/mod_reflector.so +#LoadModule sed_module modules/mod_sed.so +#LoadModule speling_module modules/mod_speling.so diff --git a/00-proxy.conf b/00-proxy.conf new file mode 100644 index 0000000..f0f84c2 --- /dev/null +++ b/00-proxy.conf @@ -0,0 +1,18 @@ +# This file configures all the proxy modules: +LoadModule proxy_module modules/mod_proxy.so +LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so +LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so +LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so +LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so +LoadModule proxy_ajp_module modules/mod_proxy_ajp.so +LoadModule proxy_balancer_module modules/mod_proxy_balancer.so +LoadModule proxy_connect_module modules/mod_proxy_connect.so +LoadModule proxy_express_module modules/mod_proxy_express.so +LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so +LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so +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/00-proxyhtml.conf b/00-proxyhtml.conf new file mode 100644 index 0000000..9a9b107 --- /dev/null +++ b/00-proxyhtml.conf @@ -0,0 +1,3 @@ +# This file configures mod_proxy_html and mod_xml2enc: +LoadModule xml2enc_module modules/mod_xml2enc.so +LoadModule proxy_html_module modules/mod_proxy_html.so diff --git a/00-ssl.conf b/00-ssl.conf new file mode 100644 index 0000000..53235cd --- /dev/null +++ b/00-ssl.conf @@ -0,0 +1 @@ +LoadModule ssl_module modules/mod_ssl.so diff --git a/00-systemd.conf b/00-systemd.conf new file mode 100644 index 0000000..b208c97 --- /dev/null +++ b/00-systemd.conf @@ -0,0 +1,2 @@ +# This file configures systemd module: +LoadModule systemd_module modules/mod_systemd.so diff --git a/01-cgi.conf b/01-cgi.conf new file mode 100644 index 0000000..4b680cf --- /dev/null +++ b/01-cgi.conf @@ -0,0 +1,11 @@ +# This configuration file loads a CGI module appropriate to the MPM +# 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 cgi_module modules/mod_cgi.so + + diff --git a/01-ldap.conf b/01-ldap.conf new file mode 100644 index 0000000..f2ac2a2 --- /dev/null +++ b/01-ldap.conf @@ -0,0 +1,3 @@ +# This file configures the LDAP modules: +LoadModule ldap_module modules/mod_ldap.so +LoadModule authnz_ldap_module modules/mod_authnz_ldap.so diff --git a/01-session.conf b/01-session.conf new file mode 100644 index 0000000..f8d4d92 --- /dev/null +++ b/01-session.conf @@ -0,0 +1,6 @@ +LoadModule session_module modules/mod_session.so +LoadModule session_cookie_module modules/mod_session_cookie.so +LoadModule session_dbd_module modules/mod_session_dbd.so +LoadModule auth_form_module modules/mod_auth_form.so + +#LoadModule session_crypto_module modules/mod_session_crypto.so diff --git a/10-listen443.conf b/10-listen443.conf new file mode 100644 index 0000000..7e2df97 --- /dev/null +++ b/10-listen443.conf @@ -0,0 +1,5 @@ +# This file is part of mod_ssl. It enables listening on port 443 when +# socket activation is used. + +[Socket] +ListenStream=443 diff --git a/README.confd b/README.confd new file mode 100644 index 0000000..6071deb --- /dev/null +++ b/README.confd @@ -0,0 +1,9 @@ + +This directory holds configuration files for the Apache HTTP Server; +any files in this directory which have the ".conf" extension will be +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 sorted order. See httpd.conf(5) for more +information. diff --git a/README.confmod b/README.confmod new file mode 100644 index 0000000..f4b055d --- /dev/null +++ b/README.confmod @@ -0,0 +1,10 @@ + +This directory holds configuration files for the Apache HTTP Server; +any files in this directory which have the ".conf" extension will be +processed as httpd configuration files. This directory contains +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 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 new file mode 100644 index 0000000..711d9cd --- /dev/null +++ b/action-configtest.sh @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/sbin/httpd -t diff --git a/action-graceful.sh b/action-graceful.sh new file mode 100644 index 0000000..4976087 --- /dev/null +++ b/action-graceful.sh @@ -0,0 +1,2 @@ +#!/bin/sh +exec /sbin/apachectl graceful diff --git a/apachectl.sh b/apachectl.sh new file mode 100755 index 0000000..766cfba --- /dev/null +++ b/apachectl.sh @@ -0,0 +1,67 @@ +#!/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. + +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..5e40832 --- /dev/null +++ b/apachectl.xml @@ -0,0 +1,191 @@ + +[ + +]> + + + + 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 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. + + + + + + + Bugs + Please report bugs by filing an issue in Bugzilla via . + + + + See also + + + httpd8, + httpd.conf5, + systemd1, + systemctl1, + httpd.service8 + + + + 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/htcacheclean.service b/htcacheclean.service new file mode 100644 index 0000000..d1e9d60 --- /dev/null +++ b/htcacheclean.service @@ -0,0 +1,11 @@ +[Unit] +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 +EnvironmentFile=/etc/sysconfig/htcacheclean +ExecStart=/usr/sbin/htcacheclean -P /run/httpd/htcacheclean/pid -d $INTERVAL -p $CACHE_ROOT -l $LIMIT $OPTIONS diff --git a/htcacheclean.service.xml b/htcacheclean.service.xml new file mode 100644 index 0000000..01b68e4 --- /dev/null +++ b/htcacheclean.service.xml @@ -0,0 +1,123 @@ + + + + + + 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 + + + + See also + + + htcacheclean8, + httpd8, + httpd.service8, + systemd.exec8 + + + + + + diff --git a/htcacheclean.sysconf b/htcacheclean.sysconf new file mode 100644 index 0000000..fffa17b --- /dev/null +++ b/htcacheclean.sysconf @@ -0,0 +1,16 @@ +# +# Configuration options for systemd service, htcacheclean.service. +# See htcacheclean(8) for more information on available options. +# + +# Interval between cache clean runs, in minutes +INTERVAL=15 + +# Default cache root. +CACHE_ROOT=/var/cache/httpd/proxy + +# Cache size limit in bytes (K=Kbytes, M=Mbytes) +LIMIT=100M + +# Any other options... +OPTIONS= diff --git a/httpd-2.4.43-apxs.patch b/httpd-2.4.43-apxs.patch new file mode 100644 index 0000000..b1185b2 --- /dev/null +++ b/httpd-2.4.43-apxs.patch @@ -0,0 +1,58 @@ +diff --git a/support/apxs.in b/support/apxs.in +index b2705fa..c331631 100644 +--- a/support/apxs.in ++++ b/support/apxs.in +@@ -35,7 +35,18 @@ if ($ddi >= 0) { + + my %config_vars = (); + +-my $installbuilddir = "@exp_installbuilddir@"; ++# Awful hack to make apxs libdir-agnostic: ++my $pkg_config = "/usr/bin/pkg-config"; ++if (! -x "$pkg_config") { ++ error("$pkg_config not found!"); ++ exit(1); ++} ++ ++my $libdir = `pkg-config --variable=libdir apr-1`; ++chomp $libdir; ++ ++my $installbuilddir = $libdir . "/httpd/build"; ++ + get_config_vars($destdir . "$installbuilddir/config_vars.mk",\%config_vars); + + # read the configuration variables once +@@ -285,7 +296,7 @@ if ($opt_g) { + $data =~ s|%NAME%|$name|sg; + $data =~ s|%TARGET%|$CFG_TARGET|sg; + $data =~ s|%PREFIX%|$prefix|sg; +- $data =~ s|%INSTALLBUILDDIR%|$installbuilddir|sg; ++ $data =~ s|%LIBDIR%|$libdir|sg; + + my ($mkf, $mods, $src) = ($data =~ m|^(.+)-=#=-\n(.+)-=#=-\n(.+)|s); + +@@ -463,11 +474,11 @@ if ($opt_c) { + my $ldflags = "$CFG_LDFLAGS"; + if ($opt_p == 1) { + +- my $apr_libs=`$apr_config --cflags --ldflags --link-libtool --libs`; ++ my $apr_libs=`$apr_config --cflags --ldflags --link-libtool`; + chomp($apr_libs); + my $apu_libs=""; + if ($apr_major_version < 2) { +- $apu_libs=`$apu_config --ldflags --link-libtool --libs`; ++ $apu_libs=`$apu_config --ldflags --link-libtool`; + chomp($apu_libs); + } + +@@ -682,8 +693,8 @@ __DATA__ + + builddir=. + top_srcdir=%PREFIX% +-top_builddir=%PREFIX% +-include %INSTALLBUILDDIR%/special.mk ++top_builddir=%LIBDIR%/httpd ++include %LIBDIR%/httpd/build/special.mk + + # the used tools + APACHECTL=apachectl diff --git a/httpd-2.4.43-cachehardmax.patch b/httpd-2.4.43-cachehardmax.patch new file mode 100644 index 0000000..755f822 --- /dev/null +++ b/httpd-2.4.43-cachehardmax.patch @@ -0,0 +1,82 @@ +diff --git a/modules/cache/cache_util.h b/modules/cache/cache_util.h +index 6b92151..4c42a8e 100644 +--- a/modules/cache/cache_util.h ++++ b/modules/cache/cache_util.h +@@ -195,6 +195,9 @@ typedef struct { + unsigned int store_nostore_set:1; + unsigned int enable_set:1; + unsigned int disable_set:1; ++ /* treat maxex as hard limit */ ++ unsigned int hardmaxex:1; ++ unsigned int hardmaxex_set:1; + } cache_dir_conf; + + /* A linked-list of authn providers. */ +diff --git a/modules/cache/mod_cache.c b/modules/cache/mod_cache.c +index 3b9aa4f..8268503 100644 +--- a/modules/cache/mod_cache.c ++++ b/modules/cache/mod_cache.c +@@ -1455,6 +1455,11 @@ static apr_status_t cache_save_filter(ap_filter_t *f, apr_bucket_brigade *in) + exp = date + dconf->defex; + } + } ++ /* else, forcibly cap the expiry date if required */ ++ else if (dconf->hardmaxex && (date + dconf->maxex) < exp) { ++ exp = date + dconf->maxex; ++ } ++ + info->expire = exp; + + /* We found a stale entry which wasn't really stale. */ +@@ -1954,7 +1959,9 @@ static void *create_dir_config(apr_pool_t *p, char *dummy) + + /* array of providers for this URL space */ + dconf->cacheenable = apr_array_make(p, 10, sizeof(struct cache_enable)); +- ++ /* flag; treat maxex as hard limit */ ++ dconf->hardmaxex = 0; ++ dconf->hardmaxex_set = 0; + return dconf; + } + +@@ -2004,7 +2011,10 @@ static void *merge_dir_config(apr_pool_t *p, void *basev, void *addv) { + new->enable_set = add->enable_set || base->enable_set; + new->disable = (add->disable_set == 0) ? base->disable : add->disable; + new->disable_set = add->disable_set || base->disable_set; +- ++ new->hardmaxex = ++ (add->hardmaxex_set == 0) ++ ? base->hardmaxex ++ : add->hardmaxex; + return new; + } + +@@ -2332,12 +2342,18 @@ static const char *add_cache_disable(cmd_parms *parms, void *dummy, + } + + static const char *set_cache_maxex(cmd_parms *parms, void *dummy, +- const char *arg) ++ const char *arg, const char *hard) + { + cache_dir_conf *dconf = (cache_dir_conf *)dummy; + + dconf->maxex = (apr_time_t) (atol(arg) * MSEC_ONE_SEC); + dconf->maxex_set = 1; ++ ++ if (hard && strcasecmp(hard, "hard") == 0) { ++ dconf->hardmaxex = 1; ++ dconf->hardmaxex_set = 1; ++ } ++ + return NULL; + } + +@@ -2545,7 +2561,7 @@ static const command_rec cache_cmds[] = + "caching is enabled"), + AP_INIT_TAKE1("CacheDisable", add_cache_disable, NULL, RSRC_CONF|ACCESS_CONF, + "A partial URL prefix below which caching is disabled"), +- AP_INIT_TAKE1("CacheMaxExpire", set_cache_maxex, NULL, RSRC_CONF|ACCESS_CONF, ++ AP_INIT_TAKE12("CacheMaxExpire", set_cache_maxex, NULL, RSRC_CONF|ACCESS_CONF, + "The maximum time in seconds to cache a document"), + AP_INIT_TAKE1("CacheMinExpire", set_cache_minex, NULL, RSRC_CONF|ACCESS_CONF, + "The minimum time in seconds to cache a document"), diff --git a/httpd-2.4.43-corelimit.patch b/httpd-2.4.43-corelimit.patch new file mode 100644 index 0000000..dd4b874 --- /dev/null +++ b/httpd-2.4.43-corelimit.patch @@ -0,0 +1,30 @@ +diff --git a/server/core.c b/server/core.c +index 79b2a82..dc0f17a 100644 +--- a/server/core.c ++++ b/server/core.c +@@ -4996,6 +4996,25 @@ static int core_post_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *pte + } + apr_pool_cleanup_register(pconf, NULL, ap_mpm_end_gen_helper, + apr_pool_cleanup_null); ++ ++#ifdef RLIMIT_CORE ++ if (ap_coredumpdir_configured) { ++ struct rlimit lim; ++ ++ if (getrlimit(RLIMIT_CORE, &lim) == 0 && lim.rlim_cur == 0) { ++ lim.rlim_cur = lim.rlim_max; ++ if (setrlimit(RLIMIT_CORE, &lim) == 0) { ++ ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, NULL, ++ "core dump file size limit raised to %lu bytes", ++ lim.rlim_cur); ++ } else { ++ ap_log_error(APLOG_MARK, APLOG_NOTICE, errno, NULL, ++ "core dump file size is zero, setrlimit failed"); ++ } ++ } ++ } ++#endif ++ + return OK; + } + diff --git a/httpd-2.4.43-deplibs.patch b/httpd-2.4.43-deplibs.patch new file mode 100644 index 0000000..c60f5a5 --- /dev/null +++ b/httpd-2.4.43-deplibs.patch @@ -0,0 +1,16 @@ +diff --git a/configure.in b/configure.in +index f8f9442..f276550 100644 +--- a/configure.in ++++ b/configure.in +@@ -786,9 +786,9 @@ 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 --libs`" ++ AP_LIBS="$AP_LIBS `$apu_config --avoid-ldap --link-libtool`" + fi +-AP_LIBS="$AP_LIBS `$apr_config --link-libtool --libs`" ++AP_LIBS="$AP_LIBS `$apr_config --link-libtool`" + APACHE_SUBST(AP_LIBS) + APACHE_SUBST(AP_BUILD_SRCLIB_DIRS) + APACHE_SUBST(AP_CLEAN_SRCLIB_DIRS) diff --git a/httpd-2.4.43-detect-systemd.patch b/httpd-2.4.43-detect-systemd.patch new file mode 100644 index 0000000..540687f --- /dev/null +++ b/httpd-2.4.43-detect-systemd.patch @@ -0,0 +1,45 @@ +diff --git a/Makefile.in b/Makefile.in +index 0b088ac..9eeb5c7 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -4,7 +4,7 @@ CLEAN_SUBDIRS = test + + 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/acinclude.m4 b/acinclude.m4 +index 2a7e5d1..eb28321 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -624,6 +624,7 @@ case $host in + 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 +diff --git a/configure.in b/configure.in +index 3618a5a..74a782b 100644 +--- a/configure.in ++++ b/configure.in +@@ -234,6 +234,7 @@ if test "$PCRE_CONFIG" != "false"; then + 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 +@@ -710,6 +711,7 @@ APACHE_SUBST(OS_DIR) + 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 ""' diff --git a/httpd-2.4.43-enable-sslv3.patch b/httpd-2.4.43-enable-sslv3.patch new file mode 100644 index 0000000..2861605 --- /dev/null +++ b/httpd-2.4.43-enable-sslv3.patch @@ -0,0 +1,62 @@ +diff --git a/modules/ssl/ssl_engine_config.c b/modules/ssl/ssl_engine_config.c +index 979489c..3d6443b 100644 +--- a/modules/ssl/ssl_engine_config.c ++++ b/modules/ssl/ssl_engine_config.c +@@ -1485,6 +1485,10 @@ static const char *ssl_cmd_protocol_parse(cmd_parms *parms, + #endif + else if (strcEQ(w, "all")) { + thisopt = SSL_PROTOCOL_ALL; ++#ifndef OPENSSL_NO_SSL3 ++ /* by default, ALL kw doesn't turn on SSLv3 */ ++ thisopt &= ~SSL_PROTOCOL_SSLV3; ++#endif + } + else { + return apr_pstrcat(parms->temp_pool, +diff --git a/modules/ssl/ssl_engine_init.c b/modules/ssl/ssl_engine_init.c +index b0fcf81..ab6f263 100644 +--- a/modules/ssl/ssl_engine_init.c ++++ b/modules/ssl/ssl_engine_init.c +@@ -568,6 +568,28 @@ static apr_status_t ssl_init_ctx_tls_extensions(server_rec *s, + } + #endif + ++/* ++ * Enable/disable SSLProtocol. If the mod_ssl enables protocol ++ * which is disabled by default by OpenSSL, show a warning. ++ * "option" is for example SSL_OP_NO_SSLv3. ++ */ ++static void ssl_set_ctx_protocol_option(server_rec *s, ++ SSL_CTX *ctx, ++ long option, ++ int enabled, ++ const char *name) ++{ ++ if (!enabled) { ++ SSL_CTX_set_options(ctx, option); ++ } ++ else if (SSL_CTX_get_options(ctx) & option) { ++ SSL_CTX_clear_options(ctx, option); ++ ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s, APLOGNO(02904) ++ "Allowing SSLProtocol %s even though it is disabled " ++ "by OpenSSL by default on this system", name); ++ } ++} ++ + static apr_status_t ssl_init_ctx_protocol(server_rec *s, + apr_pool_t *p, + apr_pool_t *ptemp, +@@ -735,9 +757,13 @@ static apr_status_t ssl_init_ctx_protocol(server_rec *s, + } + if (prot == TLS1_1_VERSION && protocol & SSL_PROTOCOL_TLSV1) { + prot = TLS1_VERSION; ++ ssl_set_ctx_protocol_option(s, ctx, SSL_OP_NO_TLSv1, ++ protocol & SSL_PROTOCOL_TLSV1, "TLSv1"); + } + #ifndef OPENSSL_NO_SSL3 + if (prot == TLS1_VERSION && protocol & SSL_PROTOCOL_SSLV3) { ++ ssl_set_ctx_protocol_option(s, ctx, SSL_OP_NO_SSLv3, ++ protocol & SSL_PROTOCOL_SSLV3, "SSLv3"); + prot = SSL3_VERSION; + } + #endif diff --git a/httpd-2.4.43-export.patch b/httpd-2.4.43-export.patch new file mode 100644 index 0000000..0d9fd72 --- /dev/null +++ b/httpd-2.4.43-export.patch @@ -0,0 +1,63 @@ + +Reduce size of httpd binary by telling linker to export all symbols +from libmain.a, rather than bloating the symbol table with ap_hack_* +to do so indirectly. + +Upstream: https://svn.apache.org/r1861685 (as new default-off configure option) + +diff --git a/Makefile.in b/Makefile.in +index 9eeb5c7..8746a10 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -4,8 +4,15 @@ CLEAN_SUBDIRS = test + + PROGRAM_NAME = $(progname) + PROGRAM_SOURCES = modules.c +-PROGRAM_LDADD = buildmark.o $(HTTPD_LDFLAGS) $(PROGRAM_DEPENDENCIES) $(HTTPD_LIBS) $(EXTRA_LIBS) $(AP_LIBS) $(LIBS) ++PROGRAM_LDADD = buildmark.o $(HTTPD_LDFLAGS) \ ++ $(PROGRAM_LDDEPS) \ ++ $(HTTPD_LIBS) $(EXTRA_LIBS) $(AP_LIBS) $(LIBS) + PROGRAM_PRELINK = $(COMPILE) -c $(top_srcdir)/server/buildmark.c ++PROGRAM_LDDEPS = \ ++ $(BUILTIN_LIBS) \ ++ $(MPM_LIB) \ ++ -Wl,--whole-archive,server/.libs/libmain.a,--no-whole-archive \ ++ os/$(OS_DIR)/libos.la + PROGRAM_DEPENDENCIES = \ + server/libmain.la \ + $(BUILTIN_LIBS) \ +diff --git a/server/Makefile.in b/server/Makefile.in +index 1fa3344..116850b 100644 +--- a/server/Makefile.in ++++ b/server/Makefile.in +@@ -12,7 +12,7 @@ LTLIBRARY_SOURCES = \ + connection.c listen.c util_mutex.c \ + mpm_common.c mpm_unix.c mpm_fdqueue.c \ + util_charset.c util_cookies.c util_debug.c util_xml.c \ +- util_filter.c util_pcre.c util_regex.c exports.c \ ++ util_filter.c util_pcre.c util_regex.c \ + scoreboard.c error_bucket.c protocol.c core.c request.c provider.c \ + eoc_bucket.c eor_bucket.c core_filters.c \ + util_expr_parse.c util_expr_scan.c util_expr_eval.c +diff --git a/server/main.c b/server/main.c +index 62e06df..17c09ee 100644 +--- a/server/main.c ++++ b/server/main.c +@@ -835,17 +835,3 @@ int main(int argc, const char * const argv[]) + return !OK; + } + +-#ifdef AP_USING_AUTOCONF +-/* This ugly little hack pulls any function referenced in exports.c into +- * the web server. exports.c is generated during the build, and it +- * has all of the APR functions specified by the apr/apr.exports and +- * apr-util/aprutil.exports files. +- */ +-const void *ap_suck_in_APR(void); +-const void *ap_suck_in_APR(void) +-{ +- extern const void *ap_ugly_hack; +- +- return ap_ugly_hack; +-} +-#endif diff --git a/httpd-2.4.43-gettid.patch b/httpd-2.4.43-gettid.patch new file mode 100644 index 0000000..f80b3a7 --- /dev/null +++ b/httpd-2.4.43-gettid.patch @@ -0,0 +1,93 @@ +From d4e5b6e1e5585d341d1e51f1ddc637c099111076 Mon Sep 17 00:00:00 2001 +From: Joe Orton +Date: Tue, 7 Jul 2020 09:48:01 +0100 +Subject: [PATCH] Check and use gettid() directly with glibc 2.30+. + +* configure.in: Check for gettid() and define HAVE_SYS_GETTID if + gettid() is only usable via syscall(). + +* server/log.c (log_tid): Use gettid() directly if available. +--- + configure.in | 14 +++++++++----- + server/log.c | 8 ++++++-- + 2 files changed, 15 insertions(+), 7 deletions(-) + +diff --git a/configure.in b/configure.in +index 423d58d4b9a..60cbf7b7f81 100644 +--- httpd-2.4.43/configure.in.gettid ++++ httpd-2.4.43/configure.in +@@ -478,7 +500,8 @@ + timegm \ + getpgid \ + fopen64 \ +-getloadavg ++getloadavg \ ++gettid + ) + + dnl confirm that a void pointer is large enough to store a long integer +@@ -489,16 +512,19 @@ + APR_ADDTO(HTTPD_LIBS, [-lselinux]) + ]) + +-AC_CACHE_CHECK([for gettid()], ac_cv_gettid, ++if test $ac_cv_func_gettid = no; then ++ # On Linux before glibc 2.30, gettid() is only usable via syscall() ++ AC_CACHE_CHECK([for gettid() via syscall], ap_cv_gettid, + [AC_TRY_RUN(#define _GNU_SOURCE + #include + #include + #include + int main(int argc, char **argv) { + pid_t t = syscall(SYS_gettid); return t == -1 ? 1 : 0; }, +-[ac_cv_gettid=yes], [ac_cv_gettid=no], [ac_cv_gettid=no])]) +-if test "$ac_cv_gettid" = "yes"; then +- AC_DEFINE(HAVE_GETTID, 1, [Define if you have gettid()]) ++ [ap_cv_gettid=yes], [ap_cv_gettid=no], [ap_cv_gettid=no])]) ++ if test "$ap_cv_gettid" = "yes"; then ++ AC_DEFINE(HAVE_SYS_GETTID, 1, [Define if you have gettid() via syscall()]) ++ fi + fi + + dnl ## Check for the tm_gmtoff field in struct tm to get the timezone diffs +--- httpd-2.4.43/server/log.c.gettid ++++ httpd-2.4.43/server/log.c +@@ -55,7 +55,7 @@ + #include "ap_mpm.h" + #include "ap_listen.h" + +-#if HAVE_GETTID ++#if HAVE_SYS_GETTID + #include + #include + #endif +@@ -625,14 +625,18 @@ + #if APR_HAS_THREADS + int result; + #endif +-#if HAVE_GETTID ++#if defined(HAVE_GETTID) || defined(HAVE_SYS_GETTID) + if (arg && *arg == 'g') { ++#ifdef HAVE_GETTID ++ pid_t tid = gettid(); ++#else + pid_t tid = syscall(SYS_gettid); ++#endif + if (tid == -1) + return 0; + return apr_snprintf(buf, buflen, "%"APR_PID_T_FMT, tid); + } +-#endif ++#endif /* HAVE_GETTID || HAVE_SYS_GETTID */ + #if APR_HAS_THREADS + if (ap_mpm_query(AP_MPMQ_IS_THREADED, &result) == APR_SUCCESS + && result != AP_MPMQ_NOT_SUPPORTED) +@@ -966,7 +970,7 @@ + #if APR_HAS_THREADS + field_start = len; + len += cpystrn(buf + len, ":tid ", buflen - len); +- item_len = log_tid(info, NULL, buf + len, buflen - len); ++ item_len = log_tid(info, "g", buf + len, buflen - len); + if (!item_len) + len = field_start; + else diff --git a/httpd-2.4.43-icons.patch b/httpd-2.4.43-icons.patch new file mode 100644 index 0000000..21518d7 --- /dev/null +++ b/httpd-2.4.43-icons.patch @@ -0,0 +1,22 @@ +diff --git a/docs/conf/extra/httpd-autoindex.conf.in b/docs/conf/extra/httpd-autoindex.conf.in +index 51b02ed..0e8b626 100644 +--- a/docs/conf/extra/httpd-autoindex.conf.in ++++ b/docs/conf/extra/httpd-autoindex.conf.in +@@ -21,7 +21,7 @@ IndexOptions FancyIndexing HTMLTable VersionSort + 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.43-mod_systemd.patch b/httpd-2.4.43-mod_systemd.patch new file mode 100644 index 0000000..8d7922e --- /dev/null +++ b/httpd-2.4.43-mod_systemd.patch @@ -0,0 +1,96 @@ + +More verbose startup logging for mod_systemd. + +--- httpd-2.4.43/modules/arch/unix/mod_systemd.c.mod_systemd ++++ httpd-2.4.43/modules/arch/unix/mod_systemd.c +@@ -29,11 +29,14 @@ + #include "mpm_common.h" + + #include "systemd/sd-daemon.h" ++#include "systemd/sd-journal.h" + + #if APR_HAVE_UNISTD_H + #include + #endif + ++static char describe_listeners[30]; ++ + static int systemd_pre_config(apr_pool_t *pconf, apr_pool_t *plog, + apr_pool_t *ptemp) + { +@@ -44,6 +47,20 @@ + return OK; + } + ++static char *dump_listener(ap_listen_rec *lr, apr_pool_t *p) ++{ ++ apr_sockaddr_t *sa = lr->bind_addr; ++ char addr[128]; ++ ++ if (apr_sockaddr_is_wildcard(sa)) { ++ return apr_pstrcat(p, "port ", apr_itoa(p, sa->port), NULL); ++ } ++ ++ apr_sockaddr_ip_getbuf(addr, sizeof addr, sa); ++ ++ return apr_psprintf(p, "%s port %u", addr, sa->port); ++} ++ + /* Report the service is ready in post_config, which could be during + * startup or after a reload. The server could still hit a fatal + * startup error after this point during ap_run_mpm(), so this is +@@ -51,19 +68,51 @@ + * the TCP ports so new connections will not be rejected. There will + * always be a possible async failure event simultaneous to the + * service reporting "ready", so this should be good enough. */ +-static int systemd_post_config(apr_pool_t *p, apr_pool_t *plog, ++static int systemd_post_config(apr_pool_t *pconf, apr_pool_t *plog, + apr_pool_t *ptemp, server_rec *main_server) + { ++ ap_listen_rec *lr; ++ apr_size_t plen = sizeof describe_listeners; ++ char *p = describe_listeners; ++ ++ if (ap_state_query(AP_SQ_MAIN_STATE) == AP_SQ_MS_CREATE_PRE_CONFIG) ++ return OK; ++ ++ for (lr = ap_listeners; lr; lr = lr->next) { ++ char *s = dump_listener(lr, ptemp); ++ ++ if (strlen(s) + 3 < plen) { ++ char *newp = apr_cpystrn(p, s, plen); ++ if (lr->next) ++ newp = apr_cpystrn(newp, ", ", 3); ++ plen -= newp - p; ++ p = newp; ++ } ++ else { ++ if (plen < 4) { ++ p = describe_listeners + sizeof describe_listeners - 4; ++ plen = 4; ++ } ++ apr_cpystrn(p, "...", plen); ++ break; ++ } ++ } ++ + sd_notify(0, "READY=1\n" + "STATUS=Configuration loaded.\n"); ++ ++ sd_journal_print(LOG_INFO, "Server configured, listening on: %s", ++ describe_listeners); ++ + return OK; + } + + static int systemd_pre_mpm(apr_pool_t *p, ap_scoreboard_e sb_type) + { + sd_notifyf(0, "READY=1\n" +- "STATUS=Processing requests...\n" +- "MAINPID=%" APR_PID_T_FMT, getpid()); ++ "STATUS=Started, listening on: %s\n" ++ "MAINPID=%" APR_PID_T_FMT, ++ describe_listeners, getpid()); + + return OK; + } diff --git a/httpd-2.4.43-r1828172+.patch b/httpd-2.4.43-r1828172+.patch new file mode 100644 index 0000000..3487600 --- /dev/null +++ b/httpd-2.4.43-r1828172+.patch @@ -0,0 +1,1413 @@ +diff --git a/modules/generators/cgi_common.h b/modules/generators/cgi_common.h +new file mode 100644 +index 0000000..85c9685 +--- /dev/null ++++ b/modules/generators/cgi_common.h +@@ -0,0 +1,359 @@ ++/* 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 "apr.h" ++#include "apr_strings.h" ++#include "apr_buckets.h" ++#include "apr_lib.h" ++#include "apr_poll.h" ++ ++#define APR_WANT_STRFUNC ++#define APR_WANT_MEMFUNC ++#include "apr_want.h" ++ ++#include "httpd.h" ++#include "util_filter.h" ++ ++static void discard_script_output(apr_bucket_brigade *bb) ++{ ++ apr_bucket *e; ++ const char *buf; ++ apr_size_t len; ++ ++ for (e = APR_BRIGADE_FIRST(bb); ++ e != APR_BRIGADE_SENTINEL(bb) && !APR_BUCKET_IS_EOS(e); ++ e = APR_BRIGADE_FIRST(bb)) ++ { ++ if (apr_bucket_read(e, &buf, &len, APR_BLOCK_READ)) { ++ break; ++ } ++ apr_bucket_delete(e); ++ } ++} ++ ++#ifdef WANT_CGI_BUCKET ++/* A CGI bucket type is needed to catch any output to stderr from the ++ * script; see PR 22030. */ ++static const apr_bucket_type_t bucket_type_cgi; ++ ++struct cgi_bucket_data { ++ apr_pollset_t *pollset; ++ request_rec *r; ++ apr_interval_time_t timeout; ++}; ++ ++/* Create a CGI bucket using pipes from script stdout 'out' ++ * and stderr 'err', for request 'r'. */ ++static apr_bucket *cgi_bucket_create(request_rec *r, ++ apr_interval_time_t timeout, ++ apr_file_t *out, apr_file_t *err, ++ apr_bucket_alloc_t *list) ++{ ++ apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); ++ apr_status_t rv; ++ apr_pollfd_t fd; ++ struct cgi_bucket_data *data = apr_palloc(r->pool, sizeof *data); ++ ++ /* Disable APR timeout handling since we'll use poll() entirely. */ ++ apr_file_pipe_timeout_set(out, 0); ++ apr_file_pipe_timeout_set(err, 0); ++ ++ APR_BUCKET_INIT(b); ++ b->free = apr_bucket_free; ++ b->list = list; ++ b->type = &bucket_type_cgi; ++ b->length = (apr_size_t)(-1); ++ b->start = -1; ++ ++ /* Create the pollset */ ++ rv = apr_pollset_create(&data->pollset, 2, r->pool, 0); ++ if (rv != APR_SUCCESS) { ++ ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(01217) ++ "apr_pollset_create(); check system or user limits"); ++ return NULL; ++ } ++ ++ fd.desc_type = APR_POLL_FILE; ++ fd.reqevents = APR_POLLIN; ++ fd.p = r->pool; ++ fd.desc.f = out; /* script's stdout */ ++ fd.client_data = (void *)1; ++ rv = apr_pollset_add(data->pollset, &fd); ++ if (rv != APR_SUCCESS) { ++ ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(01218) ++ "apr_pollset_add(); check system or user limits"); ++ return NULL; ++ } ++ ++ fd.desc.f = err; /* script's stderr */ ++ fd.client_data = (void *)2; ++ rv = apr_pollset_add(data->pollset, &fd); ++ if (rv != APR_SUCCESS) { ++ ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(01219) ++ "apr_pollset_add(); check system or user limits"); ++ return NULL; ++ } ++ ++ data->r = r; ++ data->timeout = timeout; ++ b->data = data; ++ return b; ++} ++ ++/* Create a duplicate CGI bucket using given bucket data */ ++static apr_bucket *cgi_bucket_dup(struct cgi_bucket_data *data, ++ apr_bucket_alloc_t *list) ++{ ++ apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); ++ APR_BUCKET_INIT(b); ++ b->free = apr_bucket_free; ++ b->list = list; ++ b->type = &bucket_type_cgi; ++ b->length = (apr_size_t)(-1); ++ b->start = -1; ++ b->data = data; ++ return b; ++} ++ ++/* Handle stdout from CGI child. Duplicate of logic from the _read ++ * method of the real APR pipe bucket implementation. */ ++static apr_status_t cgi_read_stdout(apr_bucket *a, apr_file_t *out, ++ const char **str, apr_size_t *len) ++{ ++ char *buf; ++ apr_status_t rv; ++ ++ *str = NULL; ++ *len = APR_BUCKET_BUFF_SIZE; ++ buf = apr_bucket_alloc(*len, a->list); /* XXX: check for failure? */ ++ ++ rv = apr_file_read(out, buf, len); ++ ++ if (rv != APR_SUCCESS && rv != APR_EOF) { ++ apr_bucket_free(buf); ++ return rv; ++ } ++ ++ if (*len > 0) { ++ struct cgi_bucket_data *data = a->data; ++ apr_bucket_heap *h; ++ ++ /* Change the current bucket to refer to what we read */ ++ a = apr_bucket_heap_make(a, buf, *len, apr_bucket_free); ++ h = a->data; ++ h->alloc_len = APR_BUCKET_BUFF_SIZE; /* note the real buffer size */ ++ *str = buf; ++ APR_BUCKET_INSERT_AFTER(a, cgi_bucket_dup(data, a->list)); ++ } ++ else { ++ apr_bucket_free(buf); ++ a = apr_bucket_immortal_make(a, "", 0); ++ *str = a->data; ++ } ++ return rv; ++} ++ ++/* Read method of CGI bucket: polls on stderr and stdout of the child, ++ * sending any stderr output immediately away to the error log. */ ++static apr_status_t cgi_bucket_read(apr_bucket *b, const char **str, ++ apr_size_t *len, apr_read_type_e block) ++{ ++ struct cgi_bucket_data *data = b->data; ++ apr_interval_time_t timeout = 0; ++ apr_status_t rv; ++ int gotdata = 0; ++ ++ if (block != APR_NONBLOCK_READ) { ++ timeout = data->timeout > 0 ? data->timeout : data->r->server->timeout; ++ } ++ ++ do { ++ const apr_pollfd_t *results; ++ apr_int32_t num; ++ ++ rv = apr_pollset_poll(data->pollset, timeout, &num, &results); ++ if (APR_STATUS_IS_TIMEUP(rv)) { ++ if (timeout) { ++ ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, data->r, APLOGNO(01220) ++ "Timeout waiting for output from CGI script %s", ++ data->r->filename); ++ return rv; ++ } ++ else { ++ return APR_EAGAIN; ++ } ++ } ++ else if (APR_STATUS_IS_EINTR(rv)) { ++ continue; ++ } ++ else if (rv != APR_SUCCESS) { ++ ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, data->r, APLOGNO(01221) ++ "poll failed waiting for CGI child"); ++ return rv; ++ } ++ ++ for (; num; num--, results++) { ++ if (results[0].client_data == (void *)1) { ++ /* stdout */ ++ rv = cgi_read_stdout(b, results[0].desc.f, str, len); ++ if (APR_STATUS_IS_EOF(rv)) { ++ rv = APR_SUCCESS; ++ } ++ gotdata = 1; ++ } else { ++ /* stderr */ ++ apr_status_t rv2 = log_script_err(data->r, results[0].desc.f); ++ if (APR_STATUS_IS_EOF(rv2)) { ++ apr_pollset_remove(data->pollset, &results[0]); ++ } ++ } ++ } ++ ++ } while (!gotdata); ++ ++ return rv; ++} ++ ++static const apr_bucket_type_t bucket_type_cgi = { ++ "CGI", 5, APR_BUCKET_DATA, ++ apr_bucket_destroy_noop, ++ cgi_bucket_read, ++ apr_bucket_setaside_notimpl, ++ apr_bucket_split_notimpl, ++ apr_bucket_copy_notimpl ++}; ++ ++#endif /* WANT_CGI_BUCKET */ ++ ++/* Handle the CGI response output, having set up the brigade with the ++ * CGI or PIPE bucket as appropriate. */ ++static int cgi_handle_response(request_rec *r, int nph, apr_bucket_brigade *bb, ++ apr_interval_time_t timeout, cgi_server_conf *conf, ++ char *logdata, apr_file_t *script_err) ++{ ++ apr_status_t rv; ++ ++ /* Handle script return... */ ++ if (!nph) { ++ const char *location; ++ char sbuf[MAX_STRING_LEN]; ++ int ret; ++ ++ if ((ret = ap_scan_script_header_err_brigade_ex(r, bb, sbuf, ++ APLOG_MODULE_INDEX))) ++ { ++ ret = log_script(r, conf, ret, logdata, sbuf, bb, script_err); ++ ++ /* ++ * ret could be HTTP_NOT_MODIFIED in the case that the CGI script ++ * does not set an explicit status and ap_meets_conditions, which ++ * is called by ap_scan_script_header_err_brigade, detects that ++ * the conditions of the requests are met and the response is ++ * not modified. ++ * In this case set r->status and return OK in order to prevent ++ * running through the error processing stack as this would ++ * break with mod_cache, if the conditions had been set by ++ * mod_cache itself to validate a stale entity. ++ * BTW: We circumvent the error processing stack anyway if the ++ * CGI script set an explicit status code (whatever it is) and ++ * the only possible values for ret here are: ++ * ++ * HTTP_NOT_MODIFIED (set by ap_meets_conditions) ++ * HTTP_PRECONDITION_FAILED (set by ap_meets_conditions) ++ * HTTP_INTERNAL_SERVER_ERROR (if something went wrong during the ++ * processing of the response of the CGI script, e.g broken headers ++ * or a crashed CGI process). ++ */ ++ if (ret == HTTP_NOT_MODIFIED) { ++ r->status = ret; ++ return OK; ++ } ++ ++ return ret; ++ } ++ ++ location = apr_table_get(r->headers_out, "Location"); ++ ++ if (location && r->status == 200) { ++ /* For a redirect whether internal or not, discard any ++ * remaining stdout from the script, and log any remaining ++ * stderr output, as normal. */ ++ discard_script_output(bb); ++ apr_brigade_destroy(bb); ++ ++ if (script_err) { ++ apr_file_pipe_timeout_set(script_err, timeout); ++ log_script_err(r, script_err); ++ } ++ } ++ ++ if (location && location[0] == '/' && r->status == 200) { ++ /* This redirect needs to be a GET no matter what the original ++ * method was. ++ */ ++ r->method = "GET"; ++ r->method_number = M_GET; ++ ++ /* We already read the message body (if any), so don't allow ++ * the redirected request to think it has one. We can ignore ++ * Transfer-Encoding, since we used REQUEST_CHUNKED_ERROR. ++ */ ++ apr_table_unset(r->headers_in, "Content-Length"); ++ ++ ap_internal_redirect_handler(location, r); ++ return OK; ++ } ++ else if (location && r->status == 200) { ++ /* XXX: Note that if a script wants to produce its own Redirect ++ * body, it now has to explicitly *say* "Status: 302" ++ */ ++ discard_script_output(bb); ++ apr_brigade_destroy(bb); ++ return HTTP_MOVED_TEMPORARILY; ++ } ++ ++ rv = ap_pass_brigade(r->output_filters, bb); ++ } ++ else /* nph */ { ++ struct ap_filter_t *cur; ++ ++ /* get rid of all filters up through protocol... since we ++ * haven't parsed off the headers, there is no way they can ++ * work ++ */ ++ ++ cur = r->proto_output_filters; ++ while (cur && cur->frec->ftype < AP_FTYPE_CONNECTION) { ++ cur = cur->next; ++ } ++ r->output_filters = r->proto_output_filters = cur; ++ ++ rv = ap_pass_brigade(r->output_filters, bb); ++ } ++ ++ /* don't soak up script output if errors occurred writing it ++ * out... otherwise, we prolong the life of the script when the ++ * connection drops or we stopped sending output for some other ++ * reason */ ++ if (script_err && rv == APR_SUCCESS && !r->connection->aborted) { ++ apr_file_pipe_timeout_set(script_err, timeout); ++ log_script_err(r, script_err); ++ } ++ ++ if (script_err) apr_file_close(script_err); ++ ++ return OK; /* NOT r->status, even if it has changed. */ ++} +diff --git a/modules/generators/config5.m4 b/modules/generators/config5.m4 +index bf29521..0863553 100644 +--- a/modules/generators/config5.m4 ++++ b/modules/generators/config5.m4 +@@ -78,4 +78,15 @@ fi + + APR_ADDTO(INCLUDES, [-I\$(top_srcdir)/$modpath_current]) + ++AC_ARG_ENABLE(cgid-fdpassing, ++ [APACHE_HELP_STRING(--enable-cgid-fdpassing,Enable experimental mod_cgid support for fd passing)], ++ [if test "$enableval" = "yes"; then ++ AC_CHECK_DECL(CMSG_DATA, ++ [AC_DEFINE([HAVE_CGID_FDPASSING], 1, [Enable FD passing support in mod_cgid])], ++ [AC_MSG_ERROR([cannot support mod_cgid fd-passing on this system])], [ ++#include ++#include ]) ++ fi ++]) ++ + APACHE_MODPATH_FINISH +diff --git a/modules/generators/mod_cgi.c b/modules/generators/mod_cgi.c +index 7e4b126..f438b35 100644 +--- a/modules/generators/mod_cgi.c ++++ b/modules/generators/mod_cgi.c +@@ -92,6 +92,10 @@ typedef struct { + apr_size_t bufbytes; + } cgi_server_conf; + ++typedef struct { ++ apr_interval_time_t timeout; ++} cgi_dirconf; ++ + static void *create_cgi_config(apr_pool_t *p, server_rec *s) + { + cgi_server_conf *c = +@@ -112,6 +116,12 @@ static void *merge_cgi_config(apr_pool_t *p, void *basev, void *overridesv) + return overrides->logname ? overrides : base; + } + ++static void *create_cgi_dirconf(apr_pool_t *p, char *dummy) ++{ ++ cgi_dirconf *c = (cgi_dirconf *) apr_pcalloc(p, sizeof(cgi_dirconf)); ++ return c; ++} ++ + static const char *set_scriptlog(cmd_parms *cmd, void *dummy, const char *arg) + { + server_rec *s = cmd->server; +@@ -150,6 +160,17 @@ static const char *set_scriptlog_buffer(cmd_parms *cmd, void *dummy, + return NULL; + } + ++static const char *set_script_timeout(cmd_parms *cmd, void *dummy, const char *arg) ++{ ++ cgi_dirconf *dc = dummy; ++ ++ if (ap_timeout_parameter_parse(arg, &dc->timeout, "s") != APR_SUCCESS) { ++ return "CGIScriptTimeout has wrong format"; ++ } ++ ++ return NULL; ++} ++ + static const command_rec cgi_cmds[] = + { + AP_INIT_TAKE1("ScriptLog", set_scriptlog, NULL, RSRC_CONF, +@@ -158,6 +179,9 @@ AP_INIT_TAKE1("ScriptLogLength", set_scriptlog_length, NULL, RSRC_CONF, + "the maximum length (in bytes) of the script debug log"), + AP_INIT_TAKE1("ScriptLogBuffer", set_scriptlog_buffer, NULL, RSRC_CONF, + "the maximum size (in bytes) to record of a POST request"), ++AP_INIT_TAKE1("CGIScriptTimeout", set_script_timeout, NULL, RSRC_CONF | ACCESS_CONF, ++ "The amount of time to wait between successful reads from " ++ "the CGI script, in seconds."), + {NULL} + }; + +@@ -466,23 +490,26 @@ static apr_status_t run_cgi_child(apr_file_t **script_out, + apr_filepath_name_get(r->filename)); + } + else { ++ cgi_dirconf *dc = ap_get_module_config(r->per_dir_config, &cgi_module); ++ apr_interval_time_t timeout = dc->timeout > 0 ? dc->timeout : r->server->timeout; ++ + apr_pool_note_subprocess(p, procnew, APR_KILL_AFTER_TIMEOUT); + + *script_in = procnew->out; + if (!*script_in) + return APR_EBADF; +- apr_file_pipe_timeout_set(*script_in, r->server->timeout); ++ apr_file_pipe_timeout_set(*script_in, timeout); + + if (e_info->prog_type == RUN_AS_CGI) { + *script_out = procnew->in; + if (!*script_out) + return APR_EBADF; +- apr_file_pipe_timeout_set(*script_out, r->server->timeout); ++ apr_file_pipe_timeout_set(*script_out, timeout); + + *script_err = procnew->err; + if (!*script_err) + return APR_EBADF; +- apr_file_pipe_timeout_set(*script_err, r->server->timeout); ++ apr_file_pipe_timeout_set(*script_err, timeout); + } + } + } +@@ -536,209 +563,12 @@ static apr_status_t default_build_command(const char **cmd, const char ***argv, + return APR_SUCCESS; + } + +-static void discard_script_output(apr_bucket_brigade *bb) +-{ +- apr_bucket *e; +- const char *buf; +- apr_size_t len; +- +- for (e = APR_BRIGADE_FIRST(bb); +- e != APR_BRIGADE_SENTINEL(bb) && !APR_BUCKET_IS_EOS(e); +- e = APR_BRIGADE_FIRST(bb)) +- { +- if (apr_bucket_read(e, &buf, &len, APR_BLOCK_READ)) { +- break; +- } +- apr_bucket_delete(e); +- } +-} +- + #if APR_FILES_AS_SOCKETS +- +-/* A CGI bucket type is needed to catch any output to stderr from the +- * script; see PR 22030. */ +-static const apr_bucket_type_t bucket_type_cgi; +- +-struct cgi_bucket_data { +- apr_pollset_t *pollset; +- request_rec *r; +-}; +- +-/* Create a CGI bucket using pipes from script stdout 'out' +- * and stderr 'err', for request 'r'. */ +-static apr_bucket *cgi_bucket_create(request_rec *r, +- apr_file_t *out, apr_file_t *err, +- apr_bucket_alloc_t *list) +-{ +- apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); +- apr_status_t rv; +- apr_pollfd_t fd; +- struct cgi_bucket_data *data = apr_palloc(r->pool, sizeof *data); +- +- APR_BUCKET_INIT(b); +- b->free = apr_bucket_free; +- b->list = list; +- b->type = &bucket_type_cgi; +- b->length = (apr_size_t)(-1); +- b->start = -1; +- +- /* Create the pollset */ +- rv = apr_pollset_create(&data->pollset, 2, r->pool, 0); +- if (rv != APR_SUCCESS) { +- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(01217) +- "apr_pollset_create(); check system or user limits"); +- return NULL; +- } +- +- fd.desc_type = APR_POLL_FILE; +- fd.reqevents = APR_POLLIN; +- fd.p = r->pool; +- fd.desc.f = out; /* script's stdout */ +- fd.client_data = (void *)1; +- rv = apr_pollset_add(data->pollset, &fd); +- if (rv != APR_SUCCESS) { +- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(01218) +- "apr_pollset_add(); check system or user limits"); +- return NULL; +- } +- +- fd.desc.f = err; /* script's stderr */ +- fd.client_data = (void *)2; +- rv = apr_pollset_add(data->pollset, &fd); +- if (rv != APR_SUCCESS) { +- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(01219) +- "apr_pollset_add(); check system or user limits"); +- return NULL; +- } +- +- data->r = r; +- b->data = data; +- return b; +-} +- +-/* Create a duplicate CGI bucket using given bucket data */ +-static apr_bucket *cgi_bucket_dup(struct cgi_bucket_data *data, +- apr_bucket_alloc_t *list) +-{ +- apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); +- APR_BUCKET_INIT(b); +- b->free = apr_bucket_free; +- b->list = list; +- b->type = &bucket_type_cgi; +- b->length = (apr_size_t)(-1); +- b->start = -1; +- b->data = data; +- return b; +-} +- +-/* Handle stdout from CGI child. Duplicate of logic from the _read +- * method of the real APR pipe bucket implementation. */ +-static apr_status_t cgi_read_stdout(apr_bucket *a, apr_file_t *out, +- const char **str, apr_size_t *len) +-{ +- char *buf; +- apr_status_t rv; +- +- *str = NULL; +- *len = APR_BUCKET_BUFF_SIZE; +- buf = apr_bucket_alloc(*len, a->list); /* XXX: check for failure? */ +- +- rv = apr_file_read(out, buf, len); +- +- if (rv != APR_SUCCESS && rv != APR_EOF) { +- apr_bucket_free(buf); +- return rv; +- } +- +- if (*len > 0) { +- struct cgi_bucket_data *data = a->data; +- apr_bucket_heap *h; +- +- /* Change the current bucket to refer to what we read */ +- a = apr_bucket_heap_make(a, buf, *len, apr_bucket_free); +- h = a->data; +- h->alloc_len = APR_BUCKET_BUFF_SIZE; /* note the real buffer size */ +- *str = buf; +- APR_BUCKET_INSERT_AFTER(a, cgi_bucket_dup(data, a->list)); +- } +- else { +- apr_bucket_free(buf); +- a = apr_bucket_immortal_make(a, "", 0); +- *str = a->data; +- } +- return rv; +-} +- +-/* Read method of CGI bucket: polls on stderr and stdout of the child, +- * sending any stderr output immediately away to the error log. */ +-static apr_status_t cgi_bucket_read(apr_bucket *b, const char **str, +- apr_size_t *len, apr_read_type_e block) +-{ +- struct cgi_bucket_data *data = b->data; +- apr_interval_time_t timeout; +- apr_status_t rv; +- int gotdata = 0; +- +- timeout = block == APR_NONBLOCK_READ ? 0 : data->r->server->timeout; +- +- do { +- const apr_pollfd_t *results; +- apr_int32_t num; +- +- rv = apr_pollset_poll(data->pollset, timeout, &num, &results); +- if (APR_STATUS_IS_TIMEUP(rv)) { +- if (timeout) { +- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, data->r, APLOGNO(01220) +- "Timeout waiting for output from CGI script %s", +- data->r->filename); +- return rv; +- } +- else { +- return APR_EAGAIN; +- } +- } +- else if (APR_STATUS_IS_EINTR(rv)) { +- continue; +- } +- else if (rv != APR_SUCCESS) { +- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, data->r, APLOGNO(01221) +- "poll failed waiting for CGI child"); +- return rv; +- } +- +- for (; num; num--, results++) { +- if (results[0].client_data == (void *)1) { +- /* stdout */ +- rv = cgi_read_stdout(b, results[0].desc.f, str, len); +- if (APR_STATUS_IS_EOF(rv)) { +- rv = APR_SUCCESS; +- } +- gotdata = 1; +- } else { +- /* stderr */ +- apr_status_t rv2 = log_script_err(data->r, results[0].desc.f); +- if (APR_STATUS_IS_EOF(rv2)) { +- apr_pollset_remove(data->pollset, &results[0]); +- } +- } +- } +- +- } while (!gotdata); +- +- return rv; +-} +- +-static const apr_bucket_type_t bucket_type_cgi = { +- "CGI", 5, APR_BUCKET_DATA, +- apr_bucket_destroy_noop, +- cgi_bucket_read, +- apr_bucket_setaside_notimpl, +- apr_bucket_split_notimpl, +- apr_bucket_copy_notimpl +-}; +- ++#define WANT_CGI_BUCKET + #endif + ++#include "cgi_common.h" ++ + static int cgi_handler(request_rec *r) + { + int nph; +@@ -757,6 +587,8 @@ static int cgi_handler(request_rec *r) + apr_status_t rv; + cgi_exec_info_t e_info; + conn_rec *c; ++ cgi_dirconf *dc = ap_get_module_config(r->per_dir_config, &cgi_module); ++ apr_interval_time_t timeout = dc->timeout > 0 ? dc->timeout : r->server->timeout; + + if (strcmp(r->handler, CGI_MAGIC_TYPE) && strcmp(r->handler, "cgi-script")) { + return DECLINED; +@@ -916,10 +748,7 @@ static int cgi_handler(request_rec *r) + AP_DEBUG_ASSERT(script_in != NULL); + + #if APR_FILES_AS_SOCKETS +- apr_file_pipe_timeout_set(script_in, 0); +- apr_file_pipe_timeout_set(script_err, 0); +- +- b = cgi_bucket_create(r, script_in, script_err, c->bucket_alloc); ++ b = cgi_bucket_create(r, dc->timeout, script_in, script_err, c->bucket_alloc); + if (b == NULL) + return HTTP_INTERNAL_SERVER_ERROR; + #else +@@ -929,111 +758,7 @@ static int cgi_handler(request_rec *r) + b = apr_bucket_eos_create(c->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(bb, b); + +- /* Handle script return... */ +- if (!nph) { +- const char *location; +- char sbuf[MAX_STRING_LEN]; +- int ret; +- +- if ((ret = ap_scan_script_header_err_brigade_ex(r, bb, sbuf, +- APLOG_MODULE_INDEX))) +- { +- ret = log_script(r, conf, ret, dbuf, sbuf, bb, script_err); +- +- /* +- * ret could be HTTP_NOT_MODIFIED in the case that the CGI script +- * does not set an explicit status and ap_meets_conditions, which +- * is called by ap_scan_script_header_err_brigade, detects that +- * the conditions of the requests are met and the response is +- * not modified. +- * In this case set r->status and return OK in order to prevent +- * running through the error processing stack as this would +- * break with mod_cache, if the conditions had been set by +- * mod_cache itself to validate a stale entity. +- * BTW: We circumvent the error processing stack anyway if the +- * CGI script set an explicit status code (whatever it is) and +- * the only possible values for ret here are: +- * +- * HTTP_NOT_MODIFIED (set by ap_meets_conditions) +- * HTTP_PRECONDITION_FAILED (set by ap_meets_conditions) +- * HTTP_INTERNAL_SERVER_ERROR (if something went wrong during the +- * processing of the response of the CGI script, e.g broken headers +- * or a crashed CGI process). +- */ +- if (ret == HTTP_NOT_MODIFIED) { +- r->status = ret; +- return OK; +- } +- +- return ret; +- } +- +- location = apr_table_get(r->headers_out, "Location"); +- +- if (location && r->status == 200) { +- /* For a redirect whether internal or not, discard any +- * remaining stdout from the script, and log any remaining +- * stderr output, as normal. */ +- discard_script_output(bb); +- apr_brigade_destroy(bb); +- apr_file_pipe_timeout_set(script_err, r->server->timeout); +- log_script_err(r, script_err); +- } +- +- if (location && location[0] == '/' && r->status == 200) { +- /* This redirect needs to be a GET no matter what the original +- * method was. +- */ +- r->method = "GET"; +- r->method_number = M_GET; +- +- /* We already read the message body (if any), so don't allow +- * the redirected request to think it has one. We can ignore +- * Transfer-Encoding, since we used REQUEST_CHUNKED_ERROR. +- */ +- apr_table_unset(r->headers_in, "Content-Length"); +- +- ap_internal_redirect_handler(location, r); +- return OK; +- } +- else if (location && r->status == 200) { +- /* XXX: Note that if a script wants to produce its own Redirect +- * body, it now has to explicitly *say* "Status: 302" +- */ +- return HTTP_MOVED_TEMPORARILY; +- } +- +- rv = ap_pass_brigade(r->output_filters, bb); +- } +- else /* nph */ { +- struct ap_filter_t *cur; +- +- /* get rid of all filters up through protocol... since we +- * haven't parsed off the headers, there is no way they can +- * work +- */ +- +- cur = r->proto_output_filters; +- while (cur && cur->frec->ftype < AP_FTYPE_CONNECTION) { +- cur = cur->next; +- } +- r->output_filters = r->proto_output_filters = cur; +- +- rv = ap_pass_brigade(r->output_filters, bb); +- } +- +- /* don't soak up script output if errors occurred writing it +- * out... otherwise, we prolong the life of the script when the +- * connection drops or we stopped sending output for some other +- * reason */ +- if (rv == APR_SUCCESS && !r->connection->aborted) { +- apr_file_pipe_timeout_set(script_err, r->server->timeout); +- log_script_err(r, script_err); +- } +- +- apr_file_close(script_err); +- +- return OK; /* NOT r->status, even if it has changed. */ ++ return cgi_handle_response(r, nph, bb, timeout, conf, dbuf, script_err); + } + + /*============================================================================ +@@ -1268,7 +993,7 @@ static void register_hooks(apr_pool_t *p) + AP_DECLARE_MODULE(cgi) = + { + STANDARD20_MODULE_STUFF, +- NULL, /* dir config creater */ ++ create_cgi_dirconf, /* dir config creater */ + NULL, /* dir merger --- default is to override */ + create_cgi_config, /* server config */ + merge_cgi_config, /* merge server config */ +diff --git a/modules/generators/mod_cgid.c b/modules/generators/mod_cgid.c +index 9f4282c..102d2b3 100644 +--- a/modules/generators/mod_cgid.c ++++ b/modules/generators/mod_cgid.c +@@ -342,15 +342,19 @@ static apr_status_t close_unix_socket(void *thefd) + return close(fd); + } + +-/* deal with incomplete reads and signals +- * assume you really have to read buf_size bytes +- */ +-static apr_status_t sock_read(int fd, void *vbuf, size_t buf_size) ++/* Read from the socket dealing with incomplete messages and signals. ++ * Returns 0 on success or errno on failure. Stderr fd passed as ++ * auxiliary data from other end is written to *errfd, or else stderr ++ * fileno if not present. */ ++static apr_status_t sock_readhdr(int fd, int *errfd, void *vbuf, size_t buf_size) + { +- char *buf = vbuf; + int rc; ++#ifndef HAVE_CGID_FDPASSING ++ char *buf = vbuf; + size_t bytes_read = 0; + ++ if (errfd) *errfd = 0; ++ + do { + do { + rc = read(fd, buf + bytes_read, buf_size - bytes_read); +@@ -365,9 +369,60 @@ static apr_status_t sock_read(int fd, void *vbuf, size_t buf_size) + } + } while (bytes_read < buf_size); + ++ ++#else /* with FD passing */ ++ struct msghdr msg = {0}; ++ struct iovec vec = {vbuf, buf_size}; ++ struct cmsghdr *cmsg; ++ union { /* union to ensure alignment */ ++ struct cmsghdr cm; ++ char buf[CMSG_SPACE(sizeof(int))]; ++ } u; ++ ++ msg.msg_iov = &vec; ++ msg.msg_iovlen = 1; ++ ++ if (errfd) { ++ msg.msg_control = u.buf; ++ msg.msg_controllen = sizeof(u.buf); ++ *errfd = 0; ++ } ++ ++ /* use MSG_WAITALL to skip loop on truncated reads */ ++ do { ++ rc = recvmsg(fd, &msg, MSG_WAITALL); ++ } while (rc < 0 && errno == EINTR); ++ ++ if (rc == 0) { ++ return ECONNRESET; ++ } ++ else if (rc < 0) { ++ return errno; ++ } ++ else if (rc != buf_size) { ++ /* MSG_WAITALL should ensure the recvmsg blocks until the ++ * entire length is read, but let's be paranoid. */ ++ return APR_INCOMPLETE; ++ } ++ ++ if (errfd ++ && (cmsg = CMSG_FIRSTHDR(&msg)) != NULL ++ && cmsg->cmsg_len == CMSG_LEN(sizeof(*errfd)) ++ && cmsg->cmsg_level == SOL_SOCKET ++ && cmsg->cmsg_type == SCM_RIGHTS) { ++ *errfd = *((int *) CMSG_DATA(cmsg)); ++ } ++#endif ++ + return APR_SUCCESS; + } + ++/* As sock_readhdr but without auxiliary fd passing. */ ++static apr_status_t sock_read(int fd, void *vbuf, size_t buf_size) ++{ ++ return sock_readhdr(fd, NULL, vbuf, buf_size); ++} ++ + /* deal with signals + */ + static apr_status_t sock_write(int fd, const void *buf, size_t buf_size) +@@ -384,7 +439,7 @@ static apr_status_t sock_write(int fd, const void *buf, size_t buf_size) + return APR_SUCCESS; + } + +-static apr_status_t sock_writev(int fd, request_rec *r, int count, ...) ++static apr_status_t sock_writev(int fd, int auxfd, request_rec *r, int count, ...) + { + va_list ap; + int rc; +@@ -399,9 +454,39 @@ static apr_status_t sock_writev(int fd, request_rec *r, int count, ...) + } + va_end(ap); + ++#ifndef HAVE_CGID_FDPASSING + do { + rc = writev(fd, vec, count); + } while (rc < 0 && errno == EINTR); ++#else ++ { ++ struct msghdr msg = { 0 }; ++ struct cmsghdr *cmsg; ++ union { /* union for alignment */ ++ char buf[CMSG_SPACE(sizeof(int))]; ++ struct cmsghdr align; ++ } u; ++ ++ msg.msg_iov = vec; ++ msg.msg_iovlen = count; ++ ++ if (auxfd) { ++ msg.msg_control = u.buf; ++ msg.msg_controllen = sizeof(u.buf); ++ ++ cmsg = CMSG_FIRSTHDR(&msg); ++ cmsg->cmsg_level = SOL_SOCKET; ++ cmsg->cmsg_type = SCM_RIGHTS; ++ cmsg->cmsg_len = CMSG_LEN(sizeof(int)); ++ *((int *) CMSG_DATA(cmsg)) = auxfd; ++ } ++ ++ do { ++ rc = sendmsg(fd, &msg, 0); ++ } while (rc < 0 && errno == EINTR); ++ } ++#endif ++ + if (rc < 0) { + return errno; + } +@@ -410,7 +495,7 @@ static apr_status_t sock_writev(int fd, request_rec *r, int count, ...) + } + + static apr_status_t get_req(int fd, request_rec *r, char **argv0, char ***env, +- cgid_req_t *req) ++ int *errfd, cgid_req_t *req) + { + int i; + char **environ; +@@ -421,7 +506,7 @@ static apr_status_t get_req(int fd, request_rec *r, char **argv0, char ***env, + r->server = apr_pcalloc(r->pool, sizeof(server_rec)); + + /* read the request header */ +- stat = sock_read(fd, req, sizeof(*req)); ++ stat = sock_readhdr(fd, errfd, req, sizeof(*req)); + if (stat != APR_SUCCESS) { + return stat; + } +@@ -479,14 +564,15 @@ static apr_status_t get_req(int fd, request_rec *r, char **argv0, char ***env, + return APR_SUCCESS; + } + +-static apr_status_t send_req(int fd, request_rec *r, char *argv0, char **env, +- int req_type) ++static apr_status_t send_req(int fd, apr_file_t *errpipe, request_rec *r, ++ char *argv0, char **env, int req_type) + { + int i; + cgid_req_t req = {0}; + apr_status_t stat; + ap_unix_identity_t * ugid = ap_run_get_suexec_identity(r); + core_dir_config *core_conf = ap_get_core_module_config(r->per_dir_config); ++ int errfd; + + + if (ugid == NULL) { +@@ -507,16 +593,21 @@ static apr_status_t send_req(int fd, request_rec *r, char *argv0, char **env, + req.args_len = r->args ? strlen(r->args) : 0; + req.loglevel = r->server->log.level; + ++ if (errpipe) ++ apr_os_file_get(&errfd, errpipe); ++ else ++ errfd = 0; ++ + /* Write the request header */ + if (req.args_len) { +- stat = sock_writev(fd, r, 5, ++ stat = sock_writev(fd, errfd, r, 5, + &req, sizeof(req), + r->filename, req.filename_len, + argv0, req.argv0_len, + r->uri, req.uri_len, + r->args, req.args_len); + } else { +- stat = sock_writev(fd, r, 4, ++ stat = sock_writev(fd, errfd, r, 4, + &req, sizeof(req), + r->filename, req.filename_len, + argv0, req.argv0_len, +@@ -531,7 +622,7 @@ static apr_status_t send_req(int fd, request_rec *r, char *argv0, char **env, + for (i = 0; i < req.env_count; i++) { + apr_size_t curlen = strlen(env[i]); + +- if ((stat = sock_writev(fd, r, 2, &curlen, sizeof(curlen), ++ if ((stat = sock_writev(fd, 0, r, 2, &curlen, sizeof(curlen), + env[i], curlen)) != APR_SUCCESS) { + return stat; + } +@@ -582,20 +673,34 @@ static void daemon_signal_handler(int sig) + } + } + ++/* Callback executed in the forked child process if exec of the CGI ++ * script fails. For the fd-passing case, output to stderr goes to ++ * the client (request handling thread) and is logged via ++ * ap_log_rerror there. For the non-fd-passing case, the "fake" ++ * request_rec passed via userdata is used to log. */ + static void cgid_child_errfn(apr_pool_t *pool, apr_status_t err, + const char *description) + { +- request_rec *r; + void *vr; + + apr_pool_userdata_get(&vr, ERRFN_USERDATA_KEY, pool); +- r = vr; +- +- /* sure we got r, but don't call ap_log_rerror() because we don't +- * have r->headers_in and possibly other storage referenced by +- * ap_log_rerror() +- */ +- ap_log_error(APLOG_MARK, APLOG_ERR, err, r->server, APLOGNO(01241) "%s", description); ++ if (vr) { ++ request_rec *r = vr; ++ ++ /* sure we got r, but don't call ap_log_rerror() because we don't ++ * have r->headers_in and possibly other storage referenced by ++ * ap_log_rerror() ++ */ ++ ap_log_error(APLOG_MARK, APLOG_ERR, err, r->server, APLOGNO(01241) "%s", description); ++ } ++ else { ++ const char *logstr; ++ ++ logstr = apr_psprintf(pool, APLOGNO(01241) "error spawning CGI child: %s (%pm)\n", ++ description, &err); ++ fputs(logstr, stderr); ++ fflush(stderr); ++ } + } + + static int cgid_server(void *data) +@@ -669,7 +774,7 @@ static int cgid_server(void *data) + } + + while (!daemon_should_exit) { +- int errfileno = STDERR_FILENO; ++ int errfileno; + char *argv0 = NULL; + char **env = NULL; + const char * const *argv; +@@ -709,7 +814,7 @@ static int cgid_server(void *data) + r = apr_pcalloc(ptrans, sizeof(request_rec)); + procnew = apr_pcalloc(ptrans, sizeof(*procnew)); + r->pool = ptrans; +- stat = get_req(sd2, r, &argv0, &env, &cgid_req); ++ stat = get_req(sd2, r, &argv0, &env, &errfileno, &cgid_req); + if (stat != APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_ERR, stat, + main_server, APLOGNO(01248) +@@ -741,6 +846,16 @@ static int cgid_server(void *data) + continue; + } + ++ if (errfileno == 0) { ++ errfileno = STDERR_FILENO; ++ } ++ else { ++ ap_log_error(APLOG_MARK, APLOG_DEBUG, rv, main_server, ++ "using passed fd %d as stderr", errfileno); ++ /* Limit the received fd lifetime to pool lifetime */ ++ apr_pool_cleanup_register(ptrans, (void *)((long)errfileno), ++ close_unix_socket, close_unix_socket); ++ } + apr_os_file_put(&r->server->error_log, &errfileno, 0, r->pool); + apr_os_file_put(&inout, &sd2, 0, r->pool); + +@@ -800,7 +915,10 @@ static int cgid_server(void *data) + close(sd2); + } + else { +- apr_pool_userdata_set(r, ERRFN_USERDATA_KEY, apr_pool_cleanup_null, ptrans); ++ if (errfileno == STDERR_FILENO) { ++ /* Used by cgid_child_errfn without fd-passing. */ ++ apr_pool_userdata_set(r, ERRFN_USERDATA_KEY, apr_pool_cleanup_null, ptrans); ++ } + + argv = (const char * const *)create_argv(r->pool, NULL, NULL, NULL, argv0, r->args); + +@@ -1099,6 +1217,33 @@ static int log_scripterror(request_rec *r, cgid_server_conf * conf, int ret, + return ret; + } + ++/* Soak up stderr from a script and redirect it to the error log. ++ * TODO: log_scripterror() and this could move to cgi_common.h. */ ++static apr_status_t log_script_err(request_rec *r, apr_file_t *script_err) ++{ ++ char argsbuffer[HUGE_STRING_LEN]; ++ char *newline; ++ apr_status_t rv; ++ cgid_server_conf *conf = ap_get_module_config(r->server->module_config, &cgid_module); ++ ++ while ((rv = apr_file_gets(argsbuffer, HUGE_STRING_LEN, ++ script_err)) == APR_SUCCESS) { ++ ++ newline = strchr(argsbuffer, '\n'); ++ if (newline) { ++ char *prev = newline - 1; ++ if (prev >= argsbuffer && *prev == '\r') { ++ newline = prev; ++ } ++ ++ *newline = '\0'; ++ } ++ log_scripterror(r, conf, r->status, 0, argsbuffer); ++ } ++ ++ return rv; ++} ++ + static int log_script(request_rec *r, cgid_server_conf * conf, int ret, + char *dbuf, const char *sbuf, apr_bucket_brigade *bb, + apr_file_t *script_err) +@@ -1204,6 +1349,13 @@ static int log_script(request_rec *r, cgid_server_conf * conf, int ret, + return ret; + } + ++/* Pull in CGI bucket implementation. */ ++#define cgi_server_conf cgid_server_conf ++#ifdef HAVE_CGID_FDPASSING ++#define WANT_CGI_BUCKET ++#endif ++#include "cgi_common.h" ++ + static int connect_to_daemon(int *sdptr, request_rec *r, + cgid_server_conf *conf) + { +@@ -1270,23 +1422,6 @@ static int connect_to_daemon(int *sdptr, request_rec *r, + return OK; + } + +-static void discard_script_output(apr_bucket_brigade *bb) +-{ +- apr_bucket *e; +- const char *buf; +- apr_size_t len; +- +- for (e = APR_BRIGADE_FIRST(bb); +- e != APR_BRIGADE_SENTINEL(bb) && !APR_BUCKET_IS_EOS(e); +- e = APR_BRIGADE_FIRST(bb)) +- { +- if (apr_bucket_read(e, &buf, &len, APR_BLOCK_READ)) { +- break; +- } +- apr_bucket_delete(e); +- } +-} +- + /**************************************************************** + * + * Actual cgid handling... +@@ -1391,6 +1526,7 @@ static apr_status_t cleanup_script(void *vptr) + + static int cgid_handler(request_rec *r) + { ++ conn_rec *c = r->connection; + int retval, nph, dbpos; + char *argv0, *dbuf; + apr_bucket_brigade *bb; +@@ -1400,10 +1536,11 @@ static int cgid_handler(request_rec *r) + int seen_eos, child_stopped_reading; + int sd; + char **env; +- apr_file_t *tempsock; ++ apr_file_t *tempsock, *script_err, *errpipe_out; + struct cleanup_script_info *info; + apr_status_t rv; + cgid_dirconf *dc; ++ apr_interval_time_t timeout; + + if (strcmp(r->handler, CGI_MAGIC_TYPE) && strcmp(r->handler, "cgi-script")) { + return DECLINED; +@@ -1412,7 +1549,7 @@ static int cgid_handler(request_rec *r) + conf = ap_get_module_config(r->server->module_config, &cgid_module); + dc = ap_get_module_config(r->per_dir_config, &cgid_module); + +- ++ timeout = dc->timeout > 0 ? dc->timeout : r->server->timeout; + is_included = !strcmp(r->protocol, "INCLUDED"); + + if ((argv0 = strrchr(r->filename, '/')) != NULL) { +@@ -1465,6 +1602,17 @@ static int cgid_handler(request_rec *r) + } + */ + ++#ifdef HAVE_CGID_FDPASSING ++ rv = apr_file_pipe_create(&script_err, &errpipe_out, r->pool); ++ if (rv) { ++ return log_scripterror(r, conf, HTTP_SERVICE_UNAVAILABLE, rv, APLOGNO(10176) ++ "could not create pipe for stderr"); ++ } ++#else ++ script_err = NULL; ++ errpipe_out = NULL; ++#endif ++ + /* + * httpd core function used to add common environment variables like + * DOCUMENT_ROOT. +@@ -1477,12 +1625,16 @@ static int cgid_handler(request_rec *r) + return retval; + } + +- rv = send_req(sd, r, argv0, env, CGI_REQ); ++ rv = send_req(sd, errpipe_out, r, argv0, env, CGI_REQ); + if (rv != APR_SUCCESS) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(01268) + "write to cgi daemon process"); + } + ++ /* The write-end of the pipe is only used by the server, so close ++ * it here. */ ++ if (errpipe_out) apr_file_close(errpipe_out); ++ + info = apr_palloc(r->pool, sizeof(struct cleanup_script_info)); + info->conf = conf; + info->r = r; +@@ -1504,12 +1656,7 @@ static int cgid_handler(request_rec *r) + */ + + apr_os_pipe_put_ex(&tempsock, &sd, 1, r->pool); +- if (dc->timeout > 0) { +- apr_file_pipe_timeout_set(tempsock, dc->timeout); +- } +- else { +- apr_file_pipe_timeout_set(tempsock, r->server->timeout); +- } ++ apr_file_pipe_timeout_set(tempsock, timeout); + apr_pool_cleanup_kill(r->pool, (void *)((long)sd), close_unix_socket); + + /* Transfer any put/post args, CERN style... +@@ -1601,114 +1748,19 @@ static int cgid_handler(request_rec *r) + */ + shutdown(sd, 1); + +- /* Handle script return... */ +- if (!nph) { +- conn_rec *c = r->connection; +- const char *location; +- char sbuf[MAX_STRING_LEN]; +- int ret; +- +- bb = apr_brigade_create(r->pool, c->bucket_alloc); +- b = apr_bucket_pipe_create(tempsock, c->bucket_alloc); +- APR_BRIGADE_INSERT_TAIL(bb, b); +- b = apr_bucket_eos_create(c->bucket_alloc); +- APR_BRIGADE_INSERT_TAIL(bb, b); +- +- if ((ret = ap_scan_script_header_err_brigade_ex(r, bb, sbuf, +- APLOG_MODULE_INDEX))) +- { +- ret = log_script(r, conf, ret, dbuf, sbuf, bb, NULL); +- +- /* +- * ret could be HTTP_NOT_MODIFIED in the case that the CGI script +- * does not set an explicit status and ap_meets_conditions, which +- * is called by ap_scan_script_header_err_brigade, detects that +- * the conditions of the requests are met and the response is +- * not modified. +- * In this case set r->status and return OK in order to prevent +- * running through the error processing stack as this would +- * break with mod_cache, if the conditions had been set by +- * mod_cache itself to validate a stale entity. +- * BTW: We circumvent the error processing stack anyway if the +- * CGI script set an explicit status code (whatever it is) and +- * the only possible values for ret here are: +- * +- * HTTP_NOT_MODIFIED (set by ap_meets_conditions) +- * HTTP_PRECONDITION_FAILED (set by ap_meets_conditions) +- * HTTP_INTERNAL_SERVER_ERROR (if something went wrong during the +- * processing of the response of the CGI script, e.g broken headers +- * or a crashed CGI process). +- */ +- if (ret == HTTP_NOT_MODIFIED) { +- r->status = ret; +- return OK; +- } +- +- return ret; +- } +- +- location = apr_table_get(r->headers_out, "Location"); +- +- if (location && location[0] == '/' && r->status == 200) { +- +- /* Soak up all the script output */ +- discard_script_output(bb); +- apr_brigade_destroy(bb); +- /* This redirect needs to be a GET no matter what the original +- * method was. +- */ +- r->method = "GET"; +- r->method_number = M_GET; +- +- /* We already read the message body (if any), so don't allow +- * the redirected request to think it has one. We can ignore +- * Transfer-Encoding, since we used REQUEST_CHUNKED_ERROR. +- */ +- apr_table_unset(r->headers_in, "Content-Length"); +- +- ap_internal_redirect_handler(location, r); +- return OK; +- } +- else if (location && r->status == 200) { +- /* XXX: Note that if a script wants to produce its own Redirect +- * body, it now has to explicitly *say* "Status: 302" +- */ +- discard_script_output(bb); +- apr_brigade_destroy(bb); +- return HTTP_MOVED_TEMPORARILY; +- } +- +- rv = ap_pass_brigade(r->output_filters, bb); +- if (rv != APR_SUCCESS) { +- ap_log_rerror(APLOG_MARK, APLOG_TRACE1, rv, r, +- "Failed to flush CGI output to client"); +- } +- } +- +- if (nph) { +- conn_rec *c = r->connection; +- struct ap_filter_t *cur; +- +- /* get rid of all filters up through protocol... since we +- * haven't parsed off the headers, there is no way they can +- * work +- */ +- +- cur = r->proto_output_filters; +- while (cur && cur->frec->ftype < AP_FTYPE_CONNECTION) { +- cur = cur->next; +- } +- r->output_filters = r->proto_output_filters = cur; +- +- bb = apr_brigade_create(r->pool, c->bucket_alloc); +- b = apr_bucket_pipe_create(tempsock, c->bucket_alloc); +- APR_BRIGADE_INSERT_TAIL(bb, b); +- b = apr_bucket_eos_create(c->bucket_alloc); +- APR_BRIGADE_INSERT_TAIL(bb, b); +- ap_pass_brigade(r->output_filters, bb); +- } ++ bb = apr_brigade_create(r->pool, c->bucket_alloc); ++#ifdef HAVE_CGID_FDPASSING ++ b = cgi_bucket_create(r, dc->timeout, tempsock, script_err, c->bucket_alloc); ++ if (b == NULL) ++ return HTTP_INTERNAL_SERVER_ERROR; /* should call log_scripterror() w/ _UNAVAILABLE? */ ++#else ++ b = apr_bucket_pipe_create(tempsock, c->bucket_alloc); ++#endif ++ APR_BRIGADE_INSERT_TAIL(bb, b); ++ b = apr_bucket_eos_create(c->bucket_alloc); ++ APR_BRIGADE_INSERT_TAIL(bb, b); + +- return OK; /* NOT r->status, even if it has changed. */ ++ return cgi_handle_response(r, nph, bb, timeout, conf, dbuf, script_err); + } + + +@@ -1825,7 +1877,7 @@ static int include_cmd(include_ctx_t *ctx, ap_filter_t *f, + return retval; + } + +- send_req(sd, r, command, env, SSI_REQ); ++ send_req(sd, NULL, r, command, env, SSI_REQ); + + info = apr_palloc(r->pool, sizeof(struct cleanup_script_info)); + info->conf = conf; diff --git a/httpd-2.4.43-r1842929+.patch b/httpd-2.4.43-r1842929+.patch new file mode 100644 index 0000000..b926195 --- /dev/null +++ b/httpd-2.4.43-r1842929+.patch @@ -0,0 +1,228 @@ +diff --git a/Makefile.in b/Makefile.in +index 06b8c5a..9eeb5c7 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -213,6 +213,7 @@ install-cgi: + install-other: + @test -d $(DESTDIR)$(logfiledir) || $(MKINSTALLDIRS) $(DESTDIR)$(logfiledir) + @test -d $(DESTDIR)$(runtimedir) || $(MKINSTALLDIRS) $(DESTDIR)$(runtimedir) ++ @test -d $(DESTDIR)$(statedir) || $(MKINSTALLDIRS) $(DESTDIR)$(statedir) + @for ext in dll x; do \ + file=apachecore.$$ext; \ + if test -f $$file; then \ +diff --git a/acinclude.m4 b/acinclude.m4 +index 95232f5..5d9d669 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -45,6 +45,7 @@ AC_DEFUN([APACHE_GEN_CONFIG_VARS],[ + APACHE_SUBST(installbuilddir) + APACHE_SUBST(runtimedir) + APACHE_SUBST(proxycachedir) ++ APACHE_SUBST(statedir) + APACHE_SUBST(other_targets) + APACHE_SUBST(progname) + APACHE_SUBST(prefix) +@@ -688,6 +689,7 @@ AC_DEFUN([APACHE_EXPORT_ARGUMENTS],[ + APACHE_SUBST_EXPANDED_ARG(runtimedir) + APACHE_SUBST_EXPANDED_ARG(logfiledir) + APACHE_SUBST_EXPANDED_ARG(proxycachedir) ++ APACHE_SUBST_EXPANDED_ARG(statedir) + ]) + + dnl +diff --git a/configure.in b/configure.in +index a63eada..c8f9aa2 100644 +--- a/configure.in ++++ b/configure.in +@@ -41,7 +41,7 @@ dnl Something seems broken here. + AC_PREFIX_DEFAULT(/usr/local/apache2) + + dnl Get the layout here, so we can pass the required variables to apr +-APR_ENABLE_LAYOUT(Apache, [errordir iconsdir htdocsdir cgidir]) ++APR_ENABLE_LAYOUT(Apache, [errordir iconsdir htdocsdir cgidir statedir]) + + dnl reparse the configure arguments. + APR_PARSE_ARGUMENTS +diff --git a/include/ap_config_layout.h.in b/include/ap_config_layout.h.in +index 2b4a70c..e076f41 100644 +--- a/include/ap_config_layout.h.in ++++ b/include/ap_config_layout.h.in +@@ -60,5 +60,7 @@ + #define DEFAULT_REL_LOGFILEDIR "@rel_logfiledir@" + #define DEFAULT_EXP_PROXYCACHEDIR "@exp_proxycachedir@" + #define DEFAULT_REL_PROXYCACHEDIR "@rel_proxycachedir@" ++#define DEFAULT_EXP_STATEDIR "@exp_statedir@" ++#define DEFAULT_REL_STATEDIR "@rel_statedir@" + + #endif /* AP_CONFIG_LAYOUT_H */ +diff --git a/include/http_config.h b/include/http_config.h +index f9c2d77..c229bc9 100644 +--- a/include/http_config.h ++++ b/include/http_config.h +@@ -757,6 +757,14 @@ AP_DECLARE(char *) ap_server_root_relative(apr_pool_t *p, const char *fname); + */ + AP_DECLARE(char *) ap_runtime_dir_relative(apr_pool_t *p, const char *fname); + ++/** ++ * Compute the name of a persistent state file (e.g. a database or ++ * long-lived cache) relative to the appropriate state directory. ++ * Absolute paths are returned as-is. The state directory is ++ * configured via the DefaultStateDir directive or at build time. ++ */ ++AP_DECLARE(char *) ap_state_dir_relative(apr_pool_t *p, const char *fname); ++ + /* Finally, the hook for dynamically loading modules in... */ + + /** +diff --git a/modules/dav/fs/mod_dav_fs.c b/modules/dav/fs/mod_dav_fs.c +index addfd7e..2389f8f 100644 +--- a/modules/dav/fs/mod_dav_fs.c ++++ b/modules/dav/fs/mod_dav_fs.c +@@ -29,6 +29,10 @@ typedef struct { + + extern module AP_MODULE_DECLARE_DATA dav_fs_module; + ++#ifndef DEFAULT_DAV_LOCKDB ++#define DEFAULT_DAV_LOCKDB "davlockdb" ++#endif ++ + const char *dav_get_lockdb_path(const request_rec *r) + { + dav_fs_server_conf *conf; +@@ -57,6 +61,24 @@ static void *dav_fs_merge_server_config(apr_pool_t *p, + return newconf; + } + ++static apr_status_t dav_fs_post_config(apr_pool_t *p, apr_pool_t *plog, ++ apr_pool_t *ptemp, server_rec *base_server) ++{ ++ server_rec *s; ++ ++ for (s = base_server; s; s = s->next) { ++ dav_fs_server_conf *conf; ++ ++ conf = ap_get_module_config(s->module_config, &dav_fs_module); ++ ++ if (!conf->lockdb_path) { ++ conf->lockdb_path = ap_state_dir_relative(p, DEFAULT_DAV_LOCKDB); ++ } ++ } ++ ++ return OK; ++} ++ + /* + * Command handler for the DAVLockDB directive, which is TAKE1 + */ +@@ -87,6 +109,8 @@ static const command_rec dav_fs_cmds[] = + + static void register_hooks(apr_pool_t *p) + { ++ ap_hook_post_config(dav_fs_post_config, NULL, NULL, APR_HOOK_MIDDLE); ++ + dav_hook_gather_propsets(dav_fs_gather_propsets, NULL, NULL, + APR_HOOK_MIDDLE); + dav_hook_find_liveprop(dav_fs_find_liveprop, NULL, NULL, APR_HOOK_MIDDLE); +diff --git a/server/core.c b/server/core.c +index 3db9d61..79b2a82 100644 +--- a/server/core.c ++++ b/server/core.c +@@ -129,6 +129,8 @@ AP_DECLARE_DATA int ap_main_state = AP_SQ_MS_INITIAL_STARTUP; + AP_DECLARE_DATA int ap_run_mode = AP_SQ_RM_UNKNOWN; + AP_DECLARE_DATA int ap_config_generation = 0; + ++static const char *core_state_dir; ++ + static void *create_core_dir_config(apr_pool_t *a, char *dir) + { + core_dir_config *conf; +@@ -1409,12 +1411,15 @@ AP_DECLARE(const char *) ap_resolve_env(apr_pool_t *p, const char * word) + return res_buf; + } + +-static int reset_config_defines(void *dummy) ++/* pconf cleanup - clear global variables set from config here. */ ++static apr_status_t reset_config(void *dummy) + { + ap_server_config_defines = saved_server_config_defines; + saved_server_config_defines = NULL; + server_config_defined_vars = NULL; +- return OK; ++ core_state_dir = NULL; ++ ++ return APR_SUCCESS; + } + + /* +@@ -3120,6 +3125,24 @@ static const char *set_runtime_dir(cmd_parms *cmd, void *dummy, const char *arg) + return NULL; + } + ++static const char *set_state_dir(cmd_parms *cmd, void *dummy, const char *arg) ++{ ++ const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY); ++ ++ if (err != NULL) { ++ return err; ++ } ++ ++ if ((apr_filepath_merge((char**)&core_state_dir, NULL, ++ ap_server_root_relative(cmd->temp_pool, arg), ++ APR_FILEPATH_TRUENAME, cmd->pool) != APR_SUCCESS) ++ || !ap_is_directory(cmd->temp_pool, core_state_dir)) { ++ return "DefaultStateDir must be a valid directory, absolute or relative to ServerRoot"; ++ } ++ ++ return NULL; ++} ++ + static const char *set_timeout(cmd_parms *cmd, void *dummy, const char *arg) + { + const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_CONTEXT); +@@ -4414,6 +4437,8 @@ AP_INIT_TAKE1("ServerRoot", set_server_root, NULL, RSRC_CONF | EXEC_ON_READ, + "Common directory of server-related files (logs, confs, etc.)"), + AP_INIT_TAKE1("DefaultRuntimeDir", set_runtime_dir, NULL, RSRC_CONF | EXEC_ON_READ, + "Common directory for run-time files (shared memory, locks, etc.)"), ++AP_INIT_TAKE1("DefaultStateDir", set_state_dir, NULL, RSRC_CONF | EXEC_ON_READ, ++ "Common directory for persistent state (databases, long-lived caches, etc.)"), + AP_INIT_TAKE1("ErrorLog", set_server_string_slot, + (void *)APR_OFFSETOF(server_rec, error_fname), RSRC_CONF, + "The filename of the error log"), +@@ -4941,8 +4966,7 @@ static int core_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptem + + if (!saved_server_config_defines) + init_config_defines(pconf); +- apr_pool_cleanup_register(pconf, NULL, reset_config_defines, +- apr_pool_cleanup_null); ++ apr_pool_cleanup_register(pconf, NULL, reset_config, apr_pool_cleanup_null); + + ap_regcomp_set_default_cflags(AP_REG_DEFAULT); + +@@ -5170,6 +5194,27 @@ AP_DECLARE(int) ap_state_query(int query) + } + } + ++AP_DECLARE(char *) ap_state_dir_relative(apr_pool_t *p, const char *file) ++{ ++ char *newpath = NULL; ++ apr_status_t rv; ++ const char *state_dir; ++ ++ state_dir = core_state_dir ++ ? core_state_dir ++ : ap_server_root_relative(p, DEFAULT_REL_STATEDIR); ++ ++ rv = apr_filepath_merge(&newpath, state_dir, file, APR_FILEPATH_TRUENAME, p); ++ if (newpath && (rv == APR_SUCCESS || APR_STATUS_IS_EPATHWILD(rv) ++ || APR_STATUS_IS_ENOENT(rv) ++ || APR_STATUS_IS_ENOTDIR(rv))) { ++ return newpath; ++ } ++ else { ++ return NULL; ++ } ++} ++ + static apr_random_t *rng = NULL; + #if APR_HAS_THREADS + static apr_thread_mutex_t *rng_mutex = NULL; diff --git a/httpd-2.4.43-r1861269.patch b/httpd-2.4.43-r1861269.patch new file mode 100644 index 0000000..9bff242 --- /dev/null +++ b/httpd-2.4.43-r1861269.patch @@ -0,0 +1,20 @@ +diff --git a/modules/ssl/ssl_engine_config.c b/modules/ssl/ssl_engine_config.c +index b53f3f8..979489c 100644 +--- a/modules/ssl/ssl_engine_config.c ++++ b/modules/ssl/ssl_engine_config.c +@@ -812,8 +812,14 @@ const char *ssl_cmd_SSLCipherSuite(cmd_parms *cmd, + static const char *ssl_cmd_check_file(cmd_parms *parms, + const char **file) + { +- const char *filepath = ap_server_root_relative(parms->pool, *file); ++ const char *filepath; + ++ /* If only dumping the config, don't verify the paths */ ++ if (ap_state_query(AP_SQ_RUN_MODE) == AP_SQ_RM_CONFIG_DUMP) { ++ return NULL; ++ } ++ ++ filepath = ap_server_root_relative(parms->pool, *file); + if (!filepath) { + return apr_pstrcat(parms->pool, parms->cmd->name, + ": Invalid file path ", *file, NULL); diff --git a/httpd-2.4.43-r1861793+.patch b/httpd-2.4.43-r1861793+.patch new file mode 100644 index 0000000..08e96cb --- /dev/null +++ b/httpd-2.4.43-r1861793+.patch @@ -0,0 +1,271 @@ +diff --git a/configure.in b/configure.in +index cb43246..0bb6b0d 100644 +--- httpd-2.4.43/configure.in.r1861793+ ++++ httpd-2.4.43/configure.in +@@ -465,6 +465,28 @@ + AC_SEARCH_LIBS(crypt, crypt) + CRYPT_LIBS="$LIBS" + APACHE_SUBST(CRYPT_LIBS) ++ ++if test "$ac_cv_search_crypt" != "no"; then ++ # Test crypt() with the SHA-512 test vector from https://akkadia.org/drepper/SHA-crypt.txt ++ AC_CACHE_CHECK([whether crypt() supports SHA-2], [ap_cv_crypt_sha2], [ ++ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ ++#include ++#include ++#include ++ ++#define PASSWD_0 "Hello world!" ++#define SALT_0 "\$6\$saltstring" ++#define EXPECT_0 "\$6\$saltstring\$svn8UoSVapNtMuq1ukKS4tPQd8iKwSMHWjl/O817G3uBnIFNjnQJu" \ ++ "esI68u4OTLiBFdcbYEdFCoEOfaS35inz1" ++]], [char *result = crypt(PASSWD_0, SALT_0); ++ if (!result) return 1; ++ if (strcmp(result, EXPECT_0)) return 2; ++])], [ap_cv_crypt_sha2=yes], [ap_cv_crypt_sha2=no])]) ++ if test "$ap_cv_crypt_sha2" = yes; then ++ AC_DEFINE([HAVE_CRYPT_SHA2], 1, [Define if crypt() supports SHA-2 hashes]) ++ fi ++fi ++ + LIBS="$saved_LIBS" + + dnl See Comment #Spoon +--- httpd-2.4.43/docs/man/htpasswd.1.r1861793+ ++++ httpd-2.4.43/docs/man/htpasswd.1 +@@ -27,16 +27,16 @@ + .SH "SYNOPSIS" + + .PP +-\fB\fBhtpasswd\fR [ -\fBc\fR ] [ -\fBi\fR ] [ -\fBm\fR | -\fBB\fR | -\fBd\fR | -\fBs\fR | -\fBp\fR ] [ -\fBC\fR \fIcost\fR ] [ -\fBD\fR ] [ -\fBv\fR ] \fIpasswdfile\fR \fIusername\fR\fR ++\fB\fBhtpasswd\fR [ -\fBc\fR ] [ -\fBi\fR ] [ -\fBm\fR | -\fBB\fR | -\fB2\fR | -\fB5\fR | -\fBd\fR | -\fBs\fR | -\fBp\fR ] [ -\fBr\fR \fIrounds\fR ] [ -\fBC\fR \fIcost\fR ] [ -\fBD\fR ] [ -\fBv\fR ] \fIpasswdfile\fR \fIusername\fR\fR + + .PP +-\fB\fBhtpasswd\fR -\fBb\fR [ -\fBc\fR ] [ -\fBm\fR | -\fBB\fR | -\fBd\fR | -\fBs\fR | -\fBp\fR ] [ -\fBC\fR \fIcost\fR ] [ -\fBD\fR ] [ -\fBv\fR ] \fIpasswdfile\fR \fIusername\fR \fIpassword\fR\fR ++\fB\fBhtpasswd\fR -\fBb\fR [ -\fBc\fR ] [ -\fBm\fR | -\fBB\fR | -\fB2\fR | -\fB5\fR | -\fBd\fR | -\fBs\fR | -\fBp\fR ] [ -\fBr\fR \fIrounds\fR ] [ -\fBC\fR \fIcost\fR ] [ -\fBD\fR ] [ -\fBv\fR ] \fIpasswdfile\fR \fIusername\fR \fIpassword\fR\fR + + .PP +-\fB\fBhtpasswd\fR -\fBn\fR [ -\fBi\fR ] [ -\fBm\fR | -\fBB\fR | -\fBd\fR | -\fBs\fR | -\fBp\fR ] [ -\fBC\fR \fIcost\fR ] \fIusername\fR\fR ++\fB\fBhtpasswd\fR -\fBn\fR [ -\fBi\fR ] [ -\fBm\fR | -\fBB\fR | -\fB2\fR | -\fB5\fR | -\fBd\fR | -\fBs\fR | -\fBp\fR ] [ -\fBr\fR \fIrounds\fR ] [ -\fBC\fR \fIcost\fR ] \fIusername\fR\fR + + .PP +-\fB\fBhtpasswd\fR -\fBnb\fR [ -\fBm\fR | -\fBB\fR | -\fBd\fR | -\fBs\fR | -\fBp\fR ] [ -\fBC\fR \fIcost\fR ] \fIusername\fR \fIpassword\fR\fR ++\fB\fBhtpasswd\fR -\fBnb\fR [ -\fBm\fR | -\fBB\fR | -\fB2\fR | -\fB5\fR | -\fBd\fR | -\fBs\fR | -\fBp\fR ] [ -\fBr\fR \fIrounds\fR ] [ -\fBC\fR \fIcost\fR ] \fIusername\fR \fIpassword\fR\fR + + + .SH "SUMMARY" +@@ -48,7 +48,7 @@ + Resources available from the Apache HTTP server can be restricted to just the users listed in the files created by \fBhtpasswd\fR\&. This program can only manage usernames and passwords stored in a flat-file\&. It can encrypt and display password information for use in other types of data stores, though\&. To use a DBM database see dbmmanage or htdbm\&. + + .PP +-\fBhtpasswd\fR encrypts passwords using either bcrypt, a version of MD5 modified for Apache, SHA1, or the system's \fBcrypt()\fR routine\&. Files managed by \fBhtpasswd\fR may contain a mixture of different encoding types of passwords; some user records may have bcrypt or MD5-encrypted passwords while others in the same file may have passwords encrypted with \fBcrypt()\fR\&. ++\fBhtpasswd\fR encrypts passwords using either bcrypt, a version of MD5 modified for Apache, SHA-1, or the system's \fBcrypt()\fR routine\&. SHA-2-based hashes (SHA-256 and SHA-512) are supported for \fBcrypt()\fR\&. Files managed by \fBhtpasswd\fR may contain a mixture of different encoding types of passwords; some user records may have bcrypt or MD5-encrypted passwords while others in the same file may have passwords encrypted with \fBcrypt()\fR\&. + + .PP + This manual page only lists the command line arguments\&. For details of the directives necessary to configure user authentication in httpd see the Apache manual, which is part of the Apache distribution or can be found at http://httpd\&.apache\&.org/\&. +@@ -73,17 +73,26 @@ + \fB-m\fR + Use MD5 encryption for passwords\&. This is the default (since version 2\&.2\&.18)\&. + .TP ++\fB-2\fR ++Use SHA-256 \fBcrypt()\fR based hashes for passwords\&. This is supported on most Unix platforms\&. ++.TP ++\fB-5\fR ++Use SHA-512 \fBcrypt()\fR based hashes for passwords\&. This is supported on most Unix platforms\&. ++.TP + \fB-B\fR + Use bcrypt encryption for passwords\&. This is currently considered to be very secure\&. + .TP + \fB-C\fR + This flag is only allowed in combination with \fB-B\fR (bcrypt encryption)\&. It sets the computing time used for the bcrypt algorithm (higher is more secure but slower, default: 5, valid: 4 to 17)\&. + .TP ++\fB-r\fR ++This flag is only allowed in combination with \fB-2\fR or \fB-5\fR\&. It sets the number of hash rounds used for the SHA-2 algorithms (higher is more secure but slower; the default is 5,000)\&. ++.TP + \fB-d\fR + Use \fBcrypt()\fR encryption for passwords\&. This is not supported by the httpd server on Windows and Netware\&. This algorithm limits the password length to 8 characters\&. This algorithm is \fBinsecure\fR by today's standards\&. It used to be the default algorithm until version 2\&.2\&.17\&. + .TP + \fB-s\fR +-Use SHA encryption for passwords\&. Facilitates migration from/to Netscape servers using the LDAP Directory Interchange Format (ldif)\&. This algorithm is \fBinsecure\fR by today's standards\&. ++Use SHA-1 (160-bit) encryption for passwords\&. Facilitates migration from/to Netscape servers using the LDAP Directory Interchange Format (ldif)\&. This algorithm is \fBinsecure\fR by today's standards\&. + .TP + \fB-p\fR + Use plaintext passwords\&. Though \fBhtpasswd\fR will support creation on all platforms, the httpd daemon will only accept plain text passwords on Windows and Netware\&. +@@ -152,10 +161,13 @@ + When using the \fBcrypt()\fR algorithm, note that only the first 8 characters of the password are used to form the password\&. If the supplied password is longer, the extra characters will be silently discarded\&. + + .PP +-The SHA encryption format does not use salting: for a given password, there is only one encrypted representation\&. The \fBcrypt()\fR and MD5 formats permute the representation by prepending a random salt string, to make dictionary attacks against the passwords more difficult\&. ++The SHA-1 encryption format does not use salting: for a given password, there is only one encrypted representation\&. The \fBcrypt()\fR and MD5 formats permute the representation by prepending a random salt string, to make dictionary attacks against the passwords more difficult\&. ++ ++.PP ++The SHA-1 and \fBcrypt()\fR formats are insecure by today's standards\&. + + .PP +-The SHA and \fBcrypt()\fR formats are insecure by today's standards\&. ++The SHA-2-based \fBcrypt()\fR formats (SHA-256 and SHA-512) are supported on most modern Unix systems, and follow the specification at https://www\&.akkadia\&.org/drepper/SHA-crypt\&.txt\&. + + .SH "RESTRICTIONS" + +--- httpd-2.4.43/support/htpasswd.c.r1861793+ ++++ httpd-2.4.43/support/htpasswd.c +@@ -109,17 +109,21 @@ + "for it." NL + " -i Read password from stdin without verification (for script usage)." NL + " -m Force MD5 encryption of the password (default)." NL +- " -B Force bcrypt encryption of the password (very secure)." NL ++ " -2 Force SHA-256 crypt() hash of the password (very secure)." NL ++ " -5 Force SHA-512 crypt() hash of the password (very secure)." NL ++ " -B Force bcrypt encryption of the password (very secure)." NL + " -C Set the computing time used for the bcrypt algorithm" NL + " (higher is more secure but slower, default: %d, valid: 4 to 17)." NL ++ " -r Set the number of rounds used for the SHA-256, SHA-512 algorithms" NL ++ " (higher is more secure but slower, default: 5000)." NL + " -d Force CRYPT encryption of the password (8 chars max, insecure)." NL +- " -s Force SHA encryption of the password (insecure)." NL ++ " -s Force SHA-1 encryption of the password (insecure)." NL + " -p Do not encrypt the password (plaintext, insecure)." NL + " -D Delete the specified user." NL + " -v Verify password for the specified user." NL + "On other systems than Windows and NetWare the '-p' flag will " + "probably not work." NL +- "The SHA algorithm does not use a salt and is less secure than the " ++ "The SHA-1 algorithm does not use a salt and is less secure than the " + "MD5 algorithm." NL, + BCRYPT_DEFAULT_COST + ); +@@ -178,7 +182,7 @@ + if (rv != APR_SUCCESS) + exit(ERR_SYNTAX); + +- while ((rv = apr_getopt(state, "cnmspdBbDiC:v", &opt, &opt_arg)) == APR_SUCCESS) { ++ while ((rv = apr_getopt(state, "cnmspdBbDi25C:r:v", &opt, &opt_arg)) == APR_SUCCESS) { + switch (opt) { + case 'c': + *mask |= APHTP_NEWFILE; +--- httpd-2.4.43/support/passwd_common.c.r1861793+ ++++ httpd-2.4.43/support/passwd_common.c +@@ -179,16 +179,21 @@ + int mkhash(struct passwd_ctx *ctx) + { + char *pw; +- char salt[16]; ++ char salt[17]; + apr_status_t rv; + int ret = 0; + #if CRYPT_ALGO_SUPPORTED + char *cbuf; + #endif ++#ifdef HAVE_CRYPT_SHA2 ++ const char *setting; ++ char method; ++#endif + +- if (ctx->cost != 0 && ctx->alg != ALG_BCRYPT) { ++ if (ctx->cost != 0 && ctx->alg != ALG_BCRYPT ++ && ctx->alg != ALG_CRYPT_SHA256 && ctx->alg != ALG_CRYPT_SHA512 ) { + apr_file_printf(errfile, +- "Warning: Ignoring -C argument for this algorithm." NL); ++ "Warning: Ignoring -C/-r argument for this algorithm." NL); + } + + if (ctx->passwd == NULL) { +@@ -246,6 +251,34 @@ + break; + #endif /* CRYPT_ALGO_SUPPORTED */ + ++#ifdef HAVE_CRYPT_SHA2 ++ case ALG_CRYPT_SHA256: ++ case ALG_CRYPT_SHA512: ++ ret = generate_salt(salt, 16, &ctx->errstr, ctx->pool); ++ if (ret != 0) ++ break; ++ ++ method = ctx->alg == ALG_CRYPT_SHA256 ? '5': '6'; ++ ++ if (ctx->cost) ++ setting = apr_psprintf(ctx->pool, "$%c$rounds=%d$%s", ++ method, ctx->cost, salt); ++ else ++ setting = apr_psprintf(ctx->pool, "$%c$%s", ++ method, salt); ++ ++ cbuf = crypt(pw, setting); ++ if (cbuf == NULL) { ++ rv = APR_FROM_OS_ERROR(errno); ++ ctx->errstr = apr_psprintf(ctx->pool, "crypt() failed: %pm", &rv); ++ ret = ERR_PWMISMATCH; ++ break; ++ } ++ ++ apr_cpystrn(ctx->out, cbuf, ctx->out_len - 1); ++ break; ++#endif /* HAVE_CRYPT_SHA2 */ ++ + #if BCRYPT_ALGO_SUPPORTED + case ALG_BCRYPT: + rv = apr_generate_random_bytes((unsigned char*)salt, 16); +@@ -294,6 +327,19 @@ + case 's': + ctx->alg = ALG_APSHA; + break; ++#ifdef HAVE_CRYPT_SHA2 ++ case '2': ++ ctx->alg = ALG_CRYPT_SHA256; ++ break; ++ case '5': ++ ctx->alg = ALG_CRYPT_SHA512; ++ break; ++#else ++ case '2': ++ case '5': ++ ctx->errstr = "SHA-2 crypt() algorithms are not supported on this platform."; ++ return ERR_ALG_NOT_SUPP; ++#endif + case 'p': + ctx->alg = ALG_PLAIN; + #if !PLAIN_ALGO_SUPPORTED +@@ -324,11 +370,12 @@ + return ERR_ALG_NOT_SUPP; + #endif + break; +- case 'C': { ++ case 'C': ++ case 'r': { + char *endptr; + long num = strtol(opt_arg, &endptr, 10); + if (*endptr != '\0' || num <= 0) { +- ctx->errstr = "argument to -C must be a positive integer"; ++ ctx->errstr = "argument to -C/-r must be a positive integer"; + return ERR_SYNTAX; + } + ctx->cost = num; +--- httpd-2.4.43/support/passwd_common.h.r1861793+ ++++ httpd-2.4.43/support/passwd_common.h +@@ -28,6 +28,8 @@ + #include "apu_version.h" + #endif + ++#include "ap_config_auto.h" ++ + #define MAX_STRING_LEN 256 + + #define ALG_PLAIN 0 +@@ -35,6 +37,8 @@ + #define ALG_APMD5 2 + #define ALG_APSHA 3 + #define ALG_BCRYPT 4 ++#define ALG_CRYPT_SHA256 5 ++#define ALG_CRYPT_SHA512 6 + + #define BCRYPT_DEFAULT_COST 5 + +@@ -84,7 +88,7 @@ + apr_size_t out_len; + char *passwd; + int alg; +- int cost; ++ int cost; /* cost for bcrypt, rounds for SHA-2 */ + enum { + PW_PROMPT = 0, + PW_ARG, diff --git a/httpd-2.4.43-r1870095+.patch b/httpd-2.4.43-r1870095+.patch new file mode 100644 index 0000000..3fc8dfb --- /dev/null +++ b/httpd-2.4.43-r1870095+.patch @@ -0,0 +1,115 @@ +diff --git a/modules/ssl/ssl_engine_kernel.c b/modules/ssl/ssl_engine_kernel.c +index cbab6a3..765aa4b 100644 +--- a/modules/ssl/ssl_engine_kernel.c ++++ b/modules/ssl/ssl_engine_kernel.c +@@ -114,6 +114,45 @@ static int has_buffered_data(request_rec *r) + return result; + } + ++/* If a renegotiation is required for the location, and the request ++ * includes a message body (and the client has not requested a "100 ++ * Continue" response), then the client will be streaming the request ++ * body over the wire already. In that case, it is not possible to ++ * stop and perform a new SSL handshake immediately; once the SSL ++ * library moves to the "accept" state, it will reject the SSL packets ++ * which the client is sending for the request body. ++ * ++ * To allow authentication to complete in the hook, the solution used ++ * here is to fill a (bounded) buffer with the request body, and then ++ * to reinject that request body later. ++ * ++ * This function is called to fill the renegotiation buffer for the ++ * location as required, or fail. Returns zero on success or HTTP_ ++ * error code on failure. ++ */ ++static int fill_reneg_buffer(request_rec *r, SSLDirConfigRec *dc) ++{ ++ int rv; ++ apr_size_t rsize; ++ ++ /* ### this is HTTP/1.1 specific, special case for protocol? */ ++ if (r->expecting_100 || !ap_request_has_body(r)) { ++ return 0; ++ } ++ ++ rsize = dc->nRenegBufferSize == UNSET ? DEFAULT_RENEG_BUFFER_SIZE : dc->nRenegBufferSize; ++ if (rsize > 0) { ++ /* Fill the I/O buffer with the request body if possible. */ ++ rv = ssl_io_buffer_fill(r, rsize); ++ } ++ else { ++ /* If the reneg buffer size is set to zero, just fail. */ ++ rv = HTTP_REQUEST_ENTITY_TOO_LARGE; ++ } ++ ++ return rv; ++} ++ + #ifdef HAVE_TLSEXT + static int ap_array_same_str_set(apr_array_header_t *s1, apr_array_header_t *s2) + { +@@ -814,41 +853,14 @@ static int ssl_hook_Access_classic(request_rec *r, SSLSrvConfigRec *sc, SSLDirCo + } + } + +- /* If a renegotiation is now required for this location, and the +- * request includes a message body (and the client has not +- * requested a "100 Continue" response), then the client will be +- * streaming the request body over the wire already. In that +- * case, it is not possible to stop and perform a new SSL +- * handshake immediately; once the SSL library moves to the +- * "accept" state, it will reject the SSL packets which the client +- * is sending for the request body. +- * +- * To allow authentication to complete in this auth hook, the +- * solution used here is to fill a (bounded) buffer with the +- * request body, and then to reinject that request body later. +- */ +- if (renegotiate && !renegotiate_quick +- && !r->expecting_100 +- && ap_request_has_body(r)) { +- int rv; +- apr_size_t rsize; +- +- rsize = dc->nRenegBufferSize == UNSET ? DEFAULT_RENEG_BUFFER_SIZE : +- dc->nRenegBufferSize; +- if (rsize > 0) { +- /* Fill the I/O buffer with the request body if possible. */ +- rv = ssl_io_buffer_fill(r, rsize); +- } +- else { +- /* If the reneg buffer size is set to zero, just fail. */ +- rv = HTTP_REQUEST_ENTITY_TOO_LARGE; +- } +- +- if (rv) { ++ /* Fill reneg buffer if required. */ ++ if (renegotiate && !renegotiate_quick) { ++ rc = fill_reneg_buffer(r, dc); ++ if (rc) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02257) + "could not buffer message body to allow " + "SSL renegotiation to proceed"); +- return rv; ++ return rc; + } + } + +@@ -1132,6 +1144,17 @@ static int ssl_hook_Access_modern(request_rec *r, SSLSrvConfigRec *sc, SSLDirCon + } + } + ++ /* Fill reneg buffer if required. */ ++ if (change_vmode) { ++ rc = fill_reneg_buffer(r, dc); ++ if (rc) { ++ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10228) ++ "could not buffer message body to allow " ++ "TLS Post-Handshake Authentication to proceed"); ++ return rc; ++ } ++ } ++ + if (change_vmode) { + char peekbuf[1]; + diff --git a/httpd-2.4.43-selinux.patch b/httpd-2.4.43-selinux.patch new file mode 100644 index 0000000..3c3176f --- /dev/null +++ b/httpd-2.4.43-selinux.patch @@ -0,0 +1,60 @@ +diff --git a/configure.in b/configure.in +index c8f9aa2..cb43246 100644 +--- a/configure.in ++++ b/configure.in +@@ -484,6 +484,11 @@ getloadavg + 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 +diff --git a/server/core.c b/server/core.c +index dc0f17a..7ed9527 100644 +--- a/server/core.c ++++ b/server/core.c +@@ -59,6 +59,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) +@@ -5015,6 +5019,28 @@ static int core_post_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *pte + } + #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.43-socket-activation.patch b/httpd-2.4.43-socket-activation.patch new file mode 100644 index 0000000..511f476 --- /dev/null +++ b/httpd-2.4.43-socket-activation.patch @@ -0,0 +1,300 @@ +diff --git a/server/listen.c b/server/listen.c +index 5242c2a..e2e028a 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 +@@ -315,6 +324,123 @@ static int find_listeners(ap_listen_rec **from, ap_listen_rec **to, + return found; + } + ++#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, const char *addr, + apr_port_t port, const char* proto, + void *slave) +@@ -495,7 +621,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 { +@@ -607,8 +733,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) { +@@ -698,7 +844,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); +@@ -825,6 +971,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) { +@@ -856,6 +1007,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.43-sslciphdefault.patch b/httpd-2.4.43-sslciphdefault.patch new file mode 100644 index 0000000..85ae568 --- /dev/null +++ b/httpd-2.4.43-sslciphdefault.patch @@ -0,0 +1,31 @@ +diff --git a/modules/ssl/ssl_engine_config.c b/modules/ssl/ssl_engine_config.c +index 97778a8..27e7a53 100644 +--- a/modules/ssl/ssl_engine_config.c ++++ b/modules/ssl/ssl_engine_config.c +@@ -778,9 +778,11 @@ const char *ssl_cmd_SSLCipherSuite(cmd_parms *cmd, + } + + if (!strcmp("SSL", arg1)) { +- /* always disable null and export ciphers */ +- arg2 = apr_pstrcat(cmd->pool, arg2, ":!aNULL:!eNULL:!EXP", NULL); + if (cmd->path) { ++ /* Disable null and export ciphers by default, except for PROFILE= ++ * configs where the parser doesn't cope. */ ++ if (strncmp(arg2, "PROFILE=", 8) != 0) ++ arg2 = apr_pstrcat(cmd->pool, arg2, ":!aNULL:!eNULL:!EXP", NULL); + dc->szCipherSuite = arg2; + } + else { +@@ -1544,8 +1546,10 @@ const char *ssl_cmd_SSLProxyCipherSuite(cmd_parms *cmd, + } + + if (!strcmp("SSL", arg1)) { +- /* always disable null and export ciphers */ +- arg2 = apr_pstrcat(cmd->pool, arg2, ":!aNULL:!eNULL:!EXP", NULL); ++ /* Disable null and export ciphers by default, except for PROFILE= ++ * configs where the parser doesn't cope. */ ++ if (strncmp(arg2, "PROFILE=", 8) != 0) ++ arg2 = apr_pstrcat(cmd->pool, arg2, ":!aNULL:!eNULL:!EXP", NULL); + dc->proxy->auth.cipher_suite = arg2; + return NULL; + } diff --git a/httpd-2.4.43-sslcoalesce.patch b/httpd-2.4.43-sslcoalesce.patch new file mode 100644 index 0000000..ef1f728 --- /dev/null +++ b/httpd-2.4.43-sslcoalesce.patch @@ -0,0 +1,192 @@ + +http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/ssl/ssl_engine_io.c?r1=1836237&r2=1836236&pathrev=1836237&view=patch +http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/ssl/ssl_engine_io.c?r1=1873985&r2=1876037&view=patch + +--- httpd-2.4.43/modules/ssl/ssl_engine_io.c.sslcoalesce ++++ httpd-2.4.43/modules/ssl/ssl_engine_io.c +@@ -1585,18 +1585,32 @@ + } + + +-/* ssl_io_filter_output() produces one SSL/TLS message per bucket ++/* ssl_io_filter_output() produces one SSL/TLS record per bucket + * passed down the output filter stack. This results in a high +- * overhead (network packets) for any output comprising many small +- * buckets. SSI page applied through the HTTP chunk filter, for +- * example, may produce many brigades containing small buckets - +- * [chunk-size CRLF] [chunk-data] [CRLF]. ++ * overhead (more network packets & TLS processing) for any output ++ * comprising many small buckets. SSI output passed through the HTTP ++ * chunk filter, for example, may produce many brigades containing ++ * small buckets - [chunk-size CRLF] [chunk-data] [CRLF]. + * +- * The coalescing filter merges many small buckets into larger buckets +- * where possible, allowing the SSL I/O output filter to handle them +- * more efficiently. */ ++ * Sending HTTP response headers as a separate TLS record to the ++ * response body also reveals information to a network observer (the ++ * size of headers) which can be significant. ++ * ++ * The coalescing filter merges data buckets with the aim of producing ++ * fewer, larger TLS records - without copying/buffering all content ++ * and introducing unnecessary overhead. ++ * ++ * ### This buffering could be probably be done more comprehensively ++ * ### in ssl_io_filter_output itself. ++ * ++ * ### Another possible performance optimisation in particular for the ++ * ### [HEAP] [FILE] HTTP response case is using a brigade rather than ++ * ### a char array to buffer; using apr_brigade_write() to append ++ * ### will use already-allocated memory from the HEAP, reducing # of ++ * ### copies. ++ */ + +-#define COALESCE_BYTES (2048) ++#define COALESCE_BYTES (AP_IOBUFSIZE) + + struct coalesce_ctx { + char buffer[COALESCE_BYTES]; +@@ -1609,11 +1623,12 @@ + apr_bucket *e, *upto; + apr_size_t bytes = 0; + struct coalesce_ctx *ctx = f->ctx; ++ apr_size_t buffered = ctx ? ctx->bytes : 0; /* space used on entry */ + unsigned count = 0; + + /* The brigade consists of zero-or-more small data buckets which +- * can be coalesced (the prefix), followed by the remainder of the +- * brigade. ++ * can be coalesced (referred to as the "prefix"), followed by the ++ * remainder of the brigade. + * + * Find the last bucket - if any - of that prefix. count gives + * the number of buckets in the prefix. The "prefix" must contain +@@ -1628,24 +1643,97 @@ + e != APR_BRIGADE_SENTINEL(bb) + && !APR_BUCKET_IS_METADATA(e) + && e->length != (apr_size_t)-1 +- && e->length < COALESCE_BYTES +- && (bytes + e->length) < COALESCE_BYTES +- && (ctx == NULL +- || bytes + ctx->bytes + e->length < COALESCE_BYTES); ++ && e->length <= COALESCE_BYTES ++ && (buffered + bytes + e->length) <= COALESCE_BYTES; + e = APR_BUCKET_NEXT(e)) { +- if (e->length) count++; /* don't count zero-length buckets */ +- bytes += e->length; ++ /* don't count zero-length buckets */ ++ if (e->length) { ++ bytes += e->length; ++ count++; ++ } + } ++ ++ /* If there is room remaining and the next bucket is a data ++ * bucket, try to include it in the prefix to coalesce. For a ++ * typical [HEAP] [FILE] HTTP response brigade, this handles ++ * merging the headers and the start of the body into a single TLS ++ * record. */ ++ if (bytes + buffered > 0 ++ && bytes + buffered < COALESCE_BYTES ++ && e != APR_BRIGADE_SENTINEL(bb) ++ && !APR_BUCKET_IS_METADATA(e)) { ++ apr_status_t rv = APR_SUCCESS; ++ ++ /* For an indeterminate length bucket (PIPE/CGI/...), try a ++ * non-blocking read to have it morph into a HEAP. If the ++ * read fails with EAGAIN, it is harmless to try a split ++ * anyway, split is ENOTIMPL for most PIPE-like buckets. */ ++ if (e->length == (apr_size_t)-1) { ++ const char *discard; ++ apr_size_t ignore; ++ ++ rv = apr_bucket_read(e, &discard, &ignore, APR_NONBLOCK_READ); ++ if (rv != APR_SUCCESS && !APR_STATUS_IS_EAGAIN(rv)) { ++ ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, f->c, APLOGNO(10232) ++ "coalesce failed to read from %s bucket", ++ e->type->name); ++ return AP_FILTER_ERROR; ++ } ++ } ++ ++ if (rv == APR_SUCCESS) { ++ /* If the read above made the bucket morph, it may now fit ++ * entirely within the buffer. Otherwise, split it so it does ++ * fit. */ ++ if (e->length > COALESCE_BYTES ++ || e->length + buffered + bytes > COALESCE_BYTES) { ++ rv = apr_bucket_split(e, COALESCE_BYTES - (buffered + bytes)); ++ } ++ ++ if (rv == APR_SUCCESS && e->length == 0) { ++ /* As above, don't count in the prefix if the bucket is ++ * now zero-length. */ ++ } ++ else if (rv == APR_SUCCESS) { ++ ap_log_cerror(APLOG_MARK, APLOG_TRACE4, 0, f->c, ++ "coalesce: adding %" APR_SIZE_T_FMT " bytes " ++ "from split %s bucket, total %" APR_SIZE_T_FMT, ++ e->length, e->type->name, bytes + buffered); ++ ++ count++; ++ bytes += e->length; ++ e = APR_BUCKET_NEXT(e); ++ } ++ else if (rv != APR_ENOTIMPL) { ++ ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, f->c, APLOGNO(10233) ++ "coalesce: failed to split data bucket"); ++ return AP_FILTER_ERROR; ++ } ++ } ++ } ++ + upto = e; + +- /* Coalesce the prefix, if: +- * a) more than one bucket is found to coalesce, or +- * b) the brigade contains only a single data bucket, or +- * c) the data bucket is not last but we have buffered data already. ++ /* Coalesce the prefix, if any of the following are true: ++ * ++ * a) the prefix is more than one bucket ++ * OR ++ * b) the prefix is the entire brigade, which is a single bucket ++ * AND the prefix length is smaller than the buffer size, ++ * OR ++ * c) the prefix is a single bucket ++ * AND there is buffered data from a previous pass. ++ * ++ * The aim with (b) is to buffer a small bucket so it can be ++ * coalesced with future invocations of this filter. e.g. three ++ * calls each with a single 100 byte HEAP bucket should get ++ * coalesced together. But an invocation with a 8192 byte HEAP ++ * should pass through untouched. + */ + if (bytes > 0 + && (count > 1 +- || (upto == APR_BRIGADE_SENTINEL(bb)) ++ || (upto == APR_BRIGADE_SENTINEL(bb) ++ && bytes < COALESCE_BYTES) + || (ctx && ctx->bytes > 0))) { + /* If coalescing some bytes, ensure a context has been + * created. */ +@@ -1656,7 +1744,8 @@ + + ap_log_cerror(APLOG_MARK, APLOG_TRACE4, 0, f->c, + "coalesce: have %" APR_SIZE_T_FMT " bytes, " +- "adding %" APR_SIZE_T_FMT " more", ctx->bytes, bytes); ++ "adding %" APR_SIZE_T_FMT " more (buckets=%u)", ++ ctx->bytes, bytes, count); + + /* Iterate through the prefix segment. For non-fatal errors + * in this loop it is safe to break out and fall back to the +@@ -1671,7 +1760,8 @@ + if (APR_BUCKET_IS_METADATA(e) + || e->length == (apr_size_t)-1) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, f->c, APLOGNO(02012) +- "unexpected bucket type during coalesce"); ++ "unexpected %s bucket during coalesce", ++ e->type->name); + break; /* non-fatal error; break out */ + } + diff --git a/httpd-2.4.43-sslmultiproxy.patch b/httpd-2.4.43-sslmultiproxy.patch new file mode 100644 index 0000000..349c4ae --- /dev/null +++ b/httpd-2.4.43-sslmultiproxy.patch @@ -0,0 +1,118 @@ +diff --git a/modules/ssl/mod_ssl.c b/modules/ssl/mod_ssl.c +index 12617b2..0fe7464 100644 +--- a/modules/ssl/mod_ssl.c ++++ b/modules/ssl/mod_ssl.c +@@ -459,6 +459,10 @@ static int ssl_hook_pre_config(apr_pool_t *pconf, + return OK; + } + ++static APR_OPTIONAL_FN_TYPE(ssl_engine_disable) *othermod_engine_disable; ++static APR_OPTIONAL_FN_TYPE(ssl_engine_set) *othermod_engine_set; ++ ++ + static SSLConnRec *ssl_init_connection_ctx(conn_rec *c, + ap_conf_vector_t *per_dir_config, + int new_proxy) +@@ -466,6 +470,10 @@ static SSLConnRec *ssl_init_connection_ctx(conn_rec *c, + SSLConnRec *sslconn = myConnConfig(c); + int need_setup = 0; + ++ if (othermod_engine_disable) { ++ othermod_engine_disable(c); ++ } ++ + /* mod_proxy's (r->)per_dir_config has the lifetime of the request, thus + * it uses ssl_engine_set() to reset sslconn->dc when reusing SSL backend + * connections, so we must fall through here. But in the case where we are +@@ -544,6 +552,10 @@ static int ssl_engine_set(conn_rec *c, + { + SSLConnRec *sslconn; + int status; ++ ++ if (othermod_engine_set) { ++ return othermod_engine_set(c, per_dir_config, proxy, enable); ++ } + + if (proxy) { + sslconn = ssl_init_connection_ctx(c, per_dir_config, 1); +@@ -572,12 +584,18 @@ static int ssl_engine_set(conn_rec *c, + + static int ssl_proxy_enable(conn_rec *c) + { +- return ssl_engine_set(c, NULL, 1, 1); ++ if (othermod_engine_set) ++ return othermod_engine_set(c, NULL, 1, 1); ++ else ++ return ssl_engine_set(c, NULL, 1, 1); + } + + static int ssl_engine_disable(conn_rec *c) + { +- return ssl_engine_set(c, NULL, 0, 0); ++ if (othermod_engine_set) ++ return othermod_engine_set(c, NULL, 0, 0); ++ else ++ return ssl_engine_set(c, NULL, 0, 0); + } + + int ssl_init_ssl_connection(conn_rec *c, request_rec *r) +@@ -753,6 +771,9 @@ static void ssl_register_hooks(apr_pool_t *p) + APR_HOOK_MIDDLE); + + ssl_var_register(p); ++ ++ othermod_engine_disable = APR_RETRIEVE_OPTIONAL_FN(ssl_engine_disable); ++ othermod_engine_set = APR_RETRIEVE_OPTIONAL_FN(ssl_engine_set); + + 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 5724f18..81c56ba 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); +@@ -271,6 +278,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.43-sslprotdefault.patch b/httpd-2.4.43-sslprotdefault.patch new file mode 100644 index 0000000..d089823 --- /dev/null +++ b/httpd-2.4.43-sslprotdefault.patch @@ -0,0 +1,99 @@ +diff --git a/modules/ssl/ssl_engine_config.c b/modules/ssl/ssl_engine_config.c +index 27e7a53..b53f3f8 100644 +--- a/modules/ssl/ssl_engine_config.c ++++ b/modules/ssl/ssl_engine_config.c +@@ -119,7 +119,7 @@ static void modssl_ctx_init(modssl_ctx_t *mctx, apr_pool_t *p) + mctx->ticket_key = NULL; + #endif + +- mctx->protocol = SSL_PROTOCOL_DEFAULT; ++ mctx->protocol = SSL_PROTOCOL_NONE; + mctx->protocol_set = 0; + + mctx->pphrase_dialog_type = SSL_PPTYPE_UNSET; +@@ -263,6 +263,7 @@ static void modssl_ctx_cfg_merge(apr_pool_t *p, + if (add->protocol_set) { + mrg->protocol_set = 1; + mrg->protocol = add->protocol; ++ mrg->protocol_set = 1; + } + else { + mrg->protocol_set = base->protocol_set; + +diff --git a/modules/ssl/ssl_engine_init.c b/modules/ssl/ssl_engine_init.c +index bfad47a..b0fcf81 100644 +--- a/modules/ssl/ssl_engine_init.c ++++ b/modules/ssl/ssl_engine_init.c +@@ -577,6 +577,7 @@ static apr_status_t ssl_init_ctx_protocol(server_rec *s, + MODSSL_SSL_METHOD_CONST SSL_METHOD *method = NULL; + char *cp; + int protocol = mctx->protocol; ++ int protocol_set = mctx->protocol_set; + SSLSrvConfigRec *sc = mySrvConfig(s); + #if OPENSSL_VERSION_NUMBER >= 0x10100000L + int prot; +@@ -586,12 +587,18 @@ static apr_status_t ssl_init_ctx_protocol(server_rec *s, + * Create the new per-server SSL context + */ + if (protocol == SSL_PROTOCOL_NONE) { +- ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02231) +- "No SSL protocols available [hint: SSLProtocol]"); +- return ssl_die(s); +- } ++ if (protocol_set) { ++ ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02231) ++ "No SSL protocols available [hint: SSLProtocol]"); ++ return ssl_die(s); ++ } + +- cp = apr_pstrcat(p, ++ ap_log_error(APLOG_MARK, APLOG_TRACE3, 0, s, ++ "Using OpenSSL/system default SSL/TLS protocols"); ++ cp = "default"; ++ } ++ else { ++ cp = apr_pstrcat(p, + #ifndef OPENSSL_NO_SSL3 + (protocol & SSL_PROTOCOL_SSLV3 ? "SSLv3, " : ""), + #endif +@@ -604,7 +611,8 @@ static apr_status_t ssl_init_ctx_protocol(server_rec *s, + #endif + #endif + NULL); +- cp[strlen(cp)-2] = NUL; ++ cp[strlen(cp)-2] = NUL; ++ } + + ap_log_error(APLOG_MARK, APLOG_TRACE3, 0, s, + "Creating new SSL context (protocols: %s)", cp); +@@ -705,13 +713,15 @@ static apr_status_t ssl_init_ctx_protocol(server_rec *s, + prot = SSL3_VERSION; + #endif + } else { +- SSL_CTX_free(ctx); +- mctx->ssl_ctx = NULL; +- ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(03378) +- "No SSL protocols available [hint: SSLProtocol]"); +- return ssl_die(s); ++ if (protocol_set) { ++ SSL_CTX_free(ctx); ++ mctx->ssl_ctx = NULL; ++ ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(03378) ++ "No SSL protocols available [hint: SSLProtocol]"); ++ return ssl_die(s); ++ } + } +- SSL_CTX_set_max_proto_version(ctx, prot); ++ if (protocol != SSL_PROTOCOL_NONE) SSL_CTX_set_max_proto_version(ctx, prot); + + /* Next we scan for the minimal protocol version we should provide, + * but we do not allow holes between max and min */ +@@ -731,7 +741,7 @@ static apr_status_t ssl_init_ctx_protocol(server_rec *s, + prot = SSL3_VERSION; + } + #endif +- SSL_CTX_set_min_proto_version(ctx, prot); ++ if (protocol != SSL_PROTOCOL_NONE) SSL_CTX_set_min_proto_version(ctx, prot); + #endif /* if OPENSSL_VERSION_NUMBER < 0x10100000L */ + + #ifdef SSL_OP_CIPHER_SERVER_PREFERENCE diff --git a/httpd-2.4.46-lua-resume.patch b/httpd-2.4.46-lua-resume.patch new file mode 100644 index 0000000..1a22008 --- /dev/null +++ b/httpd-2.4.46-lua-resume.patch @@ -0,0 +1,119 @@ +diff --git a/modules/lua/config.m4 b/modules/lua/config.m4 +index 29fd563..abeba1c 100644 +--- a/modules/lua/config.m4 ++++ b/modules/lua/config.m4 +@@ -34,7 +34,7 @@ AC_DEFUN([CHECK_LUA_PATH], [dnl + fi + ]) + +-dnl Check for Lua 5.3/5.2/5.1 Libraries ++dnl Check for Lua Libraries + dnl CHECK_LUA(ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]) + dnl Sets: + dnl LUA_CFLAGS +@@ -44,7 +44,7 @@ AC_DEFUN([CHECK_LUA], + + AC_ARG_WITH( + lua, +- [AC_HELP_STRING([--with-lua=PATH],[Path to the Lua 5.3/5.2/5.1 prefix])], ++ [AC_HELP_STRING([--with-lua=PATH],[Path to the Lua installation prefix])], + lua_path="$withval", + :) + +diff --git a/modules/lua/mod_lua.c b/modules/lua/mod_lua.c +index 05f1e44..18b628c 100644 +--- a/modules/lua/mod_lua.c ++++ b/modules/lua/mod_lua.c +@@ -342,7 +342,7 @@ static apr_status_t lua_setup_filter_ctx(ap_filter_t* f, request_rec* r, lua_fil + { + apr_pool_t *pool; + ap_lua_vm_spec *spec; +- int n, rc; ++ int n, rc, nres; + lua_State *L; + lua_filter_ctx *ctx; + ap_lua_server_cfg *server_cfg = ap_get_module_config(r->server->module_config, +@@ -410,7 +410,7 @@ static apr_status_t lua_setup_filter_ctx(ap_filter_t* f, request_rec* r, lua_fil + /* If a Lua filter is interested in filtering a request, it must first do a yield, + * otherwise we'll assume that it's not interested and pretend we didn't find it. + */ +- rc = lua_resume(L, 1); ++ rc = lua_resume(L, 1, &nres); + if (rc == LUA_YIELD) { + if (f->frec->providers == NULL) { + /* Not wired by mod_filter */ +@@ -432,7 +432,7 @@ static apr_status_t lua_setup_filter_ctx(ap_filter_t* f, request_rec* r, lua_fil + static apr_status_t lua_output_filter_handle(ap_filter_t *f, apr_bucket_brigade *pbbIn) + { + request_rec *r = f->r; +- int rc; ++ int rc, nres; + lua_State *L; + lua_filter_ctx* ctx; + conn_rec *c = r->connection; +@@ -492,7 +492,7 @@ static apr_status_t lua_output_filter_handle(ap_filter_t *f, apr_bucket_brigade + lua_setglobal(L, "bucket"); + + /* If Lua yielded, it means we have something to pass on */ +- if (lua_resume(L, 0) == LUA_YIELD) { ++ if (lua_resume(L, 0, &nres) == LUA_YIELD && nres == 1) { + size_t olen; + const char* output = lua_tolstring(L, 1, &olen); + if (olen > 0) { +@@ -524,7 +524,7 @@ static apr_status_t lua_output_filter_handle(ap_filter_t *f, apr_bucket_brigade + apr_bucket *pbktEOS; + lua_pushnil(L); + lua_setglobal(L, "bucket"); +- if (lua_resume(L, 0) == LUA_YIELD) { ++ if (lua_resume(L, 0, &nres) == LUA_YIELD && nres == 1) { + apr_bucket *pbktOut; + size_t olen; + const char* output = lua_tolstring(L, 1, &olen); +@@ -558,7 +558,7 @@ static apr_status_t lua_input_filter_handle(ap_filter_t *f, + apr_off_t nBytes) + { + request_rec *r = f->r; +- int rc, lastCall = 0; ++ int rc, lastCall = 0, nres; + lua_State *L; + lua_filter_ctx* ctx; + conn_rec *c = r->connection; +@@ -621,7 +621,7 @@ static apr_status_t lua_input_filter_handle(ap_filter_t *f, + lua_setglobal(L, "bucket"); + + /* If Lua yielded, it means we have something to pass on */ +- if (lua_resume(L, 0) == LUA_YIELD) { ++ if (lua_resume(L, 0, &nres) == LUA_YIELD && nres == 1) { + size_t olen; + const char* output = lua_tolstring(L, 1, &olen); + pbktOut = apr_bucket_heap_create(output, olen, 0, c->bucket_alloc); +@@ -643,7 +643,7 @@ static apr_status_t lua_input_filter_handle(ap_filter_t *f, + apr_bucket *pbktEOS = apr_bucket_eos_create(c->bucket_alloc); + lua_pushnil(L); + lua_setglobal(L, "bucket"); +- if (lua_resume(L, 0) == LUA_YIELD) { ++ if (lua_resume(L, 0, &nres) == LUA_YIELD && nres == 1) { + apr_bucket *pbktOut; + size_t olen; + const char* output = lua_tolstring(L, 1, &olen); +diff --git a/modules/lua/mod_lua.h b/modules/lua/mod_lua.h +index 0e49cdc..72b4de7 100644 +--- a/modules/lua/mod_lua.h ++++ b/modules/lua/mod_lua.h +@@ -48,7 +48,15 @@ + #if LUA_VERSION_NUM > 501 + /* Load mode for lua_load() */ + #define lua_load(a,b,c,d) lua_load(a,b,c,d,NULL) +-#define lua_resume(a,b) lua_resume(a, NULL, b) ++ ++#if LUA_VERSION_NUM > 503 ++#define lua_resume(a,b,c) lua_resume(a, NULL, b, c) ++#else ++/* ### For version < 5.4, assume that exactly one stack item is on the ++ * stack, which is what the code did before but seems dubious. */ ++#define lua_resume(a,b,c) (*(c) = 1, lua_resume(a, NULL, b)) ++#endif ++ + #define luaL_setfuncs_compat(a,b) luaL_setfuncs(a,b,0) + #else + #define lua_rawlen(L,i) lua_objlen(L, (i)) diff --git a/httpd-init.service b/httpd-init.service new file mode 100644 index 0000000..3074778 --- /dev/null +++ b/httpd-init.service @@ -0,0 +1,12 @@ +[Unit] +Description=One-time temporary TLS key generation for httpd.service +Documentation=man:httpd-init.service(8) + +ConditionPathExists=|!/etc/pki/tls/certs/localhost.crt +ConditionPathExists=|!/etc/pki/tls/private/localhost.key + +[Service] +Type=oneshot +RemainAfterExit=no + +ExecStart=/usr/libexec/httpd-ssl-gencerts diff --git a/httpd-ssl-gencerts b/httpd-ssl-gencerts new file mode 100755 index 0000000..350f5b5 --- /dev/null +++ b/httpd-ssl-gencerts @@ -0,0 +1,39 @@ +#!/usr/bin/bash + +set -e + +FQDN=`hostname` +ssldotconf=/etc/httpd/conf.d/ssl.conf + +if test -f /etc/pki/tls/certs/localhost.crt -a \ + -f /etc/pki/tls/private/localhost.key; then + exit 0 +fi + +if test -f /etc/pki/tls/certs/localhost.crt -a \ + ! -f /etc/pki/tls/private/localhost.key; then + echo "Missing certificate key!" + exit 1 +fi + +if test ! -f /etc/pki/tls/certs/localhost.crt -a \ + -f /etc/pki/tls/private/localhost.key; then + echo "Missing certificate, but key is present!" + exit 1 +fi + +if ! test -f ${ssldotconf} || \ + ! grep -q '^SSLCertificateFile /etc/pki/tls/certs/localhost.crt' ${ssldotconf} || \ + ! grep -q '^SSLCertificateKeyFile /etc/pki/tls/private/localhost.key' ${ssldotconf}; then + # Non-default configuration, do nothing. + exit 0 +fi + +sscg -q \ + --cert-file /etc/pki/tls/certs/localhost.crt \ + --cert-key-file /etc/pki/tls/private/localhost.key \ + --ca-file /etc/pki/tls/certs/localhost.crt \ + --lifetime 365 \ + --hostname $FQDN \ + --email root@$FQDN + diff --git a/httpd-ssl-pass-dialog b/httpd-ssl-pass-dialog new file mode 100755 index 0000000..79318a6 --- /dev/null +++ b/httpd-ssl-pass-dialog @@ -0,0 +1,3 @@ +#!/bin/sh + +exec /bin/systemd-ask-password "Enter TLS private key passphrase for $1 ($2) : " diff --git a/httpd.conf b/httpd.conf new file mode 100644 index 0000000..6ab68cb --- /dev/null +++ b/httpd.conf @@ -0,0 +1,356 @@ +# +# This is the main Apache HTTP server configuration file. It contains the +# configuration directives that give the server its instructions. +# See for detailed information. +# In particular, see +# +# for a discussion of each configuration directive. +# +# See the httpd.conf(5) man page for more information on this configuration, +# and httpd.service(8) on using and configuring the httpd service. +# +# Do NOT simply read the instructions in here without understanding +# what they do. They're here only as hints or reminders. If you are unsure +# consult the online docs. You have been warned. +# +# Configuration and logfile names: If the filenames you specify for many +# of the server's control files begin with "/" (or "drive:/" for Win32), the +# server will use that explicit path. If the filenames do *not* begin +# with "/", the value of ServerRoot is prepended -- so 'log/access_log' +# with ServerRoot set to '/www' will be interpreted by the +# server as '/www/log/access_log', where as '/log/access_log' will be +# interpreted as '/log/access_log'. + +# +# ServerRoot: The top of the directory tree under which the server's +# configuration, error, and log files are kept. +# +# Do not add a slash at the end of the directory path. If you point +# ServerRoot at a non-local disk, be sure to specify a local disk on the +# Mutex directive, if file-based mutexes are used. If you wish to share the +# same ServerRoot for multiple httpd daemons, you will need to change at +# least PidFile. +# +ServerRoot "/etc/httpd" + +# +# Listen: Allows you to bind Apache to specific IP addresses and/or +# ports, instead of the default. See also the +# directive. +# +# Change this to Listen on specific IP addresses as shown below to +# prevent Apache from glomming onto all bound IP addresses. +# +#Listen 12.34.56.78:80 +Listen 80 + +# +# Dynamic Shared Object (DSO) Support +# +# To be able to use the functionality of a module which was built as a DSO you +# have to place corresponding `LoadModule' lines at this location so the +# directives contained in it are actually available _before_ they are used. +# Statically compiled modules (those listed by `httpd -l') do not need +# to be loaded here. +# +# Example: +# LoadModule foo_module modules/mod_foo.so +# +Include conf.modules.d/*.conf + +# +# If you wish httpd to run as a different user or group, you must run +# httpd as root initially and it will switch. +# +# User/Group: The name (or #number) of the user/group to run httpd as. +# It is usually good practice to create a dedicated user and group for +# running httpd, as with most system services. +# +User apache +Group apache + +# 'Main' server configuration +# +# The directives in this section set up the values used by the 'main' +# server, which responds to any requests that aren't handled by a +# definition. These values also provide defaults for +# any containers you may define later in the file. +# +# All of these directives may appear inside containers, +# in which case these default settings will be overridden for the +# virtual host being defined. +# + +# +# ServerAdmin: Your address, where problems with the server should be +# e-mailed. This address appears on some server-generated pages, such +# as error documents. e.g. admin@your-domain.com +# +ServerAdmin root@localhost + +# +# ServerName gives the name and port that the server uses to identify itself. +# This can often be determined automatically, but we recommend you specify +# it explicitly to prevent problems during startup. +# +# If your host doesn't have a registered DNS name, enter its IP address here. +# +#ServerName www.example.com:80 + +# +# Deny access to the entirety of your server's filesystem. You must +# explicitly permit access to web content directories in other +# blocks below. +# + + AllowOverride none + Require all denied + + +# +# Note that from this point forward you must specifically allow +# particular features to be enabled - so if something's not working as +# you might expect, make sure that you have specifically enabled it +# below. +# + +# +# DocumentRoot: The directory out of which you will serve your +# documents. By default, all requests are taken from this directory, but +# symbolic links and aliases may be used to point to other locations. +# +DocumentRoot "/var/www/html" + +# +# Relax access to content within /var/www. +# + + AllowOverride None + # Allow open access: + Require all granted + + +# Further relax access to the default document root: + + # + # Possible values for the Options directive are "None", "All", + # or any combination of: + # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews + # + # Note that "MultiViews" must be named *explicitly* --- "Options All" + # doesn't give it to you. + # + # The Options directive is both complicated and important. Please see + # http://httpd.apache.org/docs/2.4/mod/core.html#options + # for more information. + # + Options Indexes FollowSymLinks + + # + # AllowOverride controls what directives may be placed in .htaccess files. + # It can be "All", "None", or any combination of the keywords: + # Options FileInfo AuthConfig Limit + # + AllowOverride None + + # + # Controls who can get stuff from this server. + # + Require all granted + + +# +# DirectoryIndex: sets the file that Apache will serve if a directory +# is requested. +# + + DirectoryIndex index.html + + +# +# The following lines prevent .htaccess and .htpasswd files from being +# viewed by Web clients. +# + + Require all denied + + +# +# ErrorLog: The location of the error log file. +# If you do not specify an ErrorLog directive within a +# container, error messages relating to that virtual host will be +# logged here. If you *do* define an error logfile for a +# container, that host's errors will be logged there and not here. +# +ErrorLog "logs/error_log" + +# +# LogLevel: Control the number of messages logged to the error_log. +# Possible values include: debug, info, notice, warn, error, crit, +# alert, emerg. +# +LogLevel warn + + + # + # The following directives define some format nicknames for use with + # a CustomLog directive (see below). + # + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%h %l %u %t \"%r\" %>s %b" common + + + # You need to enable mod_logio.c to use %I and %O + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio + + + # + # The location and format of the access logfile (Common Logfile Format). + # If you do not define any access logfiles within a + # container, they will be logged here. Contrariwise, if you *do* + # define per- access logfiles, transactions will be + # logged therein and *not* in this file. + # + #CustomLog "logs/access_log" common + + # + # If you prefer a logfile with access, agent, and referer information + # (Combined Logfile Format) you can use the following directive. + # + CustomLog "logs/access_log" combined + + + + # + # Redirect: Allows you to tell clients about documents that used to + # exist in your server's namespace, but do not anymore. The client + # will make a new request for the document at its new location. + # Example: + # Redirect permanent /foo http://www.example.com/bar + + # + # Alias: Maps web paths into filesystem paths and is used to + # access content that does not live under the DocumentRoot. + # Example: + # Alias /webpath /full/filesystem/path + # + # If you include a trailing / on /webpath then the server will + # require it to be present in the URL. You will also likely + # need to provide a section to allow access to + # the filesystem path. + + # + # ScriptAlias: This controls which directories contain server scripts. + # ScriptAliases are essentially the same as Aliases, except that + # documents in the target directory are treated as applications and + # run by the server when requested rather than as documents sent to the + # client. The same rules about trailing "/" apply to ScriptAlias + # directives as to Alias. + # + ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" + + + +# +# "/var/www/cgi-bin" should be changed to whatever your ScriptAliased +# CGI directory exists, if you have that configured. +# + + AllowOverride None + Options None + Require all granted + + + + # + # TypesConfig points to the file containing the list of mappings from + # filename extension to MIME-type. + # + TypesConfig /etc/mime.types + + # + # AddType allows you to add to or override the MIME configuration + # file specified in TypesConfig for specific file types. + # + #AddType application/x-gzip .tgz + # + # AddEncoding allows you to have certain browsers uncompress + # information on the fly. Note: Not all browsers support this. + # + #AddEncoding x-compress .Z + #AddEncoding x-gzip .gz .tgz + # + # If the AddEncoding directives above are commented-out, then you + # probably should define those extensions to indicate media types: + # + AddType application/x-compress .Z + AddType application/x-gzip .gz .tgz + + # + # AddHandler allows you to map certain file extensions to "handlers": + # actions unrelated to filetype. These can be either built into the server + # or added with the Action directive (see below) + # + # To use CGI scripts outside of ScriptAliased directories: + # (You will also need to add "ExecCGI" to the "Options" directive.) + # + #AddHandler cgi-script .cgi + + # For type maps (negotiated resources): + #AddHandler type-map var + + # + # Filters allow you to process content before it is sent to the client. + # + # To parse .shtml files for server-side includes (SSI): + # (You will also need to add "Includes" to the "Options" directive.) + # + AddType text/html .shtml + AddOutputFilter INCLUDES .shtml + + +# +# Specify a default charset for all content served; this enables +# interpretation of all content as UTF-8 by default. To use the +# default browser choice (ISO-8859-1), or to allow the META tags +# in HTML content to override this choice, comment out this +# directive: +# +AddDefaultCharset UTF-8 + + + # + # The mod_mime_magic module allows the server to use various hints from the + # contents of the file itself to determine its type. The MIMEMagicFile + # directive tells the module where the hint definitions are located. + # + MIMEMagicFile conf/magic + + +# +# Customizable error responses come in three flavors: +# 1) plain text 2) local redirects 3) external redirects +# +# Some examples: +#ErrorDocument 500 "The server made a boo boo." +#ErrorDocument 404 /missing.html +#ErrorDocument 404 "/cgi-bin/missing_handler.pl" +#ErrorDocument 402 http://www.example.com/subscription_info.html +# + +# +# EnableMMAP and EnableSendfile: On systems that support it, +# memory-mapping or the sendfile syscall may be used to deliver +# files. This usually improves server performance, but must +# be turned off when serving from networked-mounted +# filesystems or if support for these functions is otherwise +# broken on your system. +# Defaults if commented: EnableMMAP On, EnableSendfile Off +# +#EnableMMAP off +EnableSendfile on + +# Supplemental configuration +# +# Load config files in the "/etc/httpd/conf.d" directory, if any. +IncludeOptional conf.d/*.conf diff --git a/httpd.conf.xml b/httpd.conf.xml new file mode 100644 index 0000000..13e5d69 --- /dev/null +++ b/httpd.conf.xml @@ -0,0 +1,259 @@ + + + + + + + httpd.conf + httpd + AuthorOrtonJoejorton@redhat.com + + + + httpd.conf + 5 + + + + httpd.conf + Configuration files for httpd + + + + + /etc/httpd/conf/httpd.conf, + /etc/httpd/conf.modules.d, + /etc/httpd/conf.d + + + + + Description + + The main configuration file for the httpd daemon is + /etc/httpd/conf/httpd.conf. The syntax of + this file is described at , and + the full set of available directives is listed at . + + + + Configuration structure + + The main configuration file + (httpd.conf) sets up various defaults and + includes configuration files from two directories - + /etc/httpd/conf.modules.d and + /etc/httpd/conf.d. Packages containing + loadable modules (like ) place files + in the conf.modules.d directory with the + appropriate directive so that module + is loaded by default. + + Some notable configured defaults are: + + + + + The default document root from which content + is served. + + + + The daemon listens on TCP port 80. + + + + Error messages are logged to + @LOGDIR@/error_log. + + + + CGI scripts are served via the URL-path . + + + + + To remove any of the default configuration provided in + separate files covered below, replace that file with an empty + file rather than removing it from the filesystem, otherwise it + may be restored to the original when the package which provides + it is upgraded. + + + + + MPM configuration + + The configuration file at + /etc/httpd/conf.modules.d/00-mpm.conf is + used to select the multi-processing module (MPM), which governs + how httpd divides work between processes + and/or threads at run-time. Exactly one + directive must be uncommented in + this file; by default the MPM is enabled. + For more information on MPMs, see . + + If using the prefork MPM, the + "httpd_graceful_shutdown" SELinux boolean should also be + enabled, since with this MPM, httpd needs to establish TCP + connections to local ports to successfully complete a graceful + restart or shutdown. This boolean can be enabled by running the + command: semanage boolean -m --on + httpd_graceful_shutdown + + + + Module configuration files + + Module configuration files are provided in the + /etc/httpd/conf.modules.d/ directory. + Filenames in this directory are by convention prefixed with two + digit numeric prefix to ensure they are processed in the desired + order. Core modules provided with the httpd + package are loaded by files with a prefix + to ensure these load first. Only filenames with a + suffix in this directory will be + processed. + + Other provided configuration files are listed below. + + + + /etc/httpd/conf.modules.d/00-base.conf + The set of core modules included with + httpd which are all loaded by + default. + + + + /etc/httpd/conf.modules.d/00-optional.conf + The set of non-core modules included with + httpd which are not + loaded by default. + + + + + /etc/httpd/conf.modules.d/00-systemd.conf + This file loads + which is necessary for the correct operation of the + httpd.service systemd unit, and should + not be removed or disabled. + + + + + + + Other configuration files + + Default module configuration files and site-specific + configuration files are loaded from the + /etc/httpd/conf.d/ directory. Only files + with a suffix will be loaded. The + following files are provided: + + + + /etc/httpd/conf.d/userdir.conf + This file gives an example configuration for + to map URLs such as + to + /home/jim/public_html/. Userdir mapping + is disabled by default. + + + + /etc/httpd/conf.d/autoindex.conf + This file provides the default configuration + for which generates HTML + directory listings when enabled. It also makes file icon + image files available at the + URL-path. + + + + /etc/httpd/conf.d/welcome.conf + This file enables a "welcome page" at + if no content is present + in the default documentation root + /var/www/html. + + + + /etc/httpd/conf.d/ssl.conf (present only if is installed) + This file configures a TLS + listening on port + . If the default configuration is used, + the referenced test certificate and private key are + generated the first time httpd.service is + started; see + httpd-init.service8 + for more information. + + + + + + + Instantiated services + + As an alternative to (or in addition to) the + httpd.service unit, the instantiated template + service httpd@.service unit file can be used, + which starts httpd using a different + configuration file to the default. For example, + systemctl start httpd@foobar.service will + start httpd using the configuration file + /etc/httpd/conf/foobar.conf. See httpd@.service8 for more information. + + + + + Files + + + /etc/httpd/conf/httpd.conf, + /etc/httpd/conf.d, + /etc/httpd/conf.modules.d + + + + + See also + + + httpd8, + httpd.service8, + , + + + + + + + diff --git a/httpd.logrotate b/httpd.logrotate new file mode 100644 index 0000000..c5a008c --- /dev/null +++ b/httpd.logrotate @@ -0,0 +1,11 @@ +# Note that logs are not compressed unless "compress" is configured, +# which can be done either here or globally in /etc/logrotate.conf. +/var/log/httpd/*log { + missingok + notifempty + sharedscripts + delaycompress + postrotate + /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true + endscript +} diff --git a/httpd.service b/httpd.service new file mode 100644 index 0000000..6ff4e8b --- /dev/null +++ b/httpd.service @@ -0,0 +1,32 @@ +# See httpd.service(8) for more information on using the httpd service. + +# Modifying this file in-place is not recommended, because changes +# will be overwritten during package upgrades. To customize the +# behaviour, run "systemctl edit httpd" to create an override unit. + +# For example, to pass additional options (such as -D definitions) to +# the httpd binary at startup, create an override unit (as is done by +# systemctl edit) and enter the following: + +# [Service] +# Environment=OPTIONS=-DMY_DEFINE + +[Unit] +Description=The Apache HTTP Server +Wants=httpd-init.service +After=network.target remote-fs.target nss-lookup.target httpd-init.service +Documentation=man:httpd.service(8) + +[Service] +Type=notify +Environment=LANG=C + +ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND +ExecReload=/usr/sbin/httpd $OPTIONS -k graceful +# Send SIGWINCH for graceful stop +KillSignal=SIGWINCH +KillMode=mixed +PrivateTmp=true + +[Install] +WantedBy=multi-user.target diff --git a/httpd.service.xml b/httpd.service.xml new file mode 100644 index 0000000..243ce1e --- /dev/null +++ b/httpd.service.xml @@ -0,0 +1,355 @@ + + + + + + + httpd systemd units + httpd + AuthorOrtonJoejorton@redhat.com + + + + httpd.service + 8 + + + + httpd.service + httpd@.service + httpd.socket + httpd-init.service + httpd unit files for systemd + + + + + /usr/lib/systemd/system/httpd.service, + /usr/lib/systemd/system/httpd@.service, + /usr/lib/systemd/system/httpd-init.service, + /usr/lib/systemd/system/httpd.socket + + + + + Description + + This manual page describes the systemd + unit files used to integrate the httpd daemon + with systemd. Two main unit files are + available: httpd.service allows the + httpd daemon to be run as a system service, and + httpd.socket allows httpd to be started via + socket-based activation. Most systems will use + httpd.service. + + The apachectl command has been modified + to invoke systemctl for most uses, so for + example, running apachectl start is equivalent + to running systemctl start httpd.service. This + ensures that the running httpd daemon is tracked and managed by + systemd. In contrast, running + httpd directly from a root shell will start the + service outside of systemd; in this case, + default security restrictions described below (including, but not + limited to, SELinux) will not be enforced. + + + Changing default behaviour + + To change the default behaviour of the httpd service, an + over-ride file should be created, rather + than changing + /usr/lib/systemd/system/httpd.service + directly, since such changes would be lost over package + upgrades. Running systemctl edit + httpd.service or systemctl edit + httpd.socket as root will create a drop-in file (in + the former case, in + /etc/systemd/system/httpd.service.d) which + over-rides the system defaults. + + For example, to set the + environment variable for the daemon, run systemctl edit + httpd.service and enter: + + [Service] +Environment=LD_LIBRARY_PATH=/opt/vendor/lib + + + + Starting the service at boot time + + The httpd.service and httpd.socket units are + disabled by default. To start the httpd + service at boot time, run: systemctl enable + httpd.service. In the default configuration, the + httpd daemon will accept connections on port 80 (and, if mod_ssl + is installed, TLS connections on port 443) for any configured + IPv4 or IPv6 address. + + If httpd is configured to depend on any specific IP + address (for example, with a "Listen" directive) which may only + become available during start-up, or if httpd depends on other + services (such as a database daemon), the service + must be configured to ensure correct + start-up ordering. + + For example, to ensure httpd is only running after all + configured network interfaces are configured, create a drop-in + file (as described above) with the following section: + + [Unit] +After=network-online.target +Wants=network-online.target + + See + for more information on start-up ordering with systemd. + + + + + SSL/TLS certificate generation + + The httpd-init.service unit is provided + with the mod_ssl package. This oneshot unit automatically + creates a TLS server certificate and key (using a generated + self-signed CA certificate and key) for testing purposes before + httpd is started. To inhibit certificate generation, use + systemctl mask httpd-init.service after + installing mod_ssl, and adjust the mod_ssl configuration to use + an appropriate certificate and key. + + + + + Reloading and stopping the service + + When running systemctl reload + httpd.service, a graceful + restart is used, which sends a signal to the httpd parent + process to reload the configuration and re-open log files. Any + children with open connections at the time of reload will + terminate only once they have completed serving requests. This + prevents users of the server seeing errors (or potentially + losing data) due to the reload, but means some there is some + delay before any configuration changes take effect for all + users. + + Similarly, a graceful stop is used + when systemctl stop httpd.service is run, + which terminates the server only once active connections have + been processed. + + To "ungracefully" stop the server without waiting for + requests to complete, use systemctl kill + --kill-who=main httpd; similarly to "ungracefully" + reload the configuration, use systemctl kill + --kill-who=main --signal=HUP httpd. + + + + Automated service restarts + + System packages (including the httpd package itself) may + restart the httpd service automatically after packages are + upgraded, installed, or removed. This is done using the + systemctl try-restart httpd.service, which + stops then starts the service if it is running. + + To disable automatic restarts, create the file + /etc/sysconfig/httpd-disable-posttrans. + When httpd interfaces are added in an update, + it may not be safe to reload a running + service after upgrading, if updated modules require interfaces + only available in the updated httpd. It is recommended to allow + automatic restarts for this reason. + + + + Changing the default MPM (Multi-Processing Module) + + httpd offers a choice of multi-processing modules (MPMs), + which can be configured in + /etc/httpd/conf.modules.d/00-mpm.conf. + See + httpd.conf5 + for more information on changing the MPM. + + + + systemd integration and mod_systemd + + The httpd service uses the systemd + service type. The mod_systemd module must be + loaded (as in the default configuration) for this to work + correctly - the service will fail if this module is not + loaded. mod_systemd also makes worker and + request statistics available when running systemctl status + httpd. See + systemd.exec5 + for more information on systemd service types. + + + + Security and SELinux + + The default SELinux policy restricts the httpd service in + various ways. For example, the default policy limits the ports + to which httpd can bind (using the Listen + directive), which parts of the filesystem can be accessed, and + whether outgoing TCP connections are possible. Many of these + restrictions can be relaxed or adjusted by using + semanage to change booleans or other + types. See + httpd_selinux8 + for more information. + + The httpd service enables PrivateTmp + by default. The /tmp and + /var/tmp directories available within the + httpd process (and CGI scripts, etc) are not shared by other + processes. See + systemd.exec5 + for more information. + + + + + Logging and log file rotation + + The httpd daemon is configured to log + to the /var/log/httpd directory by default, + and a drop-in for logrotate is provided at + /etc/logrotate.d/httpd to enable log file + rotation. The httpd.service systemd unit is + reloaded after a logrotate run. + + Log file compression is not enabled by default; since + httpd can continue writing to open log files + for some time after a reload (graceful restart), if compression + is enabled the delaycompress option must be + present (as in the default) to delay compression of log files to + a later rotation run. + + + + Socket activation + + Socket activation (see + systemd.socket5 + for more information) can be used with httpd + by enabling the httpd.socket unit. The + httpd listener configuration must exactly + match the ListenStream options configured for + the httpd.socket unit. The default + httpd.socket has a + ListenStream=80 and, if mod_ssl is installed, + ListenStream=443 by a drop-in file. If + additional Listen directives are added to the + httpd configuration, corresponding + ListenStream options should be added via + drop-in files, for example via systemctl edit + httpd.socket. + + If using socket activation with httpd, only one listener + on any given TCP port is supported; a configuration with both + "Listen 127.0.0.1:80" and "Listen + 192.168.1.2:80" will not work. + + + + Instantiated services + + The httpd@.service unit is a template + for creating instantiated services. An instance of this unit + will be started using the configuration file + /etc/httpd/conf/INSTANCE.conf, where + INSTANCE is replaced with the instance + name. For example, systemctl start + httpd@foobar.service will start httpd using the + configuration file + /etc/httpd/conf/foobar.conf. The + environment variable is set to + the instance name by the unit and is available for use within + the configuration file. + + To allow multiple instances of httpd to run + simultaneously, a number of configuration directives must be + changed, such as PidFile and + DefaultRuntimeDir to pick non-conflicting + paths, and Listen to choose different ports. + The example configuration file + /usr/share/doc/httpd/instance.conf + demonstrates how to make such changes using the + variable. + + It can be useful to configure instances of + httpd@.service to reload when + httpd.service is reloaded; for example, + logrotate will reload only + httpd.service when logs are rotated. If this + behaviour is required, create a drop-in file for the instance as + follows: + + [Unit] +ReloadPropagatedFrom=httpd.service + + As with normal units, drop-in files for instances can be created + using systemctl edit, e.g. systemctl edit + httpd@foobar.service. + + + + + + Files + + /usr/lib/systemd/system/httpd.service, + /usr/lib/systemd/system/httpd.socket, + /usr/lib/systemd/system/httpd@.service, + /etc/systemd/systemd/httpd.service.d + + + + See also + + + httpd8, + httpd.conf5, + systemd1, + systemctl1, + systemd.service5, + systemd.exec5, + systemd.socket5, + httpd_selinux8, + semanage8, + logrotate8 + + + + + + diff --git a/httpd.socket b/httpd.socket new file mode 100644 index 0000000..074695e --- /dev/null +++ b/httpd.socket @@ -0,0 +1,13 @@ +# See httpd.socket(8) for more information on using the httpd service. + +[Unit] +Description=Apache httpd Server Socket +Documentation=man:httpd.socket(8) + +[Socket] +ListenStream=80 +NoDelay=true +DeferAcceptSec=30 + +[Install] +WantedBy=sockets.target diff --git a/httpd.spec b/httpd.spec new file mode 100644 index 0000000..3d1ba7c --- /dev/null +++ b/httpd.spec @@ -0,0 +1,1527 @@ +%define contentdir %{_datadir}/httpd +%define docroot /var/www +%define suexec_caller apache +%define mmn 20120211 +%define mmnisa %{mmn}%{__isa_name}%{__isa_bits} +%define vstring %(source /etc/os-release; echo ${REDHAT_SUPPORT_PRODUCT}) +%if 0%{?fedora} > 26 || 0%{?rhel} > 7 +%global mpm event +%else +%global mpm prefork +%endif + +Summary: Apache HTTP Server +Name: httpd +Version: 2.4.46 +Release: 4%{?dist} +URL: https://httpd.apache.org/ +Source0: https://www.apache.org/dist/httpd/httpd-%{version}.tar.bz2 +Source1: https://www.apache.org/dist/httpd/httpd-%{version}.tar.bz2.asc +# gpg key file downloaded and verified by luhliarik +# https://httpd.apache.org/dev/verification.html +Source2: https://dist.apache.org/repos/dist/release/httpd/KEYS +Source3: httpd.logrotate +Source4: instance.conf +Source5: httpd-ssl-pass-dialog +Source6: httpd.tmpfiles +Source7: httpd.service +Source8: action-graceful.sh +Source9: action-configtest.sh +Source10: server-status.conf +Source11: httpd.conf +Source12: 00-base.conf +Source13: 00-mpm.conf +Source14: 00-lua.conf +Source15: 01-cgi.conf +Source16: 00-dav.conf +Source17: 00-proxy.conf +Source18: 00-ssl.conf +Source19: 01-ldap.conf +Source20: 00-proxyhtml.conf +Source21: userdir.conf +Source22: ssl.conf +Source23: welcome.conf +Source24: manual.conf +Source25: 00-systemd.conf +Source26: 01-session.conf +Source27: 10-listen443.conf +Source28: httpd.socket +Source29: 00-optional.conf +Source30: README.confd +Source31: README.confmod +Source32: httpd.service.xml +Source33: htcacheclean.service.xml +Source34: httpd.conf.xml +Source40: htcacheclean.service +Source41: htcacheclean.sysconf +Source42: httpd-init.service +Source43: httpd-ssl-gencerts +Source44: httpd@.service +Source45: config.layout +Source46: apachectl.sh +Source47: apachectl.xml + +# build/scripts patches +Patch2: httpd-2.4.43-apxs.patch +Patch3: httpd-2.4.43-deplibs.patch +# Needed for socket activation and mod_systemd patch +Patch19: httpd-2.4.43-detect-systemd.patch +# Features/functional changes +Patch21: httpd-2.4.43-r1842929+.patch +Patch22: httpd-2.4.43-mod_systemd.patch +Patch23: httpd-2.4.43-export.patch +Patch24: httpd-2.4.43-corelimit.patch +Patch25: httpd-2.4.43-selinux.patch +Patch26: httpd-2.4.43-gettid.patch +Patch27: httpd-2.4.43-icons.patch +Patch30: httpd-2.4.43-cachehardmax.patch +Patch31: httpd-2.4.43-sslmultiproxy.patch +Patch34: httpd-2.4.43-socket-activation.patch +Patch38: httpd-2.4.43-sslciphdefault.patch +Patch39: httpd-2.4.43-sslprotdefault.patch +Patch40: httpd-2.4.43-r1861269.patch +Patch41: httpd-2.4.43-r1861793+.patch +Patch42: httpd-2.4.43-r1828172+.patch +Patch43: httpd-2.4.43-sslcoalesce.patch +Patch44: httpd-2.4.46-lua-resume.patch + +# Bug fixes +# https://bugzilla.redhat.com/show_bug.cgi?id=1397243 +Patch60: httpd-2.4.43-enable-sslv3.patch +Patch62: httpd-2.4.43-r1870095+.patch + +# Security fixes + +License: ASL 2.0 +BuildRequires: gcc, autoconf, pkgconfig, findutils, xmlto +BuildRequires: perl-interpreter, perl-generators, systemd-devel +BuildRequires: zlib-devel, libselinux-devel, lua-devel, brotli-devel +BuildRequires: apr-devel >= 1.5.0, apr-util-devel >= 1.5.0, pcre-devel >= 5.0 +BuildRequires: gnupg2 +Requires: /etc/mime.types, system-logos-httpd +Provides: webserver +Provides: mod_dav = %{version}-%{release}, httpd-suexec = %{version}-%{release} +Provides: httpd-mmn = %{mmn}, httpd-mmn = %{mmnisa} +Requires: httpd-tools = %{version}-%{release} +Requires: httpd-filesystem = %{version}-%{release} +Requires: mod_http2 +Requires(pre): httpd-filesystem +Requires(preun): systemd-units +Requires(postun): systemd-units +Requires(post): systemd-units +Conflicts: apr < 1.5.0-1 +Provides: mod_proxy_uwsgi = %{version}-%{release} +Obsoletes: mod_proxy_uwsgi < 2.0.17.1-2 + +%description +The Apache HTTP Server is a powerful, efficient, and extensible +web server. + +%package devel +Summary: Development interfaces for the Apache HTTP Server +Requires: apr-devel, apr-util-devel, pkgconfig +Requires: httpd = %{version}-%{release} + +%description devel +The httpd-devel package contains the APXS binary and other files +that you need to build Dynamic Shared Objects (DSOs) for the +Apache HTTP Server. + +If you are installing the Apache HTTP Server and you want to be +able to compile or develop additional modules for Apache, you need +to install this package. + +%package manual +Summary: Documentation for the Apache HTTP Server +Requires: httpd = %{version}-%{release} +BuildArch: noarch + +%description manual +The httpd-manual package contains the complete manual and +reference guide for the Apache HTTP Server. The information can +also be found at https://httpd.apache.org/docs/2.4/. + +%package filesystem +Summary: The basic directory layout for the Apache HTTP Server +BuildArch: noarch +Requires(pre): /usr/sbin/useradd + +%description filesystem +The httpd-filesystem package contains the basic directory layout +for the Apache HTTP Server including the correct permissions +for the directories. + +%package tools +Summary: Tools for use with the Apache HTTP Server + +%description tools +The httpd-tools package contains tools which can be used with +the Apache HTTP Server. + +%package -n mod_ssl +Summary: SSL/TLS module for the Apache HTTP Server +Epoch: 1 +BuildRequires: openssl-devel +Requires(pre): httpd-filesystem +Requires: httpd = 0:%{version}-%{release}, httpd-mmn = %{mmnisa} +Requires: sscg >= 2.2.0, /usr/bin/hostname +# Require an OpenSSL which supports PROFILE=SYSTEM +Conflicts: openssl-libs < 1:1.0.1h-4 + +%description -n mod_ssl +The mod_ssl module provides strong cryptography for the Apache Web +server via the Secure Sockets Layer (SSL) and Transport Layer +Security (TLS) protocols. + +%package -n mod_proxy_html +Summary: HTML and XML content filters for the Apache HTTP Server +Requires: httpd = 0:%{version}-%{release}, httpd-mmn = %{mmnisa} +BuildRequires: libxml2-devel +Epoch: 1 +Obsoletes: mod_proxy_html < 1:2.4.1-2 + +%description -n mod_proxy_html +The mod_proxy_html and mod_xml2enc modules provide filters which can +transform and modify HTML and XML content. + +%package -n mod_ldap +Summary: LDAP authentication modules for the Apache HTTP Server +Requires: httpd = 0:%{version}-%{release}, httpd-mmn = %{mmnisa} +Requires: apr-util-ldap + +%description -n mod_ldap +The mod_ldap and mod_authnz_ldap modules add support for LDAP +authentication to the Apache HTTP Server. + +%package -n mod_session +Summary: Session interface for the Apache HTTP Server +Requires: httpd = 0:%{version}-%{release}, httpd-mmn = %{mmnisa} + +%description -n mod_session +The mod_session module and associated backends provide an abstract +interface for storing and accessing per-user session data. + +%prep +%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}' +%setup -q +%patch2 -p1 -b .apxs +%patch3 -p1 -b .deplibs + +%patch19 -p1 -b .detectsystemd + +%patch21 -p1 -b .r1842929+ +%patch22 -p1 -b .mod_systemd +%patch23 -p1 -b .export +%patch24 -p1 -b .corelimit +%patch25 -p1 -b .selinux +%patch26 -p1 -b .gettid +%patch27 -p1 -b .icons +%patch30 -p1 -b .cachehardmax +#patch31 -p1 -b .sslmultiproxy +%patch34 -p1 -b .socketactivation +%patch38 -p1 -b .sslciphdefault +%patch39 -p1 -b .sslprotdefault +%patch40 -p1 -b .r1861269 +%patch41 -p1 -b .r1861793+ +%patch42 -p1 -b .r1828172+ +%patch43 -p1 -b .sslcoalesce +%patch44 -p1 -b .luaresume + +%patch60 -p1 -b .enable-sslv3 +%patch62 -p1 -b .r1870095 + +# Patch in the vendor string +sed -i '/^#define PLATFORM/s/Unix/%{vstring}/' os/unix/os.h + +# Prevent use of setcap in "install-suexec-caps" target. +sed -i '/suexec/s,setcap ,echo Skipping setcap for ,' Makefile.in + +# Example conf for instances +cp $RPM_SOURCE_DIR/instance.conf . +sed < $RPM_SOURCE_DIR/httpd.conf >> instance.conf ' +0,/^ServerRoot/d; +/# Supplemental configuration/,$d +/^ *CustomLog .logs/s,logs/,logs/${HTTPD_INSTANCE}_, +/^ *ErrorLog .logs/s,logs/,logs/${HTTPD_INSTANCE}_, +' +touch -r $RPM_SOURCE_DIR/instance.conf instance.conf +cp -p $RPM_SOURCE_DIR/server-status.conf server-status.conf + +# Safety check: prevent build if defined MMN does not equal upstream MMN. +vmmn=`echo MODULE_MAGIC_NUMBER_MAJOR | cpp -include include/ap_mmn.h | sed -n '/^2/p'` +if test "x${vmmn}" != "x%{mmn}"; then + : Error: Upstream MMN is now ${vmmn}, packaged MMN is %{mmn} + : Update the mmn macro and rebuild. + exit 1 +fi + +# Provide default layout +cp $RPM_SOURCE_DIR/config.layout . + +sed ' +s,@MPM@,%{mpm},g +s,@DOCROOT@,%{docroot},g +s,@LOGDIR@,%{_localstatedir}/log/httpd,g +' < $RPM_SOURCE_DIR/httpd.conf.xml \ + > httpd.conf.xml + +xmlto man ./httpd.conf.xml +xmlto man $RPM_SOURCE_DIR/htcacheclean.service.xml +xmlto man $RPM_SOURCE_DIR/httpd.service.xml + +# apachectl.xml => apachectl.8 +xmlto man %{SOURCE47} + +: Building with MMN %{mmn}, MMN-ISA %{mmnisa} +: Default MPM is %{mpm}, vendor string is '%{vstring}' + +%build +# forcibly prevent use of bundled apr, apr-util, pcre +rm -rf srclib/{apr,apr-util,pcre} + +# regenerate configure scripts +autoheader && autoconf || exit 1 + +# Before configure; fix location of build dir in generated apxs +%{__perl} -pi -e "s:\@exp_installbuilddir\@:%{_libdir}/httpd/build:g" \ + support/apxs.in + +export CFLAGS=$RPM_OPT_FLAGS +export LDFLAGS="-Wl,-z,relro,-z,now" + +# Hard-code path to links to avoid unnecessary builddep +export LYNX_PATH=/usr/bin/links + +# Build the daemon +./configure \ + --prefix=%{_sysconfdir}/httpd \ + --exec-prefix=%{_prefix} \ + --bindir=%{_bindir} \ + --sbindir=%{_sbindir} \ + --mandir=%{_mandir} \ + --libdir=%{_libdir} \ + --sysconfdir=%{_sysconfdir}/httpd/conf \ + --includedir=%{_includedir}/httpd \ + --libexecdir=%{_libdir}/httpd/modules \ + --datadir=%{contentdir} \ + --enable-layout=Fedora \ + --with-installbuilddir=%{_libdir}/httpd/build \ + --enable-mpms-shared=all \ + --with-apr=%{_prefix} --with-apr-util=%{_prefix} \ + --enable-suexec --with-suexec \ + --enable-suexec-capabilities \ + --with-suexec-caller=%{suexec_caller} \ + --with-suexec-docroot=%{docroot} \ + --without-suexec-logfile \ + --with-suexec-syslog \ + --with-suexec-bin=%{_sbindir}/suexec \ + --with-suexec-uidmin=1000 --with-suexec-gidmin=1000 \ + --with-brotli \ + --enable-pie \ + --with-pcre \ + --enable-mods-shared=all \ + --enable-ssl --with-ssl --disable-distcache \ + --enable-proxy --enable-proxy-fdpass \ + --enable-cache \ + --enable-disk-cache \ + --enable-ldap --enable-authnz-ldap \ + --enable-cgid --enable-cgi \ + --enable-cgid-fdpassing \ + --enable-authn-anon --enable-authn-alias \ + --enable-systemd \ + --disable-imagemap --disable-file-cache \ + --disable-http2 \ + --disable-md \ + $* +%make_build + +%install +rm -rf $RPM_BUILD_ROOT + +%make_install + +# Install systemd service files +mkdir -p $RPM_BUILD_ROOT%{_unitdir} +for s in httpd.service htcacheclean.service httpd.socket \ + httpd@.service httpd-init.service; do + install -p -m 644 $RPM_SOURCE_DIR/${s} \ + $RPM_BUILD_ROOT%{_unitdir}/${s} +done + +# install conf file/directory +mkdir $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.d \ + $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.modules.d +install -m 644 $RPM_SOURCE_DIR/README.confd \ + $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.d/README +install -m 644 $RPM_SOURCE_DIR/README.confmod \ + $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.modules.d/README +for f in 00-base.conf 00-mpm.conf 00-lua.conf 01-cgi.conf 00-dav.conf \ + 00-proxy.conf 00-ssl.conf 01-ldap.conf 00-proxyhtml.conf \ + 01-ldap.conf 00-systemd.conf 01-session.conf 00-optional.conf; do + install -m 644 -p $RPM_SOURCE_DIR/$f \ + $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.modules.d/$f +done + +sed -i '/^#LoadModule mpm_%{mpm}_module /s/^#//' \ + $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.modules.d/00-mpm.conf +touch -r $RPM_SOURCE_DIR/00-mpm.conf \ + $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.modules.d/00-mpm.conf + +# install systemd override drop directory +# Web application packages can drop snippets into this location if +# they need ExecStart[pre|post]. +mkdir $RPM_BUILD_ROOT%{_unitdir}/httpd.service.d +mkdir $RPM_BUILD_ROOT%{_unitdir}/httpd.socket.d + +install -m 644 -p $RPM_SOURCE_DIR/10-listen443.conf \ + $RPM_BUILD_ROOT%{_unitdir}/httpd.socket.d/10-listen443.conf + +for f in welcome.conf ssl.conf manual.conf userdir.conf; do + install -m 644 -p $RPM_SOURCE_DIR/$f \ + $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.d/$f +done + +# Split-out extra config shipped as default in conf.d: +for f in autoindex; do + install -m 644 docs/conf/extra/httpd-${f}.conf \ + $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.d/${f}.conf +done + +# Extra config trimmed: +rm -v docs/conf/extra/httpd-{ssl,userdir}.conf + +rm $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf/*.conf +install -m 644 -p $RPM_SOURCE_DIR/httpd.conf \ + $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf/httpd.conf + +mkdir $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig +install -m 644 -p $RPM_SOURCE_DIR/htcacheclean.sysconf \ + $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/htcacheclean + +# tmpfiles.d configuration +mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib/tmpfiles.d +install -m 644 -p $RPM_SOURCE_DIR/httpd.tmpfiles \ + $RPM_BUILD_ROOT%{_prefix}/lib/tmpfiles.d/httpd.conf + +# Other directories +mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/httpd \ + $RPM_BUILD_ROOT/run/httpd/htcacheclean + +# Substitute in defaults which are usually done (badly) by "make install" +sed -i \ + "/^DavLockDB/d; + s,@@ServerRoot@@/user.passwd,/etc/httpd/conf/user.passwd,; + s,@@ServerRoot@@/docs,%{docroot},; + s,@@ServerRoot@@,%{docroot},; + s,@@Port@@,80,;" \ + docs/conf/extra/*.conf + +# Set correct path for httpd binary in apachectl script +sed 's,@HTTPDBIN@,%{_sbindir}/httpd,g' $RPM_SOURCE_DIR/apachectl.sh \ + > apachectl.sh + +# Create cache directory +mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/cache/httpd \ + $RPM_BUILD_ROOT%{_localstatedir}/cache/httpd/proxy \ + $RPM_BUILD_ROOT%{_localstatedir}/cache/httpd/ssl + +# Make the MMN accessible to module packages +echo %{mmnisa} > $RPM_BUILD_ROOT%{_includedir}/httpd/.mmn +mkdir -p $RPM_BUILD_ROOT%{_rpmconfigdir}/macros.d +cat > $RPM_BUILD_ROOT%{_rpmconfigdir}/macros.d/macros.httpd < $RPM_BUILD_ROOT%{_mandir}/man8/httpd.8 + +# Make ap_config_layout.h libdir-agnostic +sed -i '/.*DEFAULT_..._LIBEXECDIR/d;/DEFAULT_..._INSTALLBUILDDIR/d' \ + $RPM_BUILD_ROOT%{_includedir}/httpd/ap_config_layout.h + +# Fix path to instdso in special.mk +sed -i '/instdso/s,top_srcdir,top_builddir,' \ + $RPM_BUILD_ROOT%{_libdir}/httpd/build/special.mk + +# vendor-apxs uses an unsanitized config_vars.mk which may +# have dependencies on redhat-rpm-config. apxs uses the +# config_vars.mk with a sanitized config_vars.mk +cp -p $RPM_BUILD_ROOT%{_libdir}/httpd/build/config_vars.mk \ + $RPM_BUILD_ROOT%{_libdir}/httpd/build/vendor_config_vars.mk + +# Sanitize CFLAGS in standard config_vars.mk +sed '/^CFLAGS/s,=.*$,= -O2 -g -Wall,' \ + -i $RPM_BUILD_ROOT%{_libdir}/httpd/build/config_vars.mk + +sed 's/config_vars.mk/vendor_config_vars.mk/' \ + $RPM_BUILD_ROOT%{_bindir}/apxs \ + > $RPM_BUILD_ROOT%{_libdir}/httpd/build/vendor-apxs +touch -r $RPM_BUILD_ROOT%{_bindir}/apxs \ + $RPM_BUILD_ROOT%{_libdir}/httpd/build/vendor-apxs +chmod 755 $RPM_BUILD_ROOT%{_libdir}/httpd/build/vendor-apxs + +# Remove unpackaged files +rm -vf \ + $RPM_BUILD_ROOT%{_libdir}/*.exp \ + $RPM_BUILD_ROOT/etc/httpd/conf/mime.types \ + $RPM_BUILD_ROOT%{_libdir}/httpd/modules/*.exp \ + $RPM_BUILD_ROOT%{_libdir}/httpd/build/config.nice \ + $RPM_BUILD_ROOT%{_bindir}/{ap?-config,dbmmanage} \ + $RPM_BUILD_ROOT%{_sbindir}/{checkgid,envvars*} \ + $RPM_BUILD_ROOT%{contentdir}/htdocs/* \ + $RPM_BUILD_ROOT%{_mandir}/man1/dbmmanage.* \ + $RPM_BUILD_ROOT%{contentdir}/cgi-bin/* + +rm -rf $RPM_BUILD_ROOT/etc/httpd/conf/{original,extra} + +%pre filesystem +getent group apache >/dev/null || groupadd -g 48 -r apache +getent passwd apache >/dev/null || \ + useradd -r -u 48 -g apache -s /sbin/nologin \ + -d %{contentdir} -c "Apache" apache +exit 0 + +%post +%systemd_post httpd.service htcacheclean.service httpd.socket + +%preun +%systemd_preun httpd.service htcacheclean.service httpd.socket + +%postun +%systemd_postun httpd.service htcacheclean.service httpd.socket + +%posttrans +test -f /etc/sysconfig/httpd-disable-posttrans || \ + /bin/systemctl try-restart --no-block httpd.service htcacheclean.service >/dev/null 2>&1 || : + +%check +make -C server exports.o +nm --defined httpd > exports-actual.list +set +x +rv=0 +nm --defined-only server/exports.o | \ + sed -n '/ap_hack_/{s/.* ap_hack_//;/^ap[ru]/d;p;}' | \ + while read sym; do + if ! grep -q " "$sym\$ exports-actual.list; then + echo ERROR: Symbol $sym missing in httpd exports + rv=1 + fi + done +if [ $rv -eq 0 ]; then + echo PASS: Symbol export list verified. +fi +# Check the built modules are all PIC +if readelf -d $RPM_BUILD_ROOT%{_libdir}/httpd/modules/*.so | grep TEXTREL; then + echo FAIL: Modules contain non-relocatable code + rv=1 +else + echo PASS: No non-relocatable code in module builds +fi +# Ensure every mod_* that's built is loaded. +for f in $RPM_BUILD_ROOT%{_libdir}/httpd/modules/*.so; do + m=${f##*/} + if ! grep -q $m $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.modules.d/*.conf; then + echo FAIL: Module $m not configured. Disable it, or load it. + rv=1 + else + echo PASS: Module $m is configured and loaded. + fi +done +# Ensure every loaded mod_* is actually built +mods=`grep -h ^LoadModule $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.modules.d/*.conf | sed 's,.*modules/,,'` +for m in $mods; do + f=$RPM_BUILD_ROOT%{_libdir}/httpd/modules/${m} + if ! test -x $f; then + echo FAIL: Module $m is configured but not built. + rv=1 + else + echo PASS: Loaded module $m is installed. + fi +done +set -x +exit $rv + +%files + +%doc ABOUT_APACHE README CHANGES LICENSE VERSIONING NOTICE +%doc docs/conf/extra/*.conf +%doc instance.conf server-status.conf + +%{_sysconfdir}/httpd/modules +%{_sysconfdir}/httpd/logs +%{_sysconfdir}/httpd/state +%{_sysconfdir}/httpd/run +%dir %{_sysconfdir}/httpd/conf +%config(noreplace) %{_sysconfdir}/httpd/conf/httpd.conf +%config(noreplace) %{_sysconfdir}/httpd/conf/magic + +%config(noreplace) %{_sysconfdir}/logrotate.d/httpd + +%config(noreplace) %{_sysconfdir}/httpd/conf.d/*.conf +%exclude %{_sysconfdir}/httpd/conf.d/ssl.conf +%exclude %{_sysconfdir}/httpd/conf.d/manual.conf + +%dir %{_sysconfdir}/httpd/conf.modules.d +%{_sysconfdir}/httpd/conf.modules.d/README +%config(noreplace) %{_sysconfdir}/httpd/conf.modules.d/*.conf +%exclude %{_sysconfdir}/httpd/conf.modules.d/00-ssl.conf +%exclude %{_sysconfdir}/httpd/conf.modules.d/00-proxyhtml.conf +%exclude %{_sysconfdir}/httpd/conf.modules.d/01-ldap.conf +%exclude %{_sysconfdir}/httpd/conf.modules.d/01-session.conf + +%config(noreplace) %{_sysconfdir}/sysconfig/htcacheclean +%{_prefix}/lib/tmpfiles.d/httpd.conf + +%dir %{_libexecdir}/initscripts/legacy-actions/httpd +%{_libexecdir}/initscripts/legacy-actions/httpd/* + +%{_sbindir}/ht* +%{_sbindir}/fcgistarter +%{_sbindir}/apachectl +%{_sbindir}/rotatelogs +%caps(cap_setuid,cap_setgid+pe) %attr(510,root,%{suexec_caller}) %{_sbindir}/suexec + +%dir %{_libdir}/httpd +%dir %{_libdir}/httpd/modules +%{_libdir}/httpd/modules/mod*.so +%exclude %{_libdir}/httpd/modules/mod_auth_form.so +%exclude %{_libdir}/httpd/modules/mod_ssl.so +%exclude %{_libdir}/httpd/modules/mod_*ldap.so +%exclude %{_libdir}/httpd/modules/mod_proxy_html.so +%exclude %{_libdir}/httpd/modules/mod_xml2enc.so +%exclude %{_libdir}/httpd/modules/mod_session*.so + +%dir %{contentdir}/error +%dir %{contentdir}/error/include +%dir %{contentdir}/noindex +%dir %{contentdir}/server-status +%{contentdir}/icons/* +%{contentdir}/error/README +%{contentdir}/error/*.var +%{contentdir}/error/include/*.html +%{contentdir}/noindex/index.html +%{contentdir}/server-status/* + +%attr(0710,root,apache) %dir /run/httpd +%attr(0700,apache,apache) %dir /run/httpd/htcacheclean +%attr(0700,root,root) %dir %{_localstatedir}/log/httpd +%attr(0700,apache,apache) %dir %{_localstatedir}/lib/httpd +%attr(0700,apache,apache) %dir %{_localstatedir}/cache/httpd +%attr(0700,apache,apache) %dir %{_localstatedir}/cache/httpd/proxy + +%{_mandir}/man8/* +%{_mandir}/man5/* +%exclude %{_mandir}/man8/httpd-init.* + +%{_unitdir}/httpd.service +%{_unitdir}/httpd@.service +%{_unitdir}/htcacheclean.service +%{_unitdir}/*.socket + +%files filesystem +%dir %{_sysconfdir}/httpd +%dir %{_sysconfdir}/httpd/conf.d +%{_sysconfdir}/httpd/conf.d/README +%dir %{docroot} +%dir %{docroot}/cgi-bin +%dir %{docroot}/html +%dir %{contentdir} +%dir %{contentdir}/icons +%attr(755,root,root) %dir %{_unitdir}/httpd.service.d +%attr(755,root,root) %dir %{_unitdir}/httpd.socket.d + +%files tools +%{_bindir}/* +%{_mandir}/man1/* +%doc LICENSE NOTICE +%exclude %{_bindir}/apxs +%exclude %{_mandir}/man1/apxs.1* + +%files manual +%{contentdir}/manual +%config(noreplace) %{_sysconfdir}/httpd/conf.d/manual.conf + +%files -n mod_ssl +%{_libdir}/httpd/modules/mod_ssl.so +%config(noreplace) %{_sysconfdir}/httpd/conf.modules.d/00-ssl.conf +%config(noreplace) %{_sysconfdir}/httpd/conf.d/ssl.conf +%attr(0700,apache,root) %dir %{_localstatedir}/cache/httpd/ssl +%{_unitdir}/httpd-init.service +%{_libexecdir}/httpd-ssl-pass-dialog +%{_libexecdir}/httpd-ssl-gencerts +%{_unitdir}/httpd.socket.d/10-listen443.conf +%{_mandir}/man8/httpd-init.* + +%files -n mod_proxy_html +%{_libdir}/httpd/modules/mod_proxy_html.so +%{_libdir}/httpd/modules/mod_xml2enc.so +%config(noreplace) %{_sysconfdir}/httpd/conf.modules.d/00-proxyhtml.conf + +%files -n mod_ldap +%{_libdir}/httpd/modules/mod_*ldap.so +%config(noreplace) %{_sysconfdir}/httpd/conf.modules.d/01-ldap.conf + +%files -n mod_session +%{_libdir}/httpd/modules/mod_session*.so +%{_libdir}/httpd/modules/mod_auth_form.so +%config(noreplace) %{_sysconfdir}/httpd/conf.modules.d/01-session.conf + +%files devel +%{_includedir}/httpd +%{_bindir}/apxs +%{_mandir}/man1/apxs.1* +%dir %{_libdir}/httpd/build +%{_libdir}/httpd/build/*.mk +%{_libdir}/httpd/build/*.sh +%{_libdir}/httpd/build/vendor-apxs +%{_rpmconfigdir}/macros.d/macros.httpd + +%changelog +* Thu Aug 27 2020 Joe Orton - 2.4.46-4 +- use make macros (Tom Stellard) + +* Thu Aug 27 2020 Joe Orton - 2.4.46-3 +- strip /usr/bin/apxs CFLAGS further + +* Thu Aug 27 2020 Joe Orton - 2.4.46-2 +- sanitize CFLAGS used by /usr/bin/apxs by default (#1873020) +- add $libdir/httpd/build/vendor-apxs which exposes full CFLAGS +- redefine _httpd_apxs RPM macro to use vendor-apxs + +* Tue Aug 25 2020 Lubos Uhliarik - 2.4.46-1 +- new version 2.4.46 +- remove obsolete parts of this spec file +- fix systemd detection patch + +* Tue Jul 28 2020 Fedora Release Engineering - 2.4.43-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Thu Jul 09 2020 Lubos Uhliarik - 2.4.43-6 +- fix macro in mod_lua for lua 4.5 + +* Thu Jul 09 2020 Lubos Uhliarik - 2.4.43-5 +- Remove %ghosted /etc/sysconfig/httpd file (#1850082) + +* Tue Jul 7 2020 Joe Orton - 2.4.43-4 +- use gettid() directly and use it for built-in ErrorLogFormat + +* Fri Apr 17 2020 Joe Orton - 2.4.43-3 +- mod_ssl: updated coalescing filter to improve TLS efficiency + +* Fri Apr 17 2020 Joe Orton - 2.4.43-2 +- mod_ssl: fix leak in OCSP stapling code (PR 63687, r1876548) +- mod_systemd: restore descriptive startup logging + +* Tue Mar 31 2020 Lubos Uhliarik - 2.4.43-1 +- new version 2.4.43 (#1819023) + +* Wed Jan 29 2020 Fedora Release Engineering - 2.4.41-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Mon Jan 20 2020 Joe Orton - 2.4.41-12 +- mod_systemd: fix timeouts on reload w/ExtendedStatus off (#1590877) + +* Mon Jan 6 2020 Joe Orton - 2.4.41-11 +- apachectl(8): update authors + +* Sat Dec 7 2019 FeRD (Frank Dana) - 2.4.41-10 +- apachectl: Add man page for Fedora version + +* Thu Nov 21 2019 Joe Orton - 2.4.41-9 +- mod_ssl: fix request body buffering w/TLSv1.3 PHA (#1775146) + +* Wed Nov 13 2019 Joe Orton - 2.4.41-8 +- apachectl: in graceful/graceful-stop, only signal main process (#1758798) + +* Mon Nov 11 2019 Lubos Uhliarik - 2.4.41-7 +- add automatic source tarball signature verification in %prep section + +* Fri Oct 4 2019 Joe Orton - 2.4.41-6 +- mod_cgid/mod_cgi: further upstream consolidation patches + +* Thu Oct 3 2019 Joe Orton - 2.4.41-5 +- mod_proxy_balancer: fix balancer-manager XSRF check (PR 63688) + +* Wed Oct 2 2019 Joe Orton - 2.4.41-4 +- mod_cgid: possible stdout timeout handling fix (#1757683) + +* Wed Sep 25 2019 Joe Orton - 2.4.41-3 +- mod_ssl: restore dependency on /usr/bin/hostname (#1135118) + +* Thu Sep 19 2019 Stephen Gallagher - 2.4.41-2 +- Use testpage from system-logos-httpd for proper branding + +* Thu Aug 15 2019 Joe Orton - 2.4.41-1 +- update to 2.4.41 + +* Thu Jul 25 2019 Fedora Release Engineering - 2.4.39-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Tue Jul 23 2019 Joe Orton - 2.4.39-12 +- drop /var/lib/dav directory, since mod_dav_fs uses statedir + +* Wed Jul 17 2019 Joe Orton - 2.4.39-11 +- mod_cgid: use fd passing to fix script stderr handling (#1591157) + +* Mon Jul 8 2019 Joe Orton - 2.4.39-10 +- htpasswd: add SHA-256/512 support +- apachectl: restore -V/-v/-t support (#1727434) + +* Fri Jun 21 2019 Joe Orton - 2.4.39-9 +- create instance-specific StateDir in httpd@.service, instance.conf + +* Thu Jun 20 2019 Joe Orton - 2.4.39-8 +- remove superfluous ap_hack_ symbols from httpd binary +- more verbose %%check section + +* Thu Jun 13 2019 Lubos Uhliarik - 2.4.39-7 +- remove bundled mod_md module + +* Thu Jun 13 2019 Joe Orton - 2.4.39-6 +- mod_ssl: fix "httpd -L" (etc) before httpd-init.service runs + +* Wed Jun 12 2019 Joe Orton - 2.4.39-5 +- fixes for StateDir directive (upstream r1857731, r1857731) + +* Thu May 02 2019 Lubos Uhliarik - 2.4.39-4 +- httpd dependency on initscripts is unspecified (#1705188) + +* Tue Apr 9 2019 Joe Orton - 2.4.39-3 +- fix statedir symlink to point to /var/lib/httpd (#1697662) +- mod_reqtimeout: fix default values regression (PR 63325) + +* Tue Apr 02 2019 Lubos Uhliarik - 2.4.39-2 +- update to 2.4.39 + +* Thu Feb 28 2019 Joe Orton - 2.4.38-6 +- apachectl: cleanup and replace script wholesale (#1641237) + * drop "apachectl fullstatus" support + * run systemctl with --no-pager option + * implement graceful&graceful-stop by signal directly +- run "httpd -t" from legacy action script + +* Tue Feb 05 2019 Lubos Uhliarik - 2.4.38-5 +- segmentation fault fix (FIPS) + +* Tue Feb 5 2019 Joe Orton - 2.4.38-4 +- use serverroot-relative statedir, rundir by default + +* Fri Feb 01 2019 Fedora Release Engineering - 2.4.38-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Wed Jan 23 2019 Lubos Uhliarik - 2.4.38-2 +- new version 2.4.38 (#1668125) + +* Mon Jan 14 2019 Björn Esser - 2.4.37-6 +- Rebuilt for libcrypt.so.2 (#1666033) + +* Thu Nov 22 2018 LuboÅ¡ Uhliarik - 2.4.37-5 +- Resolves: #1652678 - TLS connection allowed while all protocols are forbidden + +* Thu Nov 8 2018 Joe Orton - 2.4.37-4 +- add httpd.conf(5) (#1611361) + +* Wed Nov 07 2018 LuboÅ¡ Uhliarik - 2.4.37-3 +- Resolves: #1647241 - fix apachectl script + +* Wed Oct 31 2018 Joe Orton - 2.4.37-2 +- add DefaultStateDir/ap_state_dir_relative() +- mod_dav_fs: use state dir for default DAVLockDB +- mod_md: use state dir for default MDStoreDir + +* Wed Oct 31 2018 Joe Orton - 2.4.37-1 +- update to 2.4.37 + +* Wed Oct 31 2018 Joe Orton - 2.4.34-11 +- add htcacheclean.service(8) man page + +* Fri Sep 28 2018 Joe Orton - 2.4.34-10 +- apachectl: don't read /etc/sysconfig/httpd + +* Tue Sep 25 2018 Joe Orton - 2.4.34-9 +- fix build if OpenSSL built w/o SSLv3 support + +* Fri Sep 21 2018 Joe Orton - 2.4.34-8 +- comment-out SSLProtocol, SSLProxyProtocol from ssl.conf in + default configuration; now follow OpenSSL system default (#1468322) + +* Fri Sep 21 2018 Joe Orton - 2.4.34-7 +- mod_ssl: follow OpenSSL protocol defaults if SSLProtocol + is not configured (Rob Crittenden, #1618371) + +* Tue Aug 28 2018 LuboÅ¡ Uhliarik - 2.4.34-6 +- mod_ssl: enable SSLv3 and change behavior of "SSLProtocol All" + configuration (#1624777) + +* Tue Aug 21 2018 Joe Orton - 2.4.34-5 +- mod_ssl: further TLSv1.3 fix (#1619389) + +* Mon Aug 13 2018 Joe Orton - 2.4.34-4 +- mod_ssl: backport TLSv1.3 support changes from upstream (#1615059) + +* Fri Jul 20 2018 Joe Orton - 2.4.34-3 +- mod_ssl: fix OCSP regression (upstream r1555631) + +* Wed Jul 18 2018 Joe Orton - 2.4.34-2 +- update Obsoletes for mod_proxy_uswgi (#1599113) + +* Wed Jul 18 2018 Joe Orton - 2.4.34-1 +- update to 2.4.34 (#1601160) + +* Mon Jul 16 2018 Joe Orton - 2.4.33-10 +- don't block on service try-restart in posttrans scriptlet +- add Lua-based /server-status example page to docs +- obsoletes: and provides: for mod_proxy_uswgi (#1599113) + +* Fri Jul 13 2018 Fedora Release Engineering - 2.4.33-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Fri Jul 6 2018 Joe Orton - 2.4.33-8 +- add per-request memory leak fix (upstream r1833014) + +* Fri Jul 6 2018 Joe Orton - 2.4.33-7 +- mod_ssl: add PKCS#11 cert/key support (Anderson Sasaki) + +* Tue Jun 12 2018 Joe Orton - 2.4.33-6 +- mod_systemd: show bound ports in status and log to journal + at startup. + +* Thu Apr 19 2018 Joe Orton - 2.4.33-5 +- add httpd@.service; update httpd.service(8) and add new stub + +* Mon Apr 16 2018 Joe Orton - 2.4.33-4 +- mod_md: change hard-coded default MdStoreDir to state/md (#1563846) + +* Thu Apr 12 2018 Joe Orton - 2.4.33-3 +- mod_ssl: drop implicit 'SSLEngine on' for vhost w/o certs (#1564537) + +* Fri Mar 30 2018 Adam Williamson - 2.4.33-2 +- Exclude mod_md config file from main package (#1562413) + +* Wed Mar 28 2018 Joe Orton - 2.4.33-1 +- rebase to 2.4.33 (#1560174) +- add mod_md subpackage; load mod_proxy_uwsgi by default + +* Mon Mar 05 2018 Jitka Plesnikova - 2.4.29-8 +- Rebuilt with brotli 1.0.3 + +* Mon Feb 26 2018 Joe Orton - 2.4.29-7 +- simplify liblua detection in configure + +* Wed Feb 07 2018 Fedora Release Engineering - 2.4.29-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Jan 27 2018 Joe Orton - 2.4.29-5 +- link mod_lua against -lcrypt (#1538992) + +* Fri Jan 26 2018 Paul Howarth - 2.4.29-4 +- Rebuild with updated flags to work around compiler issues on i686 + (#1538648, #1538693) + +* Sat Jan 20 2018 Björn Esser - 2.4.29-3 +- Rebuilt for switch to libxcrypt + +* Thu Nov 23 2017 Joe Orton - 2.4.29-2 +- build and load mod_brotli + +* Wed Oct 25 2017 LuboÅ¡ Uhliarik - 2.4.29-1 +- new version 2.4.29 + +* Tue Oct 10 2017 Joe Orton - 2.4.28-3 +- drop obsolete Obsoletes +- update docs, Summary +- trim %%changelog + +* Tue Oct 10 2017 Patrick Uiterwijk - 2.4.28-2 +- Backport patch for fixing ticket key usage + +* Fri Oct 06 2017 LuboÅ¡ Uhliarik - 2.4.28-1 +- new version 2.4.28 + +* Tue Oct 3 2017 Joe Orton - 2.4.27-14 +- add notes on enabling httpd_graceful_shutdown boolean for prefork + +* Fri Sep 22 2017 Joe Orton - 2.4.27-13 +- drop Requires(post) for mod_ssl + +* Fri Sep 22 2017 Joe Orton - 2.4.27-12 +- better error handling in httpd-ssl-gencerts (#1494556) + +* Thu Sep 21 2017 Stephen Gallagher - 2.4.27-11 +- Require sscg 2.2.0 for creating service and CA certificates together + +* Thu Sep 21 2017 Jeroen van Meeuwen - 2.4.27-10 +- Address CVE-2017-9798 by applying patch from upstream (#1490344) + +* Thu Sep 21 2017 Joe Orton - 2.4.27-9 +- use sscg defaults; append CA cert to generated cert +- document httpd-init.service in httpd-init.service(8) + +* Wed Sep 20 2017 Stephen Gallagher - 2.4.27-8.1 +- Generate SSL certificates on service start, not %%posttrans + +* Tue Sep 19 2017 Joe Orton - 2.4.27-8 +- move httpd.service.d, httpd.socket.d dirs to -filesystem + +* Wed Sep 13 2017 Joe Orton - 2.4.27-7 +- add new content-length filter (upstream PR 61222) + +* Wed Aug 02 2017 Fedora Release Engineering - 2.4.27-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 2.4.27-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue Jul 18 2017 Joe Orton - 2.4.27-4 +- update mod_systemd (r1802251) + +* Mon Jul 17 2017 Joe Orton - 2.4.27-3 +- switch to event by default for Fedora 27 and later (#1471708) + +* Wed Jul 12 2017 LuboÅ¡ Uhliarik - 2.4.27-2 +- Resolves: #1469959 - httpd update cleaned out /etc/sysconfig + +* Mon Jul 10 2017 LuboÅ¡ Uhliarik - 2.4.27-1 +- new version 2.4.27 + +* Fri Jun 30 2017 Joe Orton - 2.4.26-2 +- mod_proxy_fcgi: fix further regressions (PR 61202) + +* Mon Jun 19 2017 LuboÅ¡ Uhliarik - 2.4.26-1 +- new version 2.4.26 + +* Mon Jun 5 2017 Joe Orton - 2.4.25-10 +- move unit man pages to section 8, add as Documentation= in units + +* Fri May 19 2017 Joe Orton - 2.4.25-9 +- add httpd.service(5) and httpd.socket(5) man pages + +* Tue May 16 2017 Joe Orton - 2.4.25-8 +- require mod_http2, now packaged separately + +* Wed Mar 29 2017 LuboÅ¡ Uhliarik - 2.4.25-7 +- Resolves: #1397243 - Backport Apache Bug 53098 - mod_proxy_ajp: + patch to set worker secret passed to tomcat + +* Tue Mar 28 2017 LuboÅ¡ Uhliarik - 2.4.25-6 +- Resolves: #1434916 - httpd.service: Failed with result timeout + +* Fri Mar 24 2017 Joe Orton - 2.4.25-5 +- link only httpd, not support/* against -lselinux -lsystemd + +* Fri Feb 10 2017 Fedora Release Engineering - 2.4.25-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Jan 12 2017 Joe Orton - 2.4.25-3 +- mod_watchdog: restrict thread lifetime (#1410883) + +* Thu Dec 22 2016 LuboÅ¡ Uhliarik - 2.4.25-2 +- Resolves: #1358875 - require nghttp2 >= 1.5.0 + +* Thu Dec 22 2016 LuboÅ¡ Uhliarik - 2.4.25-1 +- new version 2.4.25 + +* Mon Dec 05 2016 LuboÅ¡ Uhliarik - 2.4.23-7 +- Resolves: #1401530 - CVE-2016-8740 httpd: Incomplete handling of + LimitRequestFields directive in mod_http2 + +* Mon Nov 14 2016 Joe Orton - 2.4.23-6 +- fix build with OpenSSL 1.1 (#1392900) +- fix typos in ssl.conf (josef randinger, #1379407) + +* Wed Nov 2 2016 Joe Orton - 2.4.23-5 +- no longer package /etc/sysconfig/httpd +- synch ssl.conf with upstream + +* Mon Jul 18 2016 Joe Orton - 2.4.23-4 +- add security fix for CVE-2016-5387 + +* Thu Jul 7 2016 Joe Orton - 2.4.23-3 +- load mod_watchdog by default (#1353582) + +* Thu Jul 7 2016 Joe Orton - 2.4.23-2 +- restore build of mod_proxy_fdpass (#1325883) +- improve check tests to catch configured-but-not-built modules + +* Thu Jul 7 2016 Joe Orton - 2.4.23-1 +- update to 2.4.23 (#1325883, #1353203) +- load mod_proxy_hcheck +- recommend use of "systemctl edit" in httpd.service + +* Thu Apr 7 2016 Joe Orton - 2.4.18-6 +- have "apachectl graceful" start httpd if not running, per man page + +* Wed Apr 6 2016 Joe Orton - 2.4.18-5 +- use redirects for lang-specific /manual/ URLs + +* Fri Mar 18 2016 Joe Orton - 2.4.18-4 +- fix welcome page HTML validity (Ville Skyttä) + +* Fri Mar 18 2016 Joe Orton - 2.4.18-3 +- remove httpd pre script (duplicate of httpd-filesystem's) +- in httpd-filesystem pre script, create group/user iff non-existent + +* Wed Feb 03 2016 Fedora Release Engineering - 2.4.18-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Mon Dec 14 2015 Jan Kaluza - 2.4.18-1 +- update to new version 2.4.18 + +* Wed Dec 9 2015 Joe Orton - 2.4.17-4 +- re-enable mod_asis due to popular demand (#1284315) + +* Mon Oct 26 2015 Jan Kaluza - 2.4.17-3 +- fix crash when using -X argument (#1272234) + +* Wed Oct 14 2015 Jan Kaluza - 2.4.17-2 +- rebase socket activation patch to 2.4.17 + +* Tue Oct 13 2015 Joe Orton - 2.4.17-1 +- update to 2.4.17 (#1271224) +- build, load mod_http2 +- don't build mod_asis, mod_file_cache +- load mod_cache_socache, mod_proxy_wstunnel by default +- check every built mod_* is configured +- synch ssl.conf with upstream; disable SSLv3 by default + +* Wed Jul 15 2015 Jan Kaluza - 2.4.12-4 +- update to 2.4.16 + +* Tue Jul 7 2015 Joe Orton - 2.4.12-3 +- mod_ssl: use "localhost" in the dummy SSL cert if len(FQDN) > 59 chars + +* Wed Jun 17 2015 Fedora Release Engineering - 2.4.12-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Fri Mar 27 2015 Jan Kaluza - 2.4.12-1 +- update to 2.4.12 + +* Tue Mar 24 2015 Jan Kaluza - 2.4.10-17 +- fix compilation with lua-5.3 + +* Tue Mar 24 2015 Jan Kaluza - 2.4.10-16 +- remove filter for auto-provides of httpd modules, it is not needed since F20 + +* Wed Dec 17 2014 Jan Kaluza - 2.4.10-15 +- core: fix bypassing of mod_headers rules via chunked requests (CVE-2013-5704) +- mod_cache: fix NULL pointer dereference on empty Content-Type (CVE-2014-3581) +- mod_proxy_fcgi: fix a potential crash with long headers (CVE-2014-3583) +- mod_lua: fix handling of the Require line when a LuaAuthzProvider is used + in multiple Require directives with different arguments (CVE-2014-8109) + +* Tue Oct 14 2014 Joe Orton - 2.4.10-14 +- require apr-util 1.5.x + +* Thu Sep 18 2014 Jan Kaluza - 2.4.10-13 +- use NoDelay and DeferAcceptSec in httpd.socket + +* Mon Sep 08 2014 Jan Kaluza - 2.4.10-12 +- increase suexec minimum acceptable uid/gid to 1000 (#1136391) + +* Wed Sep 03 2014 Jan Kaluza - 2.4.10-11 +- fix hostname requirement and conflict with openssl-libs + +* Mon Sep 01 2014 Jan Kaluza - 2.4.10-10 +- use KillMode=mixed in httpd.service (#1135122) + +* Fri Aug 29 2014 Joe Orton - 2.4.10-9 +- set vstring based on /etc/os-release (Pat Riehecky, #1114539) + +* Fri Aug 29 2014 Joe Orton - 2.4.10-8 +- pull in httpd-filesystem as Requires(pre) (#1128328) +- fix cipher selection in default ssl.conf, depend on new OpenSSL (#1134348) +- require hostname for mod_ssl post script (#1135118) + +* Fri Aug 22 2014 Jan Kaluza - 2.4.10-7 +- mod_systemd: updated to the latest version +- use -lsystemd instead of -lsystemd-daemon (#1125084) +- fix possible crash in SIGINT handling (#958934) + +* Thu Aug 21 2014 Joe Orton - 2.4.10-6 +- mod_ssl: treat "SSLCipherSuite PROFILE=..." as special (#1109119) +- switch default ssl.conf to use PROFILE=SYSTEM (#1109119) + +* Sat Aug 16 2014 Fedora Release Engineering - 2.4.10-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Fri Aug 15 2014 Jan Kaluza - 2.4.10-4 +- add /usr/bin/useradd dependency to -filesystem requires + +* Thu Aug 14 2014 Jan Kaluza - 2.4.10-3 +- fix creating apache user in pre script (#1128328) + +* Thu Jul 31 2014 Joe Orton - 2.4.10-2 +- enable mod_request by default for mod_auth_form +- move disabled-by-default modules from 00-base.conf to 00-optional.conf + +* Mon Jul 21 2014 Joe Orton - 2.4.10-1 +- update to 2.4.10 +- expand variables in docdir example configs + +* Tue Jul 08 2014 Jan Kaluza - 2.4.9-8 +- add support for systemd socket activation (#1111648) + +* Mon Jul 07 2014 Jan Kaluza - 2.4.9-7 +- remove conf.modules.d from httpd-filesystem subpackage (#1081453) + +* Mon Jul 07 2014 Jan Kaluza - 2.4.9-6 +- add httpd-filesystem subpackage (#1081453) + +* Fri Jun 20 2014 Joe Orton - 2.4.9-5 +- mod_ssl: don't use the default OpenSSL cipher suite in ssl.conf (#1109119) + +* Sat Jun 07 2014 Fedora Release Engineering - 2.4.9-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Fri Mar 28 2014 Jan Kaluza - 2.4.9-3 +- add support for SetHandler + proxy (#1078970) + +* Thu Mar 27 2014 Jan Kaluza - 2.4.9-2 +- move macros from /etc/rpm to macros.d (#1074277) +- remove unused patches + +* Mon Mar 17 2014 Jan Kaluza - 2.4.9-1 +- update to 2.4.9 + +* Fri Feb 28 2014 Joe Orton - 2.4.7-6 +- use 2048-bit RSA key with SHA-256 signature in dummy certificate + +* Fri Feb 28 2014 Stephen Gallagher 2.4.7-5 +- Create drop directory for systemd snippets + +* Thu Feb 27 2014 Jan Kaluza - 2.4.7-4 +- remove provides of old MMN, because it contained double-dash (#1068851) + +* Thu Feb 20 2014 Jan Kaluza - 2.4.7-3 +- fix graceful restart using legacy actions + +* Thu Dec 12 2013 Joe Orton - 2.4.7-2 +- conflict with pre-1.5.0 APR +- fix sslsninotreq patch + +* Wed Nov 27 2013 Joe Orton - 2.4.7-1 +- update to 2.4.7 (#1034071) + +* Fri Nov 22 2013 Joe Orton - 2.4.6-10 +- switch to requiring system-logos-httpd (#1031288) + +* Tue Nov 12 2013 Joe Orton - 2.4.6-9 +- change mmnisa to drop "-" altogether + +* Tue Nov 12 2013 Joe Orton - 2.4.6-8 +- drop ambiguous invalid "-" in RHS of httpd-mmn Provide, keeping old Provide + for transition + +* Fri Nov 1 2013 Jan Kaluza - 2.4.6-7 +- systemd: use {MAINPID} notation to ensure /bin/kill has always the second arg + +* Thu Oct 31 2013 Joe Orton - 2.4.6-6 +- mod_ssl: allow SSLEngine to override Listen-based default (r1537535) + +* Thu Oct 24 2013 Jan kaluza - 2.4.6-5 +- systemd: send SIGWINCH signal without httpd -k in ExecStop + +* Mon Oct 21 2013 Joe Orton - 2.4.6-4 +- load mod_macro by default (#998452) +- add README to conf.modules.d +- mod_proxy_http: add possible fix for threading issues (r1534321) +- core: add fix for truncated output with CGI scripts (r1530793) + +* Thu Oct 10 2013 Jan Kaluza - 2.4.6-3 +- require fedora-logos-httpd (#1009162) + +* Wed Jul 31 2013 Jan Kaluza - 2.4.6-2 +- revert fix for dumping vhosts twice + +* Mon Jul 22 2013 Joe Orton - 2.4.6-1 +- update to 2.4.6 +- mod_ssl: use revised NPN API (r1487772) + +* Thu Jul 11 2013 Jan Kaluza - 2.4.4-12 +- mod_unique_id: replace use of hostname + pid with PRNG output (#976666) +- apxs: mention -p option in manpage + +* Tue Jul 2 2013 Joe Orton - 2.4.4-11 +- add patch for aarch64 (Dennis Gilmore, #925558) + +* Mon Jul 1 2013 Joe Orton - 2.4.4-10 +- remove duplicate apxs man page from httpd-tools + +* Mon Jun 17 2013 Joe Orton - 2.4.4-9 +- remove zombie dbmmanage script + +* Fri May 31 2013 Jan Kaluza - 2.4.4-8 +- return 400 Bad Request on malformed Host header + +* Fri May 24 2013 Jan Kaluza - 2.4.4-7 +- ignore /etc/sysconfig/httpd and document systemd way of setting env variables + in this file + +* Mon May 20 2013 Jan Kaluza - 2.4.4-6 +- htpasswd/htdbm: fix hash generation bug (#956344) +- do not dump vhosts twice in httpd -S output (#928761) +- mod_cache: fix potential crash caused by uninitialized variable (#954109) + +* Thu Apr 18 2013 Jan Kaluza - 2.4.4-5 +- execute systemctl reload as result of apachectl graceful +- mod_ssl: ignore SNI hints unless required by config +- mod_cache: forward-port CacheMaxExpire "hard" option +- mod_ssl: fall back on another module's proxy hook if mod_ssl proxy + is not configured. + +* Tue Apr 16 2013 Jan Kaluza - 2.4.4-4 +- fix service file to not send SIGTERM after ExecStop (#906321, #912288) + +* Tue Mar 26 2013 Jan Kaluza - 2.4.4-3 +- protect MIMEMagicFile with IfModule (#893949) + +* Tue Feb 26 2013 Joe Orton - 2.4.4-2 +- really package mod_auth_form in mod_session (#915438) + +* Tue Feb 26 2013 Joe Orton - 2.4.4-1 +- update to 2.4.4 +- fix duplicate ownership of mod_session config (#914901) + +* Fri Feb 22 2013 Joe Orton - 2.4.3-17 +- add mod_session subpackage, move mod_auth_form there (#894500) + +* Thu Feb 14 2013 Fedora Release Engineering - 2.4.3-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Tue Jan 8 2013 Joe Orton - 2.4.3-15 +- add systemd service for htcacheclean + +* Tue Nov 13 2012 Joe Orton - 2.4.3-14 +- drop patch for r1344712 + +* Tue Nov 13 2012 Joe Orton - 2.4.3-13 +- filter mod_*.so auto-provides (thanks to rcollet) +- pull in syslog logging fix from upstream (r1344712) + +* Fri Oct 26 2012 Joe Orton - 2.4.3-12 +- rebuild to pick up new apr-util-ldap + +* Tue Oct 23 2012 Joe Orton - 2.4.3-11 +- rebuild + +* Wed Oct 3 2012 Joe Orton - 2.4.3-10 +- pull upstream patch r1392850 in addition to r1387633 + +* Mon Oct 1 2012 Joe Orton - 2.4.3-9 +- define PLATFORM in os.h using vendor string + +* Mon Oct 1 2012 Joe Orton - 2.4.3-8 +- use systemd script unconditionally (#850149) + +* Mon Oct 1 2012 Joe Orton - 2.4.3-7 +- use systemd scriptlets if available (#850149) +- don't run posttrans restart if /etc/sysconfig/httpd-disable-posttrans exists + +* Mon Oct 01 2012 Jan Kaluza - 2.4.3-6 +- use systemctl from apachectl (#842736) + +* Wed Sep 19 2012 Joe Orton - 2.4.3-5 +- fix some error log spam with graceful-stop (r1387633) +- minor mod_systemd tweaks + +* Thu Sep 13 2012 Joe Orton - 2.4.3-4 +- use IncludeOptional for conf.d/*.conf inclusion + +* Fri Sep 07 2012 Jan Kaluza - 2.4.3-3 +- adding mod_systemd to integrate with systemd better + +* Tue Aug 21 2012 Joe Orton - 2.4.3-2 +- mod_ssl: add check for proxy keypair match (upstream r1374214) + +* Tue Aug 21 2012 Joe Orton - 2.4.3-1 +- update to 2.4.3 (#849883) +- own the docroot (#848121) + +* Mon Aug 6 2012 Joe Orton - 2.4.2-23 +- add mod_proxy fixes from upstream (r1366693, r1365604) + +* Thu Jul 19 2012 Fedora Release Engineering - 2.4.2-22 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Fri Jul 6 2012 Joe Orton - 2.4.2-21 +- drop explicit version requirement on initscripts + +* Thu Jul 5 2012 Joe Orton - 2.4.2-20 +- mod_ext_filter: fix error_log warnings + +* Mon Jul 2 2012 Joe Orton - 2.4.2-19 +- support "configtest" and "graceful" as initscripts "legacy actions" + +* Fri Jun 8 2012 Joe Orton - 2.4.2-18 +- avoid use of "core" GIF for a "core" directory (#168776) +- drop use of "syslog.target" in systemd unit file + +* Thu Jun 7 2012 Joe Orton - 2.4.2-17 +- use _unitdir for systemd unit file +- use /run in unit file, ssl.conf + +* Thu Jun 7 2012 Joe Orton - 2.4.2-16 +- mod_ssl: fix NPN patch merge + +* Wed Jun 6 2012 Joe Orton - 2.4.2-15 +- move tmpfiles.d fragment into /usr/lib per new guidelines +- package /run/httpd not /var/run/httpd +- set runtimedir to /run/httpd likewise + +* Wed Jun 6 2012 Joe Orton - 2.4.2-14 +- fix htdbm/htpasswd crash on crypt() failure (#818684) + +* Wed Jun 6 2012 Joe Orton - 2.4.2-13 +- pull fix for NPN patch from upstream (r1345599) + +* Thu May 31 2012 Joe Orton - 2.4.2-12 +- update suexec patch to use LOG_AUTHPRIV facility + +* Thu May 24 2012 Joe Orton - 2.4.2-11 +- really fix autoindex.conf (thanks to remi@) + +* Thu May 24 2012 Joe Orton - 2.4.2-10 +- fix autoindex.conf to allow symlink to poweredby.png + +* Wed May 23 2012 Joe Orton - 2.4.2-9 +- suexec: use upstream version of patch for capability bit support + +* Wed May 23 2012 Joe Orton - 2.4.2-8 +- suexec: use syslog rather than suexec.log, drop dac_override capability + +* Tue May 1 2012 Joe Orton - 2.4.2-7 +- mod_ssl: add TLS NPN support (r1332643, #809599) + +* Tue May 1 2012 Joe Orton - 2.4.2-6 +- add BR on APR >= 1.4.0 + +* Fri Apr 27 2012 Joe Orton - 2.4.2-5 +- use systemctl from logrotate (#221073) + +* Fri Apr 27 2012 Joe Orton - 2.4.2-4 +- pull from upstream: + * use TLS close_notify alert for dummy_connection (r1326980+) + * cleanup symbol exports (r1327036+) + +* Fri Apr 20 2012 Joe Orton - 2.4.2-3 +- really fix restart + +* Fri Apr 20 2012 Joe Orton - 2.4.2-2 +- tweak default ssl.conf +- fix restart handling (#814645) +- use graceful restart by default + +* Wed Apr 18 2012 Jan Kaluza - 2.4.2-1 +- update to 2.4.2 + +* Fri Mar 23 2012 Joe Orton - 2.4.1-6 +- fix macros + +* Fri Mar 23 2012 Joe Orton - 2.4.1-5 +- add _httpd_moddir to macros + +* Tue Mar 13 2012 Joe Orton - 2.4.1-4 +- fix symlink for poweredby.png +- fix manual.conf + +* Tue Mar 13 2012 Joe Orton - 2.4.1-3 +- add mod_proxy_html subpackage (w/mod_proxy_html + mod_xml2enc) +- move mod_ldap, mod_authnz_ldap to mod_ldap subpackage + +* Tue Mar 13 2012 Joe Orton - 2.4.1-2 +- clean docroot better +- ship proxy, ssl directories within /var/cache/httpd +- default config: + * unrestricted access to (only) /var/www + * remove (commented) Mutex, MaxRanges, ScriptSock + * split autoindex config to conf.d/autoindex.conf +- ship additional example configs in docdir + +* Tue Mar 6 2012 Joe Orton - 2.4.1-1 +- update to 2.4.1 +- adopt upstream default httpd.conf (almost verbatim) +- split all LoadModules to conf.modules.d/*.conf +- include conf.d/*.conf at end of httpd.conf +- trim %%changelog diff --git a/httpd.tmpfiles b/httpd.tmpfiles new file mode 100644 index 0000000..f148886 --- /dev/null +++ b/httpd.tmpfiles @@ -0,0 +1,2 @@ +d /run/httpd 710 root apache +d /run/httpd/htcacheclean 700 apache apache diff --git a/httpd@.service b/httpd@.service new file mode 100644 index 0000000..7649dff --- /dev/null +++ b/httpd@.service @@ -0,0 +1,25 @@ +# This is a template for httpd instances. +# See httpd@.service(8) for more information. + +[Unit] +Description=The Apache HTTP Server +After=network.target remote-fs.target nss-lookup.target +Documentation=man:httpd@.service(8) + +[Service] +Type=notify +Environment=LANG=C +Environment=HTTPD_INSTANCE=%i +ExecStartPre=/bin/mkdir -m 710 -p /run/httpd/instance-%i +ExecStartPre=/bin/chown root.apache /run/httpd/instance-%i +ExecStartPre=/bin/mkdir -m 700 -p /var/lib/httpd/instance-%i +ExecStartPre=/bin/chown apache.apache /var/lib/httpd/instance-%i +ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND -f conf/%i.conf +ExecReload=/usr/sbin/httpd $OPTIONS -k graceful -f conf/%i.conf +# Send SIGWINCH for graceful stop +KillSignal=SIGWINCH +KillMode=mixed +PrivateTmp=true + +[Install] +WantedBy=multi-user.target diff --git a/instance.conf b/instance.conf new file mode 100644 index 0000000..074fb66 --- /dev/null +++ b/instance.conf @@ -0,0 +1,24 @@ +# +# This is an example instance-specific configuration file. See the +# httpd@.service(8) man page for detailed information on using the +# the httpd@.service with instances. +# +# To use this example, copy instance.conf to /etc/httpd/conf/foobar.conf +# This config will then used as the default configuration when +# running: +# +# # systemctl start httpd@foobar.service +# +# The changes compared to the default are: +# - DefaultRuntime, DefaultStateDir and Pidfile renamed to instance-specific +# - default logfile names are prefixed with the instance name +# - /etc/httpd/conf.d is NOT included by default (conf.modules.d still is) +# +# Further customisations will be required for an instance to run +# simultaneously to httpd.service under the default configuration, +# e.g. changing the port used with Listen. +# + +DefaultRuntimeDir /run/httpd/instance-${HTTPD_INSTANCE} +DefaultStateDir /var/lib/httpd/instance-${HTTPD_INSTANCE} +PidFile /run/httpd/instance-${HTTPD_INSTANCE}.pid diff --git a/manual.conf b/manual.conf new file mode 100644 index 0000000..133652b --- /dev/null +++ b/manual.conf @@ -0,0 +1,13 @@ +# +# This configuration file allows the manual to be accessed at +# http://localhost/manual/ +# +Alias /manual /usr/share/httpd/manual + + + Options Indexes + AllowOverride None + Require all granted + + RedirectMatch 301 ^/manual/(?:da|de|en|es|fr|ja|ko|pt-br|ru|tr|zh-cn)(/.*)$ "/manual$1" + diff --git a/mirrors b/mirrors new file mode 100644 index 0000000..dbfc379 --- /dev/null +++ b/mirrors @@ -0,0 +1 @@ +http://www.apache.org/dist/httpd/ diff --git a/mkstatus.sh b/mkstatus.sh new file mode 100755 index 0000000..6763424 --- /dev/null +++ b/mkstatus.sh @@ -0,0 +1,20 @@ +#!/bin/sh +echo '' +echo '' +for f in $*; do + n=${f//httpd-2\.[0-9]\.[0-9][0-9]-/} + n=${n//.patch/} + s_HEAD=`grep ^Upstream-HEAD $f | sed 's/Upstream-HEAD: //'` + s_20=`grep ^Upstream-2.0: $f | sed 's/Upstream-2.0: //'` + s_Com=`grep ^Upstream-Status: $f | sed 's/Upstream-Status: //'` + s_PR=`grep ^Upstream-PR: $f | sed 's/Upstream-PR: //'` + printf ' \n' $n + printf ' %s\n' "$s_HEAD" + printf ' %s\n' "$s_20" + printf ' %s\n' "$s_Com" + if [ -n "$s_PR" ]; then + printf ' \n' "$s_PR" + fi + printf ' \n' +done +echo '' diff --git a/pullrev.sh b/pullrev.sh new file mode 100755 index 0000000..ada0076 --- /dev/null +++ b/pullrev.sh @@ -0,0 +1,65 @@ +#!/bin/sh -e + +if [ $# -lt 1 ]; then + echo "What?" + exit 1 +fi + +repo="https://svn.apache.org/repos/asf/httpd/httpd/trunk" +#repo="https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x" +ver=2.4.43 +prefix="httpd-${ver}" +suffix="${SUFFIX:-r$1${2:++}}" +fn="${prefix}-${suffix}.patch" +vcurl="http://svn.apache.org/viewvc?view=revision&revision=" + +if test -f ${fn}; then + mv -v -f ${fn} ${fn}\~ + echo "# $0 $*" > ${fn} + sed '1{/#.*pullrev/d;};/^--- /,$d' < ${fn}\~ >> ${fn} +else + echo "# $0 $*" > ${fn} +fi + +new=0 +for r in $*; do + case $r in + http*) url=$r ;; + *) url=${vcurl}${r} ;; + esac + if ! grep -q "^${url}" ${fn}; then + echo "${url}" + new=1 + fi +done >> ${fn} + +[ $new -eq 0 ] || echo >> ${fn} + +prev=/dev/null +for r in $*; do + echo "+ fetching ${r}" + this=`mktemp /tmp/pullrevXXXXXX` + case $r in + http*) curl -s "$r" | filterdiff --strip=3 ;; + *) svn diff -c ${r} ${repo} ;; + esac | filterdiff --remove-timestamps --clean \ + -x 'CHANGES' -x '*/next-number' -x 'STATUS' -x '*.xml' \ + --addprefix="${prefix}/" > ${this} + next=`mktemp /tmp/pullrevXXXXXX` + if ! combinediff -w ${prev} ${this} > ${next}; then + echo "Failed combining previous ${prev} with ${this}"; + exit 1 + fi + rm -f "${this}" + [ "${prev}" = "/dev/null" ] || rm -f "${prev}" + prev=${next} +done + +cat ${prev} >> ${fn} + +vi "${fn}" +echo "+ git add ${fn}" +git add "${fn}" +echo "+ spec template:" +echo "PatchN: ${fn}" +echo "%patchN -p1 -b .${suffix}" diff --git a/server-status.conf b/server-status.conf new file mode 100644 index 0000000..be98f1b --- /dev/null +++ b/server-status.conf @@ -0,0 +1,10 @@ +# +# Lua-based server-status page; requires mod_lua to be loaded +# as per default configuration. +# +LuaMapHandler ^/server-status$ /usr/share/httpd/server-status/server-status.lua + + + AllowOverride None + Require local + diff --git a/sources b/sources new file mode 100644 index 0000000..a7871fb --- /dev/null +++ b/sources @@ -0,0 +1,3 @@ +SHA512 (httpd-2.4.46.tar.bz2) = 5936784bb662e9d8a4f7fe38b70c043b468114d931cd10ea831bfe74461ea5856b64f88f42c567ab791fc8907640a99884ba4b6a600f86d661781812735b6f13 +SHA512 (httpd-2.4.46.tar.bz2.asc) = 1f54c20d1aeedb7c745eb72acd79e1ed61d547b22c3dbe53cd3274ed3d897543cd8c49181d4b15d79c12755746cf0a2464d620f69e254ac3f998760133094df0 +SHA512 (KEYS) = b776ca20863f8d9e4f66e8b56cbe020de34af5b268e93776d482392171f0e0aeee4f8d74477d128dc9fd24b30bbe33b39439964f1bd22a99782f1e4a08c85056 diff --git a/ssl.conf b/ssl.conf new file mode 100644 index 0000000..373b9e5 --- /dev/null +++ b/ssl.conf @@ -0,0 +1,219 @@ +# +# When we also provide SSL we have to listen to the +# standard HTTPS port in addition. +# +Listen 443 https + +## +## SSL Global Context +## +## All SSL configuration in this context applies both to +## the main server and all SSL-enabled virtual hosts. +## + +# Pass Phrase Dialog: +# Configure the pass phrase gathering process. +# The filtering dialog program (`builtin' is a internal +# terminal dialog) has to provide the pass phrase on stdout. +SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog + +# Inter-Process Session Cache: +# Configure the SSL Session Cache: First the mechanism +# to use and second the expiring timeout (in seconds). +SSLSessionCache shmcb:/run/httpd/sslcache(512000) +SSLSessionCacheTimeout 300 + +# Pseudo Random Number Generator (PRNG): +# Configure one or more sources to seed the PRNG of the +# SSL library. The seed data should be of good random quality. +# WARNING! On some platforms /dev/random blocks if not enough entropy +# is available. This means you then cannot use the /dev/random device +# because it would lead to very long connection times (as long as +# it requires to make more entropy available). But usually those +# platforms additionally provide a /dev/urandom device which doesn't +# block. So, if available, use this one instead. Read the mod_ssl User +# Manual for more details. +SSLRandomSeed startup file:/dev/urandom 256 +SSLRandomSeed connect builtin +#SSLRandomSeed startup file:/dev/random 512 +#SSLRandomSeed connect file:/dev/random 512 +#SSLRandomSeed connect file:/dev/urandom 512 + +# +# Use "SSLCryptoDevice" to enable any supported hardware +# accelerators. Use "openssl engine -v" to list supported +# engine names. NOTE: If you enable an accelerator and the +# server does not start, consult the error logs and ensure +# your accelerator is functioning properly. +# +SSLCryptoDevice builtin +#SSLCryptoDevice ubsec + +## +## SSL Virtual Host Context +## + + + +# General setup for the virtual host, inherited from global configuration +#DocumentRoot "/var/www/html" +#ServerName www.example.com:443 + +# Use separate log files for the SSL virtual host; note that LogLevel +# is not inherited from httpd.conf. +ErrorLog logs/ssl_error_log +TransferLog logs/ssl_access_log +LogLevel warn + +# SSL Engine Switch: +# Enable/Disable SSL for this virtual host. +SSLEngine on + +# List the protocol versions which clients are allowed to connect with. +# The OpenSSL system profile is configured by default. See +# update-crypto-policies(8) for more details. +#SSLProtocol all -SSLv3 +#SSLProxyProtocol all -SSLv3 + +# User agents such as web browsers are not configured for the user's +# own preference of either security or performance, therefore this +# must be the prerogative of the web server administrator who manages +# cpu load versus confidentiality, so enforce the server's cipher order. +SSLHonorCipherOrder on + +# SSL Cipher Suite: +# List the ciphers that the client is permitted to negotiate. +# See the mod_ssl documentation for a complete list. +# The OpenSSL system profile is configured by default. See +# update-crypto-policies(8) for more details. +SSLCipherSuite PROFILE=SYSTEM +SSLProxyCipherSuite PROFILE=SYSTEM + +# Point SSLCertificateFile at a PEM encoded certificate. If +# the certificate is encrypted, then you will be prompted for a +# pass phrase. Note that restarting httpd will prompt again. Keep +# in mind that if you have both an RSA and a DSA certificate you +# can configure both in parallel (to also allow the use of DSA +# ciphers, etc.) +# Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt) +# require an ECC certificate which can also be configured in +# parallel. +SSLCertificateFile /etc/pki/tls/certs/localhost.crt + +# Server Private Key: +# If the key is not combined with the certificate, use this +# directive to point at the key file. Keep in mind that if +# you've both a RSA and a DSA private key you can configure +# both in parallel (to also allow the use of DSA ciphers, etc.) +# ECC keys, when in use, can also be configured in parallel +SSLCertificateKeyFile /etc/pki/tls/private/localhost.key + +# Server Certificate Chain: +# Point SSLCertificateChainFile at a file containing the +# concatenation of PEM encoded CA certificates which form the +# certificate chain for the server certificate. Alternatively +# the referenced file can be the same as SSLCertificateFile +# when the CA certificates are directly appended to the server +# certificate for convenience. +#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt + +# Certificate Authority (CA): +# Set the CA certificate verification path where to find CA +# certificates for client authentication or alternatively one +# huge file containing all of them (file must be PEM encoded) +#SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt + +# Client Authentication (Type): +# Client certificate verification type and depth. Types are +# none, optional, require and optional_no_ca. Depth is a +# number which specifies how deeply to verify the certificate +# issuer chain before deciding the certificate is not valid. +#SSLVerifyClient require +#SSLVerifyDepth 10 + +# Access Control: +# With SSLRequire you can do per-directory access control based +# on arbitrary complex boolean expressions containing server +# variable checks and other lookup directives. The syntax is a +# mixture between C and Perl. See the mod_ssl documentation +# for more details. +# +#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \ +# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \ +# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \ +# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \ +# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \ +# or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/ +# + +# SSL Engine Options: +# Set various options for the SSL engine. +# o FakeBasicAuth: +# Translate the client X.509 into a Basic Authorisation. This means that +# the standard Auth/DBMAuth methods can be used for access control. The +# user name is the `one line' version of the client's X.509 certificate. +# Note that no password is obtained from the user. Every entry in the user +# file needs this password: `xxj31ZMTZzkVA'. +# o ExportCertData: +# This exports two additional environment variables: SSL_CLIENT_CERT and +# SSL_SERVER_CERT. These contain the PEM-encoded certificates of the +# server (always existing) and the client (only existing when client +# authentication is used). This can be used to import the certificates +# into CGI scripts. +# o StdEnvVars: +# This exports the standard SSL/TLS related `SSL_*' environment variables. +# Per default this exportation is switched off for performance reasons, +# because the extraction step is an expensive operation and is usually +# useless for serving static content. So one usually enables the +# exportation for CGI and SSI requests only. +# o StrictRequire: +# This denies access when "SSLRequireSSL" or "SSLRequire" applied even +# under a "Satisfy any" situation, i.e. when it applies access is denied +# and no other module can change it. +# o OptRenegotiate: +# This enables optimized SSL connection renegotiation handling when SSL +# directives are used in per-directory context. +#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire + + SSLOptions +StdEnvVars + + + SSLOptions +StdEnvVars + + +# SSL Protocol Adjustments: +# The safe and default but still SSL/TLS standard compliant shutdown +# approach is that mod_ssl sends the close notify alert but doesn't wait for +# the close notify alert from client. When you need a different shutdown +# approach you can use one of the following variables: +# o ssl-unclean-shutdown: +# This forces an unclean shutdown when the connection is closed, i.e. no +# SSL close notify alert is sent or allowed to be received. This violates +# the SSL/TLS standard but is needed for some brain-dead browsers. Use +# this when you receive I/O errors because of the standard approach where +# mod_ssl sends the close notify alert. +# o ssl-accurate-shutdown: +# This forces an accurate shutdown when the connection is closed, i.e. a +# SSL close notify alert is sent and mod_ssl waits for the close notify +# alert of the client. This is 100% SSL/TLS standard compliant, but in +# practice often causes hanging connections with brain-dead browsers. Use +# this only for browsers where you know that their SSL implementation +# works correctly. +# Notice: Most problems of broken clients are also related to the HTTP +# keep-alive facility, so you usually additionally want to disable +# keep-alive for those clients, too. Use variable "nokeepalive" for this. +# Similarly, one has to force some clients to use HTTP/1.0 to workaround +# their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and +# "force-response-1.0" for this. +BrowserMatch "MSIE [2-5]" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + +# Per-Server Logging: +# The home of a custom SSL log file. Use this when you want a +# compact non-error SSL logfile on a virtual host basis. +CustomLog logs/ssl_request_log \ + "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" + + + diff --git a/tests/httpd-php-mysql-sanity-test/Makefile b/tests/httpd-php-mysql-sanity-test/Makefile new file mode 100644 index 0000000..a688236 --- /dev/null +++ b/tests/httpd-php-mysql-sanity-test/Makefile @@ -0,0 +1,67 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /CoreOS/httpd/Sanity/httpd-php-mysql-sanity-test +# Description: test fetching data from mysqldb/mariadb through php +# Author: Karel Srot +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/CoreOS/httpd/Sanity/httpd-php-mysql-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE new_mysql.php old_mysql.php php_mysql_test.sql php_mysql_test.conf + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +-include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Karel Srot " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: test fetching data from mysqldb/mariadb through php" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: httpd" >> $(METADATA) + @echo "Requires: httpd php php-zts php-mysqlnd mysql-server mariadb-server" >> $(METADATA) + @echo "RhtsRequires: library(httpd/http)" >> $(METADATA) + @echo "RhtsRequires: library(mysql/basic)" >> $(METADATA) + @echo "RhtsRequires: library(mariadb55/basic)" >> $(METADATA) + @echo "RhtsRequires: library(php/utils)" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/httpd-php-mysql-sanity-test/PURPOSE b/tests/httpd-php-mysql-sanity-test/PURPOSE new file mode 100644 index 0000000..59b3931 --- /dev/null +++ b/tests/httpd-php-mysql-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/httpd/Sanity/httpd-php-mysql-sanity-test +Description: test fetching data from mysqldb/mariadb through php +Author: Karel Srot diff --git a/tests/httpd-php-mysql-sanity-test/new_mysql.php b/tests/httpd-php-mysql-sanity-test/new_mysql.php new file mode 100644 index 0000000..6087b11 --- /dev/null +++ b/tests/httpd-php-mysql-sanity-test/new_mysql.php @@ -0,0 +1,12 @@ + diff --git a/tests/httpd-php-mysql-sanity-test/old_mysql.php b/tests/httpd-php-mysql-sanity-test/old_mysql.php new file mode 100644 index 0000000..8904c58 --- /dev/null +++ b/tests/httpd-php-mysql-sanity-test/old_mysql.php @@ -0,0 +1,12 @@ + diff --git a/tests/httpd-php-mysql-sanity-test/php_mysql_test.conf b/tests/httpd-php-mysql-sanity-test/php_mysql_test.conf new file mode 100644 index 0000000..d03c3c3 --- /dev/null +++ b/tests/httpd-php-mysql-sanity-test/php_mysql_test.conf @@ -0,0 +1,5 @@ + +Alias /php_mysql_test /var/www/php_mysql_test + + + diff --git a/tests/httpd-php-mysql-sanity-test/php_mysql_test.sql b/tests/httpd-php-mysql-sanity-test/php_mysql_test.sql new file mode 100644 index 0000000..ad931ac --- /dev/null +++ b/tests/httpd-php-mysql-sanity-test/php_mysql_test.sql @@ -0,0 +1,6 @@ + +CREATE DATABASE php_mysql_test; +USE php_mysql_test; + +CREATE TABLE foobar (name VARCHAR(10), value INTEGER); +INSERT INTO foobar VALUES("fish", 42); diff --git a/tests/httpd-php-mysql-sanity-test/runtest.sh b/tests/httpd-php-mysql-sanity-test/runtest.sh new file mode 100755 index 0000000..6fa8315 --- /dev/null +++ b/tests/httpd-php-mysql-sanity-test/runtest.sh @@ -0,0 +1,102 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/httpd/Sanity/httpd-php-mysql-sanity-test +# Description: test fetching data from mysqldb/mariadb through php +# Author: Karel Srot +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +[ -e /usr/bin/rhts-environment.sh ] && . /usr/bin/rhts-environment.sh +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGES="${PACKAGES:-httpd}" +REQUIRES="${REQUIRES:-php $DB}" + +rlJournalStart + rlPhaseStartSetup + rlRun "rlImport httpd/http" 0 "Import httpd library" + if rlIsRHEL 5 6 && [ $httpCOLLECTION = 0 ]; then + DB="mysql-server" + rlRun "rlImport mysql/basic" 0 "Import mysqld library" + SERVICE=${mysqlServiceName} + else + DB="mariadb-server" + rlRun "rlImport mariadb55/basic" 0 "Import mariadb library" + SERVICE=${mariadbServiceName} + fi + # install also php-mysql on rhel-6 (instead of php-mysqlnd on rhel-7) + rlRun "rlImport php/utils" + phpPdoPhpMysqlSetup + rlAssertRpm --all + rlRun "rlServiceStart $SERVICE" 0 + rlRun "echo DROP DATABASE php_mysql_test | mysql -u root" 0,1 + rlRun "mysql --verbose -u root < php_mysql_test.sql" + rlRun "httpStop" 0 "Stop httpd if running" + rlRun "> $httpLOGDIR/error_log" + rlRun "rm -rvf $httpROOTDIR/php_mysql_test" + rlRun "mkdir -v $httpROOTDIR/php_mysql_test" + rlRun "cp -v php_mysql_test.conf $httpCONFDIR/conf.d/" + php_version=`rlCheckRpm php` + if [[ $php_version =~ php-7* ]] || [[ $php_version =~ php-5.[5-6]* ]]; then + rlRun "cp -v new_mysql.php $httpROOTDIR/php_mysql_test/mysql.php" + else + rlRun "cp -v old_mysql.php $httpROOTDIR/php_mysql_test/mysql.php" + fi + rlRun "sed -i 's|/var/www|$httpROOTDIR|' $httpCONFDIR/conf.d/php_mysql_test.conf" + rlRun "chown -R apache: $httpROOTDIR/php_mysql_test" + #rlRun "restorecon $httpROOTDIR/php_mysql_test" + selinuxenabled && rlRun "chcon -Rv -t httpd_sys_content_t $httpROOTDIR/php_mysql_test" + rlRun "httpStart" 0 "Start httpd" + rlPhaseEnd + + rlPhaseStartTest + URL="http://localhost/php_mysql_test/" + RETVAL=0 + tries=`seq 1 10` + + for n in ${tries}; do + output=`curl -s $URL/mysql.php` + rv=$? + echo "PHP output ${n}: ${rv} x${output}y" + [ ${rv} -ne 0 -o "x${output}y" != "xfish is 42y" ] && RETVAL=66 + done + + if [ $RETVAL -ne 0 ]; then + rlFail + else + rlPass + fi + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm -f $httpCONFDIR/conf.d/php_mysql_test.conf" + rlRun "rm -rf $httpROOTDIR/php_mysql_test" + rlRun "echo DROP DATABASE php_mysql_test | mysql -u root" + rlRun "rlServiceRestore ${SERVICE}" 0 + rlRun "httpStop" 0 "Stop httpd if running" + # uninstall php-mysql on rhel-6 if it was installed during setup + phpPdoPhpMysqlCleanup + rlPhaseEnd +rlJournalPrintText +rlJournalEnd diff --git a/tests/tests.yml b/tests/tests.yml new file mode 100644 index 0000000..e0ef0be --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,12 @@ +--- +# Tests that run in all contexts +- hosts: localhost + roles: + - role: standard-test-beakerlib + tags: + - classic + tests: + - httpd-php-mysql-sanity-test + required_packages: + - findutils # beakerlib needs find command + - which # smoke requires which command diff --git a/upstream b/upstream new file mode 100644 index 0000000..c785a88 --- /dev/null +++ b/upstream @@ -0,0 +1 @@ +httpd-2.2.16.tar.gz diff --git a/upstream-key.gpg b/upstream-key.gpg new file mode 100644 index 0000000..52f3bbc --- /dev/null +++ b/upstream-key.gpg @@ -0,0 +1,4981 @@ +This file contains the PGP keys of various developers that work on +the Apache HTTP Server and its subprojects. + +Please don't use these keys for email unless you have asked the owner +because some keys are only used for code signing. + +Please realize that this file itself or the public key servers may be +compromised. You are encouraged to validate the authenticity of these keys in +an out-of-band manner. For information about our validation and signing +policies, please read http://httpd.apache.org/dev/verification.html. + +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). + +Type Bits/KeyID Date User ID +pub 1024/2719AF35 1995/05/13 Ben Laurie + Ben Laurie + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.3ia + +mQCNAi+0jQEAAAEEAK7oX0FeNncaHfa1v+V7SMUviAm8qB8orWG0zvja4ZtSrHVg +/PMwppUh44t5ERA9lltRBdHu30+YSh8a1dYt1XOD83nknzj9rhtpFAPqyywlLVhN +VY3PVLyMbULw27aEAGc+StFqrDoUQ0+j9QU/YH/IyVN9rBaJyhsIDEUnGa81AAUR +tB5CZW4gTGF1cmllIDxiZW5AYWxncm91cC5jby51az6JARUDBRAyb2Doc3AsNzyk +Yh0BARa6CACUBnsP9Vb+T/PvNYKVQBIODz+90tz5GozWwCVfPVSaRd8Dz+oF1sFs +YCz/KuxqBhL5PkiCuSMfOVlPA5nirjoktMF/af5saZqhPr5rvr67Z1OzZnVDvWe4 +DhFrn8EoLrY5YNJhUwfINnZqyKaQu8TW6p4caLkTCW0KM+4ztTe74xRG9NeE+K0+ +0RMpAF3jEY36LGRjq6miazt2bVZQDTl6CuWE+gAaFlX2ojV7e1xdxVvpBIEc34MP +g9ORJ0evx1QilMt1VyGcS/pe4IQgjdJqjU/4fzqFZkT2nntQMbV9kQyNe2+qfqP7 +giTryIanmBAfd3oOCTsRz2VKPfdhCqCRiQB1AwUQMRdzEEyr2GZv4ALJAQEuhAL6 +A8I84BR+87uNAHD0ZJkTM73WdyMEGvAKBvrZK/g0VLYj0NtgkSuRJfrXnGkuh27I +ZrjfL952Q/mXgMtHhJHJ9YfenGFWSEDHnolNzKOzTQJpE01IZ3nWv7ezA9N1LZVC +iQCVAgUQMROrdRsIDEUnGa81AQEUNgQAlvyjt534RDQd2AYGoZriaFzjaL7dTCRH +4b1zxuWBNWf3pI4W0iwU02Q5rEWEmY5DLl6/ie+vcQKOWSqXVgnM/s6EARdKEN56 +d6PzkwszgfEybDYrcAxReJcTCcV8ItJer/iqpBLgtaxyUpI77NvKcDGHp6BgYpnv +1lNkH0FISK+JAJUDBRAwtzlWdGx7qH+PTVkBARFWA/99NTCMihlOZS7LmHDVic/q +H1K1DVdMcv0iL39+7Pq4+AA/ET8dWIgcjaIreSqAZTpjwU1pMPaWgecDD1rEMCYX +R+JoofLJ24BLcSlpXJ/gWMifYNxqdDeMRkw/aW/kaXQJWIz+oDYNuOyi5VvB6faF +6Lm7P5cw1mX0I5rYc3woh7QoQmVuIExhdXJpZSA8YmVuQGdvbnpvLmJlbi5hbGdy +b3VwLmNvLnVrPokAlQIFEDEXgCUbCAxFJxmvNQEBiL8D/3MLjfHGvuByqP1VFQrF +QeMNd2aIQuC7ys3lkDvrLkkPJQANua0/MdDaZk6F5pCGcTmmmaJOjcOcCheD7FU5 +w9zxkQGR3Swr3opFHSr/CkEl83jRy3oq1MFydWoGajQjIr/c23X8zr+XntPyO6VX +q5He4RrTiXeAEFBzz+J+R+EQ +=zh1u +-----END PGP PUBLIC KEY BLOCK----- + + +Type Bits KeyID Created Expires Algorithm Use +sec+ 1024 0xA99F75DD 1997-01-24 ---------- RSA Sign & Encrypt +f16 Fingerprint16 = F7 E5 6D 20 58 AA B0 65 ED 0D B1 66 03 BA 9C C6 +uid Rodent of Unusual Size +uid Rodent of Unusual Size +uid Rodent of Unusual Size +uid Rodent of Unusual Size +uid Rodent of Unusual Size +uid Ken A L Coar +uid Rodent of Unusual Size +uid Rodent of Unusual Size +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPfreeware 5.0i for non-commercial use + +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 +t89HbY/x/sBXuksvBGxFGhgs +=GI5x +-----END PGP PUBLIC KEY BLOCK----- + +Type Bits KeyID Created Expires Algorithm Use +sec 1024 0x302DA568 2001-02-13 ---------- DSS Sign & Encrypt +f20 Fingerprint20 = DE29 FB39 71E7 1543 FD2D C049 508E AEC5 302D A568 +sub 1024 0x04E15F28 2001-02-13 ---------- Diffie-Hellman +f20 Fingerprint20 = C41F 1F5C 6485 0100 B21B EB14 A14E 77B6 04E1 5F28 +uid Rodent of Unusual Size (DSA) +uid Rodent of Unusual Size (DSA) +uid Rodent of Unusual Size (DSA) +uid Rodent of Unusual Size (DSA) +uid Rodent of Unusual Size (DSA) +uid Rodent of Unusual Size (DSA) +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPfreeware 5.0i for non-commercial use + +mQGiBDqJD0sRBADmh5EfoFA8VC/c7+BlG5l4+RBIcYlkvYFZcLbS2fPgkHDndrrp +5xIeYCFvnnRSVGkQbAfl4Gj62fGcyaI9QIbLAByGeqSoM+DbiEzIyR+QQNpBq+bo +V1JWaXiuI8d4sdf5ZyTH2nT1EUWVPiBgeXHYtdnjoh7IpG5ETH2miBs7swCgvcJr +y3Lwa8FfgVtCXFeI5E8wAm0EALOtxh6HwJbTWGAFJFA9RWw2oShLmovYGtdnxcY+ +wHX12oCkanKd26Nr09O+onh/xiQ0mSql3v6SUPnCfyC/qCLeuO2w4vspDlFMbBP0 +I+XFUt16Owldxvmy5fHvhChs7YSZqkVCMx5i+NTvyd51P9aELFG6A/7x3z/tpmyn +Be8wBAC8l29qjxJSNDsIMMf0cw8STUtNKN9SknKVpQektHb+x+3wreUESPByrgfl +cTm7y1ulg8rVazynsSVjMCRtmZIfboV2mhsgOu08aZ3bXPpWiHSJ5NR97jdH8s3I +xuiyQ84PHHVjyLAIh28nAkIvbPRtgt7M581dPpKknHvqz1sW6LQxUm9kZW50IG9m +IFVudXN1YWwgU2l6ZSAoRFNBKSA8S2VuLkNvYXJAR29sdXguQ29tPokAVgQTEQIA +FgUCOokPSwQLCgQDAxUDAgMWAgECF4AACgkQUI6uxTAtpWj/KACfccB9nTN1VpGP +zL2c11ya9ApunAsAn0zhuYOoDZsUCbKooUIg4zH3+nFziQBWBBMRAgAWBQI6iQ9L +BAsKBAMDFQMCAxYCAQIXgAAKCRBQjq7FMC2laP8oAJ9LlFZKQo9K+VFVsIu44z+H +GniLfwCffPkZqEjG6nSJYV50x0bjnVb8GDuJAEYEEBECAAYFAjsU6ugACgkQlxay +KTuqOuDQRwCfbpsHlgt++QSd1BRy8yHqrUupApMAnjcY03RsdplzcGr+xuiiRjo1 +quipiQCVAwUQO+FSL5rNPMCpn3XdAQGqgAP/VUU1o7ZxsEZJYUq8R4wErYxlMr1U +IGpVkPhMmlSnJyTN2KbZGcGkbiQ7+prdjj/tk5MVssVTP8JHEjS2pXc5/Gpf01oM +opK2h7K1fEX2NH3F3Ow7yEt1/kGtNhgaEBYUVO8TqZaba6ikqXn/vYFQpprSUThg +pOk4kk/7eggUxRaJAD8DBRA74VKU3bpkuiwxLS8RAu8aAKCLrqGScZZ3pWXcvnsF +7Zu3Cq/X8wCgssm+gUsZtncub+LPqEWcrS7MVqW0LlJvZGVudCBvZiBVbnVzdWFs +IFNpemUgKERTQSkgPGNvYXJAQXBhY2hlLk9yZz6JAFYEExECABYFAjrKH6IECwoE +AwMVAwIDFgIBAheAAAoJEFCOrsUwLaVoixAAnjACHycu39VEG/T/HnNY8iJt3TFH +AJ97peKuDSVTTLWtfwBHv/y05+ieNokARgQQEQIABgUCOxTq6gAKCRCXFrIpO6o6 +4FBhAJ4orS3X+GJ64mXjzqU9YFd9XYKBTQCfapw8Ss2Fy/HZgPd1CeUuBuM+9/WJ +AJUDBRA74VI5ms08wKmfdd0BAaVhBADN5lhtY+wUn21GCQHP8aRfL+efIVhDlOE+ +uKY+SAK+FgMM97r3eVEVC6r/eWeXOV6hCUNcpnawy2mwck1XwJ/uAkmvXPZevP1Y +P+8We9NL16ECH5Ow/oSz1i+ASKsDH06HpALC5VhPfZ1qIc2M+n7xhhPUFS8g42w5 +yfrHDS97OYkAPwMFEDvhUqfdumS6LDEtLxEC+xUAnAuKRZ5OyM3wZWZhUOFu2+1m +RYuVAKCjjuLsMfV8KDlFyEc3QXvdyhyJYbQzUm9kZW50IG9mIFVudXN1YWwgU2l6 +ZSAoRFNBKSA8Q29hckBSYWxlaWdoLklCTS5Db20+iQBWBBMRAgAWBQI6yh/NBAsK +BAMDFQMCAxYCAQIXgAAKCRBQjq7FMC2laAFLAJ9B4SLn9nVY1NWW7yZLiJl5CIoE +fACfVJFGZ+CgvozX8nt7kRXcsu+FZiaJAEYEEBECAAYFAjsU6uoACgkQlxayKTuq +OuC92QCfTrmLK2FBGB6auc0Llz91JtM8vPQAnRI4xh+uenrt0Mijf00tKBDL8O+A +tDNSb2RlbnQgb2YgVW51c3VhbCBTaXplIChEU0EpIDxLZW4uQ29hckBNZWVwWm9y +LkNvbT6JAFYEExECABYFAjrKH+cECwoEAwMVAwIDFgIBAheAAAoJEFCOrsUwLaVo +6WoAoLPiSCJ+ZpzTBxGbUMkmm8jidlpZAKCTFBQddW1FkHuKFMUae9S3gOQVsYkA +RgQQEQIABgUCOxTq6wAKCRCXFrIpO6o64ErDAJ4pyRV1ShT0E4TegsZQ0IQ6wM/g +oACeJQNXftu7U/bVZuNkLfXnD7SKwNOJAJUDBRA74VJKms08wKmfdd0BAcANA/9M +g1QCcgmg6t4HTaZ3caeI8nNZ/LjWs8MNWi0Z8OGytEwOgwIrG/DzoCPRQY/IlMya +gEspYEDO1kjrk37HcUeO8aOWkEjXt+0uFDLfQGKJnusyb+ekjw+JxOUzM8gMH/mR +ePJM+zx+ZU9dJU1rvbwXrtPwJpYX8xSf1L0J1p0ih4kAPwMFEDvhUrHdumS6LDEt +LxECD5UAn3gLjfBN18lmbw73leBq3+XKjI5gAKDBXQHmIc0zRT9VgszOGZG+XfRk +nLQrUm9kZW50IG9mIFVudXN1YWwgU2l6ZSAoRFNBKSA8S2VuQENvYXIuT3JnPokA +VgQTEQIAFgUCOsof+wQLCgQDAxUDAgMWAgECF4AACgkQUI6uxTAtpWi5swCeJrPK +y5D9fDm/H9nbsXLQTuo5QdUAn21AiEiqhurk46M747SqLpNJmgqFiQBGBBARAgAG +BQI7FOrrAAoJEJcWsik7qjrghWsAmgOEE0Fh3Xcml6sk5boGNVRgg5+YAJ9lKBe/ +9SY/DssCK8LV4gSCdhRCnIkAlQMFEDvhUlaazTzAqZ913QEBzWED/0gy/fbatnok +wtHz2P8xEAZ47ObQ52IhjxaG5GCkfdSEF5x+EUQaNeO+u3O2k3LakNO1/YN2BC36 +MuZeO/rU6bJro1r3ct5G5TODdb5MNSnf6rUath4T1BvHi3P5sdhB4e04WlenUscB +AbEpo2zfEMn6QDvmrc6Mr+WpnVCb2gJiiQA/AwUQO+FSvd26ZLosMS0vEQIRiQCf +cdu11Fj7Uotcb4R9mrM7MGYVptEAoMDImlcyl2w/jf3vjPnoNmrzD6YqtCtSb2Rl +bnQgb2YgVW51c3VhbCBTaXplIChEU0EpIDxjb2FyQEFDTS5Pcmc+iQBWBBMRAgAW +BQI6yiAkBAsKBAMDFQMCAxYCAQIXgAAKCRBQjq7FMC2laIlXAKCWqXUTcphAK7wQ +lpLXYTIpq45cKgCfV7S+4kkw8A/Sg3/v9rzbTIFTKfWJAEYEEBECAAYFAjsU6usA +CgkQlxayKTuqOuChhQCfXC1x2yzBiRp61UJM4ILFM79TtU0AoIUYBWyxpU6eS2kU +mHnBZlHzkZJiiQCVAwUQO+FSYJrNPMCpn3XdAQGqygP/XT9IZzBm42ZeG7hIh8Nq +UwPinkv1AP0lqUX8ME9hIcBOtmpSwvqHV4aa8RBzStth7ob2XXvJyjl/oBgxjTkQ +mdPwqsYGT6CQWm8q3roJe2oASahYgGinkgivKi5KNCLwdpst+0nEcTb2L8GDOJ0d +cWmBRVoKlQPNKI44uL68XCWJAD8DBRA74VLL3bpkuiwxLS8RAsATAKClx09xbGW7 +VDKSZi+HXLpy83R1fwCgo5dkvND4CEAJD4XyNol2Ygj/j2+5AQ0EOokPURAEAPb9 +XCxUtIXh12LmwYNk0PA9TWNJM1Mgo20rwUsZUdLHOZNuXCUfYIjHjw951K1KqpXG +Cv4On/0SVXagXZs9yI+y4Emkz6qPhr9nAzHexH+ykn+ROaP0zNKtPPgp5CQcHz9F +Xyz90XZuU48Tly20a9qo0v21dhVh0D4tulkS3pAHAAMFBADUgNY87Tsz3ndoonHo +JUFfzwlm5gOknvxE0Sk8dgYzYPrcLX9ZETpSoTWepbjfSe2F1voTscMkV2WhKMSr +dtzFrd8PjvOo8tXLkPL72vyUgw7BDFnfLvIaLtHAQu0BqfHaORhH5ufFZLXrOXvH +GaYfx/kSbFOpjK/KCrYgLzF3r4kARgQYEQIABgUCOokPUQAKCRBQjq7FMC2laDSz +AKCv+P8evU1SsJcZdjTcfyQzcN7FowCfRZE55mNxbmQZH8RiK/ssP3gcEwiJAEYE +GBECAAYFAjqJD1EACgkQUI6uxTAtpWg0swCeIya+hFw4LjTi4KyK8puAMTMNsNkA +oLSGqJ147DJuA6/pNp9OXD1q98vj +=DZH6 +-----END PGP PUBLIC KEY BLOCK----- + +Type Bits KeyID Created Expires Algorithm Use +sec+ 1024 0x2C312D2F 1998-10-17 ---------- DSS Sign & Encrypt +f20 Fingerprint20 = 1315 5B0E 9E63 4F42 BF6C 163F DDBA 64BA 2C31 2D2F +sub 2048 0xC9D00816 1998-10-17 ---------- Diffie-Hellman +f20 Fingerprint20 = F05E 8A42 A306 92F1 7B32 E3DE 2B88 4A28 C9D0 0816 +uid Rodent of Unusual Size (DSS) +uid Rodent of Unusual Size (DSS) +uid Rodent of Unusual Size (DSS) +uid Rodent of Unusual Size (DSS) +uid Rodent of Unusual Size (DSS) +uid Rodent of Unusual Size (DSS) +uid Rodent of Unusual Size +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPfreeware 5.0i for non-commercial use + +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 +XgCg6ajZ164aAHwQStdF9x+Jn96GQTg= +=e95K +-----END PGP PUBLIC KEY BLOCK----- + +Type Bits/KeyID Date User ID +pub 768/A0BB71C1 1997/06/03 Jim Jagielski + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.3 + +mQBtAzOUkNMAAAEDANZdTUJQPwrFI9526Qf+DEWL8dXgfhWW8o6CzewdcCoHYEpu +9CiOMD3f9bgo1VozOPceGzCu/9FF2hMLUvVsTAZkzC3rre5TtPo/vOf5HJ+ac9M7 +aqxW+gRu2/90oLtxwQAFEbQfSmltIEphZ2llbHNraSA8amltQGphZ3VORVQuY29t +PokAdQMFEDOUkNRu2/90oLtxwQEB8iEC/i9Qo55TlT8bRpcqeM3lzNDqzU9cqKRf +9X8pGJIVE5m2JPm99qPLs8RPeepLChi8ZZ+2hSfb7ldQhvVLgNqQqLpsjGtJjJOU +C+MrKDeSk2WAicg6Uo0FWCsEHxrssw139A== +=pwim +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/08C975E5 1999-04-14 Jim Jagielski +sig 08C975E5 1999-04-14 Jim Jagielski +uid Jim Jagielski +sig 08C975E5 2001-04-03 Jim Jagielski +uid Jim Jagielski +sig 3 08C975E5 2002-11-11 Jim Jagielski +sub 2048g/4CCDB430 1999-04-14 +sig 08C975E5 1999-04-14 Jim Jagielski + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.1 (Darwin) + +mQGiBDcUl9QRBADl5tF8kOD0uddlnl9qsaG70/hwujGTsSXATnqoLseTsWORoVXf +oBklokEAGmT2+Cl8XIXZ31Wh+GaJ3CTbEv8Ok1vapOt+ltPgOKzZEB4uP25EbhC2 +LWf+lUoafcd2Xi0KBV4fqXqEEuDGP1TAdZ6k7NVqgpjvbJ5TdqL0LrWOOwCg/0b4 ++/p/avQr+uZRU2rdmYu/b/0D/2LnjcEqUjsslh2e9m0OgAu+gnYAmQH6Dbnp+iKl +jffWPChwIMFZd/7FnGOzYDzoqnzTFyA4VE5PHWL61V2lpHJWB21K9D6rbEcx0iYB +AHHxZQEmxSBU6PmGnbF+2P7vC0Jz9gZ5dCbjtGboYxd00/XQlZwCs8jHueTpSfx9 +n7dYBACFpW+v2pSlG0ReiS6Ult3gaGWiw81D0nFVvCp5BlxgQDymyF1MS6FbCj/g +FGILosMhlsIHTFaC0DD0LSXyN1rm0ykPvi+vULIlKNJwW7fCi+33j1Azx+zfMNeO +T5vqAfF6cvsZ6qPb9CcYvU4jEKvkovA1U3jMFehqcGkTV5sfvbQeSmltIEphZ2ll +bHNraSA8amltQGFwYWNoZS5vcmc+iE4EEBECAA4ECwMCAQIZAQUCNxSX1QAKCRCL +OmAfCMl15UklAKDq2PsXa7PbJPtGlXblJjD1OZgjTwCgkCz0EAdWS4Fuhi0mmSm7 +h1gtH/W0H0ppbSBKYWdpZWxza2kgPGppbUBqYWd1TkVULmNvbT6ISwQQEQIACwUC +OsodagQLAwIBAAoJEIs6YB8IyXXlajkAoL2wNKsEorxLhZQAPRNa8kcv5uaCAKCc +KvWB5TIgPvXc9KIyu7YwfYiLg7QeSmltIEphZ2llbHNraSA8amltQGppbWphZy5j +b20+iFwEExECABwFAj3P+LMCGwMECwcDAgMVAgMDFgIBAh4BAheAAAoJEIs6YB8I +yXXlb3AAoOOU1s/F8PJAxYQwAQmlKxYUnZHdAJ9uIWY2w2UUMpTw45tkJ3xplawX +Y7kCDQQ3FJfVEAgA9kJXtwh/CBdyorrWqULzBej5UxE5T7bxbrlLOCDaAadWoxTp +j0BV89AHxstDqZSt90xkhkn4DIO9ZekX1KHTUPj1WV/cdlJPPT2N286Z4VeSWc39 +uK50T8X8dryDxUcwYc58yWb/Ffm7/ZFexwGq01uejaClcjrUGvC/RgBYK+X0iP1Y +TknbzSC0neSRBzZrM2w4DUUdD3yIsxx8Wy2O9vPJI8BD8KVbGI2Ou1WMuF040zT9 +fBdXQ6MdGGzeMyEstSr/POGxKUAYEY18hKcKctaGxAMZyAcpesqVDNmWn6vQClCb +AkbTCD1mpF1Bn5x8vYlLIhkmuquiXsNV6TILOwACAggAhIc3ERhHN8t/+GDWhvPR +ZrSEaRVOc6GmccQ65lIktR3YahcpL/KM2k8o3yJgroavIugxteaBrncT5muxMrAn +AP6pkBAVa1xStg2ExVt1Jz8qohPNtqZaNHeObtXLCsz7xqR2FRguBzhCgoIUcv+e +Jx9H7Cld1UpSFwIURtyyLLcwLbJa0mBC1tS6L+dxivmGaUQyU2ywMYyGAfJBGIYk +GMx5v3GwXkaYxvQaaAUIeeHTTo9tglPBwuCr2Upw3CwM5g8q0BVxX337ybUO/hx9 +oiFijBTo6UR4dmSuroSW9N2KP7/mnZirNR0hBXVeVSVApKspoSk9Dolp15jR6kFH +5YhGBBgRAgAGBQI3FJfVAAoJEIs6YB8IyXXlME4AniogMeV3YLNf6C1Y2+k8F3rt +0S/OAKDHF+wfxLDzCxsoQbwesIUAKgb7Hg== +=5VyJ +-----END PGP PUBLIC KEY BLOCK----- + +Type Bits/KeyID Date User ID +pub 2048/DD919C31 1996/12/24 sameer@c2.net + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.3ia + +mQENAzK/QZIAAAEIALrsEjuGlt6wkHy8fx2wPSkH7paAqJHDCbO1W/GMVs41BsH1 +xpyBi9lOtUXHsDC8Obx/TES4/xVPSsFKPQLa9Q/OsxjXmEPBvQ5PZdOXJ5zmRMI1 +1cfUp2s8w6i+IS68IWRKdPMshGWFGar1YUPM1UpVME7U+uGD3wgdC4DrVJHzS5Eh +gEDyQ9FPb+8CpsRO3AvUPzsZGG8Iy/9GiLzmaJG34zZ5fv5X7sr89xiWJ21ehk+X +ePO9kvq+nzfOCCK6a3GZD4g3KJX/Pm3oKeaXeL8WSCCPzpNbtRJk3ofeN7Zm1K0L +yChPiyui+OO063/WASv52bxUIlmzbX82a92RnDEABRG0DXNhbWVlckBjMi5uZXSJ +ARUDBRAyv0GTbX82a92RnDEBAfqVB/9GSzADIVqY0faFOLN6+E3qqg3hPRLBvjgC +5cvTlwT7W64zI+aiSZuN+xAXq+3lnKtmzn45F3hD7gBxRPJbSKsObn2zU4UcqW/o +qoiYEnO9EhoBomwPUbVy8C00CWvDLfeF4L5r+2oXgilTsCojSaWJX0QoPCwRQao1 +YwZ6CqAA78vdbBNkmA0WrPsVqwd3ijgFapcX671AqiT+pDbvK646I6uGPXJzN3ZU +vFuDim9D2uNk9CfvPhKGscr4qqP40TnNn5fjSsmrFyFxYsdwo7I4TFpnsEPOw226 +GU+TR7zdwnByP72AxPEBJ/F22LwNyreuph+fRpWCnCf+9gVW9Heh +=jS5Z +-----END PGP PUBLIC KEY BLOCK----- + + =========================== +Rob Hartill + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.2 + +mQCNAzG6VfMAAAEEAOvtvphFG/D02vGLENBl5OVPgEJgP9E1xhUgKTZnJstv30kD +h1IqeIBkEAy5bpKapCbvvxukyQErhB0efTi2v5yTAlz5pVjgWM5Sa8CyTXJmXPHH +EuOfy1DqaiQSmZ6KWX0ygw3gKDZMiNMf06UURLLYtRlGKSYY3WVj2u2UCmS9AAUR +tB5Sb2JlcnQgSGFydGlsbCA8cm9iaEBpbWRiLmNvbT6JAJUDBRAx5eIAZWPa7ZQK +ZL0BAU2XBACXfopMzC8kW3KEqq+N9W9fkGNgy//8XqQ77FmfPQPbO4X7Zn3cyO46 +MxvPP+92zSyN3dyj/xWZYoRLwll+ync9d4KUFwKw45DALAvz1CKHMOpQPD7dIWdE +9poJQrcbKeOqLcGZTu/hY90gWBUZ++9umR8X8lyh/WEgcUolfgYHew== +=upYh +-----END PGP PUBLIC KEY BLOCK----- + +Type Bits/KeyID Date User ID +pub 1024/631B5749 1996/06/21 Randy Terbush + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.3 + +mQCNAzHLBS8AAAEEANGFXb9o0NPVfVjSLvQh1j3fN6cMeVNA5BGUJ6HZGP/NDxTE +i8hwejJqakkU4ux/g6Kqckrx3h8WR7OXZZ+R8CsA0bg9Sr42ndEQCUISgArg+lXZ +gRUniARPPA7tamTSq8v1mnxqy9s26Ht2rAG2D6IiK/7v0JlezKirDeBjG1dJAAUR +tCFSYW5keSBUZXJidXNoIDxyYW5keUB6eXp6eXZhLmNvbT6JAJUDBRAxywUwqKsN +4GMbV0kBAegnA/sH63WyfwMFmn3nWe8T/5IXO/QkMYoMGLS1i7IxMY9O8BVvKQM+ +oxEcJdFAG7zPZkpgKzTBxmExz5hMZ9hwJ42XhrslWoP7JVvADJcdthrUAYW9W+jx +GcDYAW3qW5DpKsQchfvXq9QOBDxP+Kbbe2B8xGEyGUhLkacISFTrIhhQSg== +=8P8s +-----END PGP PUBLIC KEY BLOCK----- + +Type bits keyID Date User ID +RSA 1024 0x49A563D9 1997/02/24 Mark Cox + Mark Cox + Mark Cox + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGP 6.5.8 + +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 +ArpmDAcknLxcmsjp2J4= +=WGLR +-----END PGP PUBLIC KEY BLOCK----- + +Type Bits/KeyID Date User ID +pub 1024/2F90A69D 1997/02/24 Paul Sutton + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.3ia + +mQCNAzMRsB0AAAEEAKj2XYYEGcZhT69x4gskQ3xz+KMTLn7gKSqqcyyeinJ0ZjLl +6AJjb1/68nGsF+IIY+IJS+5smq8do1qpC3UZcmw423Sg8F71GeqDO4HZXOAOieVy +rpVs6S5TaXlJOcrC7zZCx+iql97+xJFjUGkkS7j/jIkx1AajzMNkSr0vkKadAAUR +tBxQYXVsIFN1dHRvbiA8cGF1bEB1a3dlYi5jb20+iQCVAwUQMxGwHcNkSr0vkKad +AQGrigP9F43zbiOigYel+JCMiB0HK/UdqSrf3xWxHIKWKNhQNjhnyeF+jKQwFld6 +7KQYsqZIpHsWLWmSk0AmKQOUIw+DxclDxBL2dT4p+CjgTgIAcbvPpahWkBAw/E+c +EGTiYbe+Y3sHJhhP+d0TOLmsETG9tpi7gFZ6FfNcWPxFMdxGrf4= +=0jQW +-----END PGP PUBLIC KEY BLOCK----- + +Type bits/keyID Date User ID +pub 1024/BA20321D 1997/06/05 Chuck Murcko + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.2 + +mQCNAzOW7moAAAEEAMYZlNOxWCjLR/PosadbG+xsrB2unid2LiYoakTFiDIBaZjx +bu6hNmVZPYfKOXQcqrCu0EY3uVLP/L89bST5pfIZOzz8GTm33zrETgfzpXYyFdbX +eZ5vc6aa3+7zmI7h/aU567P9ruB2C/RBLl1A59wmPRRVvjEIAkI4bAO6IDIdAAUR +tCBDaHVjayBNdXJja28gPGNodWNrQHRvcHNhaWwub3JnPg== +=vUdL +-----END PGP PUBLIC KEY BLOCK----- + +Type Bits/KeyID Date User ID +pub 1024/26BB437D 1997/04/28 Ralf S. Engelschall + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.3ia + +mQCNAzNko/QAAAEEANZ2kpN/oMkz4tqzxvKPZws/XwsD0Y+E5/y7P2DIw4uHS/4N +syQbgkdrZhPBlXDv68DQioHXWsb904qyr7iZB1LC5ItK9MgqlK+Z2mvPqsGbHM8J ++oYib8kf2zJ6HvrYrP7NYB0tN9YYum2ICtx+hIi6aKGXdB1ATA5erwYmu0N9AAUR +tClSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPokAlQMF +EDNko/QOXq8GJrtDfQEBKVoD/2K/+4pcwhxok+FkuLwC5Pnuh/1oeOYHiKYwx0Z3 +p09RLvDtNldr6VD+aL9JltxdPTARzZ8M50UqoF9jMr25GifheFYhilww41OVZA3e +cLXlLgda1+t0vWs3Eg/i2b0arQQDaIq7PeRdjdEDgwnG4xBaqaAqfgxwOXJ+LPWF +hiXZ +=K7lL +-----END PGP PUBLIC KEY BLOCK----- + +Type bits/keyID Date User ID +pub 1024/45B91DF1 1996/03/02 Doug MacEachern + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.2 + +mQCNAzE4lesAAAEEAKJYS1vL2iB3owwiZdCxp3JyvSNaC7h1p2jQXcJvY10gqyZm +VffDwFoSvJM1JdCx3o1mb3JpZ2OTV4SrDDkzcSpTXelgyh7k9O3HB7oG6pHTML9g +Dq9ZKydShMIvIJos7KuLWoM/eeeejtkv7r/gWsGHAyKbT8fs3r7nlmxFuR3xAAUX +tB9Eb3VnIE1hY0VhY2hlcm4gPGRvdWdtQG9zZi5vcmc+ +=yaR9 +-----END PGP PUBLIC KEY BLOCK----- + +Type Bits/KeyID Date User ID +pub 1023/163751F5 1997/08/18 Dean Gaudet + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.3a + +mQCNAzP30QgAAAED/1k8hPKsJj8Il/TfhP1JIRGwnXuzfQ/etv+MZJMzeNeKa8OX +Kw0d4e1S/KdJ+AZwWQp3ZMDoX2ghZ79X4DDDLEAc/Fmy0Gg8t89CP+xJk7b4EHjk +F7HX69BRJp3On4aRTXRND3WviqEmn5ppzbBkTenF9WWudLRbqrc4NnoWN1H1AAUR +tCBEZWFuIEdhdWRldCA8ZGdhdWRldEBhcmN0aWMub3JnPokAlQMFEDP30Qm3ODZ6 +FjdR9QEB9VQD/0+zumFj1zzYZ1+bS9Az36gijDUb8rlEVf/lBShx4VEvha8fsRRy +vkwnmJyupYvGtrSIYAwB0VK+GZPZa7XfZvUCM83AZY9vGpE0LwW2Vcz9kWZdJ0t+ +B7zJElmBUrmj9aW6ICmSNbOBwVo1Y7hg6lPSFFMOOECFpT1WuTXXYpNA +=KWcF +-----END PGP PUBLIC KEY BLOCK----- + + +pub 1024R/EE65E321 1998-10-22 Martin Kraemer +sig BB1D9F6D 1998-11-09 ct magazine CERTIFICATE +sig E2449019 1998-10-22 Martin Kraemer +sig EE65E321 1998-10-22 Martin Kraemer +sig 43BEE6A8 2000-01-03 Michael Cook +sig 49A563D9 2001-04-04 Mark Cox +sig F88341D9 2001-11-18 Lars Eilebrecht +sig 4F09F055 2003-04-21 Daniel Schemmel +sig 3 CC78C893 2003-11-18 Rich Bowen +sig D20BA2ED 2001-06-03 ruf at tik +sig 2 F43C2F92 2002-11-25 Bruno Lustosa +rev 30B94B5C 2002-12-28 imacat (¨Ìº¿¿ß) +sig 3 3BAA3AE0 2003-11-18 Rasmus Lerdorf +sig 2 4C9165B6 2003-11-18 Aaron Mulder +sig 3 88C3A5A5 2003-11-18 Philippe M. Chiasson (http://perl.apache.org/) +sig 84F9264F 2003-04-21 Harno +sig 3 30B94B5C 2002-10-09 imacat (¨Ìº¿¿ß) +sig 3 A54DA2DF 2003-11-18 Erin Mulder +sig 2 A1D69759 2003-11-24 Michael Kellen +sig 152924AF 2003-11-22 Sander Temme +sig 964F31D9 2003-11-22 [User-ID nicht gefunden] +sig 3 76D83CC6 2003-11-22 Manoj Kasichainula +sig 3 CE19D5C6 2003-11-18 Jamie Wallingford (legobuff) +sig 3 F5FC4B42 2003-11-21 Theodore W. Leung +sig FD093C41 2003-11-23 James M. Turner +sig 3 A11D56FB 2003-11-25 Geoffrey Young (http://www.modperlcookbook.org/~geoff/) +sig 2 65FDCDEE 2003-11-23 James Howison +sig 40581837 2003-11-27 Nick Kew +sig 3 D147B776 2003-11-28 Mitch Comstock (RAID) +sig 3 142B509B 2003-11-28 Glenn L. Nielsen +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.3 (FreeBSD) + +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 +=Pz1L +-----END PGP PUBLIC KEY BLOCK----- +Type bits keyID Date User ID +RSA 768 0xFDE534D1 1997/10/19 Martin Kraemer +sig 0xFDE534D1 Martin Kraemer +sig 0xE2449019 Martin Kraemer +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.3ia + +mQBtAzRKZDIAAAEDAON7JJtbjj6ZFEstbQS16Hd/BPlwdbczMGaQ0Mi3Xjfvi5Dq +4+Lf8bthb8YWu8pxIb+6ktmfzWmgshWwxNNYzaY/iqgH72zlgYSG4dYoozC4yj5n +Ov1Bc5xQ69dy/eU00QAFEbQiTWFydGluIEtyYWVtZXIgPG1hcnRpbkBhcGFjaGUu +b3JnPokAlQMFEDqfWqkrAsNF4kSQGQEBzfAD/1n9mcXRCQ/vUB6o96zcVe9ixQfd +3y4gFLP4omhBr9K8HnvexbULnSL4kRadV7x8BCzBBD4Xyr+QlqX56om9qnr6ujcp +EbUIZrbxpy5HMdyFKYboYmlSo5esV+jixsUIRcizZabCGjt3sC2es3yWx+piZrPV +Rz/KX7AclQlQi5sLiQB1AwUQNi9nP1Dr13L95TTRAQGHRQMAkvnovM0IcP/Nrxtp ++3KVNz6CDDVtT4NYqSd2O+IcJo/AFsyuV+wSd1UUuWOEzmXhuAFSGlMFAb608+H0 +ajW4AvaKOpxe8CymJxjZlKQBmULHF0U/YZJhUqpOheaVGyP2iQB1AwUQNi9m/zYq +11iPOU49AQGBegL+M8/0OUD77YhMwCbjyjmykiadBHQOBmtCTnK++dcUTSpQKjcJ +xsWNzFE7qS1tyA0NwiZNW6cVia+6vbn7+YP8mSagk0r0TcN/iXjyWlsPTfzhk9Up +ir1wcfWgKb9P2VwL +=ZxgG +-----END PGP PUBLIC KEY BLOCK----- + + +Type Bits/KeyID Date User ID +pub 1024/EC140B81 1997/04/10 Dirk-Willem van Gulik + Dirk-Willem van Gulik + Dirk-Willem van Gulik + Dirk-Willem van Gulik + Dirk-Willem van Gulik + Dirk-Willem van Gulik + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.3i + +mQCNAzNNOsMAAAEEAJmwazRhNJB4mQkvp0rrxLkeOAxR9fGBXgJNa6HHdLv7YHwx +mwMorHYDCAMypO1yuznNTaMVT1z3cS+yqhOkTVxwNI1mxW6Zts1kOJB9pWuU33sk +sUuCkLHXMgyvP9cms6gcYgB5g3UP6M/aQ4T017+Gk/7crlH87DGmPZbsFAuBAAUR +tCxEaXJrLVdpbGxlbSB2YW4gR3VsaWsgPGRpcmt4QHdlYndlYXZpbmcub3JnPokA +lQMFEDRZ5+0xpj2W7BQLgQEB/KAD/1xniFNLHp+jxIVrEL6HcI06QZUYPvRuarWq +3aI2gdeXej59Ry96MOo2MU3MsuQ+wW+6gEJAuyCp2jyYfzF/8winNcFWc738s/hX +fRYCJe4bvtMcnhBV7GAlTgyw00fcrnaJaQ811+QwKnZvXXWb+QuoXC4ddTon25w4 +XHLjtDZHtCxEaXJrLVdpbGxlbSB2YW4gR3VsaWsgPERpcmsudmFuR3VsaWtAanJj +Lml0PokAlQMFEDNNOsMxpj2W7BQLgQEBzW8EAItAEaeuIzPIVlKOk1LnHlYc4FyW +aiNJC2+rRmftYu2bIp/JFuXu3xC0U0byyHu0p+Y1pcAnt2YrqmYUfM0d2cx1b4+L +8RQR4SGKhq9jWKS3icfKoyMnGiD2CeI8/Xx8V6b8Xg0QqsdlS0kz//qGCDWMz0vi +oxzasVEvFjqAse03tCtEaXJrLVdpbGxlbSB2YW4gR3VsaWsgPGRpcmt4QHdlYndl +YXZpbmcubmw+iQCVAwUQNFnn1DGmPZbsFAuBAQE0vAP/aOb/rXsE256tpi0+CRp6 +cd9b1oBmw894UK+Cf4DeNHWehPWJog4y0eNFUcAMdLIdubDzc6Kfxw5QyJt2EAXr +05XuJ2DJdG24S/aPzGq+6VzL7Nq7pylXuhrACTgeesaceEpUd/NeOCOyzNR7i8qM +zbGFtU7fH1ipfJjN6fXLo5K0JERpcmstV2lsbGVtIHZhbiBHdWxpayA8ZGlya3hA +ZGRzLm5sPokAlQMFEDRZ58Expj2W7BQLgQEBGRwD/jdUjCJXFcAbjx3Y2pWUkR7C +hwJTohM2TvhFp80Ffbhh1xT961XGuHL5l41fRAIg9FEHjQKNVfXeisLH68Qh73cF +5xuNE6c1x1VSqfDLl9fXZ6TA35qt0G599T67jmVai4F/LjHWDI1O6UvPRuZE3O7m +eRaCfbPLAJ1ztFujtS3btClEaXJrLVdpbGxlbSB2YW4gR3VsaWsgPGRpcmt4QGJp +Z2Zvb3QuY29tPokAlQMFEDRZ56Qxpj2W7BQLgQEBvOED/1LhhPP5OkeCCEMVnmyZ +jZexzv6XOH2I5qH0iuozsI987sSK+zfv8O0wEBwjUOQqBuzlvjKImYQ/oqR89egQ +AinPc4z1b3kgeGyqrmtea6ScmpKufcWUBbhH0qsXF41eU3ArKY4kB9znV+/PacCe +VrOD8roFaxIDZ2nW9FS0mriOtC5EaXJrLVdpbGxlbSB2YW4gR3VsaWsgPGRpcmt4 +QHRlY2hub2xvZ2lzdC5jb20+iQCVAwUQNFnnjTGmPZbsFAuBAQEaHwP/Q2Rs6MIu +z8all/xildFOPfRAX73InwBeInr1O4UU4l6yWRvuLkg+m6O8eJSHo21SNZBCu9gM +FoQsd0jVOitUr8+w2WkypBlJo5wl1nCw/1sLU4AxtBb0jyADvJzxFCeje/FkxEvs +6Y3eLxpJRBylbg6KFOsmSY46DyGc49B6cZo= +=xUw/ +-----END PGP PUBLIC KEY BLOCK----- + +Type Bits KeyID Created Expires Algorithm Use +sec+ 1024 0xF08E012A 1998-02-19 ---------- DSS Sign & Encrypt +sub 2048 0xD8F8125A 1998-02-19 ---------- Diffie-Hellman +uid Dean Gaudet +uid Dean Gaudet +uid Dean Gaudet + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPfreeware 5.0i for non-commercial use + +mQGiBDTsCJkRBADJmDUiJL0xUaxg0yw7+VqqFUL6sjWxZeZ7kQZs4dyN3R1ilBUG +KmOXE6qSfb6Pi0qEmgCz1K7g1KaglMRrpANY4h1CjziEVmTH5s3ocxe77w2uaou1 +gHJERIqQuC4/z0DwFqq61ZVf5dUQTD8OmfOwG4pFs51Si9WS03ueVEFQFwCg/9Z2 +j6UzCLyUABpWeV1v4m0w82kEAK96GyKDcT20TymKJnMKuwya+ZwqrULH3Sdi2Mwi +1GOH7aomG2fK4D2yxWx5xTiYhmYNnRoopgu/Kv5a4x43tOKS3zeADMnHIw9dMSn9 +4Kba8vfKbZnlOgt9veV+iWZv7N2aS2z7w/i53Y6LAlV1hAIMvGJ3zLfmShZs0LDI +Ya18A/wNcdJazUk9mLGIoycCYOk5YhWL9sCaCBdmdfDPu++rLnqROSWkmfYkOTt+ +pG9SPnvv3XrX/SEwM8gYfpbZwrFDJFI9W63lc9hdSosFD+8xiRl6h2gKRwWvc1Ry +xIt3+gUrZxovNxBOv98BoSf/j3lkldU+ZjDGlCplRHSndxlN/bQgRGVhbiBHYXVk +ZXQgPGRnYXVkZXRAYXJjdGljLm9yZz6JAEsEEBECAAsFAjTsCJkECwMBAgAKCRB9 +bb/R8I4BKqqzAKDc/4H9iOXJxVE0yCEHeTQ2gAHfhgCg7VSq7eNhiJhBgblQav/R +XOhaHj20JkRlYW4gR2F1ZGV0IDxkZ2F1ZGV0LWRqZzIwQGFyY3RpYy5vcmc+iQBL +BBARAgALBQI07AjSBAsDAQIACgkQfW2/0fCOASoWOACfb+8OVvy6FCqN2MxdCqp6 +gffNbYgAoOxlTa4NjCUUO9dfLFFYpDfGrRy7tCBEZWFuIEdhdWRldCA8ZGdhdWRl +dEBhcGFjaGUub3JnPokASwQQEQIACwUCNOwI/gQLAwECAAoJEH1tv9HwjgEqiC8A +oJDu1HTuGOfChFSJJ31XvV8tnlo5AKCFceck4veIMP8pDC0f5UBGGC3mZLkCDQQ0 +7AiZEAgA9kJXtwh/CBdyorrWqULzBej5UxE5T7bxbrlLOCDaAadWoxTpj0BV89AH +xstDqZSt90xkhkn4DIO9ZekX1KHTUPj1WV/cdlJPPT2N286Z4VeSWc39uK50T8X8 +dryDxUcwYc58yWb/Ffm7/ZFexwGq01uejaClcjrUGvC/RgBYK+X0iP1YTknbzSC0 +neSRBzZrM2w4DUUdD3yIsxx8Wy2O9vPJI8BD8KVbGI2Ou1WMuF040zT9fBdXQ6Md +GGzeMyEstSr/POGxKUAYEY18hKcKctaGxAMZyAcpesqVDNmWn6vQClCbAkbTCD1m +pF1Bn5x8vYlLIhkmuquiXsNV6TILOwACAggAhb3cBmR67H4+9Rj4FeTwJ8kflX6I +pp2AeXXZiffiPVBv5cGzGn2RkGPAZqbp2AkrCb4TrJH//1GPdR8VmPeEGsm6u0uT +0M404l/4IW1FFQ4JBpTENPn4NYBHkKBNkPcls/ip0lSjlmLGVQVOtDOaFD7n44xV +hT4WpptCripg/5kymDmK9c8hv6rPUvNoVrDdWR4//MCvNAZvGq2bZGdFTyd5Tn6D +AmwbvL/UwgiDnm95qBBfCZtmGkkFaoOePtBevWFaviFZM2pErPRcjY8A/1cZsycj +JPMFYqBKGDIk76ulDSjU0Q8dqhCEDf0o2oQEg6msjDtetVFEDw9yJe0AGIkAPwMF +GDTsCJl9bb/R8I4BKhECBKgAoNRtRaRMdYNwajSO7056eKazCGSDAKDShamaRjAe +ThQ1KefmJKyzfcosZQ== +=25Cv +-----END PGP PUBLIC KEY BLOCK----- + + +Type Bits/KeyID Date User ID +pub 999R/F88341D9 1994-11-08 Lars Eilebrecht +uid Lars Eilebrecht +uid Lars Eilebrecht +uid Lars Eilebrecht +uid Lars Eilebrecht +uid Lars Eilebrecht +uid Lars Eilebrecht + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.1 (GNU/Linux) + +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 +=yvlm +-----END PGP PUBLIC KEY BLOCK----- + + + +Type Bits/KeyID Date User ID +pub 1024/28AA55C5 2000/03/02 Daniel Lopez Ridruejo + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.2 + +mQCNAzi+5mgAAAEEAKRyfbHaGoNuWwHVSa/5mRbWdhDTkR26z3Uwq4KdCZ2Wp+b0 +VF4Tfh6d4IoK2jXKBUlUfq+v7FYzSzYdPCmwB9L9cHlaU/ItfcWD2G7rIHyO/lGn +VXK/BGUPoOhT2yeO8tf6oe81hmN5VzqqhG/SWEkwlJASRX3ApyanqCooqlXFAAUR +tCtEYW5pZWwgTG9wZXogUmlkcnVlam8gPHJpZHJ1ZWpvQGFwYWNoZS5vcmc+iQCV +AwUQOMAjHyanqCooqlXFAQF9swQAnVrUersSbO/SrT+nnwgRPL/xRMjGCQe93gUe +JPcOOYU2be1tFGynJl842SIDPTHcJVg1hHReO93K4jvQKsbmT5zrzIlQ7hVB2u48 +WNcgsIKWIxcGaMp4+qsDOhN7Fh7vIEZdRRYhL7YcGKZ2WnXOZnGsKSD8VZenycwQ +cAA4xkA= +=3hIM +-----END PGP PUBLIC KEY BLOCK----- + +Type Bits KeyID Created Expires Algorithm Use +sec+ 2048 0xC808A7BF 2000-03-09 ---------- RSA Sign & Encrypt +uid rbb@apache.org + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPfreeware 5.0i for non-commercial use + +mQENAzjHNiMAAAEIAK+iTnKRHymuUYmRRe6JlH3oN4GfpakM6CITpS0aM/piJBX8 +MNgcCUK2tz8MSCqAlfF+2r0hGRMSQ+UpXqLXcJaCkGIvXtlKmxCcCX6R+LDCnzoa +QvOar3+rKFFJyiauyV7VPucZZhFKesReG6o53uoOAd0jyzcV9TdpAIn4Xl8W617T +L98GdODY9jK0zfgGo2bSgPpo2YswlDCGbYzRX6bfEGmAbP4t4UnP1ikVCE3NTIyz +gT4kywMb5AT1Tm3FbwTx7rXc/nL20t22VTJMjyCxqPrOTs91PxdXyTAQUKY82x+U +ZgW39f6aKrJHDEJtxOyym+B5NpYgeP5QQsgIp78ABRG0DnJiYkBhcGFjaGUub3Jn +iQEVAwUQOMc2I3j+UELICKe/AQE4yAgAkNXkalNn8Xi+v3BFCmHLlB7PKlItzlS2 +PnMcTJPgzO8w+PyXc5lzS3dnqLEBoCwRazEZh8ncVbeBJz1LjQU67gvCBqyFl+3n +r+Z8k6cJYw1AzSK9FLAgOEtG8IdE+jsPq39xORpu6Dhsuln++G1xaK6fePeAEgR3 +qH7gog/SFCa9QXQd85wsGRlQlmMwe/HDyoRd/iHg3X7mr4yB+zYkxYKDD+TKlSqq +V23n0H4n3oTI10PfaB8LDYVuPiQvIRn08XKUv0Att1KPH6iJTIJ/KRbZyGb2J+1r +RO1nBGw+qaOAw4wUQXOpJyXVUeanIt1tSe8Gczlf/uxJZdCNSpgeqIkAPwMFEDjH +OY/9b4jGIdCnGxECdl8AnAvSwMQ2v2ryh2NLL4FgfVLCjb40AJoDu0jaEqUinZnp +oMBmjFgtsDYp+w== +=5ByY +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.2 + +mQCNAzjJAagAAAEEAKkko/H+E4+c7OXgiNfBCwlU/PrxPovDS3/JCKuILnflbNtC +Lxbqvf7LccZ4LoiHOKd3+G4V8BgaTndqADx4crEsS0BpNrJdshPmXajzkdQeo6jN +nts6QJ8/mlL4Q+s2/8dnleCrgDkzP4DpAIRGK9OARE/TKmUFUonO2YYGoUwFAAUR +tA5yYmJAYXBhY2hlLm9yZw== +=dGNO +-----END PGP PUBLIC KEY BLOCK----- + + +Type Bits KeyID Created Expires Algorithm Use +sec+ 1024 0x00ADEBF5 2000-01-25 ---------- RSA Sign & Encrypt +uid Marc Slemko + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPfreeware 5.0i for non-commercial use + +mQCNAziM6n8AAAEEAODTLW2h2homp9NCjlsNdQQQACaUgrEm0sO0Lr1BVSp35fFQ +a6XtrIxQXwcvBqM0py1ea2zcmYqnv6vY+7i6sBnxiNNugH3ShBnOYeCaO6AzQNaN +2OvLkB7+1AoDmbU4a/+APtLrhzYzUj4DmwSmr7wTwdO06PsdM1Qv/g4Arev1AAUR +tBxNYXJjIFNsZW1rbyA8bWFyY3NAem5lcC5jb20+iQCVAwUQOIzqf1Qv/g4Arev1 +AQFTZgP/Q+/pcNsCncKr4x39f/N5zXine0zQaKY46ek+PCUrhDm5N8cFTyijE7V0 +huRDVENAFkwtznz/H7BN0vtMRlvUQJOPFa2UaN8zIbcMIzSbiNEx5nvfFeT/Gr52 +GtnrQ+BvczfaauJ0Zw4p5uq6na/+0iyEf17d4qrhIBftlO3Ti+M= +=+laC +-----END PGP PUBLIC KEY BLOCK----- + + +Type bits keyID Date User ID +RSA 1024 0x62C48B29 1996/01/22 *** DEFAULT SIGNING KEY *** + Ask Bjoern Hansen + Ask Bjoern Hansen + Ask Bjoern Hansen + Ask Bjoern Hansen + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGP 6.5.1 + +mQCNAjEC6XcAAAEEALdrW5rH+2XOKX2zAPQmgomvHGADJedG4Dxf3Ci3HpGmKazV +Uoo/f7Vf21ldvBBYC2CMpJU5uiMstNdrJ8Rx0KDBH2pLXsfE4XvVm8cGLbHcJycj +cZsYl4yppOufL/76kmpP7q0Jni/pXrkYg2mLG3lCN3JoZqX9tvkoKP1ixIspAAUR +tCRBc2sgQmpvZXJuIEhhbnNlbiA8YXNrQG5ldGNldGVyYS5kaz6JAJUDBRA1eczx ++Sgo/WLEiykBAZIjA/4+uCJi5WD0p3EFzOnmkZRxf8egjQlFdBDVR7sixVToZCze +oZZ9EVianFbwv8XU0McA7FLSUala0FIxRtmOs8/yN96rhBqJnYfLxu3b/ZRpBf4Z +UExXQbussUX7AsPUmFim9Xp8mTy7xDEpcfiBnGY9Dtx+nmSvyLO38W5VvKP1qYkA +PwMFEDV7CdYJPTjw/8ByixECHSsAoKUySg0ht56Rjsct6ViXjWfVEF1xAKCldK5x +LXMjefgsiuW3n5seRVogQokARgQQEQIABgUCNgEYdgAKCRBoqAGJariS5S72AJ9N +JsXpts88tCq7uZiirWlL54vTUwCg4A2urEUCEPuSz5deMyMX4lpjN5GJAJUDBRA5 +Ix6ndTAZgHu8twkBAZDHA/0fiaJSxGAxIdgYQY1KqYJGWg/E7Gwn87kZyiRHKUaJ +gP4IA4PVnh0rMtTTo+CWyzcqMPjRAZNDW4ECWymrqqNrYgqy/NrcN4h7LZC5wmnW +hXF3HdgAgxIn7m2YQOLluNqIrhVKga5G9/xytZLsF15qZbvjyX4mqToOsRqAtUBI +ALQgQXNrIEJqb2VybiBIYW5zZW4gPGFza0BwbHlzLm5ldD6JAJUDBRAz6gMS+Sgo +/WLEiykBAd9fA/9YdBn26x/7DE0by/Zzelfxu8o4AgZOV0AuWqZJebXKjeFmkJ0B +lZRaC+NUcvpXOcANP6berJknvAMjNfTD1wi89XUVlbisDSW3UMR7Op8EpYjqLTo5 +u+KmyS+ehhQjA3somcJc8fBdnGJZ17cKWEbzJK+oJBvnzpjtgtvw6/oH/okAlQMF +EDV5zQX5KCj9YsSLKQEBbk0EAJ+CwSbR4QQ2pgyXV7U4P4+1xSXa8U6IuI7AX9Fm +LNlDu7a8DnJt8trZxjBcEMZcfoSNmbjIzMotzl0vvtDpqYgKfJ5Dd3eUTRCDYYS7 +8DoYcuB0cunBoGijkHS/2IkucAZGgcnNjPdhm7EnDJ/4F5VR9ZByqXiAIhZ746bs +Z+nrtCBBc2sgQmpvZXJuIEhhbnNlbiA8YXNrQHBlcmwub3JnPokAlQMFEDkjD+v5 +KCj9YsSLKQEBEK0EAJBYAopnB9/dun1G0t+TKWVwGQUi56sWd5bwLypHklf/fy2V +QPjCz9QoI0L/jAguBrqCfwtlIHRHMwzvvNWLRtuA8oiTDl4w2gO2vjy7V3Y4qneA +3U5CYRT/ekvK42d+aHA6yMeHSPlNEQg09Idmee5Lub7kV8ejjtRZ8s3jcZ0utCJB +c2sgQmpvZXJuIEhhbnNlbiA8YXNrQGFwYWNoZS5vcmc+iQCVAwUQOSMQB/koKP1i +xIspAQGtCwP9FFWCZN2540lomDAY6tXt7Q3AhP/CkAec5i/lsv21sUl09jlZQnr/ +Kc8hL1lPOuAlLFGqso3zL7KMVlrOIng+R/E5fcYpE60QhhIoHdvlxFKTJ5GZq7DG +stCrR34q2A4OWtoC7tF0Uu+Ew2ontVgvqsrgq4qt0h3yh/kABp/8mRw= +=GGxP +-----END PGP PUBLIC KEY BLOCK----- + + +Type bits/keyID Date User ID +pub 2048/10FDE075 2000/10/09 William A. Rowe, Jr. + Key fingerprint = 33 16 9B 46 FC 12 D4 01 CA 6D DB D7 DE EA 4F D7 + wrowe@lnd.com + wrowe@apache.org + wrowe@covalent.net + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 5.0 +Comment: PGP Key Server 0.9.4+patch2 + +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 +Svnm3b8WAJ9sKeuYzFUrRi7+TMHG+5qjYCkaug== +=e23Z +-----END PGP PUBLIC KEY BLOCK----- + +Type bits keyID Date User ID +RSA 2048 0xB96CD0C7 2001/01/04 *** DEFAULT SIGNING KEY *** + Bill Stoddard + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGP 6.5.8 + +mQENAzpT47cAAAEIALLL4JXm/9vHTouYSWrdDvAvNNxa6UwOZ1Sp6urCgGtuRLz3 +ysFFY4hlfIhSUvMdBuLMY5X73Tzg0+LpzCBuvRHasSUWO/5UMlTdS4LnI6oIS+7T +Nc//iwPQaH+P3CU2QScftyI0kS6kxr49Ejf4UZrJwMXsgvk+oDzRIdx1X8F4A5oW +oAUl2njrqVodbO9nPifBPlooHg84Cm3r1xgMK8OPPSEiVnmypmwTXE0fMsxAmW/6 +AqPf6x54tKmAyFY6UWM1bX/XhjVlwUu0Ax7ndBTKgw2ZCZA3TY3GQTPNbiK7eOpr +PUYN69EIKwtyFZHDSalkVpaZB44/nZygsbls0McABRG0IkJpbGwgU3RvZGRhcmQg +PGJpbGxAd3N0b2RkYXJkLmNvbT6JARUDBRA6U+O3nZygsbls0McBAazZCACW0+ss +3zAcpJNVI8rBZGwRSCEHW+NVRCQvrT4WiXQmb0fcTMJD8WD7kkMrYxaDuRzx4Iqr +nwdTqzc0MieM8j0lqa7zaoncxYFh/iLeeZKvK1988UIrVmFDslRQpnzeSXLjUWnF +1JYsS9+sYt8NBJGSIGXALji8QwcjpjRagzNjyO9YEs3TkGqdNslTQo1LJ2ZNIH6T +aIWoTdnoU9WUUldsSQEbYB6JNNP67eiFTRZZnKradoQ0PVBXtYZAw1zOp5y/xPH+ +72vhKLk7+Tt3zaV/SmoB52ssE7AXazdQtHfH3N5XXtZJvjIIf/Y/Svw+OaJ2nD3n +Jn3b7QtvWvkY2geD +=0D9G +-----END PGP PUBLIC KEY BLOCK----- + + +Type bits keyID Date User ID +RSA 2048 0x423FF2F1 2001/03/16 *** DEFAULT SIGNING KEY *** + Paul J. Reder + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGP 6.5.8 + +mQENAzqyerAAAAEIAMPeottLIzgSNklzro66gEnshbRLeb8MRwlivgOMxl5MgDpx +sH44MPaYKaB1owFQdVSSA+k8ARrxSbki46mQvK53+t1yUeVtaPu85GBta4Q2paXJ ++2/JVB83Qt8ZdkR7bA3Rxet+Poye4wqZcNQW271FS+sUkTvhAF6nb+5nWFNyKkTe +ApG9eudukksFd4Uh6ekMjpOX0HPUXoyzf7CmwSERZIny+qwK0dkKkr6qKvZZOEXu +wjnFgQoqcj242usLpGUfrGZCDQsOheGmaWH+RxrmccOqqqfmjo/EoHNjmEvfRSDP +Mviq9p574VRsKdt3smkyo63DcaguX/FV7EI/8vEABRG0J1BhdWwgSi4gUmVkZXIg +PHJlZGVycGpAcmFsZWlnaC5pYm0uY29tPokBFQMFEDqyerBf8VXsQj/y8QEBX5AH +/iGMf93L2+1NP2MHZzuggQrcRcf7fkOdVRfx0GcMUFuet4G/0Qg/NKy24J2xMVLI +E03//bn99c47BmGWlSrsuKM3nHXDtLHfmX9ajWB2x5TGLsQqCubfvGyxviFKyUKr +tVLrvOmfiOGZkbRjD1r1mjNKWONKgUcjgFmSqsZPnZsclNjOMnqENVwOtSS14r0K +YMquMP/sk7xDNZlRVUPEVn2TlLSBJp0NiAzwzbafbszX6xHLRJzE23hCGjl0ZnX+ +zkBusLpUGkuRkK6phJO6pg0E41D5QRnts3pHaDQ4EI6jEnWwlIsavrHh0mAw6ocf +oO+6PlKrPkqjgRSHYewLqnU= +=WB/Q +-----END PGP PUBLIC KEY BLOCK----- + + +Type bits keyID Date User ID +RSA 2048 0x6BBA9D5D 2002/04/08 *** DEFAULT SIGNING KEY *** + Cliff Woolley +sig 0x6BBA9D5D Cliff Woolley +sig 0xCC8B0F7E Aaron Bannert +DSS 1024 0xB0D5F771 2001/07/24 Cliff Woolley +sig 0xB0D5F771 Cliff Woolley +sig 0x6BBA9D5D Cliff Woolley +sig 0xCC8B0F7E Aaron Bannert + +Key 0x6BBA9D5D fingerprint = B777 8235 B7D0 36BC + A8E7 C012 842F 3E99 +Key 0xB0D5F771 fingerprint = 3DE0 24AF DA7A 4B15 + CB6C 1441 0F81 AA8A + B0D5 F771 + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGP 6.5.8 + +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 +D7eRAKDOQjhlMF3OOD6KlGtnuBpdhpK6rw== +=gjEJ +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGP 6.5.8 + +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 +=8dFY +-----END PGP PUBLIC KEY BLOCK----- + + +pub 1024D/751D7F27 1999-08-19 Graham Leggett + Key fingerprint = EB13 8C6A F0FC 6910 01B1 6D93 344A 844D 751D 7F27 +uid Graham Leggett + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.0.7 (GNU/Linux) + +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 +=qXzK +-----END PGP PUBLIC KEY BLOCK----- + + +pub 1024D/6D791A41 2001-10-26 Greg Ames + Key fingerprint = FA51 765D 3CE4 EB83 BFE1 BDB7 605E 165A 6D79 1A41 + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.0.4 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +mQGiBDvZp3cRBACm75cSDrKQCCGZIv8QL/AvcNMidSpnuZn1Huvxq28bgl1eh3br +2JHBb8CYh1ijUNk9EQeB/fl6go8NiuWeLLVZkJGnqQRZSVGe+ukpZFLPFGb3mgGS +lBmO/88gQ3gld5Cfumy7VRmMA3EtLCQlI25h74RcPIw5Gzil7pSj9N4JywCgsLDR +olk/+Y4kTdHW1PTt0YbBETED+waq/aICopOLAtEC8W/G2uexi/m+FPXWwM80Mkxh +K+2tjZX9oxzQQ+/GDeFId3q5NbSndscAFMq57ZI9/daenkdGLQqG8gaO0Hto24dG +YNft/w92i5beYG0CPJoIFspCY46GeYaV0HoKaRkLVfcxXqN9UKvKmH18HhO6GO27 +idRMA/4l24wu/Qbp20PvEKTEAsPWQSfUjtbMECUdpmzC3/ZG6SWO1cICV/b+QlSC +p5agjTesvno7GJC5IVs09RAkW6NmX4wVLY1LROPIzCriJKoKfgEeJcEqXPZu8q2R +S3U2UPe0PEzzHjdWZlwps+iSr1qafaxRfZsnUXMU8X5KsV6GFbQfR3JlZyBBbWVz +IDxncmVnYW1lc0BhcGFjaGUub3JnPohdBBMRAgAdBQI72ad3BQkSzAMABQsHCgME +AxUDAgMWAgECF4AACgkQYF4WWm15GkGFuwCfaWyKPP8/CtIqgZkIBxUB4QqYwiMA +niSB7MFpia1iTSSLg7e9dum5wrasuQENBDvZp4UQBACBHtkysTqPXCHqzsr75CSL +7SbdmLQQamlMxw0crksTfDZyPIr6AVfZcojd+EHO/6bHU270FxuIwfR5n2NejIIx +oZzjkTJ/TAa2r5qFy1XoUMnodF4qSNPq/JTajIaHXTSgNtPfuw098h3ommZ8XGSh +OMEovonFFjNNXYCHeY5EBwAECwP+OJdDyBkt9r4Zr/5mbhsQJ78TlKhDpDy094zW +/pHgULSEsVKbGbRGcDLYnTZ8Hjs7pCuyGy7uaCuWArRrnAzP40LNHEao7svl1VmR +wZFsisZ10D5kRB8MRVh7ckdOqxq/lSC8AfMBaTmN81Z2ljMWQ7SEvdCGq5OU2wn7 +O59wAOmITAQYEQIADAUCO9mnhQUJEswDAAAKCRBgXhZabXkaQSHkAKCUveQ2Ews0 +yTd8V9Co3kVUq0E02QCfccreS0fXB9D57p8qPvXRWvJGiRs= +=SVx5 +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/E04F9A89 2001-04-03 Roy T. Fielding + Key fingerprint = CBA5 A7C2 1EC1 4331 4C41 393E 5B96 8010 E04F 9A89 +uid Roy T. Fielding +uid Roy T. Fielding +uid Roy T. Fielding + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.1 (Darwin) + +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 +xkA8JT6eXcJrBJhGbcY= +=KQRI +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024/E2226795 1999/09/19 Justin R. Erenkrantz + Key fingerprint = 3C 01 6F 2B 76 46 21 BB 54 9C 66 B5 16 A9 64 95 E2 22 67 95 + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 5.0 +Comment: PGP Key Server 0.9.4+patch2 + +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 +=6s4E +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/2CF86427 2002-02-01 Ian Holsman + Key fingerprint = 67D4 D4C4 79ED D9EC 88E1 734C AB7A 60BC 2CF8 6427 + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +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 +3ufE48GfSyj2H+vBJijepA== +=XyM+ +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/CC8B0F7E 2001-10-02 Aaron Bannert + Key fingerprint = 937F B399 4A24 2BA9 BF49 E930 2145 4AF0 CC8B 0F7E +uid Aaron Bannert +uid Aaron Bannert +uid Aaron Bannert + +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=SyIW +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024/3A4E7AC9 2000/10/11 Brad Nicholes + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPfreeware 6.5.8 for non-commercial use + +mQGiBDnkyK0RBADedOdiCuVtn2awUpoc02Gq+BCHRjy/lnZ9p4wdgJPJIdImcEZo +agfLwU8iDY4L+w71FMiZjR6Lp0dRK5TupeUD/NWEsDM7we4KjafK1tGN9QlkXAtZ +WulDyUoR6c1cTNeMPowL8/MMs4IP1VGL+9SUjSsoJOm8VBu66NLne/WnfQCg/4bs +0pNeQCtdzCzeNnTFbDSFd7cD/2FWSh+CMrhhC9tqDjfkvLrjcTj1bEpOI/qYb8Ir +eivywJQ5u/tvIkW856SubuBDFRy9kMlJEJL7y8pxD+6xm4ZYexznLS2AjaiseqLE +tgR+AXtgjebiM7gQ/hOtDJjpTPeA5hLYIsDYYrXds7FTeYhsJVeXZpZt6T0Uqqjk +aIe7BADXsfg4lz9/ecmHjo4VAOII6A+Ax2P0FTkxSXqPfIK1AGebIpAGE9nrc9t3 +hKkaqFztHM/OS5/QFs0G+RBnSyMUd/HXUFSl71Bf8F9dq/CdhNK0KXnOuZqpXZaT +WuD3Fl96HsCXYF2Dvzwf7Yoyai/3wX+f04VZbBKuLM+AsZmG67QkQnJhZCBOaWNo +b2xlcyA8Ym5pY2hvbGVzQG5vdmVsbC5jb20+iQBOBBARAgAOBQI55MitBAsDAgEC +GQEACgkQ9V3wKTpOesnSzwCfQ73nPsRRK31if54rQKcVaa1A+68Aniks/MIcwGUC +xSxJZpCGICkXhueyuQENBDnkyLMQBADZi2ehJNymtM1VOMCzWkamCuIWaDZzUOmK +Hz7pFnceoFC2xynrUI+AJIzFqqiWqovQqv4V3GloRdWcw9Ye2IIi7H25r6v00Ng7 +kL1TzFpjC6yoHGXgEzYFfxa63plWCRGdfWU+3yzg7lQAF9a/ATUxXUXl+uIebQbo +ZI1Wt4l1kwACAgQA0bT3PCO4TT0yhTuS+Rgk3ROqZTNhmMAnrTpHW70E4N4hgBe1 +1ZEralIhzT/1/dpsPbouDMMUer6voDcAyq7kCZobu/84LKhvCgFLQAF7PAz6g5Rc +sPsoVv09UYYVgVi96EeGciA6ozVSGsVfNwEzZX7QOBoyrFozlNlX2Y+oF8iJAEYE +GBECAAYFAjnkyLMACgkQ9V3wKTpOesksrwCgwQImPBW83G11skRygzwEOm9DWHoA +oPpwZLqqLg4/dGQ0ZK0Qm3HXok7W +=YgRS +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/DE885DD3 2002-04-10 Sander Striker + Key fingerprint = 4C1E ADAD B4EF 5007 579C 919C 6635 B6C0 DE88 5DD3 +sig DE885DD3 2002-04-10 Sander Striker +uid Sander Striker +sig DE885DD3 2002-04-10 Sander Striker +sub 2048g/532D14CA 2002-04-10 +sig DE885DD3 2002-04-10 Sander Striker + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +mQGiBDy0wXgRBAD1J8+8rBKAXD3Z9n7LhdQ+gDcYIDw/sN0cZGz5kpc/1YWWaMQg +ArmoNW7y+BBwNu6Cn42Nid16avSC86H1zBzOdQscDc9/WLwBCiFDCSHB98+UId25 +JGS2cRSE6vt2oDOy99Ent8Eh3f165e0rWVdc7NMOcFGhCTquAFbqMfxYzwCgvGIC +KcMeykaY5QSHrX+ckJmc2QEEANDc4ZRPVF7cQ2wR2OIYzh5oXInhFFnyW2vYbTsx +NwREbizoKXqG7rmTmOQPz6DsifJEo97QrFrSOcD9FI6aUpDmu1Ns06QSjmzCSS6i +R1xPXBp5//2jcWjLs8td30N+AfwFnnB45sy8ILWel1CkGhdPoiHdI8Q0nJWahVwU +PKz1A/9xPsk9k0quKrhEKI7sYZFJn/vy77gh4/k26/jk7JERonO8ECDDlo+r/hfF +op8A/ljW2BDm6VxHSBUkIJvULUbN8rxvQGnpKplv9jgiwBHoPhKZ/TX7KvXAvdPg +bx8Z4EfSVJRQs7j/v/IhM8xn8tu0EEW+Fg1SHCFWV5iqe6aTZrQjU2FuZGVyIFN0 +cmlrZXIgPHN0cmlrZXJAc3RyaWtlci5ubD6IVwQTEQIAFwUCPLTBeAULBwoDBAMV +AwIDFgIBAheAAAoJEGY1tsDeiF3T18kAn2kAzhMXT0tOg5GvGVNi+rc+dpZcAJ4z +rKA/8TnQ88Lqq/OOwkuC/TXrHohGBBARAgAGBQI8z5oyAAoJEBapZJXiImeVyywA +n1wPiGQVC6Kwdz1XlXrFL6/yC98mAJ9MZZgOr/Kyh2mDgwqWi+Fa/bgqarQjU2Fu +ZGVyIFN0cmlrZXIgPHN0cmlrZXJAYXBhY2hlLm9yZz6IVwQTEQIAFwUCPLTB5gUL +BwoDBAMVAwIDFgIBAheAAAoJEGY1tsDeiF3TQNMAn0ear3DqKydi9oTzfBYFCidn +YhqJAJ9fvKcU27+jJCRHIPp3lQPX0C+UQIhGBBARAgAGBQI8z5o1AAoJEBapZJXi +ImeVXd0AoP+AlwMBWr5fJ9pERjvKmnnNJE5oAKCJTRBYnB/aYkt8/aqPMVtl3k1L +NrkCDQQ8tMGJEAgA2F8v1AMPGI7cv7cWuySfnd2CV7SXOZQpc3Pfv2UHgYP+1lTL +NJoRtfwXMiNjrEwgLrpLy7F0nHnVqb6MBYv/Dhx6eO7MoejJUc2pADijCS3Qcg5n +7hCZ+pWvCjdZAfZhHB1cpSm0FVuc07jrJYTbI/qsdbUHQ4r1jcIZR/ZU4mTnFgnE +bAw4NxSGJ8ikFNNfviDdb3O/XAYS27dgJcGHOHaQi54dWkJpYt5vayUHYt85pOMH +MR1AwkvM3AiqPO3688VbV6mIlGS9XvBr11kbZ5EHUCDPFJl5AMjX2fg4lMQu/ONj +rbxCqbJppPLLXu/MwfrV9Y4pb7L+riWqdQwEOwADBggAgOqiXCSsRXmbxC0hYNj3 +UCY9KKy6CmCwExigG8Irs3aqC3cPGi9/9lpuniMN5F9ieN/BJysJHAFWN8f3z4UC +fQH6os3ewQDZqoFrgkHqlrAjej8qD0X5Ue0dozXLuMFe05X1XCkTff9wXI88uRxq ++5s7cedGqZQUixpN15oK9FZSORPPxjGsUe8NVMsplYvH/2xt7tXzDfE09zwT2qnM +voQte/WBoVYdVCigUIeArRqNyCsk1yGUfiBcmJFHCyhKNtYNAUwWGPv8AmTAb5yf +FFVprAMbDlv2yhiTnEj7AvEC+OP1RH0Z4j0TDlpeKHoZtu3uP/gp7Mshs7ssE2mV +qohGBBgRAgAGBQI8tMGJAAoJEGY1tsDeiF3TPewAnj9AmBMuS8QvsuS5hUhSWNZ/ +uLN6AJ9FK1Wz3vBRoTloK5D3D3UaJ4x7Hg== +=AHY5 +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/E005C9CB 2002-08-15 Greg Stein + Key fingerprint = 01E4 7536 0FCC F1D0 F24B 9D14 5D41 4AE1 E005 C9CB +sig E005C9CB 2002-08-15 Greg Stein +uid Greg Stein +sig E005C9CB 2002-08-15 Greg Stein +uid Greg Stein +sig E005C9CB 2002-08-15 Greg Stein + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.0.6 (GNU/Linux) +Comment: For info see http://www.gnupg.org + +mQGiBD1bRO4RBACFxCQEk8j9a9SSzVIFUg6EKAXabSii1f2vyhdsj7yLd4E2nybA +6907ohpFkIHdOGWAasKKDRG3rpL1X37c5dxUYgGFGyfbe7FapUPP0azq/Wsfn8Ax +6D0jcIHJKZg+L0zHqxSwItiyiSqt2YGRUO42Bo/8SF7PHnv5TNKQZOjBIwCgmyiQ +lVmqE7NiM2oR3P0kYUDDcWMD/j0v3uyNKPTTOgapzRM7ThACv/6KmF600HH4ZbHg +3B2JTaoHiCDoYs1kp/8F65N6KG8S8wzJb1ErpbZSCqy7ZjjFm+NDRsTkFHPZngUS +l4ctAthOwgg93STorWE+XRF9ZjzL/XcQog2XV3ZMZAGq0prgX0LjZ8lHWPkvYv63 +EEJIA/430y8P+3refqpeO2UtsrUeDaYEkNJg379USVdI1VDJXdS1G5lCRkNiRcyU +im6ZcgOlgf+7KNuBv9urIwk7GkcPl4QHHFk2Fex2+k2JDxn+8gafjG1O2bkDKEyi +csHOWFouQvxLhglC8WJCmPQtMwMWzVpNlOnKyN6MPyvFz0CKc7QeR3JlZyBTdGVp +biA8Z3N0ZWluQGFwYWNoZS5vcmc+iFcEExECABcFAj1b0FwFCwcKAwQDFQMCAxYC +AQIXgAAKCRBdQUrh4AXJyzFQAJ973oVmfVyH0w4cs8SljCxwPnhUCACfebmWhkt1 +aYuu0vSX34Req3TPZ9e0HkdyZWcgU3RlaW4gPGdzdGVpbkBjb2xsYWIubmV0PohX +BBMRAgAXBQI9W9BsBQsHCgMEAxUDAgMWAgECF4AACgkQXUFK4eAFycvhKQCdEvec +2nvVEx6OC95oTwYZSM2B0NoAn0Ju156UP6IwGwczI0UGYuezk/4xtBxHcmVnIFN0 +ZWluIDxnc3RlaW5AbHlyYS5vcmc+iFcEExECABcFAj1b1JEFCwcKAwQDFQMCAxYC +AQIXgAAKCRBdQUrh4AXJy2W3AJ9Q/SnukhlOxz2vHahHiQ7ZgDE5qwCfeCn6PL3H +VMW9xLKJtU0O+Fep6a4= +=2Mbf +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/8103A37E 2002-07-18 Andre Malo + Key fingerprint = 92CC EF0A A7DD 46AC 3A0F 498B CA69 3974 8103 A37E +sig 3 8103A37E 2003-01-01 Andre Malo +sig 3 F88341D9 2003-03-17 Lars Eilebrecht +sig 3 5F6B8B72 2003-03-17 Stefan Bodewig +sig 3 2261D073 2003-01-02 Astrid Kessler (Kess) +sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik +sig 75A67692 2003-03-18 Erik Abele +sig B3B2A12C 2003-05-13 ct magazine CERTIFICATE +sig 3 F43C2F92 2003-10-03 Bruno Lustosa +uid Andr\xe9\x20Malo +sig 3 8103A37E 2002-07-18 Andre Malo +sig 3 F88341D9 2003-03-17 Lars Eilebrecht +sig 3 5F6B8B72 2003-03-17 Stefan Bodewig +sig 3 2261D073 2003-01-02 Astrid Kessler (Kess) +sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik +sig 75A67692 2003-03-18 Erik Abele +sig B3B2A12C 2003-05-13 ct magazine CERTIFICATE +sig 3 F43C2F92 2003-10-03 Bruno Lustosa +uid Andre Malo +sig 3 8103A37E 2002-07-18 Andre Malo +sig 3 F88341D9 2003-03-17 Lars Eilebrecht +sig 3 5F6B8B72 2003-03-17 Stefan Bodewig +sig 3 2261D073 2003-01-02 Astrid Kessler (Kess) +sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik +sig 75A67692 2003-03-18 Erik Abele +sig B3B2A12C 2003-05-13 ct magazine CERTIFICATE +sig 3 F43C2F92 2003-10-03 Bruno Lustosa +sub 2048g/E71FD3A6 2002-07-18 +sig 8103A37E 2002-07-18 Andre Malo +sub 2048G/3EC3A5BB 2002-07-18 +rev 8103A37E 2003-11-28 Andre Malo +sig 8103A37E 2002-07-18 Andre Malo + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.3 (GNU/Linux) + +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 +=93VU +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/75A67692 2002-09-28 Erik Abele + Key fingerprint = D395 C757 3A68 B979 6D38 C258 153F A0CD 75A6 7692 +sig 75A67692 2002-11-23 Erik Abele +sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik +sig 3 F88341D9 2003-03-17 Lars Eilebrecht +sig 3 2261D073 2003-03-17 Astrid Kessler (Kess) +sig 3 5F6B8B72 2003-03-17 Stefan Bodewig +sig B3B2A12C 2003-05-13 ct magazine CERTIFICATE +sig 3 8103A37E 2003-04-04 Andre Malo +uid Erik Abele +sig 3 75A67692 2002-11-23 Erik Abele +sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik +sig 3 F88341D9 2003-03-17 Lars Eilebrecht +sig 3 2261D073 2003-03-17 Astrid Kessler (Kess) +sig 3 5F6B8B72 2003-03-17 Stefan Bodewig +sig B3B2A12C 2003-05-13 ct magazine CERTIFICATE +sig 3 8103A37E 2003-04-04 Andre Malo +sub 2048g/A680673F 2002-09-28 + Key fingerprint = F2A1 2400 3799 B66C 7530 19E8 D8D1 82E4 A680 673F +sig 75A67692 2002-09-28 Erik Abele + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.1 (GNU/Linux) + +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 +=Yf4N +-----END PGP PUBLIC KEY BLOCK----- +pub 1024D/2261D073 2003-01-01 Astrid Kessler (Kess) + Key fingerprint = FA39 B617 B614 93FD 2835 03E7 EED1 EA39 2261 D073 +sig 3 2261D073 2003-04-04 Astrid Kessler (Kess) +uid Astrid Keáler (Kess) +sig 3 2261D073 2003-01-01 Astrid Kessler (Kess) +sig 8103A37E 2003-01-01 Andre Malo +sig 3 F88341D9 2003-03-17 Lars Eilebrecht +sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik +sig 75A67692 2003-03-18 Erik Abele +sig 3 5F6B8B72 2003-03-17 Stefan Bodewig +sig B3B2A12C 2003-05-20 ct magazine CERTIFICATE +uid Astrid Keáler (Kess) +sig 3 2261D073 2003-01-01 Astrid Kessler (Kess) +sig 8103A37E 2003-01-01 Andre Malo +sig 3 F88341D9 2003-03-17 Lars Eilebrecht +sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik +sig 75A67692 2003-03-18 Erik Abele +sig 3 5F6B8B72 2003-03-17 Stefan Bodewig +sig B3B2A12C 2003-05-20 ct magazine CERTIFICATE +uid Astrid Keáler (Kess) +sig 3 2261D073 2003-01-01 Astrid Kessler (Kess) +sig 8103A37E 2003-01-01 Andre Malo +sig 3 F88341D9 2003-03-17 Lars Eilebrecht +sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik +sig 75A67692 2003-03-18 Erik Abele +sig 3 5F6B8B72 2003-03-17 Stefan Bodewig +sig B3B2A12C 2003-05-20 ct magazine CERTIFICATE +uid Astrid Keáler (Kess) +sig 3 2261D073 2003-01-01 Astrid Kessler (Kess) +sig 8103A37E 2003-01-01 Andre Malo +sig 3 F88341D9 2003-03-17 Lars Eilebrecht +sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik +sig 75A67692 2003-03-18 Erik Abele +sig 3 5F6B8B72 2003-03-17 Stefan Bodewig +sig B3B2A12C 2003-05-20 ct magazine CERTIFICATE +sub 2048g/A676B84D 2003-01-01 +sig 2261D073 2003-01-01 Astrid Kessler (Kess) + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.1 (MingW32) + +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 +d6rncSGIlA== +=SNQD +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/208F5064 2003-06-13 + Key fingerprint = 984F B335 0C1D 5C7A 3282 255B B31B 213D 208F 5064 +uid Joe Schaefer +sig 3 208F5064 2003-06-13 Joe Schaefer +uid Joe Schaefer +sig 3 208F5064 2003-06-13 Joe Schaefer +sub 1024g/ED4260B6 2003-06-13 +sig 208F5064 2003-06-13 Joe Schaefer +sub 1024D/F8B0462F 2003-06-13 [expires: 2007-07-19] +sig 208F5064 2005-07-19 Joe Schaefer + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.1 (GNU/Linux) + +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 +=8SJS +-----END PGP PUBLIC KEY BLOCK----- + +Type Bits/KeyID Date User ID +pub 1024/0300A2E9 1997/10/12 Jeff Trawick + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.2 + +mQCNAzRAzqIAAAEEAMJUorgTyMEZPP+vXvmW/W+kdoCqAx7PFNpepvxTsTc5CQLt +Up9PvWrCGT/lAWO6qQkOsyNju/g5c/+cbJv3G0h4bOZPBEbRH3pkmAOAFUVUdmIu +FM+piYLdoAeEcE5+bmvWpzddkuiRRNIsMjmNjuNkqgOtYEZnGaCc8zADAKLpAAUR +tB5KZWZmIFRyYXdpY2sgPHRyYXdpY2tAaWJtLm5ldD4= +=E80M +-----END PGP PUBLIC KEY BLOCK----- +pub 1024D/A879FCF5 2001-11-06 Gregory Trubetskoy (Grisha) + Key fingerprint = F8C2 405F 8893 395E 4DA8 68BA A01D BC9E A879 FCF5 +sig 3 A879FCF5 2001-11-06 Gregory Trubetskoy (Grisha) +sub 2048g/0596F229 2001-11-06 [expires: 2006-11-05] +sig A879FCF5 2001-11-06 Gregory Trubetskoy (Grisha) + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.2 (FreeBSD) + +mQGiBDvoUEkRBAC2ZKj/jb6WQEPH3pU3dfC654tnYU80UlbBo6HUUgj9CB6QtECr +GsV771OqbBm4YAxpIo1QCpCSqnQyE38TEayuEs+BVWgh3WvZb3mNHz/5NFc2kEpt +i9YxGUkQ9/2sSEvGSVbEYitbghjLAFzQxuPfxUhxW8GnDBSOdLhF7Qy7PwCgiJwq +406ZJz5UGvzuFgpMZsyRm6sD/AyAM3eeTMARQbYa2cKBFDwgy6wLZl+llDGYmT9G +D+N1uyyLtiqNwR2ANBJC7gJVfNtVFIMLnQ3ms/nVFzTugQKyunlg2Koq+3ORDw2w +Hc/IJZiDlW+oyYeKZNpze7FKFalC2BzKA2QJDG7sHOHuqN6GA3FpFpw+LnxPTjgX +OOPaBAC16on5pd6AXuC1BoJ/TAJgXlirlRysJQbcRVMBgb3sUouXcg2NvHGheVzd +BEwRRZWH5oSxQW+C/dcJJIzF5je49TgBUzKuKSIdZ7x7fM9mm83lVa9mFVE3DLZ9 +sL7f4QRcefAUdCvwl/9bQq5fx3ZiT2v12FNPkZKfoDpFvKbPrrQuR3JlZ29yeSBU +cnViZXRza295IChHcmlzaGEpIDxncmlzaGFAaXNwb2wuY29tPohdBBMRAgAdBQI7 +6FBJBQkJZgGABQsHCgMEAxUDAgMWAgECF4AACgkQoB28nqh5/PVGIwCfXKn6dGHw +ypchTj31SPs0mG8mmdMAnjmIG097j3WbwlA0cnLkd9cuyYq0uQINBDvoUG4QCADO +YvhOJQ5hYohZJrSrsMZMe49HBdiPnguxa6tVBbXwnJwPgk6ceYliKMhXe76r1cQz +pgqyVSXVqeM+dxlIb8+Oxjm78OcGXlGhRoN/0MdU5yvj05UnPhKX9PE0nfTHhP7P +ROEs1EBfSkKjBFri+pvPw6QS/3wAundM0sO3OcZgrZJhbpaKCwocI+QnVaXjOzPk +vhguMT1jboQH3H4qKHgu13neQ0T6g+29UkN6cr3lj8izTb78htybgKY+btRuF9IT +19yCa598prBka8F3weCTgrYm0D7gNA5Mh93TMvmuQT1xwL7KWrTpDF39mUJjdrs9 +LufCe6dVlCw/fs6Ler+LAAMGB/4ktRdYZB7IGXKzAm3Ga1mhM0uUsMEFnE04npKj +hA9VL2LbyGspHf+LH11SdN1SO3fOBN/6t82zI6/52oX5k5on/Ssa1Gjh86camewk +0DWHmnDSySsRU67ClBlRl0ZFTqVYld8NxzXihXN7OzJSIJQ2clz68iegVOg1zbWD +DhB/Hlysx72UOXLHi/KaXHMlW5A6lAmY61Qf9C0TR9Hcc5BJGimwF+hPNw0kIGw3 +oPYo6VGeFdm6P0LDVElw/gbQxjKW+qy3GYsINGZz2lYlz4H4DJkpW9gGFsM7l10M +/baQqcg9BpBrOE7QTzfFK3GLzrNV+zf8dseRLvLnZ92HYqoKiEwEGBECAAwFAjvo +UG4FCQlmAYAACgkQoB28nqh5/PVs8wCcCsMhi1SacFM1kpsM+JPdT/KN0qwAnA48 +NdqzrIzzrrlvI8FkkZZzKggV +=kwZz +-----END PGP PUBLIC KEY BLOCK----- + + + + +pub 1024D/E76CF6D0 2001-04-09 Stas Bekman +sub 2048g/01611FBE 2001-04-09 + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.0.4 (FreeBSD) +Comment: For info see http://www.gnupg.org + +mQGiBDrSKd8RBADpBhHzpCEB/tWZTNZ0B4oMSMsWBnukkYADPy7ydBUOZHw17ddL +oKj8IOveqkX9Fdl7e32At1cd25kitU2nNXeQWt27C47LfDVR0iPfnVg+YE4jfDDb +rnDAcMKROqjvTTwAuGw8S+m+yqmS2xXsKIBN8A7druhT8R3xg1uBBsueHQCg/ytA +mFM+SjmUXumdid73ZmyK8Y0EANA2uWUEUVQ7PFipydmy2AWY/ZwYrrh79wLy6hch +zF294PU8Ubx/lqENzZBLNfMTeA9l8mbc1jF+up1IBpG/0DRGiCDtWLBDjTGorIFo +ow2zkUKK603x+qpdXV0ghxBkb8KalUQrFAh4fr4gSdnvLhLP70C6hS6g3MbJYNHf +v78kA/9u9y05+tZyNTzeeEcFWXTJX4t2GT4G3J+85fjpxiO21bjNg/I3kUxEyIDc +sjsr0G0yfbSIdAKK88BC/YlRR9WfYKwd8vvH9VUyroYgo8ufFYvhhBZZwP+FWw60 +mvY5EWLPk5g7rwT8Fqrg5y8rVSXTsZs/baesQPqkhFLXT+g5TrQdU3RhcyBCZWtt +YW4gPHN0YXNAc3Rhc29uLm9yZz6ISwQQEQIACwUCOtIp3wQLAwECAAoJEMyy60bn +bPbQnXQAnj8fmeXLyodcHPASyt376IUzsar4AKC98XkNtS8gl4AfCCfOUkGNrh59 +B4icBBABAQAGBQI60Z9MAAoJEFMHR+Yj6eq1eLsD/inQzkDNOsCDEbOF9calmv/C +QkRZps0kLKEnxk9bS3SnwYZN3PbtZDNh4ImrrZ/xqBdkOds95jZm5Mo4mJUTzpX0 +gK2gEhajjeWUdQ4k0QZ7pb722DQ69PMJReNZQQkcV+rY3SaRLugeDUIzpexvcO1w +i4lKffrvJNVN0I/Yim4UiEYEEBECAAYFAjtSGwoACgkQVZHiwGZkwHhcpgCeNoZu +zqc9rVB62+Igb4pu6l65Bu8AniM2tGWqq6tFGLqvYtA7DC0mlFfhiEYEEBECAAYF +AjtXsjcACgkQyzKhB4jDpaXnwwCfSUCu5OKxMNtHZWQwv2HMt/DlgFYAnjoAbCqy +96V/aY/0rHMhPWlhd4SJuQINBDrSKd8QCAD2Qle3CH8IF3KiutapQvMF6PlTETlP +tvFuuUs4INoBp1ajFOmPQFXz0AfGy0OplK33TGSGSfgMg71l6RfUodNQ+PVZX9x2 +Uk89PY3bzpnhV5JZzf24rnRPxfx2vIPFRzBhznzJZv8V+bv9kV7HAarTW56NoKVy +OtQa8L9GAFgr5fSI/VhOSdvNILSd5JEHNmszbDgNRR0PfIizHHxbLY7288kjwEPw +pVsYjY67VYy4XTjTNP18F1dDox0YbN4zISy1Kv884bEpQBgRjXyEpwpy1obEAxnI +Byl6ypUM2Zafq9AKUJsCRtMIPWakXUGfnHy9iUsiGSa6q6Jew1XpMgs7AAICB/47 +TeZ/O+z41M9MMI2/4aKBqbfIWNzcWl+71KZwPymTQO5F+WR9fSlS+qTNz+h3gi+l +bAEQ4dI2d+tUZX6q5cszNn/60ffxUbEqa3uBIkOaE+ZuoFSM4I/3IWlZqH7q2x3N +Q/oQgthLOU7c8HnCv3hHL4a1nsvVZze7zT4Rasb07+kGydlYpkoVhFEp012s0PJT +vDHG062vs0sx9HmknX6Nu1y91UQCFE7GVfkixk991s/7qHbKNW3u7FC1F0WrwMDa +Sgp27uJmn8E+tFrb8mpLqvJko2852EL9xKWGDDUqI/sRtZtuxdTcqsLBRyGJqxFy +0yA+GHeueqiS5YeEX1Z1iD8DBRg60infzLLrRuds9tARAvtZAJ9YzzyCiEYU/s9p +NVbVevC9/OkwYQCg5fViSXktQM035ki0W14ocNEpXdI= +=oamg +-----END PGP PUBLIC KEY BLOCK----- + + + +pub 1024D/42721F00 2004-01-17 Paul Querna + Key fingerprint = 39F6 691A 0ECF 0C50 E8BB 849C F788 75F6 4272 1F00 + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.4 (Darwin) + +mQGiBEAJtaERBACrYSun+13XY5xobkfAojSZXeYiLCGrqpRQJiRbSQCQEFIhCqTp +5Q3q5wcHFqx9da3EpF9Dl9yw7BP/R1nvWw68/eGKMusjyvjF9vVKFFCnaB0YwWuh +tViq/+OVnVrkPKNtpkBcg4Rl14tEKqOVRAMX+GaPLZTb0J4/rSfqWMitVwCg0ZfQ +pHJRuYqQDMUlWlg5kdMAxl0EAIGHa1q5fx81qd4jOd39C9ujkSak0GTlTWQptvMM +LrUbbC0YCYKydKK00QG5sW/oSZd0emdn/0ITaM3v7Pe/JqinaUitIBeyIrLIYKFC +TIArG7mqCJWHmGXhG0wkI53T/yE0ErkgDMN4U3jTD2ZcbV+UXqygHAtR3qM+uIsJ +H/hYA/wMj3cOKwMBWfac3i/mrnJVdOXMaXzLrB6EjISWRhQrrlKVBsgqkPEdKwYb +S1hieaoeZ0UIt2T72Un/KUZinBYYGZAzXSFQNNqiyvy1v5WeVMjaEHOHHWLbqzX5 +3ycf4o9B802MIBS6F0UGpCAEnakZzT+2GG0B/z8RTF6eHpRBv7QbUGF1bCBRdWVy +bmEgPGNoaXBAY3lhbi5jb20+iF4EExECAB4FAkDwYsgCGwMGCwkIBwMCAxUCAwMW +AgECHgECF4AACgkQ94h19kJyHwA1pwCfYThV8T/7hCKtGOBUgVABymqtER8An1Dq +UrHIVDhb8JkD/pXxjf1g5pVWiEYEEhECAAYFAkGjAIEACgkQB2FzsZKExFLdCwCf +bxMTetsoC3REjFbIGddDZQOICUkAoIY9m2AOUZmx21CniAK4ihNq1As8iEYEEhEC +AAYFAkG6O+IACgkQAQVmvOQTY5JrygCgiW8vzmmKQ3lbIRUpHyQ1D9vubdYAniuO +5P3M5v2glVmplF2kma3lu9SriEYEExECAAYFAkGaiAcACgkQMJF5cimLx9ADZwCf +WWqyc5FAe+exeZeuOzL+F2Zj4bMAoLVY32mEOzifj3gRU84v7Wm2HxAMiEYEExEC +AAYFAkGaug8ACgkQW5aAEOBPmomgLwCghP2fgryoG0IqPtp9NHWIuecwhqYAn1M+ +VmigV5yC/PXqZXhxCUX8YTZUiEYEExECAAYFAkGiWNwACgkQBJfVkRK/55qYPACf +SReNPV+c0HhjCPgRT9/oZLw/E0UAn3uz9WHSWqxBrmvpoAXUFlBGqYZeiEYEExEC +AAYFAkGjS4kACgkQ3bpkuiwxLS+jzwCfeziDXPZWK2KIhNEYW9XnBxfRzPsAoNXw +LWYxPgO35kBQ8KTvoJbta0HTiEYEExECAAYFAkGjS5IACgkQUI6uxTAtpWj2PgCf +buJ0M+q0RjVJFZ9FsttqXzCYr8EAn0/J280RJzAAvGARJkRztdZmkC+XiEYEExEC +AAYFAkGkL9MACgkQF2rZyNGqiWKJtgCgkf0628uDGiANtRsnVqTC2T0ZXbkAoIVp +cBe1RZIrVZ3I/d1ZM07u8Rm1iEYEExECAAYFAkGrePsACgkQzgGkfhxD2FBqPgCg +mtjV6A54A0n+cWj5QNXhNoUKLGwAn3FXjBUNPsEDliW9cWBYS6ceRF1FiJwEEwEB +AAYFAkGjTT0ACgkQms08wKmfdd2zFgQAwloFiGEZ4n+WrOMzzT9eued90SSVW42c +6JyJA+nChSaGtT50XBxXDHxWtr3rtleQn/MqnFpFdi+LMCREJzc3Og3V86M+ndj/ +6xftMyig0VW0lC8FvDu9WSso4ny3MZt2vUmOqUBH7ConCFIhjEdjS4dCuq1+RhmH +o+R7TDImU9eInAQTAQIABgUCQZmBbgAKCRAxpj2W7BQLgafeBACXLa0nkaexTqjG +EhG/kksIC3TXR6IiH4i+VcTzuMEuv+T7uDrdhZjc7jroeLWWl5XyLCASyhI6LP/3 +lrK+UdO3AnNA+PDuzVYqaC4dDMj9kdDbEzKYcrVPbKymuTVzR4l+XSgWz5kOyoDW +Nsqk6VxuK+/KdnuXdZ8K938HVBuIZYhGBBIRAgAGBQJB4sieAAoJEEzETQAR34fp +yXIAnj1YBCHiGmdN6GjkM4oTyvVRWhluAJ9yWdPGw5wrlsRtAl9WHVqnZ3iPMIhG +BBMRAgAGBQJBzqlGAAoJEME58VMjy3oqkFIAnRXkYqT6dfMckUaBZNCi+V9zi4kr +AJ9qKT38Kfs36TFRt/WxmFZLysz7D7QiUGF1bCBRdWVybmEgPGNoaXBAZm9yY2Ut +ZWxpdGUuY29tPohgBBMRAgAhAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheABQJA8Gcf +AhkBAAoJEPeIdfZCch8Au7UAlRmVWI3GpMbVSxFf1w/jj5I3S6MAnRfzZ8URA5C6 +pzb5X+WecPVrON+TiEYEEBECAAYFAkGeEXoACgkQJ0aiJIc88a3YbACgmixFO0rw +BdROgUtYIUlYBLxucQUAoOb2Ki8PKEQlMl+gpaP4qwy+3E5kiEYEEhECAAYFAkGj +AIEACgkQB2FzsZKExFI/XQCfViYZu5AcqGa3aZynBgUAd9A8ekUAn2skGwDzd3Jl +y14qCWF+qCNyyej/iEYEEhECAAYFAkG6O+EACgkQAQVmvOQTY5KaCwCfUwLt98Pq +aVgks/658RVhhlUNqLoAn2RyNQ9njp0HEc0cjeowpU5s4BumiEYEExECAAYFAkGa +iAYACgkQMJF5cimLx9AjeQCfSWiedjEzebbt7il5PXHgvJx40pwAn1bbP6iVk7yv +3nM3xKTtD1mHWzr+iEYEExECAAYFAkGaugsACgkQW5aAEOBPmomvzACfY2Jx3c5a +GKEdKJBazjboun4g97cAn3RbDFtb8MDJe5bQVQ3X/vysdAQ8iEYEExECAAYFAkGi +WNkACgkQBJfVkRK/55qh1gCfYVBinwZQBDLLWdOhFf9wYWcqEU0An0k9HWExIUFF +3uItQ+K9Z7C3NGuqiEYEExECAAYFAkGjS48ACgkQ3bpkuiwxLS9JqACgrZy8c176 +z1zxMnKVgiLZ1xjjaI4AoLeLarplmadavnMPcGhF+TXH4Q2GiEYEExECAAYFAkGj +S5gACgkQUI6uxTAtpWhjFQCeMEJH780DFHpbXWSyOvs29cYuPFgAoLmUNcUQbx0c +iinkYFD8VdeReHodiEYEExECAAYFAkGkL9IACgkQF2rZyNGqiWJ1UQCgs3YJAx0P +6pinCMhzunuIJTVBbRsAoLfF0lN2LW6Cy6mHBMIG0YB9Y0zSiEYEExECAAYFAkGr +ePUACgkQzgGkfhxD2FBueACfdLtQ1wegmW1s934n4tDQH0dfpnAAoJbdfKwLrDNC +agh6BwGF+Kd5hJKDiEYEExECAAYFAkG+MhkACgkQ6DAYSBao06uOFQCeNpMgvhNE +MqsT3UWkDBjau2vTYcgAnRp3f65Wls0+Af794qZa9TtJFnqliF4EExECAB4FAkAJ +taECGwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQ94h19kJyHwD4kQCeO13BXjGC +MLvj7PxuXmav149yFccAoMb8DRP1u4pTz2aE38nKCHtO4kwGiJwEEwEBAAYFAkGj +TUIACgkQms08wKmfdd2aBgP7Bs3M4QnfAXFNf3pnWEIPhlS9JVsShwZEBe7U3saH +6vLdGUTOqxU7fT7nohhGV+XDCAHpWLBI/odavlQguZiTYQf/RHaSxdtoXUuwSpvt +NlFgYdp6ex/B2llg5Qof18LMHy1R5A9lm7M2Av+DDhi1ErYV59S59SryCU0PeREN +KoKInAQTAQIABgUCQZmBbAAKCRAxpj2W7BQLgS6bA/9Ds417wgIpgS6frkCtyKAu +otIL7JQ1Lqsbv4+CZeqi52ERxzGqryxBWx9YY58bwv+px9dOOnm33zesf4hx/IVr +nD82bnrmdA1qWqXPPfLAwYdKh98gWPnYkhH9RCrYnudCTFjNezS5+xRENQyYX1qT +UlAE+x2nffKxnLJ2845gTYhGBBIRAgAGBQJB4sihAAoJEEzETQAR34fp/cYAniEX +EYhEkx0osaS407/sVzK1CAd/AJwJW0ZL0nAyjjsqpgOM0ba3IpKxg4hGBBMRAgAG +BQJBzqlKAAoJEME58VMjy3oqDZkAn0Dulg3UtHdiI5EaABr9C5rN9lsnAJwIkeGz +T+S6kfIkuSH9/Nafyd6r97QgUGF1bCBRdWVybmEgPHBxdWVybmFAYXBhY2hlLm9y +Zz6IXgQTEQIAHgUCQPBidAIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRD3iHX2 +QnIfAFiFAKCVt9mEsKqCe4o1K1HmOAT4OmdiOgCgnCr58C1CTeBYMjzgiLteqSl4 +Bx+IRgQSEQIABgUCQaMAgQAKCRAHYXOxkoTEUit6AJ9sVkHFsNXow160c1h70DYF +nMduxQCcDdNa8lNoauvnKBq6Jv7B9JBaKEWIRgQSEQIABgUCQbo74gAKCRABBWa8 +5BNjkiZQAJ45YgPe6LiBIyGPI3LFsLPPaHp62QCfc6UHkdWCgsvHg8GhjSD5wwHX +UHuIRgQTEQIABgUCQZqIBwAKCRAwkXlyKYvH0NHwAJ946lD+sO4+bWSWVG7fGtgN +f3B32wCfRTezxng6aLluB/QWspObQEpvfXiIRgQTEQIABgUCQZq6DwAKCRBbloAQ +4E+aiVMeAJ9o25E+6sOTxI4KxYfPLfHgip/QEwCeMTzPbYVlryWT2px1syjvjXkd +tEWIRgQTEQIABgUCQaJY3AAKCRAEl9WREr/nmrG8AKDGq14Su7iLDYm5Z7/4LJSU +8/MF1gCePdaPGg0vmnWonKZJApyEEuwvDJOIRgQTEQIABgUCQaNLjwAKCRDdumS6 +LDEtLzrTAJ9aq2KOnzSclCF1BBuF9tE6Ykwi7wCfWOrw/mBKr0tolIcQ5esUinIB +RkSIRgQTEQIABgUCQaNLmAAKCRBQjq7FMC2laG3NAKCkzGOfXP+ONhWD0oAvIhjN +AccyVwCeKlQjucbMdl7uEkWrf1Gya8pThu6IRgQTEQIABgUCQaQv0wAKCRAXatnI +0aqJYpemAJ9GdLeZi96/h6Jg68z2ZDeSc53g3wCeJo7A6QuCXXM/rcmfJqCEbB5A +0G2IRgQTEQIABgUCQat4+wAKCRDOAaR+HEPYUPLQAKDAMgt9qlL55JIRygMXhdiw +kJD0TQCfQlGUyCYz4I3IYVbgpWtf4uq4KDyInAQTAQEABgUCQaNNQgAKCRCazTzA +qZ913fUWA/49r5W+Y5V4RRWGWgaXd8JLAQ2yu88qZsIam35F997tRS1uqZOoEWds +6r6F9XVXwOUt2xsZSe34+jRfKWAXZdcmTyMIMTInhCcmukPCzEcRRLd3PBgIBPDM +vMgGGLKjDjjh5QZ/IpYdiVKaiY1IN92OLm6sKXh3SeXAjWlt1fK1d4icBBMBAgAG +BQJBmYFuAAoJEDGmPZbsFAuBxiQD/R9audVADYECPnTSp+YZJeB+LSDh84FGrWRm +61yKp2qGIorhhzf1zZ77QMS45Zy3hEct4Bx6/YSpieL2PPzMKhag+6LNY2W46QYN +k+d9v+ru3MMSHYoNfIqo70GOV6zad4fUMYywtYhDEalyMyPB3pP8jrmHt8m5ahws +sfJKn3fQiEYEEhECAAYFAkHiyKIACgkQTMRNABHfh+k6TQCeJk1afbGzsIN/doC0 +0HvYiHCmk7oAnRd4SefB12lqKxB7+rOETvWu5pqRiEYEExECAAYFAkHOqUoACgkQ +wTnxUyPLeirbGQCbBQL/YdNEhAR+QojUCsGLg46B89QAmQF109O9TS5Eqrn9+C5f +3bck6qbEtCBQYXVsIFF1ZXJuYSA8Y2hpcEBjb3JlbGFuZHMuY29tPoheBBMRAgAe +BQJA8GKZAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEPeIdfZCch8Ak0UAnjpl +plE4Mw3PM3j9nSHOoXrzzglPAJ42khRlgk6TMfnUTU41h1FXA51bCohGBBIRAgAG +BQJBowCBAAoJEAdhc7GShMRSXd4Anivb6tq25jFqiaoFJmqkNoi3/vdCAJ40ZK68 +cP0Q6ib2yiOWdjlmftGXXYhGBBIRAgAGBQJBujviAAoJEAEFZrzkE2OSFoAAn3Wb +daZJ0raIS5NIOQcrca8sELZdAJ9y3+9st6AXjDXSRsghu59Zg3zfQYhGBBMRAgAG +BQJBmogHAAoJEDCReXIpi8fQl3IAn24VtuU4CYAkDfSJhPRPbdwXC9oYAJ9KSvz3 +7QG2mZnimcoopCQy2g1z9YhGBBMRAgAGBQJBmroPAAoJEFuWgBDgT5qJhogAnRL0 +IF9/2Exe712BeoVWPK5eBSi2AJoDzWCbp7wr1nALbPllkqApkll2S4hGBBMRAgAG +BQJBoljcAAoJEASX1ZESv+eashwAoIwuyzeeGal/ZWkKIxBbordqIl6bAKCj4iFg +Kya4SFt/bd5ZKBzWWv16AohGBBMRAgAGBQJBo0uPAAoJEN26ZLosMS0vJroAnjeL +RzjPkxFDmABQPshdkftFzAoXAKD7qaB4eHmYqZyDZ4n4dLpukmer44hGBBMRAgAG +BQJBo0uYAAoJEFCOrsUwLaVoLuIAn2deIMzEBk9KTdIITM5cBUiPccGBAJ9PguKy +15iLmZE1EduTLoY750KnTYhGBBMRAgAGBQJBpC/TAAoJEBdq2cjRqoliyFIAn0Ar +xe90GYJrXOPsan0RbBWfrIzYAKCku4aJi4Fy9OweqRet0wzeyYzEE4hGBBMRAgAG +BQJBq3j7AAoJEM4BpH4cQ9hQD4wAoLgEBvKXRJbdgpHKAynebPFc7+xTAKDCie3Y +g9nTInyAkBR+woMlo8IP4oicBBMBAQAGBQJBo01CAAoJEJrNPMCpn3XdiXwD/1O4 +ya08P1YxIYn7owU2DFVj65++T97WO+yOvkZnPuT88anrx2lci915sXAQYZh1o4Qx +HIsterJrJB31p3iokJzQxMt6K6HMzITDdNh4mvGoNAaSNurqhIeqmk2UpuLuDe1f +gART4fCmgMxglgIlMBI6UyhP0RhzHx+qePRHxf4hiJwEEwECAAYFAkGZgW4ACgkQ +MaY9luwUC4HNuQP/cQUltjk6iJq10+NLv97/vw7+eij/z8kBwfe7przIchSoApFa +ADyVDuIMmZcSU/PbwlPRebESQrQ84q6jHqpG3ZMhvIT0EEOWmS+8Ga1FhwqXjNrY +AsNlAFa/tfUPAPTj2M7kTt3Dq4UD2xXywY9Rja3Q+khSttGqQGEq+qB6a4eIRgQS +EQIABgUCQeLIogAKCRBMxE0AEd+H6ZS7AJ94jbsCZKDncSb/JktR+O3R6XjmLQCf +W8zLP/1780h7U+SeGZRx1K2uNDqIRgQTEQIABgUCQc6pSgAKCRDBOfFTI8t6KlUH +AJwOQx8xEJeGwce+D3DtawU+uf/JdQCeIIL5AT7+oEK1IzZDN7klXB/4zii5Ag0E +QAm1shAIALfqB4jeQyzKfybVkA8PksS9yD4hmjaYIo6XaQ6GAJsgYOVcWINPzcHt +2rjQNxScSjkNApTxttpgRRVP2s8RCR9Vkn8S2t76SKm85mgmuTT3iVNjyIbtQEqQ +cpN7LDJAq2LbGIDt1fdvmhkI2gNNqnbWMsAxsJkws3r0JHsCxD8jraXKvBQ83tFT +Kqi9ZeQ1nW4dc5s1/p40OLrsq3ww23CfnP9Oxp+8rvggWyE1Rr4xb6hnYN7mSLNe +u6xlycRopG12Rkvh5QLrKNr7D/GV1j6IGTqh4aRm+z9o/1Wwxz0WkaEyN7uFbQg5 +hscBBHJBKT1Q8evrJpTEUyzA8mrBO6sAAwYH/i2ygbxLRdqgRcjgqaWCkIDwUTJ+ +c6kIQmpPH9RMMpwnbU9kcGENCjhmFVIvbcUk9xBqQgUqSq9a8zZUrwuBauNCOmVX +wruGyIXAYjlUXvxMOpTgEku6PlpKiDhmcv1Wb21dTz020ID5gpAa7s0T82VC3ciG +JmYTiQut/Dz6W1X/vKkPtQ8UEQ7LTkNOyg7ys16FpktXYq/MxAhgQ5rRLqEwIPe1 +sjClgK4Lnzh5o6ue6pa6VAd+Bwpfy9i4yh3+CEgjWjq9DyciR6x6j2de+k0hQW6k +V01gLPtduJnaPo+XWlHMonhKSlsPK10RMuVC901oLZYZSKOwMgpG5EGx2OSISQQY +EQIACQUCQAm1sgIbDAAKCRD3iHX2QnIfAJZLAKCuvcDan/KMsSsAjM/rHTf8G0AK +nQCfbbvCK0fwZcra7ofd1z1Up1+ID94= +=xYye +-----END PGP PUBLIC KEY BLOCK----- + + +pub 1024D/F39B3750 2005-07-14 + Key fingerprint = 29A2 BA84 8177 B738 7827 7FA4 75CA A2A3 F39B 3750 +uid Colm MacCarthaigh +uid Colm MacCarthaigh +uid Colm MacCarthaigh +sub 2048g/2C7157D3 2005-07-14 + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.1 (GNU/Linux) + +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 +Wq8UfA31IsLnxfIOGQ== +=95yW +-----END PGP PUBLIC KEY BLOCK----- + + +pub 1024D/311A3DE5 2005-10-02 Ruediger Pluem + Key fingerprint = 120A 8667 241A EDD4 A78B 4610 4C04 2818 311A 3DE5 +sig 3 311A3DE5 2005-10-02 Ruediger Pluem +sub 2048g/A21CD598 2005-10-02 +sig 311A3DE5 2005-10-02 Ruediger Pluem + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.4 (GNU/Linux) + +mQGiBEM/yAsRBACVZVt6oK9fpc9B/7vPny00aHnuhDQ0MsM5rbEGZ57aBnmHYyX0 +gTKLWGBXhlkos0hxBBIc9UUbOmaVBp4VFu0rz8IQ2OUZ93J7lR/khRG3wlmYx25Z +CcN0tOFmiZuyV+J9zNP/dBdBfUqDwcJD8zmA7u8NLeUWljJJdKv8wcZ2/wCgwN+/ +PWz58JCvsvphQT1QjzP8a6UD/3DsCYMq0m2dOi3YXxtHpeF2Kn+k4BXnFt5dkPsd +O2MN5m66Ky3MndeIPj81Bw9ssc9zZGcP2PHej9mZPjKDQaJn0GkHem2sVQ5uDcbG +JCy7UKjgLqBl/AAJs3+0KdArvWVxsxBUl6wViAxUytwdsgK1KUA3Qyfj7oAM3p4S +iAWlBACVIZO0u3LzAN5halnEcsjWrCdNpvOLB7aopNMYQRm0X2OXgFWRuLa6X4/g +yA/aDZg5xbSBVzC9VwMS3Os1hqwuFW0DuP0PAal1KIRL2dzD/1XIuRBz7N1WgeSq +MqNqjFL8RuTh9jHlWOnHKd7GOitJazv2TNgP0KQgRoPKklas97QiUnVlZGlnZXIg +UGx1ZW0gPHJwbHVlbUBhcGFjaGUub3JnPohZBBMRAgAZBQJDP8gLBAsHAwIDFQID +AxYCAQIeAQIXgAAKCRBMBCgYMRo95X5YAJ4vjiI3FoXwZwWklyP4CnlhODshDQCf +XDn0eSGXJnnYZAYcunTQWQ24HIm5Ag0EQz/IGBAIALdVGzJqGf7qC0rRAtEn3IGy +1Rt8kxusRR+ai+be8OxxG6Ab2PTpF2KhyDJJQtzByVL/gZUX4Xr6PUdw3XjmN+gL +mBOccKdi1zs5gxbZqmeWmA+9uvY14+b9FXONTyt15EIJbcykFk7x3kQ/a/Q5ujF0 +P9p/v03w356YFaVvq171Pkl1K7uNft5GURINzXljHz3CO3mq7/FYfZhMxxbRePUG +rhWuBOHL70J5eWA//x6cbm3u6htyQ6e7UOB2KfsV+RyLlPnOeOVKdDRlkqZth58J +zM4bejRLFYqVpe53M9hElCd6B7eIA4toNzg82T53a0MK+1O6i7iwip+sBUxjHLcA +BA0H/iI6JX6Ua4oy66zFbbWvTzuiljRWYEKJTkzeRPjW7fnrxRglMzTXA1ZcqM5t +5bPTWhzlBlCrcFIYDeKhg8rgdA5FrajTExBecc4thS8s2KkmSY8f4pBSOuA9oY9U +3JZIM+enCbZ46EulNzpEO6EtZhw446NC1y2NF+528scKhOF3S3mDhYpa7xyKiV9C +gU62U5eRx6/WYUfh6OsoHCPoqdtoMYb6lVzVkxcyfOCf2at2CS6mVng7otRMxf8R +TiCXnJZtR19uBV+lSLGYJIWz8dIxv0L2CQzJ05qGTHj88/hGXTr4OsnKAoILYmYv +IOiSyYyXQFrXH0lRIyC/FkdxuaqIRgQYEQIABgUCQz/IGAAKCRBMBCgYMRo95c0z +AKCh4iGas+UlRksCX7cx52RHgYSGQgCgiGBe3aIUIBBqQRpjlDaPNEJgBdo= +=8v2D +-----END PGP PUBLIC KEY BLOCK----- + + +pub 1024D/83E6AE0D 2003-05-08 [expires: 2008-08-18] + Key fingerprint = D694 DAB9 8F4E 68A8 4C17 F011 ECAB 0E7B 83E6 AE0D +uid Maxime Petazzoni (Bulix.org) +uid Maxime Petazzoni (Bulix.org) +uid Maxime Petazzoni (Apache Software Foundation) +sub 1024g/EA644EE9 2003-05-08 + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.2 (GNU/Linux) + +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 +=DmIO +-----END PGP PUBLIC KEY BLOCK----- +pub 1024D/40581837 2000-10-23 + Key fingerprint = 4535 10BD A6C5 8556 24E0 0923 6D0B C73A 4058 1837 +uid Nick Kew +sub 1024g/6A4AF32A 2000-10-23 + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.2 (GNU/Linux) + +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 +W/Kdk2iuwPLJw9rN5PFA +=WPl7 +-----END PGP PUBLIC KEY BLOCK----- +pub 1024D/152924AF 2000-10-22 + Key fingerprint = 51B4 8727 466A 0BC3 69F4 B7B8 B2BE BC40 1529 24AF +uid Sander Temme +sig 21D0A71B 2002-11-17 Dirk-Willem van Gulik (http://www.anywi.com/ - Senior partner) +sig E76CF6D0 2004-03-22 Stas Bekman +sig B5840AB1 2001-07-08 Sander Temme +sig E005C9CB 2002-11-17 Greg Stein +sig F5FC4B42 2002-11-18 Theodore W. Leung +sig AC89894C 2003-02-28 Frederick Keith Wamsley +sig 46B262C6 2003-11-24 Thies C. Arntzen +sig 40581837 2003-11-27 Nick Kew +sig 30A21D55 2004-02-20 Shane Curcuru +sig 873CF1AD 2004-11-19 Cory Friend +sig 561558CB 2004-12-13 Andrew Euell +sig 8103A37E 2005-07-20 Andre Malo +sig 5793498F 2005-07-20 Tim Ellison +sig C4C57B42 2005-07-21 Marcus Crafter +sig 1CD4861F 2005-07-21 Eran Chinthaka (Web mail) +sig 333E4E84 2005-07-22 Chathura Kamalanath Herath (Apachecon Europe 2005) +sig EA1BA38D 2005-07-24 Ajith Harshana Ranabahu (Made at Apachecon 2005) +sig 2 82AB7BD1 2002-11-17 Cliff Woolley +sig 2 13046155 2002-11-17 Thom May +sig 2 4C9165B6 2003-11-18 Aaron Mulder +sig 2 CC69CEED 2004-02-16 Thomas DeWeese +sig 2 9284C452 2004-11-21 Michael A. Dickerson +sig 2 E4136392 2004-12-11 Noel J. Bergman +sig 2 11DF87E9 2005-01-10 Paul Weinstein (pdw@vortex4.net) +sig 2 5CE5BDF9 2005-07-18 cheche@apache.org +sig 2 FC243F3C 2005-07-20 Henk P. Penning +sig 3 F894BE12 2002-11-17 Brian W. Fitzpatrick +sig 3 DE885DD3 2002-11-17 Sander Striker +sig 3 5C1C3AD7 2002-11-18 David Reid +sig 3 A54DA2DF 2003-11-18 Erin Mulder +sig 3 CE19D5C6 2003-11-18 Jamie Wallingford (legobuff) +sig 3 88C3A5A5 2003-11-18 Philippe M. Chiasson (Home) +sig 3 A1D69759 2003-11-24 Michael Kellen +sig 3 F8EA2967 2003-11-24 Brian McCallister +sig 3 A11D56FB 2003-11-24 Geoffrey Young (http://www.modperlcookbook.org/~geoff/) +sig 3 EE56550E 2003-12-01 Cliff Schmidt +sig 3 E41EDC7E 2003-12-03 Carsten Ziegeler +sig 3 ADBF9E1A 2003-12-05 Santiago Gala (Santiago Juan Gala Perez) +sig 3 75A67692 2004-01-27 Erik Abele +sig 3 08C975E5 2004-11-16 Jim Jagielski +sig 3 12BFE79A 2004-11-22 Kevin L. Collins (General Purpose Key) +sig 3 2C312D2F 2004-11-23 Rodent of Unusual Size +sig 3 302DA568 2004-11-23 Rodent of Unusual Size (DSA) +sig 3 D1AA8962 2004-11-24 Brian Behlendorf +sig 3 16A8D3AB 2004-12-14 Julie MacNaught +sig 3 F39B3750 2005-07-21 Colm MacCarthaigh +sig 3 CC78C893 2005-07-22 Rich Bowen +sig 3 015AFC8A 2005-07-22 Bertrand Delacretaz +sig 3 E2D774DF 2005-07-22 Sylvain Wallez +sig 3 87315C31 2005-07-23 Raphaël Luta +sig 3 9978AF86 2005-07-25 Christoph Probst +sig 3 2A623F72 2005-07-25 Christoph Probst +sig 3 C152431A 2005-07-27 Steve Loughran +sig 3 82844984 2005-08-13 Theo E. Schlossnagle +sig 3 CE419C8F 2005-08-23 Upayavira +sig 152924AF 2000-10-22 Sander Temme +sig 152924AF 2000-10-22 Sander Temme +sig 7F4436ED 2000-10-22 Sander Temme +sig 152924AF 2005-07-02 Sander Temme +sig 152924AF 2005-07-19 Sander Temme +sig 152924AF 2005-07-19 Sander Temme +sig 5098216F 2001-08-20 Sander van Zoest +sig 3 EC140B81 2004-11-16 Dirk-Willem van Gulik (http://www.anywi.com/ - Senior partner) +sig 3 A99F75DD 2004-11-23 Rodent of Unusual Size +sig 3 EE65E321 2003-11-24 Martin Kraemer +sig C8628501 2006-03-31 Branko ÄŒibej +sig 2 76D83CC6 2003-11-22 Manoj Kasichainula +sig 3 33131B65 2005-08-13 Theo E. Schlossnagle +sig X CA57AD7C 2004-12-14 PGP Global Directory Verification Key +sig X CA57AD7C 2004-12-27 PGP Global Directory Verification Key +sig X CA57AD7C 2005-01-23 PGP Global Directory Verification Key +sig X CA57AD7C 2005-02-05 PGP Global Directory Verification Key +sig X CA57AD7C 2005-02-19 PGP Global Directory Verification Key +sig X CA57AD7C 2005-03-05 PGP Global Directory Verification Key +sig X CA57AD7C 2005-03-20 PGP Global Directory Verification Key +sig X CA57AD7C 2005-04-03 PGP Global Directory Verification Key +sig X CA57AD7C 2005-04-17 PGP Global Directory Verification Key +sig X CA57AD7C 2005-04-17 PGP Global Directory Verification Key +sig X CA57AD7C 2005-05-01 PGP Global Directory Verification Key +sig X CA57AD7C 2005-05-15 PGP Global Directory Verification Key +sig X CA57AD7C 2005-05-17 PGP Global Directory Verification Key +sig X CA57AD7C 2005-05-31 PGP Global Directory Verification Key +sig X CA57AD7C 2005-07-03 PGP Global Directory Verification Key +sig X CA57AD7C 2005-07-08 PGP Global Directory Verification Key +sig X CA57AD7C 2005-07-21 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-04 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-18 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-21 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-27 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-28 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-30 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-31 PGP Global Directory Verification Key +sig X CA57AD7C 2005-09-01 PGP Global Directory Verification Key +sig X CA57AD7C 2005-09-02 PGP Global Directory Verification Key +sig X CA57AD7C 2005-09-04 PGP Global Directory Verification Key +sig X CA57AD7C 2005-12-12 PGP Global Directory Verification Key +sig C59C3270 2002-11-17 Wilfredo Sánchez Vega +uid Sander Temme +sig F5FC4B42 2002-11-18 Theodore W. Leung +sig A3543C8A 2003-02-26 James Moore +sig AC89894C 2003-02-28 Frederick Keith Wamsley +sig 40581837 2003-11-27 Nick Kew +sig 8103A37E 2005-07-20 Andre Malo +sig 5793498F 2005-07-20 Tim Ellison +sig C4C57B42 2005-07-21 Marcus Crafter +sig 1CD4861F 2005-07-21 Eran Chinthaka (Web mail) +sig 333E4E84 2005-07-22 Chathura Kamalanath Herath (Apachecon Europe 2005) +sig EA1BA38D 2005-07-24 Ajith Harshana Ranabahu (Made at Apachecon 2005) +sig 2 4C9165B6 2003-11-18 Aaron Mulder +sig 2 CC69CEED 2004-02-16 Thomas DeWeese +sig 2 9284C452 2004-11-21 Michael A. Dickerson +sig 2 E4136392 2004-12-11 Noel J. Bergman +sig 2 11DF87E9 2005-01-10 Paul Weinstein (pdw@vortex4.net) +sig 2 5CE5BDF9 2005-07-18 cheche@apache.org +sig 3 A54DA2DF 2003-11-18 Erin Mulder +sig 3 CE19D5C6 2003-11-18 Jamie Wallingford (legobuff) +sig 3 88C3A5A5 2003-11-18 Philippe M. Chiasson (Home) +sig 3 A1D69759 2003-11-24 Michael Kellen +sig 3 F8EA2967 2003-11-24 Brian McCallister +sig 3 A11D56FB 2003-11-24 Geoffrey Young (http://www.modperlcookbook.org/~geoff/) +sig 3 EE56550E 2003-12-01 Cliff Schmidt +sig 3 E41EDC7E 2003-12-03 Carsten Ziegeler +sig 3 ADBF9E1A 2003-12-05 Santiago Gala (Santiago Juan Gala Perez) +sig 3 75A67692 2004-01-27 Erik Abele +sig 3 08C975E5 2004-11-16 Jim Jagielski +sig 3 12BFE79A 2004-11-22 Kevin L. Collins (General Purpose Key) +sig 3 2C312D2F 2004-11-23 Rodent of Unusual Size +sig 3 302DA568 2004-11-23 Rodent of Unusual Size (DSA) +sig 3 D1AA8962 2004-11-24 Brian Behlendorf +sig 3 21D0A71B 2005-07-20 Dirk-Willem van Gulik (http://www.anywi.com/ - Senior partner) +sig 3 F39B3750 2005-07-21 Colm MacCarthaigh +sig 3 CC78C893 2005-07-22 Rich Bowen +sig 3 015AFC8A 2005-07-22 Bertrand Delacretaz +sig 3 E2D774DF 2005-07-22 Sylvain Wallez +sig 3 87315C31 2005-07-23 Raphaël Luta +sig 3 9978AF86 2005-07-25 Christoph Probst +sig 3 2A623F72 2005-07-25 Christoph Probst +sig 3 C152431A 2005-07-27 Steve Loughran +sig 3 82844984 2005-08-13 Theo E. Schlossnagle +sig 3 CE419C8F 2005-08-23 Upayavira +sig 152924AF 2002-11-17 Sander Temme +sig 152924AF 2002-11-17 Sander Temme +sig 152924AF 2005-07-02 Sander Temme +sig 152924AF 2005-07-19 Sander Temme +sig 3 A99F75DD 2004-11-23 Rodent of Unusual Size +sig 3 EC140B81 2004-11-16 Dirk-Willem van Gulik (http://www.anywi.com/ - Senior partner) +sig C8628501 2006-03-31 Branko ÄŒibej +sig 2 76D83CC6 2003-11-22 Manoj Kasichainula +sig 3 33131B65 2005-08-13 Theo E. Schlossnagle +sig X CA57AD7C 2004-12-14 PGP Global Directory Verification Key +sig X CA57AD7C 2004-12-27 PGP Global Directory Verification Key +sig X CA57AD7C 2005-01-23 PGP Global Directory Verification Key +sig X CA57AD7C 2005-02-05 PGP Global Directory Verification Key +sig X CA57AD7C 2005-02-19 PGP Global Directory Verification Key +sig X CA57AD7C 2005-03-05 PGP Global Directory Verification Key +sig X CA57AD7C 2005-03-20 PGP Global Directory Verification Key +sig X CA57AD7C 2005-04-03 PGP Global Directory Verification Key +sig X CA57AD7C 2005-04-17 PGP Global Directory Verification Key +sig X CA57AD7C 2005-04-17 PGP Global Directory Verification Key +sig X CA57AD7C 2005-05-01 PGP Global Directory Verification Key +sig X CA57AD7C 2005-05-15 PGP Global Directory Verification Key +sig X CA57AD7C 2005-05-17 PGP Global Directory Verification Key +sig X CA57AD7C 2005-05-31 PGP Global Directory Verification Key +sig X CA57AD7C 2005-07-08 PGP Global Directory Verification Key +sig X CA57AD7C 2005-07-21 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-04 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-18 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-21 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-27 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-28 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-30 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-31 PGP Global Directory Verification Key +sig X CA57AD7C 2005-09-01 PGP Global Directory Verification Key +sig X CA57AD7C 2005-09-02 PGP Global Directory Verification Key +sig X CA57AD7C 2005-09-04 PGP Global Directory Verification Key +sig X CA57AD7C 2005-12-12 PGP Global Directory Verification Key +sig C59C3270 2002-11-18 Wilfredo Sánchez Vega +uid Sander Temme +sig F5FC4B42 2002-11-18 Theodore W. Leung +sig AC89894C 2003-02-28 Frederick Keith Wamsley +sig 40581837 2003-11-27 Nick Kew +sig 8103A37E 2005-07-20 Andre Malo +sig 5793498F 2005-07-20 Tim Ellison +sig C4C57B42 2005-07-21 Marcus Crafter +sig 1CD4861F 2005-07-21 Eran Chinthaka (Web mail) +sig 333E4E84 2005-07-22 Chathura Kamalanath Herath (Apachecon Europe 2005) +sig EA1BA38D 2005-07-24 Ajith Harshana Ranabahu (Made at Apachecon 2005) +sig 2 4C9165B6 2003-11-18 Aaron Mulder +sig 2 CC69CEED 2004-02-16 Thomas DeWeese +sig 2 9284C452 2004-11-21 Michael A. Dickerson +sig 2 E4136392 2004-12-11 Noel J. Bergman +sig 2 11DF87E9 2005-01-10 Paul Weinstein (pdw@vortex4.net) +sig 2 5CE5BDF9 2005-07-18 cheche@apache.org +sig 3 A54DA2DF 2003-11-18 Erin Mulder +sig 3 CE19D5C6 2003-11-18 Jamie Wallingford (legobuff) +sig 3 88C3A5A5 2003-11-18 Philippe M. Chiasson (Home) +sig 3 A1D69759 2003-11-24 Michael Kellen +sig 3 F8EA2967 2003-11-24 Brian McCallister +sig 3 A11D56FB 2003-11-24 Geoffrey Young (http://www.modperlcookbook.org/~geoff/) +sig 3 EE56550E 2003-12-01 Cliff Schmidt +sig 3 E41EDC7E 2003-12-03 Carsten Ziegeler +sig 3 ADBF9E1A 2003-12-05 Santiago Gala (Santiago Juan Gala Perez) +sig 3 75A67692 2004-01-27 Erik Abele +sig 3 08C975E5 2004-11-16 Jim Jagielski +sig 3 12BFE79A 2004-11-22 Kevin L. Collins (General Purpose Key) +sig 3 2C312D2F 2004-11-23 Rodent of Unusual Size +sig 3 302DA568 2004-11-23 Rodent of Unusual Size (DSA) +sig 3 D1AA8962 2004-11-24 Brian Behlendorf +sig 3 21D0A71B 2005-07-20 Dirk-Willem van Gulik (http://www.anywi.com/ - Senior partner) +sig 3 F39B3750 2005-07-21 Colm MacCarthaigh +sig 3 CC78C893 2005-07-22 Rich Bowen +sig 3 015AFC8A 2005-07-22 Bertrand Delacretaz +sig 3 E2D774DF 2005-07-22 Sylvain Wallez +sig 3 87315C31 2005-07-23 Raphaël Luta +sig 3 9978AF86 2005-07-25 Christoph Probst +sig 3 2A623F72 2005-07-25 Christoph Probst +sig 3 C152431A 2005-07-27 Steve Loughran +sig 3 82844984 2005-08-13 Theo E. Schlossnagle +sig 3 CE419C8F 2005-08-23 Upayavira +sig 152924AF 2002-11-17 Sander Temme +sig 152924AF 2002-11-17 Sander Temme +sig 152924AF 2005-07-02 Sander Temme +sig 152924AF 2005-07-19 Sander Temme +sig 152924AF 2005-07-19 Sander Temme +sig 3 A99F75DD 2004-11-23 Rodent of Unusual Size +sig 3 EE65E321 2003-11-24 Martin Kraemer +sig 3 EC140B81 2004-11-16 Dirk-Willem van Gulik (http://www.anywi.com/ - Senior partner) +sig C8628501 2006-03-31 Branko ÄŒibej +sig 2 76D83CC6 2003-11-22 Manoj Kasichainula +sig 3 33131B65 2005-08-13 Theo E. Schlossnagle +sig X CA57AD7C 2005-07-03 PGP Global Directory Verification Key +sig X CA57AD7C 2005-07-08 PGP Global Directory Verification Key +sig X CA57AD7C 2005-07-21 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-04 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-18 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-21 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-27 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-28 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-30 PGP Global Directory Verification Key +sig X CA57AD7C 2005-08-31 PGP Global Directory Verification Key +sig X CA57AD7C 2005-09-01 PGP Global Directory Verification Key +sig X CA57AD7C 2005-09-02 PGP Global Directory Verification Key +sig X CA57AD7C 2005-09-04 PGP Global Directory Verification Key +sig X CA57AD7C 2005-12-12 PGP Global Directory Verification Key +sig C59C3270 2002-11-18 Wilfredo Sánchez Vega +uid [jpeg image of size 2677] +sig 5793498F 2005-07-20 Tim Ellison +sig C4C57B42 2005-07-21 Marcus Crafter +sig 1CD4861F 2005-07-21 Eran Chinthaka (Web mail) +sig 333E4E84 2005-07-22 Chathura Kamalanath Herath (Apachecon Europe 2005) +sig EA1BA38D 2005-07-24 Ajith Harshana Ranabahu (Made at Apachecon 2005) +sig 2 4C9165B6 2003-11-18 Aaron Mulder +sig 2 CC69CEED 2004-02-16 Thomas DeWeese +sig 2 9284C452 2004-11-21 Michael A. Dickerson +sig 2 11DF87E9 2005-01-10 Paul Weinstein (pdw@vortex4.net) +sig 3 A54DA2DF 2003-11-18 Erin Mulder +sig 3 CE19D5C6 2003-11-18 Jamie Wallingford (legobuff) +sig 3 A1D69759 2003-11-24 Michael Kellen +sig 3 F8EA2967 2003-11-24 Brian McCallister +sig 3 A11D56FB 2003-11-24 Geoffrey Young (http://www.modperlcookbook.org/~geoff/) +sig 3 EE56550E 2003-12-01 Cliff Schmidt +sig 3 E41EDC7E 2003-12-03 Carsten Ziegeler +sig 3 ADBF9E1A 2003-12-05 Santiago Gala (Santiago Juan Gala Perez) +sig 3 12BFE79A 2004-11-22 Kevin L. Collins (General Purpose Key) +sig 3 D1AA8962 2004-11-24 Brian Behlendorf +sig 3 21D0A71B 2005-07-20 Dirk-Willem van Gulik (http://www.anywi.com/ - Senior partner) +sig 3 302DA568 2005-07-21 Rodent of Unusual Size (DSA) +sig 3 2C312D2F 2005-07-21 Rodent of Unusual Size +sig 3 F39B3750 2005-07-21 Colm MacCarthaigh +sig 3 CC78C893 2005-07-22 Rich Bowen +sig 3 015AFC8A 2005-07-22 Bertrand Delacretaz +sig 3 E2D774DF 2005-07-22 Sylvain Wallez +sig 3 87315C31 2005-07-23 Raphaël Luta +sig 3 9978AF86 2005-07-25 Christoph Probst +sig 3 2A623F72 2005-07-25 Christoph Probst +sig 3 C152431A 2005-07-27 Steve Loughran +sig 152924AF 2000-10-22 Sander Temme +sig 152924AF 2005-07-02 Sander Temme +sig 152924AF 2005-07-19 Sander Temme +sig 3 EC140B81 2004-11-16 Dirk-Willem van Gulik (http://www.anywi.com/ - Senior partner) +sig 3 A99F75DD 2005-07-21 Rodent of Unusual Size +sig C8628501 2006-03-31 Branko ÄŒibej +sig 2 76D83CC6 2003-11-22 Manoj Kasichainula +sig C59C3270 2002-11-17 Wilfredo Sánchez Vega +sub 1024D/D2C7F912 2005-07-19 [expires: 2008-07-18] +sig 152924AF 2005-07-19 Sander Temme +sub 2048g/51B42B56 2000-10-22 +sig 152924AF 2000-10-22 Sander Temme +sub 2048g/2982B2B6 2005-07-19 [expires: 2008-07-18] +sig 152924AF 2005-07-19 Sander Temme + +pub 512R/7F4436ED 1998-01-27 + Key fingerprint = 2B 0A 52 2B 49 CF 01 90 B4 A1 DF 78 7E 45 BE 32 +uid Sander Temme +sig 7F4436ED 2000-08-06 Sander Temme + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.2.2 (Darwin) + +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 +j1xsd+u5peaqq6wANH4jxoI0x9j6PPce3NJ/DaDjHhX/6UQo6SRn0hlW2WeDPRAI +b3+rIeSM8mpYQKKUoMZTpZEChhux/7cYHn5uuhth7BrTPBkWioggSSv4S1psPXlH +ZuoWp7LWCBRYor0WS2WWP4Ly+AvqAHlZkyAApvN+cZegxc8ckzBSQFrnSXYCwosb +N3foI/MaO3UzEdhQWhCh3G8ObpJO+Mg5awrtA1BLN1OTaOTmTAi5IIk/E/J/zA07 +NJ8IvkYHKpXNnXIRgM/oGrbFi6iLcHYQP0GyBmJ3KSi1ucQaJXlO4vRX2EvgNRVw +MdRrFuKvQibU3BjU5k/UaLgvCw1iUJbSIHzynzkt7PFD0RDduOaoeUTabtTyMYJc +bn3GLlg7/BLq6Lql+0MhNAU234MWenQTPnRroECOAvMi7OFCLoDt3M9KpWkuP1lS +TbvIlQAta8y6OHgqMNBn6gY12NvIZjnTWNcJ7Fs0VYo8hn00Q3ybrSP/4G1LcCo/ +WJ4HLk9clrTeTdde7WWSU0NwIBe0V9HJy/8AAAqGARAAAQEAAAAAAAAAAAAAAAD/ +2P/gABBKRklGAAEBAAABAAEAAP/bAEMACgcHCAcGCggICAsKCgsOGBAODQ0OHRUW +ERgjHyUkIh8iISYrNy8mKTQpISIwQTE0OTs+Pj4lLkRJQzxINz0+O//bAEMBCgsL +Dg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 +Ozs7Ozs7Ozs7Ozs7O//AABEIAJAAeAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAA +AAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiEx +QQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpD +REVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJma +oqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy +8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQAC +AQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVi +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 +SvPaxhi2tYbG4Em5RG8Pm8pTcY+YE+ZrGOc= +=L9dU +-----END PGP PUBLIC KEY BLOCK----- +pub 1024D/EC88A0BF 2006-11-09 +uid Philip M. Gollucci +sub 2048g/315B27A0 2006-11-09 + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.2.2 (FreeBSD) + +mQGiBEVSy4ARBADrOOinwIJ4itmRYZkw8cecNVGDP/VwcD3p8rlYsjZe1MNEZhuR +9nsNb+QOTHdY2iw92zsXYsYuk3kFEppGf+pomFnfUARJiMYkV02USvACRNSN+aRt +d2y8FCmhBZinx1niYhOAD8J+B97/IUKXqEBOygpHXKQz3xN3770CNef1NwCgweIx +0jReKJvR9uUgfqhps+EEdPsEAOmN37+bs+WaG+u/cd3Q/bHqDs7bG/GiM3beLop0 +HQLu68yE8KjZYDuKojFVJcvupAzP1suV7XaaUhBY0xJWLmGI9ZwU71yTTsDqex4b +G3qQ+4gqYEzIVQkWHquHlBeH6Ipjgw+I0XctPklIGnA87pztTfycKy/Xk/6RnlBA +29ujBADHA1PYdImHpsPbko+OkjOjdGjS/29kAUmEsWSVZ/PAVgs92glGHjBTZDWv +QzvsDmceTWS8LCAQivo4FzZvn4hbMA5nhU3Nz5KwvA9fe2LhiSyMoKILk3D3odSr +w/bZF/0SOZgBynz1AcC+jaj+rTGF3pb72RKLYZa8ZRCyzJpUYrQpUGhpbGlwIE0u +IEdvbGx1Y2NpIDxwZ29sbHVjY2lAcDZtN2c4LmNvbT6IYAQTEQIAIAUCRVLLgAIb +AwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEBMkm0/siKC/X+8AoLnY1ra0mDdJ +8KzdBWBRgm1wG4JGAJ9C4K7yr1bF/LKXKzXWXJ7K+E5YT7kCDQRFUsuMEAgAm0d1 +14gWPOe4RaOYy9S3bsJlKww/eLF7pC4oQKi+aWf914Q0+iJ6XcPW5dJRZkZ8ZQEM +zwhDPn15mxedfuN2CQldgyi6DQKbAsNwnUKd5Ro6S0rcsNF4hJ9G7ZfTiSD58Vox +aGSexJwToB5GrmqshrTBr4zfy0nGOo/GfzqADz/hMIDjLMIDQYah1ihidZ+w3XOx +ei0aUsC45ZnoeAipiL8xlRljDq6h8dmTmXGBlyY8VaXghYkLhoF9bWZ6dUukVUIp +OI2KyQzOIa48X6wLD4FbnIdg9uvcwItmdgelPAZqiJbsbk7MktYNHwbMbOR+W7JK +we5eCKhiddD4v/ysmwADBggAhsI/RXL1qLwssop2cDs5oETekHHjRb/aDg2xLbL7 +KdB3wSnYPYwG5EmAc2jukCZonDEJYTZ1RePaK6QtPyHNZPWwYS4gZsQbTgNUmWvU +r69VwBg8i1USADlKiMCLvoiMOyNEQp56yrwAVldP9UWs3p0laTZTwaNeqDS0m0by +gDNTPuX5xIHwTe66dF2e6YKSXEEIqlluaHydK+K/l/Osxx8I+DcH3rkzi+/9bCk+ +iq3Q+qZh9uT2DadAbbPe/jHtcBzoQ2qFan0rNDOFGDkMGbF0y2cnjc9DXBLymcsd +UTsRkhsB/Mq5+aN4sG7SXT7DwDesMz6jNdkqrYP1fNsMdYhJBBgRAgAJBQJFUsuM +AhsMAAoJEBMkm0/siKC/mrMAn3/s778nZ6gU4+yCIwoVpf94/FYaAJ9XKasQwdyU +QrnWO3UkWeAgmGQ70w== +=wxvV +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/0E44CF0C 2001-06-19 + Key fingerprint = 6D0C 7498 5535 060B 2330 0BFE 47F6 969D 0E44 CF0C +uid Joe Orton +sig 3 0E44CF0C 2001-06-19 Joe Orton +sig 2 78688BF5 2004-04-01 Nalin Dahyabhai +sig 1 D39DA0E3 2004-11-28 Jason Harris +sig D23A41C8 2004-12-21 Douglas J Hunley +sig 2 6F9E049D 2005-06-25 Pim Rupert +sub 1024g/54F12E58 2001-06-19 +sig 0E44CF0C 2001-06-19 Joe Orton + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.7 (GNU/Linux) + +mQGiBDsvsLgRBACsHi7eM94mA9jlBxxwLC4ntK0Mj9WWm85V0C1y0Ei1MGz7q6Vu +WdxKgkNMauWrqKCBDQxOI3q5InZd/tZcOXQzGMtA6DxdAa50ZthfCbo0+8bfm00a +wCa5s/1x2tu7zuqcA7/3nOscZgss2k1RrZIALFimfXvq6hkchQyj9mnfKwCg1aOA +Wk7psAeH7UZgBqGHLcEKLjsD/11APufZVhmQtwKP8+yVe4d6UI7e2r4lURoT942g +tLlye1Rvh+FggkWjxKrwmyUaTW4jNDWEO1Sy1KCy/zb17lDQJReBNb4Q6wQwuySL +QqpFYUy3LtCJHnWsriC2d/iuLbBuQJxxQQQ0B0gichI+pqyZN2fmtiyucA3EzXv2 +8WQQA/9eSsUHv1nq+t0mbOBg1wpo0qlofJ96kM6kh8tzD6SxsHx6WDqE2TkZ+6Kf +Lr6yFo4XLY+5DOZ5XgR5LBTyH4PH8M5gZkqfzDTCJfk4qc2XzVW91zSbzQ0fMGWq +CU937R2LwnIWyVXjBgT8QLO58ZW8/X17YIGcgqHW1i4VD7XwR7QdSm9lIE9ydG9u +IDxqb3J0b25AcmVkaGF0LmNvbT6IVwQTEQIAFwUCOy+wuAULBwoDBAMVAwIDFgIB +AheAAAoJEEf2lp0ORM8M6boAnAz/+oVQGgGcHIpF9ugtJumGRApTAJ4liHEQvna0 +FOuzpUZ6kMT3sgIaBIhGBBIRAgAGBQJAbHSUAAoJEDebzld4aIv1rb8An333fo64 +a38vUnnO6rRdVquUpYC4AJ9x3lLonu/WI5WmDHjTy1Ar2kDt/4hGBBERAgAGBQJB +qmYnAAoJEEsqSJfTnaDjyOEAn13slJuH8G6VVPpV2m9S7FxRWh0iAKCEUKMYF+ZI +mQIyWAv/y1Y7A0chi4hGBBARAgAGBQJByJzOAAoJELGJ9rTSOkHIqX4An0obHgj3 +3Oiudie1rqgHj1mxxAprAJ4ps3XhNLDkxtLgwdao85VYj34w4IhGBBIRAgAGBQJC +vW/eAAoJEPxPSY5vngSdRqwAn3BthXNxPJBzDHRBgZ5d/1xzmFfqAJ0eJfe52uvk +h6ZzEc1sdl0sjKuea7kBDQQ7L7C6EAQA3lBouLYzyMT83ZtRUNgYmDZqNai1crEl +kuctL678IwQoEr4zGWTfwIb+vXkqf1VL2HJRXMTamrDfWo/Vy6ZiyB9IRpXNcNXT +dYmf6wXqPZqOCK9Q1mp/sWJGafHVbjDsWzGYTl9XiJUrMBPwPIlLj9SEvNwG7Qrh +jbrsBKkTWwcAAwUD/RWNLmA2OGhkkau62AHi2i20+zmPGLH0AnyaIPJAB6HaZCxU +uOSNBIRsaZoOoizzvaF6Qtaa7KJw3SUviWTfyAv4Lob+bo0e9MdI2olIvjg7VOi5 +wNPldVa4Cs4desqeXecJowP71gFV/NBdBPr2DLMXG3aOhtRZkG7aueoUkuk+iEYE +GBECAAYFAjsvsLoACgkQR/aWnQ5EzwyKgACcD+v7ABREHJd0RglLfFoAuCcZ7FoA +oNQYheE5UpBrTY6qK063clE3Gt2J +=NWjz +-----END PGP PUBLIC KEY BLOCK----- diff --git a/userdir.conf b/userdir.conf new file mode 100644 index 0000000..b5d7a49 --- /dev/null +++ b/userdir.conf @@ -0,0 +1,36 @@ +# +# UserDir: The name of the directory that is appended onto a user's home +# directory if a ~user request is received. +# +# The path to the end user account 'public_html' directory must be +# accessible to the webserver userid. This usually means that ~userid +# must have permissions of 711, ~userid/public_html must have permissions +# of 755, and documents contained therein must be world-readable. +# Otherwise, the client will only receive a "403 Forbidden" message. +# + + # + # UserDir is disabled by default since it can confirm the presence + # of a username on the system (depending on home directory + # permissions). + # + UserDir disabled + + # + # To enable requests to /~user/ to serve the user's public_html + # directory, remove the "UserDir disabled" line above, and uncomment + # the following line instead: + # + #UserDir public_html + + +# +# Control access to UserDir directories. The following is an example +# for a site where these directories are restricted to read-only. +# + + AllowOverride FileInfo AuthConfig Limit Indexes + Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec + Require method GET POST OPTIONS + + diff --git a/welcome.conf b/welcome.conf new file mode 100644 index 0000000..b279c2f --- /dev/null +++ b/welcome.conf @@ -0,0 +1,19 @@ +# +# This configuration file enables the default "Welcome" page if there +# is no default index page present for the root URL. To disable the +# Welcome page, comment out all the lines below. +# +# NOTE: if this file is removed, it will be restored on upgrades. +# + + Options -Indexes + ErrorDocument 403 /.noindex.html + + + + AllowOverride None + Require all granted + + +Alias /.noindex.html /usr/share/httpd/noindex/index.html +Alias /poweredby.png /usr/share/httpd/icons/apache_pb2.png