From owner-freebsd-apache@FreeBSD.ORG Sun Mar 3 18:05:14 2013 Return-Path: Delivered-To: apache@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 4C007500; Sun, 3 Mar 2013 18:05:14 +0000 (UTC) (envelope-from ohauer@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) by mx1.freebsd.org (Postfix) with ESMTP id 0ACC219A; Sun, 3 Mar 2013 18:05:13 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.6/8.14.6) with ESMTP id r23I5D3J068525; Sun, 3 Mar 2013 18:05:13 GMT (envelope-from ohauer@freefall.freebsd.org) Received: (from ohauer@localhost) by freefall.freebsd.org (8.14.6/8.14.6/Submit) id r23I5DKT068521; Sun, 3 Mar 2013 18:05:13 GMT (envelope-from ohauer) Date: Sun, 3 Mar 2013 18:05:13 GMT Message-Id: <201303031805.r23I5DKT068521@freefall.freebsd.org> To: ohauer@FreeBSD.org, apache@FreeBSD.org, ohauer@FreeBSD.org From: ohauer@FreeBSD.org Subject: Re: ports/175510: Update of net/spread4 port to version 4.2.0 X-BeenThere: freebsd-apache@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Support of apache-related ports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 03 Mar 2013 18:05:14 -0000 Synopsis: Update of net/spread4 port to version 4.2.0 Responsible-Changed-From-To: apache->ohauer Responsible-Changed-By: ohauer Responsible-Changed-When: Sun Mar 3 18:04:46 UTC 2013 Responsible-Changed-Why: I'll take it http://www.freebsd.org/cgi/query-pr.cgi?pr=175510 From owner-freebsd-apache@FreeBSD.ORG Mon Mar 4 11:06:09 2013 Return-Path: Delivered-To: apache@FreeBSD.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 8D29BCE3 for ; Mon, 4 Mar 2013 11:06:09 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) by mx1.freebsd.org (Postfix) with ESMTP id 7F7D0DD1 for ; Mon, 4 Mar 2013 11:06:09 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.6/8.14.6) with ESMTP id r24B69Ch037983 for ; Mon, 4 Mar 2013 11:06:09 GMT (envelope-from owner-bugmaster@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.6/8.14.6/Submit) id r24B696l037981 for apache@FreeBSD.org; Mon, 4 Mar 2013 11:06:09 GMT (envelope-from owner-bugmaster@FreeBSD.org) Date: Mon, 4 Mar 2013 11:06:09 GMT Message-Id: <201303041106.r24B696l037981@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: gnats set sender to owner-bugmaster@FreeBSD.org using -f From: FreeBSD bugmaster To: apache@FreeBSD.org Subject: Current problem reports assigned to apache@FreeBSD.org X-BeenThere: freebsd-apache@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Support of apache-related ports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Mar 2013 11:06:09 -0000 Note: to view an individual PR, use: http://www.freebsd.org/cgi/query-pr.cgi?pr=(number). The following is a listing of current problems submitted by FreeBSD users. These represent problem reports covering all versions including experimental development code and obsolete releases. S Tracker Resp. Description -------------------------------------------------------------------------------- o ports/174617 apache [new port] No www/apache24 in the ports tree o ports/165809 apache add mod_proxy patch to www/apache22 o ports/157554 apache www/apache22: Apache RLimitNPROC does not work as inte o ports/125183 apache www/apache22 wrong SUEXEC_DOCROOT o ports/124375 apache security/heimdal: www/mod_auth_kerb doesn't compile ag 5 problems total. From owner-freebsd-apache@FreeBSD.ORG Tue Mar 5 06:56:03 2013 Return-Path: Delivered-To: apache@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 6183CC96 for ; Tue, 5 Mar 2013 06:56:03 +0000 (UTC) (envelope-from jau@jau.iki.fi) Received: from jau.iki.fi (ip193-64-26-117.cust.eunet.fi [193.64.26.117]) by mx1.freebsd.org (Postfix) with ESMTP id BA0223D5 for ; Tue, 5 Mar 2013 06:56:01 +0000 (UTC) Received: from jau.iki.fi (localhost [127.0.0.1]) by jau.iki.fi (8.14.6/8.14.5) with ESMTP id r256tjWw002197 for ; Tue, 5 Mar 2013 08:55:50 +0200 (EET) (envelope-from jau@jau.iki.fi) Received: (from jau@localhost) by jau.iki.fi (8.14.6/8.14.5/Submit) id r256tjs3002193 for apache@freebsd.org; Tue, 5 Mar 2013 08:55:45 +0200 (EET) (envelope-from jau) Message-Id: <201303050655.r256tjs3002193@jau.iki.fi> Subject: Apache22 build fails To: apache@freebsd.org Date: Tue, 5 Mar 2013 08:55:45 +0200 (EET) From: jau@iki.fi (Jukka A. Ukkonen) Sender: jau@iki.fi Latin-Date: dies Martis V Martie a.d. MMXIII Organization: Private person OS-Platform: FreeBSD Phone: +358-9-6215280 (home) / +358-500-606671 (gsm) Content-Conversion: prohibited X-Mailer: ELM [version 2.4 PL25+pgp] MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.2.7 (jau.iki.fi [127.0.0.1]); Tue, 05 Mar 2013 08:55:51 +0200 (EET) X-BeenThere: freebsd-apache@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: jau@iki.fi List-Id: Support of apache-related ports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Mar 2013 06:56:03 -0000 Hello, In case you have not noticed apache22 seems to fail with this error report... /usr/local/share/apr/build-1/libtool --silent --mode=link cc -g -O2 -pipe -I/usr/local/include -fno-strict-aliasing -L/usr/lib -L/usr/local/lib/db42 -Wl,-rpath=/usr/local/lib -L/usr/local/lib -pthread -o htpasswd htpasswd.lo -lm -L/usr/local/lib -Wl,-R/usr/local/lib -lpcre /usr/local/lib/libaprutil-1.la -ldb-4.2 -lgdbm -lc -lexpat -liconv /usr/local/lib/libapr-1.la -lcrypt -pthread -lcrypt /usr/local/share/apr/build-1/libtool --silent --mode=link cc -g -O2 -pipe -I/usr/local/include -fno-strict-aliasing -L/usr/lib -L/usr/local/lib/db42 -Wl,-rpath=/usr/local/lib -L/usr/local/lib -pthread -o htcacheclean htcacheclean.lo -lm -L/usr/local/lib -Wl,-R/usr/local/lib -lpcre /usr/local/lib/libaprutil-1.la -ldb-4.2 -lgdbm -lc -lexpat -liconv /usr/local/lib/libapr-1.la -lcrypt -pthread /usr/local/share/apr/build-1/libtool --silent --mode=link cc -g -O2 -pipe -I/usr/local/include -fno-strict-aliasing -L/usr/lib -L/usr/local/lib/db42 -Wl,-rpath=/usr/local/lib -L/usr/local/lib -pthread -o ab ab.lo -lm -L/usr/local/lib -Wl,-R/usr/local/lib -lpcre /usr/local/lib/libaprutil-1.la -ldb-4.2 -lgdbm -lc -lexpat -liconv /usr/local/lib/libapr-1.la -lcrypt -pthread -lssl -lcrypto ab.o: In function `main': /usr/ports/www/apache22/work/httpd-2.2.24/support/ab.c:2246: undefined reference to `TLSv1_2_client_method' /usr/ports/www/apache22/work/httpd-2.2.24/support/ab.c:2244: undefined reference to `TLSv1_1_client_method' *** [ab] Error code 1 1 error *** [all-recursive] Error code 1 The most peculiar thing about this is that the resident libssl.so under /usr/local/lib definitely contains both of the functions that are above reported as undefined. My first guess for the reason for this error is having -L/usr/lib before -L/usr/local/lib in the libtool argument list. So, assuming that ld gets its arguments in the same order as they were passed to libtool, it will find an older version of libssl in /usr/lib and try to load that instead of the more recent version in /usr/local/lib. The default system version of libssl does not contain the functions mentioned in the error messages. I hope this helps. Cheers, // jau .--- ..- -.- -.- .- .- .-.-.- ..- -.- -.- --- -. . -. / Jukka A. Ukkonen, Oxit Ltd, Finland /__ M.Sc. (sw-eng & cs) (Phone) +358-500-606-671 / Internet: Jukka.Ukkonen(a)Oxit.Fi / Internet: jau(a)iki.fi v .--- .- ..- ...-.- .. -.- .. .-.-.- ..-. .. + + + + My opinions are mine and mine alone, not my employers. + + + + From owner-freebsd-apache@FreeBSD.ORG Tue Mar 5 16:34:57 2013 Return-Path: Delivered-To: apache@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 70F9CBC2; Tue, 5 Mar 2013 16:34:57 +0000 (UTC) (envelope-from edwin@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) by mx1.freebsd.org (Postfix) with ESMTP id 49EFCE16; Tue, 5 Mar 2013 16:34:57 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.6/8.14.6) with ESMTP id r25GYvXL038021; Tue, 5 Mar 2013 16:34:57 GMT (envelope-from edwin@freefall.freebsd.org) Received: (from edwin@localhost) by freefall.freebsd.org (8.14.6/8.14.6/Submit) id r25GYug8038020; Tue, 5 Mar 2013 16:34:56 GMT (envelope-from edwin) Date: Tue, 5 Mar 2013 16:34:56 GMT Message-Id: <201303051634.r25GYug8038020@freefall.freebsd.org> To: edwin@FreeBSD.org, freebsd-ports-bugs@FreeBSD.org, apache@FreeBSD.org From: edwin@FreeBSD.org Subject: Re: ports/176659: www/apache22 2.2.24 build error X-BeenThere: freebsd-apache@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Support of apache-related ports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Mar 2013 16:34:57 -0000 Synopsis: www/apache22 2.2.24 build error Responsible-Changed-From-To: freebsd-ports-bugs->apache Responsible-Changed-By: edwin Responsible-Changed-When: Tue Mar 5 16:34:56 UTC 2013 Responsible-Changed-Why: Over to maintainer (via the GNATS Auto Assign Tool) http://www.freebsd.org/cgi/query-pr.cgi?pr=176659 From owner-freebsd-apache@FreeBSD.ORG Tue Mar 5 22:01:53 2013 Return-Path: Delivered-To: apache@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 54E80126; Tue, 5 Mar 2013 22:01:53 +0000 (UTC) (envelope-from ohauer@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) by mx1.freebsd.org (Postfix) with ESMTP id 26CF4F69; Tue, 5 Mar 2013 22:01:53 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.6/8.14.6) with ESMTP id r25M1rfT000655; Tue, 5 Mar 2013 22:01:53 GMT (envelope-from ohauer@freefall.freebsd.org) Received: (from ohauer@localhost) by freefall.freebsd.org (8.14.6/8.14.6/Submit) id r25M1n1H000654; Tue, 5 Mar 2013 22:01:49 GMT (envelope-from ohauer) Date: Tue, 5 Mar 2013 22:01:49 GMT Message-Id: <201303052201.r25M1n1H000654@freefall.freebsd.org> To: admin@liepajaport.lv, ohauer@FreeBSD.org, apache@FreeBSD.org From: ohauer@FreeBSD.org Subject: Re: ports/176659: www/apache22 2.2.24 build error X-BeenThere: freebsd-apache@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Support of apache-related ports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Mar 2013 22:01:53 -0000 Synopsis: www/apache22 2.2.24 build error State-Changed-From-To: open->analyzed State-Changed-By: ohauer State-Changed-When: Tue Mar 5 22:00:35 UTC 2013 State-Changed-Why: Thanks for the PR, I submitted a workaround and hope to find a better fix in near time. http://www.freebsd.org/cgi/query-pr.cgi?pr=176659 From owner-freebsd-apache@FreeBSD.ORG Tue Mar 5 22:08:36 2013 Return-Path: Delivered-To: apache@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 3BDC0192 for ; Tue, 5 Mar 2013 22:08:36 +0000 (UTC) (envelope-from ohauer@FreeBSD.org) Received: from p578be941.dip0.t-ipconnect.de (p578be941.dip0.t-ipconnect.de [87.139.233.65]) by mx1.freebsd.org (Postfix) with ESMTP id EDB83F96 for ; Tue, 5 Mar 2013 22:08:35 +0000 (UTC) Received: from [192.168.0.100] (cde1100.uni.vrs [192.168.0.100]) (Authenticated sender: ohauer) by p578be941.dip0.t-ipconnect.de (Postfix) with ESMTPSA id 3226F208F3; Tue, 5 Mar 2013 23:08:32 +0100 (CET) Message-ID: <51366CE0.70502@FreeBSD.org> Date: Tue, 05 Mar 2013 23:08:32 +0100 From: Olli Hauer User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20130215 Thunderbird/17.0.3 MIME-Version: 1.0 To: jau@iki.fi Subject: Re: Apache22 build fails References: <201303050655.r256tjs3002193@jau.iki.fi> In-Reply-To: <201303050655.r256tjs3002193@jau.iki.fi> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: apache@freebsd.org X-BeenThere: freebsd-apache@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Support of apache-related ports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Mar 2013 22:08:36 -0000 On 2013-03-05 07:55, Jukka A. Ukkonen wrote: > > Hello, > In case you have not noticed apache22 seems to fail with this error > report... > > /usr/local/share/apr/build-1/libtool --silent --mode=link cc -g -O2 -pipe > -I/usr/local/include -fno-strict-aliasing -L/usr/lib -L/usr/local/lib/db42 > -Wl,-rpath=/usr/local/lib -L/usr/local/lib -pthread -o htpasswd htpasswd.lo > -lm -L/usr/local/lib -Wl,-R/usr/local/lib -lpcre /usr/local/lib/libaprutil-1.la > -ldb-4.2 -lgdbm -lc -lexpat -liconv /usr/local/lib/libapr-1.la -lcrypt -pthread > -lcrypt /usr/local/share/apr/build-1/libtool --silent --mode=link cc -g -O2 > -pipe -I/usr/local/include -fno-strict-aliasing -L/usr/lib -L/usr/local/lib/db42 > -Wl,-rpath=/usr/local/lib -L/usr/local/lib -pthread -o htcacheclean > htcacheclean.lo -lm -L/usr/local/lib -Wl,-R/usr/local/lib -lpcre > /usr/local/lib/libaprutil-1.la -ldb-4.2 -lgdbm -lc -lexpat -liconv > /usr/local/lib/libapr-1.la -lcrypt -pthread > /usr/local/share/apr/build-1/libtool --silent --mode=link cc -g -O2 -pipe > -I/usr/local/include -fno-strict-aliasing -L/usr/lib -L/usr/local/lib/db42 > -Wl,-rpath=/usr/local/lib -L/usr/local/lib -pthread -o ab ab.lo -lm > -L/usr/local/lib -Wl,-R/usr/local/lib -lpcre /usr/local/lib/libaprutil-1.la > -ldb-4.2 -lgdbm -lc -lexpat -liconv /usr/local/lib/libapr-1.la -lcrypt > -pthread -lssl -lcrypto ab.o: In function `main': > /usr/ports/www/apache22/work/httpd-2.2.24/support/ab.c:2246: undefined > reference to `TLSv1_2_client_method' > /usr/ports/www/apache22/work/httpd-2.2.24/support/ab.c:2244: undefined > reference to `TLSv1_1_client_method' > *** [ab] Error code 1 > 1 error > *** [all-recursive] Error code 1 > > > The most peculiar thing about this is that the resident libssl.so under > /usr/local/lib definitely contains both of the functions that are above > reported as undefined. > > My first guess for the reason for this error is having -L/usr/lib before > -L/usr/local/lib in the libtool argument list. So, assuming that ld gets > its arguments in the same order as they were passed to libtool, it will > find an older version of libssl in /usr/lib and try to load that instead > of the more recent version in /usr/local/lib. The default system version > of libssl does not contain the functions mentioned in the error messages. > > I hope this helps. > > > Cheers, > // jau > .--- ..- -.- -.- .- .- .-.-.- ..- -.- -.- --- -. . -. > / Jukka A. Ukkonen, Oxit Ltd, Finland > /__ M.Sc. (sw-eng & cs) (Phone) +358-500-606-671 > / Internet: Jukka.Ukkonen(a)Oxit.Fi > / Internet: jau(a)iki.fi > v > .--- .- ..- ...-.- .. -.- .. .-.-.- ..-. .. > + + + + My opinions are mine and mine alone, not my employers. + + + + > _______________________________________________ > freebsd-apache@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-apache > To unsubscribe, send any mail to "freebsd-apache-unsubscribe@freebsd.org" > > Hi Jukka, you are right but changing this only for the ab utility is tricky. I just committed a workaround. -- Regards, olli From owner-freebsd-apache@FreeBSD.ORG Tue Mar 5 22:10:01 2013 Return-Path: Delivered-To: apache@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 3EB7C2A6 for ; Tue, 5 Mar 2013 22:10:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) by mx1.freebsd.org (Postfix) with ESMTP id 30925FA8 for ; Tue, 5 Mar 2013 22:10:01 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.6/8.14.6) with ESMTP id r25MA1TB001206 for ; Tue, 5 Mar 2013 22:10:01 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.6/8.14.6/Submit) id r25MA1iJ001205; Tue, 5 Mar 2013 22:10:01 GMT (envelope-from gnats) Date: Tue, 5 Mar 2013 22:10:01 GMT Message-Id: <201303052210.r25MA1iJ001205@freefall.freebsd.org> To: apache@FreeBSD.org From: dfilter@FreeBSD.ORG (dfilter service) Subject: Re: ports/176659: commit references a PR X-BeenThere: freebsd-apache@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: dfilter service List-Id: Support of apache-related ports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Mar 2013 22:10:01 -0000 The following reply was made to PR ports/176659; it has been noted by GNATS. From: dfilter@FreeBSD.ORG (dfilter service) To: bug-followup@FreeBSD.org Cc: Subject: Re: ports/176659: commit references a PR Date: Tue, 5 Mar 2013 22:00:21 +0000 (UTC) Author: ohauer Date: Tue Mar 5 22:00:14 2013 New Revision: 313481 URL: http://svnweb.freebsd.org/changeset/ports/313481 Log: - disable new ab SSL extensions until a better way is found. only builds with OpenSSL from ports are affected which is not default, so no version bump. Noted on the apache@ list by Jukka A. Ukkonen and per PR by Arnis Rozentals PR: 176659 Modified: head/www/apache22/files/patch-support__ab.c Modified: head/www/apache22/files/patch-support__ab.c ============================================================================== --- head/www/apache22/files/patch-support__ab.c Tue Mar 5 20:47:17 2013 (r313480) +++ head/www/apache22/files/patch-support__ab.c Tue Mar 5 22:00:14 2013 (r313481) @@ -1,5 +1,17 @@ --- ./support/ab.c.orig 2010-01-07 10:11:53.000000000 -0500 +++ ./support/ab.c 2010-05-06 19:37:54.262732305 -0400 +@@ -200,9 +200,11 @@ + #else + #define AB_SSL_CIPHER_CONST + #endif ++/* prevent build issues with openssl from ports + #ifdef SSL_OP_NO_TLSv1_2 + #define HAVE_TLSV1_X + #endif ++*/ + #endif + + #include @@ -221,13 +221,18 @@ /* maximum number of requests on a time limited test */ #define MAX_REQUESTS (INT_MAX > 50000 ? 50000 : INT_MAX) _______________________________________________ svn-ports-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-ports-all To unsubscribe, send any mail to "svn-ports-all-unsubscribe@freebsd.org" From owner-freebsd-apache@FreeBSD.ORG Wed Mar 6 16:16:36 2013 Return-Path: Delivered-To: freebsd-apache@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id D3DB1EE7 for ; Wed, 6 Mar 2013 16:16:36 +0000 (UTC) (envelope-from Cy.Schubert@komquats.com) Received: from smtp-out-05.shaw.ca (smtp-out-05.shaw.ca [64.59.134.13]) by mx1.freebsd.org (Postfix) with ESMTP id 496ED5F4 for ; Wed, 6 Mar 2013 16:16:32 +0000 (UTC) X-Cloudmark-SP-Filtered: true X-Cloudmark-SP-Result: v=1.1 cv=x4wvebh7U2otgv2g1Q/ELETKOrtBkVhBqv1eL6GwWag= c=1 sm=1 a=QrugwKR0C_UA:10 a=wAGQQ9Az6v0A:10 a=BLceEmwcHowA:10 a=ICAaq7hcmGcA:10 a=kj9zAlcOel0A:10 a=IbtKDeXwb2+SRU442/pi3A==:17 a=mV9VRH-2AAAA:8 a=6I5d2MoRAAAA:8 a=EVL1YSpRAAAA:8 a=A1X0JdhQAAAA:8 a=LZT3cjOAAAAA:8 a=ofnadKOXAAAA:8 a=X3osjzD9AAAA:8 a=P5wrnlEIAAAA:8 a=hl8ePGIvZrnaP1wsjiQA:9 a=CjuIK1q_8ugA:10 a=Sf_gFPzhefAA:10 a=XTFgcO-VnicA:10 a=itM7fkzc1zYA:10 a=SV7veod9ZcQA:10 a=Y6qChIQXU1wA:10 a=KlEQ0vv7NekA:10 a=5HzsUQje9K24GuXg:21 a=VfZ7Brsi2Vmba1h7:21 a=PYpD6mMS6CyM4xqn:21 a=HpAAvcLHHh0Zw7uRqdWCyQ==:117 Received: from unknown (HELO spqr.komquats.com) ([96.50.7.119]) by smtp-out-05.shaw.ca with ESMTP; 06 Mar 2013 09:16:35 -0700 Received: from slippy.cwsent.com (slippy8 [10.2.2.6]) by spqr.komquats.com (Postfix) with ESMTP id 82CEF305; Wed, 6 Mar 2013 08:16:27 -0800 (PST) Received: from slippy (localhost [127.0.0.1]) by slippy.cwsent.com (8.14.6/8.14.6) with ESMTP id r26GGQA4007583; Wed, 6 Mar 2013 08:16:26 -0800 (PST) (envelope-from Cy.Schubert@komquats.com) Message-Id: <201303061616.r26GGQA4007583@slippy.cwsent.com> X-Mailer: exmh version 2.8.0 04/21/2012 with nmh-1.5 From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.komquats.com/ To: freebsd-apache@freebsd.org Subject: www/apache24 Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Wed, 06 Mar 2013 08:16:26 -0800 Cc: ohauser@freebsd.org X-BeenThere: freebsd-apache@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: Cy Schubert List-Id: Support of apache-related ports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Mar 2013 16:16:36 -0000 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 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 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 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 X #endif X+#include X+#include 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 X #include X #include X+#include X #include X #include 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 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 X X@@ -181,7 +181,7 @@ X # logged here. If you *do* define an error logfile for a 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- 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 X X X@@ -418,3 +418,4 @@ X #RequestHeader unset DNT env=bad_DNT X # 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 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 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 X AssignUserFromPath "^/home/([^/]+)" www-data $1-web X 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 /* 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 . X+ * Licensed under the same terms as the rest of Apache. X+ * X+ * Portions copyright 2008 Knut Auvor Grythe . 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 X+#endif X+#if APR_HAVE_SYS_TYPES_H X+#include 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 /* for IRIX, FD_SET calls bzero() */ X+#endif X+#ifdef HAVE_TIME_H X+#include X+#endif X+#ifdef HAVE_SYS_PROCESSOR_H X+#include /* for bindprocessor() */ X+#endif X+ X+#if HAVE_LIBCAP X+#include X+#endif X+ X+#include X+#include 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 . X+ * Licensed under the same terms as the rest of Apache. X+ * X+ * Portions copyright 2008 Knut Auvor Grythe . 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 . X+ * Licensed under the same terms as the rest of Apache. X+ * X+ * Portions copyright 2008 Knut Auvor Grythe . 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 . X+ * Licensed under the same terms as the rest of Apache. X+ * X+ * Portions copyright 2008 Knut Auvor Grythe . 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 . X+ * Licensed under the same terms as the rest of Apache. X+ * X+ * Portions copyright 2008 Knut Auvor Grythe . 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 X AcceptFilter http none X AcceptFilter https none X 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 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 FreeBSD UNIX: Web: http://www.FreeBSD.org The need of the many outweighs the greed of the few. From owner-freebsd-apache@FreeBSD.ORG Fri Mar 8 18:30:08 2013 Return-Path: Delivered-To: apache@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id E13CD386; Fri, 8 Mar 2013 18:30:08 +0000 (UTC) (envelope-from edwin@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) by mx1.freebsd.org (Postfix) with ESMTP id BCF07E02; Fri, 8 Mar 2013 18:30:08 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.6/8.14.6) with ESMTP id r28IU8fT022401; Fri, 8 Mar 2013 18:30:08 GMT (envelope-from edwin@freefall.freebsd.org) Received: (from edwin@localhost) by freefall.freebsd.org (8.14.6/8.14.6/Submit) id r28IU8As022400; Fri, 8 Mar 2013 18:30:08 GMT (envelope-from edwin) Date: Fri, 8 Mar 2013 18:30:08 GMT Message-Id: <201303081830.r28IU8As022400@freefall.freebsd.org> To: edwin@FreeBSD.org, freebsd-ports-bugs@FreeBSD.org, apache@FreeBSD.org From: edwin@FreeBSD.org Subject: Re: ports/176759: [patch] www/serf plist mentions serf_private.h, which it doesn't install X-BeenThere: freebsd-apache@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Support of apache-related ports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Mar 2013 18:30:09 -0000 Synopsis: [patch] www/serf plist mentions serf_private.h, which it doesn't install Responsible-Changed-From-To: freebsd-ports-bugs->apache Responsible-Changed-By: edwin Responsible-Changed-When: Fri Mar 8 18:30:08 UTC 2013 Responsible-Changed-Why: Over to maintainer (via the GNATS Auto Assign Tool) http://www.freebsd.org/cgi/query-pr.cgi?pr=176759 From owner-freebsd-apache@FreeBSD.ORG Sat Mar 9 23:20:01 2013 Return-Path: Delivered-To: apache@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 7F5E64A8 for ; Sat, 9 Mar 2013 23:20:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) by mx1.freebsd.org (Postfix) with ESMTP id 4D2ECF28 for ; Sat, 9 Mar 2013 23:20:01 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.6/8.14.6) with ESMTP id r29NK1fl066036 for ; Sat, 9 Mar 2013 23:20:01 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.6/8.14.6/Submit) id r29NK1YY066025; Sat, 9 Mar 2013 23:20:01 GMT (envelope-from gnats) Date: Sat, 9 Mar 2013 23:20:01 GMT Message-Id: <201303092320.r29NK1YY066025@freefall.freebsd.org> To: apache@FreeBSD.org From: Eric Krausser Subject: Re: ports/176759: [patch] www/serf plist mentions serf_private.h, which it doesn't install X-BeenThere: freebsd-apache@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: Eric Krausser List-Id: Support of apache-related ports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 09 Mar 2013 23:20:01 -0000 The following reply was made to PR ports/176759; it has been noted by GNATS. From: Eric Krausser To: bug-followup@FreeBSD.org, hag@linnaean.org Cc: Subject: Re: ports/176759: [patch] www/serf plist mentions serf_private.h, which it doesn't install Date: Sun, 10 Mar 2013 00:09:46 +0100 The patch works for me, too. Thank you!