#!/usr/local/bin/perl # delete_group.cgi # Delete a group, after asking for confirmation require './cluster-useradmin-lib.pl'; &ReadParse(); &error_setup($text{'gdel_err'}); @hosts = &list_useradmin_hosts(); @servers = &list_servers(); foreach $h (@hosts) { local ($g) = grep { $_->{'group'} eq $in{'group'} } @{$h->{'groups'}}; if ($g) { %group = %$g; last; } } %group || &error($text{'gdel_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{'gdel_title'}, ""); if ($in{'confirmed'}) { # Do the deletion on all hosts foreach $host (@hosts) { $del_error_msg = undef; ($serv) = grep { $_->{'id'} == $host->{'id'} } @servers; ($group) = grep { $_->{'group'} eq $in{'group'} } @{$host->{'groups'}}; next if (!$group); print "",&text('gdel_on', $serv->{'desc'} ? $serv->{'desc'} : $serv->{'host'}),"
\n"; print "
\n"; print "
\n";
print "\n";
next;
}
# Delete from other modules
if ($in{'others'}) {
if (&supports_gothers($serv)) {
# Delete in other modules on the server
print "$text{'gdel_other'}
\n";
&remote_foreign_call($serv->{'host'},
"useradmin", "other_modules",
"useradmin_delete_group", $group);
print "$text{'gdel_done'}
\n"; } else { # Group syncing not supported print "$text{'gsave_nosync'}
\n";
}
}
# Run the pre-change command
&remote_eval($serv->{'host'}, "useradmin", < \n";
print "\n";
next;
}
# Delete the group
print "$text{'gdel_group'} \n";
# Run the post-change command
&remote_foreign_call($serv->{'host'}, "useradmin",
"made_changes");
# Update in local list
@glist = grep { $_ ne $group } @glist;
$host->{'groups'} = \@glist;
&save_useradmin_host($host);
print "\n";
}
&webmin_log("delete", "group", $group->{'group'}, $group);
&ui_print_footer("", $text{'index_return'});
}
else {
# Check if this is anyone's primary group
foreach $h (@hosts) {
foreach $u (@{$h->{'users'}}) {
if ($u->{'gid'} == $group{'gid'}) {
$puser = $u;
last;
}
}
}
if ($puser) {
print "",&text('gdel_eprimary', $puser->{'user'}),
" \n";
&ui_print_footer("", $text{'index_return'});
exit;
}
# Ask if the user is sure
print "
\n";
&remote_foreign_call($serv->{'host'}, "useradmin",
"delete_group", $group);
print "$text{'gdel_done'}