[Dovecot] Problem using LDAP generating Userhome
Hi there, I'm trying to let dovecot generate the userhome directory dynamicly via user_attr. If "uid" is returned from LDAP before "mail" everything is fine, but if "mail" is delivered before "uid" the localpart of the mailaddress is used in home path.
e.g.: Mail: testuser@domain.de UID : test123
sometimes home is /mail/store/testuser and sometimes /mail/store/test123 depending on the order the ldap server replies.
I'm currently using version 1.2.7 of dovecot in testing and 1.1.6 in production. Both have the same "bug".
Mails are stored on nfs, indexes are stored local.
This is my dovecot-ldap.conf configuration:
pass_filter = (|(&(objectClass=mailRecipient)(mail=%u))(&(objectClass=mailRecipient)(mailalternateAddress=%u))(&(objectClass=mailRecipient)(uid=%n))) pass_attrs = uid=user,userPassword=password,mailMessageStore=home=%$/telefonica.de/%Ln,mailFilterStore=sieve_dir=%$/telefonica.de/%Ln user_filter = (|(&(objectClass=mailRecipient)(mail=%u))(&(objectClass=mailRecipient)(mailalternateAddress=%u))(&(objectClass=mailRecipient)(uid=%n))) user_attrs = uid=user,mailMessageStore=home=%$/telefonica.de/%Ln,mailFilterStore=sieve_dir=%$/telefonica.de/%Ln
The filter needs to be that way, because you need to be able to authenticate by uid or mailaddress.
And the dovecot -n output:
# 1.2.7: /etc/dovecot.conf # OS: Linux 2.6.18-92.1.13.el5 x86_64 Red Hat Enterprise Linux Server release 5.2 (Tikanga) base_dir: /var/run/dovecot/ log_path: /var/log/dovecot.log info_log_path: /var/log/dovecot-info.log log_timestamp: %Y-%m-%d %H:%M:%S syslog_facility: local1 protocols: imap managesieve listen(default): *:143 listen(imap): *:143 listen(managesieve): *, [::] ssl: no login_dir: /var/run/dovecot/login login_executable(default): /usr/libexec/dovecot/imap-login login_executable(imap): /usr/libexec/dovecot/imap-login login_executable(managesieve): /usr/libexec/dovecot/managesieve-login login_greeting: IMAP mail server ready. max_mail_processes: 200 mail_max_userip_connections(default): 50 mail_max_userip_connections(imap): 50 mail_max_userip_connections(managesieve): 10 verbose_proctitle: yes first_valid_uid: 1 mail_privileged_group: vmail mail_uid: 500 mail_gid: 500 mail_location: maildir:~/:INDEX=/mail/index/%Ln/ mailbox_idle_check_interval: 10 mail_debug: yes mmap_disable: yes mail_nfs_storage: yes mail_nfs_index: yes lock_method: flock mbox_write_locks: dotlock fcntl mail_executable(default): /usr/libexec/dovecot/imap mail_executable(imap): /usr/libexec/dovecot/imap mail_executable(managesieve): /usr/libexec/dovecot/managesieve mail_plugins(default): expire autocreate mail_plugins(imap): expire autocreate mail_plugins(managesieve): mail_plugin_dir(default): /usr/lib64/dovecot/imap mail_plugin_dir(imap): /usr/lib64/dovecot/imap mail_plugin_dir(managesieve): /usr/lib64/dovecot/managesieve imap_client_workarounds(default): delay-newmail outlook-idle netscape-eoh tb-extra-mailbox-sep imap_client_workarounds(imap): delay-newmail outlook-idle netscape-eoh tb-extra-mailbox-sep imap_client_workarounds(managesieve): managesieve_implementation_string(default): dovecot managesieve_implementation_string(imap): dovecot managesieve_implementation_string(managesieve): Cyrus timsieved v2.2.13 namespace: type: private separator: . prefix: INBOX. inbox: yes list: yes subscriptions: yes namespace: type: public separator: . prefix: Public. location: maildir:/mail/store/a.backend/shared list: yes subscriptions: yes lda: hostname: xxx mail_plugins: sieve expire mail_plugin_dir: /usr/lib64/dovecot/lda auth_socket_path: /var/run/dovecot/auth-master postmaster_address: xxx@telefonica.de sieve_global_dir: /mail/store/backend/sieve/ auth default: mechanisms: plain login username_format: %Lu verbose: yes debug: yes process_size: 512 passdb: driver: ldap args: /etc/dovecot/dovecot-ldap.conf userdb: driver: ldap args: /etc/dovecot/dovecot-ldap.conf socket: type: listen client: path: /var/run/dovecot/auth-client mode: 432 user: postfix group: vmail master: path: /var/run/dovecot/auth-master mode: 384 user: vmail group: vmail plugin: sieve: ~/%Ln.sieve sieve_dir: ~/sieve sieve_storage: ~/ expire: Trash 7 Trash/* 7 Junk 30 expire_dict: proxy::expire autocreate: INBOX.Trash autocreate2: INBOX.Drafts autocreate3: INBOX.Sent autosubscribe: INBOX.Trash autosubscribe2: INBOX.Drafts autosubscribe3: INBOX.Sent dict: expire: db:/var/lib/dovecot/expire.db
Thanks in advanced.
Thorsten Habich
On Tue, 2009-11-24 at 15:03 +0100, Thorsten Habich wrote:
Hi there, I'm trying to let dovecot generate the userhome directory dynamicly via user_attr. If "uid" is returned from LDAP before "mail" everything is fine, but if "mail" is delivered before "uid" the localpart of the mailaddress is used in home path.
e.g.: Mail: testuser@domain.de UID : test123
sometimes home is /mail/store/testuser and sometimes /mail/store/test123 depending on the order the ldap server replies.
I don't think there's a good way to solve this currently.
pass_attrs = uid=user,userPassword=password,mailMessageStore=home=%$/telefonica.de/%Ln,mailFilterStore=sieve_dir=%$/telefonica.de/%Ln
Do mailMessageStore and mailFilterStore return different directories? If not, maybe you could just put those settings into plugin {} section. Then the %Ln is guaranteed to be what you want.
Hi!
I don't think there's a good way to solve this currently.
I also think so, we "solved" the problem by putting the complete homepath in LDAP.
pass_attrs = uid=user,userPassword=password,mailMessageStore=home=%$/telefonica.de/%Ln,mailFilterStore=sieve_dir=%$/telefonica.de/%Ln
Do mailMessageStore and mailFilterStore return different directories? If not, maybe you could just put those settings into plugin {} section. Then the %Ln is guaranteed to be what you want.
That doesn't seem to work.
Dec 11 10:43:59 dovecot: Fatal: userdb didn't return a home directory, but mail location used it (%h): %h/:INDEX=/mail/index/%Lu/
The problem seems to be, that dovecot replaces values "on the fly" while retrieving from ldap. Not in the order it is mentioned in config file.
Greetings
Thorsten
participants (2)
-
Thorsten Habich
-
Timo Sirainen