return $res;
}
-sub add_to_blackwhite {
- my ($dbh, $username, $listname, $addrs, $delete) = @_;
-
- my $name = $listname eq 'BL' ? 'BL' : 'WL';
- my $oname = $listname eq 'BL' ? 'WL' : 'BL';
- my $qu = $dbh->quote ($username);
-
- my $sth = $dbh->prepare(
- "SELECT * FROM UserPrefs WHERE pmail = $qu AND (Name = 'BL' OR Name = 'WL')");
- $sth->execute();
-
- my $list = { 'WL' => {}, 'BL' => {} };
-
- while (my $ref = $sth->fetchrow_hashref()) {
- my $data = $ref->{data};
- $data =~ s/[,;]/ /g;
- my @alist = split('\s+', $data);
-
- my $tmp = {};
- foreach my $a (@alist) {
- if ($a =~ m/^[[:ascii:]]+$/) {
- $tmp->{$a} = 1;
- }
- }
-
- $list->{$ref->{name}} = $tmp;
- }
-
- $sth->finish;
-
- if ($addrs) {
-
- foreach my $v (@$addrs) {
- die "email address '$v' is too long (> 512 characters)\n"
- if length($v) > 512;
-
- if ($delete) {
- delete($list->{$name}->{$v});
- } else {
- if ($v =~ m/[[:^ascii:]]/) {
- die "email address '$v' contains invalid characters\n";
- }
- $list->{$name}->{$v} = 1;
- delete ($list->{$oname}->{$v});
- }
- }
-
- my $wlist = $dbh->quote(join (',', keys %{$list->{WL}}) || '');
- my $blist = $dbh->quote(join (',', keys %{$list->{BL}}) || '');
-
- if (!$delete) {
- my $maxlen = 200000;
- die "whitelist size exceeds limit (> $maxlen bytes)\n"
- if length($wlist) > $maxlen;
- die "blacklist size exceeds limit (> $maxlen bytes)\n"
- if length($blist) > $maxlen;
- }
-
- $dbh->do(
- "DELETE FROM UserPrefs WHERE pmail = $qu AND (Name = 'WL' OR Name = 'BL');" .
- "INSERT INTO UserPrefs (PMail, Name, Data, MTime) " .
- "VALUES ($qu, 'BL', $blist, EXTRACT (EPOCH FROM now()));" .
- "INSERT INTO UserPrefs (PMail, Name, Data, MTime) " .
- "VALUES ($qu, 'WL', $wlist, EXTRACT (EPOCH FROM now()));");
- }
-
- my $values = [ keys %{$list->{$name}} ];
-
- return $values;
-}
-
1;