From: Jim Jagielski Date: Wed, 2 Jan 2008 19:25:08 +0000 (+0000) Subject: Add ProxyFtpDirCharset directive: X-Git-Tag: 2.2.7~10 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=71dab7bf452aae013f548c357358a5395a30510b;p=thirdparty%2Fapache%2Fhttpd.git Add ProxyFtpDirCharset directive: git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@608191 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index cdddeebe62f..54c5c38dec2 100644 --- 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 f0ff4647d5d..2b0361ea86b 100644 --- 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 ] diff --git a/docs/manual/mod/mod_proxy.xml b/docs/manual/mod/mod_proxy.xml index afe4af07e2a..0e1ed9bbc1c 100644 --- a/docs/manual/mod/mod_proxy.xml +++ b/docs/manual/mod/mod_proxy.xml @@ -369,6 +369,22 @@ response + +ProxyFtpDirCharset +Define the character set for proxied FTP listings +ProxyFtpDirCharset character set +ProxyFtpDirCharset ISO-8859-1 +server configvirtual host +directory +Available in Apache 2.2.7 and later + + +

The ProxyFtpDirCharset directive defines the + character set to be set for FTP directory listings in HTML generated by + mod_proxy_ftp.

+
+
+ ProxyMatch Container for directives applied to regular-expression-matched diff --git a/include/ap_mmn.h b/include/ap_mmn.h index 9a6fa367932..380346b2ba5 100644 --- a/include/ap_mmn.h +++ b/include/ap_mmn.h @@ -119,6 +119,7 @@ * 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 * */ @@ -127,7 +128,7 @@ #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 diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c index 1a4b48fae21..de48638bc3d 100644 --- a/modules/proxy/mod_proxy.c +++ b/modules/proxy/mod_proxy.c @@ -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} }; diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index c0a29c9fcfb..3944104ebf0 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -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 { diff --git a/modules/proxy/mod_proxy_ftp.c b/modules/proxy/mod_proxy_ftp.c index 1479733542b..3cacac6e65c 100644 --- a/modules/proxy/mod_proxy_ftp.c +++ b/modules/proxy/mod_proxy_ftp.c @@ -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) {