Summary: | Исправить работу с Cyrus-SASL, сломанную старым патчем. | ||||||||
---|---|---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Sergey Y. Afonin <asy> | ||||||
Component: | postfix-cyrus | Assignee: | Gleb F-Malinovskiy <glebfm> | ||||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||||
Severity: | critical | ||||||||
Priority: | P3 | CC: | aborodin, cas, glebfm, lav, ldv, naf | ||||||
Version: | unstable | ||||||||
Hardware: | all | ||||||||
OS: | Linux | ||||||||
Attachments: |
|
Description
Sergey Y. Afonin
2014-09-01 12:08:05 MSK
*** Bug 32082 has been marked as a duplicate of this bug. *** *** Bug 32085 has been marked as a duplicate of this bug. *** (In reply to comment https://bugzilla.altlinux.org/32082#c1 ) > postfix-cyrus это не самый лучший выбор для аутентификации пользователей. > Мы используем postfix-dovecot, и рекомендуем заменять postfix-cyrus на > postfix-dovecot. Но починить postfix-cyrus стоит всё равно. Кроме того, Dovecot не только выигрывает по безопасности у Cyrus-IMAP, но и существенно проигрывает ему по возможностям. Коммит я могу попробовать сделать. Хотя, на самом деле, с Cyrus-IMAP на много удобнее использовать Sendmail в виду наличия механизма поддержки sendmail socket map в Cyrus-IMAP. (In reply to comment #3) > Кроме того, Dovecot не только выигрывает по безопасности у Cyrus-IMAP, > но и существенно проигрывает ему по возможностям. Если же речь про использование Cyrus-IMAP не идёт, то, конечно, особого смысла в использовании postfix-cyrus нет. В этой ситуации, действительно, лучше использовать postfix-dovecot. (В ответ на комментарий №0)
> Предлагаю упаковать в пакет симлинк
> /etc/postfix/sasl -> /usr/lib/sasl2-3
А у меня там лежит конфиг
/etc/postfix/sasl/smtpd.conf
видимо, заданный через
smtpd_sasl_path = smtpd
в main.cf
может быть всё же
/usr/lib/sasl2 -> /usr/lib/sasl2-3 ?
(In reply to comment #5) > > /etc/postfix/sasl -> /usr/lib/sasl2-3 > А у меня там лежит конфиг > /etc/postfix/sasl/smtpd.conf А что показывает rpm -qf /etc/postfix/sasl ? Что-то я не вижу по спеку, где он пакуется. На всякий случай: в Postfix реализация SASL есть как для сервера SMTP, так и для _клиента SMTP_. postfix-dovecot - это только сервер, для работы клиента альтернатив posfix-cyrus нет, см. http://www.postfix.org/SASL_README.html#client_sasl_enable Т.е., сейчас из коробки сделать почтовый реллей с авторизацией на стороннем сервере SMTP нельзя. Выдающиеся при попытках аутентификации сообщения вида "postfix/smtp[PID]: warning: SASL authentication failure: No worthy mechs found" понять, что нужна символьная ссылка @libdir@/sasl2-3 -> @libdir@/sasl2, тоже не помогают. Симлинк не нужен, нужен починенный sasl, безо всяких костылей вида sasl2-3. Вот сделал один человек неправильно, хотя его предупреждали, что так делать не надо, а потом, вместо того, чтобы откатить неправильное, продвигает неправильное в другие пакеты. (In reply to comment #8) > Симлинк не нужен, нужен починенный sasl, безо всяких костылей вида sasl2-3. > > Вот сделал один человек неправильно, хотя его предупреждали, Это "неправильно" порождение того, что кто-то долго не реагирует на проблемы. Пересобрать Cyrus-SASL получается целая история с прибаутками. При том, что есть http://www.altlinux.org/Shared_Libs_Policy (In reply to comment #8) > Симлинк не нужен, нужен починенный sasl, И, всё же, существует ли ещё хотябы один клиент cyrus-sasl, кроме Postfix, который не может найти sasl2-3 ? (In reply to comment #8) > Симлинк не нужен, нужен починенный sasl, безо всяких костылей вида sasl2-3. Или нужен починенный Postfix (хотя, возможно, нужно понимание, как это работает). Совсем забыл: я пару лет назад спрашивал в рассылке postfix-users@, и вот что мне ответили: This is no Postfix problem. And it clearly works somehow, as Debian uses a way different directory: $ grep -r /usr/lib/i386-linux-gnu/sasl2 /usr/lib/i386-linux-gnu/libsasl2.so.2* Binary file /usr/lib/i386-linux-gnu/libsasl2.so.2 matches Binary file /usr/lib/i386-linux-gnu/libsasl2.so.2.0.25 matches Действительно, сейчас в debian/rules написано: --with-plugindir=/usr/lib/$(DEB_HOST_MULTIARCH)/sasl2:/usr/lib/sasl2 Под руками есть Ubuntu, там, действительно, есть каталоги /usr/lib/i386-linux-gnu/sasl2 /usr/lib/sasl2 Первый с плагинами, второй - пустой. И Postfix как-то всё находит в /usr/lib/i386-linux-gnu/sasl2. Вот такая штука ещё нашлась postfix (2.8.3-1ubuntu3) oneiric; urgency=low * src/xsasl/xsasl_cyrus_{client,server}.c: don't set a sasl callback for the path, only do so for the config path; we shouldn't override the already-correct module path built into cyrus-sasl2 itself, especially now that said path may change due to multiarch. И там сейчас не задаётся {SASL_CB_GETPATH, &xsasl_getconfpath, 0} в xsasl_cyrus_client.c и xsasl_cyrus_server.c. Есть только #ifdef SASL_CB_GETCONFPATH {SASL_CB_GETCONFPATH, &xsasl_getconfpath, 0}, #endif (In reply to comment #12) > И там сейчас не задаётся {SASL_CB_GETPATH, &xsasl_getconfpath, 0} > в xsasl_cyrus_client.c и xsasl_cyrus_server.c. Вот тут ftp://ftp.kraft-s.ru/pub/tmp/ALTBUG30270/ сборка x86_64 для Сизифа без SASL_CB_GETPATH. Кто-то может проверить ? Заданием не стал оформлять, наспех сделал. (In reply to comment #13) > Вот тут ftp://ftp.kraft-s.ru/pub/tmp/ALTBUG30270/ сборка x86_64 для Сизифа без > SASL_CB_GETPATH. Кто-то может проверить ? Стоп. Минут через 15. SASL_CB_GETCONFPATH определён в sasl.h, а этот хидер не подключен. Кстати, интересно, а как это в текущей сборке у нас используется тогда ? (В ответ на комментарий №6) > (In reply to comment #5) > > > > /etc/postfix/sasl -> /usr/lib/sasl2-3 > > > А у меня там лежит конфиг > > /etc/postfix/sasl/smtpd.conf > > А что показывает rpm -qf /etc/postfix/sasl ? Что-то я не вижу по спеку, где он > пакуется. А не пакуется: # rpm -qf /etc/postfix/sasl предупреждение: файл /etc/postfix/sasl не принадлежит ни одному из пакетов мне кажется, это ещё один тайный каталог. Возможно, можно положить конфиг и в /etc/sasl2 ... (In reply to comment #8) > Вот сделал один человек неправильно, хотя его предупреждали, Вы проигнорировали https://bugzilla.altlinux.org/show_bug.cgi?id=30135#c11 А я прямо написал: "Так что, предлагаю думать, почему все работают (Courier-IMAP и Cyrus-IMAP, по крайней мере), а Postfix - нет, а не заниматься обвинениями". Кто-то притащил битый патч для Postfix из, видимо, Debian. В Debian (точнее, в Ubuntu, но в Debian он тот же самый сейчас) патч поправили лет 7-8 назад. Вы же, вместо того, чтобы заинтересоваться уникальностью сборки Postfix в ALT, на которую я явно указал два года назад, два года обиняли меня. Created attachment 6761 [details]
Патч для нормальной работы с cyrus-sasl
Корректирующий патч, приводящий код к виду, похожему на состояние в Debian.
(In reply to comment #13) > > И там сейчас не задаётся {SASL_CB_GETPATH, &xsasl_getconfpath, 0} > > в xsasl_cyrus_client.c и xsasl_cyrus_server.c. > > Вот тут ftp://ftp.kraft-s.ru/pub/tmp/ALTBUG30270/ сборка x86_64 для Сизифа без > SASL_CB_GETPATH. Кто-то может проверить ? В общем, приближённо проверил сам. Postfix из репозитория ругается на sasl уже при попытке соединения, приглашение "220 ..." не появляется. Моя сборка выдаёт приглашение "220 mail.localhost ESMTP Postfix". Добавил ещё i586 по этой ссылке. Полностью не проверил, я Postfix, как уже писал, не использую, разбираться с конфигом долго. Created attachment 6762 [details]
Патч для нормальной работы с cyrus-sasl
#ifdef SASL_CB_GETCONFPATH вокруг самой функции уже после сборки добавил, и с ошибкой. Переписал.
(In reply to comment #15) > мне кажется, это ещё один тайный каталог. Возможно, можно положить конфиг и в > /etc/sasl2 ... Если я правильно понял (а, похоже, правильно), всё определяется в "static sasl_callback_t callbacks[]" в xsasl_cyrus_client.c и xsasl_cyrus_server.c. Там можно задать SASL_CB_GETPATH и SASL_CB_GETCONFPATH. Если посмотреть на реализацию функции, там указанной (xsasl_getconfpath), то список, где что ищется, виден явно: *path = strdup("/etc/postfix/sasl:@libdir@/sasl2"); У нас SASL_CB_GETCONFPATH не переопределяется из-за того, что используемый в ifdef SASL_CB_GETCONFPATH определён в неподключенном хидере sasl.h, задо переопределяется SASL_CB_GETPATH, который, видимо, в отсутствие SASL_CB_GETCONFPATH, влияет на всё. Впрочем, даже с SASL_CB_GETCONFPATH, SASL_CB_GETPATH переопределяется совершенно напрасно. В оригинальном Postfix это место выглядит так: static sasl_callback_t callbacks[] = { {SASL_CB_LOG, (XSASL_CYRUS_CB) &xsasl_cyrus_log, 0}, {SASL_CB_LIST_END, 0, 0} }; То есть, вообще все пути оставлены на откуп SASL. А если вчитаться в sasl_getconfpath_t(3) и sasl_getpath_t(3), то, вероятно, вообще не следует это хардкодить, так как, если это не делать, то можно использовать переменные окружения SASL_CONF_PATH и SASL_PATH: sasl_getconfpath_t(3) DESCRIPTION sasl_getconfpath_t is used if the application wishes to use a different location for the SASL configuration files. If this callback is not used SASL will either use the location in the environment variable SASL_CONF_PATH (provided we are not SUID or SGID) or /etc/sasl2 by default. sasl_getpath_t(3): DESCRIPTION sasl_getpath_t is used if the application wishes to use a different location for the SASL mechanism drivers (the shared library files). If this callback is not used SASL will either use the location in the environment variable SASL_PATH or /usr/lib/sasl2 by default. Плюс патч, похоже, всё ещё остаётся неаккуратным (и в Debian тоже), так как sasl_getconfpath_t используется только для сервера (sasl_callbacks(3) ). (In reply to comment #21) > Плюс патч, похоже, всё ещё остаётся неаккуратным (и в Debian тоже), так как > sasl_getconfpath_t используется только для сервера (sasl_callbacks(3) ). В смысле - должен использоваться. Так кто-нибудь из тех, у кого не работало, может проверить сборку с ftp://ftp.kraft-s.ru/pub/tmp/ALTBUG30270/ ? (В ответ на комментарий №23) > Так кто-нибудь из тех, у кого не работало, может проверить сборку с > ftp://ftp.kraft-s.ru/pub/tmp/ALTBUG30270/ ? У меня на p8 работает. (In reply to comment #24) > > Так кто-нибудь из тех, у кого не работало, может проверить сборку с > > ftp://ftp.kraft-s.ru/pub/tmp/ALTBUG30270/ ? > У меня на p8 работает. Спасибо. Значит, дальше дело за мантейнером Postfix. Следует поправить патч, упомянутый в bug 9975. Либо вовсе патч этот удалить, если он устарел. postfix-1:2.11.11-alt1 -> sisyphus: Sun Jan 28 2018 Dmitry V. Levin <ldv@altlinux> 1:2.11.11-alt1 - 2.11.7 -> 2.11.11. - Disabled NIS/NIS+ support as it was disabled in glibc-2.26.0.124.98f244e-alt1. - Restart postfix from filetrigger (closes: #21620). - Save a copy of /etc/postfix/aliases before rewriting it (closes: #25238). - Fixed "postconf -a" and "postconf -A" (closes: #28372). - Fixed Cyrus SASL support (by asy@; closes: #30270). - Fixed update procedure when systemd is active (closes: #31363). - Recoded README.ALT-ru_RU from koi8r to utf8 (closes: #32038). - Cleared executable bit from postfix.service (closes: #34567). |