I do not know if this is a help request to solve a problem but to understand what is going on. I am going to start with the problem description as I see it and we will go from there. I have postfix setup to use dovecot for tls/sasl in addition to its normal imap/pop3 functions. Postfix is also setup to do virtual domains, getting its information from the files valias, vmaps, and vhosts which are all located in its /etc/postfix directory: # Virtual domain stuff virtual_mailbox_domains = /etc/postfix/vhosts.txt virtual_mailbox_base = /var/spool/vmail virtual_mailbox_maps = hash:/etc/postfix/vmaps.txt # 1500:1500 is user virtual virtual_uid_maps = static:1500 virtual_gid_maps = static:1500 virtual_alias_maps = hash:/etc/postfix/valias.txt Dovecot uses its own unix passwd-like files to do authentication. In fact, as you can see, I broke them apart so I can make the actual password file readable only by root: mail_location = maildir:~/ auth default { passdb passwd-file { args = /etc/dovecot/passwd } userdb passwd-file { args = /etc/dovecot/users } } I know the norm is to use a database or at least ldap, but I had my reasons. Mailscanner is also installed. So, the whay things have been working so far was, postfix receives an email and checks if it is recipient exists here. If so, it would pass it to mailscanner and then get it back, when it would then drop it at the recipient's mailbox in /var/spool/vmail/domain.com/user. A user would then connect to dovecot to retrieve the email. And when an email was to be sent, postfix would use dovecot to do the user authentication. So far so good. Now I want to add dovecot lda so I can run the cmu sieve plugin (this is dovecot 1.0.1) primarily to move emails mailscanner (and spamassassin) thinks that are spam to each virtual user's Spam maildir directory. So, reading http://wiki.dovecot.org/LDA/Sieve/CMU, I add the following entries to dovecot.conf: protocol lda { mail_plugin_dir = /usr/lib/dovecot/modules/lda sendmail_path = /usr/lib/sendmail auth_socket_path = /var/run/dovecot/auth-master mail_plugins = cmusieve global_script_path = /etc/dovecot/scripts/dovecot.sieve mail_debug = yes log_path = /var/log/dovecot-lda info_log_path = /var/log/dovecot-lda } # I am being rather lazy in my sieve config entry. I did make sure the file # is owned by virtual:virtual plugin { sieve = /etc/dovecot/scripts/dovecot.sieve } socket listen { master { path = /var/run/dovecot/auth-master mode = 0600 user = virtual # User running Dovecot LDA's deliver } # Postfix is using dovecot for SMTP AUTH (SASL) client { path = /var/spool/postfix/private/auth mode = 0660 user = postfix group = postfix } } Then, based on http://wiki.dovecot.org/LDA/Postfix, I edit postfix's master.cf: dovecot unix - n n - - pipe flags=DRhu user=virtual:virtual argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} and main.cf: dovecot_destination_recipient_limit = 1 virtual_transport = dovecot # mailbox_virtual_domains was already defined as shown above The dovecot.sieve file looks like this: require ["fileinto", "reject"]; # Spam stuff if header :contains "X-Spam-Level" "********************" { discard; stop; } elsif header :contains "X-Spam-Status" "Yes" { fileinto "Spam"; stop; } So, I restart it and try to send a message to my account, say raub at domain.com, in this machine. It bounces back saying the user does not exist. I check th elog files and they seem to agree: dovecot: 2009-06-30 16:31:44 Info: auth(default): passwd-file(raub at domain.com): lookup: user=raub at domain.com file=/etc/dovecot/users dovecot: 2009-06-30 16:31:44 Info: auth(default): passwd-file(raub at domain.com): unknown user Now this is where I am trying to understand what is going on. It seems to me that postfix *or* dovecot went to /etc/dovecot/users looking for raub at domain.com. Not finding it there (I had it defined there as raub simply; I have mail_location = maildir:~/ in dovecot.conf, so the username in this file does not need to be related to the user's email address), it decided user does not exist and bounced back. My testing indicated that happened after postfix passed the email to dovecot lda (I guess that virtual_transport = dovecot means it goes to master.cf and looks for the dovecot entry and then passes the message to it). That would mean postfix is not using vmaps to see if the user exists anymore. Instead, it is delegating checking if a user exists to dovecot, which is not what I want to do. I want postfix to worry about getting mail and making sure the recipient exists. Out of the blue, if I replaced the virtual_mailbox entry with local_transport = dovecot, or nothing at all, mail is delivered as it should. My gut feeling is the master.cf dovecot entry is responsible for the problem, but I am not sure because I really do not know everything that is going on there; this is the first time I venture in that file. So, could anyone shed some light on what is causing the problem? Thanks!
Le 1 juil. 09 ? 16:05, Mauricio Tavares a ?crit :> [...] > > So, could anyone shed some light on what is causing the problem? > Thanks!Hello Mauricio, It's rather difficult to have a clear view of what's happening. Could you augment your description with the output of postconf -n dovecot -n as well as all the log entries written by both Postfix and Dovecot when you send your email to raub at domain.com, please without obfuscating the data: its already sufficiently complicated... ;-) If needed, you could try to augment Postfix' verbosity with the help of debug_peer_level and debug_peer_list in main.cf. The same way, you could rise Dovecot's verbosity with mail_debug in dovecot.conf. Thanks, Axel
Am 01.07.2009 um 16:05 schrieb Mauricio Tavares:> My testing indicated that happened after postfix passed the email to > dovecot lda (I guess that virtual_transport = dovecot means it goes to > master.cf and looks for the dovecot entry and then passes the message > to it). That would mean postfix is not using vmaps to see if the user > exists anymore. Instead, it is delegating checking if a user exists to > dovecot, which is not what I want to do. I want postfix to worry about > getting mail and making sure the recipient exists. Out of the blue, if > I replaced the virtual_mailbox entry with local_transport = dovecot, > or nothing at all, mail is delivered as it should. > > My gut feeling is the master.cf dovecot entry is responsible for the > problem, but I am not sure because I really do not know everything > that is going on there; this is the first time I venture in that file. > > So, could anyone shed some light on what is causing the problem? > Thanks!If you use the Dovecot LDA, the delivery is completely handled by Dovecot once the message is passed to the Agent. This means the maildir location needs to be parsed by Dovecot, either by a static userdb or entries in your userdb/passwd files. Thomas
There isn't enough info for me to say what is going on, but it is a postfix problem. I am using 100% postfix virtual users, and it checks the virtual tables before passing it to virtual_transport (dovecot lda in my case). The issue is probably the restrictions lines, like smtp_recipient_restrictions, not having a line to reject unknown recipients. But could be any number of issues, that is just the simplest. Quoting Mauricio Tavares <raubvogel at gmail.com>:> I do not know if this is a help request to solve a problem but > to understand what is going on. I am going to start with the problem > description as I see it and we will go from there. > > I have postfix setup to use dovecot for tls/sasl in addition to its > normal imap/pop3 functions. Postfix is also setup to do virtual > domains, getting its information from the files valias, vmaps, and > vhosts which are all located in its /etc/postfix directory: > > # Virtual domain stuff > virtual_mailbox_domains = /etc/postfix/vhosts.txt > virtual_mailbox_base = /var/spool/vmail > virtual_mailbox_maps = hash:/etc/postfix/vmaps.txt > # 1500:1500 is user virtual > virtual_uid_maps = static:1500 > virtual_gid_maps = static:1500 > virtual_alias_maps = hash:/etc/postfix/valias.txt > > Dovecot uses its own unix passwd-like files to do authentication. In > fact, as you can see, I broke them apart so I can make the actual > password file readable only by root: > > mail_location = maildir:~/ > > auth default { > passdb passwd-file { > args = /etc/dovecot/passwd > } > userdb passwd-file { > args = /etc/dovecot/users > } > } > > I know the norm is to use a database or at least ldap, but I had my > reasons. Mailscanner is also installed. So, the whay things have been > working so far was, postfix receives an email and checks if it is > recipient exists here. If so, it would pass it to mailscanner and then > get it back, when it would then drop it at the recipient's mailbox in > /var/spool/vmail/domain.com/user. A user would then connect to dovecot > to retrieve the email. And when an email was to be sent, postfix would > use dovecot to do the user authentication. So far so good. > > Now I want to add dovecot lda so I can run the cmu sieve plugin (this > is dovecot 1.0.1) primarily to move emails mailscanner (and > spamassassin) thinks that are spam to each virtual user's Spam > maildir directory. > > So, reading http://wiki.dovecot.org/LDA/Sieve/CMU, I add the following > entries to dovecot.conf: > > protocol lda { > mail_plugin_dir = /usr/lib/dovecot/modules/lda > > sendmail_path = /usr/lib/sendmail > > auth_socket_path = /var/run/dovecot/auth-master > mail_plugins = cmusieve > global_script_path = /etc/dovecot/scripts/dovecot.sieve > > mail_debug = yes > log_path = /var/log/dovecot-lda > info_log_path = /var/log/dovecot-lda > > } > > # I am being rather lazy in my sieve config entry. I did make sure the file > # is owned by virtual:virtual > plugin { > sieve = /etc/dovecot/scripts/dovecot.sieve > } > > socket listen { > master { > path = /var/run/dovecot/auth-master > mode = 0600 > user = virtual # User running Dovecot LDA's deliver > } > # Postfix is using dovecot for SMTP AUTH (SASL) > client { > path = /var/spool/postfix/private/auth > mode = 0660 > user = postfix > group = postfix > } > } > > Then, based on http://wiki.dovecot.org/LDA/Postfix, I edit postfix's > master.cf: > > dovecot unix - n n - - pipe > flags=DRhu user=virtual:virtual argv=/usr/lib/dovecot/deliver -f > ${sender} -d ${user}@${nexthop} > > and main.cf: > dovecot_destination_recipient_limit = 1 > virtual_transport = dovecot > # mailbox_virtual_domains was already defined as shown above > > The dovecot.sieve file looks like this: > > require ["fileinto", "reject"]; > > # Spam stuff > if header :contains "X-Spam-Level" "********************" { > discard; > stop; > } > elsif header :contains "X-Spam-Status" "Yes" { > fileinto "Spam"; > stop; > } > > So, I restart it and try to send a message to my account, say > raub at domain.com, in this machine. It bounces back saying the user does > not exist. I check th elog files and they seem to agree: > > dovecot: 2009-06-30 16:31:44 Info: auth(default): > passwd-file(raub at domain.com): lookup: user=raub at domain.com > file=/etc/dovecot/users > dovecot: 2009-06-30 16:31:44 Info: auth(default): > passwd-file(raub at domain.com): unknown user > > Now this is where I am trying to understand what is going on. It seems > to me that postfix *or* dovecot went to /etc/dovecot/users looking > for raub at domain.com. Not finding it there (I had it defined there as > raub simply; I have mail_location = maildir:~/ in dovecot.conf, so the > username in this file does not need to be related to the user's email > address), it decided user does not exist and bounced back. > > My testing indicated that happened after postfix passed the email to > dovecot lda (I guess that virtual_transport = dovecot means it goes to > master.cf and looks for the dovecot entry and then passes the message > to it). That would mean postfix is not using vmaps to see if the user > exists anymore. Instead, it is delegating checking if a user exists to > dovecot, which is not what I want to do. I want postfix to worry about > getting mail and making sure the recipient exists. Out of the blue, if > I replaced the virtual_mailbox entry with local_transport = dovecot, > or nothing at all, mail is delivered as it should. > > My gut feeling is the master.cf dovecot entry is responsible for the > problem, but I am not sure because I really do not know everything > that is going on there; this is the first time I venture in that file. > > So, could anyone shed some light on what is causing the problem? Thanks! >
Le 1 juil. 09 ? 18:05, I wrote:> [...] > Could you augment your description with the output of > postconf -n > dovecot -n > as well as all the log entries written by both Postfix and Dovecot > when you send your email to raub at domain.com, please without > obfuscating the data: its already sufficiently complicated... ;-) > [...]I forgot an essential piece of information: postconf mail_version Thanks, Axel