#!/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 => 28;

# ---------------------------------------------------------------------------
# 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 }, 'MYFOO',
  q{ 3.0 MYBODY }, 'MYBODY',
  q{ 3.0 MYRAWBODY }, 'MYRAWBODY',
  q{ 3.0 MYFULL }, 'MYFULL',
);
%anti_patterns = (
  q{  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 }, 'TEST_NOREALNAME',
);
%anti_patterns = (
  q{ 1.0 MYFOO }, 'MYFOO',
  q{ 1.0 MYBODY }, 'MYBODY',
  q{ 1.0 MYRAWBODY }, 'MYRAWBODY',
  q{ 1.0 MYFULL }, 'MYFULL',
  q{ 3.0 MYFOO }, 'MYFOO',
  q{ 3.0 MYBODY }, 'MYBODY',
  q{ 3.0 MYRAWBODY }, 'MYRAWBODY',
  q{ 3.0 MYFULL }, '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 }, 'TEST_NOREALNAME',
);
%anti_patterns = (
  q{ 1.0 MYFOO }, 'MYFOO',
  q{ 1.0 MYBODY }, 'MYBODY',
  q{ 1.0 MYRAWBODY }, 'MYRAWBODY',
  q{ 1.0 MYFULL }, 'MYFULL',
  q{ 3.0 MYFOO }, 'MYFOO',
  q{ 3.0 MYBODY }, 'MYBODY',
  q{ 3.0 MYRAWBODY }, 'MYRAWBODY',
  q{ 3.0 MYFULL }, 'MYFULL',
);
ok (spamcrun ("-u testuser3 < data/spam/009", \&patterns_run_cb));
ok (stop_spamd ());
checkfile ($spamd_stderr, \&patterns_run_cb);
ok_all_patterns();

