This commit was manufactured by cvs2svn to create tag
'APACHE_2_0_47'.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/tags/2.0.47@100513 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES b/CHANGES
index 7616063..9884dc6 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,9 +1,25 @@
 Changes with Apache 2.0.47
 
-  *) Prevent the server from crashing when entering infinite loops. The
-     new LimitInternalRecursion directive configures limits of subsequent
-     internal redirects and nested subrequests, after which the request
-     will be aborted.  PR 19753 (and probably others).
+  *) SECURITY [CAN-2003-0192]: Fixed a bug whereby certain sequences
+     of per-directory renegotiations and the SSLCipherSuite directive
+     being used to upgrade from a weak ciphersuite to a strong one
+     could result in the weak ciphersuite being used in place of the
+     strong one.  [Ben Laurie]
+
+  *) SECURITY [CAN-2003-0253]: Fixed a bug in prefork MPM causing
+     temporary denial of service when accept() on a rarely accessed port
+     returns certain errors.  Reported by Saheed Akhtar 
+     <S.Akhtar@talis.com>.  [Jeff Trawick]
+
+  *) SECURITY [CAN-2003-0254]: Fixed a bug in ftp proxy causing denial
+     of service when target host is IPv6 but proxy server can't create
+     IPv6 socket.  Fixed by the reporter.  [Yoshioka Tsuneo
+     <tsuneo.yoshioka@f-secure.com>]
+
+  *) SECURITY [VU#379828] Prevent the server from crashing when entering
+     infinite loops. The new LimitInternalRecursion directive configures
+     limits of subsequent internal redirects and nested subrequests, after
+     which the request will be aborted.  PR 19753 (and probably others).
      [William Rowe, Jeff Trawick, André Malo]
 		      
   *) core_output_filter: don't split the brigade after a FLUSH bucket if
diff --git a/include/ap_release.h b/include/ap_release.h
index 8d6f437..7c9e742 100644
--- a/include/ap_release.h
+++ b/include/ap_release.h
@@ -75,7 +75,7 @@
 #define AP_SERVER_BASEPRODUCT "Apache"
 #define AP_SERVER_MAJORVERSION "2"
 #define AP_SERVER_MINORVERSION "0"
-#define AP_SERVER_PATCHLEVEL "47-dev"
+#define AP_SERVER_PATCHLEVEL "47"
 #define AP_SERVER_MINORREVISION AP_SERVER_MAJORVERSION "." AP_SERVER_MINORVERSION
 #define AP_SERVER_BASEREVISION  AP_SERVER_MINORREVISION "." AP_SERVER_PATCHLEVEL
 #define AP_SERVER_BASEVERSION AP_SERVER_BASEPRODUCT "/" AP_SERVER_BASEREVISION
diff --git a/modules/proxy/proxy_ftp.c b/modules/proxy/proxy_ftp.c
index 2792058..c38773c 100644
--- a/modules/proxy/proxy_ftp.c
+++ b/modules/proxy/proxy_ftp.c
@@ -957,6 +957,7 @@
 	    if ((rv = apr_socket_create(&sock, connect_addr->family, SOCK_STREAM, r->pool)) != APR_SUCCESS) {
 		ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
 			      "proxy: FTP: error creating socket");
+                connect_addr = connect_addr->next;
 		continue;
 	    }
 
@@ -974,6 +975,7 @@
 #ifndef _OSD_POSIX              /* BS2000 has this option "always on" */
 		ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
 			      "proxy: FTP: error setting reuseaddr option: apr_socket_opt_set(APR_SO_REUSEADDR)");
+                connect_addr = connect_addr->next;
 		continue;
 #endif                          /* _OSD_POSIX */
 	    }
diff --git a/modules/ssl/ssl_engine_kernel.c b/modules/ssl/ssl_engine_kernel.c
index 628d862..2d628b8 100644
--- a/modules/ssl/ssl_engine_kernel.c
+++ b/modules/ssl/ssl_engine_kernel.c
@@ -432,7 +432,7 @@
         SSL_set_verify_result(ssl, X509_V_OK);
 
         /* determine whether we've to force a renegotiation */
-        if (verify != verify_old) {
+        if (!renegotiate && verify != verify_old) {
             if (((verify_old == SSL_VERIFY_NONE) &&
                  (verify     != SSL_VERIFY_NONE)) ||
 
diff --git a/server/mpm/prefork/prefork.c b/server/mpm/prefork/prefork.c
index 64aea20..1b92f84 100644
--- a/server/mpm/prefork/prefork.c
+++ b/server/mpm/prefork/prefork.c
@@ -672,19 +672,17 @@
 	/* if we accept() something we don't want to die, so we have to
 	 * defer the exit
 	 */
-	for (;;) {
-            status = listensocks[offset].accept_func(&csd, 
-                                       &listensocks[offset], ptrans);
+        status = listensocks[offset].accept_func(&csd, 
+                                                 &listensocks[offset], ptrans);
+        SAFE_ACCEPT(accept_mutex_off());	/* unlock after "accept" */
 
-            if (status == APR_SUCCESS) {
-                break;
-            }
-            if (status == APR_EGENERAL) {
-                /* resource shortage or should-not-occur occured */
-                clean_child_exit(1);
-            }
+        if (status == APR_EGENERAL) {
+            /* resource shortage or should-not-occur occured */
+            clean_child_exit(1);
         }
-	SAFE_ACCEPT(accept_mutex_off());	/* unlock after "accept" */
+        else if (status != APR_SUCCESS) {
+            continue;
+        }
 
 	/*
 	 * We now have a connection, so set it up with the appropriate