Handle hostnames with upper-case letters
[webmin.git] / dhcpd / save_pool.cgi
1 #!/usr/local/bin/perl
2 # save_pool.cgi
3 # Create, update or delete an address pool
4
5 require './dhcpd-lib.pl';
6 require './params-lib.pl';
7 &ReadParse();
8 &lock_file($config{'dhcpd_conf'});
9 $conf = &get_config();
10 if ($in{'sidx'} ne "") {
11         $sha = $conf->[$in{'sidx'}]; 
12         $sub = $sha->{'members'}->[$in{'uidx'}];
13         $indent = 2;
14         }
15 else {
16         $sub = $conf->[$in{'uidx'}];
17         $indent = 1;
18         }
19 if ($in{'new'}) {
20         $pool = { 'name' => 'pool',
21                   'type' => 1,
22                   'members' => [ ] };
23         }
24 else {
25         $pool = $sub->{'members'}->[$in{'idx'}];
26         }
27
28 # check acls
29 %access = &get_module_acl();
30 &error_setup($text{'eacl_aviol'});
31 &error("$text{'eacl_np'} $text{'eacl_pus'}") if !&can('rw', \%access, $sub);
32
33 # save
34 if ($in{'delete'}) {
35         # Delete this pool from it's subnet
36         &save_directive($sub, [ $pool ], [ ], 0);
37         }
38 else {
39         # Validate inputs
40         for($i=0; defined($low = $in{"range_low_$i"}); $i++) {
41                 next if (!$low);
42                 $hi = $in{"range_hi_$i"}; $dyn = $in{"range_dyn_$i"};
43                 &check_ipaddress($low) ||
44                         &error("'$low' $text{'ssub_invalidipr'}");
45                 !$hi || &check_ipaddress($hi) ||
46                         &error("'$hi' $text{'ssub_invalidipr'}");
47                 $rng = { 'name' => 'range',
48                          'values' => [ ($dyn ? "dynamic-bootp" : ()),
49                                        $low, ($hi ? $hi : ()) ] };
50                 push(@rng, $rng);
51                 }
52         &save_directive($pool, "range", \@rng, 1);
53         if($in{'failover_peer'}) {
54                 !&check_domain($in{'failover_peer'}) ||
55                         &error("'$in{'failover_peer'}' $text{'ssub_invalidfopeer'}");
56                 $in{'failover_peer'} = "\"$in{'failover_peer'}\"";      
57                 push(@failover_peer, { 'name' => 'failover peer',
58                                        'values' => [ $in{'failover_peer'} ] });
59         }
60         &save_directive($pool, "failover", \@failover_peer, 1);
61
62         $in{'allow'} =~ s/\r//g;
63         foreach $a (split(/\n/, $in{'allow'})) {
64                 push(@allow, { 'name' => 'allow', 'values' => [ $a ] });
65                 }
66         &save_directive($pool, "allow", \@allow, 1);
67         $in{'deny'} =~ s/\r//g;
68         foreach $a (split(/\n/, $in{'deny'})) {
69                 push(@deny, { 'name' => 'deny', 'values' => [ $a ] });
70                 }
71         &save_directive($pool, "deny", \@deny, 1);
72         &parse_params($pool, 0);
73
74         # Save or create the pool
75         if ($in{'new'}) {
76                 &save_directive($sub, [ ], [ $pool ], $indent);
77                 }
78         else {
79                 &save_directive($sub, [ $pool ], [ $pool ], $indent);
80                 }
81         }
82 &flush_file_lines();
83 &unlock_file($config{'dhcpd_conf'});
84 if ($sub->{'name'} eq 'subnet') {
85         &webmin_log('modify', 'subnet',
86                     "$sub->{'values'}->[0]/$sub->{'values'}->[2]", \%in);
87         &redirect("edit_subnet.cgi?sidx=$in{'sidx'}&idx=$in{'uidx'}");
88         }
89 else {
90         &webmin_log('modify', 'shared', $sub->{'values'}->[0], \%in);
91         &redirect("edit_shared.cgi?idx=$in{'uidx'}");
92         }
93
94