Server IP : 103.119.228.120 / Your IP : 18.219.253.199 Web Server : Apache System : Linux v8.techscape8.com 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64 User : nobody ( 99) PHP Version : 5.6.40 Disable Function : shell_exec,symlink,system,exec,proc_get_status,proc_nice,proc_terminate,define_syslog_variables,syslog,openlog,closelog,escapeshellcmd,passthru,ocinum cols,ini_alter,leak,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dl,dll,myshellexec,proc_open,socket_bind,proc_close,escapeshellarg,parse_ini_filepopen,fpassthru,exec,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,proc_nice,proc_terminate,proc_get_status,proc_close,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,dl,symlink,shell_exec,system,dl,passthru,escapeshellarg,escapeshellcmd,myshellexec,c99_buff_prepare,c99_sess_put,fpassthru,getdisfunc,fx29exec,fx29exec2,is_windows,disp_freespace,fx29sh_getupdate,fx29_buff_prepare,fx29_sess_put,fx29shexit,fx29fsearch,fx29ftpbrutecheck,fx29sh_tools,fx29sh_about,milw0rm,imagez,sh_name,myshellexec,checkproxyhost,dosyayicek,c99_buff_prepare,c99_sess_put,c99getsource,c99sh_getupdate,c99fsearch,c99shexit,view_perms,posix_getpwuid,posix_getgrgid,posix_kill,parse_perms,parsesort,view_perms_color,set_encoder_input,ls_setcheckboxall,ls_reverse_all,rsg_read,rsg_glob,selfURL,dispsecinfo,unix2DosTime,addFile,system,get_users,view_size,DirFiles,DirFilesWide,DirPrintHTMLHeaders,GetFilesTotal,GetTitles,GetTimeTotal,GetMatchesCount,GetFileMatchesCount,GetResultFiles,fs_copy_dir,fs_copy_obj,fs_move_dir,fs_move_obj,fs_rmdir,SearchText,getmicrotime MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /scripts/ |
Upload File : |
#!/usr/local/cpanel/3rdparty/bin/perl # cpanel - scripts/cleansessions Copyright 2022 cPanel, L.L.C. # All rights reserved. # copyright@cpanel.net http://cpanel.net # This code is subject to the cPanel license. Unauthorized copying is prohibited package scripts::cleansessions; use strict; use warnings; use Getopt::Long (); use Cpanel::PwCache (); use Cpanel::PwCache::Build (); use Cpanel::Locale 'lh'; # Constants use constant ONEDAY => 60 * 60 * 24; # 24 hours - time in seconds use constant MAX_PHP_SESSION_AGE => ONEDAY; # 24 hours use constant MAX_PASSRESET_SESSION_AGE => ONEDAY * 2; # 48 hours use constant MAX_PASSRESET_FLOOD_AGE => MAX_PASSRESET_SESSION_AGE + ONEDAY; # 72 hours use constant MAX_INVITE_SESSION_AGE => ONEDAY * 2; # 48 hours use constant MAX_INVITE_FLOOD_AGE => MAX_INVITE_SESSION_AGE + ONEDAY; # 72 hours our $flood_pattern = qr/^\.floodprotect-/; sub RESET_DIR { return '/var/cpanel/passreset' } sub INVITE_DIR { return '/var/cpanel/invites' } sub TEAM_INVITE_DIR { return '/var/cpanel/team_invites' } # Application state our $VERBOSE = 0; our $HELP = 0; run(@ARGV) unless caller; sub run { my (@args) = @_; Getopt::Long::GetOptionsFromArray( \@args, verbose => \$VERBOSE, help => \$HELP ) or _die_usage(); _die_usage() if $HELP; Cpanel::PwCache::Build::init_passwdless_pwcache(); clean_php_app_sessions(); clean_password_reset_sessions(); clean_invite_sessions(); print "Done\n" if $VERBOSE; return; } sub clean_php_app_sessions { my $now = time(); my @APPS = qw( horde phpmyadmin phppgadmin roundcube ); foreach my $app (@APPS) { print lh()->maketext( 'Searching for “[_1]” sessions more than [quant,_2,day,days] old …', $app, MAX_PHP_SESSION_AGE / ONEDAY ) . "\n" if $VERBOSE; ## The correct name is e.g. cpanelroundcube without the dash. my $homedir = _gethomedir( 'cpanel' . $app ); next if !$homedir; my $tmpdir = $homedir . '/tmp'; opendir( my $session_files, $tmpdir ) or next; while ( my $qf = readdir($session_files) ) { $qf =~ s/\///g; #not really possible next if ( $qf !~ /^sess/ ); my $abs_path = $tmpdir . '/' . $qf; my $mtime = ( stat($abs_path) )[9]; if ( $now - $mtime > MAX_PHP_SESSION_AGE() ) { remove($abs_path); } } closedir $session_files; } return; } sub clean_password_reset_sessions { print lh()->maketext( 'Searching for reset password sessions more than [quant,_1,day,days] old …', MAX_PASSRESET_SESSION_AGE / ONEDAY ) . "\n" if $VERBOSE; # Clean the session files: anything not matching .floodprotect- clean_expired_files( RESET_DIR, $flood_pattern, 1, MAX_PASSRESET_SESSION_AGE ); print lh()->maketext( 'Searching for reset password flood control files more than [quant,_1,day,days] old …', MAX_PASSRESET_FLOOD_AGE / ONEDAY ) . "\n" if $VERBOSE; # Clean the flood control files: : anything matching .floodprotect- clean_expired_files( RESET_DIR, $flood_pattern, 0, MAX_PASSRESET_FLOOD_AGE ); return; } sub clean_invite_sessions { print lh()->maketext( 'Searching for invitation sessions more than [quant,_1,day,days] old …', MAX_INVITE_SESSION_AGE / ONEDAY ) . "\n" if $VERBOSE; # Clean the session files: anything not matching .floodprotect- clean_expired_files( INVITE_DIR, $flood_pattern, 1, MAX_INVITE_SESSION_AGE ); clean_expired_files( TEAM_INVITE_DIR, $flood_pattern, 1, MAX_INVITE_SESSION_AGE ); print lh()->maketext( 'Searching for invitation flood control files more than [quant,_1,day,days] old …', MAX_INVITE_FLOOD_AGE / ONEDAY ) . "\n" if $VERBOSE; # Clean the flood control files: : anything matching .floodprotect- clean_expired_files( INVITE_DIR, $flood_pattern, 0, MAX_INVITE_FLOOD_AGE ); clean_expired_files( TEAM_INVITE_DIR, $flood_pattern, 0, MAX_INVITE_FLOOD_AGE ); return; } sub clean_expired_files { my ( $dir, $match, $not, $max_age ) = @_; my $now = time(); if ( opendir my $dh, $dir ) { while ( my $item = readdir $dh ) { # skip these items, which are not sessions: # . and .. next if $item =~ /^\.$|^\.\.$/; my $check = $not ? $item !~ $match : $item =~ $match; if ($check) { my $abs_path = $dir . '/' . $item; my $mtime = ( stat $abs_path )[9]; if ( $now - $mtime > $max_age ) { remove($abs_path); } } } closedir $dh; } } sub remove { my ($abs_path) = @_; my $ok = unlink $abs_path; my $err = $!; if ( $ok && $VERBOSE ) { print " " . lh()->maketext( 'The system removed “[_1]”.', $abs_path ) . "\n"; } elsif ( !$ok ) { print STDERR " " if $VERBOSE; print STDERR lh()->maketext( 'The system failed to remove “[_1]” because of the following error: [_2]', $abs_path, $err ) . "\n"; } return; } sub _gethomedir { my ($user) = @_; return Cpanel::PwCache::gethomedir($user); } sub _die_usage { die <<EOF; usage: $0 [--verbose] [--help] Cleans up the various session files for the following: * application session files for the following apps if installed: - horde - phpmyadmin - phppgadmin - roundcube * expired cPanel Password Reset session files and flood protection files. * expired cPanel Subaccount Invitation session files and flood protection files. If you specify --verbose, you will get detailed output indicating what files were removed from the system. If you specify --help, you will get this help output. EOF }