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
This commit is contained in:
Daniel Earl Poirier
2009-10-01 19:28:36 +00:00
parent d265a0f32f
commit b5532dce62
2 changed files with 22 additions and 5 deletions

View File

@ -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.
*/