@@ -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()) { |
@@ -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); | |||
} | |||
} |