You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by he...@apache.org on 2019/08/10 20:46:46 UTC
svn commit: r1864907 -
/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Reuse.pm
Author: hege
Date: Sat Aug 10 20:46:45 2019
New Revision: 1864907
URL: http://svn.apache.org/viewvc?rev=1864907&view=rev
Log:
Cleanup Reuse code
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Reuse.pm
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Reuse.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Reuse.pm?rev=1864907&r1=1864906&r2=1864907&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Reuse.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Reuse.pm Sat Aug 10 20:46:45 2019
@@ -40,9 +40,12 @@ use re 'taint';
use Mail::SpamAssassin::Conf;
use Mail::SpamAssassin::Logger;
+use Mail::SpamAssassin::Constants qw(:sa);
our @ISA = qw(Mail::SpamAssassin::Plugin);
+my $RULENAME_RE = RULENAME_RE;
+
# constructor
sub new {
my $invocant = shift;
@@ -68,34 +71,35 @@ sub set_config {
# e.g.
# reuse NET_TEST_V1 NET_TEST_V0
- push (@cmds, { setting => 'reuse',
- code => sub {
- my ($conf, $key, $value, $line) = @_;
-
- if ($value !~ /\s*(\w+)(?:\s+(\w+(?:\s+\w+)*))?\s*$/) {
- return $Mail::SpamAssassin::Conf::INVALID_VALUE;
- }
-
- my $new_name = $1;
- my @old_names = ($new_name);
- if ($2) {
- push @old_names, split (' ', $2);
- }
-
- dbg("reuse: read rule, old: @old_names new: $new_name");
-
- foreach my $old (@old_names) {
- push @{$conf->{reuse_tests}->{$new_name}}, $old;
- }
- }
- },
- { setting => 'run_reuse_tests_only',
- code => sub {
- my ($conf, $key, $value, $line) = @_;
- $conf->{run_reuse_tests_only} = 1 if $value;
- }
- });
+ push (@cmds, {
+ setting => 'reuse',
+ type => $Mail::SpamAssassin::Conf::CONF_TYPE_HASH_KEY_VALUE,
+ code => sub {
+ my ($conf, $key, $value, $line) = @_;
+ if ($value !~ /^\s*(${RULENAME_RE})(?:\s+(${RULENAME_RE}(?:\s+${RULENAME_RE})*))?\s*$/) {
+ return $Mail::SpamAssassin::Conf::INVALID_VALUE;
+ }
+
+ my $new_name = $1;
+ my @old_names = ($new_name);
+ if (defined $2) {
+ push @old_names, split (/\s+/, $2);
+ }
+
+ dbg("reuse: read rule, old: %s new: %s", join(' ', @old_names), $new_name);
+
+ foreach my $old (@old_names) {
+ push @{$conf->{reuse_tests}->{$new_name}}, $old;
+ }
+ }
+ });
+
+ push(@cmds, {
+ setting => 'run_reuse_tests_only',
+ default => 0,
+ type => $Mail::SpamAssassin::Conf::CONF_TYPE_BOOL,
+ });
$conf->{parser}->register_commands(\@cmds);
}
@@ -162,28 +166,29 @@ sub check_start {
# need to be disabled
foreach my $rule (keys %{$pms->{conf}->{reuse_tests}}) {
- dbg("reuse: looking at rule $rule");
my ($priority, $stage) = @{$pms->{conf}->{reuse_tests_order}->{$rule}};
# score set could change after check_start but before we add hits,
# so we need to disable the rule in all sets
+ my @dis;
foreach my $ss (0..3) {
if (exists $pms->{conf}->{scoreset}->[$ss]->{$rule}) {
- dbg("reuse: disabling rule $rule in score set $ss");
- $pms->{reuse_old_scores}->{$rule}->[$ss] =
- $pms->{conf}->{scoreset}->[$ss]->{$rule};
- $pms->{conf}->{scoreset}->[$ss]->{$rule} = 0;
+ $pms->{reuse_old_scores}->{$rule}->[$ss] =
+ $pms->{conf}->{scoreset}->[$ss]->{$rule};
+ $pms->{conf}->{scoreset}->[$ss]->{$rule} = 0;
+ push @dis, $ss;
}
}
+ dbg("reuse: disabling rule $rule in score sets %s",
+ join(',', @dis)) if @dis;
# now, check for hits
- OLD: foreach my $old_test (@{$pms->{conf}->{reuse_tests}->{$rule}}) {
- dbg("reuse: looking for rule $old_test");
+ foreach my $old_test (@{$pms->{conf}->{reuse_tests}->{$rule}}) {
if ($old_hash->{$old_test}) {
push @{$pms->{reuse_hits_to_add}->{"$priority $stage"}}, $rule;
dbg("reuse: rule $rule hit, will add at priority $priority, stage " .
- "$stage");
- last OLD;
+ "$stage");
+ last;
}
}
}
@@ -229,7 +234,7 @@ sub _add_hits {
$pms->{reuse_old_scores}->{$rule}->[$ss] || 0.001;
dbg("reuse: registering hit for $rule: score: " .
- $pms->{conf}->{scores}->{$rule});
+ $pms->{conf}->{scores}->{$rule});
$pms->got_hit($rule);
$pms->{conf}->{scores}->{$rule} = 0;
@@ -238,19 +243,19 @@ sub _add_hits {
}
my %type_to_stage = (
- $Mail::SpamAssassin::Conf::TYPE_HEAD_TESTS => "head",
- $Mail::SpamAssassin::Conf::TYPE_HEAD_EVALS => "eval",
- $Mail::SpamAssassin::Conf::TYPE_BODY_TESTS => "body",
- $Mail::SpamAssassin::Conf::TYPE_BODY_EVALS => "eval",
- $Mail::SpamAssassin::Conf::TYPE_FULL_TESTS => "full",
- $Mail::SpamAssassin::Conf::TYPE_FULL_EVALS => "eval",
- $Mail::SpamAssassin::Conf::TYPE_RAWBODY_TESTS => "rawbody",
- $Mail::SpamAssassin::Conf::TYPE_RAWBODY_EVALS => "eval",
- $Mail::SpamAssassin::Conf::TYPE_URI_TESTS => "uri",
- $Mail::SpamAssassin::Conf::TYPE_URI_EVALS => "eval",
- $Mail::SpamAssassin::Conf::TYPE_META_TESTS => "meta",
- $Mail::SpamAssassin::Conf::TYPE_RBL_EVALS => "eval",
- );
+ $Mail::SpamAssassin::Conf::TYPE_HEAD_TESTS => "head",
+ $Mail::SpamAssassin::Conf::TYPE_HEAD_EVALS => "eval",
+ $Mail::SpamAssassin::Conf::TYPE_BODY_TESTS => "body",
+ $Mail::SpamAssassin::Conf::TYPE_BODY_EVALS => "eval",
+ $Mail::SpamAssassin::Conf::TYPE_FULL_TESTS => "full",
+ $Mail::SpamAssassin::Conf::TYPE_FULL_EVALS => "eval",
+ $Mail::SpamAssassin::Conf::TYPE_RAWBODY_TESTS => "rawbody",
+ $Mail::SpamAssassin::Conf::TYPE_RAWBODY_EVALS => "eval",
+ $Mail::SpamAssassin::Conf::TYPE_URI_TESTS => "uri",
+ $Mail::SpamAssassin::Conf::TYPE_URI_EVALS => "eval",
+ $Mail::SpamAssassin::Conf::TYPE_META_TESTS => "meta",
+ $Mail::SpamAssassin::Conf::TYPE_RBL_EVALS => "eval",
+);
sub _get_stage_from_rule {
my ($self, $conf, $rule) = @_;
@@ -274,4 +279,4 @@ sub _get_stage_from_rule {
}
}
-
+1;