Вижу, что в мое отсутствие много чего понаписали :)Мне удалось подружить Exim с Active Directory. Конкретно: вытягивание почтовых адресов и SMTP-авторизация.
Exim скомпилировал с такими опциями (может неправильно - покопался в /usr/ports/mail/exim/Makefile):
WITH_CONTENT_SCAN = yes
WITH_SASLAUTHD = yes
WITH_MYSQL = yes
WITH_MYSQL_VER = 50
WITH_DEFAULT_CHARSET ?= KOI8-R
WITH_AUTH_SASL = yes
/usr/local/etc/saslauthd.conf:
ldap_servers: ldap://192.168.0.254:3268/
ldap_bind_dn: CN=Sasl,CN=Users,DC=domain,DC=com
ldap_bind_pw: password
ldap_version: 3
ldap_search_base: CN=Users,DC=domain,DC=com
ldap_filter: (sAMAccountName=%u)
ldap_debug: -1
/usr/local/etc/exim/configure:
( ... skip ... )
LDAP_AD_BINDDN = "CN=Exim,CN=Users,DC=domain,DC=com"
LDAP_AD_PASS = password
LDAP_AD_BASE_DN = "CN=Users,DC=domain,DC=com"
LDAP_AD_MAIL_RCPT = \
user=LDAP_AD_BINDDN \
pass=LDAP_AD_PASS \
ldap:///DC=domain,DC=com\
?mail?sub?\
(&\
(|\
(objectClass=user)\
(objectClass=organizationalPerson)\
(objectClass=person)\
)\
(mail=${quote_ldap:${local_part}@${domain}})\
# (sAMAccountName=${quote_ldap:${local_part}})\
)
( ... skip ... )
begin routers
adsi_check:
driver = redirect
domains = +local_domains
allow_fail
allow_defer
# forbid_file
# forbid_pipe
redirect_router = localuser
data = ${lookup ldap {LDAP_AD_MAIL_RCPT}\
{${local_part}@${domain}} {:fail: User unknown}}
localuser:
driver = accept
# check_local_user
# local_part_suffix = +* : -*
# local_part_suffix_optional
transport = local_delivery
cannot_route_message = Unknown user
( ... skip ... )
begin transports
local_delivery:
driver = appendfile
file = /var/mail/$local_part
delivery_date_add
envelope_to_add
return_path_add
group = mail
user = $local_part
mode = 0660
no_mode_fail_narrower
( ... skip ... )
begin authenticators
plain:
driver = plaintext
public_name = PLAIN
server_condition = ${if saslauthd{{$2}{$3}}{1}{0}}
server_set_id = $2
login:
driver = plaintext
public_name = LOGIN
server_prompts = "Username:: : Password::"
server_condition = ${if saslauthd{{$1}{$2}}{1}{0}}
server_set_id = $1
Вот, у кого какие соображения будут? :)