#!/usr/local/bin/perl
# Display entries in the auto-whitelist
# XXX delete all
-# XXX access control
require './spam-lib.pl';
&can_use_check("awl");
# Open the DBM, or give up
$awf = &get_auto_whitelist_file($in{'user'});
$ok = &open_auto_whitelist_dbm($in{'user'});
-if (!$awf) {
- &ui_print_endpage("<b>".&text('awl_nofile')."</b>");
+if (!&can_edit_awl($in{'user'})) {
+ &ui_print_endpage("<b>".&text('awl_cannotuser',
+ "<tt>".&html_escape($in{'user'})."</tt>")."</b>");
+ }
+elsif (!defined(getpwnam($in{'user'}))) {
+ &ui_print_endpage("<b>".&text('awl_nouser',
+ "<tt>".&html_escape($in{'user'})."</tt>")."</b>");
+ }
+elsif (!$awf) {
+ &ui_print_endpage("<b>".&text('awl_nofile',
+ "<tt>".&html_escape($in{'user'})."</tt>")."</b>");
}
elsif ($ok == 0) {
&ui_print_endpage("<b>".&text('awl_cannot', $awf)."</b>");
# Show search form
@keys = sort { $a cmp $b } keys %awl;
+@keys = grep { !/\|totscore/ } @keys;
print &ui_form_start("edit_awl.cgi");
print "<b>$text{'awl_search'}</b>\n";
print &ui_textbox("search", $in{'search'}, 30),"\n",
"<i>".&html_escape($in{'search'})."</i>"),"<p>\n";
}
-# Show table
-print &ui_form_start("delete_awl.cgi", "post");
-print &ui_hidden("search", $in{'search'});
-print &ui_hidden("user", $in{'user'});
-@links = ( &select_all_link("d", $formno), &select_invert_link("d", $formno) );
-@tds = ( "width=5" );
-print &ui_links_row(\@links);
-print &ui_columns_start([ "",
- $text{'awl_email'},
- $text{'awl_ip'},
- $text{'awl_score'} ], \@tds);
-foreach $k (@keys) {
- ($email, $ip, $rest) = split(/\|/, $k);
- next if ($rest eq "totscore");
- if ($ip eq "ip=none") {
- $ip = $text{'awl_none'};
- }
- elsif ($ip =~ /^ip=(\S+)$/) {
- $ip = $1;
- }
- else {
- $ip = $text{'awl_unknown'};
+if (@keys > $max_awl_keys && !$in{'search'}) {
+ # Too many to show
+ print "<b>",&text('awl_toomany', scalar(@keys),
+ $max_awl_keys),"</b><p>\n";
+ }
+else {
+ # Show table
+ print &ui_form_start("delete_awl.cgi", "post");
+ print &ui_hidden("search", $in{'search'});
+ print &ui_hidden("user", $in{'user'});
+ @links = ( &select_all_link("d", $formno),
+ &select_invert_link("d", $formno) );
+ @tds = ( "width=5" );
+ print &ui_links_row(\@links);
+ print &ui_columns_start([ "",
+ $text{'awl_email'},
+ $text{'awl_ip'},
+ $text{'awl_score'} ], \@tds);
+ foreach $k (@keys) {
+ ($email, $ip, $rest) = split(/\|/, $k);
+ if ($ip eq "ip=none") {
+ $ip = $text{'awl_none'};
+ }
+ elsif ($ip =~ /^ip=(\S+)$/) {
+ $ip = $1;
+ }
+ else {
+ $ip = $text{'awl_unknown'};
+ }
+ print &ui_checked_columns_row([ $email, $ip, $awl{$k} ],
+ \@tds, "d", $k);
}
- print &ui_checked_columns_row([ $email, $ip, $awl{$k} ],
- \@tds, "d", $k);
+ print &ui_columns_end();
+ print &ui_links_row(\@links);
+ print &ui_form_end([ [ undef, $text{'awl_delete'} ] ]);
}
-print &ui_columns_end();
-print &ui_links_row(\@links);
-print &ui_form_end([ [ undef, $text{'awl_delete'} ] ]);
&close_auto_whitelist_dbm();
+# Show delete buttons
+print "<hr>\n";
+print &ui_buttons_start();
+if ($in{'user'} || &supports_auto_whitelist() == 1) {
+ # Delete for this user
+ print &ui_buttons_row("deleteone_awl.cgi",
+ $text{'awl_deleteone'}, &text('awl_deleteonedesc',
+ "<tt>".&html_escape($in{'user'})."</tt>"),
+ &ui_hidden("user", $in{'user'}));
+ }
+if (&supports_auto_whitelist() == 2) {
+ # Delete for all users
+ print &ui_buttons_row("deleteall_awl.cgi",
+ $text{'awl_deleteall'}, $text{'awl_deletealldesc'});
+ }
+print &ui_buttons_end();
+
&ui_print_footer("", $text{'index_return'});
db_eldapattr=Missing or invalid SpamAssassin attribute
db_eldapuid=Missing or invalid username attribute
-awl_title=Manage Auto-Whitelist
+awl_title=Manage Auto-Whitelists
awl_search=Search whitelist for:
awl_ok=Search
awl_searching=Showing auto-whitelist entries matching $1 ..
awl_empty=Your auto-whitelist file <tt>$1</tt> does not contain any entries. It will be populated by SpamAsssassin as mail is processed by the system.
awl_user=Show auto-whitelist for user:
awl_uok=Show
-awl_nofile=This user does not have an auto-whitelist file.
+awl_nofile=The user $1 does not have an auto-whitelist file.
+awl_nouser=The user $1 does not exist.
+awl_cannotuser=You are not allowed to edit the auto-whitelist for user $1.
+awl_toomany=There are $1 entries in the auto-whitelist, but at most $2 can be displayed. Use the search form above to limit those shown.
+awl_deleteone=Clear Auto-Whitelist
+awl_deleteonedesc=Remove all auto-whitelist entries for the user $1.
+awl_deleteall=Clear All Auto-Whitelists
+awl_deletealldesc=Remove all auto-whitelist entries for all users on the system.
dawl_err=Failed to delete from auto-whitelist
dawl_eopen=Could not open whitelist
dawl_enone=No addresses to delete selected
+dawl_ecannot=You are not allowed to manage the auto-whitelist for this user
+dawl_doing=Deleting auto-whitelists for all users ..
+dawl_done=.. deleted $2 entries from $1 users.
+dawl_title=Delete All Auto-Whitelists