Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 06 Mar 2013 08:16:26 -0800
From:      Cy Schubert <Cy.Schubert@komquats.com>
To:        freebsd-apache@freebsd.org
Cc:        ohauser@freebsd.org
Subject:   www/apache24
Message-ID:  <201303061616.r26GGQA4007583@slippy.cwsent.com>

next in thread | raw e-mail | index | archive | help
Hi all,

Does anyone mind if I commit this? We can worry about updating the various 
apache modules in ports to apache24 at a later date but at least this is a 
start. It should give folks a chance to play with it and allow us to move 
forward with migrating the various modules in ports to apache 2.4.

First bsd.apache.mk:

Index: bsd.apache.mk
===================================================================
--- bsd.apache.mk	(revision 313524)
+++ bsd.apache.mk	(working copy)
@@ -81,7 +81,7 @@
 Apache_Pre_Include=		bsd.apache.mk
 
 DEFAULT_APACHE_VERSION=		22
-APACHE_SUPPORTED_VERSION=	22 # preferred version first
+APACHE_SUPPORTED_VERSION=	22 24 # preferred version first
 
 # Print warnings
 _ERROR_MSG=	: Error from bsd.apache.mk.
@@ -93,9 +93,9 @@
 .if defined(USE_APACHE) && !empty(USE_APACHE)
 .	if ${USE_APACHE:Mcommon*} != ""
 AP_PORT_IS_SERVER=	yes
