Mail находится в отдельном ou.
Ищем руками. Работает:
# ldapsearch -b 'ou=Mail, dc=ph, dc=com' -D 'cn=bind, ou=Users, dc=ph, dc=com' -w XXX -s sub -h mainserv.ph.com '(&(objectClass=qmailUser)(uid=someuser))' uid mailMessageStore
…
# extended LDIF
…
uid: someuser
mailMessageStore: /var/mail/someuser/Maildir/
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
Dovecot сконфигурирован так:
# 2.0.11: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.36-gentoo-r5 x86_64 Gentoo Base System release 2.0.1
base_dir = /var/run/dovecot/
listen = *
login_trusted_networks = 192.168.1.0/24
mail_location = maildir:~/.maildir
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date
passdb {
args = *
driver = pam
}
passdb {
args = /etc/dovecot/dovecot-ldap.conf.ext
driver = ldap
}
plugin/sieve = ~/.dovecot.sieve
plugin/sieve_dir = ~/sieve
protocols = imap
ssl_cert = </etc/ssl/dovecot/server.pem
ssl_key = </etc/ssl/dovecot/server.key
userdb {
driver = passwd
}
userdb {
args = /etc/dovecot/dovecot-ldap.conf.ext
driver = ldap
}
verbose_proctitle = yes
protocol lda {
mail_plugins = sieve
}
dovecot-ldap.conf.ext:
hosts = mainserv.ph.com
dn = cn=bind, ou=Users, dc=ph, dc=com
dnpass = XXX
debug_level = 255
auth_bind = no
ldap_version = 3
base = ou=Mail, dc=ph, dc=com
scope = subtree
user_attrs = mailMessageStore=home
user_filter = (&(objectClass=qmailUser)(uid=%u))
pass_attrs = uid=user,userPassword=password
pass_filter = (&(objectClass=qmailUser)(uid=%u))
Пытаюсь через телнет залогиниться.
$ telnet mainserv.ph.com 143
Trying 192.168.1.252...
Connected to mainserv.ph.com.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN] Dovecot ready.
a001 LOGIN someuser password1
a001 NO [AUTHENTICATIONFAILED] Authentication failed.
В базе у меня 2-а совпадающих uid в разных ветках и с разными паролями. Как я выше показал, с password1 не пускает, тогда как с password2, который относится к uid с другим objectClass и находится в другой ветке аутентифицирует нормально.
Кусок выхлопа для случая, когда не работает:
mainserv dovecot: auth-worker: Error: put_filter: "(&(objectClass=posixAccount)(uid=someuser))"
mainserv dovecot: auth-worker: Error: put_filter: AND
mainserv dovecot: auth-worker: Error: put_filter_list "(objectClass=posixAccount)(uid=someuser)"
mainserv dovecot: auth-worker: Error: put_filter: "(objectClass=posixAccount)"
mainserv dovecot: auth-worker: Error: put_filter: simple
mainserv dovecot: auth-worker: Error: put_simple_filter: "objectClass=posixAccount"
mainserv dovecot: auth-worker: Error: put_filter: "(uid=someuser)"
mainserv dovecot: auth-worker: Error: put_filter: simple
mainserv dovecot: auth-worker: Error: put_simple_filter: "uid=someuser"
mainserv dovecot: auth-worker: Error: ldap_build_search_req ATTRS: uid userPassword uidNumber gidNumber cn homeDirectory loginShell gecos descripti
(полностью можно посмотреть тут: http://dpaste.org/9iA4/ )
Я вообще в удивлении: это баг или мои руки?
Такое впечатление, что dovecot плюёт на subtree и указанный базовый dn.
В рассылке dovecot ничего не нарыл.