Стоит ли ожидать подключения Indy Imap SASL?

В своей программе проверки электронной почты я поддерживаю POP3 SSL и IMAP SSL. Хотя Pop3 SSL с использованием SASL работал некоторое время, я никогда не получал IMAP SSL с использованием SASL для работы, хотя код для SASL должен быть очень похожим между POP3 и IMAP. Насколько я понимаю, я не должен ожидать, что это сработает, пока эта проблема не будет устранена. Что ж, эта проблема была исправлена, поэтому я решил еще раз взглянуть на то, как заставить SASL работать для IMAP. Я обновил и перестроил Indy и раскомментировал весь свой код SASL, и теперь я обнаруживаю, что когда я выполняю команду входа в систему, я получаю тайм-аут чтения в IdIMAP4 (даже с тайм-аутом, установленным на большое количество времени (в 20-30 секунд), что примерно в 5 раз дольше, чем требуется для аутентификации на POP3 с помощью SASL.

Проходя по коду в отладчике, появляется строка, вызывающая тайм-аут чтения, в функции function PerformSASLLogin_IMAP(ASASL: TIdSASL; AEncoder: TIdEncoder; в строке 1358:

AClient.SendCmd(AClient.NewCmdCounter, 'AUTHENTICATE ' + String(ASASL.ServiceName), [], True); {Do not Localize} 

Учитывая, что весь этот метод был новым в ревизиях, указанных в этом отчете об ошибках, я почти уверен, что успешно обновил Indy, и моя логика для настройки механизмов SASL и тому подобного очень похожа на то, что работает для POP3 (за исключением для таких вещей, как использование IMAP AuthType iatSASL вместо Pop3 AuthType patSASL). Так почему я могу получить тайм-аут чтения? Как я могу выяснить, работает ли мой код или Indy не правильно? если я изменю IMAP.AuthType на iatUserPass или соединение DEF_IMAP4_AUTH будет успешным. Кажется, я не могу найти свежую информацию о том, следует ли ожидать, что SASL с IMAP будет работать сейчас, кроме подсказки, что отчет об ошибках закрывается как исправленный.

Edit: На вопросы Реми в его ответе, здесь «разговор TCP, захваченный wireshark, когда я установил его для соединения с SASL без SSL:

* OK [CAPABILITY IMAP4rev1 LITERAL + SASL-IR ИД ВХОДА-РЕФЕРАЛОВ ВКЛЮЧИТЬ STARTTLS AUTH = PLAIN AUTH = LOGIN] Dovecot готова.

С1 ВОЗМОЖНОСТЬ

* ВОЗМОЖНОСТЬ IMAP4rev1 LITERAL + SASL-IR ИД ВХОДА В РЕЖИМЫ РАЗРЕШИТЬ СОРТИРОВКУ = ОТПРАВИТЬ РЕЗЬБУ = НАПРАВЛЯЮЩАЯ РЕЗЬБА = REFS MULTIAPPEND НЕ ВЫБРАТЬ ИДЛ ДЕТЯМИ NAMESPACE UIDPLUS LIST-EXTLE ПРЕДПРИЯТИЯ В РЕЗУЛЬТАТЕ ПОЛЬЗОВАТЕЛЯ = ПЕРЕВОЗКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ = 1 ПРЕДПОЛАГАЕТСЯ В РЕЗУЛЬТАТ РЕЗУЛЬТАТОВ В РЕЗУЛЬТАТИВНОМ УЧАСТКЕ ПРЕДСТАВЛЯЕТСЯ ИСТОРИЙ 2-Й РЕГИОЗ РЕДАКЦИИ В РЕЗУЛЬТАТИВНОМ РЕЗУЛЬТАТЕ РЕКОМЕНДУЕТСЯ НАЗАД = ISTNETS ПРЕДСТАВЛЯЕТ СВОЙ РЕКЛАМНЫЙ РЕЗЕРВ. PLAIN AUTH = ВХОД

C1 OK Возможность завершена.

C2 AUTHENTICATE PLAIN

+

C3 LOGOUT

C2 NO [ALERT] Неверные данные base64 в продолженном ответе

7 голосов | спросил Jessica Brown 2 AM00000010000003331 2013, 01:12:33

1 ответ


0

AFAIK, TIdIMAP SASL теперь работает нормально (учитывая, что я тот, кто его реализовал). У меня нет доступа ни к одному серверу IMAP, использующему SASL, поэтому я сам не смог проверить его, но впервые за последние несколько месяцев я услышал о каких-либо проблемах с ним, когда существовала фиксированная реализация. /р>

Однако, не видя фактического трафика сокетов, невозможно узнать, отправляет ли сервер какой-либо ответ обратно или TIdIMAP просто не правильно читает ответ. Можете ли вы предоставить актуальный журнал команд /ответов? Либо используйте анализатор пакетов, например Wireshark, либо присоедините один из собственных ---- +: = 2 =: + ---- компонентов Indy к TIdLog... свойство.

Обновление : это ошибка в TIdIMAP.Intercept. Он неправильно обрабатывает строку TIdIMAP4.GetInternalResponse(). Я проверил исправление в SVN Indy's.

ответил Remy Lebeau 2 AM00000020000000331 2013, 02:25:03

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132