You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ji...@apache.org on 2007/08/28 21:10:31 UTC

svn commit: r570532 - in /httpd/httpd/trunk: CHANGES modules/generators/mod_autoindex.c

Author: jim
Date: Tue Aug 28 12:10:31 2007
New Revision: 570532

URL: http://svn.apache.org/viewvc?rev=570532&view=rev
Log:
IndexOptions ContentType=text/html Charset=UTF-8
magic.

Modified:
    httpd/httpd/trunk/CHANGES
    httpd/httpd/trunk/modules/generators/mod_autoindex.c

Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=570532&r1=570531&r2=570532&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Tue Aug 28 12:10:31 2007
@@ -1,6 +1,11 @@
                                                         -*- coding: utf-8 -*-
 Changes with Apache 2.3.0
 
+  *) mod_autoindex: Add in ContentType and Charset options to
+     IndexOptions directive. This allows the admin to explicitly
+     set the content-type and charset of the generated page.
+     [Jim Jagielski]
+
   *) mime.types: Many updates to sync with IANA registry and common
      unregistered types that the owners refuse to register.  Admins
      are encouraged to update their installed mime.types file.

Modified: httpd/httpd/trunk/modules/generators/mod_autoindex.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/generators/mod_autoindex.c?rev=570532&r1=570531&r2=570532&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/generators/mod_autoindex.c (original)
+++ httpd/httpd/trunk/modules/generators/mod_autoindex.c Tue Aug 28 12:10:31 2007
@@ -138,6 +138,8 @@
     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;
@@ -476,6 +478,12 @@
                 d_cfg->desc_adjust = K_NOADJUST;
             }
         }
+        else if (!strncasecmp(w, "ContentType=", 12)) {
+            d_cfg->ctype = apr_pstrdup(cmd->pool, &w[12]);
+        }
+        else if (!strncasecmp(w, "Charset=", 8)) {
+            d_cfg->charset = apr_pstrdup(cmd->pool, &w[8]);
+        }
         else {
             return "Invalid directory indexing option";
         }
@@ -620,6 +628,9 @@
     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);
@@ -1971,6 +1982,8 @@
     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,
@@ -1978,11 +1991,27 @@
         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);