⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.19
Server IP:
178.33.27.10
Server:
Linux cpanel.dev-unit.com 3.10.0-1160.108.1.el7.x86_64 #1 SMP Thu Jan 25 16:17:31 UTC 2024 x86_64
Server Software:
Apache/2.4.57 (Unix) OpenSSL/1.0.2k-fips
PHP Version:
8.2.11
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
local
/
softaculous
/
lib
/
classes
/
View File Name :
requirement.php
<?php class requirement{ var $req = array(); static $mariadb = array('5.6' => array('10.0.0', '10.1.0'), '5.7' => array('10.2.0', '10.3.0', '10.4.0'), '8.0' => array('10.5.0')); static function replace_callback($matches){ global $requirements; //r_print($matches);die(); $requirements[] = $matches[1]; return; } function __construct($info = ''){ global $vr, $softpanel; $vr = vr($info); $req = array(); $req = $this->parse_requirements($info); // It it is Remote lets check it here // We do it here because we want to check all requirements at once if(aefer()){ $req = $this->aefer_req_check($req); // This will fill the key 'result' for every requirement //r_print($req); } if(method_exists($softpanel, 'soft_req_check') && !defined('SOFTADMIN')){ $req = $softpanel->soft_req_check($req); } foreach($req as $k => $v){ // Check if php extension is loaded if($v['type'] == 'extension'){ $ext_res = $this->req_loaded_extension($v); if($ext_res){ if(!$this->req_loaded_extension_version($v)){ //return false; } }else{ //return false; } } // Check if php function exist if($v['type'] == 'function_exists'){ if(!$this->req_function_exists($v)){ } } if($v['type'] == 'version'){ if(!$this->req_version($v)){ //return false; } } } }// End of constructor //Returns the script info static function parse_requirements($tmp_info){ global $requirements; $requirements = array(); $tmp_info = preg_replace_callback('/<requirement([^>]*)\/>/is', array('requirement', 'replace_callback'), $tmp_info); $tmp_info = preg_replace_callback('/<requirement([^>]*)>(.*?)<\/requirement>/is', array('requirement', 'replace_callback'), $tmp_info); foreach($requirements as $k => $v){ //echo '<br/>'.$v.'<br/>'; soft_preg_replace('/check=("|\')(.*?)("|\')(\s*?)/is', $v, $tmp_req[$k]['check'], 2); soft_preg_replace('/type=("|\')(.*?)("|\')(\s*?)/is', $v, $tmp_req[$k]['type'], 2); soft_preg_replace('/operator=("|\')(.*?)("|\')(\s*?)/is', $v, $tmp_req[$k]['operator'], 2); soft_preg_replace('/<\!\[CDATA\[(\s*?)(.*?)(\s*?)\]\]>/is', $v, $tmp_req[$k]['grep'], 2); soft_preg_replace('/name=("|\')(.*?)("|\')(\s*?)/is', $v, $tmp_req[$k]['name'], 2); soft_preg_replace('/value=("|\')(.*?)("|\')(\s*?)/is', $v, $tmp_req[$k]['value'], 2); soft_preg_replace('/version=("|\')(.*?)("|\')(\s*?)/is', $v, $tmp_req[$k]['version'], 2); soft_preg_replace('/err=("|\')(.*?)("|\')(\s*?)/is', $v, $tmp_req[$k]['err'], 2); soft_preg_replace('/function=("|\')(.*?)("|\')(\s*?)/is', $v, $tmp_req[$k]['function'], 2); soft_preg_replace('/mariadb=("|\')(.*?)("|\')(\s*?)/is', $v, $tmp_req[$k]['mariadb'], 2); // We have used value since the beginning and version was added later if(!empty($tmp_req[$k]['value']) && empty($tmp_req[$k]['version'])){ $tmp_req[$k]['version'] = $tmp_req[$k]['value']; } } return $tmp_req; } //PHP Extension version check not currently supported for AEFER function aefer_req_check($params){ global $globals, $error, $l, $__hooks, $softpanel, $ftp, $__settings; include_once($globals['mainfiles'].'/functions/aefer.php'); $dom = $__settings; $conn = set_connection($dom); if(!empty($error)){ return false; } $ftp_softpath = npath($dom, $dom['softpath']); $_file = file_get_contents($globals['path'].'/lib/aefer/sreq.php'); $_file = aefer_dump($params, '[[[sreq]]]', $_file); if($_GET['debug'] == 'fetch'){ $conn->Verbose = true; $conn->LocalEcho = true; } if(!$conn->softput($ftp_softpath.'/sreq.php', $_file)){ $error[] = 'Error in uploading requirements checker'; aefer_cleanup(); return false; } soft_log(1, 'sreq is uploaded successfully'); rename_htaccess($dom, 1); soft_log(2, 'renamed .htaccess'); $result = aefer_response($dom['softurl'].'/sreq.php'); //echo $__settings['softurl'].'/sreq.php';r_print($result);$ftp->softput($__settings['ftp_softpath'].'/../sreq1.php', $_file); soft_log(3, 'aefer response for sreq:'.var_export($result, 1)); rename_htaccess($dom, 0);// Just to be safe. This should already be done by sreq.php soft_log(2, 'reverted .htaccess'); // Delete the file $conn->delete($ftp_softpath.'/sreq.php'); if(aefer_was_successful($result)){ soft_log(1, 'aefer was successful...DONE'); return $result['sreq']; }else{ $error['no_response'] = $l['no_aefer_resp']; aefer_cleanup(); return false; } // If it was not successful just return what we received return $params; } // Check for FUNCTION exists in PHP function req_function_exists($param){ global $globals, $error, $l, $__hooks, $softpanel; if((!empty($__hooks['function_exists']) && in_array($param['name'], $__hooks['function_exists'])) || defined('NO_REQUIREMENT')){ return true; } // This is for Remote if(!aefer() && !isset($param['result'])){ $command = eu_php_bin().' -r "if (function_exists(\''.$param['name'].'\')) exit(0); else exit(1);"'; // If it is CageFS we need to change the command if(file_exists('/usr/bin/selectorctl') && file_exists('/bin/cagefs_enter')){ @exec("/usr/bin/selectorctl --user-current --user=".$softpanel->user['name'].' 2>&1', $cout, $cret); if(!preg_match('/ERROR/is', implode('', $cout)) && !preg_match('/native/is', implode('', $cout))){ if(file_exists('/bin/cagefs_enter.proxied')){ if(file_exists('/usr/local/bin/php')){ $cagefs_phpbin = '/bin/cagefs_enter.proxied /usr/local/bin/php'; }else{ $cagefs_phpbin = '/bin/cagefs_enter.proxied php'; } }else{ $cagefs_phpbin = '/bin/cagefs_enter php'; } $command = $cagefs_phpbin.' -r "if (function_exists(\''.$param['name'].'\')) exit(0); else exit(1);"'; } } @exec($command, $out, $ret); if(!empty($_GET['debug'])){ echo $command; r_print($out); r_print($ret); } $output = implode('', $out); } // Fill in the error if(!empty($ret) || !empty($param['result'])){ // Is there NO SPECIFIC error string ! if(empty($param['err'])){ $param['err_key'] = 'req_func_nf_'.$param['name']; $param['err_val'] = lang_vars($l['req_func_nf'], array(strtoupper($param['check']))).' : <b>'.$param['name'].'</b>'; }else{ $param['err_key'] = $param['err']; $param['err_val'] = '{{'.$param['err'].'}}'; } $error[$param['err_key']] = $param['err_val']; return false; } return true; } // Check loaded extensions function req_loaded_extension($param){ global $globals, $error, $l, $__hooks, $softpanel; // strtolower and str_replace is used bcoz in cagefs they are not using extension as standard (php -m) // All extension are lower case and separated by "_". if((!empty($__hooks['loaded_extension']) && in_array(strtolower(str_replace(' ','_', $param['name'])), $__hooks['loaded_extension'])) || defined('NO_REQUIREMENT')){ return true; } // If we reached here then the extension is definately not loaded in cagefs binary if(defined('PHP_EXT_EXHAUSTIVE') && !isset($param['result'])){ $ret = 1; } // Is there NO SPECIFIC error string ! if(empty($param['err'])){ $param['err_key'] = 'req_ext_nf_'.$param['name']; $param['err_val'] = lang_vars($l['req_ext_nf'], array(strtoupper($param['check']))).' <b>'.$param['name'].'</b>'; }else{ $param['err_key'] = $param['err']; $param['err_val'] = '{{'.$param['err'].'}}'; } // Check if the extention is loaded if(!empty($param['name'])){ // This is for Remote if(!aefer() && !defined('PHP_EXT_EXHAUSTIVE') && !isset($param['result'])){ if(in_array($param['name'], array('mysql', 'mysqli', 'pdo_mysql'))){ $command = sphpbin().' -r "if (extension_loaded(\''.$param['name'].'\') || extension_loaded(\'nd_'.$param['name'].'\')) exit(0); else exit(1);" 2>&1'; }else{ $command = sphpbin().' -r "if (extension_loaded(\''.$param['name'].'\')) exit(0); else exit(1);" 2>&1'; } @exec($command, $out, $ret); if(!empty($_GET['debug'])){ echo $command; r_print($out); r_print($ret); } } // Any error ? if(!empty($ret) || !empty($param['result'])){ $error[$param['err_key']] = $param['err_val'].($_GET['debug'] == 'showcmd' ? $command : ''); return false; } } return true; } function req_loaded_extension_version($param){ global $globals, $error, $l, $__hooks, $softpanel; // Do we need to GREP a specific text //Skip the extension version check in AEFER. if(!empty($param['grep']) && !aefer()){ $command = (defined('eu_php_bin') ? eu_php_bin : sphpbin())." -i"; @exec($command, $out, $ret); $param['grepvar'] = (empty($param['grepvar']) ? 1 : $param['grepvar']); $output = implode('', $out); soft_preg_replace('/'.$param['grep'].'/is', $output, $found, $param['grepvar']); if(empty($found)){ // Fill the error $error[$param['err_key']] = $param['err_val']; return false; } if(!empty($param['version']) && !empty($param['operator'])){ if(!version_compare($found, $param['version'], $param['operator'])){ $error[$param['err_key']] = lang_vars($l['req_ext_ver'], array(strtoupper($param['check']), $param['name'], $l[$param['operator']], $param['version'], $found)); return false; } } } return true; } function req_version($param){ global $globals, $error, $softpanel, $l, $__settings; // This is for Remote if(aefer() || isset($param['result'])){ $output = $param['result']; }else{ //echo '<br>------------------------------'.$binary.'------------------------------------------------<br>'; //echo $binary.' -r "echo function_exists(\''.$fext.'\');"'; if($param['check'] == 'mysql'){ if(empty($softpanel->mysql_path)) return; $command = (!empty($softpanel->mysql_path) ? $softpanel->mysql_path : '/usr/bin/mysql').' -V'; }elseif($param['check'] == 'perl'){ if(empty($softpanel->perl_bin)) return; $command = $softpanel->perl_bin.' -v'; }elseif($param['check'] == 'php'){ $command = ''; } if(!empty($command)){ // Execute the command @exec($command, $out, $ret); $output = implode('', $out); } if($param['check'] == 'php'){ $output = sphpversion(); } if($param['check'] == 'perl'){ soft_preg_replace('/This is perl,(.*?)\(\*\)/is', $output, $ver, 1); $output = trim($ver,'v'); } if($param['check'] == 'mysql'){ // We will check the version for remote MySQL later if(is_remote_dbhost($__settings['softdbhost']) && !defined('mysql_version') && !defined('NO_REQUIREMENT')){ if(is_array($GLOBALS['remote_mysql_ver_check'])){ $GLOBALS['remote_mysql_ver_check'][] = $param; }else{ $GLOBALS['remote_mysql_ver_check'] = array($param); } return true; } if(preg_match('/(.*?)Distrib(\s*?)(.*?)-MariaDB/is', $output) || preg_match('/(.*?)from(\s*?)(.*?)-MariaDB/is', $output)){ soft_preg_replace('/(.*?)Distrib(\s*?)(.*?)-MariaDB/is', $output, $ver, 3); //Since the string pattern changed in MariaDB 11.x if(empty($ver)){ soft_preg_replace('/(.*?)from(\s*?)(.*?)-MariaDB/is', $output, $ver, 3); } if(!empty($param['mariadb'])){ $param['version'] = $param['mariadb']; }else{ // See if we can map the MySQL version with MariaDB version // Get the short version of requirement e.g. 5.6, 5.7 $short_ver = substr($param['version'], 0, (strrpos($param['version'], '.'))); if(!empty(self::$mariadb[$short_ver])){ $param['version'] = current(self::$mariadb[$short_ver]); } } // This will trigger mariadb in error message $param['check_txt'] = 'mariadb'; }else{ soft_preg_replace('/(.*?)Distrib(.*?)\,/is', $output, $ver, 2); //Since the string pattern changed in webuzo mysql 5.7 if(empty($ver)){ soft_preg_replace('/(.*?)Ver (.*?) /is', $output, $ver, 2); } } $output = trim($ver); } } if($param['check'] == 'php'){ if(defined('NO_PHP_VER_REQ')) return true; if(defined('php_version')){ $output = php_version; } if(!defined('php_version')){ define('php_version', $output); } } if($param['check'] == 'perl'){ if(aefer()){ // At the moment we are skipping this for PERL return true; } if(defined('NO_PERL_VER_REQ')) return true; if(defined('perl_version')){ $output = perl_version; } } if($param['check'] == 'mysql'){ if(aefer()){ // At the moment we are skipping this for MySQL return true; } if(defined('NO_MYSQL_VER_REQ')) return true; if(defined('mysql_version')){ $output = mysql_version; } //Proceed with the installation if the MySQL version output is empty and is allowed to skip in the softpanel if(!empty($softpanel->empty_req_allow) && empty($output)){ return true; } } // This should be highest preference as we have the output from domain curl call if(!empty($param['result'])){ $output = $param['result']; } // Is there NO SPECIFIC error string ! if(empty($param['err'])){ $param['err_key'] = 'req_ver_nf_'.$param['check']; if(empty($param['check_txt'])){ $param['check_txt'] = $param['check']; } $param['err_val'] = lang_vars($l['req_ver_nf'], array(strtoupper($param['check_txt']), $l[$param['operator']], $param['version'])); }else{ $param['err_key'] = $param['err']; $param['err_val'] = '{{'.$param['err'].'}}'; } // Compare the versions if(!version_compare($output, $param['version'], $param['operator']) && !defined('NO_REQUIREMENT')){ $error[$param['err_key']] = $param['err_val'].$output; } } static function remote_mysql_version_check($params){ global $__settings, $globals, $l, $error; foreach($params as $k => $param){ $conn = @soft_mysql_connect($__settings['softdbhost'], $__settings['softdbuser'], $__settings['softdbpass'], true); $output = soft_mysql_get_server_info($conn); if(preg_match('/(.*?)-(.*?)-MariaDB/is', $output) || preg_match('/(.*?)-MariaDB/is', $output)){ if(!empty($param['mariadb'])){ $param['version'] = $param['mariadb']; }else{ // See if we can map the MySQL version with MariaDB version // Get the short version of requirement e.g. 5.6, 5.7 $short_ver = substr($param['version'], 0, (strrpos($param['version'], '.'))); if(!empty(self::$mariadb[$short_ver])){ $param['version'] = current(self::$mariadb[$short_ver]); } } soft_preg_replace('/(.*?)-(.*?)-MariaDB/is', $output, $ver, 2); if(empty($ver)){ soft_preg_replace('/(.*?)-MariaDB/is', $output, $ver, 1); } if(!empty($ver)){ $output = trim($ver); } // This will trigger mariadb in error message $param['check_txt'] = 'mariadb'; } // Is there NO SPECIFIC error string ! if(empty($param['err'])){ $param['err_key'] = 'req_ver_nf_'.$param['check']; if(empty($param['check_txt'])){ $param['check_txt'] = $param['check']; } $param['err_val'] = lang_vars($l['req_ver_nf'], array(strtoupper($param['check_txt']), $l[$param['operator']], $param['version'])); }else{ $param['err_key'] = $param['err']; $param['err_val'] = '{{'.$param['err'].'}}'; } // Compare the versions if(!version_compare($output, $param['version'], $param['operator']) && !defined('NO_REQUIREMENT')){ $error[$param['err_key']] = $param['err_val'].$output; } } if(!empty($error)){ return false; } } }