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 2022/05/30 14:12:23 UTC
svn commit: r1901419 - in /spamassassin/trunk: lib/Mail/SpamAssassin/Plugin/HashBL.pm t/data/spam/hashbl t/hashbl.t
Author: hege
Date: Mon May 30 14:12:23 2022
New Revision: 1901419
URL: http://svn.apache.org/viewvc?rev=1901419&view=rev
Log:
- hashbl_email_domain_alias
- warn of undefined acl
- lc base32 for better cosmetics
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/HashBL.pm
spamassassin/trunk/t/data/spam/hashbl
spamassassin/trunk/t/hashbl.t
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/HashBL.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/HashBL.pm?rev=1901419&r1=1901418&r2=1901419&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/HashBL.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/HashBL.pm Mon May 30 14:12:23 2022
@@ -30,7 +30,10 @@ HashBL - query hashed (and unhashed) DNS
describe HASHBL_EMAIL Message contains email address found on EBL
tflags HASHBL_EMAIL net
- hashbl_acl_freemail gmail.com # only query gmail.com addresses
+ # rewrite googlemail.com -> gmail.com, applied before acl/welcomelist
+ hashbl_email_domain_alias gmail.com googlemail.com
+ # only query gmail.com addresses
+ hashbl_acl_freemail gmail.com
header HASHBL_OSENDR eval:check_hashbl_emails('rbl.example.invalid/A', 'md5/max=10/shuffle', 'X-Original-Sender', '^127\.', 'freemail')
describe HASHBL_OSENDR Message contains email address found on HASHBL
tflags HASHBL_OSENDR net
@@ -294,6 +297,27 @@ sub set_config {
});
push (@cmds, {
+ setting => 'hashbl_email_domain_alias',
+ is_admin => 1,
+ type => $Mail::SpamAssassin::Conf::CONF_TYPE_HASH_KEY_VALUE,
+ default => {},
+ code => sub {
+ my ($self, $key, $value, $line) = @_;
+ if (!defined $value || $value eq '') {
+ return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
+ }
+ my @vals = split(/\s+/, lc $value);
+ if (@vals < 2 || index($value, '@') >= 0) {
+ return $Mail::SpamAssassin::Conf::INVALID_VALUE;
+ }
+ my $domain = shift @vals;
+ foreach my $alias (@vals) {
+ $self->{hashbl_email_domain_alias}->{$alias} = $domain;
+ }
+ }
+ });
+
+ push (@cmds, {
setting => 'hashbl_email_regex',
is_admin => 1,
type => $Mail::SpamAssassin::Conf::CONF_TYPE_STRING,
@@ -423,9 +447,13 @@ sub _get_emails {
foreach my $hdr (split(/\s*\/\s*/, $from)) {
my $parsed_emails = $self->_parse_emails($pms, $opts, $hdr);
foreach my $email (@$parsed_emails) {
- next if $seen{$email}++;
- my ($domain) = ($email =~ /.*\@(.+)/);
+ my ($username, $domain) = ($email =~ /(.*)\@(.+)/);
next unless defined $domain;
+ if (exists $conf->{hashbl_email_domain_alias}->{lc $domain}) {
+ $domain = $conf->{hashbl_email_domain_alias}->{lc $domain};
+ $email = $username.'@'.$domain;
+ }
+ next if $seen{$email}++;
next if defined $acl && $acl ne 'all' && !$self->{hashbl_acl}{$acl}{$domain};
push @emails, $email;
}
@@ -509,6 +537,11 @@ sub check_hashbl_emails {
return 0;
}
+ if (defined $acl && $acl ne 'all' && !exists $self->{hashbl_acl}{$acl}) {
+ warn "HashBL: $rulename acl '$acl' not defined\n";
+ return 0;
+ }
+
if ($subtest) {
my ($rec, $err) = compile_regexp($subtest, 0);
if (!$rec) {
@@ -991,7 +1024,7 @@ sub _hash {
if ($opts->{sha256}) {
utf8::encode($value) if utf8::is_utf8($value); # sha256 expects bytes
- return base32_encode(sha256($value));
+ return lc base32_encode(sha256($value));
} elsif ($opts->{sha1}) {
utf8::encode($value) if utf8::is_utf8($value); # sha1_hex expects bytes
return sha1_hex($value);
@@ -1074,5 +1107,6 @@ sub has_hashbl_tag { 1 }
sub has_hashbl_sha256 { 1 }
sub has_hashbl_attachments { 1 }
sub has_hashbl_email_domain { 1 } # user/host/domain option for emails
+sub has_hashbl_email_domain_alias { 1 } # hashbl_email_domain_alias
1;
Modified: spamassassin/trunk/t/data/spam/hashbl
URL: http://svn.apache.org/viewvc/spamassassin/trunk/t/data/spam/hashbl?rev=1901419&r1=1901418&r2=1901419&view=diff
==============================================================================
--- spamassassin/trunk/t/data/spam/hashbl (original)
+++ spamassassin/trunk/t/data/spam/hashbl Mon May 30 14:12:23 2022
@@ -29,6 +29,8 @@ This is an innocent@email.com
This is a google email: spamm.er@gmail.com
+hashbl_email_alias_domain: spamm.er2@aliasdomain.com
+
Some uris spammer.com https://spammer2.com/
btc 1JaSs2bTZYVbj6jaqZ5Mjfs8gSLY9vYCrK
Modified: spamassassin/trunk/t/hashbl.t
URL: http://svn.apache.org/viewvc/spamassassin/trunk/t/hashbl.t?rev=1901419&r1=1901418&r2=1901419&view=diff
==============================================================================
--- spamassassin/trunk/t/hashbl.t (original)
+++ spamassassin/trunk/t/hashbl.t Mon May 30 14:12:23 2022
@@ -9,7 +9,7 @@ plan skip_all => "Can't use Net::DNS Saf
# run many times to catch some random natured failures
my $iterations = 5;
-plan tests => 11 * $iterations;
+plan tests => 12 * $iterations;
# ---------------------------------------------------------------------------
@@ -25,6 +25,7 @@ plan tests => 11 * $iterations;
);
%anti_patterns = (
q{ 1.0 X_HASHBL_SHA256 } => '',
+ q{ warn: } => '',
);
# Check from debug output log that nothing else than these were queried
@@ -34,6 +35,7 @@ bc9f1b35acd338b92b0659cc2111e6b661a8b2bc
62e12fbe4b32adc2e87147d74590372b461f35f6.hashbltest1.spamassassin.org
96b802967118135ef048c2bc860e7b0deb7d2333.hashbltest1.spamassassin.org
1675677ba3d539bdfb0ae8940bf7e6c836f3ad17.hashbltest1.spamassassin.org
+2ead26370ef9d238584aa3c86a02e254708370a0.hashbltest1.spamassassin.org
170d83ef2dc9c2de0e65ce4461a3a375.hashbltest2.spamassassin.org
cc205dd956d568ff8524d7fc42868500e4d7d162.hashbltest3.spamassassin.org
jykf2a5v6asavfel3stymlmieh4e66jeroxuw52mc5xhdylnyb7a.hashbltest3.spamassassin.org
@@ -44,6 +46,7 @@ w3hcrlct6yshq5vq6gjv2hf3pzk3jvsk6ilj5iak
userpart.hashbltest7.spamassassin.org
host.domain.com.hashbltest7.spamassassin.org
domain.com.hashbltest7.spamassassin.org
+2qlyngefopecg66lt6pwfpegjaajbzasuxs5vzgii2vfbonj6rua.hashbltest8.spamassassin.org
);
sub check_queries {
@@ -58,16 +61,21 @@ sub check_queries {
print STDERR $line if $line =~ /warn:/;
while ($line =~ m,([^\s/]+\.hashbltest\d\.spamassassin\.org)\b,g) {
my $query = $1;
- $found{$query}++;
if (!grep { $query eq $_ } @valid_queries) {
$invalid{$query}++;
+ } else {
+ $found{$query}++;
}
}
}
close WL;
- diag("Invalid query launched: $_") foreach (keys %invalid);
+ diag("Unwanted query launched: $_") foreach (keys %invalid);
unless (keys %found == @valid_queries) {
- diag("Incorrect amount of queries launched");
+ foreach (@valid_queries) {
+ if (!exists $found{$_}) {
+ diag("Query not launched: $_");
+ }
+ }
return 0;
}
return !%invalid;
@@ -112,6 +120,11 @@ tstlocalrules(q{
header __X_HASHBL_UHD2 eval:check_hashbl_emails('hashbltest7.spamassassin.org', 'raw/host', 'body', '^', 'domacl')
header __X_HASHBL_UHD3 eval:check_hashbl_emails('hashbltest7.spamassassin.org', 'raw/domain', 'body', '^', 'domacl')
+ hashbl_email_domain_alias domain.com aliasdomain.com
+ hashbl_acl_domaincom domain.com
+ header X_HASHBL_ALIAS_NODOT eval:check_hashbl_emails('hashbltest8.spamassassin.org', 'sha256/nodot', 'body', '^127\.', 'domaincom')
+ tflags X_HASHBL_ALIAS_NODOT net
+
# Bug 7897 - test that meta rules depending on net rules hit
meta META_HASHBL_EMAIL X_HASHBL_EMAIL
# It also needs to hit even if priority is lower than dnsbl (-100)