The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Решение проблемы с буквой Я в ftpd для Windows пользователей. (samba ftp charset decode win cp1251 patch)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: 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.>

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:




  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor