| #!/usr/bin/perl -T |
| |
| use lib '.'; use lib 't'; |
| use SATest; sa_t_init("hashbl"); |
| |
| use Test::More; |
| plan skip_all => "Net tests disabled" unless conf_bool('run_net_tests'); |
| plan skip_all => "Can't use Net::DNS Safely" unless can_use_net_dns_safely(); |
| |
| # run many times to catch some random natured failures |
| my $iterations = 5; |
| plan tests => 13 * $iterations; |
| |
| # --------------------------------------------------------------------------- |
| |
| %patterns = ( |
| q{ 1.0 X_HASHBL_EMAIL } => '', |
| q{ 1.0 X_HASHBL_OSENDR } => '', |
| q{ 1.0 X_HASHBL_BTC } => '', |
| q{ 1.0 X_HASHBL_NUM } => '', |
| q{ 1.0 X_HASHBL_URI } => '', |
| q{ 1.0 X_HASHBL_TAG } => '', |
| q{ 1.0 META_HASHBL_EMAIL } => '', |
| q{ 1.0 META_HASHBL_BTC } => '', |
| q{ 1.0 META_HASHBL_URI } => '', |
| ); |
| %anti_patterns = ( |
| q{ 1.0 X_HASHBL_SHA256 } => '', |
| q{ warn: } => '', |
| ); |
| |
| # Check from debug output log that nothing else than these were queried |
| @valid_queries = qw( |
| cb565607a98fbdf1be52cdb86466ab34244bd6fc.hashbltest1.spamassassin.org |
| bc9f1b35acd338b92b0659cc2111e6b661a8b2bc.hashbltest1.spamassassin.org |
| 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 |
| 6a42acf4133289d595e3875a9d677f810e80b7b4.hashbltest4.spamassassin.org |
| 5c6205960a65b1f9078f0e12dcac970aab0015eb.hashbltest4.spamassassin.org |
| 1234567890.hashbltest5.spamassassin.org |
| w3hcrlct6yshq5vq6gjv2hf3pzk3jvsk6ilj5iaks4qwewudrr6q.hashbltest6.spamassassin.org |
| userpart.hashbltest7.spamassassin.org |
| host.domain.com.hashbltest7.spamassassin.org |
| domain.com.hashbltest7.spamassassin.org |
| 2qlyngefopecg66lt6pwfpegjaajbzasuxs5vzgii2vfbonj6rua.hashbltest8.spamassassin.org |
| 11231234567.hashbltest9.spamassassin.org |
| ); |
| |
| sub check_queries { |
| my %invalid; |
| my %found; |
| if (!open(WL, $current_checkfile)) { |
| diag("LOGFILE OPEN FAILED"); |
| return 0; |
| } |
| while (<WL>) { |
| my $line = $_; |
| print STDERR $line if $line =~ /warn:/; |
| while ($line =~ m,([^\s/]+\.hashbltest\d\.spamassassin\.org)\b,g) { |
| my $query = $1; |
| if (!grep { $query eq $_ } @valid_queries) { |
| $invalid{$query}++; |
| } else { |
| $found{$query}++; |
| } |
| } |
| } |
| close WL; |
| diag("Unwanted query launched: $_") foreach (keys %invalid); |
| unless (keys %found == @valid_queries) { |
| foreach (@valid_queries) { |
| if (!exists $found{$_}) { |
| diag("Query not launched: $_"); |
| } |
| } |
| return 0; |
| } |
| return !%invalid; |
| } |
| |
| 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 |
| |
| hashbl_acl_freemail gmail.com |
| header X_HASHBL_OSENDR eval:check_hashbl_emails('hashbltest2.spamassassin.org/A', 'md5/max=10/shuffle', 'X-Original-Sender', '^127\.', 'freemail') |
| tflags X_HASHBL_OSENDR net |
| |
| body X_HASHBL_BTC eval:check_hashbl_bodyre('hashbltest3.spamassassin.org', 'sha1/max=10/shuffle', '\b([13][a-km-zA-HJ-NP-Z1-9]{25,34})\b') |
| tflags X_HASHBL_BTC net |
| |
| body X_HASHBL_NUM eval:check_hashbl_bodyre('hashbltest9.spamassassin.org', 'raw/max=10/shuffle/num', '\b(?:\+)?(?:\s)?((?:[0-9]{1,2})?(?:\s)?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6})\b', '127.0.0.2') |
| tflags X_HASHBL_NUM net |
| |
| # Not supposed to hit, @valid_queries just checks that sha256 is calculated correctly |
| body X_HASHBL_SHA256 eval:check_hashbl_bodyre('hashbltest3.spamassassin.org', 'sha256/max=10/shuffle', '\b([13][a-km-zA-HJ-NP-Z1-9]{25,34})\b') |
| tflags X_HASHBL_SHA256 net |
| |
| header X_HASHBL_URI eval:check_hashbl_uris('hashbltest4.spamassassin.org', 'sha1', '127.0.0.2') |
| tflags X_HASHBL_URI net |
| |
| header __X_SOME_ID X-Some-ID =~ /^(?<XSOMEID>\d{10,20})$/ |
| header X_HASHBL_TAG eval:check_hashbl_tag('hashbltest5.spamassassin.org/A', 'raw', 'XSOMEID', '^127\.') |
| tflags X_HASHBL_TAG net |
| |
| # Not supposed to hit, @valid_queries just checks that they are launched |
| hashbl_ignore text/plain |
| body X_HASHBL_ATT eval:check_hashbl_attachments('hashbltest6.spamassassin.org/A', 'sha256') |
| describe X_HASHBL_ATT Message contains attachment found on attbl |
| tflags X_HASHBL_ATT net |
| |
| # email user/host/domain |
| hashbl_acl_domacl host.domain.com |
| header __X_HASHBL_UHD1 eval:check_hashbl_emails('hashbltest7.spamassassin.org', 'raw/user', 'body', '^', 'domacl') |
| 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) |
| meta META_HASHBL_BTC X_HASHBL_BTC |
| priority META_HASHBL_BTC -500 |
| # Or super high |
| meta META_HASHBL_URI X_HASHBL_URI |
| priority META_HASHBL_URI 2000 |
| priority X_HASHBL_URI 2000 |
| }); |
| |
| for (1 .. $iterations) { |
| clear_localrules() if $_ == 3; # do some tests without any other rules to check meta bugs |
| ok sarun ("-t -D async,dns,HashBL < data/spam/hashbl 2>&1", \&patterns_run_cb); |
| ok(check_queries()); |
| ok_all_patterns(); |
| } |
| |