> есть какие-то успехи в этом деле?Если это действительно кому-то интересно, то да - успехи есть.
С помощью exim -be -d стал смотреть как раскрываются строки в моём аутентификаторе. И понял, что, во-первых: с таким синтаксисом поиск (lookup ldap) не всегда работает успешно, а во-вторых: если после неудачного поиска возвращается пустое значение (user=""), то ldapauth возвращает "истина" в любом случае.
Соответственно, я сперва добился чтобы гарантированно работал поиск в LDAP. Вот в таком варианте у меня заработало (заменил lookup ldap на lookup ldapdn, заменил имя домена на IP-адрес контроллера домена, добавил к параметру LDAP baseDN):
LDAP_AUTH = user="cn=пользователь, который может искать в AD,cn=Users,dc=corp,dc=ххххх,dc=ru" pass="пароль"
LDAP_URL = ldap://IP-адрес контроллера домена:389/dc=corp,dc=ххххх,dc=ru
lookup ldapdn{LDAP_AUTH LDAP_URL?dn?sub?(|(otherMailbox=$auth2)(mail=$auth2))
если пользователь есть в AD возвращает "DN-пользователя", если нет - пустую строку.
Далее объединил в одном условии проверку: 1. такой пользователь существует в AD (чтобы поиск не возвращал пустую строку) и 2. пользователь может аутентифицироваться в AD.
server_condition = ${if and{{!eq{}{${lookup ldapdn{LDAP_AUTH LDAP_URL?dn?sub?(|(otherMailbox=$auth2)(mail=$auth2))}}}}\
{ldapauth {user="${lookup ldapdn{LDAP_AUTH LDAP_URL?dn?sub?(|(otherMailbox=$auth2)(mail=$auth2))}}" \
pass="$auth3" LDAP_URL}}}{yes}{no}}
В данном условии меня смущает то, что необходимо дважды производить поиск в AD (lookup ldapdn). К сожалению, у меня не хватило ума как ещё оптимизировать это условие. К тому же я успокаиваю себя тем, что, судя по отладочным логам, реальный поиск происходит только в первый раз, затем используется кэширование и, кроме того, пользователей реально пользующихся аутентификацией при отправке письма очень мало и значит никакой значимой нагрузки двойной поиск не создаёт.