перекодировка русских символов в фтп-сервере на лету
Гость 1 марта, 2006 - 17:29
Проблема такая:
у меня локаль - кои8-р. держу фтп. большая часть ресурсов на виндовых разделах. я вижу файлы с русскими именами, пользователи фтп - видят кракозябры. как бы настроить сабж?
З.Ы.: сейчас юзаю vsftpd
»
- Для комментирования войдите или зарегистрируйтесь

Есть патчи для
Есть патчи для vsftpd и для proftpd. Юзал оба, остался ими доволен.
cat vsftpd-2.0.3-koi2win.diff
diff -urN vsftpd-2.0.3.old/ftpcmdio.c vsftpd-2.0.3/ftpcmdio.c --- vsftpd-2.0.3/ftpcmdio.c.orig Fri Jul 2 18:23:02 2004 +++ vsftpd-2.0.3/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.3/ls.c.orig vsftpd-2.0.3/ls.c --- vsftpd-2.0.3.old/ls.c Fri Jul 2 18:23:34 2004 +++ vsftpd-2.0.3/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.3.old/str.c vsftpd-2.0.3/str.c --- vsftpd-2.0.3/str.c.orig Fri Jul 2 18:25:43 2004 +++ vsftpd-2.0.3/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.3.old/str.h vsftpd-2.0.3/str.h --- vsftpd-2.0.3/str.h.orig Fri Jun 4 23:35:00 2004 +++ vsftpd-2.0.3/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 */Я далал оверлейный ебилд для версии vsftpd-2.0.3.ebuild, добавив в него путь к патчу. Правда, этой версии уже нет в дереве портежей, а на более новую версию патч почему-то не становится, видимо конфликтует с другим(и) патчами, т.к. на голые исходники ставится без проблем. Из минусов - нет возможности отключить перекодировку без пересборки пакета. В патче для proftpd можно указать опции перекодировки в конфиге.
Спасибо
это случайно не тот патч что на opennet.ru выкладывали?
я его пробовал накладывать но фигня получилась...
но все равно спасибо. Видимо придется заняться написанием своего патча по мотивам этого но для свежих версий.
_________________
UNIX WAY -->200m
Да, патч с
Да, патч с opennet.ru. У меня работал нормально, на версии 2.0.3, глюков не заметил.
Уже патченный
На аглицком форуме наткнулся на вот эту ссылку: http://dev.gentoo.org/~uberlord/overlay/net-ftp/vsftpd-ext/vsftpd-ext-2.0.4.2.ebuild
Там упоминается сайтик http://vsftpd.devnet.ru/ , где есть vsFTPd с возможностью включения/отключения перекодировок. Плюс там еще какие-то мелкие фишки.
Если кто опробует, расскажите, как оно работает? Стоит ли замарачиваться?
Не юзай русские
Не юзай русские имена. Принципиально. Боль головная. Транслит тоже ничего.
(Из глубин инета ) Надысь расшарил /dev/random через самбу. Шару назвал krutoeporno.avi Судя по smbstatus руководств уже часа 2 как качает :)