-.	elif ${USE_APACHE:C/\-//:S/^22//:C/\+$//} == ""
+.	elif ${USE_APACHE:C/\-//:S/^2[24]//:C/\+$//} == ""
 AP_PORT_IS_MODULE=	yes
-.		if ${USE_APACHE:C/\-//:S/^22//} == "+"
+.		if ${USE_APACHE:C/\-//:S/^2[24]//} == "+"
 AP_PLUS=	yes
 .		endif
 .	else
@@ -382,7 +382,7 @@
 Apache_Post_Include=	bsd.apache.mk
 
 .if defined(USE_APACHE_RUN) && !empty(USE_APACHE_RUN)
-.	if ${USE_APACHE_RUN:C/\-//:S/^22//:C/\+$//} != ""
+.	if ${USE_APACHE_RUN:C/\-//:S/^2[24]//:C/\+$//} != ""
 IGNORE=	${_ERROR_MSG} Illegal use of USE_APACHE_RUN ( ${USE_APACHE_RUN} )
 .	endif
 .elif defined(USE_APACHE_RUN)
@@ -390,7 +390,7 @@
 .endif
 
 .if defined(USE_APACHE_BUILD) && !empty(USE_APACHE_BUILD)
-.	if ${USE_APACHE_BUILD:C/\-//:S/^22//:C/\+$//} != ""
+.	if ${USE_APACHE_BUILD:C/\-//:S/^2[24]//:C/\+$//} != ""
 IGNORE=	${_ERROR_MSG} Illegal use of USE_APACHE_BUILD ( 
${USE_APACHE_BUILD} )
 .	endif
 .elif defined(USE_APACHE_BUILD)


And www/apache24 itself:

# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
#	apache24
#	apache24/Makefile.modules
#	apache24/pkg-message
#	apache24/Makefile.options
#	apache24/pkg-descr
#	apache24/Makefile
#	apache24/files
#	apache24/files/mpm-itk-limits
#	apache24/files/extra-patch-suexec_rsrclimit
#	apache24/files/patch-docs__conf__extra__httpd-ssl.conf.in
#	apache24/files/patch-docs__conf__httpd.conf.in
#	apache24/files/mpm-itk-perdir-regex
#	apache24/files/patch-support__apxs.in
#	apache24/files/mpm-itk-20110321-01
#	apache24/files/extra-patch-suexec_userdir
#	apache24/files/patch-support__apachectl.in
#	apache24/files/patch-docs__conf__extra__httpd-userdir.conf.in
#	apache24/files/patch-support__Makefile.in
#	apache24/files/patch-Makefile.in
#	apache24/files/patch-configure.in
#	apache24/files/patch-config.layout
#	apache24/files/patch-server__core.c
#	apache24/files/patch-support__envvars-std.in
#	apache24/files/patch-support__log_server_status.in
#	apache24/files/no-accf.conf
#	apache24/files/htcacheclean.in
#	apache24/files/apache24.in
#	apache24/pkg-plist
#	apache24/distinfo
#	apache24/Makefile.doc
#
echo c - apache24
mkdir -p apache24 > /dev/null 2>&1
echo x - apache24/Makefile.modules
sed 's/^X//' >apache24/Makefile.modules << '7b50a01b2c43f001234602bd8d5e2fb8
'
X# $FreeBSD$
X#
X# Note by Clement Laforet: (to generate PLIST_SUB entries for modules)
X#	gsed 's/^\(.*\)mod\(.*\)\.so/%%\MOD\U\2%%\L\1mod\2\.so/' pkg-plist > tmp
X#	mv tmp pkg-plist
X#
X
X# =============================================
X# Maintainer note for OPTION handling:
X# To set additional option use
X#    PORT_OPTIONS+=
X# To unset an OPTION, even the OPTION is set in OPTIONSFILE use
X#    WITHOUT_MODULES+=
X#  Using OPTIONS_EXCLUDE and OPTIONS_OVERRIDE do not work as expected
X#  if the OPTION is enabled by the user, therefore we calculate
X#  them in bsd.apache.mk with help of WITHOUT_MODULES
X#  The other methode is to set IGNORE's and force the user to adjust 
OPTIONS
X
X.if defined(_PREMKINCLUDED)
X
X# check if APR was build with thread support
X.if exists(${APR_CONFIG})
XAPR_LIBS!=	${SH} ${APR_CONFIG} --libs | ${SED} -e 's/-//g'
X.  if defined(APR_LIBS) && !empty(APR_LIBS)
X_T=pthread
X.    for lib in ${APR_LIBS}
X. 	if ${_T:M${lib}}
XAPR_HAS_THREADS=	yes
X.	endif
X.    endfor
X.  endif
X.endif	# exists APR_CONFIG
X
X# check if APR-util module exists
X.if exists(${APU_CONFIG})
X.  if ${PORT_OPTIONS:MLDAP} || ${PORT_OPTIONS:MAUTHNZ_LDAP}
X.    if !exists(${APU_LDAP})
XIGNORE=	LDAP and AUTHNZ_LDAP requires APR-util to have LDAP support built 
in.\
X	Please rebuild APR with LDAP support
X.    endif
X.  endif
X
X.  if ${PORT_OPTIONS:MSESSION_CRYPTO}
X.    if !exists(${APU_CRYPTO_OPENSSL})
XIGNORE=	SESSION_CRYPTO requires APR-util to have crypto openssl support 
build in.\
X	Please rebuild APR with crypto openssl support
X.    endif
X.  endif
X
X.  if ${PORT_OPTIONS:MDBD} || ${PORT_OPTIONS:MAUTHN_DBD}
X.    if !exists(${APU_DBD_MYSQL}) && !exists(${APU_DBD_PGSQL}) && 
!exists(${APU_DBD_SQLITE3})
XIGNORE=	AUTHN_DBD and DBD requires APR-util to have DBD support build in.\
X	Please rebuild APR at last with one DBD backend
X.    endif
X.  endif
X.endif	# exists APU_CONFIG
X
X# =============================================
X
X# The next three params are not converted to an option,
X# they should be used only for special builds.
X.if defined(WITH_STATIC_SUPPORT)
XCONFIGURE_ARGS+=	--enable-static-support
X.endif
X
X# debug overrides CFLAGS
X.if defined(WITH_DEBUG)
XDEBUG_FLAGS?=	-O0 -g -ggdb3
XCFLAGS=		${DEBUG_FLAGS}
XCONFIGURE_ARGS+=	--enable-maintainer-mode
XWITH_EXCEPTION_HOOK=	yes
X.endif
X
X.if defined(WITH_EXCEPTION_HOOK)
XCONFIGURE_ARGS+=	--enable-exception-hook
X.endif
X
X.if !${PORT_OPTIONS:MMPM_EVENT} && !${PORT_OPTIONS:MMPM_PREFORK} && 
!${PORT_OPTIONS:MMPM_WORKER}
XIGNORE=	At least one MPM must be selected.
X.endif
X
X.if ${PORT_OPTIONS:MMPM_EVENT}
XWITH_MPMS+=	event
X.endif
X.if ${PORT_OPTIONS:MMPM_PREFORK}
XWITH_MPMS+=	prefork
X.endif
X.if ${PORT_OPTIONS:MMPM_WORKER}
XWITH_MPMS+=	worker
X.endif
XCONFIGURE_ARGS+=	--enable-mpms-shared="${WITH_MPMS}"
X
X.if ${PORT_OPTIONS:MSSL}
XCFLAGS+=	-I${OPENSSLINC}
XLDFLAGS+=	-L${OPENSSLLIB}
XCONFIGURE_ARGS+=	--with-ssl=${OPENSSLBASE}
X.endif
X
X.if ${PORT_OPTIONS:MAUTHNZ_LDAP}
XCONFIGURE_ARGS+=	--enable-authnz-ldap
X.endif
X
X.if ${PORT_OPTIONS:MLDAP}
XCONFIGURE_ARGS+=	--enable-ldap=shared
X.endif
X
X.if ${PORT_OPTIONS:MHEARTBEAT} && !${PORT_OPTIONS:MWATCHDOG}
XIGNORE=	WATCHDOG must be selected if HEARTBEAT is
X.endif
X
X.if ${PORT_OPTIONS:MWATCHDOG}
XCONFIGURE_ARGS+=	--enable-watchdog
X.endif
X
X.if ${PORT_OPTIONS:MSOCACHE_DC}
XCONFIGURE_ARGS+=	--enable-socache-dc --with-distcache=${LOCALBASE}
X.endif
X
X.if ${PORT_OPTIONS:MREFLECTOR}
XCONFIGURE_ARGS+=	--enable-reflector
X.endif
X
X.if ${PORT_OPTIONS:MLUA}
XCONFIGURE_ARGS+=	--enable-lua
X.endif
X
X.if ${PORT_OPTIONS:MXML2ENC}
XCONFIGURE_ARGS+=	--enable-xml2enc
X.endif
X
X.if ${PORT_OPTIONS:MIDENT}
XCONFIGURE_ARGS+=	--enable-ident
X.endif
X
X.if ${PORT_OPTIONS:MSESSION_CRYPTO}
XCONFIGURE_ARGS+=	--enable-session-crypto --with-crypto
X.endif
X
X.if ${PORT_OPTIONS:MSLOTMEM_PLAIN}
XCONFIGURE_ARGS+=	--enable-slotmem-plain
X.endif
X
X.if ${PORT_OPTIONS:MAUTH_BASIC} || ${PORT_OPTIONS:MAUTH_DIGEST}
X.  if !${APACHE_MODULES:MAUTHN*}
XIGNORE=	AUTH_BASIC and AUTH_DIGEST need at least one AUTHN provider	
X.  endif	
X.endif
X
X.if ${PORT_OPTIONS:MAUTH_BASIC}
X.  if !${APACHE_MODULES:MAUTHZ*}
XIGNORE=	AUTH_BASIC need at last one AUTHZ provider	
X.  endif	
X.endif
X
X.if defined(APR_HAS_THREADS)
XCFLAGS+=	${PTHREAD_CFLAGS}
XLDFLAGS+=	${PTHREAD_LIBS}
X.else
X.  if exists(${APR_CONFIG}) && ${PORT_OPTIONS:MMEM_CACHE}
XIGNORE=	MEM_CACHE requires APR threads. Please rebuild APR with THREAD 
support
X.  endif
X.endif
X
X# http://httpd.apache.org/docs/2.2/bind.html
X.if ${PORT_OPTIONS:MIPV4_MAPPED}
XCONFIGURE_ARGS+=	--enable-v4-mapped
X.else
XCONFIGURE_ARGS+=	--disable-v4-mapped
X.endif
X
X.endif	# _PREMKINCLUDED
7b50a01b2c43f001234602bd8d5e2fb8
echo x - apache24/pkg-message
sed 's/^X//' >apache24/pkg-message << '78a5b04f5f3846e66d4cb6d6110bc892'
XTo run apache www server from startup, add apache24_enable="YES"
Xin your /etc/rc.conf. Extra options can be found in startup script.
X
XYour hostname must be resolvable using at least 1 mechanism in
X/etc/nsswitch typically DNS or /etc/hosts or apache might
Xhave issues starting depending on the modules you are using.
78a5b04f5f3846e66d4cb6d6110bc892
echo x - apache24/Makefile.options
sed 's/^X//' >apache24/Makefile.options << 'aa713fb25128cd14d3c39d2804c48a31
'
X# $FreeBSD: ports/www/apache22/Makefile.options,v 1.13 2012/09/04 21:17:06 
ohauer Exp $
X
X# XXX The follwing params are used for special buils,
X#     they will be not converted to an OPTION.
X# WITH_STATIC_SUPPORT 	# used in make.conf
X# WITH_DEBUG		# used in make.conf or as build param
X# WITH_EXCEPTION_HOOK	# used in make.conf or as build param
X#
X
XAUTH_MODULES=		AUTH_BASIC AUTH_DIGEST AUTH_FORM
XAUTHN_MODULES=		AUTHN_SOCACHE AUTHN_FILE AUTHN_DBD AUTHN_DBM AUTHN_CORE 
AUTHN_ANON
XAUTHZ_MODULES=		AUTHZ_HOST AUTHZ_GROUPFILE AUTHZ_USER AUTHZ_DBM \
X			AUTHZ_OWNER AUTHZ_CORE AUTHZ_DBD 
XCACHE_MODULES=		CACHE CACHE_DISK FILE_CACHE
XDAV_MODULES=		DAV DAV_FS
XEXPERIMENTAL_MODULES=	EXT_FILTER LOG_FORENSIC
XLDAP_MODULES=		LDAP AUTHNZ_LDAP
XMISC_MODULES=		ACTIONS ALIAS ALLOWMETHODS ASIS AUTOINDEX BUFFER CERN_META \
X			CGI CHARSET_LITE DBD DATA DEFLATE DIALUP DIR DUMPIO ECHO ENV \
X			EXPIRES HEADERS HEARTBEAT HEARTMONITOR IDENT IMAGEMAP INCLUDE \
X			INFO LBMETHOD_BYBUSYNESS LBMETHOD_BYREQUESTS LBMETHOD_BYTRAFFIC \
X			LBMETHOD_HEARTBEAT LOG_CONFIG LOG_DEBUG LOGIO LUA MIME \
X			MIME_MAGIC NEGOTIATION RATELIMIT REFLECTOR REMOTEIP REQUEST \
X			REWRITE SED SESSION SESSION_COOKIE SESSION_CRYPTO SESSION_DBD \
X			SETENVIF SLOTMEM_PLAIN SLOTMEM_SHM SOCACHE_DBM SOCACHE_DC \
X			SOCACHE_MEMCACHE SOCACHE_SHMCB SPELING STATUS SUBSTITUTE \
X			UNIQUE_ID UNIXD USERDIR USERTRACK VHOST_ALIAS WATCHDOG FILTER \
X			VERSION REQTIMEOUT XML2ENC
XMISC_OFF_MODULES=	ACCESS_COMPAT DAV_LOCK
XMPM_MODULES=		MPM_EVENT MPM_PREFORK MPM_WORKER
XPROXY_MODULES=		PROXY PROXY_AJP PROXY_BALANCER PROXY_CONNECT PROXY_EXPRESS 
\
X			PROXY_FCGI PROXY_FDPASS PROXY_FTP PROXY_HTML PROXY_HTTP \
X			PROXY_SCGI
XSSL_MODULES=		SSL
XSUEXEC_MODULES=		SUEXEC
XTHREADS_MODULES=	CGID
X
XDEFAULT_MODULES_CATEGORIES=	\
X			AUTH AUTHN AUTHZ DAV CACHE MISC MPM
X
XALL_MODULES_CATEGORIES=	AUTH AUTHN AUTHZ CACHE DAV EXPERIMENTAL LDAP \
X			MISC MISC_OFF MPM PROXY SSL SUEXEC THREADS
X
XNO_OPTIONS_SORT=	yes
X
XOPTIONS_DEFINE=			\
X	MPM_EVENT		\
X	MPM_PREFORK		\
X	MPM_WORKER		\
X	ACCESS_COMPAT		\
X	AUTH_BASIC		\
X	AUTH_DIGEST		\
X	AUTHN_ANON		\
X	AUTHN_DBD		\
X	AUTHN_DBM		\
X	AUTHN_FILE		\
X	AUTHZ_DBM		\
X	AUTHZ_GROUPFILE		\
X	AUTHZ_HOST		\
X	AUTHZ_OWNER		\
X	AUTHZ_USER		\
X	AUTHNZ_LDAP		\
X	LDAP			\
X	DBD			\
X	CACHE			\
X	CACHE_DISK		\
X	FILE_CACHE		\
X	DAV			\
X	DAV_FS			\
X	DAV_LOCK		\
X	ACTIONS			\
X	ALIAS			\
X	ASIS			\
X	AUTOINDEX		\
X	CERN_META		\
X	CGI			\
X	CGID			\
X	CHARSET_LITE		\
X	DEFLATE			\
X	DIR			\
X	DUMPIO			\
X	ENV			\
X	EXPIRES			\
X	HEADERS			\
X	IMAGEMAP		\
X	INCLUDE			\
X	INFO			\
X	LOG_CONFIG		\
X	LOGIO			\
X	MIME			\
X	MIME_MAGIC		\
X	NEGOTIATION		\
X	RATELIMIT		\
X	REFLECTOR		\
X	REMOTEIP		\
X	REQTIMEOUT		\
X	REQUEST			\
X	REWRITE			\
X	SED			\
X	SESSION			\
X	SESSION_COOKIE		\
X	SESSION_CRYPTO		\
X	SESSION_DBD		\
X	SETENVIF		\
X	SLOTMEM_PLAIN		\
X	SLOTMEM_SHM		\
X	SO			\
X	SOCACHE_DBM		\
X	SOCACHE_DC		\
X	SOCACHE_MEMCACHE	\
X	SOCACHE_SHMCB		\
X	SPELING			\
X	STATUS			\
X	UNIQUE_ID		\
X	UNIXD			\
X	USERDIR			\
X	USERTRACK		\
X	VHOST_ALIAS		\
X	WATCHDOG		\
X	XML2ENC			\
X	FILTER			\
X	SUBSTITUTE		\
X	VERSION			\
X	SSL			\
X	SUEXEC			\
X	SUEXEC_RSRCLIMIT	\
X	SUEXEC_USERDIR		\
X	PROXY			\
X	IPV4_MAPPED		\
X	EXT_FILTER		\
X	LOG_FORENSIC		
X
XOPTIONS_MULTI=PROXY
XOPTIONS_MULTI_PROXY=PROXY_AJP PROXY_BALANCER PROXY_CONNECT PROXY_EXPRESS 
PROXY_FCGI PROXY_FDPASS PROXY_FTP PROXY_HTML PROXY_HTTP PROXY_SCGI
X
X# sort list alphanumeric
XOPTIONS_DEFAULT=		\
X	ACTIONS			\
X	ALIAS			\
X	ALLOWMETHODS		\
X	ASIS			\
X	AUTHN_ANON		\
X	AUTHN_CORE		\
X	AUTHN_DBM		\
X	AUTHN_FILE		\
X	AUTHN_SOCACHE		\
X	AUTHZ_CORE		\
X	AUTHZ_DBD		\
X	AUTHZ_DBM		\
X	AUTHZ_GROUPFILE		\
X	AUTHZ_HOST		\
X	AUTHZ_OWNER		\
X	AUTHZ_USER		\
X	AUTH_BASIC		\
X	AUTH_DIGEST		\
X	AUTH_FORM		\
X	AUTOINDEX		\
X	BUFFER			\
X	CACHE			\
X	CACHE_DISK		\
X	CERN_META		\
X	CGI			\
X	CHARSET_LITE		\
X	DATA			\
X	DAV			\
X	DAV_FS			\
X	DEFLATE			\
X	DIALUP			\
X	DIR			\
X	DUMPIO			\
X	ECHO			\
X	ENV			\
X	EXPIRES			\
X	FILE_CACHE		\
X	FILTER			\
X	HEADERS			\
X	HEARTBEAT		\
X	HEARTMONITOR		\
X	IDENT			\
X	IMAGEMAP		\
X	INCLUDE			\
X	INFO			\
X	LBMETHOD_BYBUSYNESS	\
X	LBMETHOD_BYREQUESTS	\
X	LBMETHOD_BYTRAFFIC	\
X	LBMETHOD_HEARTBEAT	\
X	LOGIO			\
X	LOG_CONFIG		\
X	LOG_DEBUG		\
X	LUA			\
X	MIME			\
X	MIME_MAGIC		\
X	NEGOTIATION		\
X	REQTIMEOUT		\
X	REWRITE			\
X	SETENVIF		\
X	SPELING			\
X	SSL			\
X	STATUS			\
X	UNIQUE_ID		\
X	USERDIR			\
X	USERTRACK		\
X	VERSION			\
X	VHOST_ALIAS		\
X	WATCHDOG		
X
X# sort list alphanumeric
XACCESS_COMPAT_DESC=		mod_access_compat
XACTIONS_DESC=			mod_actions
XALIAS_DESC=			mod_alias
XALLOWMETHODS_DESC=		mod_allowmethods
XASIS_DESC=			mod_asis
XAUTHNZ_LDAP_DESC=		mod_authnz_ldap
XAUTHN_ANON_DESC=		mod_authn_anon
XAUTHN_CORE_DESC=		mod_authn_core
XAUTHN_DBD_DESC=			mod_authn_dbd
XAUTHN_DBM_DESC=			mod_authn_dbm
XAUTHN_FILE_DESC=		mod_authn_file
XAUTHN_SOCACHE_DESC=		mod_authn_socache
XAUTHZ_CORE_DESC=		mod_authz_core
XAUTHZ_DBD_DESC=			mod_authz_dbd
XAUTHZ_DBM_DESC=			mod_authz_dbm
XAUTHZ_GROUPFILE_DESC=		mod_authz_groupfile
XAUTHZ_HOST_DESC=		mod_authz_host
XAUTHZ_OWNER_DESC=		mod_authz_owner
XAUTHZ_USER_DESC=		mod_authz_user
XAUTH_BASIC_DESC=		mod_auth_basic
XAUTH_DIGEST_DESC=		mod_auth_digest
XAUTH_FORM_DESC=			mod_auth_form
XAUTOINDEX_DESC=			mod_autoindex
XBUFFER_DESC=			mod_buffer
XCACHE_DESC=			mod_cache
XCACHE_DISK_DESC=		mod_cache_disk
XCERN_META_DESC=			mod_cern_meta
XCGI_DESC=			mod_cgi
XCGID_DESC=			mod_cgid
XCHARSET_LITE_DESC=		mod_charset_lite
XDATA_DESC=			mod_data
XDAV_DESC=			mod_dav
XDAV_FS_DESC=			mod_dav_fs
XDAV_LOCK_DESC=			mod_dav_lock
XDBD_DESC=			Manages SQL database connections
XDEFLATE_DESC=			mod_deflate
XDIALUP_DESC=			mod_dialup
XDIR_DESC=			mod_dir
XDUMPIO_DESC=			mod_dumpio
XECHO_DESC=			mod_echo
XENV_DESC=			mod_env
XEXPIRES_DESC=			mod_expires
XEXT_FILTER_DESC=		mod_ext_filter
XFILE_CACHE_DESC=		mod_file_cache
XFILTER_DESC=			mod_filter
XHEADERS_DESC=			mod_headers
XHEARTBEAT_DESC=			mod_heartbeat
XHEARTMONITOR_DESC=		mod_heartmonitor
XIDENT_DESC=			mod_ident
XIMAGEMAP_DESC=			mod_imagemap
XINCLUDE_DESC=			mod_include
XINFO_DESC=			mod_info
XIPV4_MAPPED_DESC=		Allow IPv6 socket to handle IPv4
XLBMETHOD_BYBUSYNESS_DESC=	mod_lbmethod_bybusyness
XLBMETHOD_BYREQUESTS_DESC=	mod_lbmethod_byrequests
XLBMETHOD_BYTRAFFIC_DESC=	mod_lbmethod_bytraffic
XLBMETHOD_HEARTBEAT_DESC=	mod_lbmethod_heartbeat
XLDAP_DESC=			connection pooling, result caching
XLOGIO_DESC=			mod_logio
XLOG_CONFIG_DESC=		mod_log_config
XLOG_DEBUG_DESC=			mod_log_debug
XLOG_FORENSIC_DESC=		mod_log_forensic
XLUA_DESC=			mod_lua
XMIME_DESC=			mod_mime
XMIME_MAGIC_DESC=		mod_mime_magic
XMPM_EVENT_DESC=			Event MPM
XMPM_PREFORK_DESC=		Prefork MPM
XMPM_WORKER_DESC=		Worker MPM
XNEGOTIATION_DESC=		mod_negotiation
XPROXY_DESC=			mod_proxy
XPROXY_AJP_DESC=			mod_proxy_ajp
XPROXY_BALANCER_DESC=		mod_proxy_balancer
XPROXY_CONNECT_DESC=		mod_proxy_connect
XPROXY_EXPRESS_DESC=		mod_proxy_express
XPROXY_FCGI_DESC=		mod_proxy_fcgi
XPROXY_FDPASS_DESC=		mod_proxy_fdpass
XPROXY_FTP_DESC=			mod_proxy_ftp
XPROXY_HTML_DESC=		mod_proxy_html
XPROXY_HTTP_DESC=		mod_proxy_http
XPROXY_SCGI_DESC=		mod_proxy_scgi
XRATELIMIT_DESC=			mod_ratelimit
XREFLECTOR_DESC=			mod_reflector
XREMOTEIP_DESC=			mod_remoteip
XREQTIMEOUT_DESC=		mod_reqtimeout
XREQUEST_DESC=			mod_request
XREWRITE_DESC=			mod_rewrite
XSED_DESC=			mod_sed
XSESSION_DESC=			mod_session
XSESSION_COOKIE_DESC=		mod_session_cookie
XSESSION_CRYPTO_DESC=		mod_session_crypto
XSESSION_DBD_DESC=		mod_session_dbd
XSETENVIF_DESC=			mod_setenvif
XSLOTMEM_PLAIN_DESC=		mod_slotmem_plain
XSLOTMEM_SHM_DESC=		mod_slotmem_shm
XSO_DESC=			mod_so
XSOCACHE_DBM_DESC=		mod_socache_dbm
XSOCACHE_DC_DESC=		mod_socache_dc
XSOCACHE_MEMCACHE_DESC=		mod_socache_memcache
XSOCACHE_SHMCB_DESC=		mod_socache_shmcb
XSPELING_DESC=			mod_speling
XSSL_DESC=			mod_ssl
XSTATUS_DESC=			mod_status
XSUBSTITUTE_DESC=		mod_substitute
XSUEXEC_DESC=			mod_suexec
XSUEXEC_RSRCLIMIT_DESC=		suEXEC rlimits based on login class
XSUEXEC_USERDIR_DESC=		suEXEC UserDir support
XUNIQUE_ID_DESC=			mod_unique_id
XUNIXD_DESC=			mod_unixd
XUSERDIR_DESC=			mod_userdir
XUSERTRACK_DESC=			mod_usertrack
XVERSION_DESC=			mod_version
XVHOST_ALIAS_DESC=		mod_vhost_alias
XWATCHDOG_DESC=			mod_watchdog
XXML2ENC_DESC=			mod_xml2enc
X
aa713fb25128cd14d3c39d2804c48a31
echo x - apache24/pkg-descr
sed 's/^X//' >apache24/pkg-descr << 'bcc21dead6151b19cf6ea86979ae0f12'
XThe Apache HTTP Server Project is an effort to develop and maintain an
Xopen-source HTTP server for various modern desktop and server operating
Xsystems, such as UNIX and Windows NT. The goal of this project is to
Xprovide a secure, efficient and extensible server which provides HTTP
Xservices in sync with the current HTTP standards.
XThe 2.x branch of Apache Web Server includes several improvements like
Xthreading, use of APR, native IPv6 and SSL support, and many more.
X
XWWW: http://httpd.apache.org/
bcc21dead6151b19cf6ea86979ae0f12
echo x - apache24/Makefile
sed 's/^X//' >apache24/Makefile << '36ab9b3203cc1210dbb3a89fefa26528'
X# $FreeBSD$
X
XPORTNAME=	apache24
XPORTVERSION=	2.4.4
XCATEGORIES=	www ipv6
XMASTER_SITES=	${MASTER_SITE_APACHE_HTTPD}
XDISTNAME=	httpd-${PORTVERSION}
XDIST_SUBDIR=	apache24
X
XMAINTAINER?=	apache@FreeBSD.org
XCOMMENT?=	Version 2.4.x of Apache web server
X
XLIB_DEPENDS=	expat:${PORTSDIR}/textproc/expat2 \
X		apr-1:${PORTSDIR}/devel/apr1 \
X		pcre:${PORTSDIR}/devel/pcre
X
XMAKE_JOBS_SAFE=	yes
X
XLATEST_LINK?=	apache24
X
XCONFLICTS=	caudium14-1.* \
X		apache-2.0.* apache-*-2.0.* \
X		apache-*-2.2.* apache22-* \
X		apache-*-2.4.* apache24-*
X
XUSE_APACHE=	common24
XUSE_ICONV=	yes
XUSE_AUTOTOOLS=	autoconf libtool
XUSE_PERL5=	yes
XUSE_RC_SUBR=	apache24 htcacheclean
XLIBTOOLFILES=	configure.in
X
XUSERS=		www
XGROUPS=		www
X
X# for slave ports
X.if !defined(MASTERDIR)
XAPACHEDIR=	${.CURDIR}
X.else
XAPACHEDIR=	${MASTERDIR}
X.endif
X
XWITH_HTTP_PORT?=	80
X
X.include "${APACHEDIR}/Makefile.options"
X.include <bsd.port.options.mk>
X.include "${APACHEDIR}/Makefile.doc"
X
XAPR_CONFIG?=		${LOCALBASE}/bin/apr-1-config
XAPU_CONFIG?=		${LOCALBASE}/bin/apu-1-config
X
X# APU modules used by AUTHN_DBD DBD
XAPU_DBD_MYSQL?=		${LOCALBASE}/lib/apr-util-1/apr_dbd_mysql.so
XAPU_DBD_PGSQL?=		${LOCALBASE}/lib/apr-util-1/apr_dbd_pgsql.so
XAPU_DBD_SQLITE3?=	${LOCALBASE}/lib/apr-util-1/apr_dbd_sqlite3.so
X# APU module used by AUTHNZ_LDAP LDAP
XAPU_LDAP?=		${LOCALBASE}/lib/apr-util-1/apr_ldap.so
X# APU module used by SESSION_CRYPTO
XAPU_CRYPTO_OPENSSL?=	${LOCALBASE}/lib/apr-util-1/apr_crypto_openssl.so
X
XCONFIGURE_ARGS=	--prefix=${PREFIX_RELDEST} \
X		--enable-layout=FreeBSD \
X		--with-perl=${PERL5} \
X		--with-port=${WITH_HTTP_PORT} \
X		--with-expat=${LOCALBASE} \
X		--with-iconv=${LOCALBASE} \
X		--enable-http \
X		--with-pcre=${LOCALBASE} \
X		--with-apr=${APR_CONFIG} \
X		--with-apr-util=${APU_CONFIG}
X
XCONFIGURE_ENV=	\
X		CONFIG_SHELL="${SH}" \
X		LOCALBASE="${LOCALBASE}"
X
XPREFIX_RELDEST=	${PREFIX:S,^${DESTDIR},,}
X
XMAKE_ENV+=	EXPR_COMPAT=yes \
X		INSTALL_MAN="${INSTALL_MAN}"
X
X#=====================================================
X# CONFIGURE_ARGS willl be handled in Makefile.modules,
X# here we do only OPTIONS fixups
X
X.if ${PORT_OPTIONS:MSSL}
XUSE_OPENSSL=	yes
X.endif
X
X.if ${PORT_OPTIONS:MSOCACHE_DC}
XLIB_DEPENDS+=	distcache:${PORTSDIR}/security/distcache
X.endif
X
X.if ${PORT_OPTIONS:MLUA}
XUSE_LUA=	yes
X.endif
X
X.if ${PORT_OPTIONS:MSUEXEC_RSRCLIMIT}
XEXTRA_PATCHES+=	${FILESDIR}/extra-patch-suexec_rsrclimit
X.  if empty(PORT_OPTIONS:MSUEXEC)
XIGNORE=		suEXEC resource limit patch requires mod_suexec.\
X		Please (re)run 'make config' and choose SUEXEC option also
X.  endif
X.endif
X
X.if ${PORT_OPTIONS:MSUEXEC_USERDIR}
XEXTRA_PATCHES+= ${FILESDIR}/extra-patch-suexec_userdir
X.  if empty(PORT_OPTIONS:MSUEXEC)
XIGNORE=		suEXEC UserDir patch requires mod_suexec.\
X		Please (re)run 'make config' and choose SUEXEC option also
X.  endif
X.endif
X
X.include <bsd.port.pre.mk>
X.include "${APACHEDIR}/Makefile.modules"
X
Xpre-configure::
X	@${ECHO_MSG}	""
X	@${ECHO_MSG}	"  You can check your modules configuration by using make 
show-modules"
X	@${ECHO_MSG}	""
X
Xshow-options:
X	@${SED} -ne 's/^##//p' ${APACHEDIR}/Makefile.doc
X
Xpost-patch:
X	@${REINPLACE_CMD} -e 's|freebsd5|freebsd|' \
X		${WRKSRC}/configure.in ${WRKSRC}/configure
X	@${RM} -f ${WRKSRC}/docs/docroot/*.bak
X	@${REINPLACE_CMD} -e 's," PLATFORM ",FreeBSD,' ${WRKSRC}/server/core.c
X	@${INSTALL_DATA} ${WRKSRC}/NOTICE ${WRKSRC}/docs/manual
X
Xpost-configure:
X	@FTPUSERS=`${EGREP} -v '^#' /etc/ftpusers| ${TR} -s "\n" " "` ;\
X	${REINPLACE_CMD} -e "s,%%FTPUSERS%%,$${FTPUSERS}," 
${WRKSRC}/docs/conf/extra/httpd-userdir.conf
X	@${REINPLACE_CMD} -e "s,%%WWWOWN%%,${WWWOWN}," -e  
"s,%%WWWGRP%%,${WWWGRP}," ${WRKSRC}/docs/conf/httpd.conf
X	@${REINPLACE_CMD} -e "s,%%PREFIX%%,${PREFIX}," ${WRKSRC}/support/envvars-s
td
X
Xpost-install:
X	@${MKDIR} ${ETCDIR}/envvars.d
X	@${MKDIR} ${ETCDIR}/Includes
X	@${INSTALL_DATA} ${FILESDIR}/no-accf.conf ${ETCDIR}/Includes/
X
X.if ${PORT_OPTIONS:MLOG_FORENSIC}
X	@${INSTALL_SCRIPT} ${WRKSRC}/support/check_forensic ${PREFIX}/sbin
X.endif
X
X.if ${PORT_OPTIONS:MDOCS}
X.  for dir in style/lang style/xsl/util style/xsl
X	@[ -d ${DOCSDIR}/${dir}/ ] && ${TOUCH} ${DOCSDIR}/${dir}/.keepme
X.  endfor
X.endif
X	@${CAT} ${PKGMESSAGE}
X
X# maintainer only, check for new modules
Xmodlist: extract
X	@${AWK} '/: checking whether to enable mod_/ \
X		{printf "%%%%%s%%%%libexec/apache24/%s.so\n", \
X		toupper($$8), $$8}' ${WRKSRC}/configure \
X		| ${TR} -d '"' \
X		| ${GREP} -E -v 'MOD_(ECHO|EXAMPLE|HTTP|IDENT|ISAPI|SO)' \
X		| ${SORT} -u
X
X.include <bsd.port.post.mk>
36ab9b3203cc1210dbb3a89fefa26528
echo c - apache24/files
mkdir -p apache24/files > /dev/null 2>&1
echo x - apache24/files/mpm-itk-limits
sed 's/^X//' >apache24/files/mpm-itk-limits << '49ae17a3bc3102953507031f45c2
65ad'
X--- server/mpm/experimental/itk/Makefile.in	2011-07-01 10:33:45.000000000 
+0000
X+++ server/mpm/experimental/itk/Makefile.in	2011-07-01 10:33:57.000000000 
+0000
X@@ -1,5 +1,6 @@
X 
X LTLIBRARY_NAME    = libitk.la
X LTLIBRARY_SOURCES = itk.c
X+LTLIBRARY_LIBADD  = -lutil
X 
X include $(top_srcdir)/build/ltlib.mk
X--- server/mpm/experimental/itk/itk.c	2011-07-01 10:04:40.000000000 +0000
X+++ server/mpm/experimental/itk/itk.c	2011-07-01 10:17:19.000000000 +0000
X@@ -41,6 +41,8 @@
X #if APR_HAVE_SYS_TYPES_H
X #include <sys/types.h>
X #endif
X+#include <pwd.h>
X+#include <login_cap.h>
X 
X #define CORE_PRIVATE
X 
X@@ -1438,6 +1440,8 @@
X     gid_t wanted_gid;
X     const char *wanted_username;
X     int err = 0;
X+    struct passwd *pw;
X+    login_cap_t *lc;
X     
X     itk_server_conf *sconf =
X         (itk_server_conf *) ap_get_module_config(r->server->
module_config, &mpm_itk_module);
X@@ -1481,6 +1485,23 @@
X         wanted_username = unixd_config.user_name;
X     }
X 
X+    if ((pw = getpwuid(wanted_uid)) == NULL) {
X+        _DBG("crit: invalid uid: (%ld)", wanted_uid, strerror(errno));
X+        err = 1;
X+    }
X+
X+    /*
X+     * Apply user resource limits based on login class.
X+     */
X+    if ((lc = login_getclassbyname(pw->pw_class, pw)) == NULL) {
X+        _DBG("failed to login_getclassbyname()", strerror(errno));
X+        err = 1;
X+    }
X+    if ((setusercontext(lc, pw, wanted_uid, LOGIN_SETRESOURCES)) != 0) {
X+        _DBG("failed to setusercontext()", strerror(errno));
X+        err = 1;
X+    }
X+
X     if (!err && wanted_uid != -1 && wanted_gid != -1 && (getuid() != 
wanted_uid || getgid() != wanted_gid)) {
X         if (setgid(wanted_gid)) {
X             _DBG("setgid(%d): %s", wanted_gid, strerror(errno));
49ae17a3bc3102953507031f45c265ad
echo x - apache24/files/extra-patch-suexec_rsrclimit
sed 's/^X//' >apache24/files/extra-patch-suexec_rsrclimit << 
'0764621a9a9fad8c02e2a0595ed98a7e'
X# http://www.chrishardie.com/tech/apache/suexec_rsrclimit.html
X--- support/suexec.c.orig	Wed Jul 12 07:38:44 2006
X+++ support/suexec.c		Wed Nov 15 23:58:04 2006
X@@ -37,6 +37,7 @@
X #include <sys/param.h>
X #include <sys/stat.h>
X #include <sys/types.h>
X+#include <login_cap.h>
X #include <string.h>
X #include <time.h>
X #if APR_HAVE_UNISTD_H
X@@ -259,6 +260,7 @@
X     char *cmd;              /* command to be executed    */
X     char cwd[AP_MAXPATH];   /* current working directory */
X     char dwd[AP_MAXPATH];   /* docroot working directory */
X+    login_cap_t *lc;        /* user resource limits      */
X     struct passwd *pw;      /* password entry holder     */
X     struct group *gr;       /* group entry holder        */
X     struct stat dir_info;   /* directory info holder     */
X@@ -463,6 +465,18 @@
X         log_err("cannot run as forbidden gid (%d/%s)\n", gid, cmd);
X         exit(108);
X     }
X+
X+    /*
X+     * Apply user resource limits based on login class.
X+     */
X+    if ((lc = login_getclassbyname(pw->pw_class, pw)) == NULL) {
X+		log_err("failed to login_getclassbyname()\n");
X+		exit(109);
X+	}
X+	if ((setusercontext(lc, pw, uid, LOGIN_SETRESOURCES)) != 0) {
X+		log_err("failed to setusercontext()\n");
X+		exit(109);
X+	}
X 
X     /*
X      * Change UID/GID here so that the following tests work over NFS.
X--- support/Makefile.in.orig	Thu Nov 16 02:20:47 2006
X+++ support/Makefile.in	Thu Nov 16 02:11:29 2006
X@@ -65,7 +65,7 @@
X 
X suexec_OBJECTS = suexec.lo
X suexec: $(suexec_OBJECTS)
X-	$(LINK) $(suexec_OBJECTS)
X+	$(LINK) -lutil $(suexec_OBJECTS)
X 
X htcacheclean_OBJECTS = htcacheclean.lo
X htcacheclean: $(htcacheclean_OBJECTS)
0764621a9a9fad8c02e2a0595ed98a7e
echo x - apache24/files/patch-docs__conf__extra__httpd-ssl.conf.in
sed 's/^X//' >apache24/files/patch-docs__conf__extra__httpd-ssl.conf.in << 
'4e842e8de0ae1ae34ee772ec717dee81'
X--- ./docs/conf/extra/httpd-ssl.conf.in.orig	2012-02-01 08:25:55.000000000 
-0800
X+++ ./docs/conf/extra/httpd-ssl.conf.in	2012-02-01 08:27:23.000000000 -0800
X@@ -77,8 +77,8 @@
X DocumentRoot "@exp_htdocsdir@"
X ServerName www.example.com:@@SSLPort@@
X ServerAdmin you@example.com
X-ErrorLog "@exp_logfiledir@/error_log"
X-TransferLog "@exp_logfiledir@/access_log"
X+ErrorLog "@exp_logfiledir@/httpd-error.log"
X+TransferLog "@exp_logfiledir@/httpd-access.log"
X 
X #   SSL Engine Switch:
X #   Enable/Disable SSL for this virtual host.
X@@ -243,7 +243,7 @@
X #   Per-Server Logging:
X #   The home of a custom SSL log file. Use this when you want a
X #   compact non-error SSL logfile on a virtual host basis.
X-CustomLog "@exp_logfiledir@/ssl_request_log" \
X+CustomLog "@exp_logfiledir@/httpd-ssl_request.log" \
X           "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
X 
X </VirtualHost>                                  
4e842e8de0ae1ae34ee772ec717dee81
echo x - apache24/files/patch-docs__conf__httpd.conf.in
sed 's/^X//' >apache24/files/patch-docs__conf__httpd.conf.in << 
'00042f6538c7957da323c23cf075bd15'
X--- ./docs/conf/httpd.conf.in.orig	2012-11-07 19:05:38.000000000 -0800
X+++ ./docs/conf/httpd.conf.in	2013-03-05 15:10:47.325582447 -0800
X@@ -74,8 +74,8 @@
X # It is usually good practice to create a dedicated user and group for
X # running httpd, as with most system services.
X #
X-User daemon
X-Group daemon
X+User %%WWWOWN%%
X+Group %%WWWGRP%%
X 
X </IfModule>
X 
X@@ -181,7 +181,7 @@
X # logged here.  If you *do* define an error logfile for a <VirtualHost>
X # container, that host's errors will be logged there and not here.
X #
X-ErrorLog "@rel_logfiledir@/error_log"
X+ErrorLog "@rel_logfiledir@/httpd-error.log"
X 
X #
X # LogLevel: Control the number of messages logged to the error_log.
X@@ -210,13 +210,13 @@
X     # define per-<VirtualHost> access logfiles, transactions will be
X     # logged therein and *not* in this file.
X     #
X-    CustomLog "@rel_logfiledir@/access_log" common
X+    #CustomLog "@rel_logfiledir@/httpd-access.log" common
X 
X     #
X     # If you prefer a logfile with access, agent, and referer information
X     # (Combined Logfile Format) you can use the following directive.
X     #
X-    #CustomLog "@rel_logfiledir@/access_log" combined
X+    CustomLog "@rel_logfiledir@/httpd-access.log" combined
X </IfModule>
X 
X <IfModule alias_module>
X@@ -418,3 +418,4 @@
X #RequestHeader unset DNT env=bad_DNT
X #</IfModule>
X 
X+Include @rel_sysconfdir@/Includes/*.conf
00042f6538c7957da323c23cf075bd15
echo x - apache24/files/mpm-itk-perdir-regex
sed 's/^X//' >apache24/files/mpm-itk-perdir-regex << 
'b6ad4951e8b3db0050910c55b775145f'
Xvim: syntax=diff
X
XThis patch is a supplement for the MPM-ITK patchset, adding the 
per-directory
Xsetting AssignUserFromPath <path-regex> <user-pattern> <group-pattern>
X
XUsing a regex for setting the user and/or group name might seem scary, but
Xit has a number of uses in cases where a hard-coded list of <Directory>
Xclauses would be implactical:
X
X    For personal home pages, either using mod_userdir or simply
X    subdirectories named like the user name
X    For vhosts using mod_vhost_alias
X
XThis patch is against MPM-ITK version 2.2.11-02. You might have to kneed it
Xa little if you are using a later version of MPM-ITK.
X
XPlease Note: This patch has only been briefly tested. Remember to test it
Xrigorously before applying it in a production environment!
X
XExamples
X
X    <Directory /home>
X        AssignUserFromPath "^/home/([^/]+)" www-data $1-web
X    </Directory>
X
X WWW: http://www.pvv.ntnu.no/~knuta/mpm-itk/
X
X To apply this additional diff to apache22-mpm-itk use
X make -DWITH_ITK_PERDIR_REGEX
X
X===========================================================================
X--- server/mpm/experimental/itk/itk.c	2011-03-05 18:12:47.000000000 +0100
X+++ server/mpm/experimental/itk/itk.c	2011-03-06 23:28:49.000000000 +0100
X@@ -60,6 +60,7 @@
X #include "ap_listen.h"
X #include "ap_mmn.h"
X #include "apr_poll.h"
X+#include "ap_regex.h"
X 
X #ifdef HAVE_BSTRING_H
X #include <bstring.h>            /* for IRIX, FD_SET calls bzero() */
X@@ -164,6 +165,10 @@
X     gid_t gid;
X     char *username;
X     int nice_value;
X+    char *user_regex_string;
X+    ap_regex_t *user_regex;
X+    char *user_pattern;
X+    char *group_pattern;
X } itk_per_dir_conf;
X 
X typedef struct
X@@ -1421,6 +1426,7 @@
X     gid_t wanted_gid;
X     const char *wanted_username;
X     int err = 0;
X+    int retval = OK;
X     
X     itk_server_conf *sconf =
X         (itk_server_conf *) ap_get_module_config(r->server->
module_config, &mpm_itk_module);
X@@ -1458,6 +1464,35 @@
X     wanted_gid = dconf->gid;
X     wanted_username = dconf->username;
X 
X+    /* Determine uid and gid from regex, if available */
X+    if (dconf->user_regex != NULL) {
X+        apr_size_t nmatch = 10;
X+        ap_regmatch_t pmatch[10];
X+        char *user_string;
X+        char *group_string;
X+        struct passwd *user_struct;
X+        struct group *group_struct;
X+
X+        if (ap_regexec(dconf->user_regex, r->filename, nmatch, pmatch, 0) 
== 0) {
X+            user_string = ap_pregsub(r->pool, dconf->user_pattern, r->
filename, nmatch, pmatch);
X+            group_string = ap_pregsub(r->pool, dconf->group_pattern, r->
filename, nmatch, pmatch);
X+
X+            if (!(user_struct = getpwnam(user_string))) {
X+                _DBG("%s: No such user: '%s' (regex: '%s', pattern: 
'%s')",
X+                     r->filename, user_string, dconf->user_regex_string, 
dconf->user_pattern);
X+                retval = HTTP_INTERNAL_SERVER_ERROR;
X+            } else if (!(group_struct = getgrnam(group_string))) {
X+                _DBG("%s: No such group: '%s' (regex: '%s', pattern: 
'%s')",
X+                     r->filename, group_string, dconf->user_regex_string, 
dconf->group_pattern);
X+                retval = HTTP_INTERNAL_SERVER_ERROR;
X+            } else {
X+                wanted_username = user_string;
X+                wanted_uid = user_struct->pw_uid;
X+                wanted_gid = group_struct->gr_gid;
X+            }
X+        }
X+    }
X+
X     if (wanted_uid == -1 || wanted_gid == -1) {
X         wanted_uid = unixd_config.user_id;
X         wanted_gid = unixd_config.group_id;
X@@ -1488,7 +1523,7 @@
X         ap_lingering_close(r->connection);
X         exit(0);
X     }
X-    return OK;
X+    return retval;
X }
X 
X static void itk_hooks(apr_pool_t *p)
X@@ -1632,6 +1667,24 @@
X     return NULL;
X }
X 
X+static const char *assign_user_id_regex (cmd_parms *cmd, itk_per_dir_conf 
*dconf, const char *regex, const char *user_string, const char 
*group_string)
X+{
X+    ap_regex_t *compiled_regexp;
X+
X+    compiled_regexp = ap_pregcomp(cmd->pool, regex, AP_REG_EXTENDED);
X+    if (!compiled_regexp) {
X+        return apr_pstrcat(cmd->pool,
X+                           "AssignUserFromPath: cannot compile regular 
expression '",
X+                           regex, "'", NULL);
X+    }
X+
X+    dconf->user_regex_string = apr_pstrdup(cmd->pool, regex);
X+    dconf->user_regex = compiled_regexp;
X+    dconf->user_pattern = apr_pstrdup(cmd->pool, user_string);
X+    dconf->group_pattern = apr_pstrdup(cmd->pool, group_string);
X+    return NULL;
X+}
X+
X static const char *set_max_clients_vhost (cmd_parms *cmd, void *dummy, 
const char *arg)
X {
X     itk_server_conf *sconf =
X@@ -1676,6 +1729,8 @@
X               "Maximum value of MaxClients for this run of Apache"),
X AP_INIT_TAKE2("AssignUserID", assign_user_id, NULL, RSRC_CONF|ACCESS_CONF,
X               "Tie a virtual host to a specific child process."),
X+AP_INIT_TAKE3("AssignUserFromPath", assign_user_id_regex, NULL, 
RSRC_CONF|ACCESS_CONF,
X+              "Use a regex to determine the user ID from a path in the 
file system. Use with care!"),
X AP_INIT_TAKE1("MaxClientsVHost", set_max_clients_vhost, NULL, RSRC_CONF,
X               "Maximum number of children alive at the same time for this 
virtual host."),
X AP_INIT_TAKE1("NiceValue", set_nice_value, NULL, RSRC_CONF|ACCESS_CONF,
X@@ -1716,6 +1771,20 @@
X     } else {
X       c->nice_value = parent->nice_value;
X     }
X+    // The test for username != NULL means that we clear the regex 
settings if an
X+    // explicit username is specified in a subdirectory, which is what I 
believe
X+    // most people would expect.
X+    if (child->user_regex_string != NULL || child->username != NULL) {
X+      c->user_regex_string = child->user_regex_string;
X+      c->user_regex = child->user_regex;
X+      c->user_pattern = child->user_pattern;
X+      c->group_pattern = child->group_pattern;
X+    } else {
X+      c->user_regex_string = parent->user_regex_string;
X+      c->user_regex = parent->user_regex;
X+      c->user_pattern = parent->user_pattern;
X+      c->group_pattern = parent->group_pattern;
X+    }
X     return c;
X }
X 
b6ad4951e8b3db0050910c55b775145f
echo x - apache24/files/patch-support__apxs.in
sed 's/^X//' >apache24/files/patch-support__apxs.in << 
'5a46a5e8292ca2f9c4ac37c5ef77bfdb'
X--- support/apxs.in.orig	2010-07-26 08:42:53.271215110 +0900
X+++ support/apxs.in	2010-07-26 08:43:37.927545200 +0900
X@@ -612,7 +612,13 @@
X                 }
X             } else {
X                 # replace already existing LoadModule line
X-                $content =~ s|^(.*\n)#?\s*$lmd_re[^\n]*\n|$1$c$lmd\n|s;
X+                # Custom FreeBSD mod
X+                if ($opt_A) {
X+                    $content =~ s|^(.*\n)#?\s*$lmd_re[^\n]*\n|$1|s;
X+                }
X+                else {
X+                    $content =~ s|^(.*\n)#?\s*$lmd_re[^\n]*\n|$1$c$lmd\n|s
;
X+                }
X             }
X             $lmd =~ m|LoadModule\s+(.+?)_module.*|;
X             notice("[$what module `$1' in $CFG_SYSCONFDIR/$CFG_TARGET.conf
]");
X@@ -621,8 +627,7 @@
X             if (open(FP, ">$CFG_SYSCONFDIR/$CFG_TARGET.conf.new")) {
X                 print FP $content;
X                 close(FP);
X-                system("cp $CFG_SYSCONFDIR/$CFG_TARGET.conf 
$CFG_SYSCONFDIR/$CFG_TARGET.conf.bak && " .
X-                       "cp $CFG_SYSCONFDIR/$CFG_TARGET.conf.new 
$CFG_SYSCONFDIR/$CFG_TARGET.conf && " .
X+                system("cp $CFG_SYSCONFDIR/$CFG_TARGET.conf.new 
$CFG_SYSCONFDIR/$CFG_TARGET.conf && " .
X                        "rm $CFG_SYSCONFDIR/$CFG_TARGET.conf.new");
X             } else {
X                 notice("unable to open configuration file");
5a46a5e8292ca2f9c4ac37c5ef77bfdb
echo x - apache24/files/mpm-itk-20110321-01
sed 's/^X//' >apache24/files/mpm-itk-20110321-01 << 
'4f01ae1427b0d4d015b36d3c2a4a63f2'
Xvim: syntax=diff
X
XMonolithic mpm-itk patch version 2.2.17-01 updated 2011-03-21
X
XThe Apache 2 ITK MPM
X
Xapache2-mpm-itk (just mpm-itk for short) is an MPM (Multi-Processing 
Module)
Xfor the Apache web server. mpm-itk allows you to run each of your vhost
Xunder a separate uid and gid . in short, the scripts and configuration 
files
Xfor one vhost no longer have to be readable for all the other vhosts.
X
Xmpm-itk is based on the traditional prefork MPM, which means it's
Xnon-threaded; in short, this means you can run non-thread-aware code (like
Xmany PHP extensions) without problems. On the other hand, you lose out to
Xany performance benefit you'd get with threads, of course; you'd have to
Xdecide for yourself if that's worth it or not. You will also take an
Xadditional performance hit over prefork, since there's an extra fork per
Xrequest.
X
XLicensing:
X mpm-itk is licensed under the Apache License, version 2.0,
X like the rest of Apache.
X
XFor more Informations and Instructions please visit the official webpage.
X
XWWW: http://mpm-itk.sesse.net/
X
X===========================================================================
Xunchanged:
X--- server/mpm/experimental/itk/Makefile.in
X+++ server/mpm/experimental/itk/Makefile.in
X@@ -0,0 +1,5 @@
X+
X+LTLIBRARY_NAME    = libitk.la
X+LTLIBRARY_SOURCES = itk.c
X+
X+include $(top_srcdir)/build/ltlib.mk
Xunchanged:
X--- server/mpm/experimental/itk/config.m4
X+++ server/mpm/experimental/itk/config.m4
X@@ -0,0 +1,3 @@
X+if test "$MPM_NAME" = "itk" ; then
X+    APACHE_FAST_OUTPUT(server/mpm/$MPM_SUBDIR_NAME/Makefile)
X+fi
Xunchanged:
X--- server/mpm/experimental/itk/itk.c
X+++ server/mpm/experimental/itk/itk.c
X@@ -0,0 +1,1757 @@
X+/* Licensed to the Apache Software Foundation (ASF) under one or more
X+ * contributor license agreements.  See the NOTICE file distributed with
X+ * this work for additional information regarding copyright ownership.
X+ * The ASF licenses this file to You under the Apache License, Version 2.0
X+ * (the "License"); you may not use this file except in compliance with
X+ * the License.  You may obtain a copy of the License at
X+ *
X+ *     http://www.apache.org/licenses/LICENSE-2.0
X+ *
X+ * Unless required by applicable law or agreed to in writing, software
X+ * distributed under the License is distributed on an "AS IS" BASIS,
X+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
implied.
X+ * See the License for the specific language governing permissions and
X+ * limitations under the License.
X+ * 
X+ * Portions copyright 2005-2009 Steinar H. Gunderson 
<sgunderson@bigfoot.com>.
X+ * Licensed under the same terms as the rest of Apache.
X+ *
X+ * Portions copyright 2008 Knut Auvor Grythe <knut@auvor.no>.
X+ * Licensed under the same terms as the rest of Apache.
X+ */
X+
X+#include "apr.h"
X+#include "apr_portable.h"
X+#include "apr_strings.h"
X+#include "apr_thread_proc.h"
X+#include "apr_signal.h"
X+
X+# define _DBG(text,par...) \
X+    ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, \
X+                "(itkmpm: pid=%d uid=%d, gid=%d) %s(): " text, \
X+                getpid(), getuid(), getgid(), __FUNCTION__, par)
X+
X+#define APR_WANT_STDIO
X+#define APR_WANT_STRFUNC
X+#include "apr_want.h"
X+
X+#if APR_HAVE_UNISTD_H
X+#include <unistd.h>
X+#endif
X+#if APR_HAVE_SYS_TYPES_H
X+#include <sys/types.h>
X+#endif
X+
X+#define CORE_PRIVATE
X+
X+#include "ap_config.h"
X+#include "httpd.h"
X+#include "mpm_default.h"
X+#include "http_main.h"
X+#include "http_log.h"
X+#include "http_config.h"
X+#include "http_core.h"          /* for get_remote_host */
X+#include "http_connection.h"
X+#include "http_request.h"       /* for ap_hook_post_perdir_config */
X+#include "scoreboard.h"
X+#include "ap_mpm.h"
X+#include "unixd.h"
X+#include "mpm_common.h"
X+#include "ap_listen.h"
X+#include "ap_mmn.h"
X+#include "apr_poll.h"
X+
X+#ifdef HAVE_BSTRING_H
X+#include <bstring.h>            /* for IRIX, FD_SET calls bzero() */
X+#endif
X+#ifdef HAVE_TIME_H
X+#include <time.h>
X+#endif
X+#ifdef HAVE_SYS_PROCESSOR_H
X+#include <sys/processor.h> /* for bindprocessor() */
X+#endif
X+
X+#if HAVE_LIBCAP
X+#include <sys/capability.h>
X+#endif
X+
X+#include <signal.h>
X+#include <sys/times.h>
X+
X+/* Limit on the total --- clients will be locked out if more servers than
X+ * this are needed.  It is intended solely to keep the server from 
crashing
X+ * when things get out of hand.
X+ *
X+ * We keep a hard maximum number of servers, for two reasons --- first 
off,
X+ * in case something goes seriously wrong, we want to stop the fork bomb
X+ * short of actually crashing the machine we're running on by filling some
X+ * kernel table.  Secondly, it keeps the size of the scoreboard file small
X+ * enough that we can read the whole thing without worrying too much about
X+ * the overhead.
X+ */
X+#ifndef DEFAULT_SERVER_LIMIT
X+#define DEFAULT_SERVER_LIMIT 256
X+#endif
X+
X+/* Admin can't tune ServerLimit beyond MAX_SERVER_LIMIT.  We want
X+ * some sort of compile-time limit to help catch typos.
X+ */
X+#ifndef MAX_SERVER_LIMIT
X+#define MAX_SERVER_LIMIT 200000
X+#endif
X+
X+#ifndef HARD_THREAD_LIMIT
X+#define HARD_THREAD_LIMIT 1
X+#endif
X+
X+/* config globals */
X+
X+int ap_threads_per_child=0;         /* Worker threads per child */
X+static apr_proc_mutex_t *accept_mutex;
X+static int ap_daemons_to_start=0;
X+static int ap_daemons_min_free=0;
X+static int ap_daemons_max_free=0;
X+static int ap_daemons_limit=0;      /* MaxClients */
X+static int server_limit = DEFAULT_SERVER_LIMIT;
X+static int first_server_limit = 0;
X+static int changed_limit_at_restart;
X+static int mpm_state = AP_MPMQ_STARTING;
X+static ap_pod_t *pod;
X+
X+/*
X+ * The max child slot ever assigned, preserved across restarts.  Necessary
X+ * to deal with MaxClients changes across AP_SIG_GRACEFUL restarts.  We
X+ * use this value to optimize routines that have to scan the entire 
scoreboard.
X+ */
X+int ap_max_daemons_limit = -1;
X+server_rec *ap_server_conf;
X+
X+/* one_process --- debugging mode variable; can be set from the command 
line
X+ * with the -X flag.  If set, this gets you the child_main loop running
X+ * in the process which originally started up (no detach, no make_child),
X+ * which is a pretty nice debugging environment.  (You'll get a SIGHUP
X+ * early in standalone_main; just continue through.  This is the server
X+ * trying to kill off any child processes which it might have lying
X+ * around --- Apache doesn't keep track of their pids, it just sends
X+ * SIGHUP to the process group, ignoring it in the root process.
X+ * Continue through and you'll be fine.).
X+ */
X+
X+static int one_process = 0;
X+
X+static apr_pool_t *pconf;               /* Pool for config stuff */
X+static apr_pool_t *pchild;              /* Pool for httpd child stuff */
X+
X+static pid_t ap_my_pid; /* it seems silly to call getpid all the time */
X+static pid_t parent_pid;
X+#ifndef MULTITHREAD
X+static int my_child_num;
X+#endif
X+ap_generation_t volatile ap_my_generation=0;
X+
X+#ifdef TPF
X+int tpf_child = 0;
X+char tpf_server_name[INETD_SERVNAME_LENGTH+1];
X+#endif /* TPF */
X+
X+static volatile int die_now = 0;
X+
X+#define UNSET_NICE_VALUE 100
X+
X+typedef struct
X+{
X+    uid_t uid;
X+    gid_t gid;
X+    char *username;
X+    int nice_value;
X+} itk_per_dir_conf;
X+
X+typedef struct
X+{
X+    int max_clients_vhost;
X+} itk_server_conf;
X+
X+module AP_MODULE_DECLARE_DATA mpm_itk_module;
X+
X+#ifdef GPROF
X+/*
X+ * change directory for gprof to plop the gmon.out file
X+ * configure in httpd.conf:
X+ * GprofDir $RuntimeDir/   -> $ServerRoot/$RuntimeDir/gmon.out
X+ * GprofDir $RuntimeDir/%  -> $ServerRoot/$RuntimeDir/gprof.$pid/gmon.out
X+ */
X+static void chdir_for_gprof(void)
X+{
X+    core_server_config *sconf =
X+        ap_get_module_config(ap_server_conf->module_config, &core_module);
X+    char *dir = sconf->gprof_dir;
X+    const char *use_dir;
X+
X+    if(dir) {
X+        apr_status_t res;
X+        char *buf = NULL ;
X+        int len = strlen(sconf->gprof_dir) - 1;
X+        if(*(dir + len) == '%') {
X+            dir[len] = '\0';
X+            buf = ap_append_pid(pconf, dir, "gprof.");
X+        }
X+        use_dir = ap_server_root_relative(pconf, buf ? buf : dir);
X+        res = apr_dir_make(use_dir,
X+                           APR_UREAD | APR_UWRITE | APR_UEXECUTE |
X+                           APR_GREAD | APR_GEXECUTE |
X+                           APR_WREAD | APR_WEXECUTE, pconf);
X+        if(res != APR_SUCCESS && !APR_STATUS_IS_EEXIST(res)) {
X+            ap_log_error(APLOG_MARK, APLOG_ERR, res, ap_server_conf,
X+                         "gprof: error creating directory %s", dir);
X+        }
X+    }
X+    else {
X+        use_dir = ap_server_root_relative(pconf, DEFAULT_REL_RUNTIMEDIR);
X+    }
X+
X+    chdir(use_dir);
X+}
X+#else
X+#define chdir_for_gprof()
X+#endif
X+
X+/* XXX - I don't know if TPF will ever use this module or not, so leave
X+ * the ap_check_signals calls in but disable them - manoj */
X+#define ap_check_signals()
X+
X+/* a clean exit from a child with proper cleanup */
X+static void clean_child_exit(int code) __attribute__ ((noreturn));
X+static void clean_child_exit(int code)
X+{
X+    mpm_state = AP_MPMQ_STOPPING;
X+
X+    if (pchild) {
X+        apr_pool_destroy(pchild);
X+    }
X+    ap_mpm_pod_close(pod);
X+    chdir_for_gprof();
X+    exit(code);
X+}
X+
X+static void accept_mutex_on(void)
X+{
X+    apr_status_t rv = apr_proc_mutex_lock(accept_mutex);
X+    if (rv != APR_SUCCESS) {
X+        const char *msg = "couldn't grab the accept mutex";
X+
X+        if (ap_my_generation !=
X+            ap_scoreboard_image->global->running_generation) {
X+            ap_log_error(APLOG_MARK, APLOG_DEBUG, rv, NULL, "%s", msg);
X+            clean_child_exit(0);
X+        }
X+        else {
X+            ap_log_error(APLOG_MARK, APLOG_EMERG, rv, NULL, "%s", msg);
X+            exit(APEXIT_CHILDFATAL);
X+        }
X+    }
X+}
X+
X+static void accept_mutex_off(void)
X+{
X+    apr_status_t rv = apr_proc_mutex_unlock(accept_mutex);
X+    if (rv != APR_SUCCESS) {
X+        const char *msg = "couldn't release the accept mutex";
X+
X+        if (ap_my_generation !=
X+            ap_scoreboard_image->global->running_generation) {
X+            ap_log_error(APLOG_MARK, APLOG_DEBUG, rv, NULL, "%s", msg);
X+            /* don't exit here... we have a connection to
X+             * process, after which point we'll see that the
X+             * generation changed and we'll exit cleanly
X+             */
X+        }
X+        else {
X+            ap_log_error(APLOG_MARK, APLOG_EMERG, rv, NULL, "%s", msg);
X+            exit(APEXIT_CHILDFATAL);
X+        }
X+    }
X+}
X+
X+/* On some architectures it's safe to do unserialized accept()s in the 
single
X+ * Listen case.  But it's never safe to do it in the case where there's
X+ * multiple Listen statements.  Define SINGLE_LISTEN_UNSERIALIZED_ACCEPT
X+ * when it's safe in the single Listen case.
X+ */
X+#ifdef SINGLE_LISTEN_UNSERIALIZED_ACCEPT
X+#define SAFE_ACCEPT(stmt) do {if (ap_listeners->next) {stmt;}} while(0)
X+#else
X+#define SAFE_ACCEPT(stmt) do {stmt;} while(0)
X+#endif
X+
X+AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
X+{
X+    switch(query_code){
X+    case AP_MPMQ_MAX_DAEMON_USED:
X+        *result = ap_daemons_limit;
X+        return APR_SUCCESS;
X+    case AP_MPMQ_IS_THREADED:
X+        *result = AP_MPMQ_NOT_SUPPORTED;
X+        return APR_SUCCESS;
X+    case AP_MPMQ_IS_FORKED:
X+        *result = AP_MPMQ_DYNAMIC;
X+        return APR_SUCCESS;
X+    case AP_MPMQ_HARD_LIMIT_DAEMONS:
X+        *result = server_limit;
X+        return APR_SUCCESS;
X+    case AP_MPMQ_HARD_LIMIT_THREADS:
X+        *result = HARD_THREAD_LIMIT;
X+        return APR_SUCCESS;
X+    case AP_MPMQ_MAX_THREADS:
X+        *result = 0;
X+        return APR_SUCCESS;
X+    case AP_MPMQ_MIN_SPARE_DAEMONS:
X+        *result = ap_daemons_min_free;
X+        return APR_SUCCESS;
X+    case AP_MPMQ_MIN_SPARE_THREADS:
X+        *result = 0;
X+        return APR_SUCCESS;
X+    case AP_MPMQ_MAX_SPARE_DAEMONS:
X+        *result = ap_daemons_max_free;
X+        return APR_SUCCESS;
X+    case AP_MPMQ_MAX_SPARE_THREADS:
X+        *result = 0;
X+        return APR_SUCCESS;
X+    case AP_MPMQ_MAX_REQUESTS_DAEMON:
X+        *result = ap_max_requests_per_child;
X+        return APR_SUCCESS;
X+    case AP_MPMQ_MAX_DAEMONS:
X+        *result = server_limit;
X+        return APR_SUCCESS;
X+    case AP_MPMQ_MPM_STATE:
X+        *result = mpm_state;
X+        return APR_SUCCESS;
X+    }
X+    return APR_ENOTIMPL;
X+}
X+
X+#if defined(NEED_WAITPID)
X+/*
X+   Systems without a real waitpid sometimes lose a child's exit while 
waiting
X+   for another.  Search through the scoreboard for missing children.
X+ */
X+int reap_children(int *exitcode, apr_exit_why_e *status)
X+{
X+    int n, pid;
X+
X+    for (n = 0; n < ap_max_daemons_limit; ++n) {
X+        if (ap_scoreboard_image->servers[n][0].status != SERVER_DEAD &&
X+                kill((pid = ap_scoreboard_image->parent[n].pid), 0) == 
-1) {
X+            ap_update_child_status_from_indexes(n, 0, SERVER_DEAD, NULL);
X+            /* just mark it as having a successful exit status */
X+            *status = APR_PROC_EXIT;
X+            *exitcode = 0;
X+            return(pid);
X+        }
X+    }
X+    return 0;
X+}
X+#endif
X+
X+/*****************************************************************
X+ * Connection structures and accounting...
X+ */
X+
X+static void just_die(int sig)
X+{
X+    clean_child_exit(0);
X+}
X+
X+static void stop_listening(int sig)
X+{
X+    ap_close_listeners();
X+
X+    /* For a graceful stop, we want the child to exit when done */
X+    die_now = 1;
X+}
X+
X+/* volatile just in case */
X+static int volatile shutdown_pending;
X+static int volatile restart_pending;
X+static int volatile is_graceful;
X+
X+static void sig_term(int sig)
X+{
X+    if (shutdown_pending == 1) {
X+        /* Um, is this _probably_ not an error, if the user has
X+         * tried to do a shutdown twice quickly, so we won't
X+         * worry about reporting it.
X+         */
X+        return;
X+    }
X+    shutdown_pending = 1;
X+    is_graceful = (sig == AP_SIG_GRACEFUL_STOP);
X+}
X+
X+/* restart() is the signal handler for SIGHUP and AP_SIG_GRACEFUL
X+ * in the parent process, unless running in ONE_PROCESS mode
X+ */
X+static void restart(int sig)
X+{
X+    if (restart_pending == 1) {
X+        /* Probably not an error - don't bother reporting it */
X+        return;
X+    }
X+    restart_pending = 1;
X+    is_graceful = (sig == AP_SIG_GRACEFUL);
X+}
X+
X+static void set_signals(void)
X+{
X+#ifndef NO_USE_SIGACTION
X+    struct sigaction sa;
X+#endif
X+
X+    if (!one_process) {
X+        ap_fatal_signal_setup(ap_server_conf, pconf);
X+    }
X+
X+#ifndef NO_USE_SIGACTION
X+    sigemptyset(&sa.sa_mask);
X+    sa.sa_flags = 0;
X+
X+    sa.sa_handler = sig_term;
X+    if (sigaction(SIGTERM, &sa, NULL) < 0)
X+        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
"sigaction(SIGTERM)");
X+#ifdef AP_SIG_GRACEFUL_STOP
X+    if (sigaction(AP_SIG_GRACEFUL_STOP, &sa, NULL) < 0)
X+        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
X+                     "sigaction(" AP_SIG_GRACEFUL_STOP_STRING ")");
X+#endif
X+#ifdef SIGINT
X+    if (sigaction(SIGINT, &sa, NULL) < 0)
X+        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
"sigaction(SIGINT)");
X+#endif
X+#ifdef SIGXCPU
X+    sa.sa_handler = SIG_DFL;
X+    if (sigaction(SIGXCPU, &sa, NULL) < 0)
X+        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
"sigaction(SIGXCPU)");
X+#endif
X+#ifdef SIGXFSZ
X+    sa.sa_handler = SIG_DFL;
X+    if (sigaction(SIGXFSZ, &sa, NULL) < 0)
X+        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
"sigaction(SIGXFSZ)");
X+#endif
X+#ifdef SIGPIPE
X+    sa.sa_handler = SIG_IGN;
X+    if (sigaction(SIGPIPE, &sa, NULL) < 0)
X+        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
"sigaction(SIGPIPE)");
X+#endif
X+
X+    /* we want to ignore HUPs and AP_SIG_GRACEFUL while we're busy
X+     * processing one
X+     */
X+    sigaddset(&sa.sa_mask, SIGHUP);
X+    sigaddset(&sa.sa_mask, AP_SIG_GRACEFUL);
X+    sa.sa_handler = restart;
X+    if (sigaction(SIGHUP, &sa, NULL) < 0)
X+        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
"sigaction(SIGHUP)");
X+    if (sigaction(AP_SIG_GRACEFUL, &sa, NULL) < 0)
X+        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
"sigaction(" AP_SIG_GRACEFUL_STRING ")");
X+#else
X+    if (!one_process) {
X+#ifdef SIGXCPU
X+        apr_signal(SIGXCPU, SIG_DFL);
X+#endif /* SIGXCPU */
X+#ifdef SIGXFSZ
X+        apr_signal(SIGXFSZ, SIG_DFL);
X+#endif /* SIGXFSZ */
X+    }
X+
X+    apr_signal(SIGTERM, sig_term);
X+#ifdef SIGHUP
X+    apr_signal(SIGHUP, restart);
X+#endif /* SIGHUP */
X+#ifdef AP_SIG_GRACEFUL
X+    apr_signal(AP_SIG_GRACEFUL, restart);
X+#endif /* AP_SIG_GRACEFUL */
X+#ifdef AP_SIG_GRACEFUL_STOP
X+    apr_signal(AP_SIG_GRACEFUL_STOP, sig_term);
X+#endif /* AP_SIG_GRACEFUL */
X+#ifdef SIGPIPE
X+    apr_signal(SIGPIPE, SIG_IGN);
X+#endif /* SIGPIPE */
X+
X+#endif
X+}
X+
X+/*****************************************************************
X+ * Child process main loop.
X+ * The following vars are static to avoid getting clobbered by longjmp();
X+ * they are really private to child_main.
X+ */
X+
X+static int requests_this_child;
X+static int num_listensocks = 0;
X+
X+
X+int ap_graceful_stop_signalled(void)
X+{
X+    /* not ever called anymore... */
X+    return 0;
X+}
X+
X+
X+static void child_main(int child_num_arg)
X+{
X+    apr_pool_t *ptrans;
X+    apr_allocator_t *allocator;
X+    apr_status_t status;
X+    int i;
X+    ap_listen_rec *lr;
X+    apr_pollset_t *pollset;
X+    ap_sb_handle_t *sbh;
X+    apr_bucket_alloc_t *bucket_alloc;
X+    int last_poll_idx = 0;
X+
X+#if HAVE_LIBCAP
X+    cap_t caps;
X+    cap_value_t suidcaps[] = {
X+        CAP_SETUID,
X+        CAP_SETGID,
X+	CAP_DAC_READ_SEARCH,
X+        CAP_SYS_NICE,
X+    };
X+#endif    
X+
X+    mpm_state = AP_MPMQ_STARTING; /* for benefit of any hooks that run as 
this
X+                                   * child initializes
X+                                   */
X+
X+    my_child_num = child_num_arg;
X+    ap_my_pid = getpid();
X+    requests_this_child = 0;
X+
X+    ap_fatal_signal_child_setup(ap_server_conf);
X+
X+    /* Get a sub context for global allocations in this child, so that
X+     * we can have cleanups occur when the child exits.
X+     */
X+    apr_allocator_create(&allocator);
X+    apr_allocator_max_free_set(allocator, ap_max_mem_free);
X+    apr_pool_create_ex(&pchild, pconf, NULL, allocator);
X+    apr_allocator_owner_set(allocator, pchild);
X+
X+    apr_pool_create(&ptrans, pchild);
X+    apr_pool_tag(ptrans, "transaction");
X+
X+    /* needs to be done before we switch UIDs so we have permissions */
X+    ap_reopen_scoreboard(pchild, NULL, 0);
X+    status = apr_proc_mutex_child_init(&accept_mutex, ap_lock_fname, 
pchild);
X+    if (status != APR_SUCCESS) {
X+        ap_log_error(APLOG_MARK, APLOG_EMERG, status, ap_server_conf,
X+                     "Couldn't initialize cross-process lock in child "
X+                     "(%s) (%d)", ap_lock_fname, ap_accept_lock_mech);
X+        clean_child_exit(APEXIT_CHILDFATAL);
X+    }
X+
X+    ap_run_child_init(pchild, ap_server_conf);
X+
X+    ap_create_sb_handle(&sbh, pchild, my_child_num, 0);
X+
X+    (void) ap_update_child_status(sbh, SERVER_READY, (request_rec *) 
NULL);
X+
X+    /* Set up the pollfd array */
X+    status = apr_pollset_create(&pollset, num_listensocks, pchild, 0);
X+    if (status != APR_SUCCESS) {
X+        ap_log_error(APLOG_MARK, APLOG_EMERG, status, ap_server_conf,
X+                     "Couldn't create pollset in child; check system or 
user limits");
X+        clean_child_exit(APEXIT_CHILDSICK); /* assume temporary resource 
issue */
X+    }
X+
X+    for (lr = ap_listeners, i = num_listensocks; i--; lr = lr->next) {
X+        apr_pollfd_t pfd = { 0 };
X+
X+        pfd.desc_type = APR_POLL_SOCKET;
X+        pfd.desc.s = lr->sd;
X+        pfd.reqevents = APR_POLLIN;
X+        pfd.client_data = lr;
X+
X+        /* ### check the status */
X+        (void) apr_pollset_add(pollset, &pfd);
X+    }
X+
X+#if HAVE_LIBCAP
X+    /* Drop as many privileges as we can. We'll still
X+     * access files with uid=0, and we can setuid() to anything, but
X+     * at least there's tons of other evilness (like loading kernel
X+     * modules) we can't do directly.  (The setuid() capability will
X+     * go away automatically when we setuid() or exec() -- the former
X+     * is likely to come first.)
X+     */
X+    caps = cap_init();
X+    cap_clear(caps);
X+    cap_set_flag(caps, CAP_PERMITTED, sizeof(suidcaps)/sizeof(cap_value_t)
, suidcaps, CAP_SET);
X+    cap_set_flag(caps, CAP_EFFECTIVE, sizeof(suidcaps)/sizeof(cap_value_t)
, suidcaps, CAP_SET);
X+    cap_set_proc(caps);
X+    cap_free(caps);
X+#endif    
X+
X+    mpm_state = AP_MPMQ_RUNNING;
X+
X+    bucket_alloc = apr_bucket_alloc_create(pchild);
X+
X+    /* die_now is set when AP_SIG_GRACEFUL is received in the child;
X+     * shutdown_pending is set when SIGTERM is received when running
X+     * in single process mode.  */
X+    while (!die_now && !shutdown_pending) {
X+        conn_rec *current_conn;
X+        void *csd;
X+
X+        /*
X+         * (Re)initialize this child to a pre-connection state.
X+         */
X+
X+        apr_pool_clear(ptrans);
X+
X+        if ((ap_max_requests_per_child > 0
X+             && requests_this_child++ >= ap_max_requests_per_child)) {
X+            clean_child_exit(0);
X+        }
X+
X+        (void) ap_update_child_status(sbh, SERVER_READY, (request_rec *) 
NULL);
X+
X+        /*
X+         * Wait for an acceptable connection to arrive.
X+         */
X+
X+        /* Lock around "accept", if necessary */
X+        SAFE_ACCEPT(accept_mutex_on());
X+
X+        if (num_listensocks == 1) {
X+            /* There is only one listener record, so refer to that one. */
X+            lr = ap_listeners;
X+        }
X+        else {
X+            /* multiple listening sockets - need to poll */
X+            for (;;) {
X+                apr_int32_t numdesc;
X+                const apr_pollfd_t *pdesc;
X+
X+                /* check for termination first so we don't sleep for a 
while in
X+                 * poll if already signalled
X+                 */
X+                if (one_process && shutdown_pending) {
X+                    SAFE_ACCEPT(accept_mutex_off());
X+                    return;
X+                }
X+                else if (die_now) {
X+                    /* In graceful stop/restart; drop the mutex
X+                     * and terminate the child. */
X+                    SAFE_ACCEPT(accept_mutex_off());
X+                    clean_child_exit(0);
X+                }
X+                /* timeout == 10 seconds to avoid a hang at graceful 
restart/stop
X+                 * caused by the closing of sockets by the signal handler
X+                 */
X+                status = apr_pollset_poll(pollset, apr_time_from_sec(10), 
X+                                          &numdesc, &pdesc);
X+                if (status != APR_SUCCESS) {
X+                    if (APR_STATUS_IS_TIMEUP(status) ||
X+                        APR_STATUS_IS_EINTR(status)) {
X+                        continue;
X+                    }
X+                    /* Single Unix documents select as returning errnos
X+                     * EBADF, EINTR, and EINVAL... and in none of those
X+                     * cases does it make sense to continue.  In fact
X+                     * on Linux 2.0.x we seem to end up with EFAULT
X+                     * occasionally, and we'd loop forever due to it.
X+                     */
X+                    ap_log_error(APLOG_MARK, APLOG_ERR, status,
X+                                 ap_server_conf, "apr_pollset_poll: 
(listen)");
X+                    SAFE_ACCEPT(accept_mutex_off());
X+                    clean_child_exit(1);
X+                }
X+
X+                /* We can always use pdesc[0], but sockets at position N
X+                 * could end up completely starved of attention in a very
X+                 * busy server. Therefore, we round-robin across the
X+                 * returned set of descriptors. While it is possible that
X+                 * the returned set of descriptors might flip around and
X+                 * continue to starve some sockets, we happen to know the
X+                 * internal pollset implementation retains ordering
X+                 * stability of the sockets. Thus, the round-robin should
X+                 * ensure that a socket will eventually be serviced.
X+                 */
X+                if (last_poll_idx >= numdesc)
X+                    last_poll_idx = 0;
X+
X+                /* Grab a listener record from the client_data of the poll
X+                 * descriptor, and advance our saved index to round-robin
X+                 * the next fetch.
X+                 *
X+                 * ### hmm... this descriptor might have POLLERR rather
X+                 * ### than POLLIN
X+                 */
X+                lr = pdesc[last_poll_idx++].client_data;
X+                goto got_fd;
X+            }
X+        }
X+    got_fd:
X+        /* if we accept() something we don't want to die, so we have to
X+         * defer the exit
X+         */
X+        status = lr->accept_func(&csd, lr, ptrans);
X+
X+        SAFE_ACCEPT(accept_mutex_off());      /* unlock after "accept" */
X+
X+        if (status == APR_EGENERAL) {
X+            /* resource shortage or should-not-occur occured */
X+            clean_child_exit(1);
X+        }
X+        else if (status != APR_SUCCESS) {
X+            continue;
X+        }
X+
X+        /*
X+         * We now have a connection, so set it up with the appropriate
X+         * socket options, file descriptors, and read/write buffers.
X+         */
X+
X+        {
X+            pid_t pid = fork(), child_pid;
X+            int status;
X+            switch (pid) {
X+            case -1:
X+                ap_log_error(APLOG_MARK, APLOG_ERR, errno, NULL, "fork: 
Unable to fork new process");
X+                break;
X+            case 0: /* child */
X+                apr_proc_mutex_child_init(&accept_mutex, ap_lock_fname, 
pchild);
X+                current_conn = ap_run_create_connection(ptrans, 
ap_server_conf, csd, my_child_num, sbh, bucket_alloc);
X+                if (current_conn) {
X+                    ap_process_connection(current_conn, csd);
X+                    ap_lingering_close(current_conn);
X+                }
X+                exit(0);
X+            default: /* parent; just wait for child to be done */
X+                do {
X+                    child_pid = waitpid(pid, &status, 0);
X+                } while (child_pid == -1 && errno == EINTR);
X+
X+                if (child_pid != pid || !WIFEXITED(status)) {
X+                    if (WIFSIGNALED(status)) {
X+                        ap_log_error(APLOG_MARK, APLOG_ERR, 0, 
ap_server_conf, "child died with signal %u", WTERMSIG(status));
X+                    } else if (WEXITSTATUS(status) != 0) {
X+                        ap_log_error(APLOG_MARK, APLOG_ERR, 0, 
ap_server_conf, "child exited with non-zero exit status %u", 
WEXITSTATUS(status));
X+                    } else {
X+                        ap_log_error(APLOG_MARK, APLOG_ERR, errno, NULL, 
"waitpid() failed");
X+                    }
X+                    clean_child_exit(1);
X+                }
X+                break;
X+            }
X+        }
X+
X+        /* Check the pod and the generation number after processing a
X+         * connection so that we'll go away if a graceful restart occurred
X+         * while we were processing the connection or we are the lucky
X+         * idle server process that gets to die.
X+         */
X+        if (ap_mpm_pod_check(pod) == APR_SUCCESS) { /* selected as idle? 
*/
X+            die_now = 1;
X+        }
X+        else if (ap_my_generation !=
X+                 ap_scoreboard_image->global->running_generation) { /* 
restart? */
X+            /* yeah, this could be non-graceful restart, in which case the
X+             * parent will kill us soon enough, but why bother checking?
X+             */
X+            die_now = 1;
X+        }
X+
X+        /* if we have already setuid(), die (we can't be used anyhow) */
X+        if (getuid())
X+            die_now = 1;
X+    }
X+    /* This apr_pool_clear call is redundant, should be redundant, but 
compensates
X+     * a flaw in the apr reslist code.  This should be removed once that 
flaw has
X+     * been addressed.
X+     */
X+    apr_pool_clear(ptrans);
X+    clean_child_exit(0);
X+}
X+
X+
X+static int make_child(server_rec *s, int slot)
X+{
X+    int pid;
X+
X+    if (slot + 1 > ap_max_daemons_limit) {
X+        ap_max_daemons_limit = slot + 1;
X+    }
X+
X+    if (one_process) {
X+        apr_signal(SIGHUP, sig_term);
X+        /* Don't catch AP_SIG_GRACEFUL in ONE_PROCESS mode :) */
X+        apr_signal(SIGINT, sig_term);
X+#ifdef SIGQUIT
X+        apr_signal(SIGQUIT, SIG_DFL);
X+#endif
X+        apr_signal(SIGTERM, sig_term);
X+        child_main(slot);
X+        return 0;
X+    }
X+
X+    (void) ap_update_child_status_from_indexes(slot, 0, SERVER_STARTING,
X+                                               (request_rec *) NULL);
X+
X+
X+#ifdef _OSD_POSIX
X+    /* BS2000 requires a "special" version of fork() before a setuid() 
call */
X+    if ((pid = os_fork(unixd_config.user_name)) == -1) {
X+#elif defined(TPF)
X+    if ((pid = os_fork(s, slot)) == -1) {
X+#else
X+    if ((pid = fork()) == -1) {
X+#endif
X+        ap_log_error(APLOG_MARK, APLOG_ERR, errno, s, "fork: Unable to 
fork new process");
X+
X+        /* fork didn't succeed. Fix the scoreboard or else
X+         * it will say SERVER_STARTING forever and ever
X+         */
X+        (void) ap_update_child_status_from_indexes(slot, 0, SERVER_DEAD,
X+                                                   (request_rec *) NULL);
X+
X+        /* In case system resources are maxxed out, we don't want
X+         * Apache running away with the CPU trying to fork over and
X+         * over and over again.
X+         */
X+        sleep(10);
X+
X+        return -1;
X+    }
X+
X+    if (!pid) {
X+#ifdef HAVE_BINDPROCESSOR
X+        /* by default AIX binds to a single processor
X+         * this bit unbinds children which will then bind to another cpu
X+         */
X+        int status = bindprocessor(BINDPROCESS, (int)getpid(),
X+                                   PROCESSOR_CLASS_ANY);
X+        if (status != OK) {
X+            ap_log_error(APLOG_MARK, APLOG_WARNING, errno,
X+                         ap_server_conf, "processor unbind failed %d", 
status);
X+        }
X+#endif
X+        RAISE_SIGSTOP(MAKE_CHILD);
X+        AP_MONCONTROL(1);
X+        /* Disable the parent's signal handlers and set up proper 
handling in
X+         * the child.
X+         */
X+        apr_signal(SIGHUP, just_die);
X+        apr_signal(SIGTERM, just_die);
X+        /* The child process just closes listeners on AP_SIG_GRACEFUL.
X+         * The pod is used for signalling the graceful restart.
X+         */
X+        apr_signal(AP_SIG_GRACEFUL, stop_listening);
X+        child_main(slot);
X+    }
X+
X+    ap_scoreboard_image->parent[slot].pid = pid;
X+
X+    return 0;
X+}
X+
X+
X+/* start up a bunch of children */
X+static void startup_children(int number_to_start)
X+{
X+    int i;
X+
X+    for (i = 0; number_to_start && i < ap_daemons_limit; ++i) {
X+        if (ap_scoreboard_image->servers[i][0].status != SERVER_DEAD) {
X+            continue;
X+        }
X+        if (make_child(ap_server_conf, i) < 0) {
X+            break;
X+        }
X+        --number_to_start;
X+    }
X+}
X+
X+
X+/*
X+ * idle_spawn_rate is the number of children that will be spawned on the
X+ * next maintenance cycle if there aren't enough idle servers.  It is
X+ * doubled up to MAX_SPAWN_RATE, and reset only when a cycle goes by
X+ * without the need to spawn.
X+ */
X+static int idle_spawn_rate = 1;
X+#ifndef MAX_SPAWN_RATE
X+#define MAX_SPAWN_RATE  (32)
X+#endif
X+static int hold_off_on_exponential_spawning;
X+
X+static void perform_idle_server_maintenance(apr_pool_t *p)
X+{
X+    int i;
X+    int to_kill;
X+    int idle_count;
X+    worker_score *ws;
X+    int free_length;
X+    int free_slots[MAX_SPAWN_RATE];
X+    int last_non_dead;
X+    int total_non_dead;
X+
X+    /* initialize the free_list */
X+    free_length = 0;
X+
X+    to_kill = -1;
X+    idle_count = 0;
X+    last_non_dead = -1;
X+    total_non_dead = 0;
X+
X+    for (i = 0; i < ap_daemons_limit; ++i) {
X+        int status;
X+
X+        if (i >= ap_max_daemons_limit && free_length == idle_spawn_rate)
X+            break;
X+        ws = &ap_scoreboard_image->servers[i][0];
X+        status = ws->status;
X+        if (status == SERVER_DEAD) {
X+            /* try to keep children numbers as low as possible */
X+            if (free_length < idle_spawn_rate) {
X+                free_slots[free_length] = i;
X+                ++free_length;
X+            }
X+        }
X+        else {
X+            /* We consider a starting server as idle because we started it
X+             * at least a cycle ago, and if it still hasn't finished 
starting
X+             * then we're just going to swamp things worse by forking 
more.
X+             * So we hopefully won't need to fork more if we count it.
X+             * This depends on the ordering of SERVER_READY and 
SERVER_STARTING.
X+             */
X+            if (status <= SERVER_READY) {
X+                ++ idle_count;
X+                /* always kill the highest numbered child if we have to...
X+                 * no really well thought out reason ... other than 
observing
X+                 * the server behaviour under linux where lower numbered 
children
X+                 * tend to service more hits (and hence are more likely 
to have
X+                 * their data in cpu caches).
X+                 */
X+                to_kill = i;
X+            }
X+
X+            ++total_non_dead;
X+            last_non_dead = i;
X+        }
X+    }
X+    ap_max_daemons_limit = last_non_dead + 1;
X+    if (idle_count > ap_daemons_max_free) {
X+        /* kill off one child... we use the pod because that'll cause it 
to
X+         * shut down gracefully, in case it happened to pick up a request
X+         * while we were counting
X+         */
X+        ap_mpm_pod_signal(pod);
X+        idle_spawn_rate = 1;
X+    }
X+    else if (idle_count < ap_daemons_min_free) {
X+        /* terminate the free list */
X+        if (free_length == 0) {
X+            /* only report this condition once */
X+            static int reported = 0;
X+
X+            if (!reported) {
X+                ap_log_error(APLOG_MARK, APLOG_ERR, 0, ap_server_conf,
X+                            "server reached MaxClients setting, consider"
X+                            " raising the MaxClients setting");
X+                reported = 1;
X+            }
X+            idle_spawn_rate = 1;
X+        }
X+        else {
X+            if (idle_spawn_rate >= 8) {
X+                ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
X+                    "server seems busy, (you may need "
X+                    "to increase StartServers, or Min/MaxSpareServers), "
X+                    "spawning %d children, there are %d idle, and "
X+                    "%d total children", idle_spawn_rate,
X+                    idle_count, total_non_dead);
X+            }
X+            for (i = 0; i < free_length; ++i) {
X+#ifdef TPF
X+                if (make_child(ap_server_conf, free_slots[i]) == -1) {
X+                    if(free_length == 1) {
X+                        shutdown_pending = 1;
X+                        ap_log_error(APLOG_MARK, APLOG_EMERG, 0, 
ap_server_conf,
X+                                    "No active child processes: shutting 
down");
X+                    }
X+                }
X+#else
X+                make_child(ap_server_conf, free_slots[i]);
X+#endif /* TPF */
X+            }
X+            /* the next time around we want to spawn twice as many if this
X+             * wasn't good enough, but not if we've just done a graceful
X+             */
X+            if (hold_off_on_exponential_spawning) {
X+                --hold_off_on_exponential_spawning;
X+            }
X+            else if (idle_spawn_rate < MAX_SPAWN_RATE) {
X+                idle_spawn_rate *= 2;
X+            }
X+        }
X+    }
X+    else {
X+        idle_spawn_rate = 1;
X+    }
X+}
X+
X+/*****************************************************************
X+ * Executive routines.
X+ */
X+
X+int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
X+{
X+    int index;
X+    int remaining_children_to_start;
X+    apr_status_t rv;
X+
X+    ap_log_pid(pconf, ap_pid_fname);
X+
X+    first_server_limit = server_limit;
X+    if (changed_limit_at_restart) {
X+        ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
X+                     "WARNING: Attempt to change ServerLimit "
X+                     "ignored during restart");
X+        changed_limit_at_restart = 0;
X+    }
X+
X+    /* Initialize cross-process accept lock */
X+    ap_lock_fname = apr_psprintf(_pconf, "%s.%" APR_PID_T_FMT,
X+                                 ap_server_root_relative(_pconf, 
ap_lock_fname),
X+                                 ap_my_pid);
X+
X+    rv = apr_proc_mutex_create(&accept_mutex, ap_lock_fname,
X+                               ap_accept_lock_mech, _pconf);
X+    if (rv != APR_SUCCESS) {
X+        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
X+                     "Couldn't create accept lock (%s) (%d)",
X+                     ap_lock_fname, ap_accept_lock_mech);
X+        mpm_state = AP_MPMQ_STOPPING;
X+        return 1;
X+    }
X+
X+#if APR_USE_SYSVSEM_SERIALIZE
X+    if (ap_accept_lock_mech == APR_LOCK_DEFAULT ||
X+        ap_accept_lock_mech == APR_LOCK_SYSVSEM) {
X+#else
X+    if (ap_accept_lock_mech == APR_LOCK_SYSVSEM) {
X+#endif
X+        rv = unixd_set_proc_mutex_perms(accept_mutex);
X+        if (rv != APR_SUCCESS) {
X+            ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
X+                         "Couldn't set permissions on cross-process lock; 
"
X+                         "check User and Group directives");
X+            mpm_state = AP_MPMQ_STOPPING;
X+            return 1;
X+        }
X+    }
X+
X+    if (!is_graceful) {
X+        if (ap_run_pre_mpm(s->process->pool, SB_SHARED) != OK) {
X+            mpm_state = AP_MPMQ_STOPPING;
X+            return 1;
X+        }
X+        /* fix the generation number in the global score; we just got a 
new,
X+         * cleared scoreboard
X+         */
X+        ap_scoreboard_image->global->running_generation = 
ap_my_generation;
X+    }
X+
X+    set_signals();
X+
X+    if (one_process) {
X+        AP_MONCONTROL(1);
X+        make_child(ap_server_conf, 0);
X+    }
X+    else {
X+    if (ap_daemons_max_free < ap_daemons_min_free + 1)  /* Don't 
thrash... */
X+        ap_daemons_max_free = ap_daemons_min_free + 1;
X+
X+    /* If we're doing a graceful_restart then we're going to see a lot
X+     * of children exiting immediately when we get into the main loop
X+     * below (because we just sent them AP_SIG_GRACEFUL).  This happens 
pretty
X+     * rapidly... and for each one that exits we'll start a new one until
X+     * we reach at least daemons_min_free.  But we may be permitted to
X+     * start more than that, so we'll just keep track of how many we're
X+     * supposed to start up without the 1 second penalty between each 
fork.
X+     */
X+    remaining_children_to_start = ap_daemons_to_start;
X+    if (remaining_children_to_start > ap_daemons_limit) {
X+        remaining_children_to_start = ap_daemons_limit;
X+    }
X+    if (!is_graceful) {
X+        startup_children(remaining_children_to_start);
X+        remaining_children_to_start = 0;
X+    }
X+    else {
X+        /* give the system some time to recover before kicking into
X+         * exponential mode
X+         */
X+        hold_off_on_exponential_spawning = 10;
X+    }
X+
X+    ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
X+                "%s configured -- resuming normal operations",
X+                ap_get_server_description());
X+    ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
X+                "Server built: %s", ap_get_server_built());
X+#ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
X+    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
X+                "AcceptMutex: %s (default: %s)",
X+                apr_proc_mutex_name(accept_mutex),
X+                apr_proc_mutex_defname());
X+#endif
X+    restart_pending = shutdown_pending = 0;
X+
X+    mpm_state = AP_MPMQ_RUNNING;
X+
X+    while (!restart_pending && !shutdown_pending) {
X+        int child_slot;
X+        apr_exit_why_e exitwhy;
X+        int status, processed_status;
X+        /* this is a memory leak, but I'll fix it later. */
X+        apr_proc_t pid;
X+
X+        ap_wait_or_timeout(&exitwhy, &status, &pid, pconf);
X+
X+        /* XXX: if it takes longer than 1 second for all our children
X+         * to start up and get into IDLE state then we may spawn an
X+         * extra child
X+         */
X+        if (pid.pid != -1) {
X+            processed_status = ap_process_child_status(&pid, exitwhy, 
status);
X+            if (processed_status == APEXIT_CHILDFATAL) {
X+                mpm_state = AP_MPMQ_STOPPING;
X+                return 1;
X+            }
X+
X+            /* non-fatal death... note that it's gone in the scoreboard. 
*/
X+            child_slot = find_child_by_pid(&pid);
X+            if (child_slot >= 0) {
X+                (void) ap_update_child_status_from_indexes(child_slot, 0, 
SERVER_DEAD,
X+                                                           (request_rec 
*) NULL);
X+                if (processed_status == APEXIT_CHILDSICK) {
X+                    /* child detected a resource shortage (E[NM]FILE, 
ENOBUFS, etc)
X+                     * cut the fork rate to the minimum
X+                     */
X+                    idle_spawn_rate = 1;
X+                }
X+                else if (remaining_children_to_start
X+                    && child_slot < ap_daemons_limit) {
X+                    /* we're still doing a 1-for-1 replacement of dead
X+                     * children with new children
X+                     */
X+                    make_child(ap_server_conf, child_slot);
X+                    --remaining_children_to_start;
X+                }
X+#if APR_HAS_OTHER_CHILD
X+            }
X+            else if (apr_proc_other_child_alert(&pid, 
APR_OC_REASON_DEATH, status) == APR_SUCCESS) {
X+                /* handled */
X+#endif
X+            }
X+            else if (is_graceful) {
X+                /* Great, we've probably just lost a slot in the
X+                 * scoreboard.  Somehow we don't know about this
X+                 * child.
X+                 */
X+                ap_log_error(APLOG_MARK, APLOG_WARNING,
X+                            0, ap_server_conf,
X+                            "long lost child came home! (pid %ld)", 
(long)pid.pid);
X+            }
X+            /* Don't perform idle maintenance when a child dies,
X+             * only do it when there's a timeout.  Remember only a
X+             * finite number of children can die, and it's pretty
X+             * pathological for a lot to die suddenly.
X+             */
X+            continue;
X+        }
X+        else if (remaining_children_to_start) {
X+            /* we hit a 1 second timeout in which none of the previous
X+             * generation of children needed to be reaped... so assume
X+             * they're all done, and pick up the slack if any is left.
X+             */
X+            startup_children(remaining_children_to_start);
X+            remaining_children_to_start = 0;
X+            /* In any event we really shouldn't do the code below because
X+             * few of the servers we just started are in the IDLE state
X+             * yet, so we'd mistakenly create an extra server.
X+             */
X+            continue;
X+        }
X+
X+        perform_idle_server_maintenance(pconf);
X+#ifdef TPF
X+        shutdown_pending = os_check_server(tpf_server_name);
X+        ap_check_signals();
X+        sleep(1);
X+#endif /*TPF */
X+    }
X+    } /* one_process */
X+
X+    mpm_state = AP_MPMQ_STOPPING;
X+
X+    if (shutdown_pending && !is_graceful) {
X+        /* Time to shut down:
X+         * Kill child processes, tell them to call child_exit, etc...
X+         */
X+        if (unixd_killpg(getpgrp(), SIGTERM) < 0) {
X+            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, 
ap_server_conf, "killpg SIGTERM");
X+        }
X+        ap_reclaim_child_processes(1);          /* Start with SIGTERM */
X+
X+        /* cleanup pid file on normal shutdown */
X+        {
X+            const char *pidfile = NULL;
X+            pidfile = ap_server_root_relative (pconf, ap_pid_fname);
X+            if ( pidfile != NULL && unlink(pidfile) == 0)
X+                ap_log_error(APLOG_MARK, APLOG_INFO,
X+                                0, ap_server_conf,
X+                                "removed PID file %s (pid=%ld)",
X+                                pidfile, (long)getpid());
X+        }
X+
X+        ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
X+                    "caught SIGTERM, shutting down");
X+
X+        return 1;
X+    } else if (shutdown_pending) {
X+        /* Time to perform a graceful shut down:
X+         * Reap the inactive children, and ask the active ones
X+         * to close their listeners, then wait until they are
X+         * all done to exit.
X+         */
X+        int active_children;
X+        apr_time_t cutoff = 0;
X+
X+        /* Stop listening */
X+        ap_close_listeners();
X+
X+        /* kill off the idle ones */
X+        ap_mpm_pod_killpg(pod, ap_max_daemons_limit);
X+
X+        /* Send SIGUSR1 to the active children */
X+        active_children = 0;
X+        for (index = 0; index < ap_daemons_limit; ++index) {
X+            if (ap_scoreboard_image->servers[index][0].status != 
SERVER_DEAD) {
X+                /* Ask each child to close its listeners. */
X+                ap_mpm_safe_kill(MPM_CHILD_PID(index), AP_SIG_GRACEFUL);
X+                active_children++;
X+            }
X+        }
X+
X+        /* Allow each child which actually finished to exit */
X+        ap_relieve_child_processes();
X+
X+        /* cleanup pid file */
X+        {
X+            const char *pidfile = NULL;
X+            pidfile = ap_server_root_relative (pconf, ap_pid_fname);
X+            if ( pidfile != NULL && unlink(pidfile) == 0)
X+                ap_log_error(APLOG_MARK, APLOG_INFO,
X+                                0, ap_server_conf,
X+                                "removed PID file %s (pid=%ld)",
X+                                pidfile, (long)getpid());
X+        }
X+
X+        ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
X+           "caught " AP_SIG_GRACEFUL_STOP_STRING ", shutting down 
gracefully");
X+
X+        if (ap_graceful_shutdown_timeout) {
X+            cutoff = apr_time_now() +
X+                     apr_time_from_sec(ap_graceful_shutdown_timeout);
X+        }
X+
X+        /* Don't really exit until each child has finished */
X+        shutdown_pending = 0;
X+        do {
X+            /* Pause for a second */
X+            sleep(1);
X+
X+            /* Relieve any children which have now exited */
X+            ap_relieve_child_processes();
X+
X+            active_children = 0;
X+            for (index = 0; index < ap_daemons_limit; ++index) {
X+                if (ap_mpm_safe_kill(MPM_CHILD_PID(index), 0) == 
APR_SUCCESS) {
X+                    active_children = 1;
X+                    /* Having just one child is enough to stay around */
X+                    break;
X+                }
X+            }
X+        } while (!shutdown_pending && active_children &&
X+                 (!ap_graceful_shutdown_timeout || apr_time_now() < 
cutoff));
X+
X+        /* We might be here because we received SIGTERM, either
X+         * way, try and make sure that all of our processes are
X+         * really dead.
X+         */
X+        unixd_killpg(getpgrp(), SIGTERM);
X+
X+        return 1;
X+    }
X+
X+    /* we've been told to restart */
X+    apr_signal(SIGHUP, SIG_IGN);
X+    apr_signal(AP_SIG_GRACEFUL, SIG_IGN);
X+    if (one_process) {
X+        /* not worth thinking about */
X+        return 1;
X+    }
X+
X+    /* advance to the next generation */
X+    /* XXX: we really need to make sure this new generation number isn't 
in
X+     * use by any of the children.
X+     */
X+    ++ap_my_generation;
X+    ap_scoreboard_image->global->running_generation = ap_my_generation;
X+
X+    if (is_graceful) {
X+        ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
X+                    "Graceful restart requested, doing restart");
X+
X+        /* kill off the idle ones */
X+        ap_mpm_pod_killpg(pod, ap_max_daemons_limit);
X+
X+        /* This is mostly for debugging... so that we know what is still
X+         * gracefully dealing with existing request.  This will break
X+         * in a very nasty way if we ever have the scoreboard totally
X+         * file-based (no shared memory)
X+         */
X+        for (index = 0; index < ap_daemons_limit; ++index) {
X+            if (ap_scoreboard_image->servers[index][0].status != 
SERVER_DEAD) {
X+                ap_scoreboard_image->servers[index][0].status = 
SERVER_GRACEFUL;
X+                /* Ask each child to close its listeners.
X+                 *
X+                 * NOTE: we use the scoreboard, because if we send SIGUSR1
X+                 * to every process in the group, this may include CGI's,
X+                 * piped loggers, etc. They almost certainly won't handle
X+                 * it gracefully.
X+                 */
X+                ap_mpm_safe_kill(ap_scoreboard_image->parent[index].pid, 
AP_SIG_GRACEFUL);
X+            }
X+        }
X+    }
X+    else {
X+        /* Kill 'em off */
X+        if (unixd_killpg(getpgrp(), SIGHUP) < 0) {
X+            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, 
ap_server_conf, "killpg SIGHUP");
X+        }
X+        ap_reclaim_child_processes(0);          /* Not when just starting 
up */
X+        ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
X+                    "SIGHUP received.  Attempting to restart");
X+    }
X+
X+    return 0;
X+}
X+
X+/* This really should be a post_config hook, but the error log is already
X+ * redirected by that point, so we need to do this in the open_logs phase.
X+ */
X+static int itk_open_logs(apr_pool_t *p, apr_pool_t *plog, apr_pool_t 
*ptemp, server_rec *s)
X+{
X+    apr_status_t rv;
X+
X+    pconf = p;
X+    ap_server_conf = s;
X+
X+    if ((num_listensocks = ap_setup_listeners(ap_server_conf)) < 1) {
X+        ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_STARTUP, 0,
X+                     NULL, "no listening sockets available, shutting 
down");
X+        return DONE;
X+    }
X+
X+    if ((rv = ap_mpm_pod_open(pconf, &pod))) {
X+        ap_log_error(APLOG_MARK, APLOG_CRIT|APLOG_STARTUP, rv, NULL,
X+                "Could not open pipe-of-death.");
X+        return DONE;
X+    }
X+    return OK;
X+}
X+
X+static int itk_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t 
*ptemp)
X+{
X+    static int restart_num = 0;
X+    int no_detach, debug, foreground;
X+    apr_status_t rv;
X+
X+    mpm_state = AP_MPMQ_STARTING;
X+
X+    debug = ap_exists_config_define("DEBUG");
X+
X+    if (debug) {
X+        foreground = one_process = 1;
X+        no_detach = 0;
X+    }
X+    else
X+    {
X+        no_detach = ap_exists_config_define("NO_DETACH");
X+        one_process = ap_exists_config_define("ONE_PROCESS");
X+        foreground = ap_exists_config_define("FOREGROUND");
X+    }
X+
X+    /* sigh, want this only the second time around */
X+    if (restart_num++ == 1) {
X+        is_graceful = 0;
X+
X+        if (!one_process && !foreground) {
X+            rv = apr_proc_detach(no_detach ? APR_PROC_DETACH_FOREGROUND
X+                                           : APR_PROC_DETACH_DAEMONIZE);
X+            if (rv != APR_SUCCESS) {
X+                ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
X+                             "apr_proc_detach failed");
X+                return HTTP_INTERNAL_SERVER_ERROR;
X+            }
X+        }
X+
X+        parent_pid = ap_my_pid = getpid();
X+    }
X+
X+    unixd_pre_config(ptemp);
X+    ap_listen_pre_config();
X+    ap_daemons_to_start = DEFAULT_START_DAEMON;
X+    ap_daemons_min_free = DEFAULT_MIN_FREE_DAEMON;
X+    ap_daemons_max_free = DEFAULT_MAX_FREE_DAEMON;
X+    ap_daemons_limit = server_limit;
X+    ap_pid_fname = DEFAULT_PIDLOG;
X+    ap_lock_fname = DEFAULT_LOCKFILE;
X+    ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
X+    ap_extended_status = 0;
X+#ifdef AP_MPM_WANT_SET_MAX_MEM_FREE
X+    ap_max_mem_free = APR_ALLOCATOR_MAX_FREE_UNLIMITED;
X+#endif
X+
X+    apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
X+
X+    return OK;
X+}
X+
X+static int itk_post_perdir_config(request_rec *r)
X+{
X+    uid_t wanted_uid;
X+    gid_t wanted_gid;
X+    const char *wanted_username;
X+    int err = 0;
X+    
X+    itk_server_conf *sconf =
X+        (itk_server_conf *) ap_get_module_config(r->server->
module_config, &mpm_itk_module);
X+
X+    /* Enforce MaxClientsVhost. */
X+    if (sconf->max_clients_vhost > 0) {
X+        int i, num_other_servers = 0;
X+        for (i = 0; i < ap_daemons_limit; ++i) {
X+            worker_score *ws = &ap_scoreboard_image->servers[i][0];
X+            if (ws->status >= SERVER_BUSY_READ && strncmp(ws->vhost, r->
server->server_hostname, 31) == 0)
X+                ++num_other_servers;
X+        }
X+
X+        if (num_other_servers > sconf->max_clients_vhost) {
X+            ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, \
X+                "MaxClientsVhost reached for %s, refusing client.",
X+                r->server->server_hostname);
X+            return HTTP_SERVICE_UNAVAILABLE;
X+        }
X+    }
X+
X+    itk_per_dir_conf *dconf =
X+        (itk_per_dir_conf *) ap_get_module_config(r->per_dir_config, 
&mpm_itk_module);
X+
X+    strncpy(ap_scoreboard_image->servers[my_child_num][0].vhost, r->
server->server_hostname, 31);
X+    ap_scoreboard_image->servers[my_child_num][0].vhost[31] = 0;
X+
X+    if (dconf->nice_value != UNSET_NICE_VALUE &&
X+        setpriority(PRIO_PROCESS, 0, dconf->nice_value)) {
X+        _DBG("setpriority(): %s", strerror(errno));
X+        err = 1;
X+    }
X+
X+    wanted_uid = dconf->uid;
X+    wanted_gid = dconf->gid;
X+    wanted_username = dconf->username;
X+
X+    if (wanted_uid == -1 || wanted_gid == -1) {
X+        wanted_uid = unixd_config.user_id;
X+        wanted_gid = unixd_config.group_id;
X+        wanted_username = unixd_config.user_name;
X+    }
X+
X+    if (!err && wanted_uid != -1 && wanted_gid != -1 && (getuid() != 
wanted_uid || getgid() != wanted_gid)) {
X+        if (setgid(wanted_gid)) {
X+            _DBG("setgid(%d): %s", wanted_gid, strerror(errno));
X+            err = 1;
X+        } else if (initgroups(wanted_username, wanted_gid)) {
X+            _DBG("initgroups(%s, %d): %s", wanted_username, wanted_gid, 
strerror(errno));
X+            err = 1;
X+        } else if (setuid(wanted_uid)) {
X+            _DBG("setuid(%d): %s", wanted_uid, strerror(errno));
X+            err = 1;
X+        }
X+    }
X+
X+    /*
X+     * Most likely a case of switching uid/gid within a persistent
X+     * connection; the RFCs allow us to just close the connection
X+     * at anytime, so we excercise our right. :-)
X+     */
X+    if (err) {
X+        ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, \
X+            "Couldn't set uid/gid/priority, closing connection.");
X+        ap_lingering_close(r->connection);
X+        exit(0);
X+    }
X+    return OK;
X+}
X+
X+static void itk_hooks(apr_pool_t *p)
X+{
X+    /* The itk open_logs phase must run before the core's, or stderr
X+     * will be redirected to a file, and the messages won't print to the
X+     * console.
X+     */
X+    static const char *const aszSucc[] = {"core.c", NULL};
X+
X+#ifdef AUX3
X+    (void) set42sig();
X+#endif
X+
X+    ap_hook_open_logs(itk_open_logs, NULL, aszSucc, APR_HOOK_MIDDLE);
X+    /* we need to set the MPM state before other pre-config hooks use MPM 
query
X+     * to retrieve it, so register as REALLY_FIRST
X+     */
X+    ap_hook_pre_config(itk_pre_config, NULL, NULL, APR_HOOK_REALLY_FIRST);
X+
X+    /* set the uid as fast as possible, but not before merging per-dit 
config */
X+    ap_hook_header_parser(itk_post_perdir_config, NULL, NULL, 
APR_HOOK_REALLY_FIRST);
X+}
X+
X+static const char *set_daemons_to_start(cmd_parms *cmd, void *dummy, 
const char *arg)
X+{
X+    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
X+    if (err != NULL) {
X+        return err;
X+    }
X+
X+    ap_daemons_to_start = atoi(arg);
X+    return NULL;
X+}
X+
X+static const char *set_min_free_servers(cmd_parms *cmd, void *dummy, 
const char *arg)
X+{
X+    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
X+    if (err != NULL) {
X+        return err;
X+    }
X+
X+    ap_daemons_min_free = atoi(arg);
X+    if (ap_daemons_min_free <= 0) {
X+       ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
X+                    "WARNING: detected MinSpareServers set to 
non-positive.");
X+       ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
X+                    "Resetting to 1 to avoid almost certain Apache 
failure.");
X+       ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
X+                    "Please read the documentation.");
X+       ap_daemons_min_free = 1;
X+    }
X+
X+    return NULL;
X+}
X+
X+static const char *set_max_free_servers(cmd_parms *cmd, void *dummy, 
const char *arg)
X+{
X+    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
X+    if (err != NULL) {
X+        return err;
X+    }
X+
X+    ap_daemons_max_free = atoi(arg);
X+    return NULL;
X+}
X+
X+static const char *set_max_clients (cmd_parms *cmd, void *dummy, const 
char *arg)
X+{
X+    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
X+    if (err != NULL) {
X+        return err;
X+    }
X+
X+    ap_daemons_limit = atoi(arg);
X+    if (ap_daemons_limit > server_limit) {
X+       ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
X+                    "WARNING: MaxClients of %d exceeds ServerLimit value "
X+                    "of %d servers,", ap_daemons_limit, server_limit);
X+       ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
X+                    " lowering MaxClients to %d.  To increase, please "
X+                    "see the ServerLimit", server_limit);
X+       ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
X+                    " directive.");
X+       ap_daemons_limit = server_limit;
X+    }
X+    else if (ap_daemons_limit < 1) {
X+        ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
X+                     "WARNING: Require MaxClients > 0, setting to 1");
X+        ap_daemons_limit = 1;
X+    }
X+    return NULL;
X+}
X+
X+static const char *set_server_limit (cmd_parms *cmd, void *dummy, const 
char *arg)
X+{
X+    int tmp_server_limit;
X+
X+    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
X+    if (err != NULL) {
X+        return err;
X+    }
X+
X+    tmp_server_limit = atoi(arg);
X+    /* you cannot change ServerLimit across a restart; ignore
X+     * any such attempts
X+     */
X+    if (first_server_limit &&
X+        tmp_server_limit != server_limit) {
X+        /* how do we log a message?  the error log is a bit bucket at this
X+         * point; we'll just have to set a flag so that ap_mpm_run()
X+         * logs a warning later
X+         */
X+        changed_limit_at_restart = 1;
X+        return NULL;
X+    }
X+    server_limit = tmp_server_limit;
X+
X+    if (server_limit > MAX_SERVER_LIMIT) {
X+       ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
X+                    "WARNING: ServerLimit of %d exceeds compile time 
limit "
X+                    "of %d servers,", server_limit, MAX_SERVER_LIMIT);
X+       ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
X+                    " lowering ServerLimit to %d.", MAX_SERVER_LIMIT);
X+       server_limit = MAX_SERVER_LIMIT;
X+    }
X+    else if (server_limit < 1) {
X+        ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
X+                     "WARNING: Require ServerLimit > 0, setting to 1");
X+        server_limit = 1;
X+    }
X+    return NULL;
X+}
X+
X+static const char *assign_user_id (cmd_parms *cmd, void *ptr, const char 
*user_name, const char *group_name)
X+{
X+    itk_per_dir_conf *dconf = (itk_per_dir_conf *) ptr;
X+    dconf->username = apr_pstrdup(cmd->pool, user_name);
X+    dconf->uid = ap_uname2id(user_name);
X+    dconf->gid = ap_gname2id(group_name);
X+    return NULL;
X+}
X+
X+static const char *set_max_clients_vhost (cmd_parms *cmd, void *dummy, 
const char *arg)
X+{
X+    itk_server_conf *sconf =
X+        (itk_server_conf *) ap_get_module_config(cmd->server->
module_config, &mpm_itk_module);
X+    sconf->max_clients_vhost = atoi(arg);
X+    return NULL;
X+}
X+
X+static const char *set_nice_value (cmd_parms *cmd, void *ptr, const char 
*arg)
X+{
X+    itk_per_dir_conf *dconf = (itk_per_dir_conf *) ptr;
X+    int nice_value = atoi(arg);
X+
X+    if (nice_value < -20) {
X+        ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
X+                     "WARNING: NiceValue of %d is below -20, increasing 
NiceValue to -20.",
X+                     nice_value);
X+        nice_value = -20;
X+    }
X+    else if (nice_value > 19) {
X+        ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
X+                     "WARNING: NiceValue of %d is above 19, lowering 
NiceValue to 19.",
X+                     nice_value);
X+        nice_value = 19;
X+    }
X+    dconf->nice_value = nice_value;
X+    return NULL;
X+}
X+
X+static const command_rec itk_cmds[] = {
X+UNIX_DAEMON_COMMANDS,
X+LISTEN_COMMANDS,
X+AP_INIT_TAKE1("StartServers", set_daemons_to_start, NULL, RSRC_CONF,
X+              "Number of child processes launched at server startup"),
X+AP_INIT_TAKE1("MinSpareServers", set_min_free_servers, NULL, RSRC_CONF,
X+              "Minimum number of idle children, to handle request 
spikes"),
X+AP_INIT_TAKE1("MaxSpareServers", set_max_free_servers, NULL, RSRC_CONF,
X+              "Maximum number of idle children"),
X+AP_INIT_TAKE1("MaxClients", set_max_clients, NULL, RSRC_CONF,
X+              "Maximum number of children alive at the same time"),
X+AP_INIT_TAKE1("ServerLimit", set_server_limit, NULL, RSRC_CONF,
X+              "Maximum value of MaxClients for this run of Apache"),
X+AP_INIT_TAKE2("AssignUserID", assign_user_id, NULL, RSRC_CONF|ACCESS_CONF,
X+              "Tie a virtual host to a specific child process."),
X+AP_INIT_TAKE1("MaxClientsVHost", set_max_clients_vhost, NULL, RSRC_CONF,
X+              "Maximum number of children alive at the same time for this 
virtual host."),
X+AP_INIT_TAKE1("NiceValue", set_nice_value, NULL, RSRC_CONF|ACCESS_CONF,
X+              "Set nice value for the given vhost, from -20 (highest 
priority) to 19 (lowest priority)."),
X+AP_GRACEFUL_SHUTDOWN_TIMEOUT_COMMAND,
X+{ NULL }
X+};
X+
X+/* == allocate a private per-dir config structure == */
X+static void *itk_create_dir_config(apr_pool_t *p, char *dummy)
X+{
X+    itk_per_dir_conf *c = (itk_per_dir_conf *)
X+        apr_pcalloc(p, sizeof(itk_per_dir_conf));
X+    c->uid = c->gid = -1;
X+    c->nice_value = UNSET_NICE_VALUE;
X+    return c;
X+}
X+
X+/* == merge the parent per-dir config structure into ours == */
X+static void *itk_merge_dir_config(apr_pool_t *p, void *parent_ptr, void 
*child_ptr)
X+{
X+    itk_per_dir_conf *c = (itk_per_dir_conf *)
X+        itk_create_dir_config(p, NULL);
X+    itk_per_dir_conf *parent = (itk_per_dir_conf *) parent_ptr;
X+    itk_per_dir_conf *child = (itk_per_dir_conf *) child_ptr;
X+
X+    if (child->username != NULL) {
X+      c->username = child->username;
X+      c->uid = child->uid;
X+      c->gid = child->gid;
X+    } else {
X+      c->username = parent->username;
X+      c->uid = parent->uid;
X+      c->gid = parent->gid;
X+    }
X+    if (child->nice_value != UNSET_NICE_VALUE) {
X+      c->nice_value = child->nice_value;
X+    } else {
X+      c->nice_value = parent->nice_value;
X+    }
X+    return c;
X+}
X+
X+/* == allocate a private server config structure == */
X+static void *itk_create_server_config(apr_pool_t *p, server_rec *s)
X+{
X+    itk_server_conf *c = (itk_server_conf *)
X+        apr_pcalloc(p, sizeof(itk_server_conf));
X+    c->max_clients_vhost = -1;
X+    return c;
X+}
X+
X+module AP_MODULE_DECLARE_DATA mpm_itk_module = {
X+    MPM20_MODULE_STUFF,
X+    ap_mpm_rewrite_args,        /* hook to run before apache parses args 
*/
X+    itk_create_dir_config,      /* create per-directory config structure 
*/
X+    itk_merge_dir_config,       /* merge per-directory config structures 
*/
X+    itk_create_server_config,   /* create per-server config structure */
X+    NULL,                       /* merge per-server config structures */
X+    itk_cmds,                   /* command apr_table_t */
X+    itk_hooks,                  /* register hooks */
X+};
Xunchanged:
X--- server/mpm/experimental/itk/mpm.h
X+++ server/mpm/experimental/itk/mpm.h
X@@ -0,0 +1,68 @@
X+/* Licensed to the Apache Software Foundation (ASF) under one or more
X+ * contributor license agreements.  See the NOTICE file distributed with
X+ * this work for additional information regarding copyright ownership.
X+ * The ASF licenses this file to You under the Apache License, Version 2.0
X+ * (the "License"); you may not use this file except in compliance with
X+ * the License.  You may obtain a copy of the License at
X+ *
X+ *     http://www.apache.org/licenses/LICENSE-2.0
X+ *
X+ * Unless required by applicable law or agreed to in writing, software
X+ * distributed under the License is distributed on an "AS IS" BASIS,
X+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
implied.
X+ * See the License for the specific language governing permissions and
X+ * limitations under the License.
X+ *
X+ * Portions copyright 2005-2009 Steinar H. Gunderson 
<sgunderson@bigfoot.com>.
X+ * Licensed under the same terms as the rest of Apache.
X+ *
X+ * Portions copyright 2008 Knut Auvor Grythe <knut@auvor.no>.
X+ * Licensed under the same terms as the rest of Apache.
X+ */
X+
X+/**
X+ * @file itk/mpm.h
X+ * @brief ITK MPM (setuid per-vhost, no threads)
X+ *
X+ * @defgroup APACHE_MPM_ITK Apache ITK
X+ * @ingroup  APACHE_MPM APACHE_OS_UNIX
X+ * @{
X+ */
X+
X+#include "httpd.h"
X+#include "mpm_default.h"
X+#include "scoreboard.h"
X+#include "unixd.h"
X+
X+#ifndef APACHE_MPM_ITK_H
X+#define APACHE_MPM_ITK_H
X+
X+#define ITK_MPM
X+
X+#define MPM_NAME "ITK"
X+
X+#define AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
X+#define AP_MPM_WANT_WAIT_OR_TIMEOUT
X+#define AP_MPM_WANT_PROCESS_CHILD_STATUS
X+#define AP_MPM_WANT_SET_PIDFILE
X+#define AP_MPM_WANT_SET_SCOREBOARD
X+#define AP_MPM_WANT_SET_LOCKFILE
X+#define AP_MPM_WANT_SET_MAX_REQUESTS
X+#define AP_MPM_WANT_SET_COREDUMPDIR
X+#define AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
X+#define AP_MPM_WANT_SIGNAL_SERVER
X+#define AP_MPM_WANT_SET_MAX_MEM_FREE
X+#define AP_MPM_WANT_FATAL_SIGNAL_HANDLER
X+#define AP_MPM_WANT_SET_GRACEFUL_SHUTDOWN
X+#define AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
X+
X+#define AP_MPM_USES_POD 1
X+#define MPM_CHILD_PID(i) (ap_scoreboard_image->parent[i].pid)
X+#define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0)
X+#define MPM_ACCEPT_FUNC unixd_accept
X+
X+extern int ap_threads_per_child;
X+extern int ap_max_daemons_limit;
X+extern server_rec *ap_server_conf;
X+#endif /* APACHE_MPM_ITK_H */
X+/** @} */
Xunchanged:
X--- server/mpm/experimental/itk/mpm_default.h
X+++ server/mpm/experimental/itk/mpm_default.h
X@@ -0,0 +1,80 @@
X+/* Licensed to the Apache Software Foundation (ASF) under one or more
X+ * contributor license agreements.  See the NOTICE file distributed with
X+ * this work for additional information regarding copyright ownership.
X+ * The ASF licenses this file to You under the Apache License, Version 2.0
X+ * (the "License"); you may not use this file except in compliance with
X+ * the License.  You may obtain a copy of the License at
X+ *
X+ *     http://www.apache.org/licenses/LICENSE-2.0
X+ *
X+ * Unless required by applicable law or agreed to in writing, software
X+ * distributed under the License is distributed on an "AS IS" BASIS,
X+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
implied.
X+ * See the License for the specific language governing permissions and
X+ * limitations under the License.
X+ * 
X+ * Portions copyright 2005-2009 Steinar H. Gunderson 
<sgunderson@bigfoot.com>.
X+ * Licensed under the same terms as the rest of Apache.
X+ * 
X+ * Portions copyright 2008 Knut Auvor Grythe <knut@auvor.no>.
X+ * Licensed under the same terms as the rest of Apache.
X+ */
X+
X+/**
X+ * @file  itk/mpm_default.h
X+ * @brief ITK MPM defaults
X+ *
X+ * @addtogroup APACHE_MPM_ITK
X+ * @{
X+ */
X+
X+#ifndef APACHE_MPM_DEFAULT_H
X+#define APACHE_MPM_DEFAULT_H
X+
X+/* Number of servers to spawn off by default --- also, if fewer than
X+ * this free when the caretaker checks, it will spawn more.
X+ */
X+#ifndef DEFAULT_START_DAEMON
X+#define DEFAULT_START_DAEMON 5
X+#endif
X+
X+/* Maximum number of *free* server processes --- more than this, and
X+ * they will die off.
X+ */
X+
X+#ifndef DEFAULT_MAX_FREE_DAEMON
X+#define DEFAULT_MAX_FREE_DAEMON 10
X+#endif
X+
X+/* Minimum --- fewer than this, and more will be created */
X+
X+#ifndef DEFAULT_MIN_FREE_DAEMON
X+#define DEFAULT_MIN_FREE_DAEMON 5
X+#endif
X+
X+/* File used for accept locking, when we use a file */
X+#ifndef DEFAULT_LOCKFILE
X+#define DEFAULT_LOCKFILE DEFAULT_REL_RUNTIMEDIR "/accept.lock"
X+#endif
X+
X+/* Where the main/parent process's pid is logged */
X+#ifndef DEFAULT_PIDLOG
X+#define DEFAULT_PIDLOG DEFAULT_REL_RUNTIMEDIR "/httpd.pid"
X+#endif
X+
X+/*
X+ * Interval, in microseconds, between scoreboard maintenance.
X+ */
X+#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
X+#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
X+#endif
X+
X+/* Number of requests to try to handle in a single process.  If <= 0,
X+ * the children don't die off.
X+ */
X+#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
X+#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000
X+#endif
X+
X+#endif /* AP_MPM_DEFAULT_H */
X+/** @} */
Xunchanged:
X--- server/mpm/config.m4
X+++ server/mpm/config.m4
X@@ -1,7 +1,7 @@
X AC_MSG_CHECKING(which MPM to use)
X AC_ARG_WITH(mpm,
X APACHE_HELP_STRING(--with-mpm=MPM,Choose the process model for Apache to 
use.
X-                          MPM={beos|event|worker|prefork|mpmt_os2|winnt}),
[
X+                          MPM={beos|event|worker|prefork|mpmt_os2|winnt|it
k}),[
X   APACHE_MPM=$withval
X ],[
X   if test "x$APACHE_MPM" = "x"; then
X@@ -23,7 +23,7 @@
X 
X ap_mpm_is_experimental ()
X {
X-    if test "$apache_cv_mpm" = "event" ; then
X+    if test "$apache_cv_mpm" = "event" -o "$apache_cv_mpm" = "itk" ; then
X         return 0
X     else
X         return 1
X@@ -66,6 +66,11 @@
X else
X   MPM_SUBDIR_NAME=$MPM_NAME
X fi
X+
X+if test "$apache_cv_mpm" = "itk" ; then
X+  AC_CHECK_LIB(cap, cap_init)
X+fi
X+
X MPM_DIR=server/mpm/$MPM_SUBDIR_NAME
X MPM_LIB=$MPM_DIR/lib${MPM_NAME}.la
X 
Xunchanged:
X--- include/http_request.h
X+++ include/http_request.h
X@@ -12,6 +12,12 @@
X  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
implied.
X  * See the License for the specific language governing permissions and
X  * limitations under the License.
X+ * 
X+ * Portions copyright 2005-2009 Steinar H. Gunderson 
<sgunderson@bigfoot.com>.
X+ * Licensed under the same terms as the rest of Apache.
X+ * 
X+ * Portions copyright 2008 Knut Auvor Grythe <knut@auvor.no>.
X+ * Licensed under the same terms as the rest of Apache.
X  */
X 
X /**
X@@ -350,6 +356,15 @@
X  */
X AP_DECLARE_HOOK(void,insert_filter,(request_rec *r))
X 
X+/**
X+ * This hook allows modules to affect the request immediately after the
X+ * per-directory configuration for the request has been generated. This 
allows
X+ * modules to make decisions based upon the current directory 
configuration
X+ * @param r The current request
X+ * @return OK or DECLINED
X+ */
X+AP_DECLARE_HOOK(int,post_perdir_config,(request_rec *r))
X+ 
X AP_DECLARE(int) ap_location_walk(request_rec *r);
X AP_DECLARE(int) ap_directory_walk(request_rec *r);
X AP_DECLARE(int) ap_file_walk(request_rec *r);
Xunchanged:
X--- server/request.c
X+++ server/request.c
X@@ -12,6 +12,12 @@
X  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
implied.
X  * See the License for the specific language governing permissions and
X  * limitations under the License.
X+ * 
X+ * Portions copyright 2005-2009 Steinar H. Gunderson 
<sgunderson@bigfoot.com>.
X+ * Licensed under the same terms as the rest of Apache.
X+ * 
X+ * Portions copyright 2008 Knut Auvor Grythe <knut@auvor.no>.
X+ * Licensed under the same terms as the rest of Apache.
X  */
X 
X /*
X@@ -61,6 +67,7 @@
X     APR_HOOK_LINK(auth_checker)
X     APR_HOOK_LINK(insert_filter)
X     APR_HOOK_LINK(create_request)
X+    APR_HOOK_LINK(post_perdir_config)
X )
X 
X AP_IMPLEMENT_HOOK_RUN_FIRST(int,translate_name,
X@@ -80,6 +87,8 @@
X AP_IMPLEMENT_HOOK_VOID(insert_filter, (request_rec *r), (r))
X AP_IMPLEMENT_HOOK_RUN_ALL(int, create_request,
X                           (request_rec *r), (r), OK, DECLINED)
X+AP_IMPLEMENT_HOOK_RUN_ALL(int,post_perdir_config,
X+                          (request_rec *r), (r), OK, DECLINED)
X 
X 
X static int decl_die(int status, char *phase, request_rec *r)
X@@ -158,6 +167,13 @@
X         return access_status;
X     }
X 
X+    /* First chance to handle the request after per-directory 
configuration is
X+     * generated 
X+     */
X+    if ((access_status = ap_run_post_perdir_config(r))) {
X+        return access_status;
X+    }
X+
X     /* Only on the main request! */
X     if (r->main == NULL) {
X         if ((access_status = ap_run_header_parser(r))) {
Xonly in patch2:
Xunchanged:
X--- server/config.c
X+++ server/config.c
X@@ -1840,6 +1840,34 @@ AP_CORE_DECLARE(int) ap_parse_htaccess(a
X         else {
X             if (!APR_STATUS_IS_ENOENT(status)
X                 && !APR_STATUS_IS_ENOTDIR(status)) {
X+#ifdef ITK_MPM
X+                /*
X+                 * If we are in a persistent connection, we might end up 
in a state
X+                 * where we can no longer read .htaccess files because we 
have already
X+                 * setuid(). This can either be because the previous 
request was for
X+                 * another vhost (basically the same problem as when 
setuid() fails in
X+                 * itk.c), or it can be because a .htaccess file is 
readable only by
X+                 * root.
X+                 *
X+                 * In any case, we don't want to give out a 403, since 
the request has
X+                 * a very real chance of succeeding on a fresh connection 
(where
X+                 * presumably uid=0). Thus, we give up serving the 
request on this
X+                 * TCP connection, and do a hard close of the socket. As 
long as we're
X+                 * in a persistent connection (and there _should_ not be 
a way this
X+                 * would happen on the first request in a connection, 
save for subrequests,
X+                 * which we special-case), this is allowed, as it is what 
happens on
X+                 * a timeout. The browser will simply open a new 
connection and try
X+                 * again (there's of course a performance hit, though, 
both due to
X+                 * the new connection setup and the fork() of a new 
server child).
X+                 */
X+                if (r->main == NULL && getuid() != 0) {
X+                    ap_log_rerror(APLOG_MARK, APLOG_WARNING, status, r,
X+                                  "Couldn't read %s, closing connection.",
X+                                  filename);
X+                    ap_lingering_close(r->connection);
X+                    exit(0);
X+                }
X+#endif          
X                 ap_log_rerror(APLOG_MARK, APLOG_CRIT, status, r,
X                               "%s pcfg_openfile: unable to check htaccess 
file, "
X                               "ensure it is readable",
4f01ae1427b0d4d015b36d3c2a4a63f2
echo x - apache24/files/extra-patch-suexec_userdir
sed 's/^X//' >apache24/files/extra-patch-suexec_userdir << 
'195e8ed1c50edbdcc56db48cef0c7e2f'
X--- ./modules/generators/mod_suexec.c.orig	2011-12-04 19:08:01.000000000 
-0500
X+++ ./modules/generators/mod_suexec.c	2012-09-13 20:50:50.201519988 -0400
X@@ -56,10 +56,11 @@
X }
X 
X static const char *set_suexec_ugid(cmd_parms *cmd, void *mconfig,
X-                                   const char *uid, const char *gid)
X+                                   const char *uid, const char *gid,
X+                                   int userdir)
X {
X     suexec_config_t *cfg = (suexec_config_t *) mconfig;
X-    const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE);
X+    const char *err = ap_check_cmd_context(cmd, NOT_IN_LOCATION|NOT_IN_FIL
ES);
X 
X     if (err != NULL) {
X         return err;
X@@ -73,12 +74,24 @@
X 
X     cfg->ugid.uid = ap_uname2id(uid);
X     cfg->ugid.gid = ap_gname2id(gid);
X-    cfg->ugid.userdir = 0;
X+    cfg->ugid.userdir = userdir;
X     cfg->active = 1;
X 
X     return NULL;
X }
X 
X+static const char *set_suexec_ugid_nouserdir(cmd_parms *cmd, void 
*mconfig,
X+                                             const char *uid, const char 
*gid)
X+{
X+    return set_suexec_ugid(cmd, mconfig, uid, gid, 0);
X+}
X+
X+static const char *set_suexec_ugid_userdir(cmd_parms *cmd, void *mconfig,
X+                                           const char *uid, const char 
*gid)
X+{
X+    return set_suexec_ugid(cmd, mconfig, uid, gid, 1);
X+}
X+
X static ap_unix_identity_t *get_suexec_id_doer(const request_rec *r)
X {
X     suexec_config_t *cfg =
X@@ -116,7 +129,9 @@
X {
X     /* XXX - Another important reason not to allow this in .htaccess is 
that
X      * the ap_[ug]name2id() is not thread-safe */
X-    AP_INIT_TAKE2("SuexecUserGroup", set_suexec_ugid, NULL, RSRC_CONF,
X+    AP_INIT_TAKE2("SuexecUserGroup", set_suexec_ugid_nouserdir, NULL, 
RSRC_CONF|ACCESS_CONF,
X+      "User and group for spawned processes"),
X+    AP_INIT_TAKE2("SuexecUserdir", set_suexec_ugid_userdir, NULL, 
RSRC_CONF|ACCESS_CONF,
X       "User and group for spawned processes"),
X     { NULL }
X };
195e8ed1c50edbdcc56db48cef0c7e2f
echo x - apache24/files/patch-support__apachectl.in
sed 's/^X//' >apache24/files/patch-support__apachectl.in << 
'fc138b5aefec2ee8272db328f39e7342'
X--- ./support/apachectl.in.orig	2006-07-11 23:38:44.000000000 -0400
X+++ ./support/apachectl.in	2010-05-06 19:37:54.265730461 -0400
X@@ -64,7 +64,7 @@
X ULIMIT_MAX_FILES="@APACHECTL_ULIMIT@"
X # --------------------                              --------------------
X # ||||||||||||||||||||   END CONFIGURATION SECTION  ||||||||||||||||||||
X-
X+eval `limits -e -C daemon` >/dev/null 2>&1
X # Set the maximum number of file descriptors allowed per child process.
X if [ "x$ULIMIT_MAX_FILES" != "x" ] ; then
X     $ULIMIT_MAX_FILES
fc138b5aefec2ee8272db328f39e7342
echo x - apache24/files/patch-docs__conf__extra__httpd-userdir.conf.in
sed 's/^X//' >apache24/files/patch-docs__conf__extra__httpd-userdir.conf.in 
<< '9983f62c521160084ce74b4bca22f1d8'
X--- ./docs/conf/extra/httpd-userdir.conf.in.orig	2012-09-08 
06:36:12.008517664 -0400
X+++ ./docs/conf/extra/httpd-userdir.conf.in	2012-09-08 06:36:27.226966330 
-0400
X@@ -8,7 +8,7 @@
X # the default access control for these directories, as in the example 
below.
X #
X UserDir public_html
X-
X+UserDir disabled %%FTPUSERS%%
X #
X # Control access to UserDir directories.  The following is an example
X # for a site where these directories are restricted to read-only.
9983f62c521160084ce74b4bca22f1d8
echo x - apache24/files/patch-support__Makefile.in
sed 's/^X//' >apache24/files/patch-support__Makefile.in << 
'0447b2d1cf5bf95fca3004dd5694b4dc'
X--- ./support/Makefile.in.orig	2011-12-20 09:57:46.000000000 -0500
X+++ ./support/Makefile.in	2012-09-08 07:22:37.312570108 -0400
X@@ -17,16 +17,19 @@
X 	@test -d $(DESTDIR)$(sbindir) || $(MKINSTALLDIRS) $(DESTDIR)$(sbindir)
X 	@test -d $(DESTDIR)$(libexecdir) || $(MKINSTALLDIRS) 
$(DESTDIR)$(libexecdir)
X 	@cp -p $(top_builddir)/server/httpd.exp $(DESTDIR)$(libexecdir)
X-	@for i in apxs dbmmanage; do \
X+	@chown root:wheel $(DESTDIR)$(libexecdir)/httpd.exp
X+	@for i in apxs dbmmanage split-logfile; do \
X 	    if test -f "$(builddir)/$$i"; then \
X 	        cp -p $$i $(DESTDIR)$(bindir); \
X 	        chmod 755 $(DESTDIR)$(bindir)/$$i; \
X+	        chown root:wheel $(DESTDIR)$(bindir)/$$i; \
X 	    fi ; \
X 	done
X 	@for i in apachectl; do \
X 	    if test -f "$(builddir)/$$i"; then \
X 	        cp -p $$i $(DESTDIR)$(sbindir); \
X 	        chmod 755 $(DESTDIR)$(sbindir)/$$i; \
X+	        chown root:wheel $(DESTDIR)$(sbindir)/$$i; \
X 	    fi ; \
X 	done
X 	@if test -f "$(builddir)/envvars-std"; then \
0447b2d1cf5bf95fca3004dd5694b4dc
echo x - apache24/files/patch-Makefile.in
sed 's/^X//' >apache24/files/patch-Makefile.in << '66de94c5413c708481d5412f9
a454c07'
X--- ./Makefile.in.orig	2008-11-25 15:24:49.000000000 -0500
X+++ ./Makefile.in	2010-05-06 19:37:54.211730130 -0400
X@@ -31,9 +31,11 @@
X install-conf:
X 	@echo Installing configuration files
X 	@$(MKINSTALLDIRS) $(DESTDIR)$(sysconfdir) $(DESTDIR)$(sysconfdir)/extra
X-	@$(MKINSTALLDIRS) $(DESTDIR)$(sysconfdir)/original/extra
X+	@$(MKINSTALLDIRS) $(DESTDIR)$(EXAMPLESDIR) $(DESTDIR)$(EXAMPLESDIR)/extra
X+
X 	@cd $(top_srcdir)/docs/conf; \
X 	for i in mime.types magic; do \
X+	    $(INSTALL_DATA) $$i $(DESTDIR)$(EXAMPLESDIR); \
X 	    if test ! -f $(DESTDIR)$(sysconfdir)/$$i; then \
X 	        $(INSTALL_DATA) $$i $(DESTDIR)$(sysconfdir); \
X 	    fi; \
X@@ -69,14 +71,14 @@
X 	    				-e 's#@@SSLPort@@#$(SSLPORT)#g' \
X 	    				< $$i; \
X 	    		fi \
X-	    	) > $(DESTDIR)$(sysconfdir)/original/$$i; \
X-	    	chmod 0644 $(DESTDIR)$(sysconfdir)/original/$$i; \
X+	    	) > $(DESTDIR)$(EXAMPLESDIR)/$$i; \
X+	    	chmod 0644 $(DESTDIR)$(EXAMPLESDIR)/$$i; \
X 	    	file=$$i; \
X 	    	if [ "$$i" = "httpd.conf" ]; then \
X 	    		file=`echo $$i|sed s/.*.conf/$(PROGRAM_NAME).conf/`; \
X 	    	fi; \
X 	    	if test ! -f $(DESTDIR)$(sysconfdir)/$$file; then \
X-	    		$(INSTALL_DATA) $(DESTDIR)$(sysconfdir)/original/$$i 
$(DESTDIR)$(sysconfdir)/$$file; \
X+	    		$(INSTALL_DATA) $(DESTDIR)$(EXAMPLESDIR)/$$i 
$(DESTDIR)$(sysconfdir)/$$file; \
X 	    	fi; \
X 	    	fi; \
X 	    done ; \
X@@ -120,48 +122,29 @@
X 	doxygen $(top_srcdir)/docs/doxygen.conf
X 
X install-htdocs:
X-	-@if [ -d $(DESTDIR)$(htdocsdir) ]; then \
X-           echo "[PRESERVING EXISTING HTDOCS SUBDIR: 
$(DESTDIR)$(htdocsdir)]"; \
X-        else \
X-	    echo Installing HTML documents ; \
X+	    @echo Installing HTML documents ; \
X 	    $(MKINSTALLDIRS) $(DESTDIR)$(htdocsdir) ; \
X-	    if test -d $(htdocs-srcdir) && test "x$(RSYNC)" != "x" && test -x 
$(RSYNC) ; then \
X-		$(RSYNC) --exclude .svn -rlpt --numeric-ids $(htdocs-srcdir)/ 
$(DESTDIR)$(htdocsdir)/; \
X-	    else \
X-		test -d $(htdocs-srcdir) && (cd $(htdocs-srcdir) && cp -rp * 
$(DESTDIR)$(htdocsdir)) ; \
X-		cd $(DESTDIR)$(htdocsdir) && find . -name ".svn" -type d -print | xargs 
rm -rf 2>/dev/null || true; \
X-	    fi; \
X-	fi
X+	    $(MKINSTALLDIRS) $(DESTDIR)$(EXAMPLESDIR) ; \
X+		test -d $(htdocs-srcdir) && (cd $(htdocs-srcdir) && cp -rp index.html 
$(DESTDIR)$(EXAMPLESDIR)) && \
X+		( [ ! -f $(DESTDIR)$(htdocsdir)/index.html ] && cp -p 
$(DESTDIR)$(EXAMPLESDIR)/index.html $(DESTDIR)$(htdocsdir)/index.html) || 
true
X 
X install-error:
X-	-@if [ -d $(DESTDIR)$(errordir) ]; then \
X-           echo "[PRESERVING EXISTING ERROR SUBDIR: 
$(DESTDIR)$(errordir)]"; \
X-        else \
X-	    echo Installing error documents ; \
X+	    @echo Installing error documents ; \
X 	    $(MKINSTALLDIRS) $(DESTDIR)$(errordir) ; \
X 	    cd $(top_srcdir)/docs/error && cp -rp * $(DESTDIR)$(errordir) ; \
X-	    test "x$(errordir)" != "x" && cd $(DESTDIR)$(errordir) && find . 
-name ".svn" -type d -print | xargs rm -rf 2>/dev/null || true; \
X-	fi
X+	    test "x$(errordir)" != "x" && cd $(DESTDIR)$(errordir) && find . 
-name ".svn" -type d -print | xargs rm -rf 2>/dev/null || true;
X 
X install-icons:
X-	-@if [ -d $(DESTDIR)$(iconsdir) ]; then \
X-           echo "[PRESERVING EXISTING ICONS SUBDIR: 
$(DESTDIR)$(iconsdir)]"; \
X-        else \
X-	    echo Installing icons ; \
X+	    @echo Installing icons ; \
X 	    $(MKINSTALLDIRS) $(DESTDIR)$(iconsdir) ; \
X 	    cd $(top_srcdir)/docs/icons && cp -rp * $(DESTDIR)$(iconsdir) ; \
X-	    test "x$(iconsdir)" != "x" && cd $(DESTDIR)$(iconsdir) && find . 
-name ".svn" -type d -print | xargs rm -rf 2>/dev/null || true; \
X-	fi
X+	    test "x$(iconsdir)" != "x" && cd $(DESTDIR)$(iconsdir) && find . 
-name ".svn" -type d -print | xargs rm -rf 2>/dev/null || true;
X 
X install-cgi:
X-	-@if [ -d $(DESTDIR)$(cgidir) ];then \
X-	    echo "[PRESERVING EXISTING CGI SUBDIR: $(DESTDIR)$(cgidir)]"; \
X-	else \
X-	   echo Installing CGIs ; \
X+	   @echo Installing CGIs ; \
X 	   $(MKINSTALLDIRS) $(DESTDIR)$(cgidir) ; \
X 	   cd $(top_srcdir)/docs/cgi-examples && cp -rp * $(DESTDIR)$(cgidir) ; \
X-	   test "x$(cgidir)" != "x" && cd $(DESTDIR)$(cgidir) && find . -name 
".svn" -type d -print | xargs rm -rf 2>/dev/null || true; \
X-	fi
X+	   test "x$(cgidir)" != "x" && cd $(DESTDIR)$(cgidir) && find . -name 
".svn" -type d -print | xargs rm -rf 2>/dev/null || true;
X 
X install-other:
X 	@test -d $(DESTDIR)$(logfiledir) || $(MKINSTALLDIRS) 
$(DESTDIR)$(logfiledir)
X@@ -208,14 +191,20 @@
X 	@test -d $(DESTDIR)$(mandir)/man1 || $(MKINSTALLDIRS) 
$(DESTDIR)$(mandir)/man1
X 	@test -d $(DESTDIR)$(mandir)/man8 || $(MKINSTALLDIRS) 
$(DESTDIR)$(mandir)/man8
X 	@test -d $(DESTDIR)$(manualdir)   || $(MKINSTALLDIRS) 
$(DESTDIR)$(manualdir)
X-	@cp -p $(top_srcdir)/docs/man/*.1 $(DESTDIR)$(mandir)/man1
X-	@cp -p $(top_srcdir)/docs/man/*.8 $(DESTDIR)$(mandir)/man8
X+	for i in ab apxs dbmmanage htdbm htdigest htpasswd httxt2dbm logresolve; 
do \
X+	  ${INSTALL_MAN} $(top_srcdir)/docs/man/$$i.1 $(DESTDIR)$(mandir)/man1; \
X+	done
X+	for i in apachectl htcacheclean httpd rotatelogs suexec; do \
X+	  ${INSTALL_MAN} $(top_srcdir)/docs/man/$$i.8 $(DESTDIR)$(mandir)/man8; \
X+	done
X+.if !defined(NOPORTDOCS)
X 	@if test "x$(RSYNC)" != "x" && test -x $(RSYNC) ; then \
X 	  $(RSYNC) --exclude .svn -rlpt --numeric-ids $(top_srcdir)/docs/manual/ 
$(DESTDIR)$(manualdir)/; \
X 	else \
X 	  cd $(top_srcdir)/docs/manual && cp -rp * $(DESTDIR)$(manualdir); \
X 	  cd $(DESTDIR)$(manualdir) && find . -name ".svn" -type d -print | 
xargs rm -rf 2>/dev/null || true; \
X 	fi
X+.endif
X 
X install-suexec:
X 	@if test -f $(builddir)/support/suexec; then \
66de94c5413c708481d5412f9a454c07
echo x - apache24/files/patch-configure.in
sed 's/^X//' >apache24/files/patch-configure.in << 
'd3d389e0bddf0e07e3d3c4a0ffe28599'
X--- ./configure.in.orig	2012-07-23 11:20:48.000000000 -0400
X+++ ./configure.in	2012-09-07 19:23:41.120547885 -0400
X@@ -109,9 +109,14 @@
X   AC_MSG_ERROR([APR not found.  Please read the documentation.])
X fi
X 
X+if test "x${USE_BUNDLED_APR}" != "x" ; then
X+		apr_found=reconfig
X+		apr_config=srclib/apr/apr-1-config
X+fi
X+
X if test "$apr_found" = "reconfig"; then
X   APR_SUBDIR_CONFIG(srclib/apr,
X-                    [$apache_apr_flags --prefix=$prefix 
--exec-prefix=$exec_prefix --libdir=$libdir --includedir=$includedir 
--bindir=$bindir --datadir=$datadir --with-installbuilddir=$installbuilddir]
,
X+                    [$apache_apr_flags --prefix=$prefix],
X                     [--enable-layout=*|\'--enable-layout=*])
X   dnl We must be the first to build and the last to be cleaned
X   AP_BUILD_SRCLIB_DIRS="apr $AP_BUILD_SRCLIB_DIRS"
X@@ -165,6 +170,11 @@
X   AC_MSG_ERROR([APR-util not found.  Please read the documentation.])
X fi
X 
X+if test "x${USE_BUNDLED_APR}" != "x" ; then
X+		apu_found=reconfig
X+		apu_config=srclib/apr-util/apu-1-config
X+fi
X+
X # Catch some misconfigurations:
X case ${apr_found}.${apu_found} in
X reconfig.yes)
X@@ -177,7 +187,7 @@
X 
X if test "$apu_found" = "reconfig"; then
X   APR_SUBDIR_CONFIG(srclib/apr-util,
X-                    [--with-apr=../apr --prefix=$prefix 
--exec-prefix=$exec_prefix --libdir=$libdir --includedir=$includedir 
--bindir=$bindir],
X+                    [--with-apr=../apr --prefix=$prefix],
X                     [--enable-layout=*|\'--enable-layout=*])
X   dnl We must be the last to build and the first to be cleaned
X   AP_BUILD_SRCLIB_DIRS="$AP_BUILD_SRCLIB_DIRS apr-util"
X@@ -805,8 +815,14 @@
X 	[Root directory of the Apache install area])
X AC_DEFINE_UNQUOTED(SERVER_CONFIG_FILE, "${rel_sysconfdir}/${progname}.conf
",
X 	[Location of the config file, relative to the Apache root directory])
X+AC_DEFINE_UNQUOTED(DEFAULT_ERRORLOG, "${rel_logfiledir}/httpd-error.log",
X+	[Location of error log file])
X+AC_DEFINE_UNQUOTED(DEFAULT_SCOREBOARD, "${rel_runtimedir}/apache_runtime_s
tatus",
X+	[Location of ScoreBoard file])
X AC_DEFINE_UNQUOTED(AP_TYPES_CONFIG_FILE, "${rel_sysconfdir}/mime.types",
X 	[Location of the MIME types config file, relative to the Apache root 
directory])
X+AC_DEFINE_UNQUOTED(DOCUMENT_LOCATION, "${rel_htdocsdir}",
X+	[Location of document root])
X 
X perlbin=`$ac_aux_dir/PrintPath perl`
X if test "x$perlbin" = "x"; then
d3d389e0bddf0e07e3d3c4a0ffe28599
echo x - apache24/files/patch-config.layout
sed 's/^X//' >apache24/files/patch-config.layout << 
'2a4c8da0e7f0168ab75f3d9951c85bc5'
X--- ./config.layout.orig	2004-11-21 13:50:36.000000000 -0500
X+++ ./config.layout	2010-05-06 19:37:54.214731918 -0400
X@@ -281,17 +281,17 @@
X   bindir:        ${exec_prefix}/bin
X   sbindir:       ${exec_prefix}/sbin
X   libdir:        ${exec_prefix}/lib
X-  libexecdir:    ${exec_prefix}/libexec/apache2
X+  libexecdir:    ${exec_prefix}/libexec/apache24
X   mandir:        ${prefix}/man
X-  sysconfdir:    ${prefix}/etc/apache2
X-  datadir:       ${prefix}/www
X-  installbuilddir: ${prefix}/share/apache2/build
X+  sysconfdir:    ${prefix}/etc/apache24
X+  datadir:       ${prefix}/www/apache24
X+  installbuilddir: ${prefix}/share/apache24/build
X   errordir:      ${datadir}/error
X   iconsdir:      ${datadir}/icons
X   htdocsdir:     ${datadir}/data
X-  manualdir:     ${prefix}/share/doc/apache2
X+  manualdir:     ${prefix}/share/doc/apache24
X   cgidir:        ${datadir}/cgi-bin
X-  includedir:    ${prefix}/include/apache2
X+  includedir:    ${prefix}/include/apache24
X   localstatedir: /var
X   runtimedir:    ${localstatedir}/run
X   logfiledir:    ${localstatedir}/log
2a4c8da0e7f0168ab75f3d9951c85bc5
echo x - apache24/files/patch-server__core.c
sed 's/^X//' >apache24/files/patch-server__core.c << 
'e80fe62f1ce78bdf77055602369eb053'
X--- ./server/core.c.orig	2012-08-14 19:59:24.000000000 -0400
X+++ ./server/core.c	2012-09-08 06:56:52.921143332 -0400
X@@ -3132,7 +3132,7 @@
X AP_DECLARE(const char *) ap_get_server_description(void)
X {
X     return server_description ? server_description :
X-        AP_SERVER_BASEVERSION " (" PLATFORM ")";
X+        AP_SERVER_BASEVERSION " (FreeBSD)";
X }
X 
X AP_DECLARE(const char *) ap_get_server_banner(void)
X@@ -3185,7 +3185,7 @@
X         ap_add_version_component(pconf, AP_SERVER_BASEPRODUCT "/" 
AP_SERVER_MAJORVERSION);
X     }
X     else {
X-        ap_add_version_component(pconf, AP_SERVER_BASEVERSION " (" 
PLATFORM ")");
X+        ap_add_version_component(pconf, AP_SERVER_BASEVERSION " 
(FreeBSD)");
X     }
X 
X     /*
X@@ -3195,7 +3195,7 @@
X     if (ap_server_tokens != SrvTk_FULL) {
X         banner_locked++;
X     }
X-    server_description = AP_SERVER_BASEVERSION " (" PLATFORM ")";
X+    server_description = AP_SERVER_BASEVERSION " (FreeBSD)";
X }
X 
X static const char *set_serv_tokens(cmd_parms *cmd, void *dummy,
e80fe62f1ce78bdf77055602369eb053
echo x - apache24/files/patch-support__envvars-std.in
sed 's/^X//' >apache24/files/patch-support__envvars-std.in << 
'f72af1cb17e492be7aa49202db601c35'
X--- ./support/envvars-std.in.orig	2012-03-08 11:10:51.000000000 -0500
X+++ ./support/envvars-std.in	2012-09-08 07:37:41.529795647 -0400
X@@ -26,3 +26,8 @@
X export @SHLIBPATH_VAR@
X #
X @OS_SPECIFIC_VARS@
X+ENVVARS_DIR=%%PREFIX%%/etc/apache24/envvars.d
X+for envvars_file in $(ls ${ENVVARS_DIR}/*.env 2>/dev/null)
X+do
X+	. ${envvars_file}
X+done
f72af1cb17e492be7aa49202db601c35
echo x - apache24/files/patch-support__log_server_status.in
sed 's/^X//' >apache24/files/patch-support__log_server_status.in << 
'a9bd4056fe3d644d90680c7863bf44d0'
X--- ./support/log_server_status.in.orig	2012-04-28 19:08:09.000000000 -0400
X+++ ./support/log_server_status.in	2012-09-08 07:43:19.515101565 -0400
X@@ -29,7 +29,7 @@
X use strict;
X use warnings;
X 
X-my $wherelog = "@exp_logfiledir@/";  # Logs will be like 
"@exp_logfiledir@/19960312"
X+my $wherelog = "@exp_logfiledir@/httpd-status-";  # Logs will be like 
"@exp_logfiledir@/19960312"
X my $server   = "localhost";        # Name of server, could be 
"www.foo.com"
X my $port     = "@PORT@";               # Port on server
X my $request = "/server-status/?auto";    # Request to send
X@@ -46,7 +46,7 @@
X   . sprintf( "%02d", $ltime[1] )
X   . sprintf( "%02d", $ltime[0] );
X 
X-open(OUT,">>$wherelog$day");
X+open(OUT,">>$wherelog$day.log");
X 
X my $socket = new IO::Socket::INET(
X     PeerAddr => $server,
a9bd4056fe3d644d90680c7863bf44d0
echo x - apache24/files/no-accf.conf
sed 's/^X//' >apache24/files/no-accf.conf << '3688d312a29c923bbae1abf5202468
99'
X<IfDefine NOHTTPACCEPT>
X   AcceptFilter http none
X   AcceptFilter https none
X</IfDefine>
3688d312a29c923bbae1abf520246899
echo x - apache24/files/htcacheclean.in
sed 's/^X//' >apache24/files/htcacheclean.in << 'bb423ec32c13641f67ddb265fa2
25d3d'
X#!/bin/sh
X
X# $FreeBSD$
X#
X# PROVIDE: htcacheclean
X#
X# Configuration settings for htcacheclean in /etc/rc.conf
X#
X# htcacheclean_enable (bool) 
X# Set to "NO" by default 
X# Set it to "YES" to enable htcacheclean
X#
X# htcacheclean_cache (str) Set to "%%PREFIX%%/www/proxy" by default Set the
X# location of the mod_disk_cache CacheRoot This should be the same as 
whats in
X# your httpd.conf
X#
X# htcacheclean_cachelimit (str) Set to "512M" by default Sets the size
X# htcacheclean should prune the disk cache to expressed in bytes by 
default, K
X# for kilobytes, M for megabytes.
X#
X# htcacheclean_interval (num) 
X# Set to "10" by default
X# Sets how frequently in munutes htcacheclean wakes up and prunes the cache
X#
X# htcacheclean_args (str)
X# Set to "-t -n -i" by default
X# Sets extra command-line arguments to htcacheclean
X# -t Delete all empty directories
X# -n Be nice by sleeping occasionally to not saturate the I/O bandwith of 
the disk
X# -i Run only when there was a modification of the disk cache
X
X. /etc/rc.subr
X
Xname="htcacheclean"
Xrcvar=htcacheclean_enable
X
Xload_rc_config "${name}"
X
Xhtcacheclean_enable="${htcacheclean_enable:-"NO"}"
Xhtcacheclean_cache="${htcacheclean_cache:-"%%PREFIX%%/www/proxy"}"
Xhtcacheclean_cachelimit="${htcacheclean_cachelimit:-"512M"}"
Xhtcacheclean_interval="${htcacheclean_interval:-"60"}"
Xhtcacheclean_args="${htcacheclean_args:-"-t -n -i"}"
X
Xstart_precmd="htc_check"
Xrestart_precmd="htc_check"
Xrestart_reload="htc_check"
X
Xcommand="%%PREFIX%%/sbin/htcacheclean"
Xflags="-p${htcacheclean_cache} -d${htcacheclean_interval} 
-l${htcacheclean_cachelimit} ${htcacheclean_args}"
Xrequired_dirs="${htcacheclean_cache}"
X
Xhtc_check()
X{
X	[ ! -d ${htcacheclean_cache} ] && {
X		echo ""
X		return 1
X	}
X	return 0
X}
X
Xrun_rc_command "$1"
bb423ec32c13641f67ddb265fa225d3d
echo x - apache24/files/apache24.in
sed 's/^X//' >apache24/files/apache24.in << '87b194194e9d1d338802a11abc0eb72
e'
X#!/bin/sh
X#
X# $FreeBSD$
X#
X
X# PROVIDE: apache24
X# REQUIRE: LOGIN cleanvar
X# KEYWORD: shutdown
X
X#
X# Add the following lines to /etc/rc.conf to enable apache24:
X# apache24_enable (bool):      Set to "NO" by default.
X#                             Set it to "YES" to enable apache24
X# apache24_profiles (str):     Set to "" by default.
X#                              Define your profiles here.
X# apache24limits_enable (bool):Set to "NO" by default.
X#                             Set it to yes to run `limits $limits_args`
X#                             just before apache starts.
X# apache24_flags (str):        Set to "" by default.
X#                             Extra flags passed to start command.
X# apache24limits_args (str):   Default to "-e -C daemon"
X#                             Arguments of pre-start limits run.
X# apache24_http_accept_enable (bool): Set to "NO" by default.
X#                             Set to yes to check for accf_http kernel
X#                             module on start up and load if not loaded.
X# apache24_fib (str):	      Set an altered default network view for apache
X
X. /etc/rc.subr
X
Xname="apache24"
Xrcvar=apache24_enable
X
Xstart_precmd="apache24_prestart"
Xrestart_precmd="apache24_checkconfig"
Xreload_precmd="apache24_checkconfig"
Xreload_cmd="apache24_graceful"
Xgraceful_cmd="apache24_graceful"
Xgracefulstop_cmd="apache24_gracefulstop"
Xconfigtest_cmd="apache24_checkconfig"
Xcommand="%%PREFIX%%/sbin/httpd"
X_pidprefix="/var/run/httpd"
Xpidfile="${_pidprefix}.pid"
Xrequired_files=%%PREFIX%%/etc/apache24/httpd.conf
Xenvvars="%%PREFIX%%/sbin/envvars"
X
X[ -z "$apache24_enable" ]       && apache24_enable="NO"
X[ -z "$apache24limits_enable" ] && apache24limits_enable="NO"
X[ -z "$apache24limits_args" ]   && apache24limits_args="-e -C daemon"
X[ -z "$apache24_http_accept_enable" ] && apache24_http_accept_enable="NO"
X[ -z "$apache24_fib" ] && apache24_fib="NO"
X
Xapache24_accf() {
X
X  if checkyesno apache24_http_accept_enable; then
X    /sbin/kldstat -v | grep accf_http > /dev/null 2>&1 || /sbin/kldload 
accf_http || return ${?}
X    /sbin/kldstat -v | grep accf_data > /dev/null 2>&1 || /sbin/kldload 
accf_data || return ${?}
X  else
X    apache24_flags="${apache24_flags} -DNOHTTPACCEPT"
X  fi
X}
X
Xload_rc_config $name
X
Xif [ -n "$2" ]; then
X	profile="$2"
X	if [ "x${apache24_profiles}" != "x" ]; then
X		pidfile="${_pidprefix}.${profile}.pid"
X		eval apache24_configfile="\${apache24_${profile}_configfile:-}"
X		if [ "x${apache24_configfile}" = "x" ]; then
X			echo "You must define a configuration file (apache24_${profile}_configfi
le)"
X			exit 1
X		fi
X		required_files="${apache24_configfile}"
X		eval apache24_enable="\${apache24_${profile}_enable:-${apache24_enable}}"
X		eval apache24_flags="\${apache24_${profile}_flags:-${apache24_flags}}"
X		eval apache24_http_accept_enable="\${apache24_${profile}_http_accept_enab
le:-${apache24_http_accept_enable}}"
X		eval apache24limits_enable="\${apache24limits_${profile}_enable:-${apache
24limits_enable}}"
X		eval apache24limits_args="\${apache24limits_${profile}_args:-${apache24li
mits_args}}"
X		eval apache24_fib="\${apache24_${profile}_fib:-${apache24_fib}}"
X		eval command="\${apache24_${profile}_command:-${command}}"
X		eval pidfile="\${apache24_${profile}_pidfile:-${pidfile}}"
X		eval apache24_envvars="\${apache24_${profile}_envvars:-${envvars}}"
X		apache24_flags="-f ${apache24_configfile} -c \"PidFile ${pidfile}\" 
${apache24_flags}"
X	else
X		echo "$0: extra argument ignored"
X	fi
Xelse
X	eval apache24_envvars=${envvars}
X	if [ "x${apache24_profiles}" != "x" -a "x$1" != "x" ]; then
X		for profile in ${apache24_profiles}; do
X			eval _enable="\${apache24_${profile}_enable}"
X			case "x${_enable:-${apache24_enable}}" in
X			x|x[Nn][Oo]|x[Nn][Oo][Nn][Ee])
X				continue
X				;;
X			x[Yy][Ee][Ss])
X				;;
X			*)
X				if test -z "$_enable"; then
X					_var=apache24_enable
X				else
X					_var=apache24_"${profile}"_enable
X				fi
X				echo "Bad value" \
X				    "'${_enable:-${apache24_enable}}'" \
X				    "for ${_var}. " \
X				    "Profile ${profile} skipped."
X				continue
X				;;
X			esac
X			echo "===> apache24 profile: ${profile}"
X			%%PREFIX%%/etc/rc.d/apache24 $1 ${profile}
X			retcode="$?"
X			if [ "0${retcode}" -ne 0 ]; then
X				failed="${profile} (${retcode}) ${failed:-}"
X			else
X				success="${profile} ${success:-}"
X			fi
X		done
X		exit 0
X	fi
Xfi
X
Xif [ "${1}" != "stop" ] ; then \
X	apache24_accf
Xfi
X
Xapache24_requirepidfile()
X{
X    apache24_checkconfig
X
X	if [ ! "0`check_pidfile ${pidfile} ${command}`" -gt 1 ]; then
X		echo "${name} not running? (check $pidfile)."
X		exit 1
X	fi
X}
X
Xapache24_checkconfig()
X{
X	if test -f ${apache24_envvars}
X	then
X		. ${apache24_envvars}
X	fi
X
X	echo "Performing sanity check on apache24 configuration:"
X	eval ${command} ${apache24_flags} -t
X}
X
Xapache24_graceful() {
X	apache24_requirepidfile
X
X	echo "Performing a graceful restart"
X	eval ${command} ${apache24_flags} -k graceful
X}
X
Xapache24_gracefulstop() {
X	apache24_requirepidfile
X
X	echo "Performing a graceful stop"
X	eval ${command} ${apache24_flags} -k graceful-stop
X}
X
Xapache24_precmd() 
X{
X	apache24_checkconfig
X
X	if checkyesno apache24limits_enable
X	then
X		eval `/usr/bin/limits ${apache24limits_args}` 2>/dev/null
X	else
X		return 0
X        fi
X
X}
X
Xapache24_checkfib () {
X	$SYSCTL net.fibs >/dev/null 2>&1
X	ret=$? 
X 	[ $ret -gt 0 ] && return 0 
X	if [ "x$apache24_fib" != "xNO" ]
X	then 
X		command="/usr/sbin/setfib -F ${apache24_fib} ${command}"
X	else
X		return 0
X	fi
X}
X
Xapache24_prestart() {
X	apache24_checkfib
X	apache24_precmd
X}
X
Xextra_commands="reload graceful gracefulstop configtest"
Xrun_rc_command "$1"
87b194194e9d1d338802a11abc0eb72e
echo x - apache24/pkg-plist
sed 's/^X//' >apache24/pkg-plist << 'e1b73a6f68cb7fbfbea75e340eddcd22'
X@comment $FreeBSD: ports/www/apache24/pkg-plist,v 1.102 2012/09/02 
14:31:58 ohauer Exp $
X@exec mkdir -p %D/%%ETCDIR%%/extra 2> /dev/null
X@exec mkdir -p %D/%%ETCDIR%%/Includes 2> /dev/null || true
X@exec mkdir -p %D/%%ETCDIR%%/envvars.d 2> /dev/null || true
X@unexec if cmp %D/%%ETCDIR%%/httpd.conf %D/%%EXAMPLESDIR%%/httpd.conf; 
then rm -f %D/%%ETCDIR%%/httpd.conf; fi
X%%EXAMPLESDIR%%/httpd.conf
X@exec [ -f %D/%%ETCDIR%%/httpd.conf ] || cp %D/%%EXAMPLESDIR%%/httpd.conf 
%D/%%ETCDIR%%/httpd.conf
X@unexec if cmp -s %D/%%ETCDIR%%/magic %D/%%EXAMPLESDIR%%/magic; then rm -f 
%D/%%ETCDIR%%/magic; fi
X%%EXAMPLESDIR%%/magic
X@exec [ -f %D/%%ETCDIR%%/magic ] || cp %D/%%EXAMPLESDIR%%/magic 
%D/%%ETCDIR%%/magic
X@unexec if cmp -s %D/%%ETCDIR%%/mime.types %D/%%EXAMPLESDIR%%/mime.types; 
then rm -f %D/%%ETCDIR%%/mime.types; fi
X%%EXAMPLESDIR%%/mime.types
X@exec [ -f %D/%%ETCDIR%%/mime.types ] || cp %D/%%EXAMPLESDIR%%/mime.types 
%D/%%ETCDIR%%/mime.types
X@unexec if cmp -s %D/%%ETCDIR%%/extra/httpd-autoindex.conf 
%D/%%EXAMPLESDIR%%/extra/httpd-autoindex.conf; then rm -f 
%D/%%ETCDIR%%/extra/httpd-autoindex.conf; fi
X%%EXAMPLESDIR%%/extra/httpd-autoindex.conf
X@exec [ -f %D/%%ETCDIR%%/extra/httpd-autoindex.conf ] || cp 
%D/%%EXAMPLESDIR%%/extra/httpd-autoindex.conf %D/%%ETCDIR%%/extra/httpd-auto
index.conf
X@unexec if cmp -s %D/%%ETCDIR%%/extra/httpd-dav.conf 
%D/%%EXAMPLESDIR%%/extra/httpd-dav.conf; then rm -f 
%D/%%ETCDIR%%/extra/httpd-dav.conf; fi
X%%EXAMPLESDIR%%/extra/httpd-dav.conf
X@exec [ -f %D/%%ETCDIR%%/extra/httpd-dav.conf ] || cp 
%D/%%EXAMPLESDIR%%/extra/httpd-dav.conf %D/%%ETCDIR%%/extra/httpd-dav.conf
X@unexec if cmp -s %D/%%ETCDIR%%/extra/httpd-default.conf 
%D/%%EXAMPLESDIR%%/extra/httpd-default.conf; then rm -f 
%D/%%ETCDIR%%/extra/httpd-default.conf; fi
X%%EXAMPLESDIR%%/extra/httpd-default.conf
X@exec [ -f %D/%%ETCDIR%%/extra/httpd-default.conf ] || cp 
%D/%%EXAMPLESDIR%%/extra/httpd-default.conf %D/%%ETCDIR%%/extra/httpd-defaul
t.conf
X@unexec if cmp -s %D/%%ETCDIR%%/extra/httpd-info.conf 
%D/%%EXAMPLESDIR%%/extra/httpd-info.conf; then rm -f 
%D/%%ETCDIR%%/extra/httpd-info.conf; fi
X%%EXAMPLESDIR%%/extra/httpd-info.conf
X@exec [ -f %D/%%ETCDIR%%/extra/httpd-info.conf ] || cp 
%D/%%EXAMPLESDIR%%/extra/httpd-info.conf %D/%%ETCDIR%%/extra/httpd-info.conf
X@unexec if cmp -s %D/%%ETCDIR%%/extra/httpd-languages.conf 
%D/%%EXAMPLESDIR%%/extra/httpd-languages.conf; then rm -f 
%D/%%ETCDIR%%/extra/httpd-languages.conf; fi
X%%EXAMPLESDIR%%/extra/httpd-languages.conf
X@exec [ -f %D/%%ETCDIR%%/extra/httpd-languages.conf ] || cp 
%D/%%EXAMPLESDIR%%/extra/httpd-languages.conf %D/%%ETCDIR%%/extra/httpd-lang
uages.conf
X@unexec if cmp -s %D/%%ETCDIR%%/extra/httpd-manual.conf 
%D/%%EXAMPLESDIR%%/extra/httpd-manual.conf; then rm -f 
%D/%%ETCDIR%%/extra/httpd-manual.conf; fi
X%%EXAMPLESDIR%%/extra/httpd-manual.conf
X@exec [ -f %D/%%ETCDIR%%/extra/httpd-manual.conf ] || cp 
%D/%%EXAMPLESDIR%%/extra/httpd-manual.conf %D/%%ETCDIR%%/extra/httpd-manual.
conf
X@unexec if cmp -s %D/%%ETCDIR%%/extra/httpd-mpm.conf 
%D/%%EXAMPLESDIR%%/extra/httpd-mpm.conf; then rm -f 
%D/%%ETCDIR%%/extra/httpd-mpm.conf; fi
X%%EXAMPLESDIR%%/extra/httpd-mpm.conf
X@exec [ -f %D/%%ETCDIR%%/extra/httpd-mpm.conf ] || cp 
%D/%%EXAMPLESDIR%%/extra/httpd-mpm.conf %D/%%ETCDIR%%/extra/httpd-mpm.conf
X@unexec if cmp -s %D/%%ETCDIR%%/extra/httpd-multilang-errordoc.conf 
%D/%%EXAMPLESDIR%%/extra/httpd-multilang-errordoc.conf; then rm -f 
%D/%%ETCDIR%%/extra/httpd-multilang-errordoc.conf; fi
X%%EXAMPLESDIR%%/extra/httpd-multilang-errordoc.conf
X@exec [ -f %D/%%ETCDIR%%/extra/httpd-multilang-errordoc.conf ] || cp 
%D/%%EXAMPLESDIR%%/extra/httpd-multilang-errordoc.conf 
%D/%%ETCDIR%%/extra/httpd-multilang-errordoc.conf
X@unexec if cmp -s %D/%%ETCDIR%%/extra/httpd-ssl.conf 
%D/%%EXAMPLESDIR%%/extra/httpd-ssl.conf; then rm -f 
%D/%%ETCDIR%%/extra/httpd-ssl.conf; fi
X%%EXAMPLESDIR%%/extra/httpd-ssl.conf
X@exec [ -f %D/%%ETCDIR%%/extra/httpd-ssl.conf ] || cp 
%D/%%EXAMPLESDIR%%/extra/httpd-ssl.conf %D/%%ETCDIR%%/extra/httpd-ssl.conf
X@unexec if cmp -s %D/%%ETCDIR%%/extra/httpd-userdir.conf 
%D/%%EXAMPLESDIR%%/extra/httpd-userdir.conf; then rm -f 
%D/%%ETCDIR%%/extra/httpd-userdir.conf; fi
X%%EXAMPLESDIR%%/extra/httpd-userdir.conf
X@exec [ -f %D/%%ETCDIR%%/extra/httpd-userdir.conf ] || cp 
%D/%%EXAMPLESDIR%%/extra/httpd-userdir.conf %D/%%ETCDIR%%/extra/httpd-userdi
r.conf
X@unexec if cmp -s %D/%%ETCDIR%%/extra/httpd-vhosts.conf 
%D/%%EXAMPLESDIR%%/extra/httpd-vhosts.conf; then rm -f 
%D/%%ETCDIR%%/extra/httpd-vhosts.conf; fi
X%%EXAMPLESDIR%%/extra/httpd-vhosts.conf
X@exec [ -f %D/%%ETCDIR%%/extra/httpd-vhosts.conf ] || cp 
%D/%%EXAMPLESDIR%%/extra/httpd-vhosts.conf %D/%%ETCDIR%%/extra/httpd-vhosts.
conf
X@unexec if cmp -s %D/%%ETCDIR%%/extra/proxy-html.conf 
%D/%%EXAMPLESDIR%%/extra/proxy-html.conf; then rm -f 
%D/%%ETCDIR%%/extra/proxy-html.conf; fi
X%%EXAMPLESDIR%%/extra/proxy-html.conf
X@exec [ -f %D/%%ETCDIR%%/extra/proxy-html.conf ] || cp 
%D/%%EXAMPLESDIR%%/extra/proxy-html.conf %D/%%ETCDIR%%/extra/proxy-html.conf
X%%ETCDIR%%/Includes/no-accf.conf
Xbin/ab
Xbin/apxs
Xbin/dbmmanage
Xbin/htdbm
Xbin/htdigest
Xbin/htpasswd
Xbin/httxt2dbm
Xbin/logresolve
Xbin/split-logfile
Xinclude/apache24/ap_compat.h
Xinclude/apache24/ap_config.h
Xinclude/apache24/ap_config_auto.h
Xinclude/apache24/ap_config_layout.h
Xinclude/apache24/ap_expr.h
Xinclude/apache24/ap_hooks.h
Xinclude/apache24/ap_listen.h
Xinclude/apache24/ap_mmn.h
Xinclude/apache24/ap_mpm.h
Xinclude/apache24/ap_provider.h
Xinclude/apache24/ap_regex.h
Xinclude/apache24/ap_regkey.h
Xinclude/apache24/ap_release.h
Xinclude/apache24/ap_slotmem.h
Xinclude/apache24/ap_socache.h
Xinclude/apache24/apache_noprobes.h
Xinclude/apache24/cache_common.h
Xinclude/apache24/heartbeat.h
Xinclude/apache24/http_config.h
Xinclude/apache24/http_connection.h
Xinclude/apache24/http_core.h
Xinclude/apache24/http_log.h
Xinclude/apache24/http_main.h
Xinclude/apache24/http_protocol.h
Xinclude/apache24/http_request.h
Xinclude/apache24/http_vhost.h
Xinclude/apache24/httpd.h
Xinclude/apache24/mod_auth.h
Xinclude/apache24/mod_cache.h
Xinclude/apache24/mod_cgi.h
Xinclude/apache24/mod_core.h
Xinclude/apache24/mod_dav.h
Xinclude/apache24/mod_dbd.h
Xinclude/apache24/mod_include.h
Xinclude/apache24/mod_log_config.h
Xinclude/apache24/mod_proxy.h
Xinclude/apache24/mod_request.h
Xinclude/apache24/mod_rewrite.h
Xinclude/apache24/mod_session.h
Xinclude/apache24/mod_so.h
Xinclude/apache24/mod_ssl.h
Xinclude/apache24/mod_status.h
Xinclude/apache24/mod_unixd.h
Xinclude/apache24/mod_watchdog.h
Xinclude/apache24/mod_xml2enc.h
Xinclude/apache24/mpm_common.h
Xinclude/apache24/os.h
Xinclude/apache24/scoreboard.h
Xinclude/apache24/unixd.h
Xinclude/apache24/util_cfgtree.h
Xinclude/apache24/util_charset.h
Xinclude/apache24/util_cookies.h
Xinclude/apache24/util_ebcdic.h
Xinclude/apache24/util_filter.h
Xinclude/apache24/util_ldap.h
Xinclude/apache24/util_md5.h
Xinclude/apache24/util_mutex.h
Xinclude/apache24/util_script.h
Xinclude/apache24/util_time.h
Xinclude/apache24/util_varbuf.h
Xinclude/apache24/util_xml.h
Xlibexec/apache24/httpd.exp
X%%MOD_ACCESS_COMPAT%%libexec/apache24/mod_access_compat.so
X%%MOD_ACTIONS%%libexec/apache24/mod_actions.so
X%%MOD_ALIAS%%libexec/apache24/mod_alias.so
X%%MOD_ALLOWMETHODS%%libexec/apache24/mod_allowmethods.so
X%%MOD_ASIS%%libexec/apache24/mod_asis.so
X%%MOD_AUTHNZ_LDAP%%libexec/apache24/mod_authnz_ldap.so
X%%MOD_AUTHN_ANON%%libexec/apache24/mod_authn_anon.so
X%%MOD_AUTHN_CORE%%libexec/apache24/mod_authn_core.so
X%%MOD_AUTHN_DBD%%libexec/apache24/mod_authn_dbd.so
X%%MOD_AUTHN_DBM%%libexec/apache24/mod_authn_dbm.so
X%%MOD_AUTHN_FILE%%libexec/apache24/mod_authn_file.so
X%%MOD_AUTHN_SOCACHE%%libexec/apache24/mod_authn_socache.so
X%%MOD_AUTHZ_CORE%%libexec/apache24/mod_authz_core.so
X%%MOD_AUTHZ_DBD%%libexec/apache24/mod_authz_dbd.so
X%%MOD_AUTHZ_DBM%%libexec/apache24/mod_authz_dbm.so
X%%MOD_AUTHZ_GROUPFILE%%libexec/apache24/mod_authz_groupfile.so
X%%MOD_AUTHZ_HOST%%libexec/apache24/mod_authz_host.so
X%%MOD_AUTHZ_OWNER%%libexec/apache24/mod_authz_owner.so
X%%MOD_AUTHZ_USER%%libexec/apache24/mod_authz_user.so
X%%MOD_AUTH_BASIC%%libexec/apache24/mod_auth_basic.so
X%%MOD_AUTH_DIGEST%%libexec/apache24/mod_auth_digest.so
X%%MOD_AUTH_FORM%%libexec/apache24/mod_auth_form.so
X%%MOD_AUTOINDEX%%libexec/apache24/mod_autoindex.so
X%%MOD_BUFFER%%libexec/apache24/mod_buffer.so
X%%MOD_CACHE%%libexec/apache24/mod_cache.so
X%%MOD_CACHE_DISK%%libexec/apache24/mod_cache_disk.so
X%%MOD_CERN_META%%libexec/apache24/mod_cern_meta.so
X%%MOD_CGI%%libexec/apache24/mod_cgi.so
X%%MOD_CGID%%libexec/apache24/mod_cgid.so
X%%MOD_CHARSET_LITE%%libexec/apache24/mod_charset_lite.so
X%%MOD_DATA%%libexec/apache24/mod_data.so
X%%MOD_DAV%%libexec/apache24/mod_dav.so
X%%MOD_DAV_FS%%libexec/apache24/mod_dav_fs.so
X%%MOD_DAV_LOCK%%libexec/apache24/mod_dav_lock.so
X%%MOD_DBD%%libexec/apache24/mod_dbd.so
X%%MOD_DEFLATE%%libexec/apache24/mod_deflate.so
X%%MOD_DIALUP%%libexec/apache24/mod_dialup.so
X%%MOD_DIR%%libexec/apache24/mod_dir.so
X%%MOD_DUMPIO%%libexec/apache24/mod_dumpio.so
X%%MOD_ECHO%%libexec/apache24/mod_echo.so
X%%MOD_ENV%%libexec/apache24/mod_env.so
X%%MOD_EXPIRES%%libexec/apache24/mod_expires.so
X%%MOD_EXT_FILTER%%libexec/apache24/mod_ext_filter.so
X%%MOD_FILE_CACHE%%libexec/apache24/mod_file_cache.so
X%%MOD_FILTER%%libexec/apache24/mod_filter.so
X%%MOD_HEADERS%%libexec/apache24/mod_headers.so
X%%MOD_HEARTBEAT%%libexec/apache24/mod_heartbeat.so
X%%MOD_HEARTMONITOR%%libexec/apache24/mod_heartmonitor.so
X%%MOD_IDENT%%libexec/apache24/mod_ident.so
X%%MOD_IMAGEMAP%%libexec/apache24/mod_imagemap.so
X%%MOD_INCLUDE%%libexec/apache24/mod_include.so
X%%MOD_INFO%%libexec/apache24/mod_info.so
X%%MOD_LBMETHOD_BYBUSYNESS%%libexec/apache24/mod_lbmethod_bybusyness.so
X%%MOD_LBMETHOD_BYREQUESTS%%libexec/apache24/mod_lbmethod_byrequests.so
X%%MOD_LBMETHOD_BYTRAFFIC%%libexec/apache24/mod_lbmethod_bytraffic.so
X%%MOD_LBMETHOD_HEARTBEAT%%libexec/apache24/mod_lbmethod_heartbeat.so
X%%MOD_LDAP%%libexec/apache24/mod_ldap.so
X%%MOD_LOGIO%%libexec/apache24/mod_logio.so
X%%MOD_LOG_CONFIG%%libexec/apache24/mod_log_config.so
X%%MOD_LOG_DEBUG%%libexec/apache24/mod_log_debug.so
X%%MOD_LOG_FORENSIC%%libexec/apache24/mod_log_forensic.so
X%%MOD_LUA%%libexec/apache24/mod_lua.so
X%%MOD_MIME%%libexec/apache24/mod_mime.so
X%%MOD_MIME_MAGIC%%libexec/apache24/mod_mime_magic.so
X%%MOD_MPM_EVENT%%libexec/apache24/mod_mpm_event.so
X%%MOD_MPM_PREFORK%%libexec/apache24/mod_mpm_prefork.so
X%%MOD_MPM_WORKER%%libexec/apache24/mod_mpm_worker.so
X%%MOD_NEGOTIATION%%libexec/apache24/mod_negotiation.so
X%%MOD_PROXY%%libexec/apache24/mod_proxy.so
X%%MOD_PROXY_AJP%%libexec/apache24/mod_proxy_ajp.so
X%%MOD_PROXY_BALANCER%%libexec/apache24/mod_proxy_balancer.so
X%%MOD_PROXY_CONNECT%%libexec/apache24/mod_proxy_connect.so
X%%MOD_PROXY_EXPRESS%%libexec/apache24/mod_proxy_express.so
X%%MOD_PROXY_FCGI%%libexec/apache24/mod_proxy_fcgi.so
X%%MOD_PROXY_FDPASS%%libexec/apache24/mod_proxy_fdpass.so
X%%MOD_PROXY_FTP%%libexec/apache24/mod_proxy_ftp.so
X%%MOD_PROXY_HTML%%libexec/apache24/mod_proxy_html.so
X%%MOD_PROXY_HTTP%%libexec/apache24/mod_proxy_http.so
X%%MOD_PROXY_SCGI%%libexec/apache24/mod_proxy_scgi.so
X%%MOD_RATELIMIT%%libexec/apache24/mod_ratelimit.so
X%%MOD_REFLECTOR%%libexec/apache24/mod_reflector.so
X%%MOD_REMOTEIP%%libexec/apache24/mod_remoteip.so
X%%MOD_REQTIMEOUT%%libexec/apache24/mod_reqtimeout.so
X%%MOD_REQUEST%%libexec/apache24/mod_request.so
X%%MOD_REWRITE%%libexec/apache24/mod_rewrite.so
X%%MOD_SED%%libexec/apache24/mod_sed.so
X%%MOD_SESSION%%libexec/apache24/mod_session.so
X%%MOD_SESSION_COOKIE%%libexec/apache24/mod_session_cookie.so
X%%MOD_SESSION_CRYPTO%%libexec/apache24/mod_session_crypto.so
X%%MOD_SESSION_DBD%%libexec/apache24/mod_session_dbd.so
X%%MOD_SETENVIF%%libexec/apache24/mod_setenvif.so
X%%MOD_SLOTMEM_PLAIN%%libexec/apache24/mod_slotmem_plain.so
X%%MOD_SLOTMEM_SHM%%libexec/apache24/mod_slotmem_shm.so
X%%MOD_SOCACHE_DBM%%libexec/apache24/mod_socache_dbm.so
X%%MOD_SOCACHE_DC%%libexec/apache24/mod_socache_dc.so
X%%MOD_SOCACHE_MEMCACHE%%libexec/apache24/mod_socache_memcache.so
X%%MOD_SOCACHE_SHMCB%%libexec/apache24/mod_socache_shmcb.so
X%%MOD_SPELING%%libexec/apache24/mod_speling.so
X%%MOD_SSL%%libexec/apache24/mod_ssl.so
X%%MOD_STATUS%%libexec/apache24/mod_status.so
X%%MOD_SUBSTITUTE%%libexec/apache24/mod_substitute.so
X%%MOD_SUEXEC%%libexec/apache24/mod_suexec.so
X%%MOD_UNIQUE_ID%%libexec/apache24/mod_unique_id.so
X%%MOD_UNIXD%%libexec/apache24/mod_unixd.so
X%%MOD_USERDIR%%libexec/apache24/mod_userdir.so
X%%MOD_USERTRACK%%libexec/apache24/mod_usertrack.so
X%%MOD_VERSION%%libexec/apache24/mod_version.so
X%%MOD_VHOST_ALIAS%%libexec/apache24/mod_vhost_alias.so
X%%MOD_WATCHDOG%%libexec/apache24/mod_watchdog.so
X%%MOD_XML2ENC%%libexec/apache24/mod_xml2enc.so
Xsbin/apachectl
Xsbin/checkgid
X%%FORENSIC%%sbin/check_forensic
Xsbin/envvars
Xsbin/envvars-std
Xsbin/fcgistarter
Xsbin/htcacheclean
Xsbin/httpd
Xsbin/rotatelogs
X%%SUEXEC%%sbin/suexec
X%%DATADIR%%/build/config.nice
X%%DATADIR%%/build/config_vars.mk
X%%DATADIR%%/build/instdso.sh
X%%DATADIR%%/build/library.mk
X%%DATADIR%%/build/ltlib.mk
X%%DATADIR%%/build/mkdir.sh
X%%DATADIR%%/build/program.mk
X%%DATADIR%%/build/rules.mk
X%%DATADIR%%/build/special.mk
X%%WWWDIR%%/cgi-bin/printenv
X%%WWWDIR%%/cgi-bin/printenv.vbs
X%%WWWDIR%%/cgi-bin/printenv.wsf
X%%WWWDIR%%/cgi-bin/test-cgi
X@unexec if cmp -s %D/%%WWWDIR%%/data/index.html %D/%%EXAMPLESDIR%%/index.ht
ml; then rm -f %D/%%WWWDIR%%/data/index.html; fi
X%%EXAMPLESDIR%%/index.html
X@exec [ -d %D/%%WWWDIR%%/data ] || mkdir -p %D/%%WWWDIR%%/data
X@exec [ -f %D/%%WWWDIR%%/data/index.html ] || cp %D/%%EXAMPLESDIR%%/index.h
tml %D/%%WWWDIR%%/data/index.html
X%%WWWDIR%%/error/HTTP_BAD_GATEWAY.html.var
X%%WWWDIR%%/error/HTTP_BAD_REQUEST.html.var
X%%WWWDIR%%/error/HTTP_FORBIDDEN.html.var
X%%WWWDIR%%/error/HTTP_GONE.html.var
X%%WWWDIR%%/error/HTTP_INTERNAL_SERVER_ERROR.html.var
X%%WWWDIR%%/error/HTTP_LENGTH_REQUIRED.html.var
X%%WWWDIR%%/error/HTTP_METHOD_NOT_ALLOWED.html.var
X%%WWWDIR%%/error/HTTP_NOT_FOUND.html.var
X%%WWWDIR%%/error/HTTP_NOT_IMPLEMENTED.html.var
X%%WWWDIR%%/error/HTTP_PRECONDITION_FAILED.html.var
X%%WWWDIR%%/error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
X%%WWWDIR%%/error/HTTP_REQUEST_TIME_OUT.html.var
X%%WWWDIR%%/error/HTTP_REQUEST_URI_TOO_LARGE.html.var
X%%WWWDIR%%/error/HTTP_SERVICE_UNAVAILABLE.html.var
X%%WWWDIR%%/error/HTTP_UNAUTHORIZED.html.var
X%%WWWDIR%%/error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
X%%WWWDIR%%/error/HTTP_VARIANT_ALSO_VARIES.html.var
X%%WWWDIR%%/error/README
X%%WWWDIR%%/error/contact.html.var
X%%WWWDIR%%/error/include/bottom.html
X%%WWWDIR%%/error/include/spacer.html
X%%WWWDIR%%/error/include/top.html
X%%WWWDIR%%/icons/README
X%%WWWDIR%%/icons/README.html
X%%WWWDIR%%/icons/a.gif
X%%WWWDIR%%/icons/a.png
X%%WWWDIR%%/icons/alert.black.gif
X%%WWWDIR%%/icons/alert.black.png
X%%WWWDIR%%/icons/alert.red.gif
X%%WWWDIR%%/icons/alert.red.png
X%%WWWDIR%%/icons/apache_pb.gif
X%%WWWDIR%%/icons/apache_pb.png
X%%WWWDIR%%/icons/apache_pb.svg
X%%WWWDIR%%/icons/apache_pb2.gif
X%%WWWDIR%%/icons/apache_pb2.png
X%%WWWDIR%%/icons/back.gif
X%%WWWDIR%%/icons/back.png
X%%WWWDIR%%/icons/ball.gray.gif
X%%WWWDIR%%/icons/ball.gray.png
X%%WWWDIR%%/icons/ball.red.gif
X%%WWWDIR%%/icons/ball.red.png
X%%WWWDIR%%/icons/binary.gif
X%%WWWDIR%%/icons/binary.png
X%%WWWDIR%%/icons/binhex.gif
X%%WWWDIR%%/icons/binhex.png
X%%WWWDIR%%/icons/blank.gif
X%%WWWDIR%%/icons/blank.png
X%%WWWDIR%%/icons/bomb.gif
X%%WWWDIR%%/icons/bomb.png
X%%WWWDIR%%/icons/box1.gif
X%%WWWDIR%%/icons/box1.png
X%%WWWDIR%%/icons/box2.gif
X%%WWWDIR%%/icons/box2.png
X%%WWWDIR%%/icons/broken.gif
X%%WWWDIR%%/icons/broken.png
X%%WWWDIR%%/icons/burst.gif
X%%WWWDIR%%/icons/burst.png
X%%WWWDIR%%/icons/c.gif
X%%WWWDIR%%/icons/c.png
X%%WWWDIR%%/icons/comp.blue.gif
X%%WWWDIR%%/icons/comp.blue.png
X%%WWWDIR%%/icons/comp.gray.gif
X%%WWWDIR%%/icons/comp.gray.png
X%%WWWDIR%%/icons/compressed.gif
X%%WWWDIR%%/icons/compressed.png
X%%WWWDIR%%/icons/continued.gif
X%%WWWDIR%%/icons/continued.png
X%%WWWDIR%%/icons/dir.gif
X%%WWWDIR%%/icons/dir.png
X%%WWWDIR%%/icons/diskimg.gif
X%%WWWDIR%%/icons/diskimg.png
X%%WWWDIR%%/icons/down.gif
X%%WWWDIR%%/icons/down.png
X%%WWWDIR%%/icons/dvi.gif
X%%WWWDIR%%/icons/dvi.png
X%%WWWDIR%%/icons/f.gif
X%%WWWDIR%%/icons/f.png
X%%WWWDIR%%/icons/folder.gif
X%%WWWDIR%%/icons/folder.open.gif
X%%WWWDIR%%/icons/folder.open.png
X%%WWWDIR%%/icons/folder.png
X%%WWWDIR%%/icons/folder.sec.gif
X%%WWWDIR%%/icons/folder.sec.png
X%%WWWDIR%%/icons/forward.gif
X%%WWWDIR%%/icons/forward.png
X%%WWWDIR%%/icons/generic.gif
X%%WWWDIR%%/icons/generic.png
X%%WWWDIR%%/icons/generic.red.gif
X%%WWWDIR%%/icons/generic.red.png
X%%WWWDIR%%/icons/generic.sec.gif
X%%WWWDIR%%/icons/generic.sec.png
X%%WWWDIR%%/icons/hand.right.gif
X%%WWWDIR%%/icons/hand.right.png
X%%WWWDIR%%/icons/hand.up.gif
X%%WWWDIR%%/icons/hand.up.png
X%%WWWDIR%%/icons/icon.sheet.gif
X%%WWWDIR%%/icons/icon.sheet.png
X%%WWWDIR%%/icons/image1.gif
X%%WWWDIR%%/icons/image1.png
X%%WWWDIR%%/icons/image2.gif
X%%WWWDIR%%/icons/image2.png
X%%WWWDIR%%/icons/image3.gif
X%%WWWDIR%%/icons/image3.png
X%%WWWDIR%%/icons/index.gif
X%%WWWDIR%%/icons/index.png
X%%WWWDIR%%/icons/layout.gif
X%%WWWDIR%%/icons/layout.png
X%%WWWDIR%%/icons/left.gif
X%%WWWDIR%%/icons/left.png
X%%WWWDIR%%/icons/link.gif
X%%WWWDIR%%/icons/link.png
X%%WWWDIR%%/icons/movie.gif
X%%WWWDIR%%/icons/movie.png
X%%WWWDIR%%/icons/odf6odb.png
X%%WWWDIR%%/icons/odf6odc.png
X%%WWWDIR%%/icons/odf6odf.png
X%%WWWDIR%%/icons/odf6odg.png
X%%WWWDIR%%/icons/odf6odi.png
X%%WWWDIR%%/icons/odf6odm.png
X%%WWWDIR%%/icons/odf6odp.png
X%%WWWDIR%%/icons/odf6ods.png
X%%WWWDIR%%/icons/odf6odt.png
X%%WWWDIR%%/icons/odf6otc.png
X%%WWWDIR%%/icons/odf6otf.png
X%%WWWDIR%%/icons/odf6otg.png
X%%WWWDIR%%/icons/odf6oth.png
X%%WWWDIR%%/icons/odf6oti.png
X%%WWWDIR%%/icons/odf6otp.png
X%%WWWDIR%%/icons/odf6ots.png
X%%WWWDIR%%/icons/odf6ott.png
X%%WWWDIR%%/icons/p.gif
X%%WWWDIR%%/icons/p.png
X%%WWWDIR%%/icons/patch.gif
X%%WWWDIR%%/icons/patch.png
X%%WWWDIR%%/icons/pdf.gif
X%%WWWDIR%%/icons/pdf.png
X%%WWWDIR%%/icons/pie0.gif
X%%WWWDIR%%/icons/pie0.png
X%%WWWDIR%%/icons/pie1.gif
X%%WWWDIR%%/icons/pie1.png
X%%WWWDIR%%/icons/pie2.gif
X%%WWWDIR%%/icons/pie2.png
X%%WWWDIR%%/icons/pie3.gif
X%%WWWDIR%%/icons/pie3.png
X%%WWWDIR%%/icons/pie4.gif
X%%WWWDIR%%/icons/pie4.png
X%%WWWDIR%%/icons/pie5.gif
X%%WWWDIR%%/icons/pie5.png
X%%WWWDIR%%/icons/pie6.gif
X%%WWWDIR%%/icons/pie6.png
X%%WWWDIR%%/icons/pie7.gif
X%%WWWDIR%%/icons/pie7.png
X%%WWWDIR%%/icons/pie8.gif
X%%WWWDIR%%/icons/pie8.png
X%%WWWDIR%%/icons/portal.gif
X%%WWWDIR%%/icons/portal.png
X%%WWWDIR%%/icons/ps.gif
X%%WWWDIR%%/icons/ps.png
X%%WWWDIR%%/icons/quill.gif
X%%WWWDIR%%/icons/quill.png
X%%WWWDIR%%/icons/right.gif
X%%WWWDIR%%/icons/right.png
X%%WWWDIR%%/icons/screw1.gif
X%%WWWDIR%%/icons/screw1.png
X%%WWWDIR%%/icons/screw2.gif
X%%WWWDIR%%/icons/screw2.png
X%%WWWDIR%%/icons/script.gif
X%%WWWDIR%%/icons/script.png
X%%WWWDIR%%/icons/small/back.gif
X%%WWWDIR%%/icons/small/back.png
X%%WWWDIR%%/icons/small/binary.gif
X%%WWWDIR%%/icons/small/binary.png
X%%WWWDIR%%/icons/small/binhex.gif
X%%WWWDIR%%/icons/small/binhex.png
X%%WWWDIR%%/icons/small/blank.gif
X%%WWWDIR%%/icons/small/blank.png
X%%WWWDIR%%/icons/small/broken.gif
X%%WWWDIR%%/icons/small/broken.png
X%%WWWDIR%%/icons/small/burst.gif
X%%WWWDIR%%/icons/small/burst.png
X%%WWWDIR%%/icons/small/comp1.gif
X%%WWWDIR%%/icons/small/comp1.png
X%%WWWDIR%%/icons/small/comp2.gif
X%%WWWDIR%%/icons/small/comp2.png
X%%WWWDIR%%/icons/small/compressed.gif
X%%WWWDIR%%/icons/small/compressed.png
X%%WWWDIR%%/icons/small/continued.gif
X%%WWWDIR%%/icons/small/continued.png
X%%WWWDIR%%/icons/small/doc.gif
X%%WWWDIR%%/icons/small/doc.png
X%%WWWDIR%%/icons/small/folder.gif
X%%WWWDIR%%/icons/small/folder.png
X%%WWWDIR%%/icons/small/folder2.gif
X%%WWWDIR%%/icons/small/folder2.png
X%%WWWDIR%%/icons/small/forward.gif
X%%WWWDIR%%/icons/small/forward.png
X%%WWWDIR%%/icons/small/generic.gif
X%%WWWDIR%%/icons/small/generic.png
X%%WWWDIR%%/icons/small/generic2.gif
X%%WWWDIR%%/icons/small/generic2.png
X%%WWWDIR%%/icons/small/generic3.gif
X%%WWWDIR%%/icons/small/generic3.png
X%%WWWDIR%%/icons/small/image.gif
X%%WWWDIR%%/icons/small/image.png
X%%WWWDIR%%/icons/small/image2.gif
X%%WWWDIR%%/icons/small/image2.png
X%%WWWDIR%%/icons/small/index.gif
X%%WWWDIR%%/icons/small/index.png
X%%WWWDIR%%/icons/small/key.gif
X%%WWWDIR%%/icons/small/key.png
X%%WWWDIR%%/icons/small/movie.gif
X%%WWWDIR%%/icons/small/movie.png
X%%WWWDIR%%/icons/small/patch.gif
X%%WWWDIR%%/icons/small/patch.png
X%%WWWDIR%%/icons/small/ps.gif
X%%WWWDIR%%/icons/small/ps.png
X%%WWWDIR%%/icons/small/rainbow.gif
X%%WWWDIR%%/icons/small/rainbow.png
X%%WWWDIR%%/icons/small/sound.gif
X%%WWWDIR%%/icons/small/sound.png
X%%WWWDIR%%/icons/small/sound2.gif
X%%WWWDIR%%/icons/small/sound2.png
X%%WWWDIR%%/icons/small/tar.gif
X%%WWWDIR%%/icons/small/tar.png
X%%WWWDIR%%/icons/small/text.gif
X%%WWWDIR%%/icons/small/text.png
X%%WWWDIR%%/icons/small/transfer.gif
X%%WWWDIR%%/icons/small/transfer.png
X%%WWWDIR%%/icons/small/unknown.gif
X%%WWWDIR%%/icons/small/unknown.png
X%%WWWDIR%%/icons/small/uu.gif
X%%WWWDIR%%/icons/small/uu.png
X%%WWWDIR%%/icons/sound1.gif
X%%WWWDIR%%/icons/sound1.png
X%%WWWDIR%%/icons/sound2.gif
X%%WWWDIR%%/icons/sound2.png
X%%WWWDIR%%/icons/sphere1.gif
X%%WWWDIR%%/icons/sphere1.png
X%%WWWDIR%%/icons/sphere2.gif
X%%WWWDIR%%/icons/sphere2.png
X%%WWWDIR%%/icons/svg.png
X%%WWWDIR%%/icons/tar.gif
X%%WWWDIR%%/icons/tar.png
X%%WWWDIR%%/icons/tex.gif
X%%WWWDIR%%/icons/tex.png
X%%WWWDIR%%/icons/text.gif
X%%WWWDIR%%/icons/text.png
X%%WWWDIR%%/icons/transfer.gif
X%%WWWDIR%%/icons/transfer.png
X%%WWWDIR%%/icons/unknown.gif
X%%WWWDIR%%/icons/unknown.png
X%%WWWDIR%%/icons/up.gif
X%%WWWDIR%%/icons/up.png
X%%WWWDIR%%/icons/uu.gif
X%%WWWDIR%%/icons/uu.png
X%%WWWDIR%%/icons/uuencoded.gif
X%%WWWDIR%%/icons/uuencoded.png
X%%WWWDIR%%/icons/world1.gif
X%%WWWDIR%%/icons/world1.png
X%%WWWDIR%%/icons/world2.gif
X%%WWWDIR%%/icons/world2.png
X%%WWWDIR%%/icons/xml.png
X@dirrm %%WWWDIR%%/icons/small
X@dirrm %%WWWDIR%%/icons
X@dirrm %%WWWDIR%%/error/include
X@dirrm %%WWWDIR%%/error
X@dirrmtry %%WWWDIR%%/data
X@dirrmtry %%WWWDIR%%/cgi-bin
X@dirrmtry %%WWWDIR%%
X@dirrm %%EXAMPLESDIR%%/extra
X@dirrm %%EXAMPLESDIR%%
X@dirrmtry %%DOCSDIR%%
X@dirrm %%DATADIR%%/build
X@dirrm %%DATADIR%%
X@dirrmtry libexec/apache24
X@dirrmtry include/apache24
X@unexec rm -f %D/%%ETCDIR%%/httpd.conf.bak 2> /dev/null || true
X@dirrmtry %%ETCDIR%%/extra
X@dirrmtry %%ETCDIR%%/envvars.d
X@dirrmtry %%ETCDIR%%/Includes
X@dirrmtry %%ETCDIR%%
e1b73a6f68cb7fbfbea75e340eddcd22
echo x - apache24/distinfo
sed 's/^X//' >apache24/distinfo << '9848ce916b824829d1ed2e80979c721a'
XSHA256 (apache24/httpd-2.4.4.tar.gz) = aec9f0b92021b7f67d1f0a2221afcb26ee64
69d861b6d0168d8d8c51d710ef79
XSIZE (apache24/httpd-2.4.4.tar.gz) = 6451189
9848ce916b824829d1ed2e80979c721a
echo x - apache24/Makefile.doc
sed 's/^X//' >apache24/Makefile.doc << '719135d6ba562282287bc1faeea0b3cc'
X# $FreeBSD$
X#
X# Author:				Clement Laforet <clement@FreeBSD.org>
X#
X##
X## By default, modules are compiled as dynamically loadable modules (DSO).
X##
X## Modules knobs philosophy:
X##  Note: Use this only for special builds, modules should be selected by
X##  #> make config
X##
X##   Apache-related
X##      WITH_HTTP_PORT:           default: 80
X##
X##      WITH_STATIC_SUPPORT:      Build statically linked support binaries
X##      WITH_STATIC_APACHE:       Build a static version of httpd (implies
X##                                WITH_STATIC_MODULES)
X##      WITH_ALL_STATIC_MODULES:  All modules will be statically linked.
X##      WITH_STATIC_MODULES (*):  List of modules to build modules statics
X##                                (useful for slave ports)
X##                                (They must be already enabled (i.e.
X##                                WITH_MODULES or with default 
configuration
X##                                use 'make show-modules', to check if 
they are
X##                                enabled)
X##      WITH_SUEXEC:              Enable suEXEC support
X##            SUEXEC_DOCROOT:     suEXEC root directory
X##            SUEXEC_USERDIR:     User subdirectory (default public_html)
X##            SUEXEC_SAFEPATH:    Set the safepath
X##            SUEXEC_LOGFILE:     Set log file for suEXEC (default: 
/var/log/httpd-suexec.log)
X##            SUEXEC_UIDMIN:      Minimal allowed UID (default 1000)
X##            SUEXEC_GIDMIN:      Minimal allowed GID (default 1000)
X##            SUEXEC_CALLER:      User allowed to call suEXEC (default
X##                                ${WWWOWN} (www))
X##            SUEXEC_UMASK:       Defines umask for suEXEC'd 
process(default:
X##                                unset)
X##	WITH_DEBUG:               Build a debug version of Apache (set CFLAGS
X##                                to "-O0 -g -ggdb3" or ${DEBUG_FLAGS} and
X##                                defines WITH_EXCEPTION_HOOK too)
X##      WITH_EXCEPTION_HOOK:      Enable fatal exception hook
X##
X## Available make targets:
X##      config:                   open the configure dialog
X##      show config:              prints configured options
X##      show-options:             prints this message
X##      show-modules:             prints list of available modules
X##
X## Examples (*):
X##      make WITH_STATIC_MODULES="SSL REWRITE INCLUDE"
X##      Note: If you define your custom options in /etc/make.conf, don't 
forget
X##            to do not use quotes.
X##
X## Note about OPTION IPV4_MAPPED
X##  For security reasons this OPTION is disabled.
X##  You can find more information about IP binding and configuration
X##  on the Apache website: http://httpd.apache.org/docs/2.2/bind.html
X##  To find out which binding was used to build httpd use the command
X##   $> httpd -V
X
XMAKE_ENV+=	EXAMPLESDIR=${EXAMPLESDIR}
X
X.if empty(PORT_OPTIONS:MDOCS)
XMAKE_ENV+=	NOPORTDOCS=yes
X.endif
X
XMAN1=		ab.1 apxs.1 dbmmanage.1 htdbm.1 htdigest.1 htpasswd.1 httxt2dbm.1 
logresolve.1
XMAN8=		apachectl.8 htcacheclean.8 httpd.8 rotatelogs.8 suexec.8
X
XPORTDOCS=	* #don't blame me ;-)
719135d6ba562282287bc1faeea0b3cc
exit



-- 
Cheers,
Cy Schubert <Cy.Schubert@komquats.com>
FreeBSD UNIX:  <cy@FreeBSD.org>   Web:  http://www.FreeBSD.org

	The need of the many outweighs the greed of the few.





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201303061616.r26GGQA4007583>