mirror of
https://github.com/webmin/webmin.git
synced 2025-07-20 16:48:46 +00:00
69 lines
2.0 KiB
Perl
Executable File
69 lines
2.0 KiB
Perl
Executable File
#!/usr/local/bin/perl
|
|
# save_access.cgi
|
|
# Save, create or delete an access rule
|
|
|
|
require './sendmail-lib.pl';
|
|
require './access-lib.pl';
|
|
&ReadParse();
|
|
$access{'access'} || &error($text{'access_ecannot'});
|
|
$conf = &get_sendmailcf();
|
|
$afile = &access_file($conf);
|
|
&lock_file($afile);
|
|
($adbm, $adbmtype) = &access_dbm($conf);
|
|
@accs = &list_access($afile);
|
|
if (!$in{'new'}) {
|
|
$a = $accs[$in{'num'}];
|
|
&can_edit_access($a) ||
|
|
&error($text{'sform_ecannot'});
|
|
}
|
|
|
|
if ($in{'delete'}) {
|
|
# delete some rule
|
|
$loga = $a;
|
|
&delete_access($a, $afile, $adbm, $adbmtype);
|
|
}
|
|
else {
|
|
# Saving or creating.. check inputs
|
|
$whatfailed = "Failed to save spam control rule";
|
|
$from = $in{'from'};
|
|
$in{'from_type'} == 0 && $from !~ /^[^\@ ]+\@[A-z0-9\.\-]+$/ &&
|
|
&error(&text('ssave_etype0', $from));
|
|
$in{'from_type'} == 1 && $from !~ /^[0-9\.]+$/ &&
|
|
&error(&text('ssave_etype1', $from));
|
|
$in{'from_type'} == 2 && $from !~ /^[^\@ ]+$/ &&
|
|
&error(&text('ssave_etype2', $from));
|
|
$in{'from_type'} == 3 && $from !~ /^[A-z0-9\.\-]+$/ &&
|
|
&error(&text('ssave_etype3', $from));
|
|
$from .= '@' if ($in{'from_type'} == 2);
|
|
|
|
if ($in{'new'} || uc($from) ne uc($a->{'from'}) ||
|
|
$in{'tag'} ne $a->{'tag'}) {
|
|
# Is this name taken?
|
|
local ($same) = grep { uc($_->{'from'}) eq uc($from) &&
|
|
$_->{'tag'} eq $in{'tag'} } @accs;
|
|
$same && &error(&text('ssave_ealready', $from));
|
|
}
|
|
|
|
if ($in{'action'}) { $action = $in{'action'}; }
|
|
else {
|
|
$in{'err'} =~ /^\d\d\d$/ ||
|
|
&error(&text('ssave_ecode', $in{'err'}));
|
|
$action = "$in{'err'} $in{'msg'}";
|
|
}
|
|
|
|
%newa = ( 'from', $from,
|
|
'action', $action,
|
|
'tag', $in{'tag'},
|
|
'cmt', $in{'cmt'} );
|
|
&can_edit_access(\%newa) ||
|
|
&error($text{'ssave_ecannot2'});
|
|
if ($in{'new'}) { &create_access(\%newa, $afile, $adbm, $adbmtype); }
|
|
else { &modify_access($a, \%newa, $afile, $adbm, $adbmtype); }
|
|
$loga = \%newa;
|
|
}
|
|
&unlock_file($afile);
|
|
&webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'modify',
|
|
"access", $loga->{'from'}, $loga);
|
|
&redirect("list_access.cgi");
|
|
|