mirror of
https://git.proxmox.com/git/proxmox-spamassassin
synced 2025-08-17 07:29:56 +00:00
311 lines
8.2 KiB
Perl
Executable File
311 lines
8.2 KiB
Perl
Executable File
#!/usr/bin/perl -T
|
|
|
|
use lib '.'; use lib 't';
|
|
use SATest;
|
|
use Test::More;
|
|
|
|
sa_t_init("sa_txrep_welcomelist_out");
|
|
|
|
use constant HAS_DBI => eval { require DBI; };
|
|
use constant HAS_DBD_SQLITE => eval { require DBD::SQLite; DBD::SQLite->VERSION(1.59_01); };
|
|
|
|
use constant SQLITE => (HAS_DBI && HAS_DBD_SQLITE);
|
|
use constant SQL => conf_bool('run_awl_sql_tests');
|
|
|
|
plan skip_all => "Net tests disabled" unless conf_bool('run_net_tests');
|
|
plan skip_all => "run_awl_sql_tests not enabled or DBI/SQLite not found" unless (SQLITE || SQL);
|
|
|
|
diag "Note: If there is a failure it may be due to an incorrect SQL configuration." if (SQL);
|
|
|
|
my $tests = 0;
|
|
$tests += 8 if (SQLITE);
|
|
$tests += 8 if (SQL);
|
|
plan tests => $tests;
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
my $rules = q(
|
|
add_header all Status "_YESNO_, score=_SCORE_ required=_REQD_ tests=_TESTS_ autolearn=_AUTOLEARN_ version=_VERSION_"
|
|
# Needed for TXREP to run
|
|
header TXREP eval:check_senders_reputation()
|
|
priority TXREP 1000
|
|
# Fixed message scores to keep track of correct scoring
|
|
header FORGED_GMAIL_RCVD eval:check_for_forged_gmail_received_headers()
|
|
|
|
full DKIM_SIGNED eval:check_dkim_signed()
|
|
full DKIM_VALID eval:check_dkim_valid()
|
|
meta DKIM_INVALID DKIM_SIGNED && !DKIM_VALID
|
|
full DKIM_VALID_AU eval:check_dkim_valid_author_sig()
|
|
full DKIM_VALID_EF eval:check_dkim_valid_envelopefrom()
|
|
score DKIM_SIGNED 0.1
|
|
score DKIM_VALID -0.1
|
|
score DKIM_INVALID 0.1
|
|
score DKIM_VALID_AU -0.1
|
|
score DKIM_VALID_EF -0.1
|
|
|
|
header ALL_TRUSTED eval:check_all_trusted()
|
|
header ALL_TRUSTED -1.0
|
|
);
|
|
|
|
tstpre ("
|
|
loadplugin Mail::SpamAssassin::Plugin::TxRep
|
|
loadplugin Mail::SpamAssassin::Plugin::DKIM
|
|
");
|
|
|
|
# only use rules defined here in tstprefs()
|
|
clear_localrules();
|
|
|
|
%txrep_pattern0 = (
|
|
q{ -0.2 TXREP } => 'Score normalizing',
|
|
);
|
|
|
|
%txrep_pattern1 = (
|
|
q{ 0.1 TXREP } => 'Score normalizing',
|
|
);
|
|
|
|
sub create_db {
|
|
my $workdir = shift;
|
|
|
|
my $db = "$workdir/txrep.db";
|
|
unlink($db) if -f $db;
|
|
my $dbh = DBI->connect("dbi:SQLite:dbname=$db","","");
|
|
$dbh->do("
|
|
CREATE TABLE txrep (
|
|
username varchar(100) NOT NULL default '',
|
|
email varchar(255) NOT NULL default '',
|
|
ip varchar(40) NOT NULL default '',
|
|
msgcount int(11) NOT NULL default '0',
|
|
totscore float NOT NULL default '0',
|
|
signedby varchar(255) NOT NULL default '',
|
|
last_hit timestamp NOT NULL default CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (username,email,signedby,ip)
|
|
);
|
|
CREATE INDEX last_hit ON txrep (last_hit);
|
|
CREATE TRIGGER [UpdateLastHit]
|
|
AFTER UPDATE
|
|
ON txrep
|
|
FOR EACH ROW
|
|
WHEN NEW.last_hit < OLD.last_hit
|
|
BEGIN
|
|
UPDATE txrep SET last_hit=CURRENT_TIMESTAMP
|
|
WHERE (username=OLD.username AND email=OLD.email AND signedby=OLD.signedby AND ip=OLD.ip);
|
|
END;
|
|
") or die "Failed to create $db";
|
|
}
|
|
|
|
if (SQLITE) {
|
|
create_db($workdir);
|
|
tstprefs ("
|
|
use_txrep 1
|
|
txrep_factor 0.49
|
|
txrep_factory Mail::SpamAssassin::SQLBasedAddrList
|
|
auto_welcomelist_distinguish_signed 1
|
|
txrep_welcomelist_out 1
|
|
clear_trusted_networks
|
|
clear_internal_networks
|
|
internal_networks 64.142.3.173
|
|
trusted_networks 64.142.3.173
|
|
user_awl_dsn dbi:SQLite:dbname=$workdir/txrep.db
|
|
$rules
|
|
");
|
|
|
|
%anti_patterns = %txrep_pattern0;
|
|
%patterns = ();
|
|
sarun ("-t < data/txrep/8", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
%anti_patterns = ();
|
|
%patterns = %txrep_pattern0;
|
|
sarun ("-t < data/txrep/9", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
tstprefs ("
|
|
use_txrep 1
|
|
txrep_factory Mail::SpamAssassin::SQLBasedAddrList
|
|
auto_welcomelist_distinguish_signed 1
|
|
txrep_welcomelist_out 0
|
|
clear_trusted_networks
|
|
clear_internal_networks
|
|
internal_networks 64.142.3.173
|
|
trusted_networks 64.142.3.173
|
|
user_awl_dsn dbi:SQLite:dbname=$workdir/txrep.db
|
|
$rules
|
|
");
|
|
|
|
create_db($workdir);
|
|
%anti_patterns = %txrep_pattern1;
|
|
%patterns = ();
|
|
sarun ("-t < data/txrep/8", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
%anti_patterns = ();
|
|
%patterns = %txrep_pattern1;
|
|
sarun ("-t < data/txrep/9", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
tstprefs ("
|
|
use_txrep 1
|
|
txrep_factory Mail::SpamAssassin::SQLBasedAddrList
|
|
auto_welcomelist_distinguish_signed 0
|
|
txrep_welcomelist_out 0
|
|
clear_trusted_networks
|
|
clear_internal_networks
|
|
internal_networks 64.142.3.173
|
|
trusted_networks 64.142.3.173
|
|
user_awl_dsn dbi:SQLite:dbname=$workdir/txrep.db
|
|
$rules
|
|
");
|
|
|
|
create_db($workdir);
|
|
%anti_patterns = %txrep_pattern1;
|
|
%patterns = ();
|
|
sarun ("-t < data/txrep/8", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
%anti_patterns = ();
|
|
%patterns = %txrep_pattern1;
|
|
sarun ("-t < data/txrep/9", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
tstprefs ("
|
|
use_txrep 1
|
|
txrep_factor 0.49
|
|
txrep_factory Mail::SpamAssassin::SQLBasedAddrList
|
|
auto_welcomelist_distinguish_signed 0
|
|
txrep_welcomelist_out 1
|
|
clear_trusted_networks
|
|
clear_internal_networks
|
|
internal_networks 64.142.3.173
|
|
trusted_networks 64.142.3.173
|
|
user_awl_dsn dbi:SQLite:dbname=$workdir/txrep.db
|
|
$rules
|
|
");
|
|
|
|
create_db($workdir);
|
|
%anti_patterns = %txrep_pattern0;
|
|
%patterns = ();
|
|
sarun ("-t < data/txrep/8", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
%anti_patterns = ();
|
|
%patterns = %txrep_pattern0;
|
|
sarun ("-t < data/txrep/9", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
}
|
|
|
|
if (SQL) {
|
|
my $dbconfig = '';
|
|
foreach my $setting (qw(
|
|
user_awl_dsn
|
|
user_awl_sql_username
|
|
user_awl_sql_password
|
|
user_awl_sql_table
|
|
)) {
|
|
my $val = conf($setting);
|
|
$dbconfig .= "$setting $val\n" if $val;
|
|
}
|
|
|
|
my $testuser = 'tstusr.'.$$.time();
|
|
my $idx = 1;
|
|
tstprefs ("
|
|
use_txrep 1
|
|
txrep_factor 0.49
|
|
txrep_factory Mail::SpamAssassin::SQLBasedAddrList
|
|
auto_welcomelist_distinguish_signed 1
|
|
txrep_welcomelist_out 1
|
|
clear_trusted_networks
|
|
clear_internal_networks
|
|
internal_networks 64.142.3.173
|
|
trusted_networks 64.142.3.173
|
|
$dbconfig
|
|
user_awl_sql_override_username $testuser-$idx
|
|
$rules
|
|
");
|
|
|
|
%anti_patterns = %txrep_pattern0;
|
|
%patterns = ();
|
|
sarun ("-t < data/txrep/8", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
%anti_patterns = ();
|
|
%patterns = %txrep_pattern0;
|
|
sarun ("-t < data/txrep/9", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
$idx++;
|
|
tstprefs ("
|
|
use_txrep 1
|
|
txrep_factory Mail::SpamAssassin::SQLBasedAddrList
|
|
auto_welcomelist_distinguish_signed 1
|
|
txrep_welcomelist_out 0
|
|
clear_trusted_networks
|
|
clear_internal_networks
|
|
internal_networks 64.142.3.173
|
|
trusted_networks 64.142.3.173
|
|
$dbconfig
|
|
user_awl_sql_override_username $testuser-$idx
|
|
$rules
|
|
");
|
|
|
|
%anti_patterns = %txrep_pattern1;
|
|
%patterns = ();
|
|
sarun ("-t < data/txrep/8", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
%anti_patterns = ();
|
|
%patterns = %txrep_pattern1;
|
|
sarun ("-t < data/txrep/9", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
$idx++;
|
|
tstprefs ("
|
|
use_txrep 1
|
|
txrep_factory Mail::SpamAssassin::SQLBasedAddrList
|
|
auto_welcomelist_distinguish_signed 0
|
|
txrep_welcomelist_out 0
|
|
clear_trusted_networks
|
|
clear_internal_networks
|
|
internal_networks 64.142.3.173
|
|
trusted_networks 64.142.3.173
|
|
$dbconfig
|
|
user_awl_sql_override_username $testuser-$idx
|
|
$rules
|
|
");
|
|
|
|
%anti_patterns = %txrep_pattern1;
|
|
%patterns = ();
|
|
sarun ("-t < data/txrep/8", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
%anti_patterns = ();
|
|
%patterns = %txrep_pattern1;
|
|
sarun ("-t < data/txrep/9", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
$idx++;
|
|
tstprefs ("
|
|
use_txrep 1
|
|
txrep_factor 0.49
|
|
txrep_factory Mail::SpamAssassin::SQLBasedAddrList
|
|
auto_welcomelist_distinguish_signed 0
|
|
txrep_welcomelist_out 1
|
|
clear_trusted_networks
|
|
clear_internal_networks
|
|
internal_networks 64.142.3.173
|
|
trusted_networks 64.142.3.173
|
|
$dbconfig
|
|
user_awl_sql_override_username $testuser-$idx
|
|
$rules
|
|
");
|
|
|
|
%anti_patterns = %txrep_pattern0;
|
|
%patterns = ();
|
|
sarun ("-t < data/txrep/8", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
%anti_patterns = ();
|
|
%patterns = %txrep_pattern0;
|
|
sarun ("-t < data/txrep/9", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
}
|