From: Eric Covener Date: Wed, 3 Apr 2024 12:19:33 +0000 (+0000) Subject: revert recent unintended activity on old tag X-Git-Tag: 2.4.55^0 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8201e867f1d4cdf61840625c6c4be901e3f1b6ba;p=thirdparty%2Fapache%2Fhttpd.git revert recent unintended activity on old tag svn merge -r 1916775:1916771 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/tags/2.4.55@1916783 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/include/util_script.h b/include/util_script.h index 0557c7fdda6..3566bd38253 100644 --- a/include/util_script.h +++ b/include/util_script.h @@ -225,8 +225,6 @@ AP_DECLARE(int) ap_scan_script_header_err_core_ex(request_rec *r, char *buffer, */ AP_DECLARE(void) ap_args_to_table(request_rec *r, apr_table_t **table); -#define AP_TRUST_CGILIKE_CL_ENVVAR "ap_trust_cgilike_cl" - #ifdef __cplusplus } #endif diff --git a/modules/aaa/mod_authnz_fcgi.c b/modules/aaa/mod_authnz_fcgi.c index 69743f142a4..1aadcc2e97a 100644 --- a/modules/aaa/mod_authnz_fcgi.c +++ b/modules/aaa/mod_authnz_fcgi.c @@ -571,14 +571,6 @@ static apr_status_t handle_response(const fcgi_provider_conf *conf, "parsing -> %d/%d", fn, status, r->status); - /* FCGI has its own body framing mechanism which we don't - * match against any provided Content-Length, so let the - * core determine C-L vs T-E based on what's actually sent. - */ - if (!apr_table_get(r->subprocess_env, AP_TRUST_CGILIKE_CL_ENVVAR)) - apr_table_unset(r->headers_out, "Content-Length"); - apr_table_unset(r->headers_out, "Transfer-Encoding"); - if (rspbuf) { /* caller wants to see response body, * if any */ diff --git a/modules/generators/mod_cgi.c b/modules/generators/mod_cgi.c index 96bb88392f6..7e4b126c105 100644 --- a/modules/generators/mod_cgi.c +++ b/modules/generators/mod_cgi.c @@ -935,18 +935,9 @@ static int cgi_handler(request_rec *r) char sbuf[MAX_STRING_LEN]; int ret; - ret = ap_scan_script_header_err_brigade_ex(r, bb, sbuf, - APLOG_MODULE_INDEX); - - /* xCGI has its own body framing mechanism which we don't - * match against any provided Content-Length, so let the - * core determine C-L vs T-E based on what's actually sent. - */ - if (!apr_table_get(r->subprocess_env, AP_TRUST_CGILIKE_CL_ENVVAR)) - apr_table_unset(r->headers_out, "Content-Length"); - apr_table_unset(r->headers_out, "Transfer-Encoding"); - - if (ret != OK) { + if ((ret = ap_scan_script_header_err_brigade_ex(r, bb, sbuf, + APLOG_MODULE_INDEX))) + { ret = log_script(r, conf, ret, dbuf, sbuf, bb, script_err); /* diff --git a/modules/generators/mod_cgid.c b/modules/generators/mod_cgid.c index 4bab59f9327..2258a683b75 100644 --- a/modules/generators/mod_cgid.c +++ b/modules/generators/mod_cgid.c @@ -1616,18 +1616,9 @@ static int cgid_handler(request_rec *r) b = apr_bucket_eos_create(c->bucket_alloc); APR_BRIGADE_INSERT_TAIL(bb, b); - ret = ap_scan_script_header_err_brigade_ex(r, bb, sbuf, - APLOG_MODULE_INDEX); - - /* xCGI has its own body framing mechanism which we don't - * match against any provided Content-Length, so let the - * core determine C-L vs T-E based on what's actually sent. - */ - if (!apr_table_get(r->subprocess_env, AP_TRUST_CGILIKE_CL_ENVVAR)) - apr_table_unset(r->headers_out, "Content-Length"); - apr_table_unset(r->headers_out, "Transfer-Encoding"); - - if (ret != OK) { + if ((ret = ap_scan_script_header_err_brigade_ex(r, bb, sbuf, + APLOG_MODULE_INDEX))) + { ret = log_script(r, conf, ret, dbuf, sbuf, bb, NULL); /* diff --git a/modules/http/http_filters.c b/modules/http/http_filters.c index f20aee73fa8..1a8df347bec 100644 --- a/modules/http/http_filters.c +++ b/modules/http/http_filters.c @@ -778,18 +778,6 @@ static APR_INLINE int check_headers(request_rec *r) struct check_header_ctx ctx; core_server_config *conf = ap_get_core_module_config(r->server->module_config); - const char *val; - - if ((val = apr_table_get(r->headers_out, "Transfer-Encoding"))) { - if (apr_table_get(r->headers_out, "Content-Length")) { - apr_table_unset(r->headers_out, "Content-Length"); - r->connection->keepalive = AP_CONN_CLOSE; - } - if (!ap_is_chunked(r->pool, val)) { - r->connection->keepalive = AP_CONN_CLOSE; - return 0; - } - } ctx.r = r; ctx.strict = (conf->http_conformance != AP_HTTP_CONFORMANCE_UNSAFE); @@ -1365,9 +1353,6 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f, */ apr_table_clear(r->headers_out); apr_table_clear(r->err_headers_out); - r->content_type = r->content_encoding = NULL; - r->content_languages = NULL; - r->clength = r->chunked = 0; apr_brigade_cleanup(b); /* Don't recall ap_die() if we come back here (from its own internal @@ -1384,6 +1369,8 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f, APR_BRIGADE_INSERT_TAIL(b, e); e = apr_bucket_eos_create(c->bucket_alloc); APR_BRIGADE_INSERT_TAIL(b, e); + r->content_type = r->content_encoding = NULL; + r->content_languages = NULL; ap_set_content_length(r, 0); recursive_error = 1; } @@ -1410,7 +1397,6 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f, if (!apr_is_empty_table(r->err_headers_out)) { r->headers_out = apr_table_overlay(r->pool, r->err_headers_out, r->headers_out); - apr_table_clear(r->err_headers_out); } /* @@ -1430,17 +1416,6 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f, fixup_vary(r); } - - /* - * Control cachability for non-cacheable responses if not already set by - * some other part of the server configuration. - */ - if (r->no_cache && !apr_table_get(r->headers_out, "Expires")) { - char *date = apr_palloc(r->pool, APR_RFC822_DATE_LEN); - ap_recent_rfc822_date(date, r->request_time); - apr_table_addn(r->headers_out, "Expires", date); - } - /* * Now remove any ETag response header field if earlier processing * says so (such as a 'FileETag None' directive). @@ -1453,7 +1428,6 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f, basic_http_header_check(r, &protocol); ap_set_keepalive(r); - /* 204/304 responses don't have content related headers */ if (AP_STATUS_IS_HEADER_ONLY(r->status)) { apr_table_unset(r->headers_out, "Transfer-Encoding"); apr_table_unset(r->headers_out, "Content-Length"); @@ -1496,6 +1470,16 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f, apr_table_setn(r->headers_out, "Content-Language", field); } + /* + * Control cachability for non-cacheable responses if not already set by + * some other part of the server configuration. + */ + if (r->no_cache && !apr_table_get(r->headers_out, "Expires")) { + char *date = apr_palloc(r->pool, APR_RFC822_DATE_LEN); + ap_recent_rfc822_date(date, r->request_time); + apr_table_addn(r->headers_out, "Expires", date); + } + /* This is a hack, but I can't find anyway around it. The idea is that * we don't want to send out 0 Content-Lengths if it is a head request. * This happens when modules try to outsmart the server, and return diff --git a/modules/http2/h2_session.c b/modules/http2/h2_session.c index da836063314..7ba49cf8d5e 100644 --- a/modules/http2/h2_session.c +++ b/modules/http2/h2_session.c @@ -319,13 +319,9 @@ static int on_header_cb(nghttp2_session *ngh2, const nghttp2_frame *frame, status = h2_stream_add_header(stream, (const char *)name, namelen, (const char *)value, valuelen); - if (status != APR_SUCCESS && - (!stream->rtmp || - stream->rtmp->http_status == H2_HTTP_STATUS_UNSET || - /* We accept a certain amount of failures in order to reply - * with an informative HTTP error response like 413. But if the - * client is too wrong, we fail the request a RESET of the stream */ - stream->request_headers_failed > 100)) { + if (status != APR_SUCCESS + && (!stream->rtmp + || stream->rtmp->http_status == H2_HTTP_STATUS_UNSET)) { return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE; } return 0; diff --git a/modules/http2/h2_stream.c b/modules/http2/h2_stream.c index 0390967875c..cf6f79897dd 100644 --- a/modules/http2/h2_stream.c +++ b/modules/http2/h2_stream.c @@ -759,7 +759,6 @@ apr_status_t h2_stream_add_header(h2_stream *stream, cleanup: if (error) { - ++stream->request_headers_failed; set_error_response(stream, error); return APR_EINVAL; } diff --git a/modules/http2/h2_stream.h b/modules/http2/h2_stream.h index de704a0e733..695d56ac5e1 100644 --- a/modules/http2/h2_stream.h +++ b/modules/http2/h2_stream.h @@ -76,7 +76,6 @@ struct h2_stream { struct h2_request *rtmp; /* request being assembled */ apr_table_t *trailers_in; /* optional, incoming trailers */ int request_headers_added; /* number of request headers added */ - int request_headers_failed; /* number of request headers failed to add */ #if AP_HAS_RESPONSE_BUCKETS ap_bucket_response *response; /* the final, non-interim response or NULL */ diff --git a/modules/proxy/ajp_header.c b/modules/proxy/ajp_header.c index 687da800ebf..b4dc47ccf50 100644 --- a/modules/proxy/ajp_header.c +++ b/modules/proxy/ajp_header.c @@ -17,8 +17,6 @@ #include "ajp_header.h" #include "ajp.h" -#include "util_script.h" - APLOG_USE_MODULE(proxy_ajp); static const char *response_trans_headers[] = { @@ -664,14 +662,6 @@ static apr_status_t ajp_unmarshal_response(ajp_msg_t *msg, } } - /* AJP has its own body framing mechanism which we don't - * match against any provided Content-Length, so let the - * core determine C-L vs T-E based on what's actually sent. - */ - if (!apr_table_get(r->subprocess_env, AP_TRUST_CGILIKE_CL_ENVVAR)) - apr_table_unset(r->headers_out, "Content-Length"); - apr_table_unset(r->headers_out, "Transfer-Encoding"); - return APR_SUCCESS; } diff --git a/modules/proxy/mod_proxy_fcgi.c b/modules/proxy/mod_proxy_fcgi.c index d8e77592224..3382b9bfd5c 100644 --- a/modules/proxy/mod_proxy_fcgi.c +++ b/modules/proxy/mod_proxy_fcgi.c @@ -764,15 +764,6 @@ recv_again: status = ap_scan_script_header_err_brigade_ex(r, ob, NULL, APLOG_MODULE_INDEX); - - /* FCGI has its own body framing mechanism which we don't - * match against any provided Content-Length, so let the - * core determine C-L vs T-E based on what's actually sent. - */ - if (!apr_table_get(r->subprocess_env, AP_TRUST_CGILIKE_CL_ENVVAR)) - apr_table_unset(r->headers_out, "Content-Length"); - apr_table_unset(r->headers_out, "Transfer-Encoding"); - /* suck in all the rest */ if (status != OK) { apr_bucket *tmp_b; diff --git a/modules/proxy/mod_proxy_scgi.c b/modules/proxy/mod_proxy_scgi.c index 393d58f5de9..493757d3c92 100644 --- a/modules/proxy/mod_proxy_scgi.c +++ b/modules/proxy/mod_proxy_scgi.c @@ -388,14 +388,6 @@ static int pass_response(request_rec *r, proxy_conn_rec *conn) return status; } - /* SCGI has its own body framing mechanism which we don't - * match against any provided Content-Length, so let the - * core determine C-L vs T-E based on what's actually sent. - */ - if (!apr_table_get(r->subprocess_env, AP_TRUST_CGILIKE_CL_ENVVAR)) - apr_table_unset(r->headers_out, "Content-Length"); - apr_table_unset(r->headers_out, "Transfer-Encoding"); - conf = ap_get_module_config(r->per_dir_config, &proxy_scgi_module); if (conf->sendfile && conf->sendfile != scgi_sendfile_off) { short err = 1; diff --git a/modules/proxy/mod_proxy_uwsgi.c b/modules/proxy/mod_proxy_uwsgi.c index d4d3e1713a8..e02450ef061 100644 --- a/modules/proxy/mod_proxy_uwsgi.c +++ b/modules/proxy/mod_proxy_uwsgi.c @@ -364,12 +364,6 @@ static int uwsgi_response(request_rec *r, proxy_conn_rec * backend, apr_table_add(r->headers_out, buffer, value); } - /* T-E wins over C-L */ - if (apr_table_get(r->headers_out, "Transfer-Encoding")) { - apr_table_unset(r->headers_out, "Content-Length"); - backend->close = 1; - } - if ((buf = apr_table_get(r->headers_out, "Content-Type"))) { ap_set_content_type(r, apr_pstrdup(r->pool, buf)); }