0

procmailによってローカルに配信された受信メールからスクリプトを実行する際に奇妙な問題が発生しています(perlとrubyが失敗します)。

システムはCentOS5.5で、postfixをメーラーとして使用し、.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

...しかし、私は本当に敗北を認めたくありません。

4

1 に答える 1

1

問題はselinuxです。これをオフにすると、動作するはずです。selinuxを有効にして修正する方法がわかりません。

これを修正し、selinuxを実行し続ける方法は次のとおりです。chcon system_u:object_r:procmail_exec_tperlまたはrubyスクリプトで実行します。私はそれが修正であることを確認しましたが、それが「正しい」修正であることを確認するのに十分なselinuxに精通していません。

于 2011-04-21T19:35:21.420 に答える