function absPath($inputPath, $baseDir = '.')
{
    // add basedir to inputPath if it's not absolute
    if (!isAbsPath($inputPath)) {
        if (!isAbsPath($baseDir)) {
            // make basedir absolute if it's not already
            $cwd = getcwd();
            if (!isAbsPath($cwd)) {
                die("getcwd() didn't return an absulte path '" . htmlencode($cwd) . "'!");
            }
            $baseDir = absPath($baseDir, $cwd);
        }
        $inputPath = "{$baseDir}/{$inputPath}";
    }
    // remove path prefixes: \\UNC-SERVER or C:
    $uncServerPrefix = '';
    $driveLetterPrefix = '';
    $uncServerRegexp = "|^\\\\\\\\[^\\\\/]+|";
    // matches \\SERVER-NAME UNC style prefixs
    $driveLetterRegexp = "|^[a-z]:(?=[\\\\/])|i";
    // matches W: windows drive letter prefixs
    if (preg_match($uncServerRegexp, $inputPath, $matches)) {
        // match prefix
        $uncServerPrefix = $matches[0];
        $inputPath = preg_replace($uncServerRegexp, '', $inputPath, 1);
        // remove prefix
    } elseif (preg_match($driveLetterRegexp, $inputPath, $matches)) {
        // match prefix
        $driveLetterPrefix = $matches[0];
        $inputPath = preg_replace($driveLetterRegexp, '', $inputPath, 1);
        // remove prefix
    }
    // normalize path components (replace backslashes, remove double-slashes, resolve . and ..)
    $inputPathComponents = preg_split("|[\\\\/]|", $inputPath, null, PREG_SPLIT_NO_EMPTY);
    $outputPathComponents = array();
    foreach ($inputPathComponents as $component) {
        if ($component == '.') {
            /* do nothing */
        } elseif ($component == '..') {
            array_pop($outputPathComponents);
        } else {
            array_push($outputPathComponents, $component);
        }
    }
    $outputPath = implode('/', $outputPathComponents);
    // re-add path prefixes and root slash
    $absPath = $uncServerPrefix . $driveLetterPrefix . '/' . $outputPath;
    //
    return $absPath;
}
function getValidationErrors($label, $value, $rulesString)
{
    $errors = array();
    // parse rules string
    $regexp = "(?<=^|\\s)";
    // zero-width lookbehind for start of string or whitespace
    $regexp .= "(\\!)?";
    // may or may-not countain NOT char
    $regexp .= "(\\w+)";
    // match rule word (eg: notBlank, minLength)
    $regexp .= "(?:\\((.*?)\\))?";
    // match argument in braces (if braces specified)
    $regexp .= "(?=\\s|\$)";
    // zero-width lookahead for whitespace or end of string
    preg_match_all("/{$regexp}/", $rulesString, $rules, PREG_SET_ORDER);
    // process rules
    foreach ($rules as $rule) {
        $matchedString = $rule[0];
        $booleanNot = (bool) $rule[1];
        $ruleName = strtolower($rule[2]);
        $ruleArgs = isset($rule[3]) ? $rule[3] : '';
        //showme(array("Matched String" => $matchedString, "Boolean Not" => $booleanNot, "Rule Name" => $ruleName, "Rule Args" => $ruleArgs)); // debug
        //
        $mb_length = mb_strlen($value);
        ### Modifier Rules Rules
        //*** NOTE: Check lowercase versions of all rule names
        if ($ruleName == 'allowblank') {
            if ($value == '') {
                break;
            }
            // this rule is used in addition to other rules (which may not allow blank be default)
        } elseif ($ruleName == 'notblank') {
            $fail = $value == '';
            if ($fail && !$booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' cannot be blank'), $label);
            }
            _dieAsCaller_onUnsupportedBooleanNot($ruleName, $booleanNot, $rulesString);
        } elseif ($ruleName == 'minlength') {
            $fail = $mb_length < $ruleArgs;
            if ($fail && !$booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' must be at least %2$s characters! (currently %3$s characters)'), $label, $ruleArgs, $mb_length);
            }
            _dieAsCaller_onUnsupportedBooleanNot($ruleName, $booleanNot, $rulesString);
        } elseif ($ruleName == 'maxlength') {
            $fail = $mb_length > $ruleArgs;
            if ($fail && !$booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' cannot be longer than %2$s characters! (currently %3$s characters)'), $label, $ruleArgs, $mb_length);
            }
            _dieAsCaller_onUnsupportedBooleanNot($ruleName, $booleanNot, $rulesString);
        } elseif ($ruleName == 'startsWith') {
            $fail = !startsWith($ruleArgs, $value);
            if ($fail && !$booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' must start with \'%2$s\''), $label, $ruleArgs);
            } elseif (!$fail && $booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' cannot start with \'%2$s\''), $label, $ruleArgs);
            }
        } elseif ($ruleName == 'endsWith') {
            $fail = !endsWith($ruleArgs, $value);
            if ($fail && !$booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' must end with \'%2$s\''), $label, $ruleArgs);
            } elseif (!$fail && $booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' cannot end with \'%2$s\''), $label, $ruleArgs);
            }
        } elseif ($ruleName == 'contains') {
            $fail = !contains($ruleArgs, $value);
            if ($fail && !$booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' must contain \'%2$s\''), $label, $ruleArgs);
            } elseif (!$fail && $booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' cannot contain \'%2$s\''), $label, $ruleArgs);
            }
        } elseif ($ruleName == 'oneof') {
            $allowedValues = preg_split("/\\s*,\\s*/", $ruleArgs);
            $fail = !in_array($value, $allowedValues);
            if ($fail && !$booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' must be one of the following (%2$s)!'), $label, $ruleArgs);
            } elseif (!$fail && $booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' cannot be one of the following (%2$s)!'), $label, $ruleArgs);
            }
        } elseif ($ruleName == 'validemail') {
            $fail = !isValidEmail($value, false);
            if ($fail && !$booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' isn\'t a valid email address (example user@example.com)!'), $label);
            }
            _dieAsCaller_onUnsupportedBooleanNot($ruleName, $booleanNot, $rulesString);
        } elseif ($ruleName == 'validemails') {
            $fail = !isValidEmail($value, true);
            if ($fail && !$booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' isn\'t a valid email address (example user@example.com)!'), $label);
            }
            _dieAsCaller_onUnsupportedBooleanNot($ruleName, $booleanNot, $rulesString);
        } elseif ($ruleName == 'minnumber') {
            $fail = $value < $ruleArgs;
            if ($fail && !$booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' must be equal or greater than %2$s!'), $label, $ruleArgs);
            }
            _dieAsCaller_onUnsupportedBooleanNot($ruleName, $booleanNot, $rulesString);
        } elseif ($ruleName == 'maxnumber') {
            $fail = $value > $ruleArgs;
            if ($fail && !$booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' must be equal or less than %2$s!'), $label, $ruleArgs);
            }
            _dieAsCaller_onUnsupportedBooleanNot($ruleName, $booleanNot, $rulesString);
        } elseif ($ruleName == 'int') {
            $fail = !preg_match("/^-?[0-9]+\$/", $value);
            if ($fail && !$booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' must be a number (only 0-9 and negative numbers are allowed)!'), $label);
            }
            _dieAsCaller_onUnsupportedBooleanNot($ruleName, $booleanNot, $rulesString);
        } elseif ($ruleName == 'positiveint') {
            $fail = !preg_match("/^[0-9]+\$/", $value);
            if ($fail && !$booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' must be a number (only 0-9 are allowed)!'), $label);
            }
            _dieAsCaller_onUnsupportedBooleanNot($ruleName, $booleanNot, $rulesString);
        } elseif ($ruleName == 'pathexists') {
            $fail = !file_exists($value);
            if ($fail && !$booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' doesn\'t exist!'), $label);
            } elseif (!$fail && $booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' already exists!'), $label);
            }
        } elseif ($ruleName == 'relativepath') {
            $fail = isAbsPath($value);
            if ($fail && !$booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' must be an absolute path (starting with / or C:\\)!'), $label);
            } elseif (!$fail && $booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' must be a relative path (cannot start with / or C:\\)!'), $label);
            }
        } elseif ($ruleName == 'absolutepath') {
            $fail = !isAbsPath($value);
            if ($fail && !$booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' must be an absolute path (starting with / or C:\\)!'), $label);
            } elseif (!$fail && $booleanNot) {
                $errors[] = sprintf(t('\'%1$s\' must be a relative path (cannot start with / or C:\\)!'), $label);
            }
        } else {
            dieAsCaller(sprintf(t("Unknown rule '%s' specified!"), $ruleName));
        }
    }
    //
    $errorString = implode("\n", $errors);
    if ($errorString) {
        $errorString .= "\n";
    }
    return $errorString;
}
<?php

