From ac88bcbd5f03419e149dac2a080f8f206876547e Mon Sep 17 00:00:00 2001
From: Johannes Leuker <j.leuker@hosting.de>
Date: Tue, 8 Dec 2020 15:12:04 +0100
Subject: [PATCH] Add 'allow Symlinks' as an option to config.php

Signed-off-by: Johannes Leuker <j.leuker@hosting.de>
---
 config/config.sample.php            | 9 +++++++++
 lib/private/Files/Storage/Local.php | 5 ++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/config/config.sample.php b/config/config.sample.php
index 1560fe8ac39..216a32c8ebd 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -1619,6 +1619,15 @@ $CONFIG = [
  */
 'minimum.supported.desktop.version' => '2.0.0',
 
+/**
+ * Option to allow local storage to contain symlinks.
+ * WARNING: Not recommended. This would make it possible for Nextcloud to access
+ * files outside the data directory and could be considered a security risk.
+ *
+ * Defaults to ``false``
+ */
+'localstorage.allowsymlinks' => false,
+
 /**
  * EXPERIMENTAL: option whether to include external storage in quota
  * calculation, defaults to false.
diff --git a/lib/private/Files/Storage/Local.php b/lib/private/Files/Storage/Local.php
index 5d0ce596b11..81d1d083eb8 100644
--- a/lib/private/Files/Storage/Local.php
+++ b/lib/private/Files/Storage/Local.php
@@ -58,8 +58,6 @@ class Local extends \OC\Files\Storage\Common {
 
 	protected $dataDirLength;
 
-	protected $allowSymlinks = false;
-
 	protected $realDataDir;
 
 	public function __construct($arguments) {
@@ -441,7 +439,8 @@ class Local extends \OC\Files\Storage\Common {
 
 		$fullPath = $this->datadir . $path;
 		$currentPath = $path;
-		if ($this->allowSymlinks || $currentPath === '') {
+		$allowSymlinks = \OC::$server->getConfig()->getSystemValue('localstorage.allowsymlinks', false);
+		if ($allowSymlinks || $currentPath === '') {
 			return $fullPath;
 		}
 		$pathToResolve = $fullPath;
-- 
GitLab