Handle hostnames with upper-case letters
[webmin.git] / useradmin / mass_delete_group.cgi
1 #!/usr/local/bin/perl
2 # Delete multiple groups
3
4 require './user-lib.pl';
5 &ReadParse();
6 %glist = map { $_->{'group'}, $_ } &list_groups();
7 &error_setup($text{'gmass_err'});
8 foreach $name (split(/\0/, $in{'gd'})) {
9         $group = $glist{$name};
10         if ($group) {
11                 &can_edit_group(\%access, $group) ||
12                         &error(&text('gmass_egroup', $name));
13                 push(@dlist, $group);
14                 $delete_sys = $group if ($group->{'gid'} < 10 &&
15                     (!$delete_sys || $user->{'gid'} < $delete_sys->{'gid'}));
16                 }
17         }
18 @dlist || &error($text{'gmass_enone'});
19 $access{'gdelete'} || &error($text{'gdel_egroup'});
20
21 &ui_print_header(undef, $text{'gmass_title'}, "");
22
23 # Check for deletion of system group
24 if (!$config{'delete_root'} && $delete_sys) {
25         print "<p> <b>",&text('gmass_eroot',
26                               $delete_root->{'group'}),"</b> <p>\n";
27         &ui_print_footer("", $text{'index_return'});
28         exit;
29         }
30
31 if ($in{'confirmed'}) {
32         foreach $group (@dlist) {
33                 # Show group name
34                 print "<b>",&text('gmass_doing', $group->{'group'}),"</b><br>\n";
35                 print "<ul>\n";
36
37                 # Delete from other modules
38                 if ($in{'others'}) {
39                         print "$text{'gdel_other'}<br>\n";
40                         local $error_must_die = 1;
41                         eval { &other_modules("useradmin_delete_group", $group); };
42                         if ($@) {
43                                 print &text('udel_failed', $@),"<p>\n";
44                                 }
45                         else {
46                                 print "$text{'gdel_done'}<p>\n";
47                                 }
48                         }
49
50                 # Delete from group file
51                 &lock_user_files();
52                 print "$text{'gdel_group'}<br>\n";
53                 &set_group_envs($group, 'DELETE_GROUP');
54                 $merr = &making_changes();
55                 &error(&text('usave_emaking', "<tt>$merr</tt>")) if (defined($merr));
56
57                 &delete_group($group);
58                 &unlock_user_files();
59                 &made_changes();
60                 print "$text{'gdel_done'}<p>\n";
61
62                 print "</ul>\n";
63                 }
64
65         &webmin_log("delete", "group", $group->{'group'}, $group);
66
67         &ui_print_footer("", $text{'index_return'});
68         }
69 else {
70         foreach $group (@dlist) {
71                 # check if this is anyone's primary group
72                 foreach $u (&list_users()) {
73                         if ($u->{'gid'} == $group->{'gid'}) {
74                                 print "<b>",&text('gmass_eprimary',
75                                         $group->{'group'}, $u->{'user'}),
76                                         "</b> <p>\n";
77                                 &ui_print_footer("", $text{'index_return'});
78                                 exit;
79                                 }
80                         }
81                 }
82
83         # Ask if the user is sure
84         print &ui_confirmation_form("mass_delete_group.cgi",
85                 &text('gmass_sure', scalar(@dlist)),
86                 [ [ "confirmed", 1 ],
87                   map { [ "gd", $_->{'group'} ] } @dlist ],
88                 [ [ undef, $text{'gdel_del'} ] ],
89                 &ui_checkbox("others", 1, $text{'gdel_dothers'},
90                              $config{'default_other'}),
91                 );
92
93         &ui_print_footer("", $text{'index_return'});
94         }
95