Added buttons to the auto-whitelist page for permanently allowing or denying selected addresses.
---- Changes since 1.440 ----
Corrected the columns on the auto-whitelist page, to show the message count and score.
+Improved support for multiple SpamAssassin config files, which can be specified by links into the module from other modules like Virtualmin.
require './spam-lib.pl';
&error_setup($text{'dawl_err'});
-&can_use_check("awl");
&ReadParse();
+&set_config_file_in(\%in);
+&can_use_check("awl");
&can_edit_awl($in{'user'}) || &error($text{'dawl_ecannot'});
$conf = &get_config();
&close_auto_whitelist_dbm();
&redirect("edit_awl.cgi?search=".&urlize($in{'search'}).
- "&user=".&urlize($in{'user'}));
+ "&user=".&urlize($in{'user'}).
+ "&file=".&urlize($in{'file'}).
+ "&title=".&urlize($in{'title'}));
require './spam-lib.pl';
&error_setup($text{'dawl_err'});
+&ReadParse();
+&set_config_file_in(\%in);
&can_use_check("awl");
&ReadParse();
endpwent();
print &text('dawl_done', $ucount, $count),"<p>\n";
-&ui_print_footer("", $text{'index_return'});
+&ui_print_footer($redirect_url, $text{'index_return'});
require './spam-lib.pl';
&error_setup($text{'dawl_err'});
-&can_use_check("awl");
&ReadParse();
+&set_config_file_in(\%in);
+&can_use_check("awl");
&can_edit_awl($in{'user'}) || &error($text{'dawl_ecannot'});
# Delete them
}
&close_auto_whitelist_dbm();
&redirect("edit_awl.cgi?search=".&urlize($in{'search'}).
- "&user=".&urlize($in{'user'}));
+ "&user=".&urlize($in{'user'}).
+ "&file=".&urlize($in{'file'}).
+ "&title=".&urlize($in{'title'}));
# Display entries in the auto-whitelist
require './spam-lib.pl';
-&can_use_check("awl");
-&ui_print_header(undef, $text{'awl_title'}, "");
&ReadParse();
+&set_config_file_in(\%in);
+&can_use_check("awl");
+&ui_print_header($header_subtext, $text{'awl_title'}, "");
$formno = 0;
# Check if we need a username
if (&supports_auto_whitelist() == 2) {
print &ui_form_start("edit_awl.cgi");
+ print $form_hiddens;
print "<b>$text{'awl_user'}</b>\n";
print &ui_user_textbox("user", $in{'user'}),"\n",
&ui_submit($text{'awl_uok'});
@keys = sort { $a cmp $b } keys %awl;
@keys = grep { !/\|totscore/ } @keys;
print &ui_form_start("edit_awl.cgi");
+print $form_hiddens;
print "<b>$text{'awl_search'}</b>\n";
print &ui_textbox("search", $in{'search'}, 30),"\n",
&ui_submit($text{'awl_ok'});
else {
# Show table
print &ui_form_start("delete_awl.cgi", "post");
+ print $form_hiddens;
print &ui_hidden("search", $in{'search'});
print &ui_hidden("user", $in{'user'});
@links = ( &select_all_link("d", $formno),
print &ui_buttons_row("deleteone_awl.cgi",
$text{'awl_deleteone'}, &text('awl_deleteonedesc',
"<tt>".&html_escape($in{'user'})."</tt>"),
- &ui_hidden("user", $in{'user'}));
+ &ui_hidden("user", $in{'user'}).
+ $form_hiddens);
}
if (&supports_auto_whitelist() == 2) {
# Delete for all users
print &ui_buttons_row("deleteall_awl.cgi",
- $text{'awl_deleteall'}, $text{'awl_deletealldesc'});
+ $text{'awl_deleteall'}, $text{'awl_deletealldesc'},
+ $form_hiddens);
}
print &ui_buttons_end();
# Display various privileged settings
require './spam-lib.pl';
+&ReadParse();
+&set_config_file_in(\%in);
&can_use_check("priv");
-&ui_print_header(undef, $text{'priv_title'}, "");
+&ui_print_header($header_subtext, $text{'priv_title'}, "");
$conf = &get_config();
print "$text{'priv_desc'}<p>\n";
print "</td> </tr>\n";
&end_form(undef, $text{'save'});
-&ui_print_footer("", $text{'index_return'});
+&ui_print_footer($redirect_url, $text{'index_return'});
# Display a form for editing the spam report text
require './spam-lib.pl';
+&ReadParse();
+&set_config_file_in(\%in);
&can_use_check("report");
-&ui_print_header(undef, $text{'report_title'}, "");
+&ui_print_header($header_subtext, $text{'report_title'}, "");
$conf = &get_config();
print "$text{'report_desc'}<p>\n";
print "</tr>\n";
&end_form(undef, $text{'save'});
-&ui_print_footer("", $text{'index_return'});
+&ui_print_footer($redirect_url, $text{'index_return'});
# Display a form for editing spam scoring options
require './spam-lib.pl';
+&ReadParse();
+&set_config_file_in(\%in);
&can_use_check("score");
-&ui_print_header(undef, $text{'score_title'}, "");
+&ui_print_header($header_subtext, $text{'score_title'}, "");
$conf = &get_config();
print "$text{'score_desc'}<p>\n";
print "</select></td> </tr>\n";
&end_form(undef, $text{'save'});
-&ui_print_footer("", $text{'index_return'});
+&ui_print_footer($redirect_url, $text{'index_return'});
# Show simple body tests
require './spam-lib.pl';
+&ReadParse();
+&set_config_file_in(\%in);
&can_use_check("header");
-&ui_print_header(undef, $text{'simple_title'}, "");
+&ui_print_header($header_subtext, $text{'simple_title'}, "");
$conf = &get_config();
print "$text{'simple_desc'}<p>\n";
print "</td> </tr>\n";
&end_form(undef, $text{'save'});
-&ui_print_footer("", $text{'index_return'});
+&ui_print_footer($redirect_url, $text{'index_return'});
# Display other misc user-level options
require './spam-lib.pl';
+&ReadParse();
+&set_config_file_in(\%in);
&can_use_check("user");
-&ui_print_header(undef, $text{'user_title'}, "");
+&ui_print_header($header_subtext, $text{'user_title'}, "");
$conf = &get_config();
print "$text{'user_desc'}<p>\n";
print "</td> </tr>\n";
&end_form(undef, $text{'save'});
-&ui_print_footer("", $text{'index_return'});
+&ui_print_footer($redirect_url, $text{'index_return'});
# Display white and black lists of to and from addresses
require './spam-lib.pl';
+&ReadParse();
+&set_config_file_in(\%in);
&can_use_check("white");
-&ui_print_header(undef, $text{'white_title'}, "");
+&ui_print_header($header_subtext, $text{'white_title'}, "");
$conf = &get_config();
print "$text{'white_desc'}<p>\n";
print "</table>\n";
print "<input type=submit value='$text{'white_importok'}'></form>\n";
-&ui_print_footer("", $text{'index_return'});
+&ui_print_footer($redirect_url, $text{'index_return'});
# whitelist_to_conv(col, name, size, value)
sub whitelist_to_conv
# Display a menu of spamassassin config category icons
require './spam-lib.pl';
+&ReadParse();
$hsl = $module_info{'usermin'} ? undef :
&help_search_link("spamassassin", "perl", "google");
+&set_config_file_in(\%in);
if (!&has_command($config{'spamassassin'}) ||
(!$module_info{'usermin'} && !($vers = &get_spamassassin_version(\$out)))) {
# Program not found
- &ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1,
+ &ui_print_header($header_subtext, $text{'index_title'}, "", undef, 1, 1,
undef, $hsl);
if ($module_info{'usermin'}) {
else {
$vtext = $module_info{'usermin'} ? undef :
&text('index_version', $vers);
- &ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1, undef,
- $hsl, undef, undef, $vtext);
+ &ui_print_header($header_subtext, $text{'index_title'}, "", undef,
+ 1, 1, undef, $hsl, undef, undef, $vtext);
if (!-r $local_cf && !-d $local_cf && !$module_info{'usermin'}) {
# Config not found
@pages = grep { $_ ne 'mail' } @pages;
}
@links = map { $_ eq "mail" ? "../mailbox/index.cgi?folder=$sfolder->{'index'}" : "edit_${_}.cgi" } @pages;
+ if ($in{'file'}) {
+ foreach my $l (@links) {
+ if ($l !~ /\//) {
+ $l .= "?file=".&urlize($in{'file'}).
+ "&title=".&urlize($in{'title'});
+ }
+ }
+ }
@icons = map { "images/${_}.gif" } @pages;
@titles = map { $text{"${_}_title"} } @pages;
&icons_table(\@links, \@titles, \@icons);
require './spam-lib.pl';
&error_setup($text{'priv_err'});
-&can_use_check("priv");
&ReadParse();
+&set_config_file_in(\%in);
+&can_use_check("priv");
&execute_before("priv");
&lock_spam_files();
$conf = &get_config();
&unlock_spam_files();
&execute_after("priv");
&webmin_log("priv");
-&redirect("");
+&redirect($redirect_url);
sub check_path
{
require './spam-lib.pl';
&error_setup($text{'report_err'});
-&can_use_check("report");
&ReadParse();
+&set_config_file_in(\%in);
+&can_use_check("report");
&execute_before("report");
&lock_spam_files();
$conf = &get_config();
&unlock_spam_files();
&webmin_log("report");
&execute_after("report");
-&redirect("");
+&redirect($redirect_url);
sub char_check
{
require './spam-lib.pl';
&error_setup($text{'score_err'});
-&can_use_check("score");
&ReadParse();
+&set_config_file_in(\%in);
+&can_use_check("score");
&execute_before("score");
&lock_spam_files();
$conf = &get_config();
&unlock_spam_files();
&execute_after("score");
&webmin_log("score");
-&redirect("");
+&redirect($redirect_url);
sub hits_check
{
# Update simple tests
require './spam-lib.pl';
+&ReadParse();
+&set_config_file_in(\%in);
&can_use_check("header");
$conf = &get_config();
&error_setup($text{'simple_err'});
-&ReadParse();
&execute_before("simple");
# Get existing rules
&unlock_spam_files();
&execute_after("header");
&webmin_log("header");
-&redirect("");
+&redirect($redirect_url);
require './spam-lib.pl';
&error_setup($text{'user_err'});
-&can_use_check("user");
&ReadParse();
+&set_config_file_in(\%in);
+&can_use_check("user");
&execute_before("user");
&lock_spam_files();
$conf = &get_config();
&unlock_spam_files();
&execute_after("user");
&webmin_log("user");
-&redirect("");
+&redirect($redirect_url);
sub check_timeout
{
require './spam-lib.pl';
&error_setup($text{'white_err'});
-&can_use_check("white");
&ReadParse();
+&set_config_file_in(\%in);
+&can_use_check("white");
&execute_before("white");
&lock_spam_files();
$conf = &get_config();
&unlock_spam_files();
&execute_after("white");
&webmin_log("white");
-&redirect("");
+&redirect($redirect_url);
sub from_parser
{
# Check for valid file
local %cans;
$cans{$access{'file'}} = 1 if ($access{'file'});
- foreach my $f (split(/\s+/, $access{'file'})) {
+ foreach my $f (split(/\s+/, $access{'files'})) {
$cans{$f} = 1;
}
if (keys %cans) {
sub set_config_file_in
{
local ($in) = @_;
+$header_subtext = undef;
+$redirect_url = "";
+$form_hiddens = "";
if (!$module_info{'usermin'} && $in{'file'}) {
&set_config_file($in{'file'});
+ $header_subtext = $in{'title'} || "<tt>$in{'file'}</tt>";
+ $redirect_url = "index.cgi?file=".&urlize($in{'file'}).
+ "&title=".&urlize($in{'title'});
+ $form_hiddens = &ui_hidden("file", $in{'file'}).
+ &ui_hidden("title", $in{'title'});
+ $module_index_link = $redirect_url;
}
}
print "<table border width=100%>\n";
print "<tr $tb> <td><b>$_[1]</b></td> </tr>\n";
print "<tr $cb> <td><table width=100%>\n";
+print $form_hiddens;
}
# end_form(buttonname, buttonvalue, ...)