LINUX.ORG.RU
ФорумAdmin

Postfix 2.1.5 старнное опереирование ключами в query_filter


0

0

Добрый день, предлагаю вашему вниманию мои соображения по поводу не совсем "чистой" обработки query_filter в postfix table lookup механизме.

я оформил свои "иследования" для postfix-users@postfix.org.К несчастью ничего интереного моя переписка с англоязычными колегами мне не принесла, поэтому решил искать правды у своих :)

[Описание] систуация следующего характера:

нужно распределить доступ между пользователями домена vtg.com.ua, на тех кто может посылать почту за его пределы и тех кто может пользоватся почтой только в его пределах.

[Решение] smtpd_restriction_classes = local, remote local = check_recipient_access pcre:/usr/local/etc/postfix/maps/local remote = check_recipient_access pcre:/usr/local/etc/postfix/maps/remote

/usr/local/etc/postfix/maps/local has: /vtg.com.ua/ OK /.*/ REJECT local account

/usr/local/etc/postfix/maps/remote has: /.*/ OK

smtpd_recipient_restrictions = check_sender_access ldap:/usr/local/etc/postfix/sender.cf, local, reject

where /usr/local/etc/postfix/sender.cf has search_base = cn=remote, ou=groups, dc=vtg query_filter = member=uid=%u result_attribute = cn

формат записи в ldap базе: member=uid=<username1> member=uid=<username2> member=uid=<username3> cn=remote

идея заключается в следующем: username part of email address, которому разрешено посылать почту во внешний мир хранится в ветке cn=remote,ou=groups,dc=vtg, при уcпешном поиске должно вернутся поле cn, которое содержит описанный выше класс remote

[Проблема] Проблема заключается в следующем механизме обработки поиска, пример из лог файла:

dict_ldap_lookup: Searching with filter member=uid=strait dict_ldap_lookup: Search returned nothing dict_ldap_lookup: Searching with filter member=uid=it.vtg dict_ldap_lookup: Search returned nothing dict_ldap_lookup: Searching with filter member=uid=vtg (1) dict_ldap_lookup: Search returned remote

как видите поиск происходит не только по %u как указано в query_filter = member=uid=%u а по всем словам встречающимся в адресе

поскольку у меня существует пользователь vtg@vtg.com.ua, находящийся в групе доступа (member=uid=vtg), срабатывает поиск в последней строке (1) в результате чего ВСЕ письма будут отправлятся наружу независимо от наличия/отсутсвия пользователя в списке доступа.

между прочим, команда postmap работает коректно: при условии что username находится в списке разрешенных, команда postmap -q username@domain.vtg ldap:/usr/local/etc/postfix/sender.cf возвращает remote, если отсутсвует nothing.

более детальный просмотр с ключем -v показывает только один поиск с query_filter = member=uid=username, а не 3 как в логе работы smtpd

[Выводы] мне кажется что метод проверки адреса реализованный в smtpd/smtpd_check.c function check_mail_access не соответсвует идеологии использования ключей %[usd] для определения query_filter, возможно имеет смысл пересмотреть эту механику.

метод используемый в postmap мне кажется более прозрачным с точки зрения идеологии.

anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.