From: Daniel Earl Poirier Date: Thu, 1 Oct 2009 19:28:36 +0000 (+0000) Subject: core: Treat timeout reading request as 408 error, not 400. X-Git-Tag: 2.3.3~232 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b5532dce62f244b6159fe2a93cd242b75259e04c;p=apache core: Treat timeout reading request as 408 error, not 400. Log 408 errors in access log as was done in Apache 1.3.x. PR: 39785 Submitted by: Nobutaka Mantani, Stefan Fritsch Reviewed and added to by: Dan Poirier git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@820760 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 95630f7d21..41ad220585 100644 --- a/CHANGES +++ b/CHANGES @@ -10,6 +10,11 @@ Changes with Apache 2.3.3 mod_proxy_ftp: NULL pointer dereference on error paths. [Stefan Fritsch , Joe Orton] + *) core: Treat timeout reading request as 408 error, not 400. + Log 408 errors in access log as was done in Apache 1.3.x. + PR 39785 [Nobutaka Mantani , + Stefan Fritsch , Dan Poirier] + *) mod_ssl: Reintroduce SSL_CLIENT_S_DN, SSL_CLIENT_I_DN, SSL_SERVER_S_DN, SSL_SERVER_I_DN back to the environment variables to be set by mod_ssl. [Peter Sylvester ] diff --git a/server/protocol.c b/server/protocol.c index 3491bdd755..e082de9390 100644 --- a/server/protocol.c +++ b/server/protocol.c @@ -606,6 +606,9 @@ static int read_request_line(request_rec *r, apr_bucket_brigade *bb) r->proto_num = HTTP_VERSION(1,0); r->protocol = apr_pstrdup(r->pool, "HTTP/1.0"); } + else if (rv == APR_TIMEUP) { + r->status = HTTP_REQUEST_TIME_OUT; + } return 0; } } while ((len <= 0) && (++num_blank_lines < max_blank_lines)); @@ -689,7 +692,12 @@ AP_DECLARE(void) ap_get_mime_headers_core(request_rec *r, apr_bucket_brigade *bb &len, r, 0, bb); if (rv != APR_SUCCESS) { - r->status = HTTP_BAD_REQUEST; + if (rv == APR_TIMEUP) { + r->status = HTTP_REQUEST_TIME_OUT; + } + else { + r->status = HTTP_BAD_REQUEST; + } /* ap_rgetline returns APR_ENOSPC if it fills up the buffer before * finding the end-of-line. This is only going to happen if it @@ -877,7 +885,7 @@ request_rec *ap_read_request(conn_rec *conn) r->read_length = 0; r->read_body = REQUEST_NO_BODY; - r->status = HTTP_REQUEST_TIME_OUT; /* Until we get a request */ + r->status = HTTP_OK; /* Until further notice */ r->the_request = NULL; /* Begin by presuming any module can make its own path_info assumptions, @@ -898,6 +906,12 @@ request_rec *ap_read_request(conn_rec *conn) apr_brigade_destroy(tmp_bb); goto traceout; } + else if (r->status == HTTP_REQUEST_TIME_OUT) { + ap_update_child_status(conn->sbh, SERVER_BUSY_LOG, r); + ap_run_log_transaction(r); + apr_brigade_destroy(tmp_bb); + goto traceout; + } apr_brigade_destroy(tmp_bb); r = NULL; @@ -917,7 +931,7 @@ request_rec *ap_read_request(conn_rec *conn) if (!r->assbackwards) { ap_get_mime_headers_core(r, tmp_bb); - if (r->status != HTTP_REQUEST_TIME_OUT) { + if (r->status != HTTP_OK) { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "request failed: error reading the headers"); ap_send_error_response(r, 0); @@ -958,8 +972,6 @@ request_rec *ap_read_request(conn_rec *conn) apr_brigade_destroy(tmp_bb); - r->status = HTTP_OK; /* Until further notice. */ - /* update what we think the virtual host is based on the headers we've * now read. may update status. */