Я использую procmail для фильтрации писем в сочетании с postfix. procmail запускается постфиксом через файл main.cf mailbox_command
mailbox_command = /usr/bin/procmail -t -a "$EXTENSION"
но в master.cf
procmail unix n n - 20 pipe
flags=R user=vmail argv=/usr/bin/procmail -o SENDER=${sender} -m USER=${user} EXTENSION=${extension}
Я не совсем понимаю, но мне кажется, что это не одна и та же команда. Возможно ли, что эта ситуация является причиной того, что procmail игнорирует пользовательские настройки в /home/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
он фактически использует голубятню для доставки электронных писем. 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 = no работает с -d, но отключает пользователя .procmailrc DROPPRIVS = yes заставляет procmail действовать как пользовательская ведьма, в результате чего доставка работает без -d и доставляется в / var / mail / И здесь мы приближаемся к точку я не понимаю.
включение DROPPRIVS, похоже, работает только в том случае, если у пользователя есть .prcocmailrc в его домашней папке, потому что я могу указать там, чтобы доставлять в / home /, иначе письма доставляются в / var / mail / и его в формате mbox вместо формата maildir
Я предполагаю, что обходной путь будет примерно таким (пример в псевдокоде) в / etc / procmailrc
if exist /home/<username>/.procmailrc
set DROPPRIVS=yes
else
set DROPPRIVS=no
как мне написать это на языке procmail?
решение кажется таким
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 и выполняет его без сбоев. так что эта неудача кажется чисто косметической.
P.S. лучший способ понять проблему - попытаться объяснить ее кому-нибудь :))