My system currently uses virtual_mailbox_domains and virtual_mailbox_maps from LDAP (users do not have unix accounts, no ldap-pam) and delivers to Maildirs in /var/mail/vhosts/${domain}/${user}/Maildir/, all of which are owned by vmail:vmail.

I would like to have the LDA do filtering at delivery time. I would love to be able to have per-virtual-user filtering config in /var/mail/vhosts/${domain}/${user}, but would settle for a single system-wide filtering configuration.

I tried getting postdrop or /usr/lib/dovecot/deliver to do this with a virtual_transport, but I ran into a few issues. Firstly, the argv macros documented in 'man 8 pipe' do not seem to have a way to pass the Maildir path, but I can hard-code '/var/mail/vhosts/${domain}/${user}' in the master.cf line and ignore virtual_mailbox_base in main.cf. Secondly, postdrop and dovecot's deliver both seem to want to do authentication using the user from the pipe args in master.cf, but there are no corresponding unix accounts.

How should I go about trying to do this?

The relevant configuration:

from main.cf
  virtual_mailbox_domains = ldap:/etc/postfix/ldap-virtual-domain.cf
  virtual_mailbox_maps = ldap:/etc/postfix/ldap-virtual-mailbox.cf
  virtual_mailbox_base = /var/mail/vhosts
  virtual_uid_maps = static:5000 # vmail
  virtual_gid_maps = static:5000 # vmail
  maildrop_destination_recipient_limit = 1
  virtual_transport = maildrop

/etc/postfix/ldap-virtual-domain.cf
  search_base = o=hosted,dc=home,dc=sbyrne,dc=net
  query_filter = dc=%s
  result_attribute = dc
  result_format = %s

/etc/postfix/ldap-virtual-mailbox.cf
  search_base = dc=%d,o=hosted,dc=home,dc=sbyrne,dc=net
  query_filter = uid=%u
  result_attribute = mail
  result_format = %d/%u/Maildir/

--
Stephen Byrne
[email protected]

Reply via email to