From 945bd042b3acf5045fb596a2435e0e38d6910c0e Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 25 Mar 2021 12:03:09 +0100 Subject: [PATCH] ignore readonly flag for directories see http://support.microsoft.com/kb/326549 Signed-off-by: Robin Appelman --- apps/files_external/lib/Lib/Storage/SMB.php | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/apps/files_external/lib/Lib/Storage/SMB.php b/apps/files_external/lib/Lib/Storage/SMB.php index cc372dfcaa..90b99c8398 100644 --- a/apps/files_external/lib/Lib/Storage/SMB.php +++ b/apps/files_external/lib/Lib/Storage/SMB.php @@ -97,9 +97,6 @@ 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'); @@ -137,7 +134,6 @@ 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); @@ -578,9 +574,7 @@ class SMB extends Common implements INotifyStorage { $permissions = Constants::PERMISSION_READ + Constants::PERMISSION_SHARE; if ( - !$fileInfo->isReadOnly() || ( - $this->rootWritable && $fileInfo->getPath() == $this->buildPath('') - ) + !$fileInfo->isReadOnly() || $fileInfo->isDirectory() ) { $permissions += Constants::PERMISSION_DELETE; $permissions += Constants::PERMISSION_UPDATE; @@ -683,7 +677,7 @@ class SMB extends Common implements INotifyStorage { $info = $this->getFileInfo($path); // following windows behaviour for read-only folders: they can be written into // (https://support.microsoft.com/en-us/kb/326549 - "cause" section) - return ($this->showHidden || !$info->isHidden()) && (!$info->isReadOnly() || $this->is_dir($path)); + return ($this->showHidden || !$info->isHidden()) && (!$info->isReadOnly() || $info->isDirectory()); } catch (NotFoundException $e) { return false; } catch (ForbiddenException $e) {