Benjamin
2016-Jun-08 08:13 UTC
postfix+dovecot and usernames different to e-mail addresses
Hi, I want to replace an old mailserver setup with postfix+dovecot. The problem I'm facing now is, that the old system had usernames different to the e-mail address of the user. For example: E-Mail-Address: foo at example.com Username: foo-example.com I configured postfix so that it passes mails to dovecot using the following command (master.cf): dovecot unix - n n - - pipe flags=DRhu user=mail-data:mail-data argv=/usr/lib/dovecot /dovecot-lda -a $(recipient) When dovecot now receives an e-mail from postfix it logs dovecot: lda(mail-data): Error: User initialization failed: Namespace 'INBOX.': Home directory not set for user. Can't expand ~/ for mail root dir in: ~/Maildir dovecot: lda: Fatal: Invalid user settings. Refer to server log for more information. My dovecot-ldap configuration looks quite simple: hosts = 192.168.0.1,192.168.0.2 dn = cn=mailadmin,dc=example,dc=com dnpass = foo auth_bind = yes ldap_version = 3 base = ou=users,dc=example,dc=com user_attrs = mailMessageStore=home user_filter = (&(objectClass=qmailUser)(uid=%u)) pass_filter = (&(objectClass=qmailUser)(uid=%u)) I think dovecot does not know that the username is not the e-mail address, but how can I tell him? Furthermore we have alternative addresses here, so for example there may be an e-mail address bar at example.com owned by foo-example.com who has foo at example.com as primary address. Dovecot itself (IMAP) works fine, so here it can find the correct Maildir for the user. The difference is, that I connect using the username instead of the e-mail address in this case. # dovecot --version 2.2.22 (fe789d2) # postconf -d | grep mail_version mail_version = 3.1.0 # lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04 LTS Release: 16.04 Codename: xenial Thanks for your help Benjamin
Wolfgang Rosenauer
2016-Jun-08 20:45 UTC
postfix+dovecot and usernames different to e-mail addresses
On Wed, Jun 8, 2016 at 10:13 AM, Benjamin <dovecot at benjaminhubert.at> wrote:> > My dovecot-ldap configuration looks quite simple: > > hosts = 192.168.0.1,192.168.0.2 > dn = cn=mailadmin,dc=example,dc=com > dnpass = foo > auth_bind = yes > ldap_version = 3 > base = ou=users,dc=example,dc=com > user_attrs = mailMessageStore=home > user_filter = (&(objectClass=qmailUser)(uid=%u)) > pass_filter = (&(objectClass=qmailUser)(uid=%u)) > > I think dovecot does not know that the username is not the e-mail address, > but how can I tell him? > > Furthermore we have alternative addresses here, so for example there may > be an e-mail address bar at example.com owned by foo-example.com who has > foo at example.com as primary address. >You need user_filter and pass_filter to recognize also the email addresses IMHO. Mine look like: pass_filter = (&(objectClass=suseMailRecipient)(|(alias=%n)(uid=%n))) user_filter = (&(objectClass=suseMailRecipient)(|(alias=%n)(uid=%n))) You have to adapt to your own ldap attributes and use the correct variable (%n) to match your usecase. My users can login (and receive mails) via all of their aliases, primary address (part of the alias set) or their username. HTH, Wolfgang
Benjamin
2016-Jun-09 14:03 UTC
postfix+dovecot and usernames different to e-mail addresses
Thank you for this hint, but no, that does not work. Does Dovecot really use this user_filter when postfix passes mail using the dovecot-lda command? I now tried it with user_filter = (&(objectClass=qmailUser)(|(uid=%u)(mail=%u))) and when I search with this filter in LDAP directly (using the recipients e-mail address as %u) it returns the wanted user. I also ensured, postfix passes the e-mail address as argument by playing around with master.cf, and it does. At the moment the dovecot line looks as follows: dovecot unix - n n - - pipe flags=DRhu user=mail-data:mail-data argv=/usr/lib/dovecot/dovecot-lda -a ${recipient} Dovecot still tells me that it does not find the home directory for the user. Benjamin On 06/08/2016 10:45 PM, Wolfgang Rosenauer wrote:> On Wed, Jun 8, 2016 at 10:13 AM, Benjamin <dovecot at benjaminhubert.at> wrote: > >> >> My dovecot-ldap configuration looks quite simple: >> >> hosts = 192.168.0.1,192.168.0.2 >> dn = cn=mailadmin,dc=example,dc=com >> dnpass = foo >> auth_bind = yes >> ldap_version = 3 >> base = ou=users,dc=example,dc=com >> user_attrs = mailMessageStore=home >> user_filter = (&(objectClass=qmailUser)(uid=%u)) >> pass_filter = (&(objectClass=qmailUser)(uid=%u)) >> >> I think dovecot does not know that the username is not the e-mail address, >> but how can I tell him? >> >> Furthermore we have alternative addresses here, so for example there may >> be an e-mail address bar at example.com owned by foo-example.com who has >> foo at example.com as primary address. >> > > You need user_filter and pass_filter to recognize also the email addresses > IMHO. > > Mine look like: > pass_filter = (&(objectClass=suseMailRecipient)(|(alias=%n)(uid=%n))) > user_filter = (&(objectClass=suseMailRecipient)(|(alias=%n)(uid=%n))) > > You have to adapt to your own ldap attributes and use the correct variable > (%n) to match your usecase. My users can login (and receive mails) via all > of their aliases, primary address (part of the alias set) or their username. > > HTH, > Wolfgang >