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/26 05:24:05 UTC
svn commit: r1901268 - in /spamassassin/trunk: lib/Mail/SpamAssassin/Plugin/HashBL.pm t/data/spam/hashbl t/hashbl.t
Author: hege
Date: Thu May 26 05:24:05 2022
New Revision: 1901268
URL: http://svn.apache.org/viewvc?rev=1901268&view=rev
Log:
Use uridnsbl_skip_domains for HashBL lookups
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=1901268&r1=1901267&r2=1901268&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/HashBL.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/HashBL.pm Thu May 26 05:24:05 2022
@@ -214,6 +214,9 @@ Skip any type of query, if either the ha
example) matches. Multiple values can be defined, separated by whitespace.
Matching is case-insensitive.
+Any host or its domain part matching uridnsbl_skip_domains is also ignored
+by default.
+
=back
=cut
@@ -409,22 +412,31 @@ sub _parse_opts {
sub _get_emails {
my ($self, $pms, $opts, $from, $acl) = @_;
+ my $conf = $pms->{conf};
my @emails; # keep find order
my %seen;
foreach my $hdr (split(/\s*\/\s*/, $from)) {
my $parsed_emails = $self->_parse_emails($pms, $opts, $hdr);
- foreach (@$parsed_emails) {
- next if $seen{$_}++;
- my ($domain) = ($_ =~ /.*\@(.+)/);
- if (defined $domain && defined $acl && $acl ne 'all') {
- if ($self->{hashbl_acl}{$acl}{$domain}) {
- push @emails, $_;
+ foreach my $email (@$parsed_emails) {
+ next if $seen{$email}++;
+ my ($domain) = ($email =~ /.*\@(.+)/);
+ next unless defined $domain;
+ next if defined $acl && $acl ne 'all' && !$self->{hashbl_acl}{$acl}{$domain};
+ # Don't check uridnsbl_skip_domains when explicit acl is used
+ if (!defined $acl) {
+ if (exists $conf->{uridnsbl_skip_domains}->{lc $domain}) {
+ dbg("query skipped, uridnsbl_skip_domains: $email");
+ next;
+ }
+ my $dom = $pms->{main}->{registryboundaries}->trim_domain($domain);
+ if (exists $conf->{uridnsbl_skip_domains}->{lc $dom}) {
+ dbg("query skipped, uridnsbl_skip_domains: $email");
+ next;
}
- } else {
- push @emails, $_;
}
+ push @emails, $email;
}
}
@@ -578,6 +590,7 @@ sub check_hashbl_uris {
return 0 if !$self->{hashbl_available};
return 0 if !$pms->is_dns_available();
+ my $conf = $pms->{conf};
my $rulename = $pms->get_current_eval_rule_name();
if (!defined $list) {
@@ -606,6 +619,7 @@ sub check_hashbl_uris {
my %seen;
my @filtered_uris;
+URI:
while (my($uri, $info) = each %{$uris}) {
# we want to skip mailto: uris
next if ($uri =~ /^mailto:/i);
@@ -615,6 +629,14 @@ sub check_hashbl_uris {
next unless $info->{hosts};
next unless $info->{cleaned};
next unless $info->{types}->{a} || $info->{types}->{parsed};
+ foreach my $host (keys %{$info->{hosts}}) {
+ if (exists $conf->{uridnsbl_skip_domains}->{$host} ||
+ exists $conf->{uridnsbl_skip_domains}->{$info->{hosts}->{$host}})
+ {
+ dbg("query skipped, uridnsbl_skip_domains: $uri");
+ next URI;
+ }
+ }
foreach my $uri (@{$info->{cleaned}}) {
# check url
push @filtered_uris, $opts->{case} ? $uri : lc($uri);
@@ -774,6 +796,7 @@ sub check_hashbl_tag {
sub _check_hashbl_tag {
my ($self, $pms, $list, $opts, $tag, $subtest, $rulename) = @_;
+ my $conf = $pms->{conf};
# Get raw array of tag values, get_tag() returns joined string
my $valref = $pms->get_tag_raw($tag);
@@ -809,16 +832,28 @@ sub _check_hashbl_tag {
$value = reverse_ip_address($value);
}
if (!$is_ip) {
- if ($opts->{fqdn} && !is_fqdn_valid($value)) {
+ my $fqdn_valid = is_fqdn_valid($value);
+ if ($opts->{fqdn} && !$fqdn_valid) {
$value = undef;
next;
}
+ my $domain;
+ if ($fqdn_valid) {
+ $domain = $pms->{main}->{registryboundaries}->trim_domain($value);
+ if (exists $conf->{uridnsbl_skip_domains}->{lc $value} ||
+ exists $conf->{uridnsbl_skip_domains}->{lc $domain})
+ {
+ dbg("query skipped, uridnsbl_skip_domains: $value");
+ $value = undef;
+ next;
+ }
+ }
if ($opts->{tld} && !$pms->{main}->{registryboundaries}->is_domain_valid($value)) {
$value = undef;
next;
}
- if ($opts->{trim}) {
- $value = $pms->{main}->{registryboundaries}->trim_domain($value);
+ if ($opts->{trim} && $domain) {
+ $value = $domain;
}
}
}
@@ -947,14 +982,15 @@ sub _hash {
sub _submit_query {
my ($self, $pms, $rulename, $value, $list, $opts, $subtest, $already_hashed) = @_;
+ my $conf = $pms->{conf};
- if (!$already_hashed && exists $pms->{conf}->{hashbl_ignore}->{lc $value}) {
+ if (!$already_hashed && exists $conf->{hashbl_ignore}->{lc $value}) {
dbg("query skipped, ignored string: $value");
return 0;
}
my $hash = $already_hashed ? $value : $self->_hash($opts, $value);
- if (exists $pms->{conf}->{hashbl_ignore}->{lc $hash}) {
+ if (exists $conf->{hashbl_ignore}->{lc $hash}) {
dbg("query skipped, ignored hash: $value");
return 0;
}
Modified: spamassassin/trunk/t/data/spam/hashbl
URL: http://svn.apache.org/viewvc/spamassassin/trunk/t/data/spam/hashbl?rev=1901268&r1=1901267&r2=1901268&view=diff
==============================================================================
--- spamassassin/trunk/t/data/spam/hashbl (original)
+++ spamassassin/trunk/t/data/spam/hashbl Thu May 26 05:24:05 2022
@@ -33,6 +33,8 @@ Some uris spammer.com https://spammer2.c
btc 1JaSs2bTZYVbj6jaqZ5Mjfs8gSLY9vYCrK
+uridnsbl_skip_domain https://sub.trusted.com/ email@trusted.com
+
--ETDFsshmzrOmOVdZ
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="macro.xlsm"
Modified: spamassassin/trunk/t/hashbl.t
URL: http://svn.apache.org/viewvc/spamassassin/trunk/t/hashbl.t?rev=1901268&r1=1901267&r2=1901268&view=diff
==============================================================================
--- spamassassin/trunk/t/hashbl.t (original)
+++ spamassassin/trunk/t/hashbl.t Thu May 26 05:24:05 2022
@@ -71,6 +71,9 @@ sub check_queries {
tstlocalrules(q{
rbl_timeout 30
+ clear_uridnsbl_skip_domain
+ uridnsbl_skip_domain trusted.com
+
header X_HASHBL_EMAIL eval:check_hashbl_emails('hashbltest1.spamassassin.org')
tflags X_HASHBL_EMAIL net