Sergey Kobzar wrote:
>>> Ты бы еще копию этой месаги в exim-users на exim.org.ua запостил.
>>> Явный баг, причем оч. неприятный.
>>> да вроде в exim-rusers никто подобных тем (наличия LDAP паролей в
>> сообщениях SMTP клиенту) никогда и не поднимал.
>> Ну так много багов не поднимается в рассылках.
возможно, возможно...
>> тут же вопрос в том, что у меня возникает это сообщение не на этапе
>> доставки, а на этапе verify recipient. да еще и выполняется от двух до
>> четырех запросов в одном роутере (по крайней мере это касается алиасов).
>> Потому что эти раутеры принимают участие в verify recipient?
нет, дело не в verify recipient.
дело в схеме хранения алиасов.
адрес пользователя у меня указывается в атрибуте mail объекта user
(наследник organizationalPerson), адрес группового алиаса - в атрибуте
mail объекта group. чтобы включить адрес пользователя в групповой алиас,
нужно просто включить пользователя в соответствующую группу.
так вот, чтобы потом по адресу группвого алиаса получить список почтовых
адресов членов группы, мне пришлось первым LDAP запросом получить
distinguishedName соответствующей группы, а потом вторым запросом
получить адреса пользователей этой группы. т. е. запросы получились
вложенные. и результат выполнения первого запроса входит в условия
фильтра второго запроса
как получить адреса пользователей, входящих в определенную группу, если
мы о ней знает лишь значение одного атрибута, я не знаю.
это два запроса. а еще два - такая же схема, но с organizationalUnit
(ибо для того, чтобы сделать общий алиас на все подразделение, может
будет не включать всех сотрудников подразделения в одельную группу, т.
к. они уже включены в отдельный OU). правда для OU нет артибута mail,
пришлось внести адрес в другой атрибут.
вот и получаем по одному запросу для группы и OU. если один из них
вернет непустое значение, то выполняется еще один запрос.
в общем и целом все это видно тут:
http://mta.org.ua/exim-4.69-conf/deliveries/virtual_aliases.m4
нужно поискать по словам confVIRT_MDIR_LDAP_ALIAS,
confVIRT_MDIR_LDAP_ALIAS_RECURSIVE, confVIRT_MDIR_LDAP_ALIAS2,
confVIRT_MDIR_LDAP_ALIAS2_RECURSIVE.
хотя наверное лучше показать реальный роутер:
virtual_aliases_ldap:
driver = redirect
domains = +local_domains
data = ${sg{\
${lookup ldapm{\
user="..." pass=... \
ldap://.../dc=ad,dc=company,dc=net?distinguishedName?sub?\
(&\
(objectClass=group)\
(mail=${local_part}@${domain})\
)\
}{\
${lookup ldapm{\
user="..." pass=... \
ldap://.../dc=ad,dc=company,dc=net?mail?sub?\
(&\
(memberOf=$value)\
)\
}{$value,}{}}\
}{}}\
${lookup ldapm{\
user="..." pass=... \
ldap://.../dc=ad,dc=company,dc=net?distinguishedName?sub?\
(&\
(objectClass=organizationalUnit)\
(postalAddress=${local_part}@${domain})\
)\
}{\
${lookup ldapm{\
user="..." pass=... \
ldap://.../$value?mail?sub?\
}{$value,}{}}\
}{}}\
}{\N[\n;]\N}{,}}
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_reply
directory_transport = delivery_to_virt_domain_by_filter
так вот, при проблемах с получением данных от домен контроллера exim
вытягивал в одну строку все значение data, потом показывал его клиенту в
SMTP сессии, а вслед писал, в чем именно проблема (failed to bind the
LDAP connection to server, Invalid credentials и т. д.)
> Ну а то что у тебя в раутере неск. LDAP заппросов - спецефично точно.
все зависит от сложности инфраструктуры.
> Кстати, а для MySQL такого не проявляется?
гм... как-то я раньше не замечал... но вот сейчас пару лишних символов
добавли в SQL запрос из роутера, разворачивающего алиасы в адреса, и
получил в exim -bh:
451-failed to expand "${lookup mysql{ SELECT addressXX FROM aliases WHERE
451-alias="${quote_mysql:${sg{$local_part}{\N\+.*$\N}{}}@$domain}"
451-}{${sg{$value}{\N[\n;]\N}{,}}}{}}": lookup of "SELECT addressXX FROM
451-aliases WHERE alias="corvax на colocall.falbi.kiev.ua" " gave DEFER: MYSQL:
451 query failed: Unknown column 'addressXX' in 'field list'
что-то я не понимаю, как я раньше на это не наступал...
но хоть пароли не засвечены:
451-failed to expand "${lookup mysql{ SELECT address FROM aliases WHERE
451-alias="${quote_mysql:${sg{$local_part}{\N\+.*$\N}{}}@$domain}"
451-}{${sg{$value}{\N[\n;]\N}{,}}}{}}": lookup of "SELECT address FROM
aliases
451-WHERE alias="corvax на colocall.falbi.kiev.ua" " gave DEFER:
451-MYSQL connection failed: Access denied for user 'exim'@'localhost'
(using
451 password: YES)
хотя все равно, приятного мало
>> так что моя ситуация достаточно специфичная.
>>> хотя с другой стороны, немного непонятно, зачем SMTP клиенту синтаксис
>> неудачно выполненных LDAP запросов. пусть даже без LDAP логинов и паролей.
>> Ну с одним запросом у меня просто вываливалось - Temporary internal
> error - че-то типа этого.
возможно дело именно в том, что я все завтра все равно обертываю обычно
еще в ${sg как минимум
> В логи - еще куда не шло, ну exim -bh (bt), но явно не выплевывать
> подобную инфу наружу первому встречному.
так в логах и дебаговом выводе это все и так видно
>> если есть желание, протолкни patch-src::hide_ldap_pass.patch
>> разработчикам. мне немного не до этого сейчас.
>> Желание есть. Вопрос наличия времени.
> Если разгребусь - попробую на след. неделе сделать.
ok
>>> Tuesday, February 23, 2010, 12:15:19 PM, Victor wrote:
>>>>>>> приветствую
>>>> на выходных переводил почтовую систему одной компании на хранение
>>>> учетных записей почтовых пользователей и алиасов в Active Directory.
>>>> и только после окончания переноса я обнаружил, что при проблемах при
>>>> выполнении ldap запросов к домен контроллеру exim прямо в SMTP сессию
>>>> вываливает клиенту все выражение, которое не смог проэкспандить, со
>>>> всеми ldap логинами и паролями.
>>>> в src/deliver.c в функции post_process_one реализована замена в таких
>>>> ситуациях символов пароля на символ "x".
>>>> но тут есть две проблемы:
>>>> 1. при обработке не всех сообщений, в которых содержатся ошибки с
>>>> указанием ldap логинов и паролей, задействована функция post_process_one
>>>> из src/deliver.c
>>>> 2. в функции post_process_one из src/deliver.c на "x" заменяются символы
>>>> толко первого пароля. а мне при обработке алиасов пришлось в роутере
>>>> выполнять четыре ldap запроса.
>>>> т. о. пришлось написать два патча:
>>>>http://mta.org.ua/exim-4.69-conf/patches/exim-4.71-hide_ldap_pass/patch-src::hide_ldap_pass.patch>>>>http://mta.org.ua/exim-4.69-conf/patches/exim-4.71-hide_ldap_error/patch-src::hide_ldap_error.patch>>>> в patch-src::hide_ldap_pass.patch реализована замена на "x" символов
>>>> всех ldap паролей в функции post_process_one из src/deliver.c, а также в
>>>> двух местах в функции route_address из src/route.c.
>>>> в patch-src::hide_ldap_error.patch реализована замена всего сообщения в
>>>> SMTP сессии на "Temporary internal error", т. к. информация о причинах
>>>> ошибки будет помещена в mainlog и rejectlog, а полный текст
>>>> синтаксической конструкции, которую не удалось вычислить, будет доступен
>>>> в дебаговом выводе exim -bh
>>>>>>> данные патчи взаимоисключающие. т. е. единовременно можно использовать
>>>> толко один из них.
>>>>>>> для использования данных патчей модифицирован механизм сборки порта exim
>>>> под FreeBSD:
>>>>http://mta.org.ua/exim-4.69-conf/ports/exim-4.71/>>>> для сборки exim с atch-src::hide_ldap_pass.patch необходимо в файл
>>>> ports/exim-4.71/Makefile.local добавить строку
>>>> WITH_HIDE_LDAP_PASS=YES
>>>>>>> для сборки exim с atch-src::hide_ldap_error.patch необходимо в файл
>>>> ports/exim-4.71/Makefile.local добавить строку
>>>> WITH_HIDE_LDAP_ERROR=YES
>>>>>>> для использования данных патчей модифицирован механизм сборки rpm'ов для
>>>> RedHat/CentOS/Fedora:
>>>>http://mta.org.ua/exim-4.69-conf/redhat/exim-4.71-2.corvax/>>>> для сборки exim с atch-src::hide_ldap_pass.patch необходимо в файл
>>>> redhat/exim-4.71-2.corvax/Makefile.local добавить строку
>>>> RPMBUILD_OPTIONS+= --with hide_ldap_pass
>>>>>>> для сборки exim с atch-src::hide_ldap_error.patch необходимо в файл
>>>> redhat/exim-4.71-2.corvax/Makefile.local добавить строку
>>>> RPMBUILD_OPTIONS+= --with hide_ldap_error
>>>>>>> сегодня собраны и выложены в yum рипозитарий http://mta.org.ua/updates>>>> бинарные пакеты для поддерживаемых версий Linux - RHEL4 i386, RHEL4 x64,
>>>> CentOS 5.1, FC6, FC8, FC9.
>>
--
Best wishes Victor Ustugov mailto:victor на corvax.kiev.ua
public GnuPG/PGP key: http://victor.corvax.kiev.ua/corvax.asc
ICQ UIN: 77186900, 371808614 nic-handle: CRV-UANIC