summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.htaccess1
-rw-r--r--lib/private/setup.php31
-rw-r--r--lib/private/updater.php6
-rw-r--r--tests/lib/setup.php15
4 files changed, 50 insertions, 3 deletions
diff --git a/.htaccess b/.htaccess
index eef4ead0179..af7e961379c 100644
--- a/.htaccess
+++ b/.htaccess
@@ -1,3 +1,4 @@
+# Version: 8.0.0
<IfModule mod_fcgid.c>
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
diff --git a/lib/private/setup.php b/lib/private/setup.php
index e5eb2bac194..b9ba8d906c2 100644
--- a/lib/private/setup.php
+++ b/lib/private/setup.php
@@ -243,13 +243,42 @@ class OC_Setup {
}
/**
+ * @return string Absolute path to htaccess
+ */
+ private function pathToHtaccess() {
+ return OC::$SERVERROOT.'/.htaccess';
+ }
+
+ /**
+ * Checks if the .htaccess contains the current version parameter
+ *
+ * @return bool
+ */
+ private function isCurrentHtaccess() {
+ $version = \OC_Util::getVersion();
+ unset($version[3]);
+
+ return !strpos(
+ file_get_contents($this->pathToHtaccess()),
+ 'Version: '.implode('.', $version)
+ ) === false;
+ }
+
+ /**
* Append the correct ErrorDocument path for Apache hosts
+ *
+ * @throws \OC\HintException If .htaccess does not include the current version
*/
public static function updateHtaccess() {
+ $setupHelper = new OC_Setup(\OC::$server->getConfig());
+ if(!$setupHelper->isCurrentHtaccess()) {
+ throw new \OC\HintException('.htaccess file has the wrong version. Please upload the correct version.');
+ }
+
$content = "\n";
$content.= "ErrorDocument 403 ".OC::$WEBROOT."/core/templates/403.php\n";//custom 403 error page
$content.= "ErrorDocument 404 ".OC::$WEBROOT."/core/templates/404.php";//custom 404 error page
- @file_put_contents(OC::$SERVERROOT.'/.htaccess', $content, FILE_APPEND); //suppress errors in case we don't have permissions for it
+ @file_put_contents($setupHelper->pathToHtaccess(), $content, FILE_APPEND); //suppress errors in case we don't have permissions for it
}
public static function protectDataDirectory() {
diff --git a/lib/private/updater.php b/lib/private/updater.php
index 6272f77cfc2..fb41e2d36f0 100644
--- a/lib/private/updater.php
+++ b/lib/private/updater.php
@@ -189,7 +189,11 @@ class Updater extends BasicEmitter {
// Update htaccess files for apache hosts
if (isset($_SERVER['SERVER_SOFTWARE']) && strstr($_SERVER['SERVER_SOFTWARE'], 'Apache')) {
- \OC_Setup::updateHtaccess();
+ try {
+ \OC_Setup::updateHtaccess();
+ } catch (\Exception $e) {
+ throw new \Exception($e->getMessage());
+ }
}
// create empty file in data dir, so we can later find
diff --git a/tests/lib/setup.php b/tests/lib/setup.php
index 8373ba316d6..a221943c016 100644
--- a/tests/lib/setup.php
+++ b/tests/lib/setup.php
@@ -19,7 +19,7 @@ class Test_OC_Setup extends \Test\TestCase {
parent::setUp();
$this->config = $this->getMock('\OCP\IConfig');
- $this->setupClass = $this->getMock('\OC_Setup', array('class_exists', 'is_callable'), array($this->config));
+ $this->setupClass = $this->getMock('\OC_Setup', ['class_exists', 'is_callable'], [$this->config]);
}
public function testGetSupportedDatabasesWithOneWorking() {
@@ -102,4 +102,17 @@ class Test_OC_Setup extends \Test\TestCase {
->will($this->returnValue('NotAnArray'));
$this->setupClass->getSupportedDatabases();
}
+
+ /**
+ * This is actual more an integration test whether the version parameter in the .htaccess
+ * was updated as well when the version has been incremented.
+ * If it hasn't this test will fail.
+ */
+ public function testHtaccessIsCurrent() {
+ $result = Test_Helper::invokePrivate(
+ $this->setupClass,
+ 'isCurrentHtaccess'
+ );
+ $this->assertTrue($result);
+ }
} \ No newline at end of file