Chris
Take a look at the Advosys web site....
http://advosys.ca/papers/postfix-filtering.html
The bit's you'll probably find most interesting are the section on how they
call the filter script from master.cf and possibly some of their example
filter scripts.
HTH
Alan
> -----Original Message-----
> From: Chris Wik [mailto:122889@xyz.molar.is]
> Sent: 17 April 2004 03:57
> To: 122923@xyz.molar.is
> Subject: [anomy-list]: Perl filter script
>
>
> Dear List,
>
> Pardon me if this is not an anomy specific question, but I thought
> this would probably be the best place to ask for assistance of this
> nature.
>
> I've written a Perl script which calls Anomy, and SpamAssassin. I'm
> invoking this script from Postfix with only one argument, the "to"
> address. I'm reading my mail message from STDIN, as the standard
> Anomy filter.sh script does. The script runs as the user "filter", as
> does spamd. In postfix's main.cf, "mydomain" is set to "anu.net"
>
> My problem is this: when my script passes the message back to Postfix
> with the sendmail command, the message appears to be coming from
> "122974@xyz.molar.is". How can I make the message appear to come from a
> local user, as it does when using the filter.sh script?
>
> Apr 17 04:43:54 mx3 postfix/pipe[21399]: 7F0F113A74A:
> to=<122889@xyz.molar.is>, relay=filter, delay=4, status=sent (dummy)
> Apr 17 04:43:54 mx3 postfix/qmgr[12225]: 2234E13A74F:
> from=<122974@xyz.molar.is>, size=3091, nrcpt=1 (queue active)
> Apr 17 04:43:54 mx3 postfix/smtp[21415]: 2234E13A74F:
> to=<122889@xyz.molar.is>, relay=mail2.anu.net[213.247.49.242], delay=0,
> status=bounced (host mail2.anu.net[213.247.49.242] said: 550 5.1.1
> user not known (in reply to MAIL FROM command))
>
> My mail server is bouncing this message because "122974@xyz.molar.is" did
> not exist, not because "122889@xyz.molar.is" does not exist. If I create a
> user "filter" in my anu.net domain, whose login is disabled and mail
> goes to /dev/null, then the script works.
>
> Comments, suggestions welcome!
>
> TIA,
> Chris
>
>
>
> #!/usr/bin/perl
>
> # define paths
> $spamc = '/usr/bin/spamc -f';
> $sendmail = '/usr/sbin/sendmail -i';
> $workdir = '/var/spool/filter/';
>
> # anomy setup
> $anomy = '/usr/local/anomy/bin/sanitizer.pl';
> $anomyconf = '/usr/local/anomy/sanitizer.cfg';
> $anomylog = '/var/log/anomy.log';
> $ENV{'ANOMY'} = '/usr/local/anomy';
>
> # define script variables
> $to = $ARGV[0];
> $message = '';
> $spamc = $spamc . ' -u "' . $to . '"';
> $parsed_file = $workdir . 'parsed' . $$;
> $anomy_file = $workdir . 'anomy' . $$;
> $delete_msg = "no";
> $spam_score = '0';
> $spam_level = '';
>
> # read in message
> while(<STDIN>) { $message .= $_ }
>
> # pass message to spamc for processing with spamd
> # output redirected to file $parsed_file
> open(SPAMC, "|$spamc > $parsed_file") or die "Could not open spamc
> for piping: $!";
> print SPAMC "$message";
> close SPAMC;
>
> # run the messsage through Anomy sanitizer script
> `cat $parsed_file | $anomy $anomyconf 2>>$anomylog > $anomy_file`;
>
> # read in parsed message to determine if we need to take
> further action
> open(PMSG, "$anomy_file") or die "Could not open parsed message: $!";
> while(<PMSG>) {
> if(/^X-Spam-Delete: /) { $delete_msg = substr($_, 15) }
> if(/^X-Spam-Level: /) { $spam_level = substr($_, 15) }
> if(/^X-Spam-Redirect: /) { $to = substr($_, 17) }
> }
> # find out how many stars (hits) the message has
> $spam_score = length $spam_level;
>
> if(($delete_msg eq 'no') or ($delete_msg <= $spam_score)) {
> # pass on parsed message to sendmail
> system("cat $anomy_file | $sendmail $to");
> }
>
> --
> Chris Wik
> Systems Admin
> ANU Internet Services
> http://www.anu.net/
>
>
>