Handle hostnames with upper-case letters
[webmin.git] / dhcpd / delete_all.cgi
1 #!/usr/local/bin/perl
2 # delete_all.cgi
3 # Delete a subnet, shared network or host
4
5 require './dhcpd-lib.pl';
6 require './params-lib.pl';
7 &ReadParse();
8 if ($in{'cancel'}) {
9         &redirect("");
10         exit;
11         }
12 &lock_file($config{'dhcpd_conf'});
13 $par = &get_parent_config();
14 foreach $i ($in{'sidx'}, $in{'uidx'}) {
15         if ($i ne "") {
16                 $par = $par->{'members'}->[$i];
17                 }
18         }
19 $parconf = $par->{'members'};
20 $to_del = $parconf->[$in{'idx'}];
21 @host = &find("host", $to_del->{'members'});
22 @group = &find("group", $to_del->{'members'});
23 @subn = &find("subnet", $to_del->{'members'});
24
25 # check acls
26 %access = &get_module_acl();
27 &error_setup($text{'eacl_aviol'});
28 if ($to_del->{'name'} eq "group") {
29         &error("$text{'eacl_np'} $text{'eacl_pdg'}")
30                 if !&can('rw', \%access, $to_del, 1);
31         }
32 elsif ($to_del->{'name'} eq "subnet") {
33         $type = 'sub';
34         &error("$text{'eacl_np'} $text{'eacl_pds'}")
35                 if !&can('rw', \%access, $to_del, 1);
36         foreach $g (@group) {
37                 &error("$text{'eacl_np'} $text{'eacl_pdg'}")
38                         if !&can('rw', \%access, $g, 1);
39                 }
40         }
41 elsif ($to_del->{'name'} eq "shared-network") {
42         &error("$text{'eacl_np'} $text{'eacl_pdn'}")
43                 if !&can('rw', \%access, $to_del, 1);
44         foreach $s (@subn) {
45                 &error("$text{'eacl_np'} $text{'eacl_pds'}")
46                         if !&can('rw', \%access, $s, 1);
47                 }
48         foreach $g (@group) {
49                 &error("$text{'eacl_np'} $text{'eacl_pdg'}")
50                         if !&can('rw', \%access, $g, 1);
51                 }
52         }
53 else {
54         &error($text{'cdel_eunknown'});
55         }
56
57 foreach $h (@host) {
58         &error("$text{'eacl_np'} $text{'eacl_pdh'}")
59                 if !&can('rw', \%access, $h, 1);
60         }
61
62 if ($type) {
63         &drop_dhcpd_acl($type, \%access, $to_del);
64         }
65 &save_directive($par, [ $to_del ], [ ], 0);
66 &flush_file_lines();
67 &unlock_file($config{'dhcpd_conf'});
68 if ($to_del->{'name'} eq "group") {
69         @count = &find("host", $group->{'members'});
70         &webmin_log('delete', 'group', join(",", map { $_->{'values'}->[0] } @count), \%in);
71         }
72 elsif ($to_del->{'name'} eq "subnet") {
73         &webmin_log('delete', 'subnet', "$sub->{'values'}->[0]/$sub->{'values'}->[2]", \%in);
74         }
75 elsif ($to_del->{'name'} eq "shared") {
76         &webmin_log('delete', 'shared', $sha->{'values'}->[0], \%in);
77         }
78
79 &redirect("");