/**
 * Retrieve path (taken from cli_dispatch.phpsh)
 */
// Get path to this script
$tempPathThisScript = isset($_SERVER['argv'][0]) ? $_SERVER['argv'][0] : (isset($_ENV['_']) ? $_ENV['_'] : $_SERVER['_']);
// Resolve path
if (!isAbsPath($tempPathThisScript)) {
    $workingDirectory = $_SERVER['PWD'] ? $_SERVER['PWD'] : getcwd();
    if ($workingDirectory) {
        $tempPathThisScript = $workingDirectory . '/' . preg_replace('/\\.\\//', '', $tempPathThisScript);
        if (!@is_file($tempPathThisScript)) {
            die('Relative path found, but an error occured during resolving of the absolute path: ' . $tempPathThisScript . PHP_EOL);
        }
    } else {
        die('Relative path found, but resolving absolute path is not supported on this platform.' . PHP_EOL);
    }
}
$typo3Root = preg_replace('#typo3conf/ext/crawler/cli/bootstrap.php$#', '', $tempPathThisScript);
/**
 * Second parameter is a base64 encoded serialized array of header data
 */
$additionalHeaders = unserialize(base64_decode($_SERVER['argv'][3]));
if (is_array($additionalHeaders)) {
    foreach ($additionalHeaders as $additionalHeader) {
        if (strpos($additionalHeader, ':') !== FALSE) {
            list($key, $value) = explode(':', $additionalHeader, 2);
            $key = str_replace('-', '_', strtoupper(trim($key)));
            if ($key != 'HOST') {
                $_SERVER['HTTP_' . $key] = $value;
Example #4
0
saveFile($config, $config_data);
//////////////////////////////////////////////////////////////////////
// Verify no overwrites
//////////////////////////////////////////////////////////////////////
if (!file_exists($users) && !file_exists($projects) && !file_exists($active)) {
    //////////////////////////////////////////////////////////////////
    // Get POST responses
    //////////////////////////////////////////////////////////////////
    $username = cleanUsername("default");
    $password = encryptPassword("default");
    //////////////////////////////////////////////////////////////////
    // Create Projects files
    //////////////////////////////////////////////////////////////////
    $project_path = 'cloud-project';
    $project_name = 'Cloud Project';
    if (!isAbsPath($project_path)) {
        $project_path = str_replace(" ", "_", preg_replace('/[^\\w-\\.]/', '', $project_path));
        mkdir($workspace . "/" . $project_path);
    } else {
        $project_path = cleanPath($project_path);
        if (substr($project_path, -1) == '/') {
            $project_path = substr($project_path, 0, strlen($project_path) - 1);
        }
        if (!file_exists($project_path)) {
            if (!mkdir($project_path . '/', 0755, true)) {
                die("Unable to create Absolute Path");
            }
        } else {
            if (!is_writable($project_path) || !is_readable($project_path)) {
                die("No Read/Write Permission");
            }
function isAbsolutePath($path)
{
    return isAbsPath($path);
}
function backupDatabase($filenameOrPath = '', $selectedTable = '')
{
    global $TABLE_PREFIX;
    $prefixPlaceholder = '#TABLE_PREFIX#_';
    set_time_limit(60 * 5);
    // v2.51 - allow up to 5 minutes to backup/restore database
    session_write_close();
    // v2.51 - End the current session and store session data so locked session data doesn't prevent concurrent access to CMS by user while backup in progress
    // error checking
    if ($selectedTable != '') {
        $schemaTables = getSchemaTables();
        if (preg_match("/[^\\w\\d\\-\\.]/", $selectedTable)) {
            die(__FUNCTION__ . " : \$selectedTable contains invalid chars! " . htmlencode($selectedTable));
        }
        if (!in_array($selectedTable, $schemaTables)) {
            die("Unknown table selected '" . htmlencode($selectedTable) . "'!");
        }
    }
    // open backup file
    $hostname = preg_replace('/[^\\w\\d\\-\\.]/', '', @$_SERVER['HTTP_HOST']);
    if (!$filenameOrPath) {
        $filenameOrPath = "{$hostname}-v{$GLOBALS['APP']['version']}-" . date('Ymd-His');
        if ($selectedTable) {
            $filenameOrPath .= "-{$selectedTable}";
        }
        $filenameOrPath .= ".sql.php";
    }
    $outputFilepath = isAbsPath($filenameOrPath) ? $filenameOrPath : DATA_DIR . "/backups/{$filenameOrPath}";
    // v2.60 if only filename provided, use /data/backup/ as the basedir
    $fp = @fopen($outputFilepath, 'x');
    if (!$fp) {
        // file already exists - avoid race condition
        session_start();
        return false;
    }
    // create no execute php header
    fwrite($fp, "-- <?php die('This is not a program file.'); exit; ?>\n\n");
    # prevent file from being executed
    // get tablenames to backup
    if ($selectedTable) {
        $tablenames = array(getTableNameWithPrefix($selectedTable));
    } else {
        $skippedTables = array('_cron_log', '_error_log', '_outgoing_mail', '_nlb_log');
        // don't backup these table names
        $skippedTables = applyFilters('backupDatabase_skippedTables', $skippedTables);
        // let users skip tables via plugins
        $skippedTables = array_map('getTableNameWithPrefix', $skippedTables);
        // add table_prefix to all table names (if needed)
        $allTables = getMysqlTablesWithPrefix();
        $tablenames = array_diff($allTables, $skippedTables);
        // remove skipped tables from list
    }
    // backup database
    foreach ($tablenames as $unescapedTablename) {
        $escapedTablename = mysql_escape($unescapedTablename);
        $tablenameWithFakePrefix = $prefixPlaceholder . getTableNameWithoutPrefix($escapedTablename);
        // create table
        fwrite($fp, "\n--\n");
        fwrite($fp, "-- Table structure for table `{$tablenameWithFakePrefix}`\n");
        fwrite($fp, "--\n\n");
        fwrite($fp, "DROP TABLE IF EXISTS `{$tablenameWithFakePrefix}`;\n\n");
        $result = mysql_query("SHOW CREATE TABLE `{$escapedTablename}`");
        list(, $createStatement) = mysql_fetch_row($result) or die("MySQL Error: " . htmlencode(mysql_error()));
        $createStatement = str_replace("TABLE `{$TABLE_PREFIX}", "TABLE `{$prefixPlaceholder}", $createStatement);
        fwrite($fp, "{$createStatement};\n\n");
        if (is_resource($result)) {
            mysql_free_result($result);
        }
        // create rows
        fwrite($fp, "\n--\n");
        fwrite($fp, "-- Dumping data for table `{$tablenameWithFakePrefix}`\n");
        fwrite($fp, "--\n\n");
        $result = mysql_query("SELECT * FROM `{$escapedTablename}`") or die("MySQL Error: " . htmlencode(mysql_error()));
        while ($row = mysql_fetch_row($result)) {
            $values = '';
            foreach ($row as $value) {
                if (is_null($value)) {
                    $values .= 'NULL,';
                } else {
                    $values .= '"' . mysql_real_escape_string($value) . '",';
                }
            }
            $values = chop($values, ',');
            // remove trailing comma
            fwrite($fp, "INSERT INTO `{$tablenameWithFakePrefix}` VALUES({$values});\n");
        }
        if (is_resource($result)) {
            mysql_free_result($result);
        }
    }
    //
    fwrite($fp, "\n");
    $result = fwrite($fp, "-- Dump completed on " . date('Y-m-d H:i:s O') . "\n\n");
    if ($result === false) {
        die(__FUNCTION__ . ": Error writing backup file! {$php_errormsg}");
    }
    fclose($fp) || die(__FUNCTION__ . ": Error closing backup file! {$php_errormsg}");
    //
    @session_start();
    // hide error: E_WARNING: session_start(): Cannot send session cache limiter - headers already sent
    return $outputFilepath;
}