Files
webmin/cipe-vpn/save.cgi
2010-11-07 12:04:59 -08:00

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);
}