mirror of
https://github.com/webmin/webmin.git
synced 2025-08-16 14:51:18 +00:00
86 lines
1.9 KiB
Perl
Executable File
86 lines
1.9 KiB
Perl
Executable File
#!/usr/local/bin/perl
|
|
# Save access control options
|
|
|
|
require './frox-lib.pl';
|
|
&ReadParse();
|
|
&error_setup($text{'acl_err'});
|
|
$conf = &get_config();
|
|
|
|
&save_opt_textbox($conf, "Timeout", \&check_timeout);
|
|
&save_opt_textbox($conf, "MaxForks", \&check_forks);
|
|
&save_opt_textbox($conf, "MaxForksPerHost", \&check_forks);
|
|
&save_opt_textbox($conf, "MaxTransferRate", \&check_rate);
|
|
&save_yesno($conf, "DoNTP");
|
|
&save_opt_textbox($conf, "NTPAddress", \&check_ntp);
|
|
|
|
for($i=0; defined($in{"action_$i"}); $i++) {
|
|
next if (!$in{"action_$i"});
|
|
local @val;
|
|
push(@val, $in{"action_$i"});
|
|
if ($in{"src_${i}_def"}) {
|
|
push(@val, "*");
|
|
}
|
|
else {
|
|
&valid_srcdest($in{"src_$i"}) ||
|
|
&error(&text('acl_esrc', $i+1));
|
|
push(@val, $in{"src_$i"});
|
|
}
|
|
push(@val, "-");
|
|
if ($in{"dest_${i}_def"}) {
|
|
push(@val, "*");
|
|
}
|
|
else {
|
|
&valid_srcdest($in{"dest_$i"}) ||
|
|
&error(&text('acl_edest', $i+1));
|
|
push(@val, $in{"dest_$i"});
|
|
}
|
|
if (!$in{"ports_${i}_def"}) {
|
|
foreach $p (split(/,/, $in{"ports_$i"})) {
|
|
$p =~ /^\d+$/ || $p =~ /^\d+\-\d+$/ ||
|
|
&error(&text('acl_eports', $i+1));
|
|
}
|
|
push(@val, $in{"ports_$i"});
|
|
}
|
|
push(@acl, join(" ", @val));
|
|
}
|
|
@acl || &error($text{'acl_enone'});
|
|
&save_directive($conf, "ACL", \@acl);
|
|
|
|
&lock_file($config{'frox_conf'});
|
|
&flush_file_lines();
|
|
&unlock_file($config{'frox_conf'});
|
|
&webmin_log("acl");
|
|
&redirect("");
|
|
|
|
sub check_timeout
|
|
{
|
|
return $_[0] =~ /^\d+$/ ? undef : $text{'acl_etimeout'};
|
|
}
|
|
|
|
sub check_forks
|
|
{
|
|
return $_[0] =~ /^\d+$/ ? undef : $text{'acl_eforks'};
|
|
}
|
|
|
|
sub check_rate
|
|
{
|
|
return $_[0] =~ /^\d+$/ ? undef : $text{'acl_erate'};
|
|
}
|
|
|
|
sub check_ntp
|
|
{
|
|
return $_[0] =~ /^(\S+):(\d+)$/ && &to_ipaddress("$1") ? undef
|
|
: $text{'acl_entp'};
|
|
}
|
|
|
|
|
|
sub valid_srcdest
|
|
{
|
|
return &to_ipaddress($_[0]) ||
|
|
($_[0] =~ /^([0-9\.]+)\/(\d+)$/ &&
|
|
&check_ipaddress($1) && $2 > 0 && $2 <= 32) ||
|
|
($_[0] =~ /^([0-9\.]+)\/([0-9\.]+)$/ &&
|
|
&check_ipaddress($1) && &check_ipaddress($2));
|
|
}
|
|
|