summaryrefslogtreecommitdiffstats
path: root/apps/files_external
diff options
context:
space:
mode:
authorRoland Tapken <roland@bitarbeiter.net>2018-02-09 17:40:00 +0100
committerRobin Appelman <robin@icewind.nl>2018-05-25 15:00:35 +0200
commite8868c2148163fbf152c70e607e73cbac829a58a (patch)
treee03637068600ca7bc9ab2eacbd9a8ad46a4e23f9 /apps/files_external
parentd8e3c3cb222dd450246fd1ac1d4dcb47ff179b7d (diff)
downloadnextcloud-server-e8868c2148163fbf152c70e607e73cbac829a58a.tar.gz
nextcloud-server-e8868c2148163fbf152c70e607e73cbac829a58a.zip
Make SMB module more fault-tolerant
Ignore unavailable files when fetching the share's mtime or reading directory listings. This can happen on servers using a distributed file system (DFS) with unavailable destinations, for example when the remote server is offline. Signed-off-by: Roland Tapken <roland@bitarbeiter.net>
Diffstat (limited to 'apps/files_external')
-rw-r--r--apps/files_external/lib/Lib/Storage/SMB.php16
1 files changed, 13 insertions, 3 deletions
diff --git a/apps/files_external/lib/Lib/Storage/SMB.php b/apps/files_external/lib/Lib/Storage/SMB.php
index d8bbe8c4718..c9828606ffb 100644
--- a/apps/files_external/lib/Lib/Storage/SMB.php
+++ b/apps/files_external/lib/Lib/Storage/SMB.php
@@ -156,7 +156,13 @@ class SMB extends Common implements INotifyStorage {
$this->statCache[$path . '/' . $file->getName()] = $file;
}
return array_filter($files, function (IFileInfo $file) {
- return !$file->isHidden();
+ try {
+ return !$file->isHidden();
+ } catch (ForbiddenException $e) {
+ return false;
+ } catch (NotFoundException $e) {
+ return false;
+ }
});
} catch (ConnectException $e) {
throw new StorageNotAvailableException($e->getMessage(), $e->getCode(), $e);
@@ -230,8 +236,12 @@ class SMB extends Common implements INotifyStorage {
$highestMTime = 0;
$files = $this->share->dir($this->root);
foreach ($files as $fileInfo) {
- if ($fileInfo->getMTime() > $highestMTime) {
- $highestMTime = $fileInfo->getMTime();
+ try {
+ if ($fileInfo->getMTime() > $highestMTime) {
+ $highestMTime = $fileInfo->getMTime();
+ }
+ } catch (NotFoundException $e) {
+ // Ignore this, can happen on unavailable DFS shares
}
}
return $highestMTime;