From: Jim Jagielski Date: Wed, 29 Aug 2007 22:37:14 +0000 (+0000) Subject: Merge r570532, r570535, r570558 from trunk: X-Git-Tag: 2.0.61~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1dc11bfcd735041f3f60c2cd07c819f5407a12bc;p=thirdparty%2Fapache%2Fhttpd.git Merge r570532, r570535, r570558 from trunk: IndexOptions ContentType=text/html Charset=UTF-8 magic. Document new IndexOptions options Make Bill happy ;) Submitted by: jim Reviewed by: root git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.0.x@570961 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 9c023909c80..b0ad231cd99 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,11 @@ -*- coding: utf-8 -*- Changes with Apache 2.0.61 + *) mod_autoindex: Add in Type and Charset options to IndexOptions + directive. This allows the admin to explicitly set the + content-type and charset of the generated page. + [Jim Jagielski] + *) main core: Emit errors during the initial apr_app_initialize() or apr_pool_create() (when apr-based error reporting is not ready). [William Rowe, Jeff Trawick] diff --git a/docs/manual/mod/mod_autoindex.xml b/docs/manual/mod/mod_autoindex.xml index c2160b57aa3..6f3437de819 100644 --- a/docs/manual/mod/mod_autoindex.xml +++ b/docs/manual/mod/mod_autoindex.xml @@ -525,6 +525,36 @@ indexing of

+
Charset=character-set (Apache 2.0.61 and + later)
+ +
The Charset keyword allows you to + specify the character set of the generated page. The + default is either ISO-8859-1 or UTF-8, + depending on whether the underlying file system is unicode + or not. + + Example: + IndexOptions Charset=UTF-8 + +
+ +
Type=MIME content-type (Apache 2.0.61 and + later)
+ +
The Type keyword allows you to + specify the MIME content-type of the generated page. The default + is text/html. + + Example: + IndexOptions Type=text/plain + +
+
DescriptionWidth=[n | *] (Apache 2.0.23 and diff --git a/modules/generators/mod_autoindex.c b/modules/generators/mod_autoindex.c index 7db45f9b4c9..f98f12f37ac 100644 --- a/modules/generators/mod_autoindex.c +++ b/modules/generators/mod_autoindex.c @@ -136,6 +136,8 @@ typedef struct autoindex_config_struct { apr_array_header_t *hdr_list; apr_array_header_t *rdme_list; + char *ctype; + char *charset; } autoindex_config_rec; static char c_by_encoding, c_by_type, c_by_path; @@ -459,6 +461,12 @@ static const char *add_opts(cmd_parms *cmd, void *d, const char *optstr) d_cfg->desc_adjust = K_NOADJUST; } } + else if (!strncasecmp(w, "Type=", 5)) { + d_cfg->ctype = apr_pstrdup(cmd->pool, &w[5]); + } + else if (!strncasecmp(w, "Charset=", 8)) { + d_cfg->charset = apr_pstrdup(cmd->pool, &w[8]); + } else { return "Invalid directory indexing option"; } @@ -598,6 +606,9 @@ static void *merge_autoindex_configs(apr_pool_t *p, void *basev, void *addv) new->icon_height = add->icon_height ? add->icon_height : base->icon_height; new->icon_width = add->icon_width ? add->icon_width : base->icon_width; + new->ctype = add->ctype ? add->ctype : base->ctype; + new->charset = add->charset ? add->charset : base->charset; + new->alt_list = apr_array_append(p, add->alt_list, base->alt_list); new->ign_list = apr_array_append(p, add->ign_list, base->ign_list); new->hdr_list = apr_array_append(p, add->hdr_list, base->hdr_list); @@ -1941,6 +1952,8 @@ static int index_directory(request_rec *r, char *colargs; char *fullpath; apr_size_t dirpathlen; + char *ctype = "text/html"; + char *charset; if ((status = apr_dir_open(&thedir, name, r->pool)) != APR_SUCCESS) { ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, @@ -1948,11 +1961,27 @@ static int index_directory(request_rec *r, return HTTP_FORBIDDEN; } + if (autoindex_conf->ctype) { + ctype = autoindex_conf->ctype; + } + if (autoindex_conf->charset) { + charset = autoindex_conf->charset; + } + else { #if APR_HAS_UNICODE_FS - ap_set_content_type(r, "text/html;charset=utf-8"); + charset = "UTF-8"; #else - ap_set_content_type(r, "text/html"); + charset = "ISO-8859-1"; #endif + } + if (*charset) { + ap_set_content_type(r, apr_pstrcat(r->pool, ctype, ";charset=", + charset, NULL)); + } + else { + ap_set_content_type(r, ctype); + } + if (autoindex_opts & TRACK_MODIFIED) { ap_update_mtime(r, r->finfo.mtime); ap_set_last_modified(r);