diff options
author | Beech Rintoul <beech@FreeBSD.org> | 2007-07-18 21:09:14 +0000 |
---|---|---|
committer | Beech Rintoul <beech@FreeBSD.org> | 2007-07-18 21:09:14 +0000 |
commit | 4bd54fe22fad18237d1d38548b2af81e5a57e670 (patch) | |
tree | 407b8d15ee609201b3e3755ce884fff7b13a968d /ftp | |
parent | Upgrade 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/Makefile | 14 | ||||
-rw-r--r-- | ftp/proftpd-devel/files/extra-patch-mod-codeconv | 425 | ||||
-rw-r--r-- | ftp/proftpd/Makefile | 14 | ||||
-rw-r--r-- | ftp/proftpd/files/extra-patch-mod-codeconv | 425 |
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 ═╤ directive -+// -+static conftable codeconv_conftab[] = { -+ { DIRECTIVE_CHARSETLOCAL, set_charsetlocal, NULL }, -+ { DIRECTIVE_CHARSETREMOTE, set_charsetremote, NULL }, -+ { NULL, NULL, NULL } -+}; -+ -+ -+// -+// trap д╣дые│е▐еєе╔░ь═ў -+// -+static cmdtable codeconv_cmdtab[] = { -+ { PRE_CMD, C_ANY, G_NONE, codeconv_pre_any, FALSE, FALSE }, -+ { 0, NULL } -+}; -+ -+ -+// -+// module ╛Ё╩є -+// -+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 -- е╟еге╣еп╢їдн═╞╬╠─╠├╬ете╕ехб╝еы -+ * -+ * 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 е│е▐еєе╔д╬еъе╢еые╚д╟┼Ў│║е╟егеьепе╚еъд╟д╬е╟еге╣еп╢їдн═╞╬╠дЄ─╠├╬д╣дыете╕ехб╝еыд╟д╣бг -+ -+ statfs() д╬╗┼══╛хбд64bit ═╤д╦е│еєе╤едеыд╖д╩дд╛ь╣чд╧ 2TB ░╩╛хд╬е╟еге╣епд╬╗■д╦ -+ └╡╛яд╩├═дЄ╩╓д╡д╩ддд│д╚дм┤№┬╘д╡дьд▐д╣бг -+ -+ */ -+ -+ -+#include "conf.h" -+#include <sys/vfs.h> -+ -+ -+// -+// ╜щ┤№▓╜ -+// -+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 ═╤ directive -+// -+static conftable df_conftab[] = { -+ { NULL } // directive д╧е╡е▌б╝е╚д╖д╩дд -+}; -+ -+ -+// -+// trap д╣дые│е▐еєе╔░ь═ў -+// -+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 ╛Ё╩є -+// -+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 ═╤ directive -+// -+static conftable codeconv_conftab[] = { -+ { DIRECTIVE_CHARSETLOCAL, set_charsetlocal, NULL }, -+ { DIRECTIVE_CHARSETREMOTE, set_charsetremote, NULL }, -+ { NULL, NULL, NULL } -+}; -+ -+ -+// -+// trap д╣дые│е▐еєе╔░ь═ў -+// -+static cmdtable codeconv_cmdtab[] = { -+ { PRE_CMD, C_ANY, G_NONE, codeconv_pre_any, FALSE, FALSE }, -+ { 0, NULL } -+}; -+ -+ -+// -+// module ╛Ё╩є -+// -+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 -- е╟еге╣еп╢їдн═╞╬╠─╠├╬ете╕ехб╝еы -+ * -+ * 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 е│е▐еєе╔д╬еъе╢еые╚д╟┼Ў│║е╟егеьепе╚еъд╟д╬е╟еге╣еп╢їдн═╞╬╠дЄ─╠├╬д╣дыете╕ехб╝еыд╟д╣бг -+ -+ statfs() д╬╗┼══╛хбд64bit ═╤д╦е│еєе╤едеыд╖д╩дд╛ь╣чд╧ 2TB ░╩╛хд╬е╟еге╣епд╬╗■д╦ -+ └╡╛яд╩├═дЄ╩╓д╡д╩ддд│д╚дм┤№┬╘д╡дьд▐д╣бг -+ -+ */ -+ -+ -+#include "conf.h" -+#include <sys/vfs.h> -+ -+ -+// -+// ╜щ┤№▓╜ -+// -+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 ═╤ directive -+// -+static conftable df_conftab[] = { -+ { NULL } // directive д╧е╡е▌б╝е╚д╖д╩дд -+}; -+ -+ -+// -+// trap д╣дые│е▐еєе╔░ь═ў -+// -+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 ╛Ё╩є -+// -+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)); - } |