Current File : //proc/thread-self/root/usr/share/webmin/ppp-client/save.cgi |
#!/usr/bin/perl
# save_dialer.cgi
# Save, create or delete a dialer configuration
require './ppp-client-lib.pl';
&ReadParse();
$conf = &get_config();
$dialer = $conf->[$in{'idx'}] if (!$in{'new'});
&lock_file($config{'file'});
if ($in{'delete'}) {
# Check for any dependencies?
&error_setup($text{'save_err2'});
foreach $c (@$conf) {
if (lc($c->{'values'}->{'inherits'}) eq lc($dialer->{'name'})) {
&error(&text('save_einherits',
&dialer_name($c->{'name'})));
}
}
# Just delete this dialer
&delete_dialer($dialer);
}
else {
# Validate and store basic inputs
&error_setup($text{'save_err'});
if (defined($in{'dialer'})) {
$in{'dialer'} =~ /^[^\[\]]+$/ || &error($text{'save_ename'});
$dialer->{'name'} = "Dialer $in{'dialer'}";
}
elsif (defined($in{'name'})) {
$in{'name'} =~ /^[^\[\]]+$/ || &error($text{'save_ename'});
$dialer->{'name'} = $in{'name'};
}
local ($clash) = grep { lc($_->{'name'}) eq
lc($dialer->{'name'}) } @$conf;
if ($clash && $clash ne $dialer) {
&error($text{'save_eclash'});
}
&parse_opt("Phone", \&check_phone, $text{'save_ephone'});
&parse_opt("Username");
&parse_opt("Password");
&parse_opt("Dial Prefix", \&check_phone, $text{'save_eprefix'});
&parse_yes_no("Stupid Mode");
for($i=1; $i<=4; $i++) {
local $other = $in{"other_$i"};
if ($other eq '') {
&set_config("Phone$i");
}
else {
&check_phone($other) || &error(&text('save_eother',$i));
&set_config("Phone$i", $other);
}
}
&set_config("Inherits", $in{'inherits_def'} ? undef : $in{'inherits'});
# Validate and store modem options
if ($in{'modem'} eq '*') {
-r $in{'otherm'} || &error($text{'save_eotherm'});
&set_config("Modem", $in{'otherm'});
}
elsif ($in{'modem'} eq '') {
&set_config("Modem");
}
else {
&set_config("Modem", $in{'modem'});
}
&parse_opt("Baud", \&check_number, $text{'save_ebaud'});
for($i=1; $i<=9; $i++) {
if ($in{"init_$i"} eq '') {
&set_config("Init$i");
}
else {
&set_config("Init$i", $in{"init_$i"});
}
}
&parse_yes_no("Carrier Check");
&parse_yes_no("Abort on Busy");
&parse_opt("Dial Attempts", \&check_number, $text{'save_edial'});
&parse_yes_no("Abort on No Dialtone");
# Store networking options
&parse_yes_no("Auto DNS");
&parse_yes_no("Auto Reconnect");
&parse_opt("Idle Seconds", \&check_number, $text{'save_eidle'});
# Create or update the dialer
if ($in{'new'}) {
&create_dialer($dialer);
}
else {
&update_dialer($dialer);
}
}
&unlock_file($config{'file'});
delete($dialer->{'values'}->{'password'});
&webmin_log($in{'new'} ? "create" : $in{'delete'} ? "delete" : "update",
"dialer", $dialer->{'name'}, $dialer->{'values'});
&redirect("");
# parse_opt(name, [checker, error])
sub parse_opt
{
local $n = lc("$_[0]");
if ($in{$n."_def"}) {
&set_config($_[0]);
}
else {
local $func = $_[1];
!$func || &$func($in{$n}) || &error($_[2]);
&set_config($_[0], $in{$n});
}
}
# parse_yes_no(name)
sub parse_yes_no
{
local $n = lc("$_[0]");
if ($in{$n} == 1) {
&set_config($_[0], "on");
}
elsif ($in{$n} == 0) {
&set_config($_[0], "off");
}
else {
&set_config($_[0]);
}
}
# set_config(name, [value])
sub set_config
{
local $n = lc("$_[0]");
if (defined($_[1])) {
$dialer->{'values'}->{$n} = $_[1];
$dialer->{'onames'}->{$n} = $_[0];
}
else {
delete($dialer->{'values'}->{$n});
delete($dialer->{'onames'}->{$n});
}
}
sub check_phone
{
return $_[0] =~ /^[0-9 \+\*\#A-Z]+$/;
}
sub check_number
{
return $_[0] =~ /^\d+$/;
}