Server IP : 103.119.228.120 / Your IP : 18.217.132.107 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/rdate 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 rdate; use cPstrict; use Cpanel::Unix::PID::Tiny (); use Cpanel::SafeRun::Simple (); use Getopt::Long (); use Cpanel::OS (); use Cpanel::OSSys::Env (); use Cpanel::Binaries (); use Socket; my $timeout = 10; exit( _run_alarmed( $timeout, @ARGV ) // 0 ) unless caller; sub run (@args) { my $print_time; # used to map usage to rdate's -p option my $help; Getopt::Long::GetOptionsFromArray( \@args, '-p|print' => \$print_time, '-h|help' => \$help, ) or return usage(1); return usage(0) if $help; my $envtype = Cpanel::OSSys::Env::get_envtype(); # Case 48348 -- Virtual environments cannot set the system time so do nothing. if ( $envtype =~ qr{^(?:virtuozzo|cpanel-vserver|vzcontainer)$} ) { say "Container environment detected - rdate skipped"; return; } my $pid = 0; my $check_ntpd_pid_method = Cpanel::OS::check_ntpd_pid_method(); if ( $check_ntpd_pid_method eq 'systemd_ntpd' ) { $pid = _detect_systemd_managed_ntpd(); } elsif ( $check_ntpd_pid_method eq 'pid_check_var_run_ntpd' ) { my $upid = Cpanel::Unix::PID::Tiny->new(); $pid = $upid->is_pidfile_running('/var/run/ntpd.pid'); } else { die qq[Unknown check_ntpd_pid_method method: $check_ntpd_pid_method]; } if ($pid) { say "The 'ntpd' daemon is running on PID '$pid'. Exiting."; } else { my %rdate_opts = ( 'set_time' => 1 ); $rdate_opts{'print_time'} = 1 if $print_time; $rdate_opts{'server'} = 'rdate.cpanel.net'; exec_rdate(%rdate_opts); } return; } sub exec_rdate (%opts) { my $server = $opts{'server'} || 'rdate.cpanel.net'; my $port = $opts{'port'} // 37; my $rdate_mode = $opts{'mode'} // 1; # act like the binary unless otherwise requested my $socket = _create_socket( $server, $port ); my $time_data; recv( $socket, $time_data, 4, 0 ); close($socket); # Make sure we actually got some data back if ( !$time_data ) { print "Server returned empty data, please try a different server.\n"; return; } # Take the binary data we get from the time server, convert to hex, sprintf to decimal then # subtract the number of seconds from Jan 1st 1900 to 1970 ( 2208988800 ) to get our epoch, es defined in RFC868 my $epoch = unpack( "N*", $time_data ) - 2208988800; if ( $opts{'print_time'} || ( !$opts{'set_time'} ) ) { print "rdate: [$server]\t" . scalar localtime($epoch) . "\n" if $rdate_mode == 1; } if ( $opts{'set_time'} ) { set_system_time( $epoch, $rdate_mode ); } return $epoch; } # split out for mocking purposes sub _create_socket ( $server, $port ) { my $socket; socket( $socket, PF_INET, SOCK_STREAM, ( getprotobyname('tcp') )[2] ) or die "Can't open socket $!\n"; binmode($socket); connect( $socket, pack_sockaddr_in( $port, inet_aton($server) ) ) or die "Can't connect to $server:$port $! \n"; return $socket; } sub set_system_time { my ( $epoch, $rdate_mode ) = @_; # We only want to allow for a 10 digit number, anything else is nonsensical here if ( $epoch !~ m/^\d{10}$/ ) { die "Invalid epoch given to set_system_time.\n"; } # Find date binary on CentOS 6 and 7+ my $date_bin_path = Cpanel::Binaries::path('date'); my $output = Cpanel::SafeRun::Simple::saferunnoerror( $date_bin_path, '-s', "\@$epoch" ); chomp $output; # mimic binary rdate behavior print "Set system time to “$output”\n" if !$rdate_mode; return; } sub _detect_systemd_managed_ntpd() { my $output = Cpanel::SafeRun::Simple::saferunallerrors( '/usr/bin/systemctl', 'status', 'ntpd' ); if ( $output =~ m/Active:\sactive\s+\(running\)/a && $output =~ m/Main\s+PID:\s+(\d+)\s+\(/a ) { return $1; } return; } sub _run_alarmed { my ( $timeout, @args ) = @_; { require Cpanel::Alarm; my $alrm = Cpanel::Alarm->new( $timeout, sub { die "Failed to run due to the $timeout second timeout being exceeded.\n" } ); run(@args); } return; } sub usage ($status) { $status //= 0; print <<EOS; scripts/rdate On servers without ntp daemon, use 'rdate' to adjust the system clock. Options: --help [-h] display this help --print [-p] Print the time returned by the remote machine. Usage: scripts/rdate scripts/rdate -p EOS return $status; }