I'm now trying to set up spamassassin on my system, but am running into some hurdles. I use exim as my MTA, so I'm following the guides at http://bogmog.sourceforge.net/document_show.php3?doc_id=28
I installed the 'spamassassin' and 'razor' packages. The script works fine if I run it as myself and pipe messages through it. The trick is making exim run the checks automatically. Due to exim's architecture, the message is delivered to a pipe, the pipe is connected to spamassassin. When spamassassin is finished tagging the message it is sent back to exim. exim only delivers to spamassassin if it hasn't been tagged yet, otherwise it continues to my filter file. This part is fine. I took the "spamcheck.pl" given at the above site and made an sh script from it. This script takes the message, runs it through spamassassin and gives it back to exim. ~~~~~~~~~~~~~~~~~ #!/bin/sh # wrapper script to use SpamAssassin with exim #SENDER="$1" #if [ -z "$SENDER" ] ; then # SENDER='<>' #fi shift 1 # The recipient list RCPT="$@" if [ -z "$RCPT" ] ; then echo "spamcheck.sh called with insufficient arguments!" exit 126 fi # Run the message through spamassassin and pass it back to exim cat | spamassassin -P -l /tmp/SA.log | /usr/sbin/exim -oMr spam-scanned -i -f $SENDER $RCPT ~~~~~~~~~~~~~~~~~ I don't know what $SENDER is for, I didn't see it used anywhere in the perl script, but it was set there. I can run this as root and pipe a message to it, and it works. (it must be run as a "privileged" user to set the received_protocol to prevent loops) The relevant portions of my exim.conf are : ~~~~~~~~~~~~~~~~~ # Spam Assassin spamcheck: driver = pipe command = "/usr/local/bin/spamcheck.sh ${sender_address} ${pipe_addresses}" prefix = suffix = check_string = escape_string = return_path_add = false # must use a privileged user to set $received_protocol on the way back in! user = mail group = mail current_directory = "/tmp" path = "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin" # !!!!!!!!!!!!!!!!!!! return_output = false ~~~~~~~~~~~~~~~~~ # Spam Assassin spamcheck_director: # only if the message hasn't been scanned yet condition = "${if eq {$received_protocol}{spam-scanned} {0}{1}}" driver = smartuser transport = spamcheck ~~~~~~~~~~~~~~~~~ However when I tell exim to run this automatically, I get the following error message sent back to me : ~~~~~~~~~~~~~~~~~~~~~~~` Received: from mail by dman.ddts.net (Exim 3.33 #1 (Debian)) >-------protocol: spam-scanned >-------id 16Qfjm-0001Gq-00 >-------for <[EMAIL PROTECTED]> >-------; Tue, 15 Jan 2002 21:23:39 -0500 Message-Id: <[EMAIL PROTECTED]> From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Date: Tue, 15 Jan 2002 21:23:39 -0500 Failed to create user preferences file "/.spamassassin.cf" from default "/etc/spamassassin.prefs". Failed to create default prefs file /.spamassassin.cf ~~~~~~~~~~~~~~~~~~~~~~~` (if I set return_output to false it doesn't come back to me, but that is like using a band aid to cover up a wound) My questions are as follows : 1) Why is spamassassin trying to create a preferences file in /? 2) How can users have their own preferences files? It doesn't seem possible with this setup since either SA is run as 'mail' or every user on the system must be 'privilege'. TIA, -D -- The fear of the Lord leads to life: Then one rests content, untouched by trouble. Proverbs 19:23