FreeBSD Bugzilla – Attachment 71766 Details for
Bug 104453
[NEW PORT] russian/proftpd
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
file.shar
file.shar (text/plain), 23.00 KB, created by
dindin
on 2006-10-16 09:00:37 UTC
(
hide
)
Description:
file.shar
Filename:
MIME Type:
Creator:
dindin
Created:
2006-10-16 09:00:37 UTC
Size:
23.00 KB
patch
obsolete
># This is a shell archive. Save it in a file, remove anything before ># this line, and then unpack it by entering "sh file". Note, it may ># create directories; files and directories will be owned by you and ># have default permissions. ># ># This archive contains: ># ># russian/proftpd ># russian/proftpd/Makefile ># russian/proftpd/files ># russian/proftpd/files/patch-zz ># russian/proftpd/files/extra_patch-configure.in ># russian/proftpd/files/extra_patch-ldap-tls-mod_ldap.c ># russian/proftpd/files/patch-ah ># russian/proftpd/files/patch-contrib::mod_sql_mysql.c ># russian/proftpd/files/patch-doc::Configuration.html ># russian/proftpd/files/patch-module::mod_auth_pam.c ># russian/proftpd/files/patch-sample-configurations_basic.conf ># russian/proftpd/files/patch-src_proftpd.8.in ># russian/proftpd/files/patch-encoding ># >echo c - russian/proftpd >mkdir -p russian/proftpd > /dev/null 2>&1 >echo x - russian/proftpd/Makefile >sed 's/^X//' >russian/proftpd/Makefile << 'END-of-russian/proftpd/Makefile' >X# New ports collection makefile for: russian/proftpd >X# Date created: 12 Oct 2006 >X# Whom: Denis Barov <dindin@freebsd.org.ua> >X# >X# $FreeBSD:$ >X# >X >XCATEGORIES= russian ftp >X >XMAINTAINER= dindin@FreeBSD.org.ua >XCOMMENT= Highly configurable ftp daemon with charset conversion >X >XMASTERDIR= ${.CURDIR}/../../ftp/proftpd >X >XCONFLICTS= proftpd-1.* >X >XCONFIGURE_ARGS+= --with-modules=mod_codeconv >XMODULES:=${MODULES}:mod_codeconv >XPROFTPD_LIBS+= -liconv -L${LOCALBASE}/lib >X >XPATCHDIR= ${.CURDIR}/files >X >XINCLUDEDIRS:=${INCLUDEDIRS}:${PREFIX}/include >XLIBDIRS:=${LIBDIRS}:${PREFIX}/lib >X >X.include "${MASTERDIR}/Makefile" >END-of-russian/proftpd/Makefile >echo c - russian/proftpd/files >mkdir -p russian/proftpd/files > /dev/null 2>&1 >echo x - russian/proftpd/files/patch-zz >sed 's/^X//' >russian/proftpd/files/patch-zz << 'END-of-russian/proftpd/files/patch-zz' >X--- ./src/netio.c.orig Sun Oct 10 00:46:22 2004 >X+++ ./src/netio.c Thu Oct 12 15:17:22 2006 >X@@ -901,47 +901,6 @@ >X cp = *pbuf->current++; >X pbuf->remaining++; >X >X- switch (mode) { >X- case IAC: >X- switch (cp) { >X- case WILL: >X- case WONT: >X- case DO: >X- case DONT: >X- mode = cp; >X- continue; >X- >X- case IAC: >X- mode = 0; >X- break; >X- >X- default: >X- /* Ignore */ >X- mode = 0; >X- continue; >X- } >X- break; >X- >X- case WILL: >X- case WONT: >X- pr_netio_printf(out_nstrm, "%c%c%c", IAC, DONT, cp); >X- mode = 0; >X- continue; >X- >X- case DO: >X- case DONT: >X- pr_netio_printf(out_nstrm, "%c%c%c", IAC, WONT, cp); >X- mode = 0; >X- continue; >X- >X- default: >X- if (cp == IAC) { >X- mode = cp; >X- continue; >X- } >X- break; >X- } >X- >X *bp++ = cp; >X buflen--; >X } >END-of-russian/proftpd/files/patch-zz >echo x - russian/proftpd/files/extra_patch-configure.in >sed 's/^X//' >russian/proftpd/files/extra_patch-configure.in << 'END-of-russian/proftpd/files/extra_patch-configure.in' >X--- configure.in Thu Mar 9 09:12:35 2006 >X+++ configure.in Mon May 22 15:01:23 2006 >X@@ -161,12 +161,14 @@ >X [ >X if test "$withval" != "no" ; then >X LIB_OBJS="$LIB_OBJS getopt.o getopt1.o" >X- AC_CHECK_FUNCS(getopt) >X+ AC_CHECK_FUNCS(getopt getopt_long) >X+ AC_CHECK_HEADERS(getopt.h) >X fi >X ], >X [ >X LIB_OBJS="$LIB_OBJS getopt.o getopt1.o" >X- AC_CHECK_FUNCS(getopt) >X+ AC_CHECK_FUNCS(getopt getopt_long) >X+ AC_CHECK_HEADERS(getopt.h) >X ]) >X >X dnl Modules...'nuff said. >X@@ -850,7 +852,7 @@ >X ac_build_static_modules="modules/mod_cap.o $ac_build_static_modules" >X fi >X >X-AC_CHECK_HEADERS(ctype.h getopt.h crypt.h bstring.h iconv.h inttypes.h langinfo.h limits.h) >X+AC_CHECK_HEADERS(ctype.h crypt.h bstring.h iconv.h inttypes.h langinfo.h limits.h) >X AC_CHECK_HEADERS(string.h strings.h stropts.h) >X AC_CHECK_HEADERS(sys/file.h sys/mman.h sys/types.h sys/uio.h) >X >X@@ -1110,7 +1112,7 @@ >X ) >X >X AC_CHECK_FUNCS(getcwd getenv gethostbyname2 gethostname getnameinfo) >X-AC_CHECK_FUNCS(getopt_long gettimeofday hstrerror inet_aton inet_ntop inet_pton) >X+AC_CHECK_FUNCS(gettimeofday hstrerror inet_aton inet_ntop inet_pton) >X AC_CHECK_FUNCS(memcpy mempcpy mkdir mkstemp mlock mlockall munlock munlockall) >X AC_CHECK_FUNCS(rmdir select setgroups socket statfs strchr strcoll strerror) >X AC_CHECK_FUNCS(strsep strtol strtoull setprotoent setspent endprotoent) >END-of-russian/proftpd/files/extra_patch-configure.in >echo x - russian/proftpd/files/extra_patch-ldap-tls-mod_ldap.c >sed 's/^X//' >russian/proftpd/files/extra_patch-ldap-tls-mod_ldap.c << 'END-of-russian/proftpd/files/extra_patch-ldap-tls-mod_ldap.c' >X--- contrib/mod_ldap.c Fri Apr 21 10:31:23 2006 >X+++ contrib/mod_ldap.c Fri Apr 21 10:31:43 2006 >X@@ -55,7 +55,7 @@ >X * after connecting to the LDAP server. If TLS cannot be enabled, the LDAP >X * connection will fail. >X */ >X-/* #define USE_LDAP_TLS */ >X+#define USE_LDAP_TLS >END-of-russian/proftpd/files/extra_patch-ldap-tls-mod_ldap.c >echo x - russian/proftpd/files/patch-ah >sed 's/^X//' >russian/proftpd/files/patch-ah << 'END-of-russian/proftpd/files/patch-ah' >X--- modules/mod_auth_unix.c.orig Thu May 13 23:40:18 2004 >X+++ modules/mod_auth_unix.c Thu May 13 23:40:27 2004 >X@@ -57,6 +57,7 @@ >X #endif /* HAVE_HPSECURITY_H or HPUX10 or HPUX11 */ >X >X #if defined(HAVE_PROT_H) || defined(COMSEC) >X+# include <krb.h> >X # include <prot.h> >X #endif >X >END-of-russian/proftpd/files/patch-ah >echo x - russian/proftpd/files/patch-contrib::mod_sql_mysql.c >sed 's/^X//' >russian/proftpd/files/patch-contrib::mod_sql_mysql.c << 'END-of-russian/proftpd/files/patch-contrib::mod_sql_mysql.c' >X--- contrib/mod_sql_mysql.c.orig Sun Nov 2 00:30:13 2003 >X+++ contrib/mod_sql_mysql.c Sun Nov 2 00:30:23 2003 >X@@ -134,7 +134,7 @@ >X >X #define _MYSQL_PORT "3306" >X >X-#include <mysql.h> >X+#include <mysql/mysql.h> >X #include "conf.h" >X #include "../contrib/mod_sql.h" >X >END-of-russian/proftpd/files/patch-contrib::mod_sql_mysql.c >echo x - russian/proftpd/files/patch-doc::Configuration.html >sed 's/^X//' >russian/proftpd/files/patch-doc::Configuration.html << 'END-of-russian/proftpd/files/patch-doc::Configuration.html' >X--- ./doc/Configuration.html.orig Wed Jan 29 12:27:24 2003 >X+++ ./doc/Configuration.html Sat Mar 15 11:34:14 2003 >X@@ -4226,7 +4226,7 @@ >X ></DT >X ><DD >X ><P >X->ftp</P >X+>ftpd</P >X ></DD >X ><DT >X ><PRE >X@@ -32252,4 +32252,4 @@ >X ></DIV >X ></BODY >X ></HTML >X-> >X\ No newline at end of file >X+> >END-of-russian/proftpd/files/patch-doc::Configuration.html >echo x - russian/proftpd/files/patch-module::mod_auth_pam.c >sed 's/^X//' >russian/proftpd/files/patch-module::mod_auth_pam.c << 'END-of-russian/proftpd/files/patch-module::mod_auth_pam.c' >X--- ./modules/mod_auth_pam.c.orig Thu Jan 2 13:25:20 2003 >X+++ ./modules/mod_auth_pam.c Sat Mar 15 11:35:00 2003 >X@@ -57,7 +57,7 @@ >X #endif /* HAVE_PAM_PAM_APPL_H */ >X >X static pam_handle_t * pamh = NULL; >X-static char * pamconfig = "ftp"; >X+static char * pamconfig = "ftpd"; >X static char * pam_user = NULL; >X static char * pam_pass = NULL; >X static size_t pam_user_len = 0; >END-of-russian/proftpd/files/patch-module::mod_auth_pam.c >echo x - russian/proftpd/files/patch-sample-configurations_basic.conf >sed 's/^X//' >russian/proftpd/files/patch-sample-configurations_basic.conf << 'END-of-russian/proftpd/files/patch-sample-configurations_basic.conf' >X--- sample-configurations/basic.conf.orig Thu Apr 15 22:46:38 2004 >X+++ sample-configurations/basic.conf Mon Oct 16 11:40:13 2006 >X@@ -1,3 +1,7 @@ >X+# >X+# To have more informations about Proftpd configuration >X+# look at : http://www.proftpd.org/ >X+# >X # This is a basic ProFTPD configuration file (rename it to >X # 'proftpd.conf' for actual use. It establishes a single server >X # and a single anonymous login. It assumes that you have a user/group >X@@ -6,6 +10,7 @@ >X ServerName "ProFTPD Default Installation" >X ServerType standalone >X DefaultServer on >X+ScoreboardFile /var/run/proftpd.scoreboard >X >X # Port 21 is the standard FTP port. >X Port 21 >X@@ -14,6 +19,11 @@ >X # from being group and world writable. >X Umask 022 >X >X+# CharsetLocal and CharsetRemote allows to convert filenames >X+# "on the fly" >X+CharsetLocal KOI8-R >X+CharsetRemote CP1251 >X+ >X # To prevent DoS attacks, set the maximum number of child processes >X # to 30. If you need to allow more than 30 concurrent connections >X # at once, simply increase this value. Note that this ONLY works >X@@ -40,23 +50,29 @@ >X >X # A basic anonymous configuration, no upload directories. If you do not >X # want anonymous users, simply delete this entire <Anonymous> section. >X-<Anonymous ~ftp> >X- User ftp >X- Group ftp >X- >X- # We want clients to be able to login with "anonymous" as well as "ftp" >X- UserAlias anonymous ftp >X- >X- # Limit the maximum number of anonymous logins >X- MaxClients 10 >X- >X- # We want 'welcome.msg' displayed at login, and '.message' displayed >X- # in each newly chdired directory. >X- DisplayLogin welcome.msg >X- DisplayFirstChdir .message >X- >X- # Limit WRITE everywhere in the anonymous chroot >X- <Limit WRITE> >X- DenyAll >X- </Limit> >X-</Anonymous> >X+######################################################################### >X+# # >X+# Uncomment lines with only one # to allow basic anonymous access # >X+# # >X+######################################################################### >X+ >X+#<Anonymous ~ftp> >X+# User ftp >X+# Group ftp >X+ >X+ ### We want clients to be able to login with "anonymous" as well as "ftp" >X+ # UserAlias anonymous ftp >X+ >X+ ### Limit the maximum number of anonymous logins >X+ # MaxClients 10 >X+ >X+ ### We want 'welcome.msg' displayed at login, and '.message' displayed >X+ ### in each newly chdired directory. >X+ # DisplayLogin welcome.msg >X+ # DisplayFirstChdir .message >X+ >X+ ### Limit WRITE everywhere in the anonymous chroot >X+ # <Limit WRITE> >X+ # DenyAll >X+ # </Limit> >X+#</Anonymous> >END-of-russian/proftpd/files/patch-sample-configurations_basic.conf >echo x - russian/proftpd/files/patch-src_proftpd.8.in >sed 's/^X//' >russian/proftpd/files/patch-src_proftpd.8.in << 'END-of-russian/proftpd/files/patch-src_proftpd.8.in' >X--- src/proftpd.8.in.orig Sat Sep 18 07:40:30 2004 >X+++ src/proftpd.8.in Thu Nov 3 15:35:56 2005 >X@@ -22,6 +22,12 @@ >X connection to the FTP service is made, or alternatively it can be run as a >X standalone daemon. >X .PP >X+.br >X+Each successful and failed ftp(1) session is logged using syslog with a >X+facility of LOG_FTP. Note: LOG_FTP messages are not displayed >X+by syslogd(8) by default, and may have to be enabled in syslogd(8)'s >X+configuration file. >X+.PP >X When >X .B proftpd >X is run in standalone mode and it receives a SIGHUP then it will reread its >END-of-russian/proftpd/files/patch-src_proftpd.8.in >echo x - russian/proftpd/files/patch-encoding >sed 's/^X//' >russian/proftpd/files/patch-encoding << 'END-of-russian/proftpd/files/patch-encoding' >Xdiff -urN ./modules/mod_codeconv.c .-iconv/modules/mod_codeconv.c >X--- ./modules/mod_codeconv.c 1970-01-01 09:00:00.000000000 +0900 >X+++ .-iconv/modules/mod_codeconv.c 2004-09-25 21:44:05.000000000 +0900 >X@@ -0,0 +1,229 @@ >X+/* >X+ * ProFTPD: mod_codeconv -- local <-> remote charset conversion >X+ * >X+ * Copyright (c) 2004 by TSUJIKAWA Tohru <tsujikawa@tsg.ne.jp> / All rights reserved. >X+ * >X+ * This program is free software; you can redistribute it and/or modify >X+ * it under the terms of the GNU General Public License as published by >X+ * the Free Software Foundation; either version 2 of the License, or >X+ * (at your option) any later version. >X+ * >X+ * This program is distributed in the hope that it will be useful, >X+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >X+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >X+ * GNU General Public License for more details. >X+ * >X+ * You should have received a copy of the GNU General Public License >X+ * along with this program; if not, write to the Free Software >X+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. >X+ * >X+ */ >X+ >X+ >X+#include "conf.h" >X+#include <iconv.h> >X+ >X+ >X+// >X+// directive >X+// >X+#define DIRECTIVE_CHARSETLOCAL "CharsetLocal" >X+#define DIRECTIVE_CHARSETREMOTE "CharsetRemote" >X+ >X+ >X+// >X+// initialization >X+// >X+static int codeconv_init(void) >X+{ >X+ return 0; >X+} >X+ >X+static int codeconv_sess_init(void) >X+{ >X+ return 0; >X+} >X+ >X+ >X+char* remote2local(struct pool* pool, char* remote) >X+{ >X+ iconv_t ic; >X+ char* local; >X+ char* in_ptr; >X+ char* out_ptr; >X+ size_t inbytesleft, outbytesleft; >X+ >X+ config_rec* conf_l = NULL; >X+ config_rec* conf_r = NULL; >X+ >X+ conf_l = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE); >X+ conf_r = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE); >X+ if (!conf_l || !conf_r) return NULL; >X+ >X+ ic = iconv_open(conf_l->argv[0], conf_r->argv[0]); >X+ if (ic == (iconv_t)(-1)) return NULL; >X+ >X+ iconv(ic, NULL, NULL, NULL, NULL); >X+ >X+ inbytesleft = strlen(remote); >X+ outbytesleft = inbytesleft*3; >X+ local = palloc(pool, outbytesleft+1); >X+ >X+ in_ptr = remote; out_ptr = local; >X+ while (inbytesleft) { >X+ if (iconv(ic, &in_ptr, &inbytesleft, &out_ptr, &outbytesleft) == -1) { >X+ *out_ptr = '?'; out_ptr++; outbytesleft--; >X+ in_ptr++; inbytesleft--; >X+ break; >X+ } >X+ } >X+ *out_ptr = 0; >X+ >X+ iconv_close(ic); >X+ >X+ return local; >X+} >X+ >X+ >X+char* local2remote(char* local) >X+{ >X+ iconv_t ic; >X+ char* remote; >X+ char* in_ptr; >X+ char* out_ptr; >X+ size_t inbytesleft, outbytesleft; >X+ >X+ config_rec* conf_l = NULL; >X+ config_rec* conf_r = NULL; >X+ >X+ conf_l = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE); >X+ conf_r = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE); >X+ if (!conf_l || !conf_r) return NULL; >X+ >X+ ic = iconv_open(conf_r->argv[0], conf_l->argv[0]); >X+ if (ic == (iconv_t)(-1)) return NULL; >X+ >X+ iconv(ic, NULL, NULL, NULL, NULL); >X+ >X+ inbytesleft = strlen(local); >X+ outbytesleft = inbytesleft*3; >X+ remote = malloc(outbytesleft+1); >X+ >X+ in_ptr = local; out_ptr = remote; >X+ while (inbytesleft) { >X+ if (iconv(ic, &in_ptr, &inbytesleft, &out_ptr, &outbytesleft) == -1) { >X+ *out_ptr = '?'; out_ptr++; outbytesleft--; >X+ in_ptr++; inbytesleft--; >X+ break; >X+ } >X+ } >X+ *out_ptr = 0; >X+ >X+ iconv_close(ic); >X+ >X+ return remote; >X+} >X+ >X+ >X+// >X+// module handler >X+// >X+MODRET codeconv_pre_any(cmd_rec* cmd) >X+{ >X+ char* p; >X+ int i; >X+ >X+ p = remote2local(cmd->pool, cmd->arg); >X+ if (p) cmd->arg = p; >X+ >X+ for (i = 0; i < cmd->argc; i++) { >X+ p = remote2local(cmd->pool, cmd->argv[i]); >X+ if (p) cmd->argv[i] = p; >X+ } >X+ >X+ return DECLINED(cmd); >X+} >X+ >X+ >X+// >X+// local charset directive "CharsetLocal" >X+// >X+MODRET set_charsetlocal(cmd_rec *cmd) { >X+ config_rec *c = NULL; >X+ >X+ /* Syntax: CharsetLocal iconv-charset-name */ >X+ >X+ CHECK_ARGS(cmd, 1); >X+ CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); >X+ >X+ c = add_config_param_str(DIRECTIVE_CHARSETLOCAL, 1, cmd->argv[1]); >X+ >X+ return HANDLED(cmd); >X+} >X+ >X+// >X+// remote charset directive "CharsetRemote" >X+// >X+MODRET set_charsetremote(cmd_rec *cmd) { >X+ config_rec *c = NULL; >X+ >X+ /* Syntax: CharsetRemote iconv-charset-name */ >X+ >X+ CHECK_ARGS(cmd, 1); >X+ CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); >X+ >X+ c = add_config_param_str(DIRECTIVE_CHARSETREMOTE, 1, cmd->argv[1]); >X+ >X+ return HANDLED(cmd); >X+} >X+ >X+ >X+// >X+// module ═╤ directive >X+// >X+static conftable codeconv_conftab[] = { >X+ { DIRECTIVE_CHARSETLOCAL, set_charsetlocal, NULL }, >X+ { DIRECTIVE_CHARSETREMOTE, set_charsetremote, NULL }, >X+ { NULL, NULL, NULL } >X+}; >X+ >X+ >X+// >X+// trap д╣дые│е▐еєе╔░ь═ў >X+// >X+static cmdtable codeconv_cmdtab[] = { >X+ { PRE_CMD, C_ANY, G_NONE, codeconv_pre_any, FALSE, FALSE }, >X+ { 0, NULL } >X+}; >X+ >X+ >X+// >X+// module ╛Ё╩є >X+// >X+module codeconv_module = { >X+ >X+ /* Always NULL */ >X+ NULL, NULL, >X+ >X+ /* Module API version (2.0) */ >X+ 0x20, >X+ >X+ /* Module name */ >X+ "codeconv", >X+ >X+ /* Module configuration directive handlers */ >X+ codeconv_conftab, >X+ >X+ /* Module command handlers */ >X+ codeconv_cmdtab, >X+ >X+ /* Module authentication handlers (none in this case) */ >X+ NULL, >X+ >X+ /* Module initialization */ >X+ codeconv_init, >X+ >X+ /* Session initialization */ >X+ codeconv_sess_init >X+ >X+}; >Xdiff -urN ./modules/mod_df.c .-iconv/modules/mod_df.c >X--- ./modules/mod_df.c 1970-01-01 09:00:00.000000000 +0900 >X+++ .-iconv/modules/mod_df.c 2004-09-25 21:43:57.000000000 +0900 >X@@ -0,0 +1,127 @@ >X+/* >X+ * ProFTPD: mod_df -- е╟еге╣еп╢їдн═╞╬╠─╠├╬ете╕ехб╝еы >X+ * >X+ * Copyright (c) 2002 by TSUJIKAWA Tohru <tsujikawa@tsg.ne.jp> >X+ * >X+ * This program is free software; you can redistribute it and/or modify >X+ * it under the terms of the GNU General Public License as published by >X+ * the Free Software Foundation; either version 2 of the License, or >X+ * (at your option) any later version. >X+ * >X+ * This program is distributed in the hope that it will be useful, >X+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >X+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >X+ * GNU General Public License for more details. >X+ * >X+ * You should have received a copy of the GNU General Public License >X+ * along with this program; if not, write to the Free Software >X+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. >X+ * >X+ */ >X+ >X+ /* >X+ **** for Linux only **** >X+ >X+ CWD/CDUP е│е▐еєе╔д╬еъе╢еые╚д╟┼Ў│║е╟егеьепе╚еъд╟д╬е╟еге╣еп╢їдн═╞╬╠дЄ─╠├╬д╣дыете╕ехб╝еыд╟д╣бг >X+ >X+ statfs() д╬╗┼══╛хбд64bit ═╤д╦е│еєе╤едеыд╖д╩дд╛ь╣чд╧ 2TB ░╩╛хд╬е╟еге╣епд╬╗■д╦ >X+ └╡╛яд╩├═дЄ╩╓д╡д╩ддд│д╚дм┤№┬╘д╡дьд▐д╣бг >X+ >X+ */ >X+ >X+ >X+#include "conf.h" >X+#include <sys/vfs.h> >X+ >X+ >X+// >X+// ╜щ┤№▓╜ >X+// >X+static int df_init(void) >X+{ >X+ return 0; >X+} >X+ >X+static int df_sess_init(void) >X+{ >X+ return 0; >X+} >X+ >X+ >X+// >X+// module handler >X+// >X+MODRET df_post_cwd(cmd_rec* cmd) >X+{ >X+ char buf[PATH_MAX+1]; >X+ struct statfs sfs; >X+ >X+ if (getcwd(buf, sizeof(buf)) && statfs(buf, &sfs) == 0) { >X+ long long f = (long long)sfs.f_bavail * (long long)sfs.f_bsize; >X+ if (f >= ((long long)1 << 10)*1000000000L) { >X+ sprintf(buf, "Disk free space at this directory is %lld,%03lld,%03lld MB.", >X+ (f >> 20)/1000000, (f >> 20)/1000%1000, (f >> 20)%1000); >X+ } else if (f >= ((long long)1 << 10)*1000000) { >X+ sprintf(buf, "Disk free space at this directory is %lld,%03lld,%03lld KB.", >X+ (f >> 10)/1000000, (f >> 10)/1000%1000, (f >> 10)%1000); >X+ } else if (f >= ((long long)1 << 10)*1000) { >X+ sprintf(buf, "DISK FREE SPACE AT THIS DIRECTORY IS ONLY %lld,%03lld KB.", (f >> 10)/1000, (f >> 10)%1000); >X+ } else if (f >= 1000) { >X+ sprintf(buf, "DISK FREE SPACE AT THIS DIRECTORY IS ONLY %lld,%03lld Bytes.", f/1000, f%1000); >X+ } else { >X+ sprintf(buf, "DISK FREE SPACE AT THIS DIRECTORY IS ONLY %lld Bytes.", f); >X+ } >X+ pr_response_send_raw("250-%s", buf); >X+ } >X+ return HANDLED(cmd); >X+} >X+ >X+ >X+// >X+// module ═╤ directive >X+// >X+static conftable df_conftab[] = { >X+ { NULL } // directive д╧е╡е▌б╝е╚д╖д╩дд >X+}; >X+ >X+ >X+// >X+// trap д╣дые│е▐еєе╔░ь═ў >X+// >X+static cmdtable df_cmdtab[] = { >X+ { POST_CMD, C_CWD, G_NONE, df_post_cwd, FALSE, FALSE }, >X+ { POST_CMD, C_CDUP, G_NONE, df_post_cwd, FALSE, FALSE }, >X+ { 0, NULL } >X+}; >X+ >X+ >X+// >X+// module ╛Ё╩є >X+// >X+module df_module = { >X+ >X+ /* Always NULL */ >X+ NULL, NULL, >X+ >X+ /* Module API version (2.0) */ >X+ 0x20, >X+ >X+ /* Module name */ >X+ "df", >X+ >X+ /* Module configuration directive handlers */ >X+ df_conftab, >X+ >X+ /* Module command handlers */ >X+ df_cmdtab, >X+ >X+ /* Module authentication handlers (none in this case) */ >X+ NULL, >X+ >X+ /* Module initialization */ >X+ df_init, >X+ >X+ /* Session initialization */ >X+ df_sess_init >X+ >X+}; >Xdiff -urN ./modules/mod_ls.c .-iconv/modules/mod_ls.c >X--- ./modules/mod_ls.c 2004-05-08 06:31:30.000000000 +0900 >X+++ .-iconv/modules/mod_ls.c 2004-09-25 21:43:53.000000000 +0900 >X@@ -232,12 +232,15 @@ >X return res; >X } >X >X+extern char* local2remote(char*); >X+ >X /* sendline() now has an internal buffer, to help speed up LIST output. */ >X static int sendline(char *fmt, ...) { >X static char listbuf[PR_TUNABLE_BUFFER_SIZE] = {'\0'}; >X va_list msg; >X char buf[PR_TUNABLE_BUFFER_SIZE+1] = {'\0'}; >X int res = 0; >X+ char* buf2; >X >X /* A NULL fmt argument is the signal to flush the buffer */ >X if (!fmt) { >X@@ -255,6 +258,13 @@ >X >X buf[sizeof(buf)-1] = '\0'; >X >X+ if (buf[0]) { >X+ buf2 = local2remote(buf); >X+ if (buf2) { >X+ strcpy(buf, buf2); free(buf2); >X+ } >X+ } >X+ >X /* If buf won't fit completely into listbuf, flush listbuf */ >X if (strlen(buf) >= (sizeof(listbuf) - strlen(listbuf))) { >X if ((res = pr_data_xfer(listbuf, strlen(listbuf))) < 0) >Xdiff -urN ./src/netio.c .-iconv/src/netio.c >X--- ./src/netio.c 2004-06-16 01:45:21.000000000 +0900 >X+++ .-iconv/src/netio.c 2004-09-25 21:42:59.000000000 +0900 >X@@ -467,9 +467,12 @@ >X return -1; >X } >X >X+extern char* local2remote(char* local); >X+ >X int pr_netio_printf(pr_netio_stream_t *nstrm, const char *fmt, ...) { >X va_list msg; >X char buf[PR_RESPONSE_BUFFER_SIZE] = {'\0'}; >X+ char* p; >X >X if (!nstrm) { >X errno = EINVAL; >X@@ -481,6 +484,13 @@ >X va_end(msg); >X buf[sizeof(buf)-1] = '\0'; >X >X+ if (buf[0]) { >X+ p = local2remote(buf); >X+ if (p) { >X+ strcpy(buf, p); free(p); >X+ } >X+ } >X+ >X return pr_netio_write(nstrm, buf, strlen(buf)); >X } >X >END-of-russian/proftpd/files/patch-encoding >exit
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 104453
: 71766