]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Add ProxyFtpDirCharset directive:
authorJim Jagielski <jim@apache.org>
Wed, 2 Jan 2008 19:25:08 +0000 (19:25 +0000)
committerJim Jagielski <jim@apache.org>
Wed, 2 Jan 2008 19:25:08 +0000 (19:25 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@608191 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
STATUS
docs/manual/mod/mod_proxy.xml
include/ap_mmn.h
modules/proxy/mod_proxy.c
modules/proxy/mod_proxy.h
modules/proxy/mod_proxy_ftp.c

diff --git a/CHANGES b/CHANGES
index cdddeebe62f97b590744f8ade7e203686766a21a..54c5c38dec2439be77379fb761f44221a392e794 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -19,6 +19,10 @@ Changes with Apache 2.2.7
      mod_imagemap: Fix a cross-site scripting issue.  Reported by JPCERT.
      [Joe Orton]
 
+  *) Introduce the ProxyFtpDirCharset directive, allowing the administrator
+     to identify a default, or specific servers or paths which list their
+     contents in other-than ISO-8859-1 charset (e.g. utf-8). [Ruediger Pluem]
+
   *) mod_dav: Adjust etag generation to produce identical results on 32-bit
      and 64-bit platforms and avoid a regression with conditional PUT's on lock
      and etag. PR 44152.
diff --git a/STATUS b/STATUS
index f0ff4647d5d64e45bbfe71f26bce03bea3747cb5..2b0361ea86bef5bacc0b02e67dfe6f43e75b40b7 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -107,17 +107,6 @@ RELEASE SHOWSTOPPERS:
 PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
   [ start all new proposals below, under PATCHES PROPOSED. ]
 
-  * mod_proxy_ftp: Introduce the ProxyFtpDirCharset directive, allowing
-    the administrator to identify a default, or specific servers or paths
-    which list their contents in other-than ISO-8859-1 charset (e.g. utf-8).
-    [Ruediger Pluem]
-      trunk version; http://svn.apache.org/viewvc?view=rev&revision=607638
-      backport;
-        http://people.apache.org/~wrowe/mod_proxy_ftp_dir_listing-2.2.diff
-      +1: wrowe, rpluem, jim
-      -0: niq: I dislike this patch for reasons stated on-list, but it
-               delivers the functionality needed for the charset "showstopper".
-
 
 PATCHES PROPOSED TO BACKPORT FROM TRUNK:
   [ New proposals should be added at the end of the list ]
index afe4af07e2ab6e04d6be187c5756b5b39dadba07..0e1ed9bbc1ccceae82afe49e7e96bd7a5680975a 100644 (file)
@@ -369,6 +369,22 @@ response</description>
 </usage>
 </directivesynopsis>
 
+<directivesynopsis>
+<name>ProxyFtpDirCharset</name>
+<description>Define the character set for proxied FTP listings</description>
+<syntax>ProxyFtpDirCharset <var>character set</var></syntax>
+<default>ProxyFtpDirCharset ISO-8859-1</default>
+<contextlist><context>server config</context><context>virtual host</context>
+<context>directory</context></contextlist>
+<compatibility>Available in Apache 2.2.7 and later</compatibility>
+
+<usage>
+    <p>The <directive>ProxyFtpDirCharset</directive> directive defines the
+    character set to be set for FTP directory listings in HTML generated by
+    <module>mod_proxy_ftp</module>.</p>
+</usage>
+</directivesynopsis>
+
 <directivesynopsis type="section">
 <name>ProxyMatch</name>
 <description>Container for directives applied to regular-expression-matched 
index 9a6fa36793230f6442bf689a45df663742228663..380346b2ba5b0b58bd029aca068e156d10f01963 100644 (file)
  * 20051115.8 (2.2.7)  Added flags to proxy_alias (minor)
  * 20051115.9 (2.2.7)  Add ap_send_interim_response API
  * 20051115.10(2.2.7)  Added ap_mod_status_reqtail (minor)
+ * 20051115.11(2.2.7)  Add *ftp_directory_charset to proxy_dir_conf
  *
  */
 
 #ifndef MODULE_MAGIC_NUMBER_MAJOR
 #define MODULE_MAGIC_NUMBER_MAJOR 20051115
 #endif
-#define MODULE_MAGIC_NUMBER_MINOR 10                    /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 11                    /* 0...n */
 
 /**
  * Determine if the server's current MODULE_MAGIC_NUMBER is at least a
index 1a4b48fae21aba51e371ea5f5579ea6b8152eafe..de48638bc3dc4b86b96e3204388efbdf97c6b49c 100644 (file)
@@ -1024,6 +1024,9 @@ static void *merge_proxy_dir_config(apr_pool_t *p, void *basev, void *addv)
         = apr_array_append(p, base->cookie_domains, add->cookie_domains);
     new->cookie_path_str = base->cookie_path_str;
     new->cookie_domain_str = base->cookie_domain_str;
+    new->ftp_directory_charset = add->ftp_directory_charset ?
+                                 add->ftp_directory_charset :
+                                 base->ftp_directory_charset;
     return new;
 }
 
@@ -1724,6 +1727,15 @@ static const char *
     return NULL;
 }
 
+static const char *set_ftp_directory_charset(cmd_parms *cmd, void *dconf,
+                                             const char *arg)
+{
+    proxy_dir_conf *conf = dconf;
+
+    conf->ftp_directory_charset = arg;
+    return NULL;
+}
+
 static void ap_add_per_proxy_conf(server_rec *s, ap_conf_vector_t *dir_config)
 {
     proxy_server_conf *sconf = ap_get_module_config(s->module_config,
@@ -1931,6 +1943,8 @@ static const command_rec proxy_cmds[] =
      "Configure Status: proxy status to one of: on | off | full"),
     AP_INIT_RAW_ARGS("ProxySet", set_proxy_param, NULL, RSRC_CONF|ACCESS_CONF,
      "A balancer or worker name with list of params"),
+    AP_INIT_TAKE1("ProxyFtpDirCharset", set_ftp_directory_charset, NULL,
+     RSRC_CONF|ACCESS_CONF, "Define the character set for proxied FTP listings"),
     {NULL}
 };
 
index c0a29c9fcfb0376b16fe0b31ff90ae388e807d93..3944104ebf0e62beb6a0392d9a1b583d6d42441f 100644 (file)
@@ -212,6 +212,7 @@ typedef struct {
     apr_array_header_t* cookie_domains;
     const apr_strmatch_pattern* cookie_path_str;
     const apr_strmatch_pattern* cookie_domain_str;
+    const char *ftp_directory_charset;
 } proxy_dir_conf;
 
 typedef struct {
index 1479733542b44bec1735d29ea1dc0c59d871a203..3cacac6e65c5b03b3354137ac216d57a8289077b 100644 (file)
@@ -1690,7 +1690,13 @@ static int proxy_ftp_handler(request_rec *r, proxy_worker *worker,
 
     /* set content-type */
     if (dirlisting) {
-        ap_set_content_type(r, "text/html");
+        proxy_dir_conf *dconf = ap_get_module_config(r->per_dir_config,
+                                                     &proxy_module);
+
+        ap_set_content_type(r, apr_pstrcat(p, "text/html;charset=",
+                                           dconf->ftp_directory_charset ?
+                                           dconf->ftp_directory_charset :
+                                           "ISO-8859-1",  NULL));
     }
     else {
         if (r->content_type) {