Кручу exim и dovecot для работы с АД, уже многое настроил, как получение почты на адреса существующие в АД, также есть обработка alias, которое хранится в атрибуте otherMailbox АД. Также обрабатывается рассылка по группам которые заведены в АД. То есть уже многое настроено, но вот хочется как всегда большего. Теперь хочется что бы в АД можно было указать пересылку почты на другой адрес, и она туда отправлялась.
Если включена пересылка почты то в АД устанавливается атрибут altRecipient, где прописывается basename контакта, куда необходимо отправлять почту. Как выцепить этот атрибут и получить адрес получателя это понятно
Код: Выделить всё
${map {${lookup ldap{user=ldap_user@domain.ltd pass=user_pass ldap:///dc=domain,dc=ltd?altrecipient?sub?
(&(objectClass=user)(mail=${quote_ldap:${local_part}@{domain}})(!(userAccountControl:1.2.840.113556.1.4.803:=2))(altrecipient=*))}}\
} \
{${lookup ldap{user=ldap_user@domains.ltd pass=user_pass ldap:///${quote_ldapdn:$item}?mail?base?}}\
}\
}
и вот тут-то и возникает вопрос, как написать условие которое бы обрабатывало два случая, то есть если установлен атрибут deliverAndRedirect получало почтовый адрес, не только контакта куда надо переслать но и самого пользователя(как выдернуть его из ад тоже знаю), а если не установлен то только адрес контакта.
Понятное дело что если результат выполнения такого условия присвоить переменной data маршрута exim, то получим или пустую строку, что приведет к отбросу данного маршрута, или получим адреса на которые надо перенаправить письмо, если там будет и адрес который находится в $local_part@$domain то механизм предотвращения зацикливания не должен будет для данного адреса второй раз обрабатывать данный маршрут.
Вот остается только правильно составить запрос, помогите кто как сможет.
Проверка условия def не подходит, т.к. там используются только переменные.
Если использовать eq то не понятно ч ем стравнивать.