Ошибка: Failed to parse the Currency Converter XML document.
$2 490.23


Ошибка: Failed to parse the Currency Converter XML document.
$30 997.79


Ошибка: Failed to parse the Currency Converter XML document.
$2 215.85


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

 

Интересное

Windows PowerShell: Отчет...
Недавно мне пришлось писать довольно длинный и замысловатый сценарий Windows PowerShell, который в ходе работы начал довольно плохо отвечать на запросы. Я написал его для выполнения в качестве...
Подробнее...
Что делать, если Windows...
Если Windows не может корректно завершить работу, в большинстве случаев это связано либо с системой управления электропитанием, либо с неправильно работающими драйверами. Могут существовать и...
Подробнее...
Тестирование настроек...
Можно смело предположить, что нет таких пользователей, которые были бы полностью довольны производительностью своих dial-up соединений в Интернет. Приходится долго ждать загрузки web-страниц,...
Подробнее...
Уменьшение Windows XP
Я обратил внимание, что Windows XP занимает очень много места на винчестере. Причем этот размер постоянно увеличивается. Не хотелось бы только из-за этого покупать новый жесткий диск.Чтобы...
Подробнее...
Если необходим склад, что...
Практически всем предприятиям требуются складские помещения, как малому бизнесу, так и крупному. Что касается поиска помещений, то, обычно, сложности в этом не бывает, так как предложения на этом...
Подробнее...
Правила хорошей...
Реклама не должна выглядеть как рекламаПри размещении рекламных блоков издатель должен четко представлять, какие области на странице ресурса представляют наибольший интерес для пользователей...
Подробнее...
Криптография: палка о двух...
Криптография в наши дни повсюду. Большинство пользователей каждый день извлекают из неё пользу, даже если делают это не осознанно. В этой статье мы рассмотрим, почему криптография является «палкой...
Подробнее...
Оптимизация и с чем ее едят
Вы спросите, зачем это нужно, если сейчас мощность «железа» настолько высока, что всякого рода оптимизация все равно заметно не повлияет на быстродействие. Да, отчасти это так, но у многих еще...
Подробнее...
Вирус продается за 400$
В отличие от ранее обнаруженных подобных приложений, таких как Mpack, эта утилита самостоятельно выполняет заражение и распространяется без вмешательство хакера.PandaLabs обнаружила новую опасную...
Подробнее...
Перенаправление stdout в...
Для перенаправления stdout в область памяти (или файл) необходимо написать небольшую конструкцию.Редирект в память или строку (std::string)
Подробнее...