From: William A. Rowe Jr Date: Sat, 20 Oct 2001 18:54:54 +0000 (+0000) Subject: Restrict by content type and encoding before we go and try to drag in some X-Git-Tag: 2.0.27~64 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1338b5aa68deec98f8d552dd016e5cce1afb1c20;p=thirdparty%2Fapache%2Fhttpd.git Restrict by content type and encoding before we go and try to drag in some text to merge as headers and footers to autoindex pages. This will escape index.gif from a bold attempt to use IndexHeader index ;) Also pass in the args to the subrequest, for anyone trying to decode what the user is looking at. A great example of this coming up. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91609 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/generators/mod_autoindex.c b/modules/generators/mod_autoindex.c index 59c1135a447..38d43e52026 100644 --- a/modules/generators/mod_autoindex.c +++ b/modules/generators/mod_autoindex.c @@ -984,21 +984,32 @@ static void do_emit_plain(request_rec *r, apr_file_t *f) static void emit_head(request_rec *r, char *header_fname, int suppress_amble, char *title) { + apr_table_t *hdrs = r->headers_in; apr_file_t *f = NULL; request_rec *rr = NULL; int emit_amble = 1; int emit_H1 = 1; + const char *r_accept; + const char *r_accept_enc; /* * If there's a header file, send a subrequest to look for it. If it's - * found and a text file, handle it -- otherwise fall through and - * pretend there's nothing there. + * found and html do the subrequest, otherwise handle it */ + r_accept = apr_table_get(hdrs, "Accept"); + r_accept_enc = apr_table_get(hdrs, "Accept-Encoding"); + apr_table_setn(hdrs, "Accept", "text/html, text/plain"); + apr_table_unset(hdrs, "Accept-Encoding"); + + if ((header_fname != NULL) && r->args) { + header_fname = apr_pstrcat(r->pool, header_fname, "?", r->args, NULL); + } + if ((header_fname != NULL) - && (rr = ap_sub_req_lookup_uri(header_fname, r, NULL)) + && (rr = ap_sub_req_lookup_uri(header_fname , r, NULL)) && (rr->status == HTTP_OK) && (rr->filename != NULL) - && rr->finfo.filetype == APR_REG) { + && (rr->finfo.filetype == APR_REG)) { /* * Check for the two specific cases we allow: text/html and * text/anything-else. The former is allowed to be processed for @@ -1044,6 +1055,14 @@ static void emit_head(request_rec *r, char *header_fname, int suppress_amble, } } + if (r_accept) + apr_table_setn(hdrs, "Accept", r_accept); + else + apr_table_unset(hdrs, "Accept"); + + if (r_accept_enc) + apr_table_setn(hdrs, "Accept-Encoding", r_accept_enc); + if (emit_amble) { emit_preamble(r, title); }