#!/usr/local/bin/perl # delete_user.cgi # Delete a user, after asking for confirmation require './cluster-useradmin-lib.pl'; &foreign_require("useradmin", "user-lib.pl"); &ReadParse(); &error_setup($text{'udel_err'}); @hosts = &list_useradmin_hosts(); @servers = &list_servers(); foreach $h (@hosts) { local ($u) = grep { $_->{'user'} eq $in{'user'} } @{$h->{'users'}}; if ($u) { %user = %$u; last; } } %user || &error($text{'udel_ealready'}); # Setup error handler for down hosts sub del_error { $del_error_msg = join("", @_); } &remote_error_setup(\&del_error); $| = 1; &ui_print_header(undef, $text{'udel_title'}, ""); if ($in{'confirmed'}) { # Do the deletion on all hosts foreach $host (@hosts) { $del_error_msg = undef; ($serv) = grep { $_->{'id'} == $host->{'id'} } @servers; ($user) = grep { $_->{'user'} eq $in{'user'} } @{$host->{'users'}}; next if (!$user); print "",&text('udel_on', $serv->{'desc'} ? $serv->{'desc'} : $serv->{'host'}),"
\n"; print "
\n"; print "
\n";
print "\n";
next;
}
# Run the before command
&remote_eval($serv->{'host'}, "useradmin", < \n";
print "\n";
next;
}
if ($in{'others'}) {
# Delete from other modules
print "$text{'udel_dothers'} \n";
}
# Delete the user
print "$text{'udel_pass'} \n";
# Delete from any secondary groups
print "$text{'udel_groups'} \n";
# Delete home directory
if ($in{'servs'} || $host eq $hosts[0]) {
local $exists = &remote_eval($serv->{'host'},
"useradmin", "-d '$user{'home'}'");
if ($in{'delhome'} && $user{'home'} !~ /^\/+$/ &&
$exists) {
print "$text{'udel_home'} \n";
}
}
# Run the post-change command
&remote_foreign_call($serv->{'host'}, "useradmin",
"made_changes");
# Update in local list
@ulist = grep { $_ ne $user } @ulist;
$host->{'users'} = \@ulist;
$host->{'groups'} = \@glist;
&save_useradmin_host($host);
print "\n";
}
&webmin_log("delete", "user", $user->{'user'}, $user);
&ui_print_footer("", $text{'index_return'});
}
else {
# Ask if the user is sure
($serv) = grep { $_->{'id'} == $host->{'id'} } @servers;
&remote_foreign_require($serv->{'host'}, "useradmin", "user-lib.pl");
print "
\n";
&remote_foreign_call($serv->{'host'}, "useradmin",
"other_modules", "useradmin_delete_user",
$user);
print "$text{'udel_done'}
\n";
&remote_foreign_call($serv->{'host'}, "useradmin",
"delete_user", $user);
print "$text{'udel_done'}
\n";
local @glist = &remote_foreign_call($serv->{'host'},
"useradmin", "list_groups");
foreach $g (@glist) {
local %oldg = %$g;
local @mems = split(/,/, $g->{'members'});
$idx = &indexof($user->{'user'}, @mems);
if ($idx >= 0) {
splice(@mems, $idx, 1);
$g->{'members'} = join(',', @mems);
&remote_foreign_call($serv->{'host'},
"useradmin", "modify_group", \%oldg, $g);
}
}
print "$text{'udel_done'}
\n";
&remote_eval($serv->{'host'}, "useradmin",
"system(\"rm -rf '$user{'home'}'\")");
print "$text{'udel_done'}