Назад | Перейти на главную страницу

procmail игнорирует пользовательские настройки

Я использую 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. лучший способ понять проблему - попытаться объяснить ее кому-нибудь :))