procmail忽略用户设置

我使用procmail来结合postfix来过滤邮件。 procmail是由postfix通过在main.cf mailbox_command中触发的

mailbox_command = /usr/bin/procmail -t -a "$EXTENSION" 

但是在master.cf中

 procmail unix nn - 20 pipe flags=R user=vmail argv=/usr/bin/procmail -o SENDER=${sender} -m USER=${user} EXTENSION=${extension} 

我不明白,但在我看来,这两个不是相同的命令是否有可能,这种情况是为什么procmail忽略用户设置un / user / user / .procmailrc的原因?

如果我们看看procmail日志,我们可以看到

 From info@some_spam_domain.com Sat Mar 1 17:10:24 2014 Subject: ***** SPAM 27.4 ***** Hi i'm Masha 22 yo. do you have web camera? Folder: /usr/lib/dovecot/deliver -m Junk -d hans 4202 

它实际上是使用dovecot来发送电子邮件。 hans是一个用户,JUNK是在/ etc / procmailrc中定义的一个文件夹

 DROPPRIVS=no DELIVER="/usr/lib/dovecot/deliver" SPAMORDNER="$DELIVER -m Junk -d $USER" :0 w * ^X-Spam-Status: Yes | $SPAMORDNER 

我在我的procmailcf那里

 DROPPRIVS=no 

DROPPRIVS =没有和-d一起工作,但是closures了用户.procmailrc DROPPRIVS = yes强制procmail作为用户女巫,结果是没有-d并且传递到/ var / mail /,这样我们可以更接近点我不明白。

打开DROPPRIVS似乎只工作,如果用户有一个.prcocmailrc在他的家庭文件夹,因为我可以定义那里提供/ home / else邮件传递到/ var / mail /和它的mbox格式,而不是maildir格式


我在/ etc / procmailrc中提供了这样的解决方法(类似于伪代码)

 if exist /home/<username>/.procmailrc set DROPPRIVS=yes else set DROPPRIVS=no 

我如何在procmail语言中编写这个?

解决scheme似乎是这样的

 TMPFILE="$HOME/.procmailrc" :0 w * ?test -f $TMPFILE { DROPPRIVS=yes } :0 Ew * !test -f $TMPFILE { DROPPRIVS=no } 

它工作得很好,但似乎有一个错误,在日志文件中写入以下内容

 procmail: Executing "test -f $TMPFILE" procmail: Match on "test -f $TMPFILE" procmail: Assigning "DROPPRIVS=yes" procmail: Assuming identity of the recipient, VERBOSE=off procmail: Program failure (75) of "/usr/lib/dovecot/deliver" 

我无法理解是谁设置了这个VERBOSE = off,因为它不在我的procmailrc中,似乎是在交付代码中的某个地方。

无论如何,在这一行之后,它正确跳转到用户.procmailrc并执行它,而不会失败。 所以这个失败似乎只是一个整容。

PS理解问题的最好方法是尝试向其他人解释:))