Check if open_basedir is set
The file:// protocol does not work with curl when an open_basedir is set. This fixes https://github.com/owncloud/core/issues/12016
This commit is contained in:
parent
d84a1f6f3a
commit
9ea205dc3d
5 changed files with 60 additions and 11 deletions
|
@ -9,13 +9,21 @@
|
|||
|
||||
namespace OC\Core\Setup;
|
||||
|
||||
use bantu\IniGetWrapper\IniGetWrapper;
|
||||
use OCP\IConfig;
|
||||
use OCP\IL10N;
|
||||
|
||||
class Controller {
|
||||
/**
|
||||
* @var \OCP\IConfig
|
||||
*/
|
||||
protected $config;
|
||||
/** @var IniGetWrapper */
|
||||
protected $iniWrapper;
|
||||
/** @var IL10N */
|
||||
protected $l10n;
|
||||
/** @var \OC_Defaults */
|
||||
protected $defaults;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
|
@ -24,12 +32,24 @@ class Controller {
|
|||
|
||||
/**
|
||||
* @param IConfig $config
|
||||
* @param IniGetWrapper $iniWrapper
|
||||
* @param IL10N $l10n
|
||||
* @param \OC_Defaults $defaults
|
||||
*/
|
||||
function __construct(IConfig $config) {
|
||||
function __construct(IConfig $config,
|
||||
IniGetWrapper $iniWrapper,
|
||||
IL10N $l10n,
|
||||
\OC_Defaults $defaults) {
|
||||
$this->autoConfigFile = \OC::$SERVERROOT.'/config/autoconfig.php';
|
||||
$this->config = $config;
|
||||
$this->iniWrapper = $iniWrapper;
|
||||
$this->l10n = $l10n;
|
||||
$this->defaults = $defaults;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $post
|
||||
*/
|
||||
public function run($post) {
|
||||
// Check for autosetup:
|
||||
$post = $this->loadAutoConfig($post);
|
||||
|
@ -138,16 +158,36 @@ class Controller {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
if (\OC_Util::runningOnMac()) {
|
||||
$l10n = \OC::$server->getL10N('core');
|
||||
$theme = new \OC_Defaults();
|
||||
$errors[] = array(
|
||||
'error' => $l10n->t(
|
||||
'error' => $this->l10n->t(
|
||||
'Mac OS X is not supported and %s will not work properly on this platform. ' .
|
||||
'Use it at your own risk! ',
|
||||
$theme->getName()
|
||||
$this->defaults->getName()
|
||||
),
|
||||
'hint' => $l10n->t('For the best results, please consider using a GNU/Linux server instead.')
|
||||
'hint' => $this->l10n->t('For the best results, please consider using a GNU/Linux server instead.')
|
||||
);
|
||||
}
|
||||
|
||||
if($this->iniWrapper->getString('open_basedir') !== '' && PHP_INT_SIZE === 4) {
|
||||
$errors[] = array(
|
||||
'error' => $this->l10n->t(
|
||||
'It seems that this %s instance is running on a 32bit PHP environment and the open_basedir has been configured in php.ini. ' .
|
||||
'This will lead to problems with files over 4GB and is highly discouraged.',
|
||||
$this->defaults->getName()
|
||||
),
|
||||
'hint' => $this->l10n->t('Please remove the open_basedir setting within your php.ini or switch to 64bit PHP.')
|
||||
);
|
||||
}
|
||||
if(!function_exists('curl_init') && PHP_INT_SIZE === 4) {
|
||||
$errors[] = array(
|
||||
'error' => $this->l10n->t(
|
||||
'It seems that this %s instance is running on a 32bit PHP environment and cURL is not installed. ' .
|
||||
'This will lead to problems with files over 4GB and is highly discouraged.',
|
||||
$this->defaults->getName()
|
||||
),
|
||||
'hint' => $this->l10n->t('Please install the cURL extension and restart your webserver.')
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -717,7 +717,7 @@ class OC {
|
|||
// Check if ownCloud is installed or in maintenance (update) mode
|
||||
if (!$systemConfig->getValue('installed', false)) {
|
||||
\OC::$server->getSession()->clear();
|
||||
$controller = new OC\Core\Setup\Controller(\OC::$server->getConfig());
|
||||
$controller = new OC\Core\Setup\Controller(\OC::$server->getConfig(), \OC::$server->getIniWrapper(), \OC::$server->getL10N('core'), new \OC_Defaults());
|
||||
$controller->run($_POST);
|
||||
exit();
|
||||
}
|
||||
|
|
|
@ -100,7 +100,7 @@ class LargeFileHelper {
|
|||
* null on failure.
|
||||
*/
|
||||
public function getFileSizeViaCurl($filename) {
|
||||
if (function_exists('curl_init')) {
|
||||
if (function_exists('curl_init') && \OC::$server->getIniWrapper()->getString('open_basedir') === '') {
|
||||
$fencoded = rawurlencode($filename);
|
||||
$ch = curl_init("file://$fencoded");
|
||||
curl_setopt($ch, CURLOPT_NOBODY, true);
|
||||
|
|
|
@ -286,7 +286,7 @@ class Server extends SimpleContainer implements IServerContainer {
|
|||
return new \OC\Files\Config\MountProviderCollection($loader);
|
||||
});
|
||||
$this->registerService('IniWrapper', function ($c) {
|
||||
return new IniGetWrapper();
|
||||
return new IniGetWrapper();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -730,9 +730,9 @@ class Server extends SimpleContainer implements IServerContainer {
|
|||
/**
|
||||
* Get the IniWrapper
|
||||
*
|
||||
* @return \bantu\IniGetWrapper\IniGetWrapper
|
||||
* @return IniGetWrapper
|
||||
*/
|
||||
public function getIniWrapper() {
|
||||
return $this->query('IniWrapper');
|
||||
return $this->query('IniWrapper');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,10 @@ namespace Test;
|
|||
* Large files are not considered yet.
|
||||
*/
|
||||
class LargeFileHelperGetFileSize extends TestCase {
|
||||
/** @var string */
|
||||
protected $filename;
|
||||
/** @var int */
|
||||
protected $fileSize;
|
||||
/** @var \OC\LargeFileHelper */
|
||||
protected $helper;
|
||||
|
||||
|
@ -41,6 +45,11 @@ class LargeFileHelperGetFileSize extends TestCase {
|
|||
'The PHP curl extension is required for this test.'
|
||||
);
|
||||
}
|
||||
if (\OC::$server->getIniWrapper()->getString('open_basedir') !== '') {
|
||||
$this->markTestSkipped(
|
||||
'The PHP curl extension does not work with the file:// protocol when open_basedir is enabled.'
|
||||
);
|
||||
}
|
||||
$this->assertSame(
|
||||
$fileSize,
|
||||
$this->helper->getFileSizeViaCurl($filename)
|
||||
|
|
Loading…
Reference in a new issue