Handle hostnames with upper-case letters
[webmin.git] / cluster-useradmin / delete_group.cgi
1 #!/usr/local/bin/perl
2 # delete_group.cgi
3 # Delete a group, after asking for confirmation
4
5 require './cluster-useradmin-lib.pl';
6 &ReadParse();
7 &error_setup($text{'gdel_err'});
8 @hosts = &list_useradmin_hosts();
9 @servers = &list_servers();
10
11 foreach $h (@hosts) {
12         local ($g) = grep { $_->{'group'} eq $in{'group'} } @{$h->{'groups'}};
13         if ($g) {
14                 %group = %$g;
15                 last;
16                 }
17         }
18 %group || &error($text{'gdel_ealready'});
19
20 # Setup error handler for down hosts
21 sub del_error
22 {
23 $del_error_msg = join("", @_);
24 }
25 &remote_error_setup(\&del_error);
26
27 $| = 1;
28 &ui_print_header(undef, $text{'gdel_title'}, "");
29 if ($in{'confirmed'}) {
30         # Do the deletion on all hosts
31         foreach $host (@hosts) {
32                 $del_error_msg = undef;
33                 ($serv) = grep { $_->{'id'} == $host->{'id'} } @servers;
34                 ($group) = grep { $_->{'group'} eq $in{'group'} }
35                                      @{$host->{'groups'}};
36                 next if (!$group);
37                 print "<b>",&text('gdel_on', $serv->{'desc'} ? $serv->{'desc'} :
38                                              $serv->{'host'}),"</b><p>\n";
39                 print "<ul>\n";
40                 &remote_foreign_require($serv->{'host'},
41                                         "useradmin", "user-lib.pl");
42                 if ($del_error_msg) {
43                         # Host is down ..
44                         print &text('gdel_failed', $del_error_msg),"<p>\n";
45                         print "</ul>\n";
46                         next;
47                         }
48                 local @glist = &remote_foreign_call($serv->{'host'},
49                                         "useradmin", "list_groups");
50                 ($group) = grep { $_->{'group'} eq $in{'group'} } @glist;
51                 if (!$group) {
52                         # Already deleted?
53                         print "$text{'gdel_gone'}<p>\n";
54                         print "</ul>\n";
55                         next;
56                         }
57
58                 # Delete from other modules
59                 if ($in{'others'}) {
60                         if (&supports_gothers($serv)) {
61                                 # Delete in other modules on the server
62                                 print "$text{'gdel_other'}<br>\n";
63                                 &remote_foreign_call($serv->{'host'},
64                                         "useradmin", "other_modules",
65                                         "useradmin_delete_group", $group);
66                                 print "$text{'gdel_done'}<p>\n";
67                                 }
68                         else {
69                                 # Group syncing not supported
70                                 print "$text{'gsave_nosync'}<p>\n";
71                                 }
72                         }
73
74                 # Run the pre-change command
75                 &remote_eval($serv->{'host'}, "useradmin", <<EOF
76 \$ENV{'USERADMIN_GROUP'} = '$group->{'group'}';
77 \$ENV{'USERADMIN_ACTION'} = 'DELETE_GROUP';
78 EOF
79                 );
80                 $merr = &remote_foreign_call($serv->{'host'}, "useradmin",
81                                              "making_changes");
82                 if (defined($merr)) {
83                         print &text('usave_emaking', "<tt>$merr</tt>"),"<p>\n";
84                         print "</ul>\n";
85                         next;
86                         }
87
88                 # Delete the group
89                 print "$text{'gdel_group'}<br>\n";
90                 &remote_foreign_call($serv->{'host'}, "useradmin",
91                                      "delete_group", $group);
92                 print "$text{'gdel_done'}<p>\n";
93
94                 # Run the post-change command
95                 &remote_foreign_call($serv->{'host'}, "useradmin",
96                                      "made_changes");
97
98                 # Update in local list
99                 @glist = grep { $_ ne $group } @glist;
100                 $host->{'groups'} = \@glist;
101                 &save_useradmin_host($host);
102                 print "</ul>\n";
103                 }
104         &webmin_log("delete", "group", $group->{'group'}, $group);
105
106         &ui_print_footer("", $text{'index_return'});
107         }
108 else {
109         # Check if this is anyone's primary group
110         foreach $h (@hosts) {
111                 foreach $u (@{$h->{'users'}}) {
112                         if ($u->{'gid'} == $group{'gid'}) {
113                                 $puser = $u;
114                                 last;
115                                 }
116                         }
117                 }
118         if ($puser) {
119                 print "<b>",&text('gdel_eprimary', $puser->{'user'}),
120                       "</b><p>\n";
121                 &ui_print_footer("", $text{'index_return'});
122                 exit;
123                 }
124
125         # Ask if the user is sure
126         print "<form action=delete_group.cgi>\n";
127         print "<input type=hidden name=group value=\"$group{'group'}\">\n";
128         print "<input type=hidden name=confirmed value=1>\n";
129
130         print "<center><b>",&text('gdel_sure',
131                                    $group{'group'}),"</b>\n";
132         print "<input type=submit value=\"$text{'gdel_del'}\">\n";
133         print "<br><input type=checkbox name=others value=1 checked> ",
134               "$text{'gdel_dothers'}<br>\n";
135         print "</center><p>\n";
136         print "</form>\n";
137         &ui_print_footer("", $text{'index_return'});
138         }
139