14.11.2012 11:22
twix
 
Есть у меня программа, написанная с использованием .Net, и она активно использует класс FtpWebRequest для работы с одноимённым протоколом. Написал свою обёртку, абстрагирующую от прямого обращения к методам класса. Всё бы ничего, если не два 'но':
1. Список файлов с дополнительной информацией (флаги доступа, время модификации и имя/группа владельца) каждым FTP-сервером возвращаются немного по-разному, что затрудняет парсинг. Мне не нужно большое количество информации, поэтому я написал более-менее универсальный парсер, который возвращает список групп "флаги-имя". Хотя я довольно долгое время бодался с этим вопросом, и уже почти забил на решение проблемы.
2. Собственно, из-за чего и пишу этот пост. Я долго не мог понять, почему при попытке получить размер файла командой 'SIZE', на некоторых серверах (линуксовых, в основном) я получал исключение с описанием "Указанный файл не доступен". Долгие копания в интернетах, в конце концов, вывели меня на майкрософтовские багтрекеры, сообщения с этой проблемой в которых датированы ещё 2007-м годом. Там подробно описывалась проблема, причины её возникновения и возможные пути решения. Как оказалось, тогда команда 'SIZE' для FTP-серверов находилась в черновиках (я, увы, не проверил, находится ли она сейчас в RFC), и каждый разработчик имплементил её как мог. ProFTPd, например, сперва позволял использовать эту команду в ASCII-режиме, однако впоследствии, чтобы минимизировать вероятность/урон DOS-атак, возможность использования этой команды осталась только для Binary-режима. Класс FtpWebRequest же, даже будучи инструктированным использовать бинарный режим через флаг UseBinary, не отправляет серверу команду 'TYPE I' перед 'SIZE', что и приводит к появлению ошибки '550', которую FtpWebRequest идентифицирует как "Указанный файл не доступен". Эта бага, как я уже говорил, была озвучена ещё в 2007-м году, и тогда программисты майкрософт пообещали в следующих версиях .Net исправить эту оплошность... Однако, прошло уже больше пяти лет, а воз и ныне там.

Ну вот почему им трудно добавить пару строк в исходники либы, утраняющую этот баг... или реализующую возможность отправки произвольных команд FTP-серверу?
Часовой пояс GMT +3, время: 22:24.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.