summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJörn Friedrich Dreyer <jfd@butonic.de>2013-06-10 13:45:19 +0200
committerJörn Friedrich Dreyer <jfd@butonic.de>2013-06-10 13:45:19 +0200
commit8dc6bdd96b9088b87fe8d11346338343135c77e7 (patch)
tree2f969c8b9a0572d7e4648c9ad8ff2524bdaf27af
parentc0bdbd9d81eb22ded95cd7ea9b26a0c36cfa1be0 (diff)
downloadnextcloud-server-8dc6bdd96b9088b87fe8d11346338343135c77e7.tar.gz
nextcloud-server-8dc6bdd96b9088b87fe8d11346338343135c77e7.zip
clean up usage of DatabaseSetupException and catch Exceptions in entrypoints
-rw-r--r--cron.php120
-rwxr-xr-xindex.php13
-rw-r--r--lib/response.php4
-rw-r--r--lib/setup.php24
-rw-r--r--public.php42
-rw-r--r--remote.php77
-rw-r--r--status.php23
7 files changed, 171 insertions, 132 deletions
diff --git a/cron.php b/cron.php
index 95cedf8bf4c..fbea7f26aed 100644
--- a/cron.php
+++ b/cron.php
@@ -44,75 +44,81 @@ function handleUnexpectedShutdown() {
}
}
-require_once 'lib/base.php';
+try {
-session_write_close();
+ require_once 'lib/base.php';
-// Don't do anything if ownCloud has not been installed
-if (!OC_Config::getValue('installed', false)) {
- exit(0);
-}
-
-// Handle unexpected errors
-register_shutdown_function('handleUnexpectedShutdown');
+ session_write_close();
-// Delete temp folder
-OC_Helper::cleanTmpNoClean();
-
-// Exit if background jobs are disabled!
-$appmode = OC_BackgroundJob::getExecutionType();
-if ($appmode == 'none') {
- TemporaryCronClass::$sent = true;
- if (OC::$CLI) {
- echo 'Background Jobs are disabled!' . PHP_EOL;
- } else {
- OC_JSON::error(array('data' => array('message' => 'Background jobs disabled!')));
+ // Don't do anything if ownCloud has not been installed
+ if (!OC_Config::getValue('installed', false)) {
+ exit(0);
}
- exit(1);
-}
-if (OC::$CLI) {
- // Create lock file first
- TemporaryCronClass::$lockfile = OC_Config::getValue("datadirectory", OC::$SERVERROOT . '/data') . '/cron.lock';
+ // Handle unexpected errors
+ register_shutdown_function('handleUnexpectedShutdown');
- // We call ownCloud from the CLI (aka cron)
- if ($appmode != 'cron') {
- // Use cron in feature!
- OC_BackgroundJob::setExecutionType('cron');
- }
+ // Delete temp folder
+ OC_Helper::cleanTmpNoClean();
- // check if backgroundjobs is still running
- if (file_exists(TemporaryCronClass::$lockfile)) {
- TemporaryCronClass::$keeplock = true;
+ // Exit if background jobs are disabled!
+ $appmode = OC_BackgroundJob::getExecutionType();
+ if ($appmode == 'none') {
TemporaryCronClass::$sent = true;
- echo "Another instance of cron.php is still running!";
+ if (OC::$CLI) {
+ echo 'Background Jobs are disabled!' . PHP_EOL;
+ } else {
+ OC_JSON::error(array('data' => array('message' => 'Background jobs disabled!')));
+ }
exit(1);
}
- // Create a lock file
- touch(TemporaryCronClass::$lockfile);
+ if (OC::$CLI) {
+ // Create lock file first
+ TemporaryCronClass::$lockfile = OC_Config::getValue("datadirectory", OC::$SERVERROOT . '/data') . '/cron.lock';
- // Work
- $jobList = new \OC\BackgroundJob\JobList();
- $jobs = $jobList->getAll();
- foreach ($jobs as $job) {
- $job->execute($jobList);
- }
-} else {
- // We call cron.php from some website
- if ($appmode == 'cron') {
- // Cron is cron :-P
- OC_JSON::error(array('data' => array('message' => 'Backgroundjobs are using system cron!')));
- } else {
- // Work and success :-)
+ // We call ownCloud from the CLI (aka cron)
+ if ($appmode != 'cron') {
+ // Use cron in feature!
+ OC_BackgroundJob::setExecutionType('cron');
+ }
+
+ // check if backgroundjobs is still running
+ if (file_exists(TemporaryCronClass::$lockfile)) {
+ TemporaryCronClass::$keeplock = true;
+ TemporaryCronClass::$sent = true;
+ echo "Another instance of cron.php is still running!";
+ exit(1);
+ }
+
+ // Create a lock file
+ touch(TemporaryCronClass::$lockfile);
+
+ // Work
$jobList = new \OC\BackgroundJob\JobList();
- $job = $jobList->getNext();
- $job->execute($jobList);
- $jobList->setLastJob($job);
- OC_JSON::success();
+ $jobs = $jobList->getAll();
+ foreach ($jobs as $job) {
+ $job->execute($jobList);
+ }
+ } else {
+ // We call cron.php from some website
+ if ($appmode == 'cron') {
+ // Cron is cron :-P
+ OC_JSON::error(array('data' => array('message' => 'Backgroundjobs are using system cron!')));
+ } else {
+ // Work and success :-)
+ $jobList = new \OC\BackgroundJob\JobList();
+ $job = $jobList->getNext();
+ $job->execute($jobList);
+ $jobList->setLastJob($job);
+ OC_JSON::success();
+ }
}
-}
-// done!
-TemporaryCronClass::$sent = true;
-exit();
+ // done!
+ TemporaryCronClass::$sent = true;
+ exit();
+
+} catch (Exception $ex) {
+ \OCP\Util::writeLog('cron', $ex->getMessage(), \OCP\Util::FATAL);
+} \ No newline at end of file
diff --git a/index.php b/index.php
index bf0b287a64b..a064aa5c76f 100755
--- a/index.php
+++ b/index.php
@@ -23,6 +23,15 @@
$RUNTIME_NOAPPS = true; //no apps, yet
-require_once 'lib/base.php';
+try {
+
+ require_once 'lib/base.php';
-OC::handleRequest();
+ OC::handleRequest();
+
+} catch (Exception $ex) {
+ //show the user a detailed error page
+ OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR);
+ \OCP\Util::writeLog('remote', $ex->getMessage(), \OCP\Util::FATAL);
+ OC_Template::printExceptionErrorPage($ex);
+} \ No newline at end of file
diff --git a/lib/response.php b/lib/response.php
index 49d79fda709..674176d078b 100644
--- a/lib/response.php
+++ b/lib/response.php
@@ -11,6 +11,7 @@ class OC_Response {
const STATUS_NOT_MODIFIED = 304;
const STATUS_TEMPORARY_REDIRECT = 307;
const STATUS_NOT_FOUND = 404;
+ const STATUS_INTERNAL_SERVER_ERROR = 500;
/**
* @brief Enable response caching by sending correct HTTP headers
@@ -70,6 +71,9 @@ class OC_Response {
case self::STATUS_NOT_FOUND;
$status = $status . ' Not Found';
break;
+ case self::STATUS_INTERNAL_SERVER_ERROR;
+ $status = $status . ' Internal Server Error';
+ break;
}
header($protocol.' '.$status);
}
diff --git a/lib/setup.php b/lib/setup.php
index a63cc664dbc..71a2d13937e 100644
--- a/lib/setup.php
+++ b/lib/setup.php
@@ -106,12 +106,6 @@ class OC_Setup {
'hint' => $e->getHint()
);
return($error);
- } catch (Exception $e) {
- $error[] = array(
- 'error' => $e->getMessage(),
- 'hint' => ''
- );
- return($error);
}
}
elseif($dbtype == 'pgsql') {
@@ -127,7 +121,7 @@ class OC_Setup {
try {
self::setupPostgreSQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $username);
- } catch (Exception $e) {
+ } catch (DatabaseSetupException $e) {
$error[] = array(
'error' => $l->t('PostgreSQL username and/or password not valid'),
'hint' => $l->t('You need to enter either an existing account or the administrator.')
@@ -150,7 +144,7 @@ class OC_Setup {
try {
self::setupOCIDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $dbtablespace, $username);
- } catch (Exception $e) {
+ } catch (DatabaseSetupException $e) {
$error[] = array(
'error' => $l->t('Oracle connection could not be established'),
'hint' => $e->getMessage().' Check environment: ORACLE_HOME='.getenv('ORACLE_HOME')
@@ -177,7 +171,7 @@ class OC_Setup {
try {
self::setupMSSQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix);
- } catch (Exception $e) {
+ } catch (DatabaseSetupException $e) {
$error[] = array(
'error' => 'MS SQL username and/or password not valid',
'hint' => 'You need to enter either an existing account or the administrator.'
@@ -326,7 +320,7 @@ class OC_Setup {
$connection_string = "host='$e_host' dbname=postgres user='$e_user' password='$e_password'";
$connection = @pg_connect($connection_string);
if(!$connection) {
- throw new Exception($l->t('PostgreSQL username and/or password not valid'));
+ throw new DatabaseSetupException($l->t('PostgreSQL username and/or password not valid'));
}
$e_user = pg_escape_string($dbuser);
//check for roles creation rights in postgresql
@@ -371,7 +365,7 @@ class OC_Setup {
$connection_string = "host='$e_host' dbname='$e_dbname' user='$e_user' password='$e_password'";
$connection = @pg_connect($connection_string);
if(!$connection) {
- throw new Exception($l->t('PostgreSQL username and/or password not valid'));
+ throw new DatabaseSetupException($l->t('PostgreSQL username and/or password not valid'));
}
$query = "select count(*) FROM pg_class WHERE relname='{$dbtableprefix}users' limit 1";
$result = pg_query($connection, $query);
@@ -461,9 +455,9 @@ class OC_Setup {
if(!$connection) {
$e = oci_error();
if (is_array ($e) && isset ($e['message'])) {
- throw new Exception($e['message']);
+ throw new DatabaseSetupException($e['message']);
}
- throw new Exception($l->t('Oracle username and/or password not valid'));
+ throw new DatabaseSetupException($l->t('Oracle username and/or password not valid'));
}
//check for roles creation rights in oracle
@@ -530,7 +524,7 @@ class OC_Setup {
}
$connection = @oci_connect($dbuser, $dbpass, $easy_connect_string);
if(!$connection) {
- throw new Exception($l->t('Oracle username and/or password not valid'));
+ throw new DatabaseSetupException($l->t('Oracle username and/or password not valid'));
}
$query = "SELECT count(*) FROM user_tables WHERE table_name = :un";
$stmt = oci_parse($connection, $query);
@@ -641,7 +635,7 @@ class OC_Setup {
} else {
$entry = '';
}
- throw new Exception($l->t('MS SQL username and/or password not valid: %s', array($entry)));
+ throw new DatabaseSetupException($l->t('MS SQL username and/or password not valid: %s', array($entry)));
}
OC_Config::setValue('dbuser', $dbuser);
diff --git a/public.php b/public.php
index 3d7fd378af4..0154b59cce3 100644
--- a/public.php
+++ b/public.php
@@ -1,21 +1,31 @@
<?php
$RUNTIME_NOAPPS = true;
-require_once 'lib/base.php';
-OC::checkMaintenanceMode();
-if (!isset($_GET['service'])) {
- header('HTTP/1.0 404 Not Found');
- exit;
-}
-$file = OCP\CONFIG::getAppValue('core', 'public_' . strip_tags($_GET['service']));
-if(is_null($file)) {
- header('HTTP/1.0 404 Not Found');
- exit;
-}
-$parts=explode('/', $file, 2);
-$app=$parts[0];
+try {
-OC_Util::checkAppEnabled($app);
-OC_App::loadApp($app);
+ require_once 'lib/base.php';
+ OC::checkMaintenanceMode();
+ if (!isset($_GET['service'])) {
+ header('HTTP/1.0 404 Not Found');
+ exit;
+ }
+ $file = OCP\CONFIG::getAppValue('core', 'public_' . strip_tags($_GET['service']));
+ if(is_null($file)) {
+ header('HTTP/1.0 404 Not Found');
+ exit;
+ }
-require_once OC_App::getAppPath($app) .'/'. $parts[1];
+ $parts=explode('/', $file, 2);
+ $app=$parts[0];
+
+ OC_Util::checkAppEnabled($app);
+ OC_App::loadApp($app);
+
+ require_once OC_App::getAppPath($app) .'/'. $parts[1];
+
+} catch (Exception $ex) {
+ //show the user a detailed error page
+ OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR);
+ \OCP\Util::writeLog('remote', $ex->getMessage(), \OCP\Util::FATAL);
+ OC_Template::printExceptionErrorPage($ex);
+} \ No newline at end of file
diff --git a/remote.php b/remote.php
index 7738de04f60..ec0f2ecef72 100644
--- a/remote.php
+++ b/remote.php
@@ -1,40 +1,49 @@
<?php
$RUNTIME_NOAPPS = true;
-require_once 'lib/base.php';
-$path_info = OC_Request::getPathInfo();
-if ($path_info === false || $path_info === '') {
- OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND);
- exit;
-}
-if (!$pos = strpos($path_info, '/', 1)) {
- $pos = strlen($path_info);
-}
-$service=substr($path_info, 1, $pos-1);
-$file = OC_AppConfig::getValue('core', 'remote_' . $service);
+try {
-if(is_null($file)) {
- OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND);
- exit;
-}
+ require_once 'lib/base.php';
+ $path_info = OC_Request::getPathInfo();
+ if ($path_info === false || $path_info === '') {
+ OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND);
+ exit;
+ }
+ if (!$pos = strpos($path_info, '/', 1)) {
+ $pos = strlen($path_info);
+ }
+ $service=substr($path_info, 1, $pos-1);
-$file=ltrim($file, '/');
+ $file = OC_AppConfig::getValue('core', 'remote_' . $service);
-$parts=explode('/', $file, 2);
-$app=$parts[0];
-switch ($app) {
- case 'core':
- $file = OC::$SERVERROOT .'/'. $file;
- break;
- default:
- OC_Util::checkAppEnabled($app);
- OC_App::loadApp($app);
- if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
- $file = OC_App::getAppPath($app) .'/'. $parts[1];
- }else{
- $file = '/' . OC_App::getAppPath($app) .'/'. $parts[1];
- }
- break;
-}
-$baseuri = OC::$WEBROOT . '/remote.php/'.$service.'/';
-require_once $file;
+ if(is_null($file)) {
+ OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND);
+ exit;
+ }
+
+ $file=ltrim($file, '/');
+
+ $parts=explode('/', $file, 2);
+ $app=$parts[0];
+ switch ($app) {
+ case 'core':
+ $file = OC::$SERVERROOT .'/'. $file;
+ break;
+ default:
+ OC_Util::checkAppEnabled($app);
+ OC_App::loadApp($app);
+ if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
+ $file = OC_App::getAppPath($app) .'/'. $parts[1];
+ }else{
+ $file = '/' . OC_App::getAppPath($app) .'/'. $parts[1];
+ }
+ break;
+ }
+ $baseuri = OC::$WEBROOT . '/remote.php/'.$service.'/';
+ require_once $file;
+
+} catch (Exception $ex) {
+ OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR);
+ \OCP\Util::writeLog('remote', $ex->getMessage(), \OCP\Util::FATAL);
+ OC_Template::printExceptionErrorPage($ex);
+} \ No newline at end of file
diff --git a/status.php b/status.php
index 9d6ac87c671..bac01c11b28 100644
--- a/status.php
+++ b/status.php
@@ -23,13 +23,20 @@
$RUNTIME_NOAPPS = true; //no apps, yet
-require_once 'lib/base.php';
+try {
-if(OC_Config::getValue('installed')==1) $installed='true'; else $installed='false';
-$values=array(
- 'installed'=>$installed,
- 'version'=>implode('.', OC_Util::getVersion()),
- 'versionstring'=>OC_Util::getVersionString(),
- 'edition'=>OC_Util::getEditionString());
+ require_once 'lib/base.php';
-echo(json_encode($values));
+ if(OC_Config::getValue('installed')==1) $installed='true'; else $installed='false';
+ $values=array(
+ 'installed'=>$installed,
+ 'version'=>implode('.', OC_Util::getVersion()),
+ 'versionstring'=>OC_Util::getVersionString(),
+ 'edition'=>OC_Util::getEditionString());
+
+ echo(json_encode($values));
+
+} catch (Exception $ex) {
+ OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR);
+ \OCP\Util::writeLog('remote', $ex->getMessage(), \OCP\Util::FATAL);
+} \ No newline at end of file