You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by wr...@apache.org on 2001/10/20 20:54:55 UTC

cvs commit: httpd-2.0/modules/generators mod_autoindex.c

wrowe       01/10/20 11:54:55

  Modified:    modules/generators mod_autoindex.c
  Log:
    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.
  
  Revision  Changes    Path
  1.87      +23 -4     httpd-2.0/modules/generators/mod_autoindex.c
  
  Index: mod_autoindex.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/modules/generators/mod_autoindex.c,v
  retrieving revision 1.86
  retrieving revision 1.87
  diff -u -r1.86 -r1.87
  --- mod_autoindex.c	2001/08/19 18:58:19	1.86
  +++ mod_autoindex.c	2001/10/20 18:54:54	1.87
  @@ -984,21 +984,32 @@
   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
  @@ -1043,6 +1054,14 @@
   	    }
   	}
       }
  +
  +    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);