+++ /dev/null
---- httpd-2.2.3/support/apxs.in-orig 2006-11-01 00:59:27.000000000 +0100
-+++ httpd-2.2.3/support/apxs.in 2006-11-01 00:59:54.000000000 +0100
-@@ -35,6 +35,7 @@
- my $exec_prefix = get_vars("exec_prefix");
- my $datadir = get_vars("datadir");
- my $localstatedir = get_vars("localstatedir");
-+my $libdir = get_vars("libdir");
- my $CFG_TARGET = get_vars("progname");
- my $CFG_SYSCONFDIR = get_vars("sysconfdir");
- my $CFG_CFLAGS = join ' ', map { get_vars($_) }
-@@ -44,6 +45,7 @@
- my $CFG_CC = get_vars("CC");
- my $libexecdir = get_vars("libexecdir");
- my $CFG_LIBEXECDIR = eval qq("$libexecdir");
-+my $CFG_DESTDIR = '';
- my $sbindir = get_vars("sbindir");
- my $CFG_SBINDIR = eval qq("$sbindir");
- my $ltflags = $ENV{'LTFLAGS'};
-@@ -171,7 +173,7 @@
- my ($val) = $2;
- my $oldval = eval "\$CFG_$var";
-
-- unless ($var and $oldval) {
-+ unless ($var and defined $oldval) {
- print STDERR "apxs:Error: no config variable $var\n";
- &usage;
- }
-@@ -199,11 +201,10 @@
- ($httpd = $0) =~ s:support/apxs$::;
- }
-
--unless (-x "$httpd") {
-- error("$httpd not found or not executable");
-- exit 1;
-+if (not -x "$httpd") {
-+ print STDERR "Note: $httpd not found or not executable.\n";
- }
--
-+else {
- unless (grep /mod_so/, `. $envvars && $httpd -l`) {
- error("Sorry, no shared object support for Apache");
- error("available under your platform. Make sure");
-@@ -211,7 +212,7 @@
- error("your server binary `$httpd'.");
- exit 1;
- }
--
-+}
- sub get_config_vars{
- my ($file, $rh_config) = @_;
-
-@@ -479,8 +480,8 @@
- $t =~ s|\.[^./\\]+$|\.so|;
- if ($opt_i) {
- push(@cmds, "$installbuilddir/instdso.sh SH_LIBTOOL='" .
-- "$libtool' $f $CFG_LIBEXECDIR");
-- push(@cmds, "chmod 755 $CFG_LIBEXECDIR/$t");
-+ "$libtool' $f $CFG_DESTDIR$CFG_LIBEXECDIR");
-+ push(@cmds, "chmod 755 $CFG_DESTDIR$CFG_LIBEXECDIR/$t");
- }
-
- # determine module symbolname and filename
+++ /dev/null
---- httpd-2.2.14-v/server/mpm/worker/worker.c 2007-07-18 00:48:25.000000000 +1000
-+++ httpd-2.2.14/server/mpm/worker/worker.c 2009-11-02 09:40:23.129750043 +1100
-@@ -32,6 +32,7 @@
- #include "apr_poll.h"
- #define APR_WANT_STRFUNC
- #include "apr_want.h"
-+#include "apr_atomic.h"
-
- #if APR_HAVE_UNISTD_H
- #include <unistd.h>
-@@ -226,10 +227,73 @@
- */
- #define WORKER_SIGNAL AP_SIG_GRACEFUL
-
-+#ifdef HAVE_PTHREAD_KILL
-+/* Variables for suspending the worker threads. */
-+static volatile sig_atomic_t suspend_workers = 0;
-+static apr_uint32_t suspended_workers;
-+static apr_os_thread_t **worker_os_threads;
-+#endif
-+
- /* An array of socket descriptors in use by each thread used to
- * perform a non-graceful (forced) shutdown of the server. */
- static apr_socket_t **worker_sockets;
-
-+#ifdef HAVE_PTHREAD_KILL
-+static void worker_signal_handler(int sig)
-+{
-+ /* wait here if we are being suspended, otherwise just exit */
-+ if (suspend_workers) {
-+ sigset_t sigset;
-+
-+ apr_atomic_inc32(&suspended_workers);
-+
-+ sigfillset(&sigset);
-+ sigdelset(&sigset, WORKER_SIGNAL);
-+ sigsuspend(&sigset);
-+ }
-+}
-+
-+static void close_worker_sockets(void)
-+{
-+ int i, csd;
-+
-+ suspend_workers = 1;
-+ apr_atomic_set32(&suspended_workers, 0);
-+
-+ /* suspend worker threads */
-+ for (i = 0; i < ap_threads_per_child; i++) {
-+ if (worker_os_threads[i]) {
-+ pthread_kill(*worker_os_threads[i], WORKER_SIGNAL);
-+ }
-+ }
-+
-+ /* wait for threads to suspend, but press ahead after a while anyway */
-+ for (i = 0;
-+ apr_atomic_read32(&suspended_workers) < ap_threads_per_child && i < 25;
-+ i++) {
-+ apr_sleep(apr_time_from_sec(1) / 5);
-+ }
-+
-+ /* shut down all client sockets */
-+ for (i = 0; i < ap_threads_per_child; i++) {
-+ if (worker_sockets[i]) {
-+ apr_os_sock_get(&csd, worker_sockets[i]);
-+ if (csd != -1) {
-+ shutdown(csd, SHUT_RDWR);
-+ }
-+ }
-+ }
-+
-+ suspend_workers = 0;
-+
-+ /* resume worker threads */
-+ for (i = 0; i < ap_threads_per_child; i++) {
-+ if (worker_os_threads[i]) {
-+ pthread_kill(*worker_os_threads[i], WORKER_SIGNAL);
-+ }
-+ }
-+}
-+#else
- static void close_worker_sockets(void)
- {
- int i;
-@@ -240,6 +304,7 @@
- }
- }
- }
-+#endif
-
- static void wakeup_listener(void)
- {
-@@ -836,7 +901,7 @@
-
- #ifdef HAVE_PTHREAD_KILL
- unblock_signal(WORKER_SIGNAL);
-- apr_signal(WORKER_SIGNAL, dummy_signal_handler);
-+ apr_signal(WORKER_SIGNAL, worker_signal_handler);
- #endif
-
- while (!workers_may_exit) {
-@@ -977,6 +1042,10 @@
-
- worker_sockets = apr_pcalloc(pchild, ap_threads_per_child
- * sizeof(apr_socket_t *));
-+#ifdef HAVE_PTHREAD_KILL
-+ worker_os_threads = apr_pcalloc(pchild, ap_threads_per_child
-+ * sizeof(*worker_os_threads));
-+#endif
-
- loops = prev_threads_created = 0;
- while (1) {
-@@ -1012,6 +1081,9 @@
- /* let the parent decide how bad this really is */
- clean_child_exit(APEXIT_CHILDSICK);
- }
-+#ifdef HAVE_PTHREAD_KILL
-+ apr_os_thread_get(&worker_os_threads[i], threads[i]);
-+#endif
- threads_created++;
- }
- /* Start the listener only when there are workers available */
+++ /dev/null
-Index: httpd-2.2.x/modules/ssl/ssl_private.h
-===================================================================
---- httpd-2.2.x/modules/ssl/ssl_private.h (revision 833672)
-+++ httpd-2.2.x/modules/ssl/ssl_private.h (working copy)
-@@ -395,6 +395,9 @@ typedef struct {
- #if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT)
- const char *szCryptoDevice;
- #endif
-+#ifndef OPENSSL_NO_TLSEXT
-+ ssl_enabled_t session_tickets_enabled;
-+#endif
- struct {
- void *pV1, *pV2, *pV3, *pV4, *pV5, *pV6, *pV7, *pV8, *pV9, *pV10;
- } rCtx;
-@@ -545,6 +548,7 @@ const char *ssl_cmd_SSLRequire(cmd_parm
- const char *ssl_cmd_SSLRenegBufferSize(cmd_parms *cmd, void *dcfg, const char *arg);
- const char *ssl_cmd_SSLStrictSNIVHostCheck(cmd_parms *cmd, void *dcfg, int flag);
- const char *ssl_cmd_SSLInsecureRenegotiation(cmd_parms *cmd, void *dcfg, int flag);
-+const char *ssl_cmd_SSLSessionTicketExtension(cmd_parms *cmd, void *cdfg, int flag);
-
- const char *ssl_cmd_SSLProxyEngine(cmd_parms *cmd, void *dcfg, int flag);
- const char *ssl_cmd_SSLProxyProtocol(cmd_parms *, void *, const char *);
-Index: httpd-2.2.x/modules/ssl/ssl_engine_init.c
-===================================================================
---- httpd-2.2.x/modules/ssl/ssl_engine_init.c (revision 833672)
-+++ httpd-2.2.x/modules/ssl/ssl_engine_init.c (working copy)
-@@ -382,6 +382,15 @@ static void ssl_init_ctx_tls_extensions(
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, s);
- ssl_die();
- }
-+
-+ /*
-+ * Session tickets (stateless resumption)
-+ */
-+ if ((myModConfig(s))->session_tickets_enabled == SSL_ENABLED_FALSE) {
-+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
-+ "Disabling TLS session ticket support");
-+ SSL_CTX_set_options(mctx->ssl_ctx, SSL_OP_NO_TICKET);
-+ }
- }
- #endif
-
-@@ -1018,6 +1027,11 @@ void ssl_init_CheckServers(server_rec *b
-
- BOOL conflict = FALSE;
-
-+#if !defined(OPENSSL_NO_TLSEXT) && OPENSSL_VERSION_NUMBER < 0x009080d0
-+ unsigned char *tlsext_tick_keys = NULL;
-+ long tick_keys_len;
-+#endif
-+
- /*
- * Give out warnings when a server has HTTPS configured
- * for the HTTP port or vice versa
-@@ -1042,6 +1056,25 @@ void ssl_init_CheckServers(server_rec *b
- ssl_util_vhostid(p, s),
- DEFAULT_HTTP_PORT, DEFAULT_HTTPS_PORT);
- }
-+
-+#if !defined(OPENSSL_NO_TLSEXT) && OPENSSL_VERSION_NUMBER < 0x009080d0
-+ /*
-+ * When using OpenSSL versions 0.9.8f through 0.9.8l, configure
-+ * the same ticket encryption parameters for every SSL_CTX (workaround
-+ * for SNI+SessionTicket extension interoperability issue in these versions)
-+ */
-+ if ((sc->enabled == SSL_ENABLED_TRUE) ||
-+ (sc->enabled == SSL_ENABLED_OPTIONAL)) {
-+ if (!tlsext_tick_keys) {
-+ tick_keys_len = SSL_CTX_ctrl((sc->server->ssl_ctx),SSL_CTRL_SET_TLSEXT_TICKET_KEYS,
-+ (-1),(NULL));
-+ tlsext_tick_keys = (unsigned char *)apr_palloc(p, tick_keys_len);
-+ RAND_bytes(tlsext_tick_keys, tick_keys_len);
-+ }
-+ SSL_CTX_ctrl((sc->server->ssl_ctx),SSL_CTRL_SET_TLSEXT_TICKET_KEYS,
-+ (tick_keys_len),(tlsext_tick_keys));
-+ }
-+#endif
- }
-
- /*
-Index: httpd-2.2.x/modules/ssl/ssl_engine_config.c
-===================================================================
---- httpd-2.2.x/modules/ssl/ssl_engine_config.c (revision 833672)
-+++ httpd-2.2.x/modules/ssl/ssl_engine_config.c (working copy)
-@@ -75,6 +75,9 @@ SSLModConfigRec *ssl_config_global_creat
- #if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT)
- mc->szCryptoDevice = NULL;
- #endif
-+#ifndef OPENSSL_NO_TLSEXT
-+ mc->session_tickets_enabled = SSL_ENABLED_UNSET;
-+#endif
-
- memset(mc->pTmpKeys, 0, sizeof(mc->pTmpKeys));
-
-@@ -1471,6 +1474,26 @@ const char *ssl_cmd_SSLStrictSNIVHostCh
- #endif
- }
-
-+const char *ssl_cmd_SSLSessionTicketExtension(cmd_parms *cmd, void *dcfg, int flag)
-+{
-+#ifndef OPENSSL_NO_TLSEXT
-+ const char *err;
-+ SSLModConfigRec *mc = myModConfig(cmd->server);
-+
-+ if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) {
-+ return err;
-+ }
-+
-+ mc->session_tickets_enabled = flag ? SSL_ENABLED_TRUE : SSL_ENABLED_FALSE;
-+
-+ return NULL;
-+#else
-+ return "SSLSessionTicketExtension failed; OpenSSL is not built with support "
-+ "for TLS extensions. Refer to the documentation, and build "
-+ "a compatible version of OpenSSL.";
-+#endif
-+}
-+
- void ssl_hook_ConfigTest(apr_pool_t *pconf, server_rec *s)
- {
- if (!ap_exists_config_define("DUMP_CERTS")) {
-Index: httpd-2.2.x/modules/ssl/ssl_engine_kernel.c
-===================================================================
---- httpd-2.2.x/modules/ssl/ssl_engine_kernel.c (revision 833672)
-+++ httpd-2.2.x/modules/ssl/ssl_engine_kernel.c (working copy)
-@@ -29,6 +29,7 @@
- time I was too famous.''
- -- Unknown */
- #include "ssl_private.h"
-+#include "util_md5.h"
-
- static void ssl_configure_env(request_rec *r, SSLConnRec *sslconn);
- #ifndef OPENSSL_NO_TLSEXT
-@@ -2010,6 +2011,7 @@ static int ssl_find_vhost(void *serverna
- apr_array_header_t *names;
- int i;
- SSLConnRec *sslcon;
-+ char *sid_ctx;
-
- /* check ServerName */
- if (!strcasecmp(servername, s->server_hostname)) {
-@@ -2074,6 +2076,21 @@ static int ssl_find_vhost(void *serverna
- SSL_set_verify(ssl, SSL_CTX_get_verify_mode(ssl->ctx),
- SSL_CTX_get_verify_callback(ssl->ctx));
- }
-+ /*
-+ * Adjust the session id context. ssl_init_ssl_connection()
-+ * always picks the configuration of the first vhost when
-+ * calling SSL_new(), but we want to tie the session to the
-+ * vhost we have just switched to. Again, we have to make sure
-+ * that we're not overwriting a session id context which was
-+ * possibly set in ssl_hook_Access(), before triggering
-+ * a renegotation.
-+ */
-+ if (!SSL_num_renegotiations(ssl)) {
-+ sid_ctx = ap_md5_binary(c->pool, (unsigned char*)sc->vhost_id,
-+ sc->vhost_id_len);
-+ SSL_set_session_id_context(ssl, (unsigned char *)sid_ctx,
-+ APR_MD5_DIGESTSIZE*2);
-+ }
-
- /*
- * Save the found server into our SSLConnRec for later
-Index: httpd-2.2.x/modules/ssl/mod_ssl.c
-===================================================================
---- httpd-2.2.x/modules/ssl/mod_ssl.c (revision 833672)
-+++ httpd-2.2.x/modules/ssl/mod_ssl.c (working copy)
-@@ -92,6 +92,8 @@ static const command_rec ssl_config_cmds
- SSL_CMD_SRV(RandomSeed, TAKE23,
- "SSL Pseudo Random Number Generator (PRNG) seeding source "
- "(`startup|connect builtin|file:/path|exec:/path [bytes]')")
-+ SSL_CMD_SRV(SessionTicketExtension, FLAG,
-+ "TLS Session Ticket extension support")
-
- /*
- * Per-server context configuration directives