Скачал патч для перекодировки на лету. Дана команда cat vsftpd-2.0.1-koi2win.patch дальше идет текст самого патча, это я так понял.
Что с ним делать не знаю, подскажите если не трудно.
diff -urN vsftpd-2.0.1.old/ftpcmdio.c vsftpd-2.0.1/ftpcmdio.c
--- vsftpd-2.0.1/ftpcmdio.c.orig Fri Jul 2 18:23:02 2004
+++ vsftpd-2.0.1/ftpcmdio.c Sun Feb 27 21:42:08 2005
@@ -198,6 +198,7 @@
vsf_secbuf_alloc(&p_sess->p_control_line_buf, VSFTP_MAX_COMMAND_LINE);
}
ftp_getline(p_sess, p_str, p_sess->p_control_line_buf);
+ str_win2koi(p_str);
/* As mandated by the FTP specifications.. */
str_replace_char(p_str, '\0', '\n');
/* If the last character is a \r, strip it */
diff -urN vsftpd-2.0.1/ls.c.orig vsftpd-2.0.1/ls.c
--- vsftpd-2.0.1.old/ls.c Fri Jul 2 18:23:34 2004
+++ vsftpd-2.0.1/ls.c Sun Feb 27 21:42:08 2005
@@ -432,6 +432,7 @@
tunable_use_localtime));
str_append_char(p_str, ' ');
/* Filename */
+ str_koi2win(p_filename_str);
str_append_str(p_str, p_filename_str);
str_append_text(p_str, "\r\n");
}
diff -urN vsftpd-2.0.1.old/str.c vsftpd-2.0.1/str.c
--- vsftpd-2.0.1/str.c.orig Fri Jul 2 18:25:43 2004
+++ vsftpd-2.0.1/str.c Sun Feb 27 21:42:08 2005
@@ -660,3 +660,46 @@
}
}
+void
+str_win2koi(struct mystr* p_str)
+{
+ int i;
+ char wk[] = {128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
+ 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
+ 160,161,162,163,164,165,166,167,179,169,170,171,172,173,174,175,
+ 176,177,178,179,180,181,182,183,163,185,186,187,188,189,190,191,
+ 225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
+ 242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
+ 193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
+ 210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209};
+
+ for(i = 0; i < p_str->len; i++)
+ {
+ if(p_str->p_buf[i] & 0200)
+ {
+ p_str->p_buf[i] = wk[p_str->p_buf[i] & 0177];
+ }
+ }
+}
+
+void
+str_koi2win(struct mystr* p_str)
+{
+ int i;
+ char kw[] = {128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
+ 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
+ 160,161,162,184,164,165,166,167,168,169,170,171,172,173,174,175,
+ 176,177,178,168,180,181,182,183,184,185,186,187,188,189,190,191,
+ 254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238,
+ 239,255,240,241,242,243,230,226,252,251,231,248,253,249,247,250,
+ 222,192,193,214,196,197,212,195,213,200,201,202,203,204,205,206,
+ 207,223,208,209,210,211,198,194,220,219,199,216,221,217,215,218};
+
+ for(i = 0; i < p_str->len; i++)
+ {
+ if(p_str->p_buf[i] & 0200)
+ {
+ p_str->p_buf[i] = kw[p_str->p_buf[i] & 0177];
+ }
+ }
+}
diff -urN vsftpd-2.0.1.old/str.h vsftpd-2.0.1/str.h
--- vsftpd-2.0.1/str.h.orig Fri Jun 4 23:35:00 2004
+++ vsftpd-2.0.1/str.h Sun Feb 27 21:42:08 2005
@@ -120,5 +120,8 @@
int str_contains_line(const struct mystr* p_str,
const struct mystr* p_line_str);
+void win2koi(struct mystr* p_str); // Recode WIN to KOI;
+void koi2win(struct mystr* p_str); // Recode KOI to WIN;
+
#endif /* VSFTP_STR_H */
|