Browse Source

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

tags/v8.0.0alpha1
Robin Appelman 9 years ago
parent
commit
23dd7cb51d
2 changed files with 56 additions and 17 deletions
  1. 19
    17
      lib/private/util.php
  2. 37
    0
      tests/lib/utilcheckserver.php

+ 19
- 17
lib/private/util.php 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()) {

+ 37
- 0
tests/lib/utilcheckserver.php 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);
}
}

Loading…
Cancel
Save