summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2021-03-16 15:34:41 +0100
committerRobin Appelman <robin@icewind.nl>2021-03-16 15:35:35 +0100
commit5ffaa94fbc9a879af28e51ccbe13469cbb79cfdb (patch)
tree237998cd2ed796d32c76a1499d3fa2ce12945049
parent7a09b7d60edfdb4426565667dfbc94b132fba034 (diff)
downloadnextcloud-server-5ffaa94fbc9a879af28e51ccbe13469cbb79cfdb.tar.gz
nextcloud-server-5ffaa94fbc9a879af28e51ccbe13469cbb79cfdb.zip
add (hidden) option to always show smb root as writable
some smb servers are very insistent in reporting that the root of the share is readonly, even if it isn't. This works around the problem by adding a hidden option to overwrite the permissions of the root of the share. This can be enabled using ```bash occ files_external:config <mount id> root_force_writable true ``` where you can find your mount id using ```bash occ files_external:list ``` Signed-off-by: Robin Appelman <robin@icewind.nl>
-rw-r--r--apps/files_external/lib/Lib/Storage/SMB.php10
1 files changed, 9 insertions, 1 deletions
diff --git a/apps/files_external/lib/Lib/Storage/SMB.php b/apps/files_external/lib/Lib/Storage/SMB.php
index bc065b24552..45a01db76b3 100644
--- a/apps/files_external/lib/Lib/Storage/SMB.php
+++ b/apps/files_external/lib/Lib/Storage/SMB.php
@@ -97,6 +97,9 @@ class SMB extends Common implements INotifyStorage {
/** @var bool */
protected $checkAcl;
+ /** @var bool */
+ protected $rootWritable;
+
public function __construct($params) {
if (!isset($params['host'])) {
throw new \Exception('Invalid configuration, no host provided');
@@ -134,6 +137,7 @@ class SMB extends Common implements INotifyStorage {
$this->showHidden = isset($params['show_hidden']) && $params['show_hidden'];
$this->checkAcl = isset($params['check_acl']) && $params['check_acl'];
+ $this->rootWritable = isset($params['root_force_writable']) && $params['root_force_writable'];
$this->statCache = new CappedMemoryCache();
parent::__construct($params);
@@ -573,7 +577,11 @@ class SMB extends Common implements INotifyStorage {
private function getMetaDataFromFileInfo(IFileInfo $fileInfo) {
$permissions = Constants::PERMISSION_READ + Constants::PERMISSION_SHARE;
- if (!$fileInfo->isReadOnly()) {
+ if (
+ !$fileInfo->isReadOnly() || (
+ $this->rootWritable && $fileInfo->getPath() == $this->buildPath('')
+ )
+ ) {
$permissions += Constants::PERMISSION_DELETE;
$permissions += Constants::PERMISSION_UPDATE;
if ($fileInfo->isDirectory()) {