Ключевые слова:samba, ftp, charset, decode, win, cp1251, patch, (найти похожие документы)
From: Дмитрий Горохов <sheriff@nnz.ru.>
Newsgroups: http://www.iplab-nnz.ru
Date: Mon, 22 Apr 2005 14:31:37 +0000 (UTC)
Subject: Решение проблемы с буквой Я в ftpd для Windows пользователей.
Оригинал:
http://www.iplab-nnz.ru/blog/index.php?op=ViewArticle&articleId=26&blogId=1
-----
Все разработки опробованы на компактном сервере Favourite IS на основе ОС UNIX,
предназначенном для предоставления Интернет-доступа и Интернет-сервисов.
Ссылка в Интернет: http://is.nnz.ru
Взять сервер Favourite IS на тестирование. Mail to: Boginsky@nnz.ru <mailto:Boginsky@nnz.ru.>
-----
Unix+ Samba + ftpd, проблемы и решения
Есть такая проблема: сложно найти ftpd, понимающий перекодировку имен
файлов. Если хранить файлы на сервере в koi8, то ftpшник выдает винде
крякозябры. Если хранить в CP1251, то ftp не передает букву "Я",
считая ее управляющим символом.
Как решать!
Проблема буквы я возникает в случае, если ftpd весь сетевой i/o
пропускает через telnet-фильтр, где буква Я - управляющий символ.
В том числе к таким серверам относится ProFtpd
Решаем проблему на его примере:
1. Управляющие символы в телнете называются IAC (Is A Command)
2. Распаковываем исходники и делаем поиск по строке IAC
3. Находим 2 файла: netio.c и netio.h, где эта строка встречается.
4. Смотрим файл netio.c и находим там следующий код:
switch (mode) {
case IAC:
switch (cp) {
case WILL:
case WONT:
case DO:
case DONT:
mode = cp;
continue;
case IAC:
mode = 0;
break;
default:
/* Ignore */
mode = 0;
continue;
}
break;
case WILL:
case WONT:
pr_netio_printf(out_nstrm, "%c%c%c", IAC, DONT, cp);
mode = 0;
continue;
case DO:
case DONT:
pr_netio_printf(out_nstrm, "%c%c%c", IAC, WONT, cp);
mode = 0;
continue;
default:
if (cp == IAC) {
mode = cp;
continue;
}
break;
}
5. Путем вдумчивого рассматривания понимаем, что именно эти строчки
отвечают за проверку на телнет-вшивость.
6. Удаляем все это безобразие.
7. Компилим и радуемся!
В итоге имеем:
Все названия лежат на юникс-машине в CP1251- кодировке. Для передачи
их винде по фтп ничего не меняется, и буква "Я" исправлена. Для
передаче по Самбе используем следующие настройки:
display charset = CP1251
unix charset = CP1251
dos charset = CP866
Автор
Дмитрий Горохов,
Ниеншанц-Телеком, Инженер-разработчик.
<sfh@inbox.ru.>; <sheriff@nnz.ru.>