#!/usr/local/bin/perl # mass_delete_user.cgi # Delete multiple users, after asking for confirmation require './user-lib.pl'; &ReadParse(); %ulist = map { $_->{'user'}, $_ } &list_users(); &error_setup($text{'umass_err'}); foreach $name (split(/\0/, $in{'d'})) { $user = $ulist{$name}; if ($user) { &can_edit_user(\%access, $user) || &error(&text('umass_euser', $name)); push(@dlist, $user); $delete_sys = $user if ($user->{'uid'} < 10 && (!$delete_sys || $user->{'uid'} < $delete_sys->{'uid'})); } } @dlist || &error($text{'umass_enone'}); if ($in{'disable'}) { # Disabling a bunch of users &ui_print_unbuffered_header(undef, $text{'dmass_title'}, ""); if ($in{'confirmed'}) { foreach $user (@dlist) { # Show username print "",&text('dmass_doing', $user->{'user'}),"
\n"; print "\n"; } &webmin_log("disable", "users", scalar(@dlist), { 'user' => [ map { $_->{'user'} } @dlist ] }); &ui_print_footer("", $text{'index_return'}); } else { # Ask if the user is sure he wants to disable print &ui_confirmation_form("mass_delete_user.cgi", &text('dmass_sure', scalar(@dlist)), [ [ "confirmed", 1 ], [ "disable", 1 ], map { [ "d", $_->{'user'} ] } @dlist ], [ [ undef, $text{'dmass_dis'} ] ], ); &ui_print_footer("", $text{'index_return'}); } } elsif ($in{'enable'}) { # Enabling a bunch of users &ui_print_unbuffered_header(undef, $text{'emass_title'}, ""); foreach $user (@dlist) { # Show username print "",&text('emass_doing', $user->{'user'}),"
\n"; print "\n"; } &webmin_log("enable", "users", scalar(@dlist), { 'user' => [ map { $_->{'user'} } @dlist ] }); &ui_print_footer("", $text{'index_return'}); } else { # Deleting a bunch of users $access{'udelete'} || &error($text{'udel_euser'}); &ui_print_unbuffered_header(undef, $text{'umass_title'}, ""); # Check for deletion of system user if (!$config{'delete_root'} && $delete_sys) { print "

",&text('umass_eroot', $delete_root->{'user'}),"

\n"; &ui_print_footer("", $text{'index_return'}); exit; } if ($in{'confirmed'}) { foreach $user (@dlist) { # Show username print "",&text('umass_doing', $user->{'user'}),"
\n"; print "

\n"; } &webmin_log("delete", "users", scalar(@dlist), { 'user' => [ map { $_->{'user'} } @dlist ] }); &ui_print_footer("", $text{'index_return'}); } else { # Ask if the user is sure @hids = ( [ "confirmed", 1 ] ); foreach $user (@dlist) { push(@hids, [ "d", $user->{'user'} ]); } # Sum up home directories foreach $user (@dlist) { if ($user->{'home'} ne "/" && -d $user->{'home'}) { $size += &disk_usage_kb($user->{'home'}); } } if ($access{'delhome'} == 1) { # Force home directory deletion push(@hids, [ "delhome", 1 ]); @buts = ( [ undef, $text{'umass_del2'} ] ); } elsif ($access{'delhome'} == 0) { # Never allow home directory deletion @buts = ( [ undef, $text{'umass_del1'} ] ); } else { # Give user a choice @buts = ( [ undef, $text{'umass_del1'} ], [ "delhome", $text{'umass_del2'} ] ); } # Show the warning print &ui_confirmation_form( "mass_delete_user.cgi", $size ? &text('umass_sure', scalar(@dlist), &nice_size($size*1024)) : &text('umass_sure2', scalar(@dlist)), \@hids, \@buts, $access{'dothers'} == 1 ? &ui_checkbox("others", 1, $text{'udel_dothers'}, $config{'default_other'}) : "", $delete_sys && $delete_sys->{'user'} eq 'root' ? $text{'udel_root'} : "", ); &ui_print_footer("", $text{'index_return'}); } }