diff --git a/index.php b/index.php
index 8f5c99fcd8..105a04ad76 100644
--- a/index.php
+++ b/index.php
@@ -24,7 +24,12 @@
require_once( 'lib/base.php' );
require_once( 'appconfig.php' );
require_once( 'template.php' );
-if( OC_USER::isLoggedIn()){
+
+// check if the server is correctly configured for ownCloud
+$errors=OC_UTIL::checkServer();
+if(count($errors)>0){
+ OC_TEMPLATE::printGuestPage( "", "error", array( "errors" => $errors ));
+}elseif( OC_USER::isLoggedIn()){
if( $_GET["logout"] ){
OC_USER::logout();
header( "Location: $WEBROOT");
@@ -34,8 +39,7 @@ if( OC_USER::isLoggedIn()){
header( "Location: ".OC_APPCONFIG::getValue( "core", "defaultpage", "files/index.php" ));
exit();
}
-}
-else{
+}else{
if( OC_USER::login( $_POST["user"], $_POST["password"] )){
header( "Location: ".OC_APPCONFIG::getValue( "core", "defaultpage", "files/index.php" ));
exit();
diff --git a/lib/base.php b/lib/base.php
index 6b3ca59e6b..31d4142900 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -89,13 +89,17 @@ require_once('connect.php');
require_once('remotestorage.php');
require_once('plugin.php');
-OC_PLUGIN::loadPlugins( "" );
+$error=(count(OC_UTIL::checkServer())>0);
+
+if(!$error){
+ OC_PLUGIN::loadPlugins( "" );
+}
OC_USER::setBackend( OC_CONFIG::getValue( "userbackend", "database" ));
OC_GROUP::setBackend( OC_CONFIG::getValue( "groupbackend", "database" ));
// Set up file system unless forbidden
-if( !$RUNTIME_NOSETUPFS ){
+if(!$error and !$RUNTIME_NOSETUPFS ){
OC_UTIL::setupFS();
}
@@ -108,12 +112,10 @@ OC_UTIL::addStyle( "jquery-ui-1.8.10.custom" );
OC_UTIL::addStyle( "styles" );
// Load Apps
-if( !$RUNTIME_NOAPPS ){
+if(!$error and !$RUNTIME_NOAPPS ){
OC_APP::loadApps();
}
-// check if the server is correctly configured for ownCloud
-OC_UTIL::checkserver();
/**
* Class for utility functions
*
@@ -221,7 +223,7 @@ class OC_UTIL {
/**
* check if the current server configuration is suitable for ownCloud
- *
+ * @return array with error messages
*/
public static function checkServer(){
global $SERVERROOT;
@@ -230,12 +232,16 @@ class OC_UTIL {
$CONFIG_DATADIRECTORY_ROOT = OC_CONFIG::getValue( "datadirectory", "$SERVERROOT/data" );;
$CONFIG_BACKUPDIRECTORY = OC_CONFIG::getValue( "backupdirectory", "$SERVERROOT/backup" );
$CONFIG_INSTALLED = OC_CONFIG::getValue( "installed", false );
- $error='';
+ $errors=array();
+
+ //check for database drivers
if(!is_callable('sqlite_open') and !is_callable('mysql_connect')){
- $error.='No database drivers (sqlite or mysql) installed.
';
+ $errors[]='No database drivers (sqlite or mysql) installed.
';
}
$CONFIG_DBTYPE = OC_CONFIG::getValue( "dbtype", "sqlite" );
$CONFIG_DBNAME = OC_CONFIG::getValue( "dbname", "owncloud" );
+
+ //check for correct file permissions
if(!stristr(PHP_OS, 'WIN')){
if($CONFIG_DBTYPE=='sqlite'){
$file=$SERVERROOT.'/'.$CONFIG_DBNAME;
@@ -246,7 +252,7 @@ class OC_UTIL {
clearstatcache();
$prems=substr(decoct(fileperms($file)),-3);
if(substr($prems,2,1)!='0'){
- $error.='SQLite database file ('.$file.') is readable from the web
';
+ $errors[]='SQLite database file ('.$file.') is readable from the web
';
}
}
}
@@ -257,7 +263,7 @@ class OC_UTIL {
clearstatcache();
$prems=substr(decoct(fileperms($CONFIG_DATADIRECTORY_ROOT)),-3);
if(substr($prems,2,1)!='0'){
- $error.='Data directory ('.$CONFIG_DATADIRECTORY_ROOT.') is readable from the web
';
+ $errors[]='Data directory ('.$CONFIG_DATADIRECTORY_ROOT.') is readable from the web
';
}
}
if( OC_CONFIG::getValue( "enablebackup", false )){
@@ -267,16 +273,20 @@ class OC_UTIL {
clearstatcache();
$prems=substr(decoct(fileperms($CONFIG_BACKUPDIRECTORY)),-3);
if(substr($prems,2,1)!='0'){
- $error.='Data directory ('.$CONFIG_BACKUPDIRECTORY.') is readable from the web
';
+ $errors[]='Data directory ('.$CONFIG_BACKUPDIRECTORY.') is readable from the web
';
}
}
}
}else{
//TODO: premisions checks for windows hosts
}
- if($error){
- die($error);
+ if(!is_writable($CONFIG_DATADIRECTORY_ROOT)){
+ $errors[]='Data directory ('.$CONFIG_BACKUPDIRECTORY.') not writable by ownCloud
';
}
+
+ //TODO: check for php modules
+
+ return $errors;
}
}
diff --git a/templates/error.php b/templates/error.php
new file mode 100644
index 0000000000..e8f56d63bd
--- /dev/null
+++ b/templates/error.php
@@ -0,0 +1,15 @@
+
+