ok
Direktori : /proc/thread-self/root/proc/self/root/usr/local/lsws/admin/html.6.2.1/classes/ws/ |
Current File : //proc/thread-self/root/proc/self/root/usr/local/lsws/admin/html.6.2.1/classes/ws/ConfCenter.php |
<?php class ConfCenter { public $_confType ; //'serv','admin' public $_serv ; public $_curOne ; //vh or tp public $_info ; private $_disp ; private $_validator ; private static $_instance = null ; // prevent an object from being constructed private function __construct() { } public static function singleton() { if ( ! isset(self::$_instance) ) { $c = __CLASS__ ; self::$_instance = new $c ; self::$_instance->init() ; } return self::$_instance ; } private function init() { $mid = DUtil::grab_input("request", 'm') ; $this->_confType = ( $mid != null && $mid[0] == 'a' ) ? 'admin' : 'serv' ; $this->_disp = new DispInfo('confMgr.php?') ; $this->loadConfig() ; if ( CLIENT::singleton()->getTimeout() == 0 ) { $this->setSessionTimeout() ; } } private function GetValidator() { if ( $this->_validator == null ) $this->_validator = new ConfValidation() ; return $this->_validator ; } public function GetDispInfo() { return $this->_disp ; } public function &ExportConf() { $data = [] ; $listeners = [] ; if ( isset($this->_serv->_data['listeners']) ) { $lnames = array_keys($this->_serv->_data['listeners']) ; foreach ( $lnames as $ln ) { $listeners[$ln] = DUtil::getDataVal($this->_serv->_data['listeners'][$ln], 'address'); } } $data['listener'] = $listeners ; $vhnames = [] ; if ( isset($this->_serv->_data['vhTop']) ) $vhnames = array_keys($this->_serv->_data['vhTop']) ; if ( isset($this->_serv->_data['tpTop']) ) { foreach ( $this->_serv->_data['tpTop'] as $tp ) { if ( isset($tp['member']) ) { $vhnames = array_merge($vhnames, array_keys($tp['member'])) ; } } } $data['vhost'] = $vhnames ; $data['serv'] = $this->_serv->_id ; $data['servLog'] = $this->getAbsFile(DUtil::getDataVal($this->_serv->_data['general']['log'], 'fileName'), 'SR') ; return $data ; } public function GetAdminEmails() { return DUtil::getDataVal($this->_serv->_data['general'], 'adminEmails'); } private function setSessionTimeout() { $timeout = 600 ; if ( $this->_confType == 'admin' ) { $t = DUtil::getDataVal($this->_serv->_data['general'], 'sessionTimeout') ; } else { $adminFile = $this->GetConfFilePath('admin') ; $t = ConfigFileEx::grepTagValue($adminFile, 'sessionTimeout') ; } if ( ($t != null) && is_numeric($t) && ($t >= 60) ) { $timeout = $t ; } CLIENT::singleton()->setTimeout($timeout) ; } public function GetConfFilePath( $type, $name = '' ) { $path = null ; if ( $type == 'serv' ) { $path = $_SERVER['LS_SERVER_ROOT'] . "conf/httpd_config.xml" ; //fixed location } elseif ( $type == 'admin' ) { $servconf = $this->GetConfFilePath('serv') ; $adminRoot = $this->getAbsFile('$SERVER_ROOT/admin/', 'SR') ; //fixed loc if ( $name == '' ) { $path = $adminRoot . 'conf/admin_config.xml' ; } elseif ( $name == 'key' ) { $path = $adminRoot . 'conf/jcryption_keypair' ; } } elseif ( $type == 'vh' ) { $path = $this->getAbsFile(DUtil::getDataVal($this->_serv->_data['vhTop'][$name], 'configFile'), 'VR', $name) ; } else { $path = $this->getAbsFile(DUtil::getDataVal($this->_serv->_data['tpTop'][$name], 'templateFile'), 'SR', $name) ; } return $path ; } private function loadConfig() { $confpath = $this->GetConfFilePath($this->_confType) ; $this->_serv = new ConfData($this->_confType, $confpath) ; $config = new ConfigFile() ; $err = '' ; $res = $config->load($this->_serv, $err) ; if ( ! $res ) { $this->_info['CONF_FILE_ERR'] = $err ; return false ; } if ( $this->_confType == 'serv' ) { $serverName = DUtil::getDataVal($this->_serv->_data['general'], 'serverName') ; if ( $serverName == '$HOSTNAME' || $serverName == '' ) { $serverName = php_uname('n') ; } $this->_serv->setId($serverName) ; $this->_disp->init($this->_serv->_id) ; } $this->genMenuInfo() ; if ( $this->_disp->_type == 'vh' || $this->_disp->_type == 'tp' ) { $vhpath = $this->GetConfFilePath($this->_disp->_type, $this->_disp->_name) ; $this->_curOne = new ConfData($this->_disp->_type, $vhpath, $this->_disp->_name) ; $res = $config->load($this->_curOne, $err) ; if ( ! $res ) { $this->_info['CONF_FILE_ERR'] = $err ; return false ; } if ( $this->_disp->_type == 'vh' ) { $this->_info['VH_NAME'] = $this->_disp->_name ; $this->getAbsFile('$VH_ROOT/', 'VR', $this->_disp->_name) ; //set $this->_info['VH_ROOT'] $this->getAbsFile('$DOC_ROOT/', 'DR', $this->_disp->_name) ; // set $this->_info['DOC_ROOT'] } } $this->loadSpecial() ; $viewActions = array( 'C' ) ; if ( ! in_array($this->_disp->_act, $viewActions) ) { $this->refreshInfo() ; } return true ; } private function genMenuInfo() { if ( $this->_confType == 'serv' ) { $this->_info['LNS'] = [] ; if ( isset($this->_serv->_data['listeners']) ) { $keys = DUtil::array_string_keys($this->_serv->_data['listeners']) ; sort($keys) ; foreach ( $keys as $name ) { $this->_info['LNS'][$name] = $name ; } } $this->_info['VHS'] = [] ; if ( isset($this->_serv->_data['vhTop']) ) { $keys = DUtil::array_string_keys($this->_serv->_data['vhTop']) ; sort($keys) ; foreach ( $keys as $name ) { $this->_info['VHS'][$name] = $name ; } } } } private function getAbsFile( $filename, $type, $vn = null ) { // type = 'SR', 'VR', 'DR' if ( $vn != null && strpos($filename, '$VH_NAME') !== false ) { $filename = str_replace('$VH_NAME', $vn, $filename) ; } $s = substr($filename, 0, 1) ; if ( $s == '$' ) { if ( strncasecmp('$SERVER_ROOT', $filename, 12) == 0 ) { $filename = $_SERVER['LS_SERVER_ROOT'] . substr($filename, 13) ; } elseif ( ($type == 'VR' || $type == 'DR') && (strncasecmp('$VH_ROOT', $filename, 8) == 0) ) { if ( ! isset($this->_info['VH_ROOT']) && $vn ) { $vhroot = $this->getAbsFile(DUtil::getDataVal($this->_serv->_data['vhTop'][$vn], 'vhRoot'), 'SR', $vn) ; if ( substr($vhroot, -1, 1) !== '/' ) $vhroot .= '/' ; $this->_info['VH_ROOT'] = $vhroot ; } else $vhroot = $this->_info['VH_ROOT'] ; $filename = $vhroot . substr($filename, 9) ; } elseif ( $type == 'DR' && (strncasecmp('$DOC_ROOT', $filename, 9) == 0) ) { if ( ! isset($this->_info['DOC_ROOT']) ) { if ( isset($this->_curOne->_data['general']['docRoot']) && $this->_curOne->_data['general']['docRoot']->HasVal() ) { $docroot = $this->getAbsFile(DUtil::getDataVal($this->_curOne->_data['general'], 'docRoot'), 'VR', $vn) ; if ( substr($docroot, -1, 1) !== '/' ) $docroot .= '/' ; $this->_info['DOC_ROOT'] = $docroot ; } else { $docroot = ''; // init to void undefined warning. } } else $docroot = $this->_info['DOC_ROOT'] ; $filename = $docroot . substr($filename, 10) ; } } elseif ( $s == '/' ) { if ( isset($_SERVER['LS_CHROOT']) ) { $root = $_SERVER['LS_CHROOT'] ; $len = strlen($root) ; if ( strncmp($filename, $root, $len) == 0 ) $filename = substr($filename, $len) ; } } else { // treat relative path to SERVER_ROOT $filename = $_SERVER['LS_SERVER_ROOT'] . $filename; } return $filename ; } private function savePost( $extractData, $disp, $tbl, &$cur_ref ) { $oldConf = &$this->getConfData($disp) ; $data = &DUtil::locateData($oldConf, $tbl->_dataLoc, $disp->_ref) ; $data0 = &$data ; $oldRef = $cur_ref ; $newRef = null ; if ( $tbl->_holderIndex != null ) { $newRef = DUtil::getDataVal($extractData, $tbl->_holderIndex) ; if ( $cur_ref != null && $cur_ref != $newRef && isset($data[$cur_ref]) ) { $data[$newRef] = $data[$cur_ref] ; unset($data[$cur_ref]) ; } $cur_ref = $newRef ; $data = &$data[$cur_ref] ; } if ( isset($tbl->_defaultExtract) ) { foreach ( $tbl->_defaultExtract as $k => $v ) { if ( $v == '$$' ) $data[$k] = $extractData[$k] ; else $data[$k] = new CVal($v) ; } } $index = array_keys($tbl->_dattrs) ; foreach ( $index as $i ) { $attr = &$tbl->_dattrs[$i] ; if ( $attr == null || $attr->bypassSavePost() ) continue ; $data[$attr->_key] = $extractData[$attr->_key] ; } if ( strncmp('VH_CTX', $tbl->_id, 6) == 0 && $oldRef == null ) { $data['order'] = new CVal(count($data0)) ; } elseif ( in_array($tbl->_id, array( 'VH_BASE', 'TP', 'L_GENERAL', 'ADMIN_L_GENERAL' )) ) { $oldRef = $disp->_name ; $newRef = DUtil::getDataVal($data, 'name') ; } $this->checkRefresh($tbl->_id, 's', $oldRef, $newRef, $disp) ; } private function saveFile( $type, $name, $tid = null, $ref = null ) { $config = new ConfigFile() ; $res = false ; $restart_required = true ; if ( $tid == 'SERV_MIME' ) { $res = ConfigFileEx::saveMime($this->_info['MIME_FILE'], $this->_serv->_data['MIME']) ; } elseif ( $tid == 'VH_UDB' ) { DUtil::trimLastId($ref) ; $ref = DUtil::getLastId($ref) ; $res = ConfigFileEx::saveUserDB($this->_info['UDB_FILE'], $this->_curOne->_data['UDB'][$ref]) ; $restart_required = false ; } elseif ( $tid == 'VH_GDB' ) { DUtil::trimLastId($ref) ; $ref = DUtil::getLastId($ref) ; $res = ConfigFileEx::saveGroupDB($this->_info['GDB_FILE'], $this->_curOne->_data['GDB'][$ref]) ; $restart_required = false ; } elseif ( $tid == 'ADMIN_USR' || $tid == 'ADMIN_USR_NEW' ) { $file = $_SERVER['LS_SERVER_ROOT'] . 'admin/conf/htpasswd' ; $res = ConfigFileEx::saveUserDB($file, $this->_serv->_data['ADM']) ; $restart_required = false ; } elseif ( $type == 'serv' || $type == 'sltop' || $type == 'sl' || $type == 'vhtop' || $type == 'tptop' || ($type == 'tp' && ($tid == 'TP_MEMBER' || $tid == 'TP')) || ($type == 'vh' && stristr($tid, 'VH_BASE')) ) { $res = $config->save($this->_serv) ; } elseif ( $type == 'admin' || $type == 'altop' || $type == 'al' ) { $res = $config->save($this->_serv) ; $this->setSessionTimeout() ; } elseif ( $type == 'vh' || $type == 'tp' ) { if ( ! isset($this->_curOne) ) { $curpath = $this->GetConfFilePath($type, $name) ; $this->_curOne = new ConfData($type, $curpath, $name) ; } $res = $config->save($this->_curOne) ; } if ( $restart_required && $res ) { CLIENT::singleton()->setChanged() ; } return $res ; } private function &loadKeys( $list ) { if ( isset($list) && count($list) > 0 ) { $temp = array_keys($list) ; return $temp ; } else { $temp = null ; return $temp ; } } private function refreshInfo() { $handler = [] ; if ( isset($this->_serv->_data['ext']) ) { foreach ( $this->_serv->_data['ext'] as $name => $e ) { $handler[$e['type']->GetVal()][$name] = '[Server Level]: ' . $name ; } } $handler['cgi']['cgi'] = 'CGI Daemon' ; if ( isset($this->_curOne->_data['ext']) ) { foreach ( $this->_curOne->_data['ext'] as $name => $e ) { $handler[$e['type']->GetVal()][$name] = '[VHost Level]: ' . $name ; } } $this->_info['ext'] = $handler ; if ( isset($this->_curOne) && isset($this->_curOne->_data['sec']['realm']) ) { $realms = [] ; $rn = $this->loadKeys($this->_curOne->_data['sec']['realm']) ; if ( $rn != null ) { foreach ( $rn as $name ) { $realms[$name] = $name ; } } $this->_info['realms'] = $realms ; } } private function changeName_VH( $oldName, $newName ) { //$vhconf = $this->GetConfFilePath('vh', $newName); //if ( !file_exists($vhconf) ) { //$this->saveFile('vh', $newName); //} $l = &$this->_serv->_data['listeners'] ; $lnames = array_keys($l) ; foreach ( $lnames as $ln ) { if ( isset($l[$ln]['vhMap'][$oldName]) ) { $map = $l[$ln]['vhMap'][$oldName] ; $map['vhost']->SetVal($newName) ; unset($l[$ln]['vhMap'][$oldName]) ; $l[$ln]['vhMap'][$newName] = $map ; } } $this->_serv->_data['vhTop'][$newName] = $this->_serv->_data['vhTop'][$oldName] ; unset($this->_serv->_data['vhTop'][$oldName]) ; $this->_disp->_mid = "vh_$newName" ; $this->_disp->_name = $newName ; $this->_curOne->_id = $newName ; $this->_disp->init() ; } private function changeName_TP( $oldName, $newName ) { $this->_serv->_data['tpTop'][$newName] = $this->_serv->_data['tpTop'][$oldName] ; unset($this->_serv->_data['tpTop'][$oldName]) ; $this->_disp->_mid = "tp_$newName" ; $this->_disp->_name = $newName ; $this->_curOne->_id = $newName ; $this->_disp->init() ; } private function changeName_L( $oldName, $newName ) { if ( $this->_serv->_data['tpTop'] != null && count($this->_serv->_data['tpTop']) > 0 ) { $tns = array_keys($this->_serv->_data['tpTop']) ; foreach ( $tns as $tn ) { $tl = $this->_serv->_data['tpTop'][$tn]['listeners'] ; $vals = DUtil::splitMultiple($tl->GetVal()) ; foreach ( $vals as $i => $v ) { if ( $v == $oldName ) $vals[$i] = $newName ; } $tl->SetVal(implode(', ', $vals)) ; } } $this->_serv->_data['listeners'][$newName] = $this->_serv->_data['listeners'][$oldName] ; unset($this->_serv->_data['listeners'][$oldName]); $this->_disp->_mid = "sl_$newName" ; $this->_disp->_name = $newName ; $this->_disp->init() ; } private function changeName_EXT( $oldName, $newName ) { if ( isset($this->_curOne) ) { $data = &$this->_curOne->_data ; } else { $data = &$this->_serv->_data ; } if ( $data['scriptHandler'] != null ) { $keys = array_keys($data['scriptHandler']) ; foreach ( $keys as $key ) { $sh = &$data['scriptHandler'][$key] ; if ( $sh['handler']->GetVal() == $oldName ) $sh['handler']->SetVal($newName) ; } } if ( isset($data['context']) ) { $keys = array_keys($data['context']) ; foreach ( $keys as $key ) { $ctx = &$data['context'][$key] ; if ( isset($ctx['authorizer']) && $ctx['authorizer']->GetVal() == $oldName ) $ctx['authorizer']->SetVal($newName) ; if ( isset($ctx['handler']) && $ctx['handler']->GetVal() == $oldName ) $ctx['handler']->SetVal($newName) ; } } } private function changeName_REALM( $oldName, $newName ) { $data = &$this->_curOne->_data ; if ( $data['context'] != null ) { $keys = array_keys($data['context']) ; foreach ( $keys as $key ) { $ctx = &$data['context'][$key] ; if ( isset($ctx['realm']) && $ctx['realm']->GetVal() == $oldName ) $ctx['realm']->SetVal($newName) ; } } } private function &getConfData( $disp ) { $data = null ; if ( $disp->_type == 'vh' ) { if ( $disp->_pid == 'base' ) { $data = &$this->_serv->_data['vhTop'][$disp->_name] ; } else { $data = &$this->_curOne->_data ; } } elseif ( $disp->_type == 'tp' ) { if ( $disp->_pid == 'member' ) { $data = &$this->_serv->_data['tpTop'][$disp->_name] ; } else { $data = &$this->_curOne->_data ; } } elseif ( $disp->_type[0] == 'a' ) { if ( $disp->_type == 'al' ) { $data = &$this->_serv->_data['listeners'][$disp->_name] ; } else { $data = &$this->_serv->_data ; } } else { if ( $disp->_type == 'sl' ) { $data = &$this->_serv->_data['listeners'][$disp->_name] ; } elseif ( $disp->_type == 'tptop' && $disp->_pid == 'tpTop1' ) { $data = &$this->_serv->_data['tpTop'][$disp->_ref] ; } else { $data = &$this->_serv->_data ; } } return $data ; } private function loadSpecial() { $tid = DUtil::getLastId($this->_disp->_tid) ; if ( $this->_disp->_type == 'serv' ) { if ( $tid == 'SERV_MIME_TOP' || $tid == 'SERV_MIME' ) { $file = $this->getAbsFile(DUtil::getDataVal($this->_serv->_data['general'], 'mime'), 'SR') ; $this->_serv->_data['MIME'] = &ConfigFileEx::loadMime($file) ; $this->_info['MIME_FILE'] = $file ; } } elseif ( $this->_disp->_type == 'admin' ) { if ( $this->_disp->_pid == 'security' ) { $file = $_SERVER['LS_SERVER_ROOT'] . 'admin/conf/htpasswd' ; $this->_serv->_data['ADM'] = ConfigFileEx::loadUserDB($file) ; } } elseif ( $this->_disp->_type == 'vh' ) { if ( $tid == 'VH_UDB' || $tid == 'VH_GDB' ) { $temp = explode('`', $this->_disp->_ref) ; $ref = $temp[0] ; } else { $ref = DUtil::getLastId($this->_disp->_ref) ; } if ( $tid == 'VH_UDB_TOP' || $tid == 'VH_UDB' ) { $loc = DUtil::getDataVal($this->_curOne->_data['sec']['realm'][$ref], 'userDB:location') ; $file = $this->getAbsFile($loc, 'VR', $this->_info['VH_NAME']) ; $this->_info['UDB_FILE'] = $file ; $this->_curOne->_data['UDB'][$ref] = ConfigFileEx::loadUserDB($file) ; } elseif ( $tid == 'VH_GDB_TOP' || $tid == 'VH_GDB' ) { $loc = DUtil::getDataVal($this->_curOne->_data['sec']['realm'][$ref], 'groupDB:location') ; $file = $this->getAbsFile($loc, 'VR', $this->_info['VH_NAME']) ; $this->_info['GDB_FILE'] = $file ; $this->_curOne->_data['GDB'][$ref] = &ConfigFileEx::loadGroupDB($file) ; } } } private function checkRefresh( $tid, $act, $oldRef, $newRef, $disp ) { if ( $tid == 'SERV_PROCESS' ) { $serverName = DUtil::getDataVal($this->_serv->_data['general'], 'serverName') ; if ( $serverName != $this->_serv->_id ) { $this->_serv->setId($serverName) ; $this->_disp->init($serverName) ; } return ; } $isExt = (strncmp($tid, 'A_EXT', 5) == 0) || (strncmp($tid, 'TP_EXT', 6) == 0) ; $isRealm = (strncmp($tid, 'VH_REALM', 8) == 0) || (strncmp($tid, 'TP_REALM', 8) == 0) ; if ( $act == 's' && $oldRef != null && $oldRef != $newRef ) { if ( $tid == 'VH_BASE' ) { $this->changeName_VH($oldRef, $newRef) ; } elseif ( $tid == 'TP' ) { $this->changeName_TP($oldRef, $newRef) ; } elseif ( $tid == 'L_GENERAL' || $tid == 'ADMIN_L_GENERAL' ) { $this->changeName_L($oldRef, $newRef) ; } elseif ( $isExt ) { $this->changeName_EXT($oldRef, $newRef) ; } elseif ( $isRealm ) { $this->changeName_REALM($oldRef, $newRef) ; } } $menuTids = array( 'L_GENERAL1', 'L_GENERAL', 'ADMIN_L_GENERAL1', 'ADMIN_L_GENERAL', 'VH_TOP_D', 'VH_BASE', 'TP1' ) ; if ( in_array($tid, $menuTids) ) { // for add or remove count in menu $this->genMenuInfo() ; } elseif ( $isExt || $isRealm ) { $this->refreshInfo() ; } } private function &doAction( $disp ) { if ( $disp->_act != 'v' ) { if ( $disp->_token != $disp->_tokenInput ) { $disp->_err = 'Illegal entry point!' ; return null ; } } $disp->_info = &$this->_info ; //init here $data = &$this->getConfData($disp) ; $tid = DUtil::getLastId($disp->_tid) ; $ref = DUtil::getLastId($disp->_ref) ; $needTrim = false ; $tblDef = DTblDef::GetInstance() ; if ( $disp->_act == 's' ) { $tbl = $tblDef->GetTblDef($tid) ; $extractedData = null ; if ( $tbl->_holderIndex != null ) { $curdata = DUtil::locateData($data, $tbl->_dataLoc, $disp->_ref) ; $disp->_info['holderIndex'] = DUtil::array_string_keys($curdata) ; $disp->_info['holderIndex_cur'] = $ref ; } else { $disp->_info['holderIndex'] = null ; } $go = $this->GetValidator()->ExtractPost($tbl, $extractedData, $disp) ; if ( $go > 0 ) { $this->savePost($extractedData, $disp, $tbl, $ref) ; $this->saveFile($disp->_type, $disp->_name, $tbl->_id, $disp->_ref) ; $needTrim = true ; } else { $disp->_act = 'S' ; $disp->_err = 'Input error detected. Please resolve the error(s). ' ; return $extractedData ; } } else if ( $disp->_act == 'c' || $disp->_act == 'n' ) { $tbl = $tblDef->GetTblDef($tid) ; $extractedData = [] ; $this->GetValidator()->ExtractPost($tbl, $extractedData, $disp) ; if ( $disp->_act == 'n' ) { $tid = DUtil::getSubTid($tbl->_subTbls, $extractedData) ; if ( $tid != null ) { DUtil::switchLastId($disp->_tid, $tid) ; $tbl = $tblDef->GetTblDef($tid) ; } } return $extractedData ; } else if ( $disp->_act == 'D' ) { $tbl = $tblDef->GetTblDef($tid) ; $oldConf = &$this->getConfData($disp) ; $data = &DUtil::locateData($oldConf, $tbl->_dataLoc, $disp->_ref) ; if ( ($disp->_tid == 'ADMIN_L_GENERAL1') || ($disp->_pid == 'security' && $disp->_tid == 'ADMIN_USR') ) { // for admin listener, do not allow to delete all // for admin user, do not allow to delete all if ( count($data) == 1 ) { DUtil::trimLastId($disp->_tid) ; DUtil::trimLastId($disp->_ref) ; return $oldConf ; } } unset($data[$ref]) ; if ( strncmp('VH_CTX', $tbl->_id, 6) == 0 ) $this->resetCtxSeq($data) ; $this->saveFile($disp->_type, $disp->_name, $tid, $disp->_ref) ; $data = &$this->getConfData($disp) ; //reload everything $this->checkRefresh($tid, 'D', $ref, null, $disp) ; $needTrim = true ; } else if ( $disp->_act == 'I' ) { if ( $this->instantiateTempl($disp) ) { $tbl = $tblDef->GetTblDef($tid) ; $oldConf = &$this->getConfData($disp) ; $data = &DUtil::locateData($oldConf, $tbl->_dataLoc) ; unset($data[$ref]) ; $this->saveFile($disp->_type, $disp->_name, $tid) ; $this->genMenuInfo('serv') ; $data = &$this->getConfData($disp) ; //reload everything $needTrim = true ; } } else if ( $disp->_act == 'B' ) { $needTrim = true ; } if ( isset($_GET['ctxseq']) ) { if ( $this->changeCtxSeq($disp, DUtil::getGoodVal1($_GET['ctxseq'])) ) $this->saveFile($disp->_type, $disp->_name, $tid) ; } if ( $needTrim ) { DUtil::trimLastId($disp->_tid) ; DUtil::trimLastId($disp->_ref) ; } return $data ; } private function resetCtxSeq( &$data ) { $keys = array_keys($data) ; $i = 1 ; foreach ( $keys as $k ) { $data[$k]['order']->SetVal($i) ; ++ $i ; } } private function changeCtxSeq( $disp, $seq ) { $plus = true ; if ( $seq < 0 ) { $plus = false ; $seq = - $seq ; } $ctxs = &$this->_curOne->_data['context'] ; $c = count($ctxs) ; if ( ( ! $plus && $seq == 1) || ($plus && $seq == $c) ) return false ; $newCtxs = [] ; $i = 1 ; foreach ( $ctxs as $uri => $ctx ) { if ( $plus ) { if ( $i == $seq ) { $savedUri = $uri ; $saved = $ctx ; } else if ( $i == $seq + 1 ) { $ctx['order']->SetVal($seq) ; $newCtxs[$uri] = $ctx ; $saved['order']->SetVal($seq + 1) ; $newCtxs[$savedUri] = $saved ; } else $newCtxs[$uri] = $ctx ; } else { if ( $i == $seq - 1 ) { $savedUri = $uri ; $saved = $ctx ; } else if ( $i == $seq ) { $ctx['order']->SetVal($seq - 1) ; $newCtxs[$uri] = $ctx ; $saved['order']->SetVal($seq) ; $newCtxs[$savedUri] = $saved ; } else $newCtxs[$uri] = $ctx ; } ++ $i ; } $this->_curOne->_data['context'] = &$newCtxs ; return true ; } private function instantiateTempl( $disp ) { $tn = $disp->_name ; $tp = &$this->_serv->_data['tpTop'][$tn] ; if ( $tp['listeners']->HasErr() ) { $disp->_err = 'Please fix error in Mapped Listeners first.' ; return false ; } $d = $this->_curOne->_data ; $configFile = $d['general']['configFile'] ; if ( empty($configFile) || $configFile->HasErr() ) { $disp->_err = 'Please fix error in General->Config File first.' ; return false ; } $vhRoot = $tp['member'][$disp->_ref]['vhRoot'] ; if ( isset($vhRoot) && $vhRoot->HasVal() ) { if ( $vhRoot->HasErr() ) { $disp->_err = 'Please fix VHRoot error in Member Virtual Host first.' ; return false ; } } else { $vhRoot = $d['general']['vhRoot'] ; if ( $vhRoot->HasErr() ) { $disp->_err = 'Please fix error in General->VHost Root first.' ; return false ; } } $vn = $disp->_ref ; $vr = $this->getAbsFile($vhRoot->GetVal(), 'SR', $vn) ; if ( ! file_exists($vr) ) { $disp->_err = 'Please fix error: Virtual Host Root ' . $vr . ' does not exist.' ; return false ; } $path = $configFile->GetVal() ; if ( strncasecmp('$VH_ROOT', $path, 8) == 0 ) $path = $vr . substr($path, 8) ; $path = $this->getAbsFile($path, 'SR', $vn) ; if ( ! file_exists($path) && ! PathTool::createFile($path, $disp->_err) ) { return false ; } $confData = new ConfData('vh', $path, $vn) ; $confData->_data = &$this->_curOne->_data ; $config = new ConfigFile() ; $res = $config->save($confData) ; if ( ! $res ) { $disp->_err = 'failed to save to file ' . $path ; return false ; } $v = [] ; $v['name'] = new CVal($vn) ; $v['vhRoot'] = $vhRoot ; $v['configFile'] = $configFile ; $v['maxKeepAliveReq'] = $d['general']['maxKeepAliveReq'] ; $v['smartKeepAlive'] = $d['general']['smartKeepAlive'] ; if ( is_array($d['sec']['file']) ) $v = array_merge($v, $d['sec']['file']) ; if ( is_array($d['sec']['cgi']) ) $v = array_merge($v, $d['sec']['cgi']) ; if ( is_array($d['sec']['conn']) ) $v = array_merge($v, $d['sec']['conn']) ; $this->_serv->_data['vhTop'][$vn] = $v ; $lns = preg_split("/, /", DUtil::getDataVal($tp, 'listeners'), -1, PREG_SPLIT_NO_EMPTY) ; $vhmap['vhost'] = new CVal($vn) ; $domains = DUtil::getDataVal($tp['member'][$vn], 'vhDomain') ; $vhalias = DUtil::getDataVal($tp['member'][$vn], 'vhAliases'); if ( $vhalias != '' ) { if ( $domains != '' ) $domains .= ', ' ; $domains .= $vhalias ; } $vhmap['domain'] = new CVal($domains) ; foreach ( $lns as $ln ) { $l = &$this->_serv->_data['listeners'][$ln] ; $l['vhMap'][$vn] = $vhmap ; } return true ; } public function enableDisableVh( $act, $actId ) { $haschanged = false ; $cur_disabled = [] ; if ( isset($this->_serv->_data['service']['suspendedVhosts']) ) { $cur_disabled = preg_split("/[,;]+/", DUtil::getDataVal($this->_serv->_data['service'], 'suspendedVhosts'), -1, PREG_SPLIT_NO_EMPTY) ; } $found = in_array($actId, $cur_disabled) ; if ( $act == 'disable' ) { if ( ! $found ) { $cur_disabled[] = $actId ; $haschanged = true ; } } else if ( $act == 'enable' ) { if ( $found ) { $key = array_search($actId, $cur_disabled) ; unset($cur_disabled[$key]) ; $haschanged = true ; } } if ( $haschanged ) { $vals = implode(',', $cur_disabled) ; $this->_serv->_data['service']['suspendedVhosts'] = new CVal($vals) ; $this->saveFile('serv', '') ; } } public function GetPageData( $disp, &$confErr ) { $disp->_err = null ; $data = &$this->doAction($disp) ; if ( isset($this->_info['CONF_FILE_ERR']) ) { $confErr = $this->_info['CONF_FILE_ERR'] ; } return $data ; } }