]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Fix subreqs with non-defined Content-Types being served improperly.
authorJustin Erenkrantz <jerenkrantz@apache.org>
Wed, 17 Apr 2002 04:09:07 +0000 (04:09 +0000)
committerJustin Erenkrantz <jerenkrantz@apache.org>
Wed, 17 Apr 2002 04:09:07 +0000 (04:09 +0000)
If we do not know a C-T for a subreq, we *must* propogate that
non-knowledge upwards to the main request.

Previously, if you used a DirectoryIndex with a file without a C-T (say
.shtml without AddType), the r->content_type will be kept as
httpd/unix-directory when we promoted the subreq in mod_dir.  Since there
would be no handler on this file, ap_invoke_handler (config.c:355) would
set the handler to be httpd/unix-directory (which was the old C-T of the
dir).  This would then trigger the handler to become httpd/unix-directory.
mod_autoindex would then try to serve the request.  But, the filename
was propogated upwards by mod_dir's DirectoryIndex via
internal_fast_redirect - it would then return a 403 trying to generate a
mod_autoindex page for a file.

Now, we will use ap_default_type() which is correct.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94676 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
modules/http/http_protocol.c
modules/http/http_request.c

diff --git a/CHANGES b/CHANGES
index 34e6f4f2a40d75a94d969ab6639672f23d40bc00..de4b6ae4e89df957252df1908ac8989669d7d53e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,8 @@
 Changes with Apache 2.0.36
 
+  *) Fix subreqs with non-defined Content-Types being served improperly.
+     [Justin Erenkrantz]
+
   *) Merge in latest GNU config.guess and config.sub files.  PR 7818.
      [Justin Erenkrantz]
 
index 6b38f3ed21e4593824e26c9b979fa426fc1db46b..6c87ae867aea1e885809f1e631ba59e80f34d5da 100644 (file)
@@ -1297,7 +1297,10 @@ static void fixup_vary(request_rec *r)
 
 AP_DECLARE(void) ap_set_content_type(request_rec *r, const char *ct)
 {
-    if (!r->content_type || strcmp(r->content_type, ct)) {
+    if (!ct) {
+        r->content_type = NULL;
+    }
+    else if (!r->content_type || strcmp(r->content_type, ct)) {
         r->content_type = ct;
 
         /* Insert filters requested by the AddOutputFiltersByType 
index ae52cd95d79a5ea61f5a928e5997955edf0fdb1f..88e1434511143860536a1cbaf909c1ea05b46037 100644 (file)
@@ -422,9 +422,7 @@ AP_DECLARE(void) ap_internal_fast_redirect(request_rec *rr, request_rec *r)
     r->args = rr->args;
     r->finfo = rr->finfo;
     r->handler = rr->handler;
-    if (rr->content_type) {
-        ap_set_content_type(r, rr->content_type);
-    }
+    ap_set_content_type(r, rr->content_type);
     r->content_encoding = rr->content_encoding;
     r->content_languages = rr->content_languages;
     r->per_dir_config = rr->per_dir_config;