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>
This commit is contained in:
parent
37c3930f72
commit
728488fcf5
|
@ -97,6 +97,9 @@ class SMB extends Common implements INotifyStorage {
|
||||||
/** @var bool */
|
/** @var bool */
|
||||||
protected $checkAcl;
|
protected $checkAcl;
|
||||||
|
|
||||||
|
/** @var bool */
|
||||||
|
protected $rootWritable;
|
||||||
|
|
||||||
public function __construct($params) {
|
public function __construct($params) {
|
||||||
if (!isset($params['host'])) {
|
if (!isset($params['host'])) {
|
||||||
throw new \Exception('Invalid configuration, no host provided');
|
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->showHidden = isset($params['show_hidden']) && $params['show_hidden'];
|
||||||
$this->checkAcl = isset($params['check_acl']) && $params['check_acl'];
|
$this->checkAcl = isset($params['check_acl']) && $params['check_acl'];
|
||||||
|
$this->rootWritable = isset($params['root_force_writable']) && $params['root_force_writable'];
|
||||||
|
|
||||||
$this->statCache = new CappedMemoryCache();
|
$this->statCache = new CappedMemoryCache();
|
||||||
parent::__construct($params);
|
parent::__construct($params);
|
||||||
|
@ -573,7 +577,11 @@ class SMB extends Common implements INotifyStorage {
|
||||||
private function getMetaDataFromFileInfo(IFileInfo $fileInfo) {
|
private function getMetaDataFromFileInfo(IFileInfo $fileInfo) {
|
||||||
$permissions = Constants::PERMISSION_READ + Constants::PERMISSION_SHARE;
|
$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_DELETE;
|
||||||
$permissions += Constants::PERMISSION_UPDATE;
|
$permissions += Constants::PERMISSION_UPDATE;
|
||||||
if ($fileInfo->isDirectory()) {
|
if ($fileInfo->isDirectory()) {
|
||||||
|
|
Loading…
Reference in New Issue