mirror of
https://github.com/webmin/webmin.git
synced 2025-07-23 00:30:33 +00:00
84 lines
2.2 KiB
Perl
Executable File
84 lines
2.2 KiB
Perl
Executable File
#!/usr/local/bin/perl
|
|
# save.cgi
|
|
# Create a new tunnel device
|
|
|
|
require './cipe-vpn-lib.pl';
|
|
&ReadParse();
|
|
&error_setup($text{'save_err'});
|
|
$dev = &get_config($in{'dev'}) if (!$in{'new'});
|
|
|
|
if ($in{'delete'}) {
|
|
# Just delete this tunnel
|
|
# XXX check if in use?
|
|
&delete_config($dev);
|
|
}
|
|
else {
|
|
# Validate and store inputs
|
|
$dev->{'desc'} = $in{'desc'};
|
|
&check_ipaddress($in{'ipaddr'}) || &error($text{'save_eipaddr'});
|
|
$dev->{'ipaddr'} = $in{'ipaddr'};
|
|
&check_ipaddress($in{'ptpaddr'}) || &error($text{'save_eptpaddr'});
|
|
$dev->{'ptpaddr'} = $in{'ptpaddr'};
|
|
&parse_address("me", 1);
|
|
&parse_address("peer", 0);
|
|
$in{'key'} =~ /^[a-z0-9]{32,}$/i || &error($text{'save_ekey'});
|
|
$dev->{'key'} = $in{'key'};
|
|
$in{'def_def'} || &check_ipaddress($in{'def'}) ||
|
|
&error($text{'save_edef'});
|
|
$dev->{'def'} = $in{'def_def'} ? undef : $in{'def'};
|
|
for($i=0; defined($t = $in{"type_$i"}); $i++) {
|
|
next if (!$t);
|
|
if ($t == 1) {
|
|
&check_ipaddress($in{"net_$i"}) ||
|
|
&error(&text('save_enet', $i+1));
|
|
&check_ipaddress($in{"mask_$i"}) ||
|
|
&error(&text('save_emask', $i+1));
|
|
$in{"gw_def_$i"} || &check_ipaddress($in{"gw_$i"}) ||
|
|
&error(&text('save_egw', $i+1));
|
|
push(@route, [ 1, $in{"net_$i"}, $in{"mask_$i"},
|
|
$in{"gw_def_$i"} ? 'GW' : $in{"gw_$i"} ]);
|
|
}
|
|
else {
|
|
&check_ipaddress($in{"net_$i"}) ||
|
|
&error(&text('save_ehost', $i+1));
|
|
$in{"mask_$i"} && &error(&text('save_emask2', $i+1));
|
|
$in{"gw_def_$i"} || &check_ipaddress($in{"gw_$i"}) ||
|
|
&error(&text('save_egw2', $i+1));
|
|
push(@route, [ 2, $in{"net_$i"}, "255.255.255.255",
|
|
$in{"gw_def_$i"} ? 'GW' : $in{"gw_$i"} ]);
|
|
}
|
|
}
|
|
$dev->{'route'} = \@route;
|
|
|
|
# Create or update
|
|
$dev->{'device'} = $in{'dev'};
|
|
if ($in{'new'}) {
|
|
$dev->{'dynip'} = 'yes';
|
|
$dev->{'maxerr'} = -1;
|
|
}
|
|
&save_config($dev);
|
|
}
|
|
&redirect("");
|
|
|
|
# parse_address(name, optional)
|
|
sub parse_address
|
|
{
|
|
local @rv;
|
|
if ($in{"$_[0]_ip_def"}) {
|
|
push(@rv, "0.0.0.0");
|
|
}
|
|
else {
|
|
local $a = $in{"$_[0]_ip"};
|
|
&to_ipaddress($a) ||
|
|
&error(&text('save_eaddr', $a));
|
|
push(@rv, $a);
|
|
}
|
|
if (!$in{"$_[0]_port_def"}) {
|
|
local $p = $in{"$_[0]_port"};
|
|
$p =~ /^\d+$/ || &error(&text('save_eport', $p));
|
|
push(@rv, $p);
|
|
}
|
|
$dev->{$_[0]} = join(":", @rv);
|
|
}
|
|
|