%PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
Server IP : 49.231.201.246 / Your IP : 216.73.216.149 Web Server : Apache/2.4.18 (Ubuntu) System : User : root ( 0) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : exec,passthru,mail,shell_exec,system,proc_open,popen,ini_alter,dl,proc_close,curl_exec,curl_multi_exec,readfile,parse_ini_file,escapeshellarg,escapeshellcmd,show_source,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,mail,php_uname,phpinfo MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/webmin/ldap-useradmin/ |
Upload File : |
#!/usr/bin/perl # mass_delete_user.cgi # Delete multiple users, after asking for confirmation require './ldap-useradmin-lib.pl'; &ReadParse(); $ldap = &ldap_connect(); %ulist = map { $_->{'user'}, $_ } &list_users(); &error_setup($text{'umass_err'}); foreach $name (split(/\0/, $in{'d'})) { $user = $ulist{$name}; if ($user) { &can_edit_user($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 "<b>",&text('dmass_doing', $user->{'user'}),"</b><br>\n"; print "<ul>\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, 'MODIFY_USER', undef, \@secs); $merr = &making_changes(); &error(&text('usave_emaking', "<tt>$merr</tt>")) if (defined($merr)); # Do it &lock_user_files(); print "$text{'dmass_pass'}<br>\n"; if ($user->{'pass'} !~ /^$useradmin::disable_string/) { $user->{'pass'} = $useradmin::disable_string.$user->{'pass'}; &modify_user($user, $user); print "$text{'udel_done'}<p>\n"; } else { print "$text{'dmass_already'}<p>\n"; } &unlock_user_files(); &made_changes(); print "</ul>\n"; } &webmin_log("disable", "users", scalar(@dlist), { 'user' => [ map { $_->{'user'} } @dlist ] }); &ui_print_footer("", $text{'index_return'}); } else { # Ask if the user is sure 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 "<b>",&text('emass_doing', $user->{'user'}),"</b><br>\n"; print "<ul>\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, 'MODIFY_USER', undef, \@secs); $merr = &making_changes(); &error(&text('usave_emaking', "<tt>$merr</tt>")) if (defined($merr)); # Do it &lock_user_files(); print "$text{'emass_pass'}<br>\n"; if ($user->{'pass'} =~ s/^$useradmin::disable_string//) { &modify_user($user, $user); print "$text{'udel_done'}<p>\n"; } else { print "$text{'emass_already'}<p>\n"; } &unlock_user_files(); &made_changes(); print "</ul>\n"; } &webmin_log("enable", "users", scalar(@dlist), { 'user' => [ map { $_->{'user'} } @dlist ] }); &ui_print_footer("", $text{'index_return'}); } else { # Deleting a bunch of users &ui_print_unbuffered_header(undef, $text{'umass_title'}, ""); if ($in{'confirmed'}) { foreach $user (@dlist) { # Show username print "<b>",&text('umass_doing', $user->{'user'}),"</b><br>\n"; print "<ul>\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', "<tt>$merr</tt>")) if (defined($merr)); # Go ahead and do it! if ($mconfig{'default_other'}) { print "$text{'udel_other'}<br>\n"; local $error_must_die = 1; eval { &other_modules("useradmin_delete_user",$user); }; if ($@) { print &text('udel_failed', $@),"<p>\n"; } else { print "$text{'udel_done'}<p>\n"; } } # Delete from the LDAP db &lock_user_files(); print "$text{'udel_pass'}<br>\n"; &delete_user($user); print "$text{'udel_done'}<p>\n"; # Delete from groups print "$text{'udel_groups'}<br>\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'}<p>\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'}<br>\n"; &delete_group($mygroup); print "$text{'udel_done'}<p>\n"; } } &unlock_user_files(); # Delete his addressbook entry if ($config{'addressbook'}) { print "$text{'udel_book'}<br>\n"; $err = &delete_ldap_subtree($ldap, "ou=$user->{'user'}, $config{'addressbook'}"); if ($err) { print &text('udel_failed', $err),"<p>\n"; } else { print "$text{'udel_done'}<p>\n"; } } # Delete home directory if ($in{'delhome'} && $user->{'home'} !~ /^\/+$/) { print "$text{'udel_home'}<br>\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'}<p>\n"; # Delete his IMAP mailbox only if home gets # deleted, too if ($config{'imap_host'}) { print "$text{'udel_imap'}<br>\n"; $imap = &imap_connect(); $rv = $imap->delete("user". $config{'imap_foldersep'}. $user->{'user'}); $imap->logout(); print "$text{'udel_done'}<p>\n"; } } &made_changes(); print "</ul>\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' ? "<font color=#ff0000>$text{'udel_root'}</font>" : "" ); &ui_print_footer("", $text{'index_return'}); } }