private function correctProtectedFiles() { $protectedConfigs = $this->protectedSettingsToArray(); if (count($protectedConfigs) > 0) { $ftpObect = new EasyWiFTP($this->appMasterServerDetails['ssh2IP'], $this->appMasterServerDetails['ftpPort'], $this->appServerDetails['userNameExecute'], $this->appServerDetails['ftpPasswordExecute']); if ($ftpObect->loggedIn === true) { foreach ($protectedConfigs as $config => $values) { $cvarsNotFound = $values['cvars']; $fileWithPath = $this->appServerDetails['absoluteFTPPath'] . '/' . $config; $fileAndPath = $this->getFileAndPathName($fileWithPath); $path = $fileAndPath['path']; $fileName = $fileAndPath['file']; if (!$ftpObect->downloadToTemp($fileWithPath)) { $fileWithPath = $this->appServerDetails['absoluteFTPPathNoChroot'] . '/' . $config; $fileAndPath = $this->getFileAndPathName($fileWithPath); $path = $fileAndPath['path']; $fileName = $fileAndPath['file']; } $configFileContent = $ftpObect->getTempFileContent(); // We have one temp handle for all files to reduce the amount of needed ram $ftpObect->tempHandle = null; // Depending how the file was uploaded and written, there might be lots of not needed characters in the file // A clean up will make the file handling lot easier $configFileContent = str_replace(array("", "\\b", "\r", "\\Z"), "", $configFileContent); $lines = explode("\n", $configFileContent); $lineCount = count($lines) - 1; $i = 0; // iterate over all lines foreach ($lines as $singeLine) { // Set to false on each iteration to be able to detect config overwrites $edited = false; // For easier comparison make a string to lower $loweredSingleLine = strtolower($singeLine); foreach ($values['cvars'] as $cvar => $value) { if ($values['type'] == 'cfg' and preg_match('/^[\\s\\/]{0,}' . strtolower($cvar) . '\\s+(.*)$/', $loweredSingleLine)) { $edited = true; unset($cvarsNotFound[$cvar]); $splitLine = preg_split('/' . $cvar . '/', $singeLine, -1, PREG_SPLIT_NO_EMPTY); $ftpObect->writeContentToTemp(isset($splitLine[1]) ? $splitLine[0] . $cvar . ' ' . $value : $cvar . ' ' . $value); } else { if ($values['type'] == 'yml' and preg_match('/^[\\s\\/]{0,}' . strtolower($cvar) . '\\s+(.*)$/', $loweredSingleLine)) { $edited = true; unset($cvarsNotFound[$cvar]); $splitLine = preg_split('/' . $cvar . '/', $singeLine, -1, PREG_SPLIT_NO_EMPTY); $ftpObect->writeContentToTemp(isset($splitLine[1]) ? $splitLine[0] . $cvar . ' ' . $value : $cvar . ' ' . $value); } else { if ($values['type'] == 'ini' and preg_match('/^[\\s\\/]{0,}' . strtolower($cvar) . '[\\s+]{0,}\\=[\\s+]{0,}(.*)$/', $loweredSingleLine)) { $edited = true; unset($cvarsNotFound[$cvar]); $ftpObect->writeContentToTemp($cvar . '=' . $value); } else { if ($values['type'] == 'ddot' and preg_match('/^[\\s\\/]{0,}' . strtolower($cvar) . '[\\s+]{0,}\\:[\\s+]{0,}(.*)$/', $loweredSingleLine)) { $edited = true; unset($cvarsNotFound[$cvar]); $ftpObect->writeContentToTemp($cvar . ':' . $value); } else { if ($values['type'] == 'lua' and preg_match("/^(.*)" . strtolower($cvar) . "[\\s+]{0,}\\=[\\s+]{0,}(.*)[\\,]\$/", $loweredSingleLine)) { $edited = true; unset($cvarsNotFound[$cvar]); $splitLine = preg_split('/' . $cvar . '/', $singeLine, -1, PREG_SPLIT_NO_EMPTY); $ftpObect->writeContentToTemp(isset($splitLine[1]) ? $splitLine[0] . $cvar . ' = ' . $value : $cvar . '=' . $value); } else { if ($values['type'] == 'json' and preg_match("/^(.*)[\"]" . strtolower($cvar) . "[\\s+]{0,}:[\\s+]{0,}(.*)[\\,]{0,1}\$/", $loweredSingleLine)) { $edited = true; unset($cvarsNotFound[$cvar]); $splitLine = preg_split('/' . $cvar . '/', $singeLine, -1, PREG_SPLIT_NO_EMPTY); $ftpObect->writeContentToTemp(isset($splitLine[1]) ? $splitLine[0] . $cvar . ' : ' . $value : $cvar . ':' . $value); } else { if ($values['type'] == 'xml' and preg_match("/^(.*)<" . strtolower($cvar) . ">(.*)<\\/" . strtolower($cvar) . ">(.*)\$/", $loweredSingleLine)) { $edited = true; unset($cvarsNotFound[$cvar]); $splitLine = preg_split('/\\<' . $cvar . '/', $singeLine, -1, PREG_SPLIT_NO_EMPTY); $ftpObect->writeContentToTemp(isset($splitLine[1]) ? $splitLine[0] . '<' . $cvar . '>' . $value . '</' . $cvar . '>' : '<' . $cvar . '> ' . $value . '</' . $cvar . '>'); } } } } } } } } // Write untouched content if ($edited == false) { $ftpObect->writeContentToTemp($singeLine); } // If we do not count, we would add a newline at the end every time, a file is edited if ($i < $lineCount) { $ftpObect->writeContentToTemp("\r\n"); } $i++; } $debug = array(); // In case of ini or CFG files we can add entries, which are missing from the file and should be protected foreach ($cvarsNotFound as $cvar => $value) { if ($values['type'] == 'cfg') { $ftpObect->writeContentToTemp($cvar . ' ' . $value . "\r\n"); } else { if ($values['type'] == 'ini') { $ftpObect->writeContentToTemp($cvar . '=' . $value . "\r\n"); } else { if ($values['type'] == 'ddot') { $ftpObect->writeContentToTemp($cvar . ':' . $value . "\r\n"); } else { $debug[] = 'Type is: ' . $values['type'] . ' and key value: ' . $cvar . '=>' . $value; } } } } $ftpObect->uploadFileFromTemp($path, $fileName, false); } } $ftpObect->logOut(); } }
$ftp->tempHandle = null; if (mb_strlen($ui->post['cleanedconfig'], 'UTF-8') < 16385) { $ftp->writeContentToTemp(stripslashes($ui->post['cleanedconfig'])); } else { $post_lines = explode('<br />', nl2br(stripslashes($ui->post['cleanedconfig']))); $post_lines[] = "\r\n"; $post_lines[] = "\r\n"; $post_lines[] = "\r\n"; foreach ($post_lines as $line) { $ftp->writeContentToTemp($line == "\r\n" ? $line : $line . "\r\n"); } } } } $uploaded = false; if ($ftp->uploadFileFromTemp($ftp->removeSlashes($pserver . $serverip . '_' . $port . '/' . $ftpshorten . '/'), $config, false)) { $uploaded = true; } if ($uploaded == false and $ftp->uploadFileFromTemp($ftp->removeSlashes($homeDir . '/' . $pserver . $serverip . '_' . $port . '/' . $ftpshorten . '/'), $config, false)) { $uploaded = true; } if ($uploaded) { $template_file = 'Success: ' . $config; $loguseraction = '%cfg% ' . $configname; $insertlog->execute(); } else { $template_file = 'Error writing config: ' . $config; } } else { if (isset($lines)) { $linearray = array();
$template_file = $sprache->protect . ' ' . $sprache->on; $loguseraction = '%restart% %pmode% ' . $appServer->appServerDetails['serverIP'] . ':' . $appServer->appServerDetails['port']; } $query = $sql->prepare("UPDATE `serverlist` SET `anticheat`='1' WHERE `id`=? AND `resellerid`=? LIMIT 1"); $query->execute(array($id, $resellerLockupID)); $ftp = new EasyWiFTP($appServer->appMasterServerDetails['ssh2IP'], $appServer->appMasterServerDetails['ftpPort'], $appServer->appServerDetails['userNameExecute'], $appServer->appServerDetails['ftpPasswordExecute']); if ($ftp->loggedIn) { $ftp->downloadToTemp($appServer->appServerDetails['absoluteFTPPath'], 0, $files); } $query = $sql->prepare("UPDATE `gsswitch` SET `protected`=? WHERE `id`=? LIMIT 1"); $query->execute(array($protected, $id)); $appServer->getAppServerDetails($id); if ($ftp->loggedIn) { $ftp->createSecondFTPConnect($appServer->appMasterServerDetails['ssh2IP'], $appServer->appMasterServerDetails['ftpPort'], $appServer->appServerDetails['userNameExecute'], $appServer->appServerDetails['ftpPasswordExecute']); if ($ftp->secondLoggedIn) { $ftp->uploadFileFromTemp($appServer->appServerDetails['absoluteFTPPath']); } } if ($appServer->appServerDetails['protectionModeStarted'] == 'Y') { $query = $sql->prepare("UPDATE `gsswitch` SET `ppassword`=AES_ENCRYPT(?,?),`psince`=NOW() WHERE `id`=? LIMIT 1"); $query->execute(array(passwordgenerate(10), $aeskey, $id)); $appServer->getAppServerDetails($id); $appServer->userCud('add'); $appServer->removeApp(array($appServer->appServerDetails['app']['templateChoosen'])); $appServer->addApp(); } $ftp = null; $appServer->startApp(); $appServer->execute(); $insertlog->execute(); if (isset($dbConnect['debug']) and $dbConnect['debug'] == 1) {