]> granicus.if.org Git - apache/commitdiff
*) mod_charset_lite: Add ForceAllMimeTypes sub-option to
authorEric Covener <covener@apache.org>
Wed, 20 Feb 2008 21:17:17 +0000 (21:17 +0000)
committerEric Covener <covener@apache.org>
Wed, 20 Feb 2008 21:17:17 +0000 (21:17 +0000)
     CharsetOptions, allowing the administrator to skip the
     mimetype checking that precedes translation.
     PR 44458 [Eric Covener]

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

CHANGES
docs/manual/mod/mod_charset_lite.html.en
docs/manual/mod/mod_charset_lite.xml
modules/filters/mod_charset_lite.c

diff --git a/CHANGES b/CHANGES
index 311bf36cbdaa52af67ba41b950190fbb7a2a2a8a..624cff625cda620460e648efdda8bc25d495de31 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,11 @@
 Changes with Apache 2.3.0
 [ When backported to 2.2.x, remove entry from this file ]
 
+  *) mod_charset_lite: Add ForceAllMimeTypes sub-option to  
+     CharsetOptions, allowing the administrator to skip the
+     mimetype checking that precedes translation.
+     PR 44458 [Eric Covener]
+
   *) mod_include: Correctly handle SSI directives split over multiple filter
      passes.  PR 44447 [Harald Niesche <harald brokenerror.de>]
 
index 348b80c50c5ca4b51449db904f36a147c5ad63aa..6407da62ba232aa24e0d65855e42b8040b72d539 100644 (file)
       explicitly configured using the <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code> directive, <code>NoImplicitAdd</code>
       should be specified so that <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>
       doesn't add its filter.</dd>
+
+      <dt><code>ForceAllMimeTypes | NoForceAllMimeTypes</code></dt>
+      <dd>Normally, <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code> will only perform
+      translation on a small subset of possible mimetypes.  When the
+      <code>ForceAllMimeTypes</code> keyord is specified for a given
+      configuration section, translation is performed without regard for
+      mimetype.</dd>
+
     </dl>
 
 </div>
index 30f26306827863ef1bce509c2f8a4c04b3819677..4eb4cd53f6f0c18b6a86fb88c0eda2fc70c2d4e0 100644 (file)
       >AddOutputFilter</directive> directive, <code>NoImplicitAdd</code>
       should be specified so that <module>mod_charset_lite</module>
       doesn't add its filter.</dd>
+
+      <dt><code>ForceAllMimeTypes | NoForceAllMimeTypes</code></dt>
+      <dd>Normally, <module>mod_charset_lite</module> will only perform
+      translation on a small subset of possible mimetypes.  When the
+      <code>ForceAllMimeTypes</code> keyord is specified for a given
+      configuration section, translation is performed without regard for
+      mimetype.</dd>
+
     </dl>
 </usage>
 </directivesynopsis>
index ed8ecbe5ca2c079193144ca275b328c228123a30..2a276e3a625371f19980def0ad056fefc37d1a9a 100644 (file)
@@ -76,6 +76,8 @@ typedef struct charset_dir_t {
     const char *charset_default; /* how to ship on wire */
     /** module does ap_add_*_filter()? */
     enum {IA_INIT, IA_IMPADD, IA_NOIMPADD} implicit_add;
+    /** treat all mimetypes as text? */
+    enum {FX_INIT, FX_FORCE, FX_NOFORCE} force_xlate;
 } charset_dir_t;
 
 /* charset_filter_ctx_t is created for each filter instance; because the same
@@ -138,6 +140,8 @@ static void *merge_charset_dir_conf(apr_pool_t *p, void *basev, void *overridesv
         over->charset_source ? over->charset_source : base->charset_source;
     a->implicit_add =
         over->implicit_add != IA_INIT ? over->implicit_add : base->implicit_add;
+    a->force_xlate=
+        over->force_xlate != FX_INIT ? over->force_xlate : base->force_xlate;
     return a;
 }
 
@@ -176,6 +180,12 @@ static const char *add_charset_options(cmd_parms *cmd, void *in_dc,
     else if (!strcasecmp(flag, "NoImplicitAdd")) {
         dc->implicit_add = IA_NOIMPADD;
     }
+    if (!strcasecmp(flag, "ForceAllMimeTypes")) {
+        dc->force_xlate = FX_FORCE;
+    }
+    else if (!strcasecmp(flag, "NoForceAllMimeTypes")) {
+        dc->force_xlate = FX_NOFORCE;
+    }
     else if (!strncasecmp(flag, "DebugLevel=", 11)) {
         dc->debug = atoi(flag + 11);
     }
@@ -803,7 +813,8 @@ static apr_status_t xlate_out_filter(ap_filter_t *f, apr_bucket_brigade *bb)
          */
             strcmp(mime_type, DIR_MAGIC_TYPE) == 0 ||
 #endif
-            strncasecmp(mime_type, "message/", 8) == 0) {
+            strncasecmp(mime_type, "message/", 8) == 0 || 
+            dc->force_xlate == FX_FORCE) {
 
             rv = apr_xlate_open(&ctx->xlate,
                                 dc->charset_default, dc->charset_source, f->r->pool);