3 # Delete a user, after asking for confirmation
5 require './cluster-useradmin-lib.pl';
6 &foreign_require("useradmin", "user-lib.pl");
8 &error_setup($text{'udel_err'});
9 @hosts = &list_useradmin_hosts();
10 @servers = &list_servers();
13 local ($u) = grep { $_->{'user'} eq $in{'user'} } @{$h->{'users'}};
19 %user || &error($text{'udel_ealready'});
21 # Setup error handler for down hosts
24 $del_error_msg = join("", @_);
26 &remote_error_setup(\&del_error);
29 &ui_print_header(undef, $text{'udel_title'}, "");
30 if ($in{'confirmed'}) {
31 # Do the deletion on all hosts
32 foreach $host (@hosts) {
33 $del_error_msg = undef;
34 ($serv) = grep { $_->{'id'} == $host->{'id'} } @servers;
35 ($user) = grep { $_->{'user'} eq $in{'user'} }
38 print "<b>",&text('udel_on', $serv->{'desc'} ? $serv->{'desc'} :
39 $serv->{'host'}),"</b><p>\n";
41 &remote_foreign_require($serv->{'host'},
42 "useradmin", "user-lib.pl");
45 print &text('udel_failed', $del_error_msg),"<p>\n";
49 local @ulist = &remote_foreign_call($serv->{'host'},
50 "useradmin", "list_users");
51 ($user) = grep { $_->{'user'} eq $in{'user'} } @ulist;
54 print "$text{'udel_gone'}<p>\n";
59 # Run the before command
60 &remote_eval($serv->{'host'}, "useradmin", <<EOF
61 \$ENV{'USERADMIN_USER'} = '$user->{'user'}';
62 \$ENV{'USERADMIN_UID'} = '$user->{'uid'}';
63 \$ENV{'USERADMIN_REAL'} = '$user->{'real'}';
64 \$ENV{'USERADMIN_SHELL'} = '$user->{'shell'}';
65 \$ENV{'USERADMIN_HOME'} = '$user->{'home'}';
66 \$ENV{'USERADMIN_GID'} = '$user->{'gid'}';
67 \$ENV{'USERADMIN_ACTION'} = 'DELETE_USER';
70 $merr = &remote_foreign_call($serv->{'host'}, "useradmin",
73 print &text('usave_emaking', "<tt>$merr</tt>"),"<p>\n";
79 # Delete from other modules
80 print "$text{'udel_dothers'}<br>\n";
81 &remote_foreign_call($serv->{'host'}, "useradmin",
82 "other_modules", "useradmin_delete_user",
84 print "$text{'udel_done'}<p>\n";
88 print "$text{'udel_pass'}<br>\n";
89 &remote_foreign_call($serv->{'host'}, "useradmin",
90 "delete_user", $user);
91 print "$text{'udel_done'}<p>\n";
93 # Delete from any secondary groups
94 print "$text{'udel_groups'}<br>\n";
95 local @glist = &remote_foreign_call($serv->{'host'},
96 "useradmin", "list_groups");
99 local @mems = split(/,/, $g->{'members'});
100 $idx = &indexof($user->{'user'}, @mems);
102 splice(@mems, $idx, 1);
103 $g->{'members'} = join(',', @mems);
104 &remote_foreign_call($serv->{'host'},
105 "useradmin", "modify_group", \%oldg, $g);
108 print "$text{'udel_done'}<p>\n";
110 # Delete home directory
111 if ($in{'servs'} || $host eq $hosts[0]) {
112 local $exists = &remote_eval($serv->{'host'},
113 "useradmin", "-d '$user{'home'}'");
114 if ($in{'delhome'} && $user{'home'} !~ /^\/+$/ &&
116 print "$text{'udel_home'}<br>\n";
117 &remote_eval($serv->{'host'}, "useradmin",
118 "system(\"rm -rf '$user{'home'}'\")");
119 print "$text{'udel_done'}<p>\n";
123 # Run the post-change command
124 &remote_foreign_call($serv->{'host'}, "useradmin",
127 # Update in local list
128 @ulist = grep { $_ ne $user } @ulist;
129 $host->{'users'} = \@ulist;
130 $host->{'groups'} = \@glist;
131 &save_useradmin_host($host);
134 &webmin_log("delete", "user", $user->{'user'}, $user);
136 &ui_print_footer("", $text{'index_return'});
139 # Ask if the user is sure
140 ($serv) = grep { $_->{'id'} == $host->{'id'} } @servers;
141 &remote_foreign_require($serv->{'host'}, "useradmin", "user-lib.pl");
142 print "<form action=delete_user.cgi>\n";
143 print "<input type=hidden name=user value=\"$user{'user'}\">\n";
144 print "<input type=hidden name=confirmed value=1>\n";
146 $size = &remote_foreign_call($serv->{'host'}, "useradmin",
147 "disk_usage_kb", $user{'home'});
149 if ($user{'home'} ne "/" && $size) {
150 print "<b>",&text('udel_sure', $user{'user'},
151 $user{'home'}, $size),"</b><p>\n";
152 print "<input type=submit value=\"$text{'udel_del1'}\">\n";
153 print "<input name=delhome type=submit ",
154 "value=\"$text{'udel_del2'}\"><br>\n";
155 print "<b>$text{'udel_servs'}</b>\n";
156 print "<input type=radio name=servs value=1> ",
157 "$text{'uedit_mall'}\n";
158 print "<input type=radio name=servs value=0 checked> ",
159 "$text{'uedit_mthis'}<br>\n";
162 print "<center><b>",&text('udel_sure2',
163 $user{'user'}),"</b><p>\n";
164 print "<input type=submit value=\"$text{'udel_del1'}\">\n";
166 if ($user{'user'} eq 'root') {
167 print "<b><font color=#ff0000>$text{'udel_root'}",
168 "</font></b></center>\n";
171 print "<br><b>$text{'udel_others'}</b>\n";
172 print "<input type=radio name=others value=1 checked> $text{'yes'}\n";
173 print "<input type=radio name=others value=0> $text{'no'}\n";
175 print "</form></center>\n";
176 &ui_print_footer("", $text{'index_return'});