]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
revert recent unintended activity on old tag tags/2.4.55 2.4.55
authorEric Covener <covener@apache.org>
Wed, 3 Apr 2024 12:19:33 +0000 (12:19 +0000)
committerEric Covener <covener@apache.org>
Wed, 3 Apr 2024 12:19:33 +0000 (12:19 +0000)
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

12 files changed:
include/util_script.h
modules/aaa/mod_authnz_fcgi.c
modules/generators/mod_cgi.c
modules/generators/mod_cgid.c
modules/http/http_filters.c
modules/http2/h2_session.c
modules/http2/h2_stream.c
modules/http2/h2_stream.h
modules/proxy/ajp_header.c
modules/proxy/mod_proxy_fcgi.c
modules/proxy/mod_proxy_scgi.c
modules/proxy/mod_proxy_uwsgi.c

index 0557c7fdda68341d0a5d9287d69ba9b9281203c8..3566bd38253b3a3b2322c3fd96576c6cc940fdd3 100644 (file)
@@ -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
index 69743f142a44475d724d4324275634c068e90a9f..1aadcc2e97ac9d3026a947a1165f40a572508369 100644 (file)
@@ -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
                                        */
index 96bb88392f6be3ac5d9c4e65c8fa44545e27f9c9..7e4b126c1055bee80384de41827100e77979d3d5 100644 (file)
@@ -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);
 
             /*
index 4bab59f932739585e49d9873ef0b133d0038901c..2258a683b75187e4851771d3431c605e85a057a9 100644 (file)
@@ -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);
 
             /*
index f20aee73fa8213e30b111b02ba1102fb47de2671..1a8df347bec90c48f1b634a0ac6a864534f55db1 100644 (file)
@@ -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
index da8360633146d1c8e5e05a993305e0bbaf5de41d..7ba49cf8d5ee0eedfb91ead76c6b2bd9c63942ed 100644 (file)
@@ -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;
index 0390967875c7812e40883c190db948a097272aa9..cf6f79897dda303cd6be170d62fd5f8e8b8d4779 100644 (file)
@@ -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; 
     }
index de704a0e733c16710a7d26e140a53e5ed981a6c8..695d56ac5e1cf0797ff16fc4c7000cb29b32dc07 100644 (file)
@@ -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 */
index 687da800ebf48f2dfe0e4e178db024c6e0e8c911..b4dc47ccf501a30f2203c3d87ca753f169de8b50 100644 (file)
@@ -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;
 }
 
index d8e77592224b12c5646c95b459e84eb2a03e19b4..3382b9bfd5c837c0bbe6e7b9f3aff7cd3206676c 100644 (file)
@@ -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;
index 393d58f5de934dbc61f51e2bc2384c1953994e03..493757d3c92842654177b2c10a48e5ae47368da0 100644 (file)
@@ -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;
index d4d3e1713a830ccb373fd0d10e2b1aadbbf86c87..e02450ef0610a0fc0b6fd3981fdc139647d3e5eb 100644 (file)
@@ -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));
     }