\n";
# Run the before command
local @secs;
foreach $g (&list_groups()) {
@mems = split(/,/, $g->{'members'});
if (&indexof($user->{'user'}, @mems) >= 0) {
push(@secs, $g->{'gid'});
}
}
&set_user_envs($user, 'DELETE_USER', undef, \@secs);
$merr = &making_changes();
&error(&text('usave_emaking', "$merr"))
if (defined($merr));
# Go ahead and do it!
if ($mconfig{'default_other'}) {
print "$text{'udel_other'}
\n";
local $error_must_die = 1;
eval { &other_modules("useradmin_delete_user",$user); };
if ($@) {
print &text('udel_failed', $@),"\n";
}
else {
print "$text{'udel_done'}
\n";
}
}
# Delete from the LDAP db
&lock_user_files();
print "$text{'udel_pass'}
\n";
&delete_user($user);
print "$text{'udel_done'}
\n";
# Delete from groups
print "$text{'udel_groups'}
\n";
foreach $g (&list_groups()) {
@mems = split(/,/, $g->{'members'});
$idx = &indexof($user->{'user'}, @mems);
if ($idx >= 0) {
splice(@mems, $idx, 1);
%newg = %$g;
$newg{'members'} = join(',', @mems);
&modify_group($g, \%newg);
}
$mygroup = $g if ($g->{'group'} eq $user->{'user'});
}
print "$text{'udel_done'}
\n";
# Delete private group
if ($mygroup && !$mygroup->{'members'}) {
local $another;
foreach $ou (&list_users()) {
$another = $ou if ($ou->{'gid'} == $mygroup->{'gid'});
}
if (!$another) {
print "$text{'udel_ugroup'}
\n";
&delete_group($mygroup);
print "$text{'udel_done'}
\n";
}
}
&unlock_user_files();
# Delete his addressbook entry
if ($config{'addressbook'}) {
print "$text{'udel_book'}
\n";
$err = &delete_ldap_subtree($ldap, "ou=$user->{'user'}, $config{'addressbook'}");
if ($err) {
print &text('udel_failed', $err),"
\n";
}
else {
print "$text{'udel_done'}
\n";
}
}
# Delete home directory
if ($in{'delhome'} && $user->{'home'} !~ /^\/+$/) {
print "$text{'udel_home'}
\n";
if ($config{'delete_only'}) {
&lock_file($user->{'home'});
&system_logged("find \"$user->{'home'}\" ! -type d -user $user->{'uid'} | xargs rm -f >/dev/null 2>&1");
&system_logged("find \"$user->{'home'}\" -type d -user $user->{'uid'} | xargs rmdir >/dev/null 2>&1");
rmdir($user->{'home'});
&unlock_file($user->{'home'});
}
else {
&system_logged("rm -rf \"$user->{'home'}\" >/dev/null 2>&1");
}
print "$text{'udel_done'}
\n";
# Delete his IMAP mailbox only if home gets
# deleted, too
if ($config{'imap_host'}) {
print "$text{'udel_imap'}
\n";
$imap = &imap_connect();
$rv = $imap->delete("user".
$config{'imap_foldersep'}.
$user->{'user'});
$imap->logout();
print "$text{'udel_done'}
\n";
}
}
&made_changes();
print "
\n";
}
&webmin_log("delete", "users", scalar(@dlist),
{ 'user' => [ map { $_->{'user'} } @dlist ] });
&ui_print_footer("", $text{'index_return'});
}
else {
# Sum up home directories
foreach $user (@dlist) {
if ($user->{'home'} ne "/" && -d $user->{'home'}) {
$size += &disk_usage_kb($user->{'home'});
}
}
# Ask if the user is sure
print &ui_confirmation_form(
"mass_delete_user.cgi",
&text('umass_sure', scalar(@dlist),
&nice_size($size*1024)),
[ [ "confirmed", 1 ],
map { [ "d", $_->{'user'} ] } @dlist ],
[ [ undef, $text{'umass_del1'} ],
[ "delhome", $text{'umass_del2'} ] ],
&ui_checkbox("others", 1, $text{'udel_dothers'},
$mconfig{'default_other'}),
$delete_sys && $delete_sys->{'user'} eq 'root' ?
"