Initial commit
[clearscm.git] / maps / bin / add2nulllist.pl
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4
5 use FindBin;
6
7 use lib $FindBin::Bin, '/opt/clearscm/lib';
8
9 use MAPS;
10 use MAPSLog;
11 use MAPSWeb;
12 use Display;
13
14 # Highly specialized!
15 my $userid = $ENV{USER};
16 my $Userid;
17 my $type = "null";
18
19 sub GetItems {
20   my $filename = shift;
21
22   my @items;
23
24   open FILE, $filename
25     or error "Unable to open $filename - $!", 1;
26
27   while (<FILE>) {
28     my @fields = split;
29     my %item;
30
31     my @address = split /\@/, $fields [0];
32
33     $item {pattern}     = $address [0];
34     $item {domain}      = $address [1];
35     $item {comment}     = $fields [1] ? $fields [1] : "";
36
37     push @items, \%item;
38   } # while
39
40   return @items;
41 } # GetItems
42
43 sub Add2List {
44   my @items     = @_;
45
46   my $sender    = "";
47   my $nextseq   = MAPSDB::GetNextSequenceNo $userid, $type;
48
49   foreach (@items) {
50     my %item    = %{$_};
51
52     my $pattern = $item {pattern};
53     my $domain  = $item {domain};
54     my $comment = $item {comment};
55
56     display_nolf "Adding $pattern\@$domain ($comment) to null list ($nextseq)...";
57     last if ((!defined $pattern || $pattern eq "") &&
58              (!defined $domain  || $domain eq ""));
59     $sender     = lc ("$pattern\@$domain");
60
61     if (OnNulllist $sender) {
62       display " Already on list";
63     } else {
64       Add2Nulllist $sender, $userid, $comment;
65       display " done";
66         
67       # Now remove this entry from the other lists (if present)
68       foreach my $otherlist ("white", "black") {
69         my $sth = FindList $otherlist, $sender;
70         my ($sequence, $count);
71         ($_, $_, $_, $_, $_, $sequence) = GetList $sth;
72         if (defined $sequence) {
73           $count = DeleteList $otherlist, $sequence;
74         } # if
75       } # foreach
76     } # if
77     $nextseq++;
78   } # while
79 } # Add2List
80
81 # Main
82 my $filename;
83
84 if ($ARGV [0]) {
85   $filename = $ARGV [0];
86 } else {
87   error "Must specify a filename of addresses to null list", 1;
88 } # if
89
90 SetContext $userid;
91
92 $Userid = ucfirst $userid;
93
94 Add2List (GetItems $filename);
95
96 exit;