Handle hostnames with upper-case letters
[webmin.git] / cipe-vpn / save.cgi
1 #!/usr/local/bin/perl
2 # save.cgi
3 # Create a new tunnel device
4
5 require './cipe-vpn-lib.pl';
6 &ReadParse();
7 &error_setup($text{'save_err'});
8 $dev = &get_config($in{'dev'}) if (!$in{'new'});
9
10 if ($in{'delete'}) {
11         # Just delete this tunnel
12         # XXX check if in use?
13         &delete_config($dev);
14         }
15 else {
16         # Validate and store inputs
17         $dev->{'desc'} = $in{'desc'};
18         &check_ipaddress($in{'ipaddr'}) || &error($text{'save_eipaddr'});
19         $dev->{'ipaddr'} = $in{'ipaddr'};
20         &check_ipaddress($in{'ptpaddr'}) || &error($text{'save_eptpaddr'});
21         $dev->{'ptpaddr'} = $in{'ptpaddr'};
22         &parse_address("me", 1);
23         &parse_address("peer", 0);
24         $in{'key'} =~ /^[a-z0-9]{32,}$/i || &error($text{'save_ekey'});
25         $dev->{'key'} = $in{'key'};
26         $in{'def_def'} || &check_ipaddress($in{'def'}) ||
27                 &error($text{'save_edef'});
28         $dev->{'def'} = $in{'def_def'} ? undef : $in{'def'};
29         for($i=0; defined($t = $in{"type_$i"}); $i++) {
30                 next if (!$t);
31                 if ($t == 1) {
32                         &check_ipaddress($in{"net_$i"}) ||
33                                 &error(&text('save_enet', $i+1));
34                         &check_ipaddress($in{"mask_$i"}) ||
35                                 &error(&text('save_emask', $i+1));
36                         $in{"gw_def_$i"} || &check_ipaddress($in{"gw_$i"}) ||
37                                 &error(&text('save_egw', $i+1));
38                         push(@route, [ 1, $in{"net_$i"}, $in{"mask_$i"},
39                                $in{"gw_def_$i"} ? 'GW' : $in{"gw_$i"} ]);
40                         }
41                 else {
42                         &check_ipaddress($in{"net_$i"}) ||
43                                 &error(&text('save_ehost', $i+1));
44                         $in{"mask_$i"} && &error(&text('save_emask2', $i+1));
45                         $in{"gw_def_$i"} || &check_ipaddress($in{"gw_$i"}) ||
46                                 &error(&text('save_egw2', $i+1));
47                         push(@route, [ 2, $in{"net_$i"}, "255.255.255.255",
48                                $in{"gw_def_$i"} ? 'GW' : $in{"gw_$i"} ]);
49                         }
50                 }
51         $dev->{'route'} = \@route;
52
53         # Create or update
54         $dev->{'device'} = $in{'dev'};
55         if ($in{'new'}) {
56                 $dev->{'dynip'} = 'yes';
57                 $dev->{'maxerr'} = -1;
58                 }
59         &save_config($dev);
60         }
61 &redirect("");
62
63 # parse_address(name, optional)
64 sub parse_address
65 {
66 local @rv;
67 if ($in{"$_[0]_ip_def"}) {
68         push(@rv, "0.0.0.0");
69         }
70 else {
71         local $a = $in{"$_[0]_ip"};
72         &to_ipaddress($a) ||
73                 &error(&text('save_eaddr', $a));
74         push(@rv, $a);
75         }
76 if (!$in{"$_[0]_port_def"}) {
77         local $p = $in{"$_[0]_port"};
78         $p =~ /^\d+$/ || &error(&text('save_eport', $p));
79         push(@rv, $p);
80         }
81 $dev->{$_[0]} = join(":", @rv);
82 }
83