3 # Delete a user, after asking for confirmation
5 require './user-lib.pl';
8 @ulist = &list_users();
9 ($user) = grep { $_->{'user'} eq $in{'user'} } @ulist;
10 $user || &error($text{'uedit_egone'});
11 &error_setup($text{'udel_err'});
12 &can_edit_user(\%access, $user) || &error($text{'udel_euser'});
13 $access{'udelete'} || &error($text{'udel_euser'});
16 &ui_print_header(undef, $text{'udel_title'}, "");
18 if (!$config{'delete_root'} && $user->{'uid'} <= 10) {
19 print "<p> <b>$text{'udel_eroot'}</b> <p>\n";
21 &footer("", $text{'index_return'});
25 # Check for repeat click
26 if ($user->{'user'} ne $in{'user'} || $in{'user'} eq '') {
27 print "<p> <b>$text{'udel_ealready'}</b> <p>\n";
29 &footer("", $text{'index_return'});
33 if ($in{'confirmed'}) {
34 # Run the before command
36 foreach $g (&list_groups()) {
37 @mems = split(/,/, $g->{'members'});
38 if (&indexof($user->{'user'}, @mems) >= 0) {
39 push(@secs, $g->{'gid'});
44 &set_user_envs($user, 'DELETE_USER', undef, \@secs);
45 $merr = &making_changes();
46 &error(&text('usave_emaking', "<tt>$merr</tt>")) if (defined($merr));
48 # Delete in other modules first
49 $in{'others'} = !$access{'dothers'} if ($access{'dothers'} != 1);
51 print "$text{'udel_other'}<br>\n";
52 local $error_must_die = 1;
53 eval { &other_modules("useradmin_delete_user", $user); };
55 print &text('udel_failed', $@),"<p>\n";
58 print "$text{'udel_done'}<p>\n";
63 print "$text{'udel_pass'}<br>\n";
65 print "$text{'udel_done'}<p>\n";
67 # Delete the user from other groups
68 print "$text{'udel_groups'}<br>\n";
69 foreach $g (&list_groups()) {
70 @mems = split(/,/, $g->{'members'});
71 $idx = &indexof($user->{'user'}, @mems);
73 splice(@mems, $idx, 1);
75 $newg{'members'} = join(',', @mems);
76 &modify_group($g, \%newg);
78 $mygroup = $g if ($g->{'group'} eq $user->{'user'});
80 print "$text{'udel_done'}<p>\n";
82 # Delete the user's personal group, if it has no other members
83 if ($mygroup && !$mygroup->{'members'}) {
85 foreach $ou (&list_users()) {
86 $another = $ou if ($ou->{'gid'} == $mygroup->{'gid'});
88 if (!$another && $in{'others'}) {
89 print "$text{'udel_ugroupother'}<br>\n";
90 local $error_must_die = 1;
91 eval { &other_modules("useradmin_delete_group",
94 print &text('udel_failed', $@),"<p>\n";
97 print "$text{'gdel_done'}<p>\n";
101 print "$text{'udel_ugroup'}<br>\n";
102 &delete_group($mygroup);
103 print "$text{'udel_done'}<p>\n";
106 &unlock_user_files();
108 if ($in{'delhome'} && $user->{'home'} !~ /^\/+$/ &&
109 $access{'delhome'} != 0) {
110 # Delete home directory
111 print "$text{'udel_home'}<br>\n";
112 &lock_file($user->{'home'});
113 &delete_home_directory($user);
114 &unlock_file($user->{'home'});
115 print "$text{'udel_done'}<p>\n";
120 %p = ( %in, %$user );
122 &webmin_log("delete", "user", $user->{'user'}, \%p);
125 &ui_print_footer("", $text{'index_return'});
128 # Check if something has changed
129 if ($user->{'user'} ne $in{'user'}) {
130 print "<b>$text{'udel_echanged'}</b> <p>\n";
131 &ui_print_footer("", $text{'index_return'});
135 # Ask if the user is sure
137 if ($user->{'home'} ne "/" && -d $user->{'home'} &&
138 $access{'delhome'} != 0) {
139 # Has a home directory, so check for files owned by others
140 $size = &disk_usage_kb($user->{'home'});
141 $msg = &text('udel_sure', &html_escape($user->{'user'}),
142 "<tt>".&html_escape($user->{'home'})."</tt>", &nice_size($size*1024));
143 if ($access{'delhome'} != 1) {
144 push(@buts, [ undef, $text{'udel_del1'} ]);
146 push(@buts, [ "delhome", $text{'udel_del2'} ]);
148 # check for files owned by other users
149 @others = &backquote_command("find ".quotemeta($user->{'home'}).
150 " ! -user $user->{'uid'} 2>/dev/null", 1);
154 $msg = &text('udel_sure2',&html_escape($user->{'user'}));
155 push(@buts, [ undef, $text{'udel_del1'} ]);
158 print &ui_confirmation_form("delete_user.cgi", $msg,
159 [ [ "user", $user->{'user'} ],
160 [ "confirmed", 1 ] ],
162 $access{'dothers'} == 1 ?
163 &ui_checkbox("others", 1, $text{'udel_dothers'},
164 $config{'default_other'}) : "",
165 (@others ? &text('udel_others', "<tt>".&html_escape($user->{'home'})."</tt>",
166 scalar(@others))."<p>" : "").
167 ($user->{'user'} eq 'root' ? $text{'udel_root'} : ""),
170 &ui_print_footer("", $text{'index_return'});