Rob McMillin <[EMAIL PROTECTED]> writes:

> The problem is exactly that -R doesn't work for me. I wrote a quick 
> script to delete everything in the dbm:

-R was too inconvenient for me, so I wrote this.  I have only tested
it against SA 2.01.  It may eat your whitelist or some other bad thing
could happen, so back your whitelist up before experimenting with it.

It seems like spammers can get into your auto-whitelist too easily.

I am using perl 5.6.1.

------- start of cut text --------------
#!/usr/bin/perl

# whitelist - manipulate spamassassin 2.01 whitelist
#
# Copyright (C) 2002  Daniel Quinlan <[EMAIL PROTECTED]>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

use warnings;
use Fcntl;
use AnyDBM_File ;
use Getopt::Std;

my $prog = $0;
my $db = $ENV{HOME} . "/.spamassassin/auto-whitelist";

$prog =~ s@.*/@@;

getopts("cdhls:");
use vars qw( %h $opt_c $opt_d $opt_h $opt_l $opt_s ) ;

tie (%h, "AnyDBM_File", $db, O_RDWR|O_CREAT|O_EXCL, 0600)
    or die "Cannot open file $db: $!\n";

if ($opt_l) {
    &list_whitelist;
}
elsif ($opt_d) {
    &delete_addresses;
}
elsif ($opt_s) {
    &set_addresses;
}
elsif ($opt_c) {
    &clean_addresses;
}
elsif ($opt_h) {
    usage(0);
}
usage(1);

untie %h;

sub usage {
        my $status = shift;

        my $out = $status ? STDERR : STDOUT;
        print $out <<EOF;
usage: $prog [options] [addresses ...]

whitelist - manipulate spamassassin auto-whitelist

BACKUP YOUR WHITELIST BEFORE RUNNING THIS PROGRAM

 -c         remove all suspicious/malformed addresses from auto-whitelist
 -d         remove addresses from auto-whitelist
 -h         print this help
 -l         list auto-whitelist
 -s N       set count of addresses to N

EOF
        exit($status);
}

sub set_addresses {
    my $k;

    die "$prog: illegal setting: $opt_s\n" if $opt_s !~ /^-?\d+$/;
    foreach $k (@ARGV) {
        if (defined($h{$k})) {
            $h{$k} = $opt_s;
        }
    }
    exit(0);
}

sub delete_addresses {
    my $k;

    foreach $k (@ARGV) {
        if (defined($h{$k})) {
            print "deleting $k\n";
            delete $h{$k};
        }
    }
    exit(0);
}

sub clean_addresses {
    my $k;

    foreach $k (keys %h) {
        if (length($k) > 80 || $k =~ /[^A-Za-z0-9._\@+-]/) {
            print "deleting $k\n";
            delete $h{$k};
        }
    }
    exit(0);
}

sub list_whitelist {
    my $k;
    my $v;

    while (($k, $v) = each %h) {
        print "$k\t$v\n";
    }
    exit(0);
}
------- end ----------------------------

_______________________________________________
Spamassassin-talk mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/spamassassin-talk

Reply via email to