mirror of
https://github.com/webmin/webmin.git
synced 2026-02-14 02:42:07 +00:00
88 lines
2.1 KiB
Perl
Executable File
88 lines
2.1 KiB
Perl
Executable File
#!/usr/local/bin/perl
|
|
# Save spam and virus delivery options for a virtual server
|
|
|
|
require './virtual-server-lib.pl';
|
|
&ReadParse();
|
|
&error_setup($text{'spam_err'});
|
|
$d = &get_domain($in{'dom'});
|
|
&can_edit_domain($d) || &error($text{'edit_ecannot'});
|
|
&can_edit_spam($d) || &error($text{'spam_ecannot'});
|
|
&set_all_null_print();
|
|
|
|
# Work out what we can edit
|
|
if ($d->{'spam'}) {
|
|
($smode, $sdest) = &get_domain_spam_delivery($d);
|
|
if ($smode >= 0) {
|
|
push(@what, [ 'spam', \&save_domain_spam_delivery ]);
|
|
}
|
|
}
|
|
if ($d->{'virus'}) {
|
|
($vmode, $vdest) = &get_domain_virus_delivery($d);
|
|
if ($vmode >= 0) {
|
|
push(@what, [ 'virus', \&save_domain_virus_delivery ]);
|
|
}
|
|
}
|
|
|
|
# Validate spam and possibly virus inputs
|
|
foreach $w (@what) {
|
|
($pfx, $func) = @$w;
|
|
$mode = $in{$pfx."_mode"};
|
|
$dest = undef;
|
|
if ($mode == 1) {
|
|
$dest = $in{$pfx."_file"};
|
|
$dest =~ /\S/ && $dest !~ /\.\./ && $dest !~ /^\// ||
|
|
&error($text{'spam_efile'});
|
|
}
|
|
elsif ($mode == 2) {
|
|
$dest = $in{$pfx."_email"};
|
|
$dest =~ /\@/ || &error($text{'spam_eemail'});
|
|
}
|
|
elsif ($mode == 3) {
|
|
$dest = $in{$pfx."_dest"};
|
|
$dest =~ /\S/ || &error($text{'spam_edest'});
|
|
}
|
|
@args = ( $d, $mode, $dest );
|
|
if ($pfx eq "spam" && defined($in{'spamlevel'})) {
|
|
# Spam deletion level
|
|
if ($in{'spamlevel_def'}) {
|
|
push(@args, 0);
|
|
}
|
|
else {
|
|
$in{'spamlevel'} =~ /^[1-9]\d*$/ ||
|
|
&error($text{'spam_elevel'});
|
|
push(@args, $in{'spamlevel'});
|
|
}
|
|
}
|
|
&$func(@args);
|
|
}
|
|
|
|
&obtain_lock_spam($d);
|
|
&obtain_lock_cron($d);
|
|
if ($d->{'spam'}) {
|
|
$d->{'spam_white'} = $in{'spam_white'};
|
|
&update_spam_whitelist($d);
|
|
&save_domain($d);
|
|
}
|
|
|
|
# Save spam deletion field
|
|
$auto = undef;
|
|
if ($in{'clear'} == 1) {
|
|
$in{'days'} =~ /^\d+$/ && $in{'days'} > 0 ||
|
|
&error($text{'spam_edays'});
|
|
$auto = { 'days' => $in{'days'} };
|
|
}
|
|
elsif ($in{'clear'} == 2) {
|
|
$in{'size'} =~ /^\d+$/ || &error($text{'spam_esize'});
|
|
$auto = { 'size' => $in{'size'}*$in{'size_units'} };
|
|
}
|
|
&save_domain_spam_autoclear($d, $auto);
|
|
&release_lock_spam($d);
|
|
&release_lock_cron($d);
|
|
|
|
&run_post_actions();
|
|
|
|
# All done
|
|
&webmin_log("spam", "domain", $d->{'dom'});
|
|
&domain_redirect($d);
|
|
|