You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by mm...@apache.org on 2009/08/06 18:28:06 UTC
svn commit: r801707 - in /spamassassin/trunk/lib/Mail: SpamAssassin.pm
SpamAssassin/PerMsgStatus.pm SpamAssassin/Plugin/Check.pm
Author: mmartinec
Date: Thu Aug 6 16:28:06 2009
New Revision: 801707
URL: http://svn.apache.org/viewvc?rev=801707&view=rev
Log:
Bug 5463: enhance got_hit API for dynamic scores & descriptions
(loosely based on the patch provided there)
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin.pm
spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm
Modified: spamassassin/trunk/lib/Mail/SpamAssassin.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin.pm?rev=801707&r1=801706&r2=801707&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin.pm Thu Aug 6 16:28:06 2009
@@ -470,7 +470,7 @@
represent unnecessary work for SpamAssassin to obtain it. The argument will
be stored to a Mail::SpamAssassin::Message object as 'suppl_attrib', thus
made available to the rest of the code as well as to plugins. The exact list
-of attributes will evolve through time, any unknown attributes should be
+of attributes will evolve through time, any unknown attribute should be
ignored. Possible examples are: SMTP envelope information, a flag indicating
that a message as supplied by a caller was truncated due to size limit, an
already verified list of DKIM signature objects, or perhaps a list of rule
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm?rev=801707&r1=801706&r2=801707&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm Thu Aug 6 16:28:06 2009
@@ -2170,6 +2170,12 @@
C<hit_rule> plugin call, called by this method. If unset, I<'unknown'> is
used.
+=item description => $string
+
+Optional: a custom rule description string. This is used in the
+C<hit_rule> plugin call, called by this method. If unset, the static
+description is used.
+
=back
Backwards compatibility: the two mandatory arguments have been part of this API
@@ -2181,21 +2187,29 @@
sub got_hit {
my ($self, $rule, $area, %params) = @_;
+ my $conf_ref = $self->{conf};
+
+ my $dynamic_score_provided;
my $score = $params{score};
- $score = $self->{conf}->{scores}->{$rule} if !defined $score;
+ if (defined $score) {
+ $dynamic_score_provided = 1;
+ } else {
+ $score = $conf_ref->{scores}->{$rule};
+ }
# adding a hit does nothing if we don't have a score -- we probably
# shouldn't have run it in the first place
return unless $score;
- # ensure that rule values always result in an *increase* of
- # $self->{tests_already_hit}->{$rule}:
- my $value = $params{value}; if (!$value || $value <= 0) { $value = 1; }
+ # ensure that rule values always result in an *increase*
+ # of $self->{tests_already_hit}->{$rule}:
+ my $value = $params{value};
+ if (!$value || $value <= 0) { $value = 1 }
my $already_hit = $self->{tests_already_hit}->{$rule} || 0;
# don't count hits multiple times, unless 'tflags multiple' is on
- if ($already_hit && ($self->{conf}->{tflags}->{$rule}||'') !~ /\bmultiple\b/) {
+ if ($already_hit && ($conf_ref->{tflags}->{$rule}||'') !~ /\bmultiple\b/) {
return;
}
@@ -2204,7 +2218,16 @@
# default ruletype, if not specified:
$params{ruletype} ||= 'unknown';
- my $rule_descr = $self->{conf}->get_description_for_rule($rule);
+ if ($dynamic_score_provided) { # copy it to static for proper reporting
+ $conf_ref->{scoreset}->[$_]->{$rule} = $score for (0..3);
+ }
+
+ my $rule_descr = $params{description};
+ if (defined $rule_descr) {
+ $conf_ref->{descriptions}->{$rule} = $rule_descr; # save dynamic descr.
+ } else {
+ $rule_descr = $conf_ref->get_description_for_rule($rule); # static
+ }
$rule_descr = $rule if !defined $rule_descr || $rule_descr eq '';
$self->_handle_hit($rule,
$score,
@@ -2213,7 +2236,7 @@
$rule_descr);
# take care of duplicate rules, too (bug 5206)
- my $dups = $self->{conf}->{duplicate_rules}->{$rule};
+ my $dups = $conf_ref->{duplicate_rules}->{$rule};
if ($dups && @{$dups}) {
foreach my $dup (@{$dups}) {
$self->got_hit($dup, $area, %params);
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm?rev=801707&r1=801706&r2=801707&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm Thu Aug 6 16:28:06 2009
@@ -52,24 +52,20 @@
if (defined $suppl_attrib && ref $suppl_attrib->{rule_hits}) {
my @caller_rule_hits = @{$suppl_attrib->{rule_hits}};
dbg("check: adding caller rule hits, %d rules", scalar(@caller_rule_hits));
- my($tflags_ref,$scoreset_ref,$descr_ref) =
- @{$pms->{conf}}{'tflags','scoreset','descriptions'};
+ my($tflags_ref) = $pms->{conf}->{tflags};
for my $caller_rule_hit (@caller_rule_hits) {
next if ref $caller_rule_hit ne 'HASH';
my($rulename, $area, $score, $value, $ruletype, $tflags, $description) =
@$caller_rule_hit{qw(rule area score value ruletype tflags descr)};
- if (defined $description) { $descr_ref->{$rulename} = $description }
- if (defined $score) {
- $scoreset_ref->[$_]->{$rulename} = $score for (0..3);
- }
if (defined $tflags) {
$_ = join(' ', !defined $_ ? () : split(' '),
split(/[ \t,]+/,$tflags)) for $tflags_ref->{$rulename};
}
$pms->got_hit($rulename, $area,
- !defined $score ? () : (score=>$score),
- !defined $value ? () : (value=>$value),
- ruletype=>$ruletype);
+ !defined $score ? () : (score => $score),
+ !defined $value ? () : (value => $value),
+ !defined $description ? () : (description => $description),
+ ruletype => $ruletype);
}
}