summaryrefslogtreecommitdiff
path: root/ftp
diff options
context:
space:
mode:
authorBeech Rintoul <beech@FreeBSD.org>2007-07-18 21:09:14 +0000
committerBeech Rintoul <beech@FreeBSD.org>2007-07-18 21:09:14 +0000
commit4bd54fe22fad18237d1d38548b2af81e5a57e670 (patch)
tree407b8d15ee609201b3e3755ce884fff7b13a968d /ftp
parentUpgrade to 2.29.1. (diff)
- Remove mod_codeconv
- Patch reviewed upstream. Not compatible with 1.3.1rc3. Duplicates and conflicts with utf8 functionality PR: ports/114502 Approved by: sat (mentor)
Diffstat (limited to 'ftp')
-rw-r--r--ftp/proftpd-devel/Makefile14
-rw-r--r--ftp/proftpd-devel/files/extra-patch-mod-codeconv425
-rw-r--r--ftp/proftpd/Makefile14
-rw-r--r--ftp/proftpd/files/extra-patch-mod-codeconv425
4 files changed, 4 insertions, 874 deletions
diff --git a/ftp/proftpd-devel/Makefile b/ftp/proftpd-devel/Makefile
index a08177abc960..a3db00749387 100644
--- a/ftp/proftpd-devel/Makefile
+++ b/ftp/proftpd-devel/Makefile
@@ -7,7 +7,7 @@
PORTNAME= proftpd
DISTVERSION= 1.3.1rc3
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= ftp
MASTER_SITES= ftp://ftp.proftpd.org/distrib/source/ \
ftp://ftp.fastorama.com/mirrors/ftp.proftpd.org/distrib/source/ \
@@ -70,8 +70,7 @@ OPTIONS= IPV6 "Use IPv6" off \
QUOTATAB_RADIUS "include mod_quotatab_radius" off \
BAN "include mod_ban (Requires CTRLS)" off \
NLS "Use nls (builds mod_lang)" off \
- CYRFIX "Use patch for fix cyrillic encoding" off \
- CODECONV "Use charset conversion (mod_codeconv)" off
+ CYRFIX "Use patch for fix cyrillic encoding" off
MODULES?=
LIBDIRS?=
@@ -211,15 +210,6 @@ MODULES:=${MODULES}:mod_quotatab_sql
.endif
.endif
-.if defined(WITH_CODECONV)
-USE_ICONV= YES
-MODULES:=${MODULES}:mod_codeconv
-INCLUDEDIRS:=${INCLUDEDIRS}:${LOCALBASE}/include
-CONFIGURE_ARGS+= --disable-sendfile
-PROFTPD_LIBS+= -liconv -L${LOCALBASE}/lib
-EXTRA_PATCHES+= ${FILESDIR}/extra-patch-mod-codeconv
-.endif
-
# mod_ifsession should be the last item in the modules list
.if !defined(WITHOUT_IFSESSION)
MODULES:=${MODULES}:mod_ifsession
diff --git a/ftp/proftpd-devel/files/extra-patch-mod-codeconv b/ftp/proftpd-devel/files/extra-patch-mod-codeconv
deleted file mode 100644
index a7de92ca3ff6..000000000000
--- a/ftp/proftpd-devel/files/extra-patch-mod-codeconv
+++ /dev/null
@@ -1,425 +0,0 @@
-diff -urN ./modules/mod_codeconv.c .-iconv/modules/mod_codeconv.c
---- ./modules/mod_codeconv.c 1970-01-01 09:00:00.000000000 +0900
-+++ modules/mod_codeconv.c 2004-09-25 21:44:05.000000000 +0900
-@@ -0,0 +1,229 @@
-+/*
-+ * ProFTPD: mod_codeconv -- local <-> remote charset conversion
-+ *
-+ * Copyright (c) 2004 by TSUJIKAWA Tohru <tsujikawa@tsg.ne.jp> / All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ */
-+
-+
-+#include "conf.h"
-+#include <iconv.h>
-+
-+
-+//
-+// directive
-+//
-+#define DIRECTIVE_CHARSETLOCAL "CharsetLocal"
-+#define DIRECTIVE_CHARSETREMOTE "CharsetRemote"
-+
-+
-+//
-+// initialization
-+//
-+static int codeconv_init(void)
-+{
-+ return 0;
-+}
-+
-+static int codeconv_sess_init(void)
-+{
-+ return 0;
-+}
-+
-+
-+char* remote2local(struct pool* pool, char* remote)
-+{
-+ iconv_t ic;
-+ char* local;
-+ char* in_ptr;
-+ char* out_ptr;
-+ size_t inbytesleft, outbytesleft;
-+
-+ config_rec* conf_l = NULL;
-+ config_rec* conf_r = NULL;
-+
-+ conf_l = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE);
-+ conf_r = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE);
-+ if (!conf_l || !conf_r) return NULL;
-+
-+ ic = iconv_open(conf_l->argv[0], conf_r->argv[0]);
-+ if (ic == (iconv_t)(-1)) return NULL;
-+
-+ iconv(ic, NULL, NULL, NULL, NULL);
-+
-+ inbytesleft = strlen(remote);
-+ outbytesleft = inbytesleft*3;
-+ local = palloc(pool, outbytesleft+1);
-+
-+ in_ptr = remote; out_ptr = local;
-+ while (inbytesleft) {
-+ if (iconv(ic, &in_ptr, &inbytesleft, &out_ptr, &outbytesleft) == -1) {
-+ *out_ptr = '?'; out_ptr++; outbytesleft--;
-+ in_ptr++; inbytesleft--;
-+ break;
-+ }
-+ }
-+ *out_ptr = 0;
-+
-+ iconv_close(ic);
-+
-+ return local;
-+}
-+
-+
-+char* local2remote(char* local)
-+{
-+ iconv_t ic;
-+ char* remote;
-+ char* in_ptr;
-+ char* out_ptr;
-+ size_t inbytesleft, outbytesleft;
-+
-+ config_rec* conf_l = NULL;
-+ config_rec* conf_r = NULL;
-+
-+ conf_l = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE);
-+ conf_r = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE);
-+ if (!conf_l || !conf_r) return NULL;
-+
-+ ic = iconv_open(conf_r->argv[0], conf_l->argv[0]);
-+ if (ic == (iconv_t)(-1)) return NULL;
-+
-+ iconv(ic, NULL, NULL, NULL, NULL);
-+
-+ inbytesleft = strlen(local);
-+ outbytesleft = inbytesleft*3;
-+ remote = malloc(outbytesleft+1);
-+
-+ in_ptr = local; out_ptr = remote;
-+ while (inbytesleft) {
-+ if (iconv(ic, &in_ptr, &inbytesleft, &out_ptr, &outbytesleft) == -1) {
-+ *out_ptr = '?'; out_ptr++; outbytesleft--;
-+ in_ptr++; inbytesleft--;
-+ break;
-+ }
-+ }
-+ *out_ptr = 0;
-+
-+ iconv_close(ic);
-+
-+ return remote;
-+}
-+
-+
-+//
-+// module handler
-+//
-+MODRET codeconv_pre_any(cmd_rec* cmd)
-+{
-+ char* p;
-+ int i;
-+
-+ p = remote2local(cmd->pool, cmd->arg);
-+ if (p) cmd->arg = p;
-+
-+ for (i = 0; i < cmd->argc; i++) {
-+ p = remote2local(cmd->pool, cmd->argv[i]);
-+ if (p) cmd->argv[i] = p;
-+ }
-+
-+ return DECLINED(cmd);
-+}
-+
-+
-+//
-+// local charset directive "CharsetLocal"
-+//
-+MODRET set_charsetlocal(cmd_rec *cmd) {
-+ config_rec *c = NULL;
-+
-+ /* Syntax: CharsetLocal iconv-charset-name */
-+
-+ CHECK_ARGS(cmd, 1);
-+ CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL);
-+
-+ c = add_config_param_str(DIRECTIVE_CHARSETLOCAL, 1, cmd->argv[1]);
-+
-+ return HANDLED(cmd);
-+}
-+
-+//
-+// remote charset directive "CharsetRemote"
-+//
-+MODRET set_charsetremote(cmd_rec *cmd) {
-+ config_rec *c = NULL;
-+
-+ /* Syntax: CharsetRemote iconv-charset-name */
-+
-+ CHECK_ARGS(cmd, 1);
-+ CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL);
-+
-+ c = add_config_param_str(DIRECTIVE_CHARSETREMOTE, 1, cmd->argv[1]);
-+
-+ return HANDLED(cmd);
-+}
-+
-+
-+//
-+// module &#9552;&#9572; directive
-+//
-+static conftable codeconv_conftab[] = {
-+ { DIRECTIVE_CHARSETLOCAL, set_charsetlocal, NULL },
-+ { DIRECTIVE_CHARSETREMOTE, set_charsetremote, NULL },
-+ { NULL, NULL, NULL }
-+};
-+
-+
-+//
-+// trap &#1076;&#9571;&#1076;&#1099;&#1077;&#9474;&#1077;&#9616;&#1077;&#1108;&#1077;&#9556;&#9617;&#1100;&#9552;&#1118;
-+//
-+static cmdtable codeconv_cmdtab[] = {
-+ { PRE_CMD, C_ANY, G_NONE, codeconv_pre_any, FALSE, FALSE },
-+ { 0, NULL }
-+};
-+
-+
-+//
-+// module &#9563;&#1025;&#9577;&#1108;
-+//
-+module codeconv_module = {
-+
-+ /* Always NULL */
-+ NULL, NULL,
-+
-+ /* Module API version (2.0) */
-+ 0x20,
-+
-+ /* Module name */
-+ "codeconv",
-+
-+ /* Module configuration directive handlers */
-+ codeconv_conftab,
-+
-+ /* Module command handlers */
-+ codeconv_cmdtab,
-+
-+ /* Module authentication handlers (none in this case) */
-+ NULL,
-+
-+ /* Module initialization */
-+ codeconv_init,
-+
-+ /* Session initialization */
-+ codeconv_sess_init
-+
-+};
-diff -urN ./modules/mod_df.c .-iconv/modules/mod_df.c
---- ./modules/mod_df.c 1970-01-01 09:00:00.000000000 +0900
-+++ modules/mod_df.c 2004-09-25 21:43:57.000000000 +0900
-@@ -0,0 +1,127 @@
-+/*
-+ * ProFTPD: mod_df -- &#1077;&#9567;&#1077;&#1075;&#1077;&#9571;&#1077;&#1087;&#9570;&#1111;&#1076;&#1085;&#9552;&#9566;&#9580;&#9568;&#9472;&#9568;&#9500;&#9580;&#1077;&#1090;&#1077;&#9557;&#1077;&#1093;&#1073;&#9565;&#1077;&#1099;
-+ *
-+ * Copyright (c) 2002 by TSUJIKAWA Tohru <tsujikawa@tsg.ne.jp>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ */
-+
-+ /*
-+ **** for Linux only ****
-+
-+ CWD/CDUP &#1077;&#9474;&#1077;&#9616;&#1077;&#1108;&#1077;&#9556;&#1076;&#9580;&#1077;&#1098;&#1077;&#9570;&#1077;&#1099;&#1077;&#9562;&#1076;&#9567;&#9532;&#1038;&#9474;&#9553;&#1077;&#9567;&#1077;&#1075;&#1077;&#1100;&#1077;&#1087;&#1077;&#9562;&#1077;&#1098;&#1076;&#9567;&#1076;&#9580;&#1077;&#9567;&#1077;&#1075;&#1077;&#9571;&#1077;&#1087;&#9570;&#1111;&#1076;&#1085;&#9552;&#9566;&#9580;&#9568;&#1076;&#1028;&#9472;&#9568;&#9500;&#9580;&#1076;&#9571;&#1076;&#1099;&#1077;&#1090;&#1077;&#9557;&#1077;&#1093;&#1073;&#9565;&#1077;&#1099;&#1076;&#9567;&#1076;&#9571;&#1073;&#1075;
-+
-+ statfs() &#1076;&#9580;&#9559;&#9532;&#9552;&#9552;&#9563;&#1093;&#1073;&#1076;64bit &#9552;&#9572;&#1076;&#9574;&#1077;&#9474;&#1077;&#1108;&#1077;&#9572;&#1077;&#1076;&#1077;&#1099;&#1076;&#9558;&#1076;&#9577;&#1076;&#1076;&#9563;&#1100;&#9571;&#1095;&#1076;&#9575; 2TB &#9617;&#9577;&#9563;&#1093;&#1076;&#9580;&#1077;&#9567;&#1077;&#1075;&#1077;&#9571;&#1077;&#1087;&#1076;&#9580;&#9559;&#9632;&#1076;&#9574;
-+ &#9492;&#9569;&#9563;&#1103;&#1076;&#9577;&#9500;&#9552;&#1076;&#1028;&#9577;&#9555;&#1076;&#9569;&#1076;&#9577;&#1076;&#1076;&#1076;&#9474;&#1076;&#9562;&#1076;&#1084;&#9508;&#8470;&#9516;&#9560;&#1076;&#9569;&#1076;&#1100;&#1076;&#9616;&#1076;&#9571;&#1073;&#1075;
-+
-+ */
-+
-+
-+#include "conf.h"
-+#include <sys/vfs.h>
-+
-+
-+//
-+// &#9564;&#1097;&#9508;&#8470;&#9619;&#9564;
-+//
-+static int df_init(void)
-+{
-+ return 0;
-+}
-+
-+static int df_sess_init(void)
-+{
-+ return 0;
-+}
-+
-+
-+//
-+// module handler
-+//
-+MODRET df_post_cwd(cmd_rec* cmd)
-+{
-+ char buf[PATH_MAX+1];
-+ struct statfs sfs;
-+
-+ if (getcwd(buf, sizeof(buf)) && statfs(buf, &sfs) == 0) {
-+ long long f = (long long)sfs.f_bavail * (long long)sfs.f_bsize;
-+ if (f >= ((long long)1 << 10)*1000000000L) {
-+ sprintf(buf, "Disk free space at this directory is %lld,%03lld,%03lld MB.",
-+ (f >> 20)/1000000, (f >> 20)/1000%1000, (f >> 20)%1000);
-+ } else if (f >= ((long long)1 << 10)*1000000) {
-+ sprintf(buf, "Disk free space at this directory is %lld,%03lld,%03lld KB.",
-+ (f >> 10)/1000000, (f >> 10)/1000%1000, (f >> 10)%1000);
-+ } else if (f >= ((long long)1 << 10)*1000) {
-+ sprintf(buf, "DISK FREE SPACE AT THIS DIRECTORY IS ONLY %lld,%03lld KB.", (f >> 10)/1000, (f >> 10)%1000);
-+ } else if (f >= 1000) {
-+ sprintf(buf, "DISK FREE SPACE AT THIS DIRECTORY IS ONLY %lld,%03lld Bytes.", f/1000, f%1000);
-+ } else {
-+ sprintf(buf, "DISK FREE SPACE AT THIS DIRECTORY IS ONLY %lld Bytes.", f);
-+ }
-+ pr_response_send_raw("250-%s", buf);
-+ }
-+ return HANDLED(cmd);
-+}
-+
-+
-+//
-+// module &#9552;&#9572; directive
-+//
-+static conftable df_conftab[] = {
-+ { NULL } // directive &#1076;&#9575;&#1077;&#9569;&#1077;&#9612;&#1073;&#9565;&#1077;&#9562;&#1076;&#9558;&#1076;&#9577;&#1076;&#1076;
-+};
-+
-+
-+//
-+// trap &#1076;&#9571;&#1076;&#1099;&#1077;&#9474;&#1077;&#9616;&#1077;&#1108;&#1077;&#9556;&#9617;&#1100;&#9552;&#1118;
-+//
-+static cmdtable df_cmdtab[] = {
-+ { POST_CMD, C_CWD, G_NONE, df_post_cwd, FALSE, FALSE },
-+ { POST_CMD, C_CDUP, G_NONE, df_post_cwd, FALSE, FALSE },
-+ { 0, NULL }
-+};
-+
-+
-+//
-+// module &#9563;&#1025;&#9577;&#1108;
-+//
-+module df_module = {
-+
-+ /* Always NULL */
-+ NULL, NULL,
-+
-+ /* Module API version (2.0) */
-+ 0x20,
-+
-+ /* Module name */
-+ "df",
-+
-+ /* Module configuration directive handlers */
-+ df_conftab,
-+
-+ /* Module command handlers */
-+ df_cmdtab,
-+
-+ /* Module authentication handlers (none in this case) */
-+ NULL,
-+
-+ /* Module initialization */
-+ df_init,
-+
-+ /* Session initialization */
-+ df_sess_init
-+
-+};
---- ./modules/mod_ls.c Sat Dec 16 01:25:31 2006
-+++ modules/mod_ls.c Tue Jan 23 15:43:20 2007
-@@ -244,12 +244,15 @@
- return res;
- }
-
-+extern char* local2remote(char*);
-+
- /* sendline() now has an internal buffer, to help speed up LIST output. */
- static int sendline(int flags, char *fmt, ...) {
- static char listbuf[PR_TUNABLE_BUFFER_SIZE] = {'\0'};
- va_list msg;
- char buf[PR_TUNABLE_BUFFER_SIZE+1] = {'\0'};
- int res = 0;
-+ char* buf2;
-
- if (flags & LS_SENDLINE_FL_FLUSH) {
- res = pr_data_xfer(listbuf, strlen(listbuf));
-@@ -268,6 +271,13 @@
-
- buf[sizeof(buf)-1] = '\0';
-
-+ if (buf[0]) {
-+ buf2 = local2remote(buf);
-+ if (buf2) {
-+ strcpy(buf, buf2); free(buf2);
-+ }
-+ }
-+
- /* If buf won't fit completely into listbuf, flush listbuf */
- if (strlen(buf) >= (sizeof(listbuf) - strlen(listbuf))) {
- res = pr_data_xfer(listbuf, strlen(listbuf));
-diff -urN ./src/netio.c .-iconv/src/netio.c
---- ./src/netio.c 2004-06-16 01:45:21.000000000 +0900
-+++ src/netio.c 2004-09-25 21:42:59.000000000 +0900
-@@ -467,9 +467,12 @@
- return -1;
- }
-
-+extern char* local2remote(char* local);
-+
- int pr_netio_printf(pr_netio_stream_t *nstrm, const char *fmt, ...) {
- va_list msg;
- char buf[PR_RESPONSE_BUFFER_SIZE] = {'\0'};
-+ char* p;
-
- if (!nstrm) {
- errno = EINVAL;
-@@ -481,6 +484,13 @@
- va_end(msg);
- buf[sizeof(buf)-1] = '\0';
-
-+ if (buf[0]) {
-+ p = local2remote(buf);
-+ if (p) {
-+ strcpy(buf, p); free(p);
-+ }
-+ }
-+
- return pr_netio_write(nstrm, buf, strlen(buf));
- }
diff --git a/ftp/proftpd/Makefile b/ftp/proftpd/Makefile
index a08177abc960..a3db00749387 100644
--- a/ftp/proftpd/Makefile
+++ b/ftp/proftpd/Makefile
@@ -7,7 +7,7 @@
PORTNAME= proftpd
DISTVERSION= 1.3.1rc3
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= ftp
MASTER_SITES= ftp://ftp.proftpd.org/distrib/source/ \
ftp://ftp.fastorama.com/mirrors/ftp.proftpd.org/distrib/source/ \
@@ -70,8 +70,7 @@ OPTIONS= IPV6 "Use IPv6" off \
QUOTATAB_RADIUS "include mod_quotatab_radius" off \
BAN "include mod_ban (Requires CTRLS)" off \
NLS "Use nls (builds mod_lang)" off \
- CYRFIX "Use patch for fix cyrillic encoding" off \
- CODECONV "Use charset conversion (mod_codeconv)" off
+ CYRFIX "Use patch for fix cyrillic encoding" off
MODULES?=
LIBDIRS?=
@@ -211,15 +210,6 @@ MODULES:=${MODULES}:mod_quotatab_sql
.endif
.endif
-.if defined(WITH_CODECONV)
-USE_ICONV= YES
-MODULES:=${MODULES}:mod_codeconv
-INCLUDEDIRS:=${INCLUDEDIRS}:${LOCALBASE}/include
-CONFIGURE_ARGS+= --disable-sendfile
-PROFTPD_LIBS+= -liconv -L${LOCALBASE}/lib
-EXTRA_PATCHES+= ${FILESDIR}/extra-patch-mod-codeconv
-.endif
-
# mod_ifsession should be the last item in the modules list
.if !defined(WITHOUT_IFSESSION)
MODULES:=${MODULES}:mod_ifsession
diff --git a/ftp/proftpd/files/extra-patch-mod-codeconv b/ftp/proftpd/files/extra-patch-mod-codeconv
deleted file mode 100644
index a7de92ca3ff6..000000000000
--- a/ftp/proftpd/files/extra-patch-mod-codeconv
+++ /dev/null
@@ -1,425 +0,0 @@
-diff -urN ./modules/mod_codeconv.c .-iconv/modules/mod_codeconv.c
---- ./modules/mod_codeconv.c 1970-01-01 09:00:00.000000000 +0900
-+++ modules/mod_codeconv.c 2004-09-25 21:44:05.000000000 +0900
-@@ -0,0 +1,229 @@
-+/*
-+ * ProFTPD: mod_codeconv -- local <-> remote charset conversion
-+ *
-+ * Copyright (c) 2004 by TSUJIKAWA Tohru <tsujikawa@tsg.ne.jp> / All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ */
-+
-+
-+#include "conf.h"
-+#include <iconv.h>
-+
-+
-+//
-+// directive
-+//
-+#define DIRECTIVE_CHARSETLOCAL "CharsetLocal"
-+#define DIRECTIVE_CHARSETREMOTE "CharsetRemote"
-+
-+
-+//
-+// initialization
-+//
-+static int codeconv_init(void)
-+{
-+ return 0;
-+}
-+
-+static int codeconv_sess_init(void)
-+{
-+ return 0;
-+}
-+
-+
-+char* remote2local(struct pool* pool, char* remote)
-+{
-+ iconv_t ic;
-+ char* local;
-+ char* in_ptr;
-+ char* out_ptr;
-+ size_t inbytesleft, outbytesleft;
-+
-+ config_rec* conf_l = NULL;
-+ config_rec* conf_r = NULL;
-+
-+ conf_l = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE);
-+ conf_r = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE);
-+ if (!conf_l || !conf_r) return NULL;
-+
-+ ic = iconv_open(conf_l->argv[0], conf_r->argv[0]);
-+ if (ic == (iconv_t)(-1)) return NULL;
-+
-+ iconv(ic, NULL, NULL, NULL, NULL);
-+
-+ inbytesleft = strlen(remote);
-+ outbytesleft = inbytesleft*3;
-+ local = palloc(pool, outbytesleft+1);
-+
-+ in_ptr = remote; out_ptr = local;
-+ while (inbytesleft) {
-+ if (iconv(ic, &in_ptr, &inbytesleft, &out_ptr, &outbytesleft) == -1) {
-+ *out_ptr = '?'; out_ptr++; outbytesleft--;
-+ in_ptr++; inbytesleft--;
-+ break;
-+ }
-+ }
-+ *out_ptr = 0;
-+
-+ iconv_close(ic);
-+
-+ return local;
-+}
-+
-+
-+char* local2remote(char* local)
-+{
-+ iconv_t ic;
-+ char* remote;
-+ char* in_ptr;
-+ char* out_ptr;
-+ size_t inbytesleft, outbytesleft;
-+
-+ config_rec* conf_l = NULL;
-+ config_rec* conf_r = NULL;
-+
-+ conf_l = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE);
-+ conf_r = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE);
-+ if (!conf_l || !conf_r) return NULL;
-+
-+ ic = iconv_open(conf_r->argv[0], conf_l->argv[0]);
-+ if (ic == (iconv_t)(-1)) return NULL;
-+
-+ iconv(ic, NULL, NULL, NULL, NULL);
-+
-+ inbytesleft = strlen(local);
-+ outbytesleft = inbytesleft*3;
-+ remote = malloc(outbytesleft+1);
-+
-+ in_ptr = local; out_ptr = remote;
-+ while (inbytesleft) {
-+ if (iconv(ic, &in_ptr, &inbytesleft, &out_ptr, &outbytesleft) == -1) {
-+ *out_ptr = '?'; out_ptr++; outbytesleft--;
-+ in_ptr++; inbytesleft--;
-+ break;
-+ }
-+ }
-+ *out_ptr = 0;
-+
-+ iconv_close(ic);
-+
-+ return remote;
-+}
-+
-+
-+//
-+// module handler
-+//
-+MODRET codeconv_pre_any(cmd_rec* cmd)
-+{
-+ char* p;
-+ int i;
-+
-+ p = remote2local(cmd->pool, cmd->arg);
-+ if (p) cmd->arg = p;
-+
-+ for (i = 0; i < cmd->argc; i++) {
-+ p = remote2local(cmd->pool, cmd->argv[i]);
-+ if (p) cmd->argv[i] = p;
-+ }
-+
-+ return DECLINED(cmd);
-+}
-+
-+
-+//
-+// local charset directive "CharsetLocal"
-+//
-+MODRET set_charsetlocal(cmd_rec *cmd) {
-+ config_rec *c = NULL;
-+
-+ /* Syntax: CharsetLocal iconv-charset-name */
-+
-+ CHECK_ARGS(cmd, 1);
-+ CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL);
-+
-+ c = add_config_param_str(DIRECTIVE_CHARSETLOCAL, 1, cmd->argv[1]);
-+
-+ return HANDLED(cmd);
-+}
-+
-+//
-+// remote charset directive "CharsetRemote"
-+//
-+MODRET set_charsetremote(cmd_rec *cmd) {
-+ config_rec *c = NULL;
-+
-+ /* Syntax: CharsetRemote iconv-charset-name */
-+
-+ CHECK_ARGS(cmd, 1);
-+ CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL);
-+
-+ c = add_config_param_str(DIRECTIVE_CHARSETREMOTE, 1, cmd->argv[1]);
-+
-+ return HANDLED(cmd);
-+}
-+
-+
-+//
-+// module &#9552;&#9572; directive
-+//
-+static conftable codeconv_conftab[] = {
-+ { DIRECTIVE_CHARSETLOCAL, set_charsetlocal, NULL },
-+ { DIRECTIVE_CHARSETREMOTE, set_charsetremote, NULL },
-+ { NULL, NULL, NULL }
-+};
-+
-+
-+//
-+// trap &#1076;&#9571;&#1076;&#1099;&#1077;&#9474;&#1077;&#9616;&#1077;&#1108;&#1077;&#9556;&#9617;&#1100;&#9552;&#1118;
-+//
-+static cmdtable codeconv_cmdtab[] = {
-+ { PRE_CMD, C_ANY, G_NONE, codeconv_pre_any, FALSE, FALSE },
-+ { 0, NULL }
-+};
-+
-+
-+//
-+// module &#9563;&#1025;&#9577;&#1108;
-+//
-+module codeconv_module = {
-+
-+ /* Always NULL */
-+ NULL, NULL,
-+
-+ /* Module API version (2.0) */
-+ 0x20,
-+
-+ /* Module name */
-+ "codeconv",
-+
-+ /* Module configuration directive handlers */
-+ codeconv_conftab,
-+
-+ /* Module command handlers */
-+ codeconv_cmdtab,
-+
-+ /* Module authentication handlers (none in this case) */
-+ NULL,
-+
-+ /* Module initialization */
-+ codeconv_init,
-+
-+ /* Session initialization */
-+ codeconv_sess_init
-+
-+};
-diff -urN ./modules/mod_df.c .-iconv/modules/mod_df.c
---- ./modules/mod_df.c 1970-01-01 09:00:00.000000000 +0900
-+++ modules/mod_df.c 2004-09-25 21:43:57.000000000 +0900
-@@ -0,0 +1,127 @@
-+/*
-+ * ProFTPD: mod_df -- &#1077;&#9567;&#1077;&#1075;&#1077;&#9571;&#1077;&#1087;&#9570;&#1111;&#1076;&#1085;&#9552;&#9566;&#9580;&#9568;&#9472;&#9568;&#9500;&#9580;&#1077;&#1090;&#1077;&#9557;&#1077;&#1093;&#1073;&#9565;&#1077;&#1099;
-+ *
-+ * Copyright (c) 2002 by TSUJIKAWA Tohru <tsujikawa@tsg.ne.jp>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ */
-+
-+ /*
-+ **** for Linux only ****
-+
-+ CWD/CDUP &#1077;&#9474;&#1077;&#9616;&#1077;&#1108;&#1077;&#9556;&#1076;&#9580;&#1077;&#1098;&#1077;&#9570;&#1077;&#1099;&#1077;&#9562;&#1076;&#9567;&#9532;&#1038;&#9474;&#9553;&#1077;&#9567;&#1077;&#1075;&#1077;&#1100;&#1077;&#1087;&#1077;&#9562;&#1077;&#1098;&#1076;&#9567;&#1076;&#9580;&#1077;&#9567;&#1077;&#1075;&#1077;&#9571;&#1077;&#1087;&#9570;&#1111;&#1076;&#1085;&#9552;&#9566;&#9580;&#9568;&#1076;&#1028;&#9472;&#9568;&#9500;&#9580;&#1076;&#9571;&#1076;&#1099;&#1077;&#1090;&#1077;&#9557;&#1077;&#1093;&#1073;&#9565;&#1077;&#1099;&#1076;&#9567;&#1076;&#9571;&#1073;&#1075;
-+
-+ statfs() &#1076;&#9580;&#9559;&#9532;&#9552;&#9552;&#9563;&#1093;&#1073;&#1076;64bit &#9552;&#9572;&#1076;&#9574;&#1077;&#9474;&#1077;&#1108;&#1077;&#9572;&#1077;&#1076;&#1077;&#1099;&#1076;&#9558;&#1076;&#9577;&#1076;&#1076;&#9563;&#1100;&#9571;&#1095;&#1076;&#9575; 2TB &#9617;&#9577;&#9563;&#1093;&#1076;&#9580;&#1077;&#9567;&#1077;&#1075;&#1077;&#9571;&#1077;&#1087;&#1076;&#9580;&#9559;&#9632;&#1076;&#9574;
-+ &#9492;&#9569;&#9563;&#1103;&#1076;&#9577;&#9500;&#9552;&#1076;&#1028;&#9577;&#9555;&#1076;&#9569;&#1076;&#9577;&#1076;&#1076;&#1076;&#9474;&#1076;&#9562;&#1076;&#1084;&#9508;&#8470;&#9516;&#9560;&#1076;&#9569;&#1076;&#1100;&#1076;&#9616;&#1076;&#9571;&#1073;&#1075;
-+
-+ */
-+
-+
-+#include "conf.h"
-+#include <sys/vfs.h>
-+
-+
-+//
-+// &#9564;&#1097;&#9508;&#8470;&#9619;&#9564;
-+//
-+static int df_init(void)
-+{
-+ return 0;
-+}
-+
-+static int df_sess_init(void)
-+{
-+ return 0;
-+}
-+
-+
-+//
-+// module handler
-+//
-+MODRET df_post_cwd(cmd_rec* cmd)
-+{
-+ char buf[PATH_MAX+1];
-+ struct statfs sfs;
-+
-+ if (getcwd(buf, sizeof(buf)) && statfs(buf, &sfs) == 0) {
-+ long long f = (long long)sfs.f_bavail * (long long)sfs.f_bsize;
-+ if (f >= ((long long)1 << 10)*1000000000L) {
-+ sprintf(buf, "Disk free space at this directory is %lld,%03lld,%03lld MB.",
-+ (f >> 20)/1000000, (f >> 20)/1000%1000, (f >> 20)%1000);
-+ } else if (f >= ((long long)1 << 10)*1000000) {
-+ sprintf(buf, "Disk free space at this directory is %lld,%03lld,%03lld KB.",
-+ (f >> 10)/1000000, (f >> 10)/1000%1000, (f >> 10)%1000);
-+ } else if (f >= ((long long)1 << 10)*1000) {
-+ sprintf(buf, "DISK FREE SPACE AT THIS DIRECTORY IS ONLY %lld,%03lld KB.", (f >> 10)/1000, (f >> 10)%1000);
-+ } else if (f >= 1000) {
-+ sprintf(buf, "DISK FREE SPACE AT THIS DIRECTORY IS ONLY %lld,%03lld Bytes.", f/1000, f%1000);
-+ } else {
-+ sprintf(buf, "DISK FREE SPACE AT THIS DIRECTORY IS ONLY %lld Bytes.", f);
-+ }
-+ pr_response_send_raw("250-%s", buf);
-+ }
-+ return HANDLED(cmd);
-+}
-+
-+
-+//
-+// module &#9552;&#9572; directive
-+//
-+static conftable df_conftab[] = {
-+ { NULL } // directive &#1076;&#9575;&#1077;&#9569;&#1077;&#9612;&#1073;&#9565;&#1077;&#9562;&#1076;&#9558;&#1076;&#9577;&#1076;&#1076;
-+};
-+
-+
-+//
-+// trap &#1076;&#9571;&#1076;&#1099;&#1077;&#9474;&#1077;&#9616;&#1077;&#1108;&#1077;&#9556;&#9617;&#1100;&#9552;&#1118;
-+//
-+static cmdtable df_cmdtab[] = {
-+ { POST_CMD, C_CWD, G_NONE, df_post_cwd, FALSE, FALSE },
-+ { POST_CMD, C_CDUP, G_NONE, df_post_cwd, FALSE, FALSE },
-+ { 0, NULL }
-+};
-+
-+
-+//
-+// module &#9563;&#1025;&#9577;&#1108;
-+//
-+module df_module = {
-+
-+ /* Always NULL */
-+ NULL, NULL,
-+
-+ /* Module API version (2.0) */
-+ 0x20,
-+
-+ /* Module name */
-+ "df",
-+
-+ /* Module configuration directive handlers */
-+ df_conftab,
-+
-+ /* Module command handlers */
-+ df_cmdtab,
-+
-+ /* Module authentication handlers (none in this case) */
-+ NULL,
-+
-+ /* Module initialization */
-+ df_init,
-+
-+ /* Session initialization */
-+ df_sess_init
-+
-+};
---- ./modules/mod_ls.c Sat Dec 16 01:25:31 2006
-+++ modules/mod_ls.c Tue Jan 23 15:43:20 2007
-@@ -244,12 +244,15 @@
- return res;
- }
-
-+extern char* local2remote(char*);
-+
- /* sendline() now has an internal buffer, to help speed up LIST output. */
- static int sendline(int flags, char *fmt, ...) {
- static char listbuf[PR_TUNABLE_BUFFER_SIZE] = {'\0'};
- va_list msg;
- char buf[PR_TUNABLE_BUFFER_SIZE+1] = {'\0'};
- int res = 0;
-+ char* buf2;
-
- if (flags & LS_SENDLINE_FL_FLUSH) {
- res = pr_data_xfer(listbuf, strlen(listbuf));
-@@ -268,6 +271,13 @@
-
- buf[sizeof(buf)-1] = '\0';
-
-+ if (buf[0]) {
-+ buf2 = local2remote(buf);
-+ if (buf2) {
-+ strcpy(buf, buf2); free(buf2);
-+ }
-+ }
-+
- /* If buf won't fit completely into listbuf, flush listbuf */
- if (strlen(buf) >= (sizeof(listbuf) - strlen(listbuf))) {
- res = pr_data_xfer(listbuf, strlen(listbuf));
-diff -urN ./src/netio.c .-iconv/src/netio.c
---- ./src/netio.c 2004-06-16 01:45:21.000000000 +0900
-+++ src/netio.c 2004-09-25 21:42:59.000000000 +0900
-@@ -467,9 +467,12 @@
- return -1;
- }
-
-+extern char* local2remote(char* local);
-+
- int pr_netio_printf(pr_netio_stream_t *nstrm, const char *fmt, ...) {
- va_list msg;
- char buf[PR_RESPONSE_BUFFER_SIZE] = {'\0'};
-+ char* p;
-
- if (!nstrm) {
- errno = EINVAL;
-@@ -481,6 +484,13 @@
- va_end(msg);
- buf[sizeof(buf)-1] = '\0';
-
-+ if (buf[0]) {
-+ p = local2remote(buf);
-+ if (p) {
-+ strcpy(buf, p); free(p);
-+ }
-+ }
-+
- return pr_netio_write(nstrm, buf, strlen(buf));
- }