| #!/usr/bin/perl -T |
| # bug 4179 |
| |
| use lib '.'; use lib 't'; |
| use SATest; sa_t_init("spamd_user_rules_leak"); |
| |
| use Test::More; |
| plan skip_all => 'Spamd tests disabled' if $SKIP_SPAMD_TESTS; |
| plan tests => 20; |
| |
| # --------------------------------------------------------------------------- |
| # If user A defines a user rule (when allow_user_rules is enabled) it affects |
| # user B if they also set a score for that same rule name or create a user rule |
| # with the same name. |
| |
| tstprefs (" |
| allow_user_rules 1 |
| "); |
| |
| rmtree ("$workdir/virtualconfig/testuser1", 0, 1); |
| mkpath ("$workdir/virtualconfig/testuser1", 0, 0755); |
| rmtree ("$workdir/virtualconfig/testuser2", 0, 1); |
| mkpath ("$workdir/virtualconfig/testuser2", 0, 0755); |
| rmtree ("$workdir/virtualconfig/testuser3", 0, 1); |
| mkpath ("$workdir/virtualconfig/testuser3", 0, 0755); |
| open (OUT, ">$workdir/virtualconfig/testuser1/user_prefs"); |
| print OUT q{ |
| |
| header MYFOO Content-Transfer-Encoding =~ /quoted-printable/ |
| body MYBODY /KIFF/ |
| rawbody MYRAWBODY /KIFF/ |
| full MYFULL /KIFF/ |
| score MYFOO 3 |
| score MYBODY 3 |
| score MYRAWBODY 3 |
| score MYFULL 3 |
| |
| }; |
| close OUT; |
| open (OUT, ">$workdir/virtualconfig/testuser2/user_prefs"); |
| print OUT q{ |
| |
| # create a new user rule with same name |
| body MYBODY /kdjfgkfdjgkfdjgdkfg/ |
| # or refer to earlier rule with new score |
| score MYFOO 3 |
| score MYBODY 3 |
| score MYRAWBODY 3 |
| score MYFULL 3 |
| |
| }; |
| close OUT; |
| open (OUT, ">$workdir/virtualconfig/testuser3/user_prefs"); |
| print OUT q{ |
| |
| # no user rules here |
| |
| }; |
| close OUT; |
| |
| %patterns = ( |
| q{ 3.0 MYFOO }, '', |
| q{ 3.0 MYBODY }, '', |
| q{ 3.0 MYRAWBODY }, '', |
| q{ 3.0 MYFULL }, '', |
| ); |
| %anti_patterns = ( |
| 'redefined at', 'redefined_errors_in_spamd_log', |
| ); |
| |
| # use -m1 so all scans use the same child |
| ok (start_spamd ("--virtual-config-dir=$workdir/virtualconfig/%u -L -u $spamd_run_as_user -m1")); |
| ok (spamcrun ("-u testuser1 < data/spam/009", \&patterns_run_cb)); |
| ok_all_patterns(); |
| clear_pattern_counters(); |
| |
| %patterns = ( |
| q{ does not include a real name }, '', |
| ); |
| %anti_patterns = ( |
| qr/\d MYFOO /, '', |
| qr/\d MYBODY /, '', |
| qr/\d MYRAWBODY /, '', |
| qr/\d MYFULL /, '', |
| ); |
| ok (spamcrun ("-u testuser2 < data/spam/009", \&patterns_run_cb)); |
| checkfile ($spamd_stderr, \&patterns_run_cb); |
| ok_all_patterns(); |
| clear_pattern_counters(); |
| |
| %patterns = ( |
| q{ does not include a real name }, '', |
| ); |
| %anti_patterns = ( |
| qr/\d MYFOO /, '', |
| qr/\d MYBODY /, '', |
| qr/\d MYRAWBODY /, '', |
| qr/\d MYFULL /, '', |
| ); |
| ok (spamcrun ("-u testuser3 < data/spam/009", \&patterns_run_cb)); |
| ok (stop_spamd ()); |
| checkfile ($spamd_stderr, \&patterns_run_cb); |
| ok_all_patterns(); |
| |