Don't complain about non-writable datadirs before we're installed

This commit is contained in:
Robin Appelman 2014-09-08 15:05:57 +02:00
parent 6fa3280c2a
commit 23dd7cb51d
2 changed files with 56 additions and 17 deletions

View File

@ -463,26 +463,28 @@ class OC_Util {
);
}
}
if (!is_dir($CONFIG_DATADIRECTORY)) {
$success = @mkdir($CONFIG_DATADIRECTORY);
if ($success) {
$errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
} else {
// Create root dir.
if ($config->getSystemValue('installed', false)) {
if (!is_dir($CONFIG_DATADIRECTORY)) {
$success = @mkdir($CONFIG_DATADIRECTORY);
if ($success) {
$errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
} else {
$errors[] = array(
'error' => $l->t('Cannot create "data" directory (%s)', array($CONFIG_DATADIRECTORY)),
'hint' => $l->t('This can usually be fixed by '
. '<a href="%s" target="_blank">giving the webserver write access to the root directory</a>.',
array(OC_Helper::linkToDocs('admin-dir_permissions')))
);
}
} else if (!is_writable($CONFIG_DATADIRECTORY) or !is_readable($CONFIG_DATADIRECTORY)) {
$errors[] = array(
'error' => $l->t('Cannot create "data" directory (%s)', array($CONFIG_DATADIRECTORY)),
'hint' => $l->t('This can usually be fixed by '
. '<a href="%s" target="_blank">giving the webserver write access to the root directory</a>.',
array(OC_Helper::linkToDocs('admin-dir_permissions')))
'error' => 'Data directory (' . $CONFIG_DATADIRECTORY . ') not writable by ownCloud',
'hint' => $permissionsHint
);
} else {
$errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
}
} else if (!is_writable($CONFIG_DATADIRECTORY) or !is_readable($CONFIG_DATADIRECTORY)) {
$errors[] = array(
'error' => 'Data directory (' . $CONFIG_DATADIRECTORY . ') not writable by ownCloud',
'hint' => $permissionsHint
);
} else {
$errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
}
if (!OC_Util::isSetLocaleWorking()) {

View File

@ -19,6 +19,7 @@ class Test_Util_CheckServer extends PHPUnit_Framework_TestCase {
*/
protected function getConfig($systemOptions) {
$systemOptions['datadirectory'] = $this->datadir;
$systemOptions['appstoreenabled'] = false; //it's likely that there is no app folder we can write in
$config = $this->getMockBuilder('\OCP\IConfig')
->disableOriginalConstructor()
->getMock();
@ -35,6 +36,7 @@ class Test_Util_CheckServer extends PHPUnit_Framework_TestCase {
$this->datadir = \OC_Helper::tmpFolder();
file_put_contents($this->datadir . '/.ocdata', '');
\OC::$server->getSession()->set('checkServer_succeeded', false);
}
public function tearDown() {
@ -121,4 +123,39 @@ class Test_Util_CheckServer extends PHPUnit_Framework_TestCase {
$this->assertCount(1, $result);
}
/**
* Tests that no error is given when the datadir is writable
*/
public function testDataDirWritable() {
$result = \OC_Util::checkServer($this->getConfig(array(
'installed' => true,
'version' => implode('.', OC_Util::getVersion())
)));
$this->assertEmpty($result);
}
/**
* Tests an error is given when the datadir is not writable
*/
public function testDataDirNotWritable() {
chmod($this->datadir, 0300);
$result = \OC_Util::checkServer($this->getConfig(array(
'installed' => true,
'version' => implode('.', OC_Util::getVersion())
)));
$this->assertCount(1, $result);
}
/**
* Tests no error is given when the datadir is not writable during setup
*/
public function testDataDirNotWritableSetup() {
chmod($this->datadir, 0300);
$result = \OC_Util::checkServer($this->getConfig(array(
'installed' => false,
'version' => implode('.', OC_Util::getVersion())
)));
chmod($this->datadir, 0700); //needed for cleanup
$this->assertEmpty($result);
}
}