2013-08-02 15:36:54 +02:00
< ? php
/**
2016-07-21 17:07:57 +02:00
* @ copyright Copyright ( c ) 2016 , ownCloud , Inc .
*
2015-03-26 11:44:34 +01:00
* @ author Bart Visscher < bartv @ thisnet . nl >
2020-04-29 11:57:22 +02:00
* @ author Christoph Wurst < christoph @ winzerhof - wurst . at >
2020-12-16 14:54:15 +01:00
* @ author hoellen < dev @ hoellen . eu >
2020-12-30 14:07:05 +01:00
* @ author J0WI < J0WI @ users . noreply . github . com >
2016-07-21 17:07:57 +02:00
* @ author Joas Schilling < coding @ schilljs . com >
2017-11-06 15:56:42 +01:00
* @ author Ko - < k . stoffelen @ cs . ru . nl >
2016-05-26 19:56:05 +02:00
* @ author Lukas Reschke < lukas @ statuscode . ch >
2019-12-03 19:57:53 +01:00
* @ author Michael Weimann < mail @ michael - weimann . eu >
2015-03-26 11:44:34 +01:00
* @ author Morris Jobke < hey @ morrisjobke . de >
2017-11-06 15:56:42 +01:00
* @ author Patrick Paysant < patrick . paysant @ linagora . com >
2019-12-03 19:57:53 +01:00
* @ author Roeland Jago Douma < roeland @ famdouma . nl >
2015-03-26 11:44:34 +01:00
* @ author Thomas Müller < thomas . mueller @ tmit . eu >
2016-03-01 17:25:15 +01:00
* @ author Victor Dubiniuk < dubiniuk @ owncloud . com >
2015-03-26 11:44:34 +01:00
*
* @ license AGPL - 3.0
*
* This code is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License , version 3 ,
* as published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License , version 3 ,
2019-12-03 19:57:53 +01:00
* along with this program . If not , see < http :// www . gnu . org / licenses />
2015-03-26 11:44:34 +01:00
*
2013-08-02 15:36:54 +02:00
*/
2015-02-26 11:37:37 +01:00
2017-10-13 21:30:29 +02:00
require_once __DIR__ . '/lib/versioncheck.php' ;
2015-04-08 10:53:03 +02:00
use OC\Console\Application ;
2016-02-18 00:42:00 +01:00
use Symfony\Component\Console\Input\ArgvInput ;
2015-04-08 10:53:03 +02:00
use Symfony\Component\Console\Output\ConsoleOutput ;
2013-09-01 16:40:50 +02:00
2015-02-21 20:52:32 +01:00
define ( 'OC_CONSOLE' , 1 );
2016-04-18 22:30:01 +02:00
function exceptionHandler ( $exception ) {
echo " An unhandled exception has been thrown: " . PHP_EOL ;
echo $exception ;
exit ( 1 );
}
2014-05-19 15:26:57 +02:00
try {
2016-10-06 12:13:02 +02:00
require_once __DIR__ . '/lib/base.php' ;
2013-08-02 15:36:54 +02:00
2015-02-16 09:16:32 +01:00
// set to run indefinitely if needed
2017-03-11 17:04:21 +01:00
if ( strpos ( @ ini_get ( 'disable_functions' ), 'set_time_limit' ) === false ) {
@ set_time_limit ( 0 );
}
2015-02-16 09:16:32 +01:00
2014-05-19 15:26:57 +02:00
if ( ! OC :: $CLI ) {
echo " This script can be run from the command line only " . PHP_EOL ;
2016-10-13 15:45:43 +02:00
exit ( 1 );
2014-05-19 15:26:57 +02:00
}
2013-08-02 21:23:50 +02:00
2016-04-18 22:30:01 +02:00
set_exception_handler ( 'exceptionHandler' );
2016-07-08 15:55:17 +02:00
if ( ! function_exists ( 'posix_getuid' )) {
2020-09-17 17:23:07 +02:00
echo " The posix extensions are required - see https://www.php.net/manual/en/book.posix.php " . PHP_EOL ;
2016-10-13 15:45:43 +02:00
exit ( 1 );
2016-07-08 15:55:17 +02:00
}
2020-10-03 16:32:49 +02:00
$user = posix_getuid ();
$configUser = fileowner ( OC :: $configDir . 'config.php' );
if ( $user !== $configUser ) {
2016-07-08 15:55:17 +02:00
echo " Console has to be executed with the user that owns the file config/config.php " . PHP_EOL ;
2020-10-03 16:32:49 +02:00
echo " Current user id: " . $user . PHP_EOL ;
echo " Owner id of config.php: " . $configUser . PHP_EOL ;
2020-10-03 20:52:04 +02:00
echo " Try adding 'sudo -u # " . $configUser . " ' to the beginning of the command (without the single quotes) " . PHP_EOL ;
2020-10-03 16:32:49 +02:00
echo " If running with 'docker exec' try adding the option '-u " . $configUser . " ' to the docker command (without the single quotes) " . PHP_EOL ;
2016-10-13 15:45:43 +02:00
exit ( 1 );
2015-01-12 16:49:36 +01:00
}
2015-12-17 10:48:29 +01:00
$oldWorkingDir = getcwd ();
if ( $oldWorkingDir === false ) {
2017-08-11 15:47:24 +02:00
echo " This script can be run from the Nextcloud root directory only. " . PHP_EOL ;
2015-12-17 10:48:29 +01:00
echo " Can't determine current working dir - the script will continue to work but be aware of the above fact. " . PHP_EOL ;
2020-04-10 10:35:09 +02:00
} elseif ( $oldWorkingDir !== __DIR__ && ! chdir ( __DIR__ )) {
2017-08-11 15:47:24 +02:00
echo " This script can be run from the Nextcloud root directory only. " . PHP_EOL ;
echo " Can't change to Nextcloud root directory. " . PHP_EOL ;
2015-12-17 10:48:29 +01:00
exit ( 1 );
}
2016-02-25 10:05:34 +01:00
if ( ! function_exists ( 'pcntl_signal' ) && ! in_array ( '--no-warnings' , $argv )) {
2020-09-17 17:23:07 +02:00
echo " The process control (PCNTL) extensions are required in case you want to interrupt long running commands - see https://www.php.net/manual/en/book.pcntl.php " . PHP_EOL ;
2016-01-29 16:03:35 +01:00
}
2018-08-04 21:53:50 +02:00
$application = new Application (
\OC :: $server -> getConfig (),
\OC :: $server -> getEventDispatcher (),
\OC :: $server -> getRequest (),
\OC :: $server -> getLogger (),
\OC :: $server -> query ( \OC\MemoryInfo :: class )
);
2016-02-18 00:42:00 +01:00
$application -> loadCommands ( new ArgvInput (), new ConsoleOutput ());
2014-05-19 15:26:57 +02:00
$application -> run ();
} catch ( Exception $ex ) {
2016-04-18 22:30:01 +02:00
exceptionHandler ( $ex );
2016-04-20 18:01:47 +02:00
} catch ( Error $ex ) {
exceptionHandler ( $ex );
2013-09-13 18:10:04 +02:00
}