procmail не выполняет скрипты правильно - PullRequest
0 голосов
/ 21 апреля 2011

У меня странная проблема с запуском сценариев (сбой perl и ruby) из входящей почты, локально доставляемой procmail.

Система - CentOS 5.5, с постфиксом в качестве почтовой программы и настройкой .forward для отправки электронной почты в procmail. .Procmailrc и сценарии идентичны рабочей настройке на сервере Ubuntu.

Вот .procmailrc:

PATH= /usr/local/bin:/usr/bin:${PATH}
SHELL=/bin/bash
MAILDIR=$HOME/Maildir
DEFAULT=${MAILDIR}/
LOGABSTRACT=yes
LOGFILE=$HOME/Maildir/proclog
VERBOSE=YES

:0 wc
* ^To.*web@mydomain.com
| /home/web/perltest.pl

Вот скрипт на Perl:

#!/usr/bin/env perl

system("touch /home/web/touchedfile");

А затем сбой в журнале при получении письма:

procmail: Executing "/home/web/perltest.pl"
/home/web/perltest.pl: line 3: syntax error near unexpected token `"touch /home/web/touchedfile"'
/home/web/perltest.pl: line 3: `system("touch /home/web/touchedfile");'

Окончания строк - все UNIX. Сценарий работает нормально из командной строки.

Вся установка работает нормально, если я передаю команду procmail напрямую из командной строки, но когда она вызывается как часть процесса локальной доставки, #! строка в сценарии игнорируется.

Я могу заставить скрипт perl запускаться, если я явно выполняю perl в конвейере, например так:

:0 wc
* ^To.*web@mydomain.com
| perl /home/web/perltest.pl

... но я действительно не хочу признать поражение и сделать это.

1 Ответ

1 голос
/ 21 апреля 2011

Проблема в selinux, если ее отключить, она должна работать. Я не уверен, как это исправить с включенным selinux.

Вот способ это исправить и запустить selinux. Запустите chcon system_u:object_r:procmail_exec_t на ваших сценариях perl или ruby. Я проверил, что это исправление, но я недостаточно знаком с selinux, чтобы быть уверенным, что это «правильное» исправление.

...