From 5e637fb21845143ef846475a29d8652a912000be Mon Sep 17 00:00:00 2001 From: "Thomas DEBESSE (illwieckz)" Date: Tue, 13 Nov 2012 03:27:52 +0100 Subject: [PATCH 1/7] calculate WEBROOT and SUBURI from SERVER env to run OC on an alias (or not) --- lib/base.php | 480 ++++++++++++++++++++++----------------------------- 1 file changed, 208 insertions(+), 272 deletions(-) diff --git a/lib/base.php b/lib/base.php index f9818d3514e7..065f08bb3a9c 100644 --- a/lib/base.php +++ b/lib/base.php @@ -27,10 +27,9 @@ * No, we can not put this class in its own file because it is used by * OC_autoload! */ -class OC -{ +class OC{ /** - * Associative array for autoloading. classname => filename + * Assoziative array for autoloading. classname => filename */ public static $CLASSPATH = array(); /** @@ -74,49 +73,48 @@ class OC * OC router */ protected static $router = null; - /** * SPL autoload */ - public static function autoload($className) - { - if (array_key_exists($className, OC::$CLASSPATH)) { + public static function autoload($className) { + if(array_key_exists($className, OC::$CLASSPATH)) { $path = OC::$CLASSPATH[$className]; /** @TODO: Remove this when necessary - Remove "apps/" from inclusion path for smooth migration to mutli app dir - */ - if (strpos($path, 'apps/') === 0) { - OC_Log::write('core', 'include path for class "' . $className . '" starts with "apps/"', OC_Log::DEBUG); + Remove "apps/" from inclusion path for smooth migration to mutli app dir + */ + if (strpos($path, 'apps/')===0) { + OC_Log::write('core', 'include path for class "'.$className.'" starts with "apps/"', OC_Log::DEBUG); $path = str_replace('apps/', '', $path); } - } elseif (strpos($className, 'OC_') === 0) { + } + elseif(strpos($className, 'OC_')===0) { $path = strtolower(str_replace('_', '/', substr($className, 3)) . '.php'); - } elseif (strpos($className, 'OC\\') === 0) { + } + elseif(strpos($className, 'OC\\')===0) { $path = strtolower(str_replace('\\', '/', substr($className, 3)) . '.php'); - } elseif (strpos($className, 'OCP\\') === 0) { - $path = 'public/' . strtolower(str_replace('\\', '/', substr($className, 3)) . '.php'); - } elseif (strpos($className, 'OCA\\') === 0) { - foreach(self::$APPSROOTS as $appDir) { - $path = $appDir['path'] . '/' . strtolower(str_replace('\\', '/', substr($className, 3)) . '.php'); - $fullPath = stream_resolve_include_path($path); - if (file_exists($fullPath)) { - require_once $fullPath; - return false; - } - } - } elseif (strpos($className, 'Sabre_') === 0) { - $path = str_replace('_', '/', $className) . '.php'; - } elseif (strpos($className, 'Symfony\\Component\\Routing\\') === 0) { - $path = 'symfony/routing/' . str_replace('\\', '/', $className) . '.php'; - } elseif (strpos($className, 'Sabre\\VObject') === 0) { + } + elseif(strpos($className, 'OCP\\')===0) { + $path = 'public/'.strtolower(str_replace('\\', '/', substr($className, 3)) . '.php'); + } + elseif(strpos($className, 'OCA\\')===0) { + $path = 'apps/'.strtolower(str_replace('\\', '/', substr($className, 3)) . '.php'); + } + elseif(strpos($className, 'Sabre_')===0) { + $path = str_replace('_', '/', $className) . '.php'; + } + elseif(strpos($className, 'Symfony\\Component\\Routing\\')===0) { + $path = 'symfony/routing/'.str_replace('\\', '/', $className) . '.php'; + } + elseif(strpos($className, 'Sabre\\VObject')===0) { $path = str_replace('\\', '/', $className) . '.php'; - } elseif (strpos($className, 'Test_') === 0) { - $path = 'tests/lib/' . strtolower(str_replace('_', '/', substr($className, 5)) . '.php'); - } else { + } + elseif(strpos($className, 'Test_')===0) { + $path = 'tests/lib/'.strtolower(str_replace('_', '/', substr($className, 5)) . '.php'); + }else{ return false; } - if ($fullPath = stream_resolve_include_path($path)) { + if($fullPath = stream_resolve_include_path($path)) { require_once $fullPath; } return false; @@ -125,178 +123,171 @@ public static function autoload($className) public static function initPaths() { // calculate the root directories - OC::$SERVERROOT = str_replace("\\", '/', substr(__DIR__, 0, -4)); - OC::$SUBURI = str_replace("\\", "/", substr(realpath($_SERVER["SCRIPT_FILENAME"]), strlen(OC::$SERVERROOT))); + OC::$SERVERROOT=str_replace("\\", '/', substr(__FILE__, 0, -13)); + $documentRoot=realpath($_SERVER['DOCUMENT_ROOT']); $scriptName = $_SERVER["SCRIPT_NAME"]; - if (substr($scriptName, -1) == '/') { - $scriptName .= 'index.php'; - //make sure suburi follows the same rules as scriptName - if (substr(OC::$SUBURI, -9) != 'index.php') { - if (substr(OC::$SUBURI, -1) != '/') { - OC::$SUBURI = OC::$SUBURI . '/'; - } - OC::$SUBURI = OC::$SUBURI . 'index.php'; - } + $scriptFileName = $_SERVER["SCRIPT_FILENAME"]; + if (isset($_SERVER["PATH_INFO"])) { + $pathInfo = $_SERVER["PATH_INFO"]; } - - OC::$WEBROOT = substr($scriptName, 0, strlen($scriptName) - strlen(OC::$SUBURI)); - - if (OC::$WEBROOT != '' and OC::$WEBROOT[0] !== '/') { - OC::$WEBROOT = '/' . OC::$WEBROOT; + else { + $pathInfo = ""; + } + $subDir = ""; + $alias = ""; + if (strcmp($documentRoot,OC::$SERVERROOT)) { + $subDir=substr(OC::$SERVERROOT,strlen($documentRoot)); + } + if(strcmp(OC::$SERVERROOT.$scriptName, $scriptFileName)) { + $alias=substr($scriptName, 0, strlen(OC::$SERVERROOT) - strlen($subDir) - strlen($scriptFileName)); } + OC::$WEBROOT=$alias.$subDir; + OC::$SUBURI=substr($scriptName, 1 + strlen($alias)).$pathInfo; // ensure we can find OC_Config set_include_path( - OC::$SERVERROOT . '/lib' . PATH_SEPARATOR . + OC::$SERVERROOT.'/lib'.PATH_SEPARATOR. get_include_path() ); // search the 3rdparty folder - if (OC_Config::getValue('3rdpartyroot', '') <> '' and OC_Config::getValue('3rdpartyurl', '') <> '') { - OC::$THIRDPARTYROOT = OC_Config::getValue('3rdpartyroot', ''); - OC::$THIRDPARTYWEBROOT = OC_Config::getValue('3rdpartyurl', ''); - } elseif (file_exists(OC::$SERVERROOT . '/3rdparty')) { - OC::$THIRDPARTYROOT = OC::$SERVERROOT; - OC::$THIRDPARTYWEBROOT = OC::$WEBROOT; - } elseif (file_exists(OC::$SERVERROOT . '/../3rdparty')) { - OC::$THIRDPARTYWEBROOT = rtrim(dirname(OC::$WEBROOT), '/'); - OC::$THIRDPARTYROOT = rtrim(dirname(OC::$SERVERROOT), '/'); - } else { + if(OC_Config::getValue('3rdpartyroot', '')<>'' and OC_Config::getValue('3rdpartyurl', '')<>'') { + OC::$THIRDPARTYROOT=OC_Config::getValue('3rdpartyroot', ''); + OC::$THIRDPARTYWEBROOT=OC_Config::getValue('3rdpartyurl', ''); + }elseif(file_exists(OC::$SERVERROOT.'/3rdparty')) { + OC::$THIRDPARTYROOT=OC::$SERVERROOT; + OC::$THIRDPARTYWEBROOT=OC::$WEBROOT; + }elseif(file_exists(OC::$SERVERROOT.'/../3rdparty')) { + OC::$THIRDPARTYWEBROOT=rtrim(dirname(OC::$WEBROOT), '/'); + OC::$THIRDPARTYROOT=rtrim(dirname(OC::$SERVERROOT), '/'); + }else{ echo("3rdparty directory not found! Please put the ownCloud 3rdparty folder in the ownCloud folder or the folder above. You can also configure the location in the config.php file."); exit; } // search the apps folder $config_paths = OC_Config::getValue('apps_paths', array()); - if (!empty($config_paths)) { - foreach ($config_paths as $paths) { - if (isset($paths['url']) && isset($paths['path'])) { + if(! empty($config_paths)) { + foreach($config_paths as $paths) { + if( isset($paths['url']) && isset($paths['path'])) { $paths['url'] = rtrim($paths['url'], '/'); $paths['path'] = rtrim($paths['path'], '/'); OC::$APPSROOTS[] = $paths; } } - } elseif (file_exists(OC::$SERVERROOT . '/apps')) { - OC::$APPSROOTS[] = array('path' => OC::$SERVERROOT . '/apps', 'url' => '/apps', 'writable' => true); - } elseif (file_exists(OC::$SERVERROOT . '/../apps')) { - OC::$APPSROOTS[] = array('path' => rtrim(dirname(OC::$SERVERROOT), '/') . '/apps', 'url' => '/apps', 'writable' => true); + }elseif(file_exists(OC::$SERVERROOT.'/apps')) { + OC::$APPSROOTS[] = array('path'=> OC::$SERVERROOT.'/apps', 'url' => '/apps', 'writable' => true); + }elseif(file_exists(OC::$SERVERROOT.'/../apps')) { + OC::$APPSROOTS[] = array('path'=> rtrim(dirname(OC::$SERVERROOT), '/').'/apps', 'url' => '/apps', 'writable' => true); } - if (empty(OC::$APPSROOTS)) { + if(empty(OC::$APPSROOTS)) { echo("apps directory not found! Please put the ownCloud apps folder in the ownCloud folder or the folder above. You can also configure the location in the config.php file."); exit; } $paths = array(); - foreach (OC::$APPSROOTS as $path) + foreach( OC::$APPSROOTS as $path) $paths[] = $path['path']; // set the right include path set_include_path( - OC::$SERVERROOT . '/lib' . PATH_SEPARATOR . - OC::$SERVERROOT . '/config' . PATH_SEPARATOR . - OC::$THIRDPARTYROOT . '/3rdparty' . PATH_SEPARATOR . - implode($paths, PATH_SEPARATOR) . PATH_SEPARATOR . - get_include_path() . PATH_SEPARATOR . + OC::$SERVERROOT.'/lib'.PATH_SEPARATOR. + OC::$SERVERROOT.'/config'.PATH_SEPARATOR. + OC::$THIRDPARTYROOT.'/3rdparty'.PATH_SEPARATOR. + implode($paths, PATH_SEPARATOR).PATH_SEPARATOR. + get_include_path().PATH_SEPARATOR. OC::$SERVERROOT ); } - public static function checkConfig() { - if (file_exists(OC::$SERVERROOT . "/config/config.php") and !is_writable(OC::$SERVERROOT . "/config/config.php")) { - $tmpl = new OC_Template('', 'error', 'guest'); - $tmpl->assign('errors', array(1 => array('error' => "Can't write into config directory 'config'", 'hint' => "You can usually fix this by giving the webserver user write access to the config directory in owncloud"))); - $tmpl->printPage(); - exit(); - } - } - - public static function checkInstalled() - { + public static function checkInstalled() { // Redirect to installer if not installed if (!OC_Config::getValue('installed', false) && OC::$SUBURI != '/index.php') { - if (!OC::$CLI) { - $url = 'http://' . $_SERVER['SERVER_NAME'] . OC::$WEBROOT . '/index.php'; + if(!OC::$CLI) { + $url = 'http://'.$_SERVER['SERVER_NAME'].OC::$WEBROOT.'/index.php'; header("Location: $url"); } exit(); } } - public static function checkSSL() - { + public static function checkSSL() { // redirect to https site if configured - if (OC_Config::getValue("forcessl", false)) { + if( OC_Config::getValue( "forcessl", false )) { header('Strict-Transport-Security: max-age=31536000'); ini_set("session.cookie_secure", "on"); - if (OC_Request::serverProtocol() <> 'https' and !OC::$CLI) { - $url = "https://" . OC_Request::serverHost() . $_SERVER['REQUEST_URI']; + if(OC_Request::serverProtocol()<>'https' and !OC::$CLI) { + $url = "https://". OC_Request::serverHost() . $_SERVER['REQUEST_URI']; header("Location: $url"); exit(); } } } - public static function checkMaintenanceMode() { - // Allow ajax update script to execute without being stopped - if (OC_Config::getValue('maintenance', false) && OC::$SUBURI != '/core/ajax/update.php') { - // send http status 503 - header('HTTP/1.1 503 Service Temporarily Unavailable'); - header('Status: 503 Service Temporarily Unavailable'); - header('Retry-After: 120'); - - // render error page - $tmpl = new OC_Template('', 'error', 'guest'); - $tmpl->assign('errors', array(1 => array('error' => 'ownCloud is in maintenance mode'))); - $tmpl->printPage(); - exit(); - } - } - - public static function checkUpgrade($showTemplate = true) { - if (OC_Config::getValue('installed', false)) { - $installedVersion = OC_Config::getValue('version', '0.0.0'); - $currentVersion = implode('.', OC_Util::getVersion()); + public static function checkUpgrade() { + if(OC_Config::getValue('installed', false)) { + $installedVersion=OC_Config::getValue('version', '0.0.0'); + $currentVersion=implode('.', OC_Util::getVersion()); if (version_compare($currentVersion, $installedVersion, '>')) { - if ($showTemplate && !OC_Config::getValue('maintenance', false)) { - OC_Config::setValue('maintenance', true); - OC_Log::write('core', 'starting upgrade from ' . $installedVersion . ' to ' . $currentVersion, OC_Log::DEBUG); - OC_Util::addscript('update'); - $tmpl = new OC_Template('', 'update', 'guest'); - $tmpl->assign('version', OC_Util::getVersionString()); + // Check if the .htaccess is existing - this is needed for upgrades from really old ownCloud versions + if (isset($_SERVER['SERVER_SOFTWARE']) && strstr($_SERVER['SERVER_SOFTWARE'], 'Apache')) { + if(!OC_Util::ishtaccessworking()) { + if(!file_exists(OC::$SERVERROOT.'/data/.htaccess')) { + OC_Setup::protectDataDirectory(); + } + } + } + OC_Log::write('core', 'starting upgrade from '.$installedVersion.' to '.$currentVersion, OC_Log::DEBUG); + $result=OC_DB::updateDbFromStructure(OC::$SERVERROOT.'/db_structure.xml'); + if(!$result) { + echo 'Error while upgrading the database'; + die(); + } + if(file_exists(OC::$SERVERROOT."/config/config.php") and !is_writable(OC::$SERVERROOT."/config/config.php")) { + $tmpl = new OC_Template( '', 'error', 'guest' ); + $tmpl->assign('errors', array(1=>array('error'=>"Can't write into config directory 'config'", 'hint'=>"You can usually fix this by giving the webserver user write access to the config directory in owncloud"))); $tmpl->printPage(); - exit(); - } else { - return true; + exit; } + $minimizerCSS = new OC_Minimizer_CSS(); + $minimizerCSS->clearCache(); + $minimizerJS = new OC_Minimizer_JS(); + $minimizerJS->clearCache(); + OC_Config::setValue('version', implode('.', OC_Util::getVersion())); + OC_App::checkAppsRequirements(); + // load all apps to also upgrade enabled apps + OC_App::loadApps(); } - return false; } } - public static function initTemplateEngine() - { + public static function initTemplateEngine() { // Add the stuff we need always - OC_Util::addScript("jquery-1.7.2.min"); - OC_Util::addScript("jquery-ui-1.10.0.custom"); - OC_Util::addScript("jquery-showpassword"); - OC_Util::addScript("jquery.infieldlabel"); - OC_Util::addScript("jquery-tipsy"); - OC_Util::addScript("oc-dialogs"); - OC_Util::addScript("js"); - OC_Util::addScript("eventsource"); - OC_Util::addScript("config"); + OC_Util::addScript( "jquery-1.7.2.min" ); + OC_Util::addScript( "jquery-ui-1.8.16.custom.min" ); + OC_Util::addScript( "jquery-showpassword" ); + OC_Util::addScript( "jquery.infieldlabel" ); + OC_Util::addScript( "jquery-tipsy" ); + OC_Util::addScript( "oc-dialogs" ); + OC_Util::addScript( "js" ); + OC_Util::addScript( "eventsource" ); + OC_Util::addScript( "config" ); //OC_Util::addScript( "multiselect" ); OC_Util::addScript('search', 'result'); OC_Util::addScript('router'); - OC_Util::addStyle("styles"); - OC_Util::addStyle("multiselect"); - OC_Util::addStyle("jquery-ui-1.10.0.custom"); - OC_Util::addStyle("jquery-tipsy"); - OC_Util::addScript("oc-requesttoken"); + if( OC_Config::getValue( 'installed', false )) { + if( OC_Appconfig::getValue( 'core', 'backgroundjobs_mode', 'ajax' ) == 'ajax' ) { + OC_Util::addScript( 'backgroundjobs' ); + } + } + + OC_Util::addStyle( "styles" ); + OC_Util::addStyle( "multiselect" ); + OC_Util::addStyle( "jquery-ui-1.8.16.custom" ); + OC_Util::addStyle( "jquery-tipsy" ); } - public static function initSession() - { + public static function initSession() { // prevents javascript from accessing php session cookies ini_set('session.cookie_httponly', '1;'); @@ -326,8 +317,7 @@ public static function initSession() $_SESSION['LAST_ACTIVITY'] = time(); } - public static function getRouter() - { + public static function getRouter() { if (!isset(OC::$router)) { OC::$router = new OC_Router(); OC::$router->loadRoutes(); @@ -336,20 +326,7 @@ public static function getRouter() return OC::$router; } - - public static function loadAppClassPaths() - { - foreach(OC_APP::getEnabledApps() as $app) { - $file = OC_App::getAppPath($app).'/appinfo/classpath.php'; - if(file_exists($file)) { - require_once $file; - } - } - } - - - public static function init() - { + public static function init() { // register autoloader spl_autoload_register(array('OC', 'autoload')); setlocale(LC_ALL, 'en_US.UTF-8'); @@ -360,13 +337,13 @@ public static function init() if (defined('DEBUG') && DEBUG) { ini_set('display_errors', 1); } - self::$CLI = (php_sapi_name() == 'cli'); + self::$CLI=(php_sapi_name() == 'cli'); date_default_timezone_set('UTC'); ini_set('arg_separator.output', '&'); // try to switch magic quotes off. - if (get_magic_quotes_gpc()) { + if(get_magic_quotes_gpc()) { @set_magic_quotes_runtime(false); } @@ -414,7 +391,7 @@ public static function init() // set debug mode if an xdebug session is active if (!defined('DEBUG') || !DEBUG) { - if (isset($_COOKIE['XDEBUG_SESSION'])) { + if(isset($_COOKIE['XDEBUG_SESSION'])) { define('DEBUG', true); } } @@ -425,27 +402,27 @@ public static function init() stream_wrapper_register('static', 'OC_StaticStreamWrapper'); stream_wrapper_register('close', 'OC_CloseStreamWrapper'); - self::checkConfig(); self::checkInstalled(); self::checkSSL(); self::initSession(); self::initTemplateEngine(); + self::checkUpgrade(); - $errors = OC_Util::checkServer(); - if (count($errors) > 0) { + $errors=OC_Util::checkServer(); + if(count($errors)>0) { OC_Template::printGuestPage('', 'error', array('errors' => $errors)); exit; } // User and Groups - if (!OC_Config::getValue("installed", false)) { + if( !OC_Config::getValue( "installed", false )) { $_SESSION['user_id'] = ''; } OC_User::useBackend(new OC_User_Database()); OC_Group::useBackend(new OC_Group_Database()); - if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SESSION['user_id']) && $_SERVER['PHP_AUTH_USER'] != $_SESSION['user_id']) { + if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SESSION['user_id']) && $_SERVER['PHP_AUTH_USER'] != $_SESSION['user_id']) { OC_User::logout(); } @@ -453,10 +430,10 @@ public static function init() // This includes plugins for users and filesystems as well global $RUNTIME_NOAPPS; global $RUNTIME_APPTYPES; - if (!$RUNTIME_NOAPPS) { - if ($RUNTIME_APPTYPES) { + if(!$RUNTIME_NOAPPS ) { + if($RUNTIME_APPTYPES) { OC_App::loadApps($RUNTIME_APPTYPES); - } else { + }else{ OC_App::loadApps(); } } @@ -472,8 +449,8 @@ public static function init() register_shutdown_function(array('OC_Helper', 'cleanTmp')); //parse the given parameters - self::$REQUESTEDAPP = (isset($_GET['app']) && trim($_GET['app']) != '' && !is_null($_GET['app']) ? str_replace(array('\0', '/', '\\', '..'), '', strip_tags($_GET['app'])) : OC_Config::getValue('defaultapp', 'files')); - if (substr_count(self::$REQUESTEDAPP, '?') != 0) { + self::$REQUESTEDAPP = (isset($_GET['app']) && trim($_GET['app']) != '' && !is_null($_GET['app'])?str_replace(array('\0', '/', '\\', '..'), '', strip_tags($_GET['app'])):OC_Config::getValue('defaultapp', 'files')); + if(substr_count(self::$REQUESTEDAPP, '?') != 0) { $app = substr(self::$REQUESTEDAPP, 0, strpos(self::$REQUESTEDAPP, '?')); $param = substr($_GET['app'], strpos($_GET['app'], '?') + 1); parse_str($param, $get); @@ -481,8 +458,8 @@ public static function init() self::$REQUESTEDAPP = $app; $_GET['app'] = $app; } - self::$REQUESTEDFILE = (isset($_GET['getfile']) ? $_GET['getfile'] : null); - if (substr_count(self::$REQUESTEDFILE, '?') != 0) { + self::$REQUESTEDFILE = (isset($_GET['getfile'])?$_GET['getfile']:null); + if(substr_count(self::$REQUESTEDFILE, '?') != 0) { $file = substr(self::$REQUESTEDFILE, 0, strpos(self::$REQUESTEDFILE, '?')); $param = substr(self::$REQUESTEDFILE, strpos(self::$REQUESTEDFILE, '?') + 1); parse_str($param, $get); @@ -490,32 +467,21 @@ public static function init() self::$REQUESTEDFILE = $file; $_GET['getfile'] = $file; } - if (!is_null(self::$REQUESTEDFILE)) { + if(!is_null(self::$REQUESTEDFILE)) { $subdir = OC_App::getAppPath(OC::$REQUESTEDAPP) . '/' . self::$REQUESTEDFILE; $parent = OC_App::getAppPath(OC::$REQUESTEDAPP); - if (!OC_Helper::issubdirectory($subdir, $parent)) { + if(!OC_Helper::issubdirectory($subdir, $parent)) { self::$REQUESTEDFILE = null; header('HTTP/1.0 404 Not Found'); exit; } } - - // write error into log if locale can't be set - if (OC_Util::issetlocaleworking() == false) { - OC_Log::write('core', 'setting locate to en_US.UTF-8 failed. Support is probably not installed on your system', OC_Log::ERROR); - } - if (OC_Config::getValue('installed', false)) { - if (OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') { - OC_Util::addScript('backgroundjobs'); - } - } } /** * register hooks for the cache */ - public static function registerCacheHooks() - { + public static function registerCacheHooks() { // register cache cleanup jobs OC_BackgroundJob_RegularTask::register('OC_Cache_FileGlobal', 'gc'); OC_Hook::connect('OC_User', 'post_login', 'OC_Cache_File', 'loginListener'); @@ -524,8 +490,7 @@ public static function registerCacheHooks() /** * register hooks for the filesystem */ - public static function registerFilesystemHooks() - { + public static function registerFilesystemHooks() { // Check for blacklisted files OC_Hook::connect('OC_Filesystem', 'write', 'OC_Filesystem', 'isBlacklisted'); OC_Hook::connect('OC_Filesystem', 'rename', 'OC_Filesystem', 'isBlacklisted'); @@ -534,8 +499,7 @@ public static function registerFilesystemHooks() /** * register hooks for sharing */ - public static function registerShareHooks() - { + public static function registerShareHooks() { OC_Hook::connect('OC_User', 'post_deleteUser', 'OCP\Share', 'post_deleteUser'); OC_Hook::connect('OC_User', 'post_addToGroup', 'OCP\Share', 'post_addToGroup'); OC_Hook::connect('OC_User', 'post_removeFromGroup', 'OCP\Share', 'post_removeFromGroup'); @@ -545,12 +509,22 @@ public static function registerShareHooks() /** * @brief Handle the request */ - public static function handleRequest() - { - // load all the classpaths from the enabled apps so they are available - // in the routing files of each app - OC::loadAppClassPaths(); - + public static function handleRequest() { + if (!OC_Config::getValue('installed', false)) { + require_once 'core/setup.php'; + exit(); + } + // Handle redirect URL for logged in users + if(isset($_REQUEST['redirect_url']) && OC_User::isLoggedIn()) { + $location = OC_Helper::makeURLAbsolute(urldecode($_REQUEST['redirect_url'])); + header( 'Location: '.$location ); + return; + } + // Handle WebDAV + if($_SERVER['REQUEST_METHOD']=='PROPFIND') { + header('location: '.OC_Helper::linkToRemote('webdav')); + return; + } try { OC::getRouter()->match(OC_Request::getPathInfo()); return; @@ -564,49 +538,25 @@ public static function handleRequest() $file = OC::$REQUESTEDFILE; $param = array('app' => $app, 'file' => $file); // Handle app css files - if (substr($file, -3) == 'css') { + if(substr($file, -3) == 'css') { self::loadCSSFile($param); return; } - - // Check if ownCloud is installed or in maintenance (update) mode - if (!OC_Config::getValue('installed', false)) { - require_once 'core/setup.php'; - exit(); - } - self::checkMaintenanceMode(); - self::checkUpgrade(); - - // Handle redirect URL for logged in users - if (isset($_REQUEST['redirect_url']) && OC_User::isLoggedIn()) { - $location = OC_Helper::makeURLAbsolute(urldecode($_REQUEST['redirect_url'])); - header('Location: ' . $location); - return; - } - // Handle WebDAV - if ($_SERVER['REQUEST_METHOD'] == 'PROPFIND') { - header('location: ' . OC_Helper::linkToRemote('webdav')); - return; - } - // Someone is logged in : - if (OC_User::isLoggedIn()) { + if(OC_User::isLoggedIn()) { OC_App::loadApps(); OC_User::setupBackends(); - if (isset($_GET["logout"]) and ($_GET["logout"])) { - if (isset($_COOKIE['oc_token'])) { - OC_Preferences::deleteKey(OC_User::getUser(), 'login_token', $_COOKIE['oc_token']); - } + if(isset($_GET["logout"]) and ($_GET["logout"])) { + OC_Preferences::deleteKey(OC_User::getUser(), 'login_token', $_COOKIE['oc_token']); OC_User::logout(); - header("Location: " . OC::$WEBROOT . '/'); - } else { - if (is_null($file)) { + header("Location: ".OC::$WEBROOT.'/'); + }else{ + if(is_null($file)) { $param['file'] = 'index.php'; } $file_ext = substr($param['file'], -3); if ($file_ext != 'php' - || !self::loadAppScriptFile($param) - ) { + || !self::loadAppScriptFile($param)) { header('HTTP/1.0 404 Not Found'); } } @@ -616,8 +566,7 @@ public static function handleRequest() self::handleLogin(); } - public static function loadAppScriptFile($param) - { + public static function loadAppScriptFile($param) { OC_App::loadApps(); $app = $param['app']; $file = $param['file']; @@ -631,8 +580,7 @@ public static function loadAppScriptFile($param) return false; } - public static function loadCSSFile($param) - { + public static function loadCSSFile($param) { $app = $param['app']; $file = $param['file']; $app_path = OC_App::getAppPath($app); @@ -645,8 +593,7 @@ public static function loadCSSFile($param) } } - protected static function handleLogin() - { + protected static function handleLogin() { OC_App::loadApps(array('prelogin')); $error = array(); // remember was checked after last login @@ -664,11 +611,10 @@ protected static function handleLogin() OC_Util::displayLoginPage(array_unique($error)); } - protected static function cleanupLoginTokens($user) - { - $cutoff = time() - OC_Config::getValue('remember_login_cookie_lifetime', 60 * 60 * 24 * 15); + protected static function cleanupLoginTokens($user) { + $cutoff = time() - OC_Config::getValue('remember_login_cookie_lifetime', 60*60*24*15); $tokens = OC_Preferences::getKeys($user, 'login_token'); - foreach ($tokens as $token) { + foreach($tokens as $token) { $time = OC_Preferences::getValue($user, 'login_token', $token); if ($time < $cutoff) { OC_Preferences::deleteKey($user, 'login_token', $token); @@ -676,21 +622,19 @@ protected static function cleanupLoginTokens($user) } } - protected static function tryRememberLogin() - { - if (!isset($_COOKIE["oc_remember_login"]) + protected static function tryRememberLogin() { + if(!isset($_COOKIE["oc_remember_login"]) || !isset($_COOKIE["oc_token"]) || !isset($_COOKIE["oc_username"]) - || !$_COOKIE["oc_remember_login"] - ) { + || !$_COOKIE["oc_remember_login"]) { return false; } OC_App::loadApps(array('authentication')); - if (defined("DEBUG") && DEBUG) { + if(defined("DEBUG") && DEBUG) { OC_Log::write('core', 'Trying to login from cookie', OC_Log::DEBUG); } // confirm credentials in cookie - if (isset($_COOKIE['oc_token']) && OC_User::userExists($_COOKIE['oc_username'])) { + if(isset($_COOKIE['oc_token']) && OC_User::userExists($_COOKIE['oc_username'])) { // delete outdated cookies self::cleanupLoginTokens($_COOKIE['oc_username']); // get stored tokens @@ -711,15 +655,14 @@ protected static function tryRememberLogin() // or you are an attacker // we can not delete tokens here because users may reach // this point multiple times after a password change - OC_Log::write('core', 'Authentication cookie rejected for user ' . $_COOKIE['oc_username'], OC_Log::WARN); + OC_Log::write('core', 'Authentication cookie rejected for user '.$_COOKIE['oc_username'], OC_Log::WARN); } OC_User::unsetMagicInCookie(); return true; } - protected static function tryFormLogin() - { - if (!isset($_POST["user"]) || !isset($_POST['password'])) { + protected static function tryFormLogin() { + if(!isset($_POST["user"]) || !isset($_POST['password'])) { return false; } @@ -728,21 +671,17 @@ protected static function tryFormLogin() //setup extra user backends OC_User::setupBackends(); - if (OC_User::login($_POST["user"], $_POST["password"])) { - // setting up the time zone - if (isset($_POST['timezone-offset'])) { - $_SESSION['timezone'] = $_POST['timezone-offset']; - } - + if(OC_User::login($_POST["user"], $_POST["password"])) { self::cleanupLoginTokens($_POST['user']); - if (!empty($_POST["remember_login"])) { - if (defined("DEBUG") && DEBUG) { + if(!empty($_POST["remember_login"])) { + if(defined("DEBUG") && DEBUG) { OC_Log::write('core', 'Setting remember login to cookie', OC_Log::DEBUG); } $token = OC_Util::generate_random_bytes(32); OC_Preferences::setValue($_POST['user'], 'login_token', $token, time()); OC_User::setMagicInCookie($_POST["user"], $token); - } else { + } + else { OC_User::unsetMagicInCookie(); } OC_Util::redirectToDefaultPage(); @@ -751,18 +690,16 @@ protected static function tryFormLogin() return true; } - protected static function tryBasicAuthLogin() - { + protected static function tryBasicAuthLogin() { if (!isset($_SERVER["PHP_AUTH_USER"]) - || !isset($_SERVER["PHP_AUTH_PW"]) - ) { + || !isset($_SERVER["PHP_AUTH_PW"])) { return false; } OC_App::loadApps(array('authentication')); if (OC_User::login($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"])) { //OC_Log::write('core',"Logged in with HTTP Authentication", OC_Log::DEBUG); OC_User::unsetMagicInCookie(); - $_REQUEST['redirect_url'] = (isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''); + $_REQUEST['redirect_url'] = (isset($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:''); OC_Util::redirectToDefaultPage(); } return true; @@ -771,23 +708,22 @@ protected static function tryBasicAuthLogin() } // define runtime variables - unless this already has been done -if (!isset($RUNTIME_NOAPPS)) { +if( !isset( $RUNTIME_NOAPPS )) { $RUNTIME_NOAPPS = false; } -if (!function_exists('get_temp_dir')) { - function get_temp_dir() - { - if ($temp = ini_get('upload_tmp_dir')) return $temp; - if ($temp = getenv('TMP')) return $temp; - if ($temp = getenv('TEMP')) return $temp; - if ($temp = getenv('TMPDIR')) return $temp; - $temp = tempnam(__FILE__, ''); +if(!function_exists('get_temp_dir')) { + function get_temp_dir() { + if( $temp=ini_get('upload_tmp_dir') ) return $temp; + if( $temp=getenv('TMP') ) return $temp; + if( $temp=getenv('TEMP') ) return $temp; + if( $temp=getenv('TMPDIR') ) return $temp; + $temp=tempnam(__FILE__, ''); if (file_exists($temp)) { unlink($temp); return dirname($temp); } - if ($temp = sys_get_temp_dir()) return $temp; + if( $temp=sys_get_temp_dir()) return $temp; return null; } From 7b2c60d7d9a0b2fafdc367782ec0f179f6b5264c Mon Sep 17 00:00:00 2001 From: "Thomas DEBESSE (illwieckz)" Date: Mon, 28 Jan 2013 18:29:56 +0100 Subject: [PATCH 2/7] resolve conflict (manual merge) after rebasing --- lib/base.php | 447 +++++++++++++++++++++++++++++---------------------- 1 file changed, 256 insertions(+), 191 deletions(-) diff --git a/lib/base.php b/lib/base.php index 065f08bb3a9c..425d488451b9 100644 --- a/lib/base.php +++ b/lib/base.php @@ -27,9 +27,10 @@ * No, we can not put this class in its own file because it is used by * OC_autoload! */ -class OC{ +class OC +{ /** - * Assoziative array for autoloading. classname => filename + * Associative array for autoloading. classname => filename */ public static $CLASSPATH = array(); /** @@ -73,48 +74,49 @@ class OC{ * OC router */ protected static $router = null; + /** * SPL autoload */ - public static function autoload($className) { - if(array_key_exists($className, OC::$CLASSPATH)) { + public static function autoload($className) + { + if (array_key_exists($className, OC::$CLASSPATH)) { $path = OC::$CLASSPATH[$className]; /** @TODO: Remove this when necessary - Remove "apps/" from inclusion path for smooth migration to mutli app dir - */ - if (strpos($path, 'apps/')===0) { - OC_Log::write('core', 'include path for class "'.$className.'" starts with "apps/"', OC_Log::DEBUG); + Remove "apps/" from inclusion path for smooth migration to mutli app dir + */ + if (strpos($path, 'apps/') === 0) { + OC_Log::write('core', 'include path for class "' . $className . '" starts with "apps/"', OC_Log::DEBUG); $path = str_replace('apps/', '', $path); } - } - elseif(strpos($className, 'OC_')===0) { + } elseif (strpos($className, 'OC_') === 0) { $path = strtolower(str_replace('_', '/', substr($className, 3)) . '.php'); - } - elseif(strpos($className, 'OC\\')===0) { + } elseif (strpos($className, 'OC\\') === 0) { $path = strtolower(str_replace('\\', '/', substr($className, 3)) . '.php'); - } - elseif(strpos($className, 'OCP\\')===0) { - $path = 'public/'.strtolower(str_replace('\\', '/', substr($className, 3)) . '.php'); - } - elseif(strpos($className, 'OCA\\')===0) { - $path = 'apps/'.strtolower(str_replace('\\', '/', substr($className, 3)) . '.php'); - } - elseif(strpos($className, 'Sabre_')===0) { - $path = str_replace('_', '/', $className) . '.php'; - } - elseif(strpos($className, 'Symfony\\Component\\Routing\\')===0) { - $path = 'symfony/routing/'.str_replace('\\', '/', $className) . '.php'; - } - elseif(strpos($className, 'Sabre\\VObject')===0) { + } elseif (strpos($className, 'OCP\\') === 0) { + $path = 'public/' . strtolower(str_replace('\\', '/', substr($className, 3)) . '.php'); + } elseif (strpos($className, 'OCA\\') === 0) { + foreach(self::$APPSROOTS as $appDir) { + $path = $appDir['path'] . '/' . strtolower(str_replace('\\', '/', substr($className, 3)) . '.php'); + $fullPath = stream_resolve_include_path($path); + if (file_exists($fullPath)) { + require_once $fullPath; + return false; + } + } + } elseif (strpos($className, 'Sabre_') === 0) { + $path = str_replace('_', '/', $className) . '.php'; + } elseif (strpos($className, 'Symfony\\Component\\Routing\\') === 0) { + $path = 'symfony/routing/' . str_replace('\\', '/', $className) . '.php'; + } elseif (strpos($className, 'Sabre\\VObject') === 0) { $path = str_replace('\\', '/', $className) . '.php'; - } - elseif(strpos($className, 'Test_')===0) { - $path = 'tests/lib/'.strtolower(str_replace('_', '/', substr($className, 5)) . '.php'); - }else{ + } elseif (strpos($className, 'Test_') === 0) { + $path = 'tests/lib/' . strtolower(str_replace('_', '/', substr($className, 5)) . '.php'); + } else { return false; } - if($fullPath = stream_resolve_include_path($path)) { + if ($fullPath = stream_resolve_include_path($path)) { require_once $fullPath; } return false; @@ -146,148 +148,156 @@ public static function initPaths() // ensure we can find OC_Config set_include_path( - OC::$SERVERROOT.'/lib'.PATH_SEPARATOR. + OC::$SERVERROOT . '/lib' . PATH_SEPARATOR . get_include_path() ); // search the 3rdparty folder - if(OC_Config::getValue('3rdpartyroot', '')<>'' and OC_Config::getValue('3rdpartyurl', '')<>'') { - OC::$THIRDPARTYROOT=OC_Config::getValue('3rdpartyroot', ''); - OC::$THIRDPARTYWEBROOT=OC_Config::getValue('3rdpartyurl', ''); - }elseif(file_exists(OC::$SERVERROOT.'/3rdparty')) { - OC::$THIRDPARTYROOT=OC::$SERVERROOT; - OC::$THIRDPARTYWEBROOT=OC::$WEBROOT; - }elseif(file_exists(OC::$SERVERROOT.'/../3rdparty')) { - OC::$THIRDPARTYWEBROOT=rtrim(dirname(OC::$WEBROOT), '/'); - OC::$THIRDPARTYROOT=rtrim(dirname(OC::$SERVERROOT), '/'); - }else{ + if (OC_Config::getValue('3rdpartyroot', '') <> '' and OC_Config::getValue('3rdpartyurl', '') <> '') { + OC::$THIRDPARTYROOT = OC_Config::getValue('3rdpartyroot', ''); + OC::$THIRDPARTYWEBROOT = OC_Config::getValue('3rdpartyurl', ''); + } elseif (file_exists(OC::$SERVERROOT . '/3rdparty')) { + OC::$THIRDPARTYROOT = OC::$SERVERROOT; + OC::$THIRDPARTYWEBROOT = OC::$WEBROOT; + } elseif (file_exists(OC::$SERVERROOT . '/../3rdparty')) { + OC::$THIRDPARTYWEBROOT = rtrim(dirname(OC::$WEBROOT), '/'); + OC::$THIRDPARTYROOT = rtrim(dirname(OC::$SERVERROOT), '/'); + } else { echo("3rdparty directory not found! Please put the ownCloud 3rdparty folder in the ownCloud folder or the folder above. You can also configure the location in the config.php file."); exit; } // search the apps folder $config_paths = OC_Config::getValue('apps_paths', array()); - if(! empty($config_paths)) { - foreach($config_paths as $paths) { - if( isset($paths['url']) && isset($paths['path'])) { + if (!empty($config_paths)) { + foreach ($config_paths as $paths) { + if (isset($paths['url']) && isset($paths['path'])) { $paths['url'] = rtrim($paths['url'], '/'); $paths['path'] = rtrim($paths['path'], '/'); OC::$APPSROOTS[] = $paths; } } - }elseif(file_exists(OC::$SERVERROOT.'/apps')) { - OC::$APPSROOTS[] = array('path'=> OC::$SERVERROOT.'/apps', 'url' => '/apps', 'writable' => true); - }elseif(file_exists(OC::$SERVERROOT.'/../apps')) { - OC::$APPSROOTS[] = array('path'=> rtrim(dirname(OC::$SERVERROOT), '/').'/apps', 'url' => '/apps', 'writable' => true); + } elseif (file_exists(OC::$SERVERROOT . '/apps')) { + OC::$APPSROOTS[] = array('path' => OC::$SERVERROOT . '/apps', 'url' => '/apps', 'writable' => true); + } elseif (file_exists(OC::$SERVERROOT . '/../apps')) { + OC::$APPSROOTS[] = array('path' => rtrim(dirname(OC::$SERVERROOT), '/') . '/apps', 'url' => '/apps', 'writable' => true); } - if(empty(OC::$APPSROOTS)) { + if (empty(OC::$APPSROOTS)) { echo("apps directory not found! Please put the ownCloud apps folder in the ownCloud folder or the folder above. You can also configure the location in the config.php file."); exit; } $paths = array(); - foreach( OC::$APPSROOTS as $path) + foreach (OC::$APPSROOTS as $path) $paths[] = $path['path']; // set the right include path set_include_path( - OC::$SERVERROOT.'/lib'.PATH_SEPARATOR. - OC::$SERVERROOT.'/config'.PATH_SEPARATOR. - OC::$THIRDPARTYROOT.'/3rdparty'.PATH_SEPARATOR. - implode($paths, PATH_SEPARATOR).PATH_SEPARATOR. - get_include_path().PATH_SEPARATOR. + OC::$SERVERROOT . '/lib' . PATH_SEPARATOR . + OC::$SERVERROOT . '/config' . PATH_SEPARATOR . + OC::$THIRDPARTYROOT . '/3rdparty' . PATH_SEPARATOR . + implode($paths, PATH_SEPARATOR) . PATH_SEPARATOR . + get_include_path() . PATH_SEPARATOR . OC::$SERVERROOT ); } - public static function checkInstalled() { + public static function checkConfig() { + if (file_exists(OC::$SERVERROOT . "/config/config.php") and !is_writable(OC::$SERVERROOT . "/config/config.php")) { + $tmpl = new OC_Template('', 'error', 'guest'); + $tmpl->assign('errors', array(1 => array('error' => "Can't write into config directory 'config'", 'hint' => "You can usually fix this by giving the webserver user write access to the config directory in owncloud"))); + $tmpl->printPage(); + exit(); + } + } + + public static function checkInstalled() + { // Redirect to installer if not installed if (!OC_Config::getValue('installed', false) && OC::$SUBURI != '/index.php') { - if(!OC::$CLI) { - $url = 'http://'.$_SERVER['SERVER_NAME'].OC::$WEBROOT.'/index.php'; + if (!OC::$CLI) { + $url = 'http://' . $_SERVER['SERVER_NAME'] . OC::$WEBROOT . '/index.php'; header("Location: $url"); } exit(); } } - public static function checkSSL() { + public static function checkSSL() + { // redirect to https site if configured - if( OC_Config::getValue( "forcessl", false )) { + if (OC_Config::getValue("forcessl", false)) { header('Strict-Transport-Security: max-age=31536000'); ini_set("session.cookie_secure", "on"); - if(OC_Request::serverProtocol()<>'https' and !OC::$CLI) { - $url = "https://". OC_Request::serverHost() . $_SERVER['REQUEST_URI']; + if (OC_Request::serverProtocol() <> 'https' and !OC::$CLI) { + $url = "https://" . OC_Request::serverHost() . $_SERVER['REQUEST_URI']; header("Location: $url"); exit(); } } } - public static function checkUpgrade() { - if(OC_Config::getValue('installed', false)) { - $installedVersion=OC_Config::getValue('version', '0.0.0'); - $currentVersion=implode('.', OC_Util::getVersion()); + public static function checkMaintenanceMode() { + // Allow ajax update script to execute without being stopped + if (OC_Config::getValue('maintenance', false) && OC::$SUBURI != '/core/ajax/update.php') { + // send http status 503 + header('HTTP/1.1 503 Service Temporarily Unavailable'); + header('Status: 503 Service Temporarily Unavailable'); + header('Retry-After: 120'); + + // render error page + $tmpl = new OC_Template('', 'error', 'guest'); + $tmpl->assign('errors', array(1 => array('error' => 'ownCloud is in maintenance mode'))); + $tmpl->printPage(); + exit(); + } + } + + public static function checkUpgrade($showTemplate = true) { + if (OC_Config::getValue('installed', false)) { + $installedVersion = OC_Config::getValue('version', '0.0.0'); + $currentVersion = implode('.', OC_Util::getVersion()); if (version_compare($currentVersion, $installedVersion, '>')) { - // Check if the .htaccess is existing - this is needed for upgrades from really old ownCloud versions - if (isset($_SERVER['SERVER_SOFTWARE']) && strstr($_SERVER['SERVER_SOFTWARE'], 'Apache')) { - if(!OC_Util::ishtaccessworking()) { - if(!file_exists(OC::$SERVERROOT.'/data/.htaccess')) { - OC_Setup::protectDataDirectory(); - } - } - } - OC_Log::write('core', 'starting upgrade from '.$installedVersion.' to '.$currentVersion, OC_Log::DEBUG); - $result=OC_DB::updateDbFromStructure(OC::$SERVERROOT.'/db_structure.xml'); - if(!$result) { - echo 'Error while upgrading the database'; - die(); - } - if(file_exists(OC::$SERVERROOT."/config/config.php") and !is_writable(OC::$SERVERROOT."/config/config.php")) { - $tmpl = new OC_Template( '', 'error', 'guest' ); - $tmpl->assign('errors', array(1=>array('error'=>"Can't write into config directory 'config'", 'hint'=>"You can usually fix this by giving the webserver user write access to the config directory in owncloud"))); + if ($showTemplate && !OC_Config::getValue('maintenance', false)) { + OC_Config::setValue('maintenance', true); + OC_Log::write('core', 'starting upgrade from ' . $installedVersion . ' to ' . $currentVersion, OC_Log::DEBUG); + OC_Util::addscript('update'); + $tmpl = new OC_Template('', 'update', 'guest'); + $tmpl->assign('version', OC_Util::getVersionString()); $tmpl->printPage(); - exit; + exit(); + } else { + return true; } - $minimizerCSS = new OC_Minimizer_CSS(); - $minimizerCSS->clearCache(); - $minimizerJS = new OC_Minimizer_JS(); - $minimizerJS->clearCache(); - OC_Config::setValue('version', implode('.', OC_Util::getVersion())); - OC_App::checkAppsRequirements(); - // load all apps to also upgrade enabled apps - OC_App::loadApps(); } + return false; } } - public static function initTemplateEngine() { + public static function initTemplateEngine() + { // Add the stuff we need always - OC_Util::addScript( "jquery-1.7.2.min" ); - OC_Util::addScript( "jquery-ui-1.8.16.custom.min" ); - OC_Util::addScript( "jquery-showpassword" ); - OC_Util::addScript( "jquery.infieldlabel" ); - OC_Util::addScript( "jquery-tipsy" ); - OC_Util::addScript( "oc-dialogs" ); - OC_Util::addScript( "js" ); - OC_Util::addScript( "eventsource" ); - OC_Util::addScript( "config" ); + OC_Util::addScript("jquery-1.7.2.min"); + OC_Util::addScript("jquery-ui-1.10.0.custom"); + OC_Util::addScript("jquery-showpassword"); + OC_Util::addScript("jquery.infieldlabel"); + OC_Util::addScript("jquery-tipsy"); + OC_Util::addScript("oc-dialogs"); + OC_Util::addScript("js"); + OC_Util::addScript("eventsource"); + OC_Util::addScript("config"); //OC_Util::addScript( "multiselect" ); OC_Util::addScript('search', 'result'); OC_Util::addScript('router'); - if( OC_Config::getValue( 'installed', false )) { - if( OC_Appconfig::getValue( 'core', 'backgroundjobs_mode', 'ajax' ) == 'ajax' ) { - OC_Util::addScript( 'backgroundjobs' ); - } - } - - OC_Util::addStyle( "styles" ); - OC_Util::addStyle( "multiselect" ); - OC_Util::addStyle( "jquery-ui-1.8.16.custom" ); - OC_Util::addStyle( "jquery-tipsy" ); + OC_Util::addStyle("styles"); + OC_Util::addStyle("multiselect"); + OC_Util::addStyle("jquery-ui-1.10.0.custom"); + OC_Util::addStyle("jquery-tipsy"); + OC_Util::addScript("oc-requesttoken"); } - public static function initSession() { + public static function initSession() + { // prevents javascript from accessing php session cookies ini_set('session.cookie_httponly', '1;'); @@ -317,7 +327,8 @@ public static function initSession() { $_SESSION['LAST_ACTIVITY'] = time(); } - public static function getRouter() { + public static function getRouter() + { if (!isset(OC::$router)) { OC::$router = new OC_Router(); OC::$router->loadRoutes(); @@ -326,7 +337,20 @@ public static function getRouter() { return OC::$router; } - public static function init() { + + public static function loadAppClassPaths() + { + foreach(OC_APP::getEnabledApps() as $app) { + $file = OC_App::getAppPath($app).'/appinfo/classpath.php'; + if(file_exists($file)) { + require_once $file; + } + } + } + + + public static function init() + { // register autoloader spl_autoload_register(array('OC', 'autoload')); setlocale(LC_ALL, 'en_US.UTF-8'); @@ -337,13 +361,13 @@ public static function init() { if (defined('DEBUG') && DEBUG) { ini_set('display_errors', 1); } - self::$CLI=(php_sapi_name() == 'cli'); + self::$CLI = (php_sapi_name() == 'cli'); date_default_timezone_set('UTC'); ini_set('arg_separator.output', '&'); // try to switch magic quotes off. - if(get_magic_quotes_gpc()) { + if (get_magic_quotes_gpc()) { @set_magic_quotes_runtime(false); } @@ -391,7 +415,7 @@ public static function init() { // set debug mode if an xdebug session is active if (!defined('DEBUG') || !DEBUG) { - if(isset($_COOKIE['XDEBUG_SESSION'])) { + if (isset($_COOKIE['XDEBUG_SESSION'])) { define('DEBUG', true); } } @@ -402,27 +426,27 @@ public static function init() { stream_wrapper_register('static', 'OC_StaticStreamWrapper'); stream_wrapper_register('close', 'OC_CloseStreamWrapper'); + self::checkConfig(); self::checkInstalled(); self::checkSSL(); self::initSession(); self::initTemplateEngine(); - self::checkUpgrade(); - $errors=OC_Util::checkServer(); - if(count($errors)>0) { + $errors = OC_Util::checkServer(); + if (count($errors) > 0) { OC_Template::printGuestPage('', 'error', array('errors' => $errors)); exit; } // User and Groups - if( !OC_Config::getValue( "installed", false )) { + if (!OC_Config::getValue("installed", false)) { $_SESSION['user_id'] = ''; } OC_User::useBackend(new OC_User_Database()); OC_Group::useBackend(new OC_Group_Database()); - if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SESSION['user_id']) && $_SERVER['PHP_AUTH_USER'] != $_SESSION['user_id']) { + if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SESSION['user_id']) && $_SERVER['PHP_AUTH_USER'] != $_SESSION['user_id']) { OC_User::logout(); } @@ -430,10 +454,10 @@ public static function init() { // This includes plugins for users and filesystems as well global $RUNTIME_NOAPPS; global $RUNTIME_APPTYPES; - if(!$RUNTIME_NOAPPS ) { - if($RUNTIME_APPTYPES) { + if (!$RUNTIME_NOAPPS) { + if ($RUNTIME_APPTYPES) { OC_App::loadApps($RUNTIME_APPTYPES); - }else{ + } else { OC_App::loadApps(); } } @@ -449,8 +473,8 @@ public static function init() { register_shutdown_function(array('OC_Helper', 'cleanTmp')); //parse the given parameters - self::$REQUESTEDAPP = (isset($_GET['app']) && trim($_GET['app']) != '' && !is_null($_GET['app'])?str_replace(array('\0', '/', '\\', '..'), '', strip_tags($_GET['app'])):OC_Config::getValue('defaultapp', 'files')); - if(substr_count(self::$REQUESTEDAPP, '?') != 0) { + self::$REQUESTEDAPP = (isset($_GET['app']) && trim($_GET['app']) != '' && !is_null($_GET['app']) ? str_replace(array('\0', '/', '\\', '..'), '', strip_tags($_GET['app'])) : OC_Config::getValue('defaultapp', 'files')); + if (substr_count(self::$REQUESTEDAPP, '?') != 0) { $app = substr(self::$REQUESTEDAPP, 0, strpos(self::$REQUESTEDAPP, '?')); $param = substr($_GET['app'], strpos($_GET['app'], '?') + 1); parse_str($param, $get); @@ -458,8 +482,8 @@ public static function init() { self::$REQUESTEDAPP = $app; $_GET['app'] = $app; } - self::$REQUESTEDFILE = (isset($_GET['getfile'])?$_GET['getfile']:null); - if(substr_count(self::$REQUESTEDFILE, '?') != 0) { + self::$REQUESTEDFILE = (isset($_GET['getfile']) ? $_GET['getfile'] : null); + if (substr_count(self::$REQUESTEDFILE, '?') != 0) { $file = substr(self::$REQUESTEDFILE, 0, strpos(self::$REQUESTEDFILE, '?')); $param = substr(self::$REQUESTEDFILE, strpos(self::$REQUESTEDFILE, '?') + 1); parse_str($param, $get); @@ -467,21 +491,32 @@ public static function init() { self::$REQUESTEDFILE = $file; $_GET['getfile'] = $file; } - if(!is_null(self::$REQUESTEDFILE)) { + if (!is_null(self::$REQUESTEDFILE)) { $subdir = OC_App::getAppPath(OC::$REQUESTEDAPP) . '/' . self::$REQUESTEDFILE; $parent = OC_App::getAppPath(OC::$REQUESTEDAPP); - if(!OC_Helper::issubdirectory($subdir, $parent)) { + if (!OC_Helper::issubdirectory($subdir, $parent)) { self::$REQUESTEDFILE = null; header('HTTP/1.0 404 Not Found'); exit; } } + + // write error into log if locale can't be set + if (OC_Util::issetlocaleworking() == false) { + OC_Log::write('core', 'setting locate to en_US.UTF-8 failed. Support is probably not installed on your system', OC_Log::ERROR); + } + if (OC_Config::getValue('installed', false)) { + if (OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') { + OC_Util::addScript('backgroundjobs'); + } + } } /** * register hooks for the cache */ - public static function registerCacheHooks() { + public static function registerCacheHooks() + { // register cache cleanup jobs OC_BackgroundJob_RegularTask::register('OC_Cache_FileGlobal', 'gc'); OC_Hook::connect('OC_User', 'post_login', 'OC_Cache_File', 'loginListener'); @@ -490,7 +525,8 @@ public static function registerCacheHooks() { /** * register hooks for the filesystem */ - public static function registerFilesystemHooks() { + public static function registerFilesystemHooks() + { // Check for blacklisted files OC_Hook::connect('OC_Filesystem', 'write', 'OC_Filesystem', 'isBlacklisted'); OC_Hook::connect('OC_Filesystem', 'rename', 'OC_Filesystem', 'isBlacklisted'); @@ -499,7 +535,8 @@ public static function registerFilesystemHooks() { /** * register hooks for sharing */ - public static function registerShareHooks() { + public static function registerShareHooks() + { OC_Hook::connect('OC_User', 'post_deleteUser', 'OCP\Share', 'post_deleteUser'); OC_Hook::connect('OC_User', 'post_addToGroup', 'OCP\Share', 'post_addToGroup'); OC_Hook::connect('OC_User', 'post_removeFromGroup', 'OCP\Share', 'post_removeFromGroup'); @@ -509,22 +546,12 @@ public static function registerShareHooks() { /** * @brief Handle the request */ - public static function handleRequest() { - if (!OC_Config::getValue('installed', false)) { - require_once 'core/setup.php'; - exit(); - } - // Handle redirect URL for logged in users - if(isset($_REQUEST['redirect_url']) && OC_User::isLoggedIn()) { - $location = OC_Helper::makeURLAbsolute(urldecode($_REQUEST['redirect_url'])); - header( 'Location: '.$location ); - return; - } - // Handle WebDAV - if($_SERVER['REQUEST_METHOD']=='PROPFIND') { - header('location: '.OC_Helper::linkToRemote('webdav')); - return; - } + public static function handleRequest() + { + // load all the classpaths from the enabled apps so they are available + // in the routing files of each app + OC::loadAppClassPaths(); + try { OC::getRouter()->match(OC_Request::getPathInfo()); return; @@ -538,25 +565,49 @@ public static function handleRequest() { $file = OC::$REQUESTEDFILE; $param = array('app' => $app, 'file' => $file); // Handle app css files - if(substr($file, -3) == 'css') { + if (substr($file, -3) == 'css') { self::loadCSSFile($param); return; } + + // Check if ownCloud is installed or in maintenance (update) mode + if (!OC_Config::getValue('installed', false)) { + require_once 'core/setup.php'; + exit(); + } + self::checkMaintenanceMode(); + self::checkUpgrade(); + + // Handle redirect URL for logged in users + if (isset($_REQUEST['redirect_url']) && OC_User::isLoggedIn()) { + $location = OC_Helper::makeURLAbsolute(urldecode($_REQUEST['redirect_url'])); + header('Location: ' . $location); + return; + } + // Handle WebDAV + if ($_SERVER['REQUEST_METHOD'] == 'PROPFIND') { + header('location: ' . OC_Helper::linkToRemote('webdav')); + return; + } + // Someone is logged in : - if(OC_User::isLoggedIn()) { + if (OC_User::isLoggedIn()) { OC_App::loadApps(); OC_User::setupBackends(); - if(isset($_GET["logout"]) and ($_GET["logout"])) { - OC_Preferences::deleteKey(OC_User::getUser(), 'login_token', $_COOKIE['oc_token']); + if (isset($_GET["logout"]) and ($_GET["logout"])) { + if (isset($_COOKIE['oc_token'])) { + OC_Preferences::deleteKey(OC_User::getUser(), 'login_token', $_COOKIE['oc_token']); + } OC_User::logout(); - header("Location: ".OC::$WEBROOT.'/'); - }else{ - if(is_null($file)) { + header("Location: " . OC::$WEBROOT . '/'); + } else { + if (is_null($file)) { $param['file'] = 'index.php'; } $file_ext = substr($param['file'], -3); if ($file_ext != 'php' - || !self::loadAppScriptFile($param)) { + || !self::loadAppScriptFile($param) + ) { header('HTTP/1.0 404 Not Found'); } } @@ -566,7 +617,8 @@ public static function handleRequest() { self::handleLogin(); } - public static function loadAppScriptFile($param) { + public static function loadAppScriptFile($param) + { OC_App::loadApps(); $app = $param['app']; $file = $param['file']; @@ -580,7 +632,8 @@ public static function loadAppScriptFile($param) { return false; } - public static function loadCSSFile($param) { + public static function loadCSSFile($param) + { $app = $param['app']; $file = $param['file']; $app_path = OC_App::getAppPath($app); @@ -593,7 +646,8 @@ public static function loadCSSFile($param) { } } - protected static function handleLogin() { + protected static function handleLogin() + { OC_App::loadApps(array('prelogin')); $error = array(); // remember was checked after last login @@ -611,10 +665,11 @@ protected static function handleLogin() { OC_Util::displayLoginPage(array_unique($error)); } - protected static function cleanupLoginTokens($user) { - $cutoff = time() - OC_Config::getValue('remember_login_cookie_lifetime', 60*60*24*15); + protected static function cleanupLoginTokens($user) + { + $cutoff = time() - OC_Config::getValue('remember_login_cookie_lifetime', 60 * 60 * 24 * 15); $tokens = OC_Preferences::getKeys($user, 'login_token'); - foreach($tokens as $token) { + foreach ($tokens as $token) { $time = OC_Preferences::getValue($user, 'login_token', $token); if ($time < $cutoff) { OC_Preferences::deleteKey($user, 'login_token', $token); @@ -622,19 +677,21 @@ protected static function cleanupLoginTokens($user) { } } - protected static function tryRememberLogin() { - if(!isset($_COOKIE["oc_remember_login"]) + protected static function tryRememberLogin() + { + if (!isset($_COOKIE["oc_remember_login"]) || !isset($_COOKIE["oc_token"]) || !isset($_COOKIE["oc_username"]) - || !$_COOKIE["oc_remember_login"]) { + || !$_COOKIE["oc_remember_login"] + ) { return false; } OC_App::loadApps(array('authentication')); - if(defined("DEBUG") && DEBUG) { + if (defined("DEBUG") && DEBUG) { OC_Log::write('core', 'Trying to login from cookie', OC_Log::DEBUG); } // confirm credentials in cookie - if(isset($_COOKIE['oc_token']) && OC_User::userExists($_COOKIE['oc_username'])) { + if (isset($_COOKIE['oc_token']) && OC_User::userExists($_COOKIE['oc_username'])) { // delete outdated cookies self::cleanupLoginTokens($_COOKIE['oc_username']); // get stored tokens @@ -655,14 +712,15 @@ protected static function tryRememberLogin() { // or you are an attacker // we can not delete tokens here because users may reach // this point multiple times after a password change - OC_Log::write('core', 'Authentication cookie rejected for user '.$_COOKIE['oc_username'], OC_Log::WARN); + OC_Log::write('core', 'Authentication cookie rejected for user ' . $_COOKIE['oc_username'], OC_Log::WARN); } OC_User::unsetMagicInCookie(); return true; } - protected static function tryFormLogin() { - if(!isset($_POST["user"]) || !isset($_POST['password'])) { + protected static function tryFormLogin() + { + if (!isset($_POST["user"]) || !isset($_POST['password'])) { return false; } @@ -671,17 +729,21 @@ protected static function tryFormLogin() { //setup extra user backends OC_User::setupBackends(); - if(OC_User::login($_POST["user"], $_POST["password"])) { + if (OC_User::login($_POST["user"], $_POST["password"])) { + // setting up the time zone + if (isset($_POST['timezone-offset'])) { + $_SESSION['timezone'] = $_POST['timezone-offset']; + } + self::cleanupLoginTokens($_POST['user']); - if(!empty($_POST["remember_login"])) { - if(defined("DEBUG") && DEBUG) { + if (!empty($_POST["remember_login"])) { + if (defined("DEBUG") && DEBUG) { OC_Log::write('core', 'Setting remember login to cookie', OC_Log::DEBUG); } $token = OC_Util::generate_random_bytes(32); OC_Preferences::setValue($_POST['user'], 'login_token', $token, time()); OC_User::setMagicInCookie($_POST["user"], $token); - } - else { + } else { OC_User::unsetMagicInCookie(); } OC_Util::redirectToDefaultPage(); @@ -690,16 +752,18 @@ protected static function tryFormLogin() { return true; } - protected static function tryBasicAuthLogin() { + protected static function tryBasicAuthLogin() + { if (!isset($_SERVER["PHP_AUTH_USER"]) - || !isset($_SERVER["PHP_AUTH_PW"])) { + || !isset($_SERVER["PHP_AUTH_PW"]) + ) { return false; } OC_App::loadApps(array('authentication')); if (OC_User::login($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"])) { //OC_Log::write('core',"Logged in with HTTP Authentication", OC_Log::DEBUG); OC_User::unsetMagicInCookie(); - $_REQUEST['redirect_url'] = (isset($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:''); + $_REQUEST['redirect_url'] = (isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''); OC_Util::redirectToDefaultPage(); } return true; @@ -708,22 +772,23 @@ protected static function tryBasicAuthLogin() { } // define runtime variables - unless this already has been done -if( !isset( $RUNTIME_NOAPPS )) { +if (!isset($RUNTIME_NOAPPS)) { $RUNTIME_NOAPPS = false; } -if(!function_exists('get_temp_dir')) { - function get_temp_dir() { - if( $temp=ini_get('upload_tmp_dir') ) return $temp; - if( $temp=getenv('TMP') ) return $temp; - if( $temp=getenv('TEMP') ) return $temp; - if( $temp=getenv('TMPDIR') ) return $temp; - $temp=tempnam(__FILE__, ''); +if (!function_exists('get_temp_dir')) { + function get_temp_dir() + { + if ($temp = ini_get('upload_tmp_dir')) return $temp; + if ($temp = getenv('TMP')) return $temp; + if ($temp = getenv('TEMP')) return $temp; + if ($temp = getenv('TMPDIR')) return $temp; + $temp = tempnam(__FILE__, ''); if (file_exists($temp)) { unlink($temp); return dirname($temp); } - if( $temp=sys_get_temp_dir()) return $temp; + if ($temp = sys_get_temp_dir()) return $temp; return null; } From 975ec144b8128337715d29760155979ff4994054 Mon Sep 17 00:00:00 2001 From: "Thomas DEBESSE (illwieckz)" Date: Mon, 28 Jan 2013 18:46:26 +0100 Subject: [PATCH 3/7] upstream modify one line that does the same : use the upstream code for this line --- lib/base.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/base.php b/lib/base.php index 425d488451b9..6302addace96 100644 --- a/lib/base.php +++ b/lib/base.php @@ -125,7 +125,7 @@ public static function autoload($className) public static function initPaths() { // calculate the root directories - OC::$SERVERROOT=str_replace("\\", '/', substr(__FILE__, 0, -13)); + OC::$SERVERROOT = str_replace("\\", '/', substr(__DIR__, 0, -4)); $documentRoot=realpath($_SERVER['DOCUMENT_ROOT']); $scriptName = $_SERVER["SCRIPT_NAME"]; $scriptFileName = $_SERVER["SCRIPT_FILENAME"]; From c67b150fddf5b262bb2ff95c1e2c99ddef59bbe0 Mon Sep 17 00:00:00 2001 From: "Thomas DEBESSE (illwieckz)" Date: Mon, 28 Jan 2013 18:51:01 +0100 Subject: [PATCH 4/7] follow coding guidelines --- lib/base.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/base.php b/lib/base.php index 6302addace96..e45e21ddf85b 100644 --- a/lib/base.php +++ b/lib/base.php @@ -126,7 +126,7 @@ public static function initPaths() { // calculate the root directories OC::$SERVERROOT = str_replace("\\", '/', substr(__DIR__, 0, -4)); - $documentRoot=realpath($_SERVER['DOCUMENT_ROOT']); + $documentRoot = realpath($_SERVER['DOCUMENT_ROOT']); $scriptName = $_SERVER["SCRIPT_NAME"]; $scriptFileName = $_SERVER["SCRIPT_FILENAME"]; if (isset($_SERVER["PATH_INFO"])) { @@ -138,13 +138,13 @@ public static function initPaths() $subDir = ""; $alias = ""; if (strcmp($documentRoot,OC::$SERVERROOT)) { - $subDir=substr(OC::$SERVERROOT,strlen($documentRoot)); + $subDir = substr(OC::$SERVERROOT,strlen($documentRoot)); } if(strcmp(OC::$SERVERROOT.$scriptName, $scriptFileName)) { - $alias=substr($scriptName, 0, strlen(OC::$SERVERROOT) - strlen($subDir) - strlen($scriptFileName)); + $alias = substr($scriptName, 0, strlen(OC::$SERVERROOT) - strlen($subDir) - strlen($scriptFileName)); } - OC::$WEBROOT=$alias.$subDir; - OC::$SUBURI=substr($scriptName, 1 + strlen($alias)).$pathInfo; + OC::$WEBROOT = $alias.$subDir; + OC::$SUBURI = substr($scriptName, 1 + strlen($alias)).$pathInfo; // ensure we can find OC_Config set_include_path( From b407d601d9a1e3ed8ff5f729fe72f5c7a34b803a Mon Sep 17 00:00:00 2001 From: "Thomas DEBESSE (illwieckz)" Date: Mon, 28 Jan 2013 19:03:25 +0100 Subject: [PATCH 5/7] use realpath() function to have this code working when path containes symlinks --- lib/base.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/base.php b/lib/base.php index e45e21ddf85b..0e8adac8d22d 100644 --- a/lib/base.php +++ b/lib/base.php @@ -128,7 +128,7 @@ public static function initPaths() OC::$SERVERROOT = str_replace("\\", '/', substr(__DIR__, 0, -4)); $documentRoot = realpath($_SERVER['DOCUMENT_ROOT']); $scriptName = $_SERVER["SCRIPT_NAME"]; - $scriptFileName = $_SERVER["SCRIPT_FILENAME"]; + $scriptFileName = realpath($_SERVER["SCRIPT_FILENAME"]); if (isset($_SERVER["PATH_INFO"])) { $pathInfo = $_SERVER["PATH_INFO"]; } From f962a8eb58854724dd71f937eba69e1fa8ad1300 Mon Sep 17 00:00:00 2001 From: "Thomas DEBESSE (illwieckz)" Date: Mon, 28 Jan 2013 19:26:12 +0100 Subject: [PATCH 6/7] some comments added as requested here : https://github.com/owncloud/core/pull/385 --- lib/base.php | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/lib/base.php b/lib/base.php index 0e8adac8d22d..bfa4c4987fc8 100644 --- a/lib/base.php +++ b/lib/base.php @@ -125,10 +125,53 @@ public static function autoload($className) public static function initPaths() { // calculate the root directories + + // Some comments because this code is a bit tricky, as requested here : + // https://github.com/owncloud/core/pull/385 + + // Imagine your httpd document root is '/var/www' + // -> requesting /index.html serves /var/www/index.html + // Imagine you have an alias named 'alias' + // -> requesting /alias/index.html serves /var/www/index.html + // Imagine you put owncloud on a subdir named 'dir' + // -> requesting /alias/dir/index.html serves /var/www/dir/index.html + + // When requesting /alias/dir/index.php, it require lib/base.php + // __DIR__ == '/var/www/dir/lib' + // + // OC::$SERVERROOT=str_replace("\\", '/', substr(__DIR__, 0, -4)); + // is similar to + // OC::$SERVERROOT=str_replace("\\", '/', substr(__DIR__, 0, strlen('/lib'))); + // + // after that, + // OC::$SERVERROOT == '/var/www/dir' + + // Note : I suppose that str_replace("\", '/', str) is to translate DOS path into Web path because + // various substr calls expects only one character as dir separator (I don't use any NT server, + // this part of the code was not my idea). + OC::$SERVERROOT = str_replace("\\", '/', substr(__DIR__, 0, -4)); + + // In this example, $documentRoot == '/var/www' + $documentRoot = realpath($_SERVER['DOCUMENT_ROOT']); + + // If requesting /alias/dir/index.php/pathinfo or /alias/dir/index.php?param + // Then $scriptName == '/alias/dir/index.php' + $scriptName = $_SERVER["SCRIPT_NAME"]; + + // If requesting /alias/dir/index.php/pathinfo or /alias/dir/index.php?param + // Then $scriptFileName == '/var/www/dir/index.php' + // realpath() function is used here because previous __DIR__ call return implicitely real path + // We will compare later OC::$SERVERROOT and $scriptFileName, so we should not be disturbed + // by symlinks in file path + $scriptFileName = realpath($_SERVER["SCRIPT_FILENAME"]); + + // If requesting /alias/dir/index.php/pathinfo + // Then $pathInfo == '/pathinfo' + if (isset($_SERVER["PATH_INFO"])) { $pathInfo = $_SERVER["PATH_INFO"]; } @@ -137,13 +180,42 @@ public static function initPaths() } $subDir = ""; $alias = ""; + + // If '/var/www' != '/var/www/dir' + // Then $subDir = substr('/var/www/dir', strlen('/var/www')) + // Then $subDir == '/dir' + if (strcmp($documentRoot,OC::$SERVERROOT)) { $subDir = substr(OC::$SERVERROOT,strlen($documentRoot)); } + + // If '/var/www/dir' . '/alias/index.php' != '/var/www/dir/index.php' // True + // Then $alias = substr('/alias/index.php', 0, strlen('/var/www/dir') - strlen('/dir') - strlen('/var/www/dir/index.php')) + // Then $alias = substr('/alias/index.php', 0, strlen('/var/www/dir') - strlen('/var/www/dir/index.php')) + // Then $alias = substr('/alias/index.php', 0, 0 - strlen('/index.php')) + // Then $alias == '/alias + if(strcmp(OC::$SERVERROOT.$scriptName, $scriptFileName)) { $alias = substr($scriptName, 0, strlen(OC::$SERVERROOT) - strlen($subDir) - strlen($scriptFileName)); } + + // If requesting /alias/dir/index.php + // Then OC::$WEBROOT = '/alias' . '/dir' + // Then OC::$WEBROOT = '/alias/dir' + // Else If no alias, or no subdir + // Then OC::$WEBROOT = '' + OC::$WEBROOT = $alias.$subDir; + + // If requesting /alias/dir/index.php/pathinfo + // Then OC::$SUBURI = substr('/alias/dir/index.php', 1 + strlen('/alias')).'/pathinfo' + // Then OC::$SUBURI = substr('/alias/dir/index.php', strlen('/alias/')).'/pathinfo' + // Then OC::$SUBURI = 'dir/index.php'.'/pathinfo' + // Then OC::$SUBURI = 'dir/index.php/pathinfo' + // Then OC::$SUBURI = 'dir/index.php/pathinfo' + // Else If no subdir + // OC::$SUBURI = 'index.php/pathinfo' + OC::$SUBURI = substr($scriptName, 1 + strlen($alias)).$pathInfo; // ensure we can find OC_Config From 1aa553f6664875822cc2067aa5f05d89386048d3 Mon Sep 17 00:00:00 2001 From: "Thomas DEBESSE (illwieckz)" Date: Mon, 28 Jan 2013 19:27:14 +0100 Subject: [PATCH 7/7] follow coding guidelines --- lib/base.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/base.php b/lib/base.php index bfa4c4987fc8..ab3064feeb7b 100644 --- a/lib/base.php +++ b/lib/base.php @@ -185,7 +185,7 @@ public static function initPaths() // Then $subDir = substr('/var/www/dir', strlen('/var/www')) // Then $subDir == '/dir' - if (strcmp($documentRoot,OC::$SERVERROOT)) { + if (strcmp($documentRoot, OC::$SERVERROOT)) { $subDir = substr(OC::$SERVERROOT,strlen($documentRoot)); }