diff options
author | Daniel Earl Poirier <poirier@apache.org> | 2009-10-01 21:28:36 +0200 |
---|---|---|
committer | Daniel Earl Poirier <poirier@apache.org> | 2009-10-01 21:28:36 +0200 |
commit | b5532dce62f244b6159fe2a93cd242b75259e04c (patch) | |
tree | 28d048d931334f05da8ac03faedcac1199b3d192 /server/protocol.c | |
parent | Allow for pass-thru or early termination of doall() loops (diff) | |
download | apache2-b5532dce62f244b6159fe2a93cd242b75259e04c.tar.xz apache2-b5532dce62f244b6159fe2a93cd242b75259e04c.zip |
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
Diffstat (limited to 'server/protocol.c')
-rw-r--r-- | server/protocol.c | 22 |
1 files changed, 17 insertions, 5 deletions
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. */ |