# - Email
#
+=item @filtered = exclude_mail_blacklist ( $blacklist_file, @addresses )
+
+Filter ADDRESSES to remove addresses mentioned in BLACKLIST_FILE.
+
+=cut
+
sub exclude_mail_blacklist {
- my @emaillist = @_;
- my @blacklist = ();
- my @tomail = @emaillist;
- if (-f $email_blacklist) {
- open(BLACKLIST, "<$email_blacklist");
- @blacklist = <BLACKLIST>;
- close(BLACKLIST);
- chomp(@blacklist);
-
- my %blacklist = map{$_ => 1 } @blacklist;
- my %emaillist = map{$_ => 1 } @emaillist;
-
- @tomail = grep(!defined $blacklist{$_}, @emaillist);
- }
+ my $blacklist_file = shift;
+ my @emaillist = @_;
+
+ local *_;
+ my %blacklist;
+
+ my @filtered = @emaillist;
+ if (-f $blacklist_file) {
+ open BLACKLIST, '<', $blacklist_file
+ or ftp_abort("open($blacklist_file) failed: $!");
+ while (<BLACKLIST>) { chomp; $blacklist{$_}++ }
+ close BLACKLIST or ftp_abort("close($blacklist_file) failed: $!");
+
+ @filtered = grep !$blacklist{$_}, @emaillist;
+ }
- return @tomail;
+ return @filtered;
}
# Used for both success and failure.
$sender = 'ftp-upload@gnu.org'
if ($send_to_user); # We really want replies to go to the ftp-upload queue
- @email_list = exclude_mail_blacklist(@email_list);
+ @email_list = exclude_mail_blacklist($email_blacklist, @email_list);
#print STDERR "final emails: @email_list\n";
# return @_;