You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by tr...@apache.org on 2011/04/30 14:10:24 UTC
svn commit: r1098104 - in /httpd/httpd/branches/2.2.x: CHANGES STATUS
modules/http/http_filters.c modules/http/http_protocol.c server/protocol.c
Author: trawick
Date: Sat Apr 30 12:10:23 2011
New Revision: 1098104
URL: http://svn.apache.org/viewvc?rev=1098104&view=rev
Log:
Grab trunk r888310:
Core HTTP: disable keepalive when the Client has sent
Expect: 100-continue
but we respond directly with a non-100 response. Keepalive here led
to data from clients continuing being treated as a new request.
PR: 47087
Submitted by: niq
Reviewed by: wrowe, sf, trawick
Modified:
httpd/httpd/branches/2.2.x/CHANGES
httpd/httpd/branches/2.2.x/STATUS
httpd/httpd/branches/2.2.x/modules/http/http_filters.c
httpd/httpd/branches/2.2.x/modules/http/http_protocol.c
httpd/httpd/branches/2.2.x/server/protocol.c
Modified: httpd/httpd/branches/2.2.x/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.2.x/CHANGES?rev=1098104&r1=1098103&r2=1098104&view=diff
==============================================================================
--- httpd/httpd/branches/2.2.x/CHANGES [utf-8] (original)
+++ httpd/httpd/branches/2.2.x/CHANGES [utf-8] Sat Apr 30 12:10:23 2011
@@ -1,6 +1,12 @@
-*- coding: utf-8 -*-
Changes with Apache 2.2.18
+ *) Core HTTP: disable keepalive when the Client has sent
+ Expect: 100-continue
+ but we respond directly with a non-100 response. Keepalive here led
+ to data from clients continuing being treated as a new request.
+ PR 47087. [Nick Kew]
+
*) htpasswd: Change the default algorithm for htpasswd to MD5 on all
platforms. Crypt with its 8 character limit is not useful anymore;
improve out of disk space handling (PR 30877); print a warning if
Modified: httpd/httpd/branches/2.2.x/STATUS
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.2.x/STATUS?rev=1098104&r1=1098103&r2=1098104&view=diff
==============================================================================
--- httpd/httpd/branches/2.2.x/STATUS (original)
+++ httpd/httpd/branches/2.2.x/STATUS Sat Apr 30 12:10:23 2011
@@ -91,11 +91,6 @@ RELEASE SHOWSTOPPERS:
PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
[ start all new proposals below, under PATCHES PROPOSED. ]
- * HTTP Protocol: Fix handling of extra request data sent with Expect: 100
- PR 47087
- Trunk patch: http://svn.apache.org/viewvc?view=revision&revision=888310
- 2.2.x: Trunk works with offset
- +1: niq, wrowe, sf
PATCHES PROPOSED TO BACKPORT FROM TRUNK:
[ New proposals should be added at the end of the list ]
Modified: httpd/httpd/branches/2.2.x/modules/http/http_filters.c
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.2.x/modules/http/http_filters.c?rev=1098104&r1=1098103&r2=1098104&view=diff
==============================================================================
--- httpd/httpd/branches/2.2.x/modules/http/http_filters.c (original)
+++ httpd/httpd/branches/2.2.x/modules/http/http_filters.c Sat Apr 30 12:10:23 2011
@@ -331,6 +331,10 @@ apr_status_t ap_http_filter(ap_filter_t
char *tmp;
int len;
+ /* if we send an interim response, we're no longer
+ * in a state of expecting one.
+ */
+ f->r->expecting_100 = 0;
tmp = apr_pstrcat(f->r->pool, AP_SERVER_PROTOCOL, " ",
ap_get_status_line(100), CRLF CRLF, NULL);
len = strlen(tmp);
Modified: httpd/httpd/branches/2.2.x/modules/http/http_protocol.c
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.2.x/modules/http/http_protocol.c?rev=1098104&r1=1098103&r2=1098104&view=diff
==============================================================================
--- httpd/httpd/branches/2.2.x/modules/http/http_protocol.c (original)
+++ httpd/httpd/branches/2.2.x/modules/http/http_protocol.c Sat Apr 30 12:10:23 2011
@@ -174,6 +174,9 @@ AP_DECLARE(int) ap_set_keepalive(request
* body should use the HTTP/1.1 chunked transfer-coding. In English,
*
* IF we have not marked this connection as errored;
+ * and the client isn't expecting 100-continue (PR47087 - more
+ * input here could be the client continuing when we're
+ * closing the request).
* and the response body has a defined length due to the status code
* being 304 or 204, the request method being HEAD, already
* having defined Content-Length or Transfer-Encoding: chunked, or
@@ -195,6 +198,7 @@ AP_DECLARE(int) ap_set_keepalive(request
* Note that the condition evaluation order is extremely important.
*/
if ((r->connection->keepalive != AP_CONN_CLOSE)
+ && !r->expecting_100
&& ((r->status == HTTP_NOT_MODIFIED)
|| (r->status == HTTP_NO_CONTENT)
|| r->header_only
Modified: httpd/httpd/branches/2.2.x/server/protocol.c
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.2.x/server/protocol.c?rev=1098104&r1=1098103&r2=1098104&view=diff
==============================================================================
--- httpd/httpd/branches/2.2.x/server/protocol.c (original)
+++ httpd/httpd/branches/2.2.x/server/protocol.c Sat Apr 30 12:10:23 2011
@@ -1641,6 +1641,7 @@ AP_DECLARE(void) ap_send_interim_respons
{
hdr_ptr x;
char *status_line = NULL;
+ request_rec *rr;
if (r->proto_num < 1001) {
/* don't send interim response to HTTP/1.0 Client */
@@ -1652,6 +1653,14 @@ AP_DECLARE(void) ap_send_interim_respons
return;
}
+ /* if we send an interim response, we're no longer in a state of
+ * expecting one. Also, this could feasibly be in a subrequest,
+ * so we need to propagate the fact that we responded.
+ */
+ for (rr = r; rr != NULL; rr = rr->main) {
+ rr->expecting_100 = 0;
+ }
+
status_line = apr_pstrcat(r->pool, AP_SERVER_PROTOCOL, " ", r->status_line, CRLF, NULL);
ap_xlate_proto_to_ascii(status_line, strlen(status_line));