Here is my workaround. I am doing stream_by recipient and score USER_IN_ALL_SPAM_TO set to 0 (or else other recipients of same e-mail get message tagged as not spam)
How costly is reading the local.cf for each recipient?
Less than running SA in the first place, I expect, but there are faster ways to do this.
What I do is create a hash table at filter initialization, then check whether an entry exists for each recipient. It checks each recipient in filter_begin, and if any values are found it calls stream_by_recipient. That way, when it gets to filter_end and the values are actually important, it knows there's only one recipient - plus it doesn't split up and resend the message if it isn't necessary.
So something like this early on (outside of any subroutines):
%spam_fan = {
'[EMAIL PROTECTED]' => 1,
'[EMAIL PROTECTED]' => 1
};Then something like:
sub all_spam_to($) {
my $rec = lc($_[0});
$rec =~ tr/<>//d;
return exists($spam_fan{$rec});
}sub all_spam_to_exists() {
foreach my $rec (@Recipients) {
return 1 if ( all_spam_to($rec) );
}
return 0;
}- Then all_spam_to_exists early in filter_begin to decide whether to stream the message, and call all_spam_to in filter_end to decide whether to run SpamAssassin.
Then you can remove all_spam_to from local.cf entirely, since it doesn't do what you want in the first place.
Note: This is untested code - what we use is more complicated, so I've tried to simplify it, but there may be typos.
Kelson Vibber
SpeedGate Communications <www.speed.net>
_______________________________________________ Visit http://www.mimedefang.org and http://www.canit.ca MIMEDefang mailing list [EMAIL PROTECTED] http://lists.roaringpenguin.com/mailman/listinfo/mimedefang

