diff options
Diffstat (limited to 'lib/util.php')
-rwxr-xr-x | lib/util.php | 96 |
1 files changed, 65 insertions, 31 deletions
diff --git a/lib/util.php b/lib/util.php index e8057abe9ae..9ce974619bc 100755 --- a/lib/util.php +++ b/lib/util.php @@ -186,45 +186,20 @@ class OC_Util { in owncloud or disabling the appstore in the config file."); } } - $CONFIG_DATADIRECTORY = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" ); - //check for correct file permissions - if(!stristr(PHP_OS, 'WIN')) { - $permissionsModHint="Please change the permissions to 0770 so that the directory cannot be listed by other users."; - $prems=substr(decoct(@fileperms($CONFIG_DATADIRECTORY)), -3); - if(substr($prems, -1)!='0') { - OC_Helper::chmodr($CONFIG_DATADIRECTORY, 0770); - clearstatcache(); - $prems=substr(decoct(@fileperms($CONFIG_DATADIRECTORY)), -3); - if(substr($prems, 2, 1)!='0') { - $errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY.') is readable for other users<br/>', 'hint'=>$permissionsModHint); - } - } - if( OC_Config::getValue( "enablebackup", false )) { - $CONFIG_BACKUPDIRECTORY = OC_Config::getValue( "backupdirectory", OC::$SERVERROOT."/backup" ); - $prems=substr(decoct(@fileperms($CONFIG_BACKUPDIRECTORY)), -3); - if(substr($prems, -1)!='0') { - OC_Helper::chmodr($CONFIG_BACKUPDIRECTORY, 0770); - clearstatcache(); - $prems=substr(decoct(@fileperms($CONFIG_BACKUPDIRECTORY)), -3); - if(substr($prems, 2, 1)!='0') { - $errors[]=array('error'=>'Data directory ('.$CONFIG_BACKUPDIRECTORY.') is readable for other users<br/>', 'hint'=>$permissionsModHint); - } - } - } - }else{ - //TODO: permissions checks for windows hosts - } // Create root dir. if(!is_dir($CONFIG_DATADIRECTORY)) { $success=@mkdir($CONFIG_DATADIRECTORY); - if(!$success) { + if ($success) { + $errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY)); + } else { $errors[]=array('error'=>"Can't create data directory (".$CONFIG_DATADIRECTORY.")", 'hint'=>"You can usually fix this by giving the webserver write access to the ownCloud directory '".OC::$SERVERROOT."' (in a terminal, use the command 'chown -R www-data:www-data /path/to/your/owncloud/install/data' "); } } else if(!is_writable($CONFIG_DATADIRECTORY) or !is_readable($CONFIG_DATADIRECTORY)) { $errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY.') not writable by ownCloud<br/>', 'hint'=>$permissionsHint); + } else { + $errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY)); } - // check if all required php modules are present if(!class_exists('ZipArchive')) { $errors[]=array('error'=>'PHP module zip not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.'); @@ -268,6 +243,17 @@ class OC_Util { $web_server_restart= false; } + $handler = ini_get("session.save_handler"); + if($handler == "files") { + $tmpDir = session_save_path(); + if($tmpDir != ""){ + if(!@is_writable($tmpDir)){ + $errors[]=array('error' => 'The temporary folder used by PHP to save the session data is either incorrect or not writable! Please check : '.session_save_path().'<br/>', + 'hint'=>'Please ask your server administrator to grant write access or define another temporary folder.'); + } + } + } + if($web_server_restart) { $errors[]=array('error'=>'PHP modules have been installed, but they are still listed as missing?<br/>', 'hint'=>'Please ask your server administrator to restart the web server.'); } @@ -275,6 +261,29 @@ class OC_Util { return $errors; } + /** + * Check for correct file permissions of data directory + * @return array arrays with error messages and hints + */ + public static function checkDataDirectoryPermissions($dataDirectory) { + $errors = array(); + if (stristr(PHP_OS, 'WIN')) { + //TODO: permissions checks for windows hosts + } else { + $permissionsModHint = 'Please change the permissions to 0770 so that the directory cannot be listed by other users.'; + $prems = substr(decoct(@fileperms($dataDirectory)), -3); + if (substr($prems, -1) != '0') { + OC_Helper::chmodr($dataDirectory, 0770); + clearstatcache(); + $prems = substr(decoct(@fileperms($dataDirectory)), -3); + if (substr($prems, 2, 1) != '0') { + $errors[] = array('error' => 'Data directory ('.$dataDirectory.') is readable for other users<br/>', 'hint' => $permissionsModHint); + } + } + } + return $errors; + } + public static function displayLoginPage($errors = array()) { $parameters = array(); foreach( $errors as $key => $value ) { @@ -291,6 +300,8 @@ class OC_Util { $redirect_url = OC_Util::sanitizeHTML($_REQUEST['redirect_url']); $parameters['redirect_url'] = urlencode($redirect_url); } + + $parameters['alt_login'] = OC_App::getAlternativeLogIns(); OC_Template::printGuestPage("", "login", $parameters); } @@ -312,7 +323,7 @@ class OC_Util { public static function checkLoggedIn() { // Check if we are a user if( !OC_User::isLoggedIn()) { - header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php', array('redirect_url' => $_SERVER["REQUEST_URI"]))); + header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php', array('redirect_url' => OC_Request::requestUri()))); exit(); } } @@ -510,6 +521,11 @@ class OC_Util { * Check if the setlocal call doesn't work. This can happen if the right local packages are not available on the server. */ public static function issetlocaleworking() { + // setlocale test is pointless on Windows + if (OC_Util::runningOnWindows() ) { + return true; + } + $result=setlocale(LC_ALL, 'en_US.UTF-8'); if($result==false) { return(false); @@ -519,6 +535,14 @@ class OC_Util { } /** + * Check if the PHP module fileinfo is loaded. + * @return bool + */ + public static function fileInfoLoaded() { + return function_exists('finfo_open'); + } + + /** * Check if the ownCloud server can connect to the internet */ public static function isinternetconnectionworking() { @@ -630,6 +654,9 @@ class OC_Util { curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($curl, CURLOPT_MAXREDIRS, 10); + curl_setopt($curl, CURLOPT_USERAGENT, "ownCloud Server Crawler"); if(OC_Config::getValue('proxy','')<>'') { curl_setopt($curl, CURLOPT_PROXY, OC_Config::getValue('proxy')); @@ -668,4 +695,11 @@ class OC_Util { return $data; } + /** + * @return bool - well are we running on windows or not + */ + public static function runningOnWindows() { + return (substr(PHP_OS, 0, 3) === "WIN"); + } + } |