To use LDAP, put this in main.cf:
virtual_alias_domains = ldap:/etc/postfix/ldap-domains.cf virtual_mailbox_maps = ldap:/etc/postfix/ldap-virtual-mailbox.cf virtual_alias_maps = ldap:/etc/postfix/ldap-aliases.cf
ldap-domains.cf:
server_host = ldap://127.0.0.1:389 bind = yes bind_dn = cn=admin,dc=null,dc=nl bind_pw = <password> search_base = ou=domain-aliases,dc=null,dc=nl scope = sub query_filter = (cn=@%s) result_attribute = cn
Note the @%s in the query_filter line. This is necessary to avoid duplicate returns with more specific aliases for wildcard domains. For example, when @example.com maps to user1, but user2@example.com maps to user2.
ldap-virtual-mailbox.cf
server_host = 127.0.0.1 search_base = ou=people,dc=null,dc=nl version = 3 bind = yes bind_dn = cn=admin,dc=null,dc=nl bind_pw = <password> query_filter = (&(objectClass=inetOrgPerson)(mail=%u@%d)) result_attribute = mail
ldap-aliases.cf:
server_host = ldap://127.0.0.1:389 search_base = ou=domain-aliases,dc=null,dc=nl scope = sub bind = yes bind_dn = cn=admin,dc=null,dc=nl bind_pw = <password> query_filter = (|(cn=%s)(cn=%d)) result_attribute = rfc822MailMember
To create the table:
echo -e "dn: ou=domain-aliases,dc=null,dc=nl\nobjectClass: organizationalUnit\nou: people" | ldapadd -x -D cn=admin,dc=null,dc=nl -w $LDAP_PASSWD
To create a wildcard domain:
echo -e "dn: cn=@test1.null.nl,ou=domain-aliases,dc=null,dc=nl\nobjectClass: top\nobjectClass: nisMailAlias\ncn: @test1.null.nl\nrfc822MailMember: user@null.nl" | ldapadd -x -D cn=admin,dc=null,dc=nl -w $LDAP_PASSWD
To create a more specific alias:
echo -e "dn: cn=user2@test1.null.nl,ou=domain-aliases,dc=null,dc=nl\nobjectClass: top\nobjectClass: nisMailAlias\ncn: user2@test1.null.nl\nrfc822MailMember: user2@null.nl" | ldapadd -x -D cn=admin,dc=null,dc=nl -w $LDAP_PASSWD
And also useful:
alias ldapls="ldapsearch -x -D cn=admin,dc=null,dc=nl -w $LDAP_PASSWD -b dc=null,dc=nl '(objectClass=*)'" alias ldapdel="ldapdelete -x -D cn=admin,dc=null,dc=nl -w $LDAP_PASSWD"
