Completed multiple config file support
authorJamie Cameron <jcameron@webmin.com>
Thu, 22 Jan 2009 23:13:47 +0000 (23:13 +0000)
committerJamie Cameron <jcameron@webmin.com>
Thu, 22 Jan 2009 23:13:47 +0000 (23:13 +0000)
19 files changed:
spam/CHANGELOG
spam/delete_awl.cgi
spam/deleteall_awl.cgi
spam/deleteone_awl.cgi
spam/edit_awl.cgi
spam/edit_priv.cgi
spam/edit_report.cgi
spam/edit_score.cgi
spam/edit_simple.cgi
spam/edit_user.cgi
spam/edit_white.cgi
spam/index.cgi
spam/save_priv.cgi
spam/save_report.cgi
spam/save_score.cgi
spam/save_simple.cgi
spam/save_user.cgi
spam/save_white.cgi
spam/spam-lib.pl

index da00854..4e17455 100644 (file)
@@ -17,3 +17,4 @@ Auto-whitelists can now be viewed, deleted from and cleared for all users on the
 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.
index 57d25db..17a7142 100644 (file)
@@ -3,8 +3,9 @@
 
 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();
 
@@ -39,5 +40,7 @@ else {
 
 &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'}));
 
index da58cb8..51c2ebd 100755 (executable)
@@ -3,6 +3,8 @@
 
 require './spam-lib.pl';
 &error_setup($text{'dawl_err'});
+&ReadParse();
+&set_config_file_in(\%in);
 &can_use_check("awl");
 &ReadParse();
 
@@ -26,5 +28,5 @@ while(@uinfo = getpwent()) {
 endpwent();
 print &text('dawl_done', $ucount, $count),"<p>\n";
 
-&ui_print_footer("", $text{'index_return'});
+&ui_print_footer($redirect_url, $text{'index_return'});
 
index 78b0eb3..a5df130 100644 (file)
@@ -3,8 +3,9 @@
 
 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
@@ -14,5 +15,7 @@ foreach $k (keys %awl) {
        }
 &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'}));
 
index 4ed3040..4106049 100644 (file)
@@ -2,14 +2,16 @@
 # 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'});
@@ -49,6 +51,7 @@ elsif ($ok < 0) {
 @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'});
@@ -69,6 +72,7 @@ if (@keys > $max_awl_keys && !$in{'search'}) {
 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),
@@ -111,12 +115,14 @@ if ($in{'user'} || &supports_auto_whitelist() == 1) {
        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();
 
index 7a2c1ac..28695f6 100755 (executable)
@@ -3,8 +3,10 @@
 # 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";
@@ -33,6 +35,6 @@ print "<tr> <td><b>$text{'priv_razor'}</b></td> <td colspan=3 nowrap>";
 print "</td> </tr>\n";
 
 &end_form(undef, $text{'save'});
-&ui_print_footer("", $text{'index_return'});
+&ui_print_footer($redirect_url, $text{'index_return'});
 
 
index 49cf1f7..e6c25a4 100755 (executable)
@@ -3,8 +3,10 @@
 # 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";
@@ -131,5 +133,5 @@ print "<textarea name=terse rows=5 cols=80>",
 print "</tr>\n";
 
 &end_form(undef, $text{'save'});
-&ui_print_footer("", $text{'index_return'});
+&ui_print_footer($redirect_url, $text{'index_return'});
 
index c1decd6..73508a8 100755 (executable)
@@ -3,8 +3,10 @@
 # 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";
@@ -96,5 +98,5 @@ close(LANGS);
 print "</select></td> </tr>\n";
 
 &end_form(undef, $text{'save'});
-&ui_print_footer("", $text{'index_return'});
+&ui_print_footer($redirect_url, $text{'index_return'});
 
index 86b8232..6d066c4 100755 (executable)
@@ -2,8 +2,10 @@
 # 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";
@@ -44,5 +46,5 @@ print &ui_columns_end();
 
 print "</td> </tr>\n";
 &end_form(undef, $text{'save'});
-&ui_print_footer("", $text{'index_return'});
+&ui_print_footer($redirect_url, $text{'index_return'});
 
index ad41e49..8a4fc98 100755 (executable)
@@ -3,8 +3,10 @@
 # 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";
@@ -92,6 +94,6 @@ $pheader = &find("pyzor_add_header", $conf);
 print "</td> </tr>\n";
 
 &end_form(undef, $text{'save'});
-&ui_print_footer("", $text{'index_return'});
+&ui_print_footer($redirect_url, $text{'index_return'});
 
 
index 3345efe..5268465 100755 (executable)
@@ -3,8 +3,10 @@
 # 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";
@@ -101,7 +103,7 @@ print "<input type=radio name=sort value=0 checked> $text{'no'}</td> </tr>\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
index a23adc9..2c28fe6 100755 (executable)
@@ -3,13 +3,15 @@
 # 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'}) {
@@ -39,8 +41,8 @@ if (!&has_command($config{'spamassassin'}) ||
 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
@@ -138,6 +140,14 @@ else {
                        @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);
index 5ff4eee..3fa3a37 100755 (executable)
@@ -4,8 +4,9 @@
 
 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();
@@ -20,7 +21,7 @@ $conf = &get_config();
 &unlock_spam_files();
 &execute_after("priv");
 &webmin_log("priv");
-&redirect("");
+&redirect($redirect_url);
 
 sub check_path
 {
index e51b6a1..b34f103 100755 (executable)
@@ -4,8 +4,9 @@
 
 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();
@@ -62,7 +63,7 @@ if (&version_atleast(3)) {
 &unlock_spam_files();
 &webmin_log("report");
 &execute_after("report");
-&redirect("");
+&redirect($redirect_url);
 
 sub char_check
 {
index 140ff2e..fff9135 100755 (executable)
@@ -4,8 +4,9 @@
 
 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();
@@ -46,7 +47,7 @@ else {
 &unlock_spam_files();
 &execute_after("score");
 &webmin_log("score");
-&redirect("");
+&redirect($redirect_url);
 
 sub hits_check
 {
index 77ce555..1e0dff8 100755 (executable)
@@ -2,10 +2,11 @@
 # 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
@@ -88,5 +89,5 @@ for($i=0; defined($name = $in{"name_$i"}); $i++) {
 &unlock_spam_files();
 &execute_after("header");
 &webmin_log("header");
-&redirect("");
+&redirect($redirect_url);
 
index 828dbf6..9bc2305 100755 (executable)
@@ -4,8 +4,9 @@
 
 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();
@@ -52,7 +53,7 @@ if (!&version_atleast(3)) {
 &unlock_spam_files();
 &execute_after("user");
 &webmin_log("user");
-&redirect("");
+&redirect($redirect_url);
 
 sub check_timeout
 {
index 0901b5d..7b8e023 100755 (executable)
@@ -4,8 +4,9 @@
 
 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();
@@ -35,7 +36,7 @@ if (!$config{'show_global'}) {
 &unlock_spam_files();
 &execute_after("white");
 &webmin_log("white");
-&redirect("");
+&redirect($redirect_url);
 
 sub from_parser
 {
index 61c75da..1ac9e56 100644 (file)
@@ -56,7 +56,7 @@ if (!$module_info{'usermin'}) {
        # 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) {
@@ -73,8 +73,17 @@ $add_cf = !-d $local_cf ? $local_cf :
 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;
        }
 }
 
@@ -417,6 +426,7 @@ print "<form action=$_[0] method=post>\n";
 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, ...)