Handle hostnames with upper-case letters
[webmin.git] / spam / edit_awl.cgi
1 #!/usr/local/bin/perl
2 # Display entries in the auto-whitelist
3
4 require './spam-lib.pl';
5 &ReadParse();
6 &set_config_file_in(\%in);
7 &can_use_check("awl");
8 &ui_print_header($header_subtext, $text{'awl_title'}, "");
9 $formno = 0;
10
11 # Check if we need a username
12 if (&supports_auto_whitelist() == 2) {
13         print &ui_form_start("edit_awl.cgi");
14         print $form_hiddens;
15         print "<b>$text{'awl_user'}</b>\n";
16         print &ui_user_textbox("user", $in{'user'}),"\n",
17               &ui_submit($text{'awl_uok'});
18         print &ui_form_end();
19         $formno++;
20
21         if (!$in{'user'}) {
22                 # Can't do any more
23                 goto BUTTONS;
24                 }
25         }
26
27 # Open the DBM, or give up
28 $awf = &get_auto_whitelist_file($in{'user'});
29 $ok = &open_auto_whitelist_dbm($in{'user'});
30 if (!&can_edit_awl($in{'user'})) {
31         &ui_print_endpage("<b>".&text('awl_cannotuser',
32                 "<tt>".&html_escape($in{'user'})."</tt>")."</b>");
33         }
34 elsif (!defined(getpwnam($in{'user'})) && !$module_info{'usermin'}) {
35         &ui_print_endpage("<b>".&text('awl_nouser',
36                 "<tt>".&html_escape($in{'user'})."</tt>")."</b>");
37         }
38 elsif (!$awf) {
39         &ui_print_endpage("<b>".&text('awl_nofile',
40                 "<tt>".&html_escape($in{'user'})."</tt>")."</b>");
41         }
42 elsif ($ok == 0) {
43         &ui_print_endpage("<b>".&text('awl_cannot', $awf)."</b>");
44         }
45 elsif ($ok < 0) {
46         &ui_print_endpage("<b>".&text('awl_empty', $awf)."</b>");
47         }
48
49 # Show search form
50 @keys = sort { $a cmp $b } keys %awl;
51 @keys = grep { !/\|totscore/ } @keys;
52 print &ui_form_start("edit_awl.cgi");
53 print $form_hiddens;
54 print "<b>$text{'awl_search'}</b>\n";
55 print &ui_textbox("search", $in{'search'}, 30),"\n",
56       &ui_submit($text{'awl_ok'});
57 print &ui_hidden("user", $in{'user'});
58 print &ui_form_end();
59 $formno++;
60 if ($in{'search'}) {
61         @keys = grep { /\Q$in{'search'}\E/i } @keys;
62         print &text('awl_searching',
63                     "<i>".&html_escape($in{'search'})."</i>"),"<p>\n";
64         }
65
66 if (@keys > $max_awl_keys && !$in{'search'}) {
67         # Too many to show
68         print "<b>",&text('awl_toomany', scalar(@keys),
69                           $max_awl_keys),"</b><p>\n";
70         }
71 else {
72         # Show table
73         print &ui_form_start("delete_awl.cgi", "post");
74         print $form_hiddens;
75         print &ui_hidden("search", $in{'search'});
76         print &ui_hidden("user", $in{'user'});
77         @links = ( &select_all_link("d", $formno),
78                    &select_invert_link("d", $formno) );
79         @tds = ( "width=5" );
80         print &ui_links_row(\@links);
81         print &ui_columns_start([ "",
82                                   $text{'awl_email'},
83                                   $text{'awl_ip'},
84                                   $text{'awl_count'},
85                                   $text{'awl_score'} ], undef, 0, \@tds);
86         foreach $k (@keys) {
87                 ($email, $ip, $rest) = split(/\|/, $k);
88                 if ($ip eq "ip=none") {
89                         $ip = $text{'awl_none'};
90                         }
91                 elsif ($ip =~ /^ip=(\S+)$/) {
92                         $ip = $1;
93                         }
94                 else {
95                         $ip = $text{'awl_unknown'};
96                         }
97                 $score = $awl{$k."|totscore"};
98                 print &ui_checked_columns_row([ $email, $ip, $awl{$k}, $score ],
99                                               \@tds, "d", $k);
100                 }
101         print &ui_columns_end();
102         print &ui_links_row(\@links);
103         print &ui_form_end([ [ undef, $text{'awl_delete'} ],
104                              [ 'white', $text{'awl_white'} ],
105                              [ 'black', $text{'awl_black'} ] ]);
106         }
107 &close_auto_whitelist_dbm();
108
109 # Show delete buttons
110 BUTTONS:
111 print &ui_hr();
112 print &ui_buttons_start();
113 if ($in{'user'} || &supports_auto_whitelist() == 1) {
114         # Delete for this user
115         print &ui_buttons_row("deleteone_awl.cgi",
116                       $text{'awl_deleteone'}, &text('awl_deleteonedesc',
117                                 "<tt>".&html_escape($in{'user'})."</tt>"),
118                       &ui_hidden("user", $in{'user'}).
119                       $form_hiddens);
120         }
121 if (&supports_auto_whitelist() == 2) {
122         # Delete for all users
123         print &ui_buttons_row("deleteall_awl.cgi",
124                       $text{'awl_deleteall'}, $text{'awl_deletealldesc'},
125                       $form_hiddens);
126         }
127 print &ui_buttons_end();
128
129 &ui_print_footer("", $text{'index_return'});