From 3f790bb85b3544680f4af2e3e005d736a5aff8a0 Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Thu, 9 Aug 2018 19:48:55 +0200 Subject: Excludes not writable app roots from the directory permission check Signed-off-by: Michael Weimann --- settings/Controller/CheckSetupController.php | 40 +++++++++++++++++++++------- 1 file changed, 30 insertions(+), 10 deletions(-) (limited to 'settings/Controller') diff --git a/settings/Controller/CheckSetupController.php b/settings/Controller/CheckSetupController.php index d3b520a7686..e6c88b6f7ca 100644 --- a/settings/Controller/CheckSetupController.php +++ b/settings/Controller/CheckSetupController.php @@ -542,16 +542,11 @@ Raw output $appDirsWithDifferentOwner = []; foreach (OC::$APPSROOTS as $appRoot) { - $appsPath = $appRoot['path']; - $appsDir = new DirectoryIterator($appRoot['path']); - foreach ($appsDir as $fileInfo) { - if ($fileInfo->isDir() && !$fileInfo->isDot()) { - $absAppPath = $appsPath . DIRECTORY_SEPARATOR . $fileInfo->getFilename(); - $appDirUser = posix_getpwuid(fileowner($absAppPath)); - if ($appDirUser !== $currentUser) { - $appDirsWithDifferentOwner[] = $absAppPath . DIRECTORY_SEPARATOR . $fileInfo->getFilename(); - } - } + if ($appRoot['writable'] === true) { + $appDirsWithDifferentOwner = array_merge( + $appDirsWithDifferentOwner, + $this->getAppDirsWithDifferentOwnerForAppRoot($currentUser, $appRoot) + ); } } @@ -559,6 +554,31 @@ Raw output return $appDirsWithDifferentOwner; } + /** + * Tests if the directories for one apps directory are writable by the current user. + * + * @param array $currentUser The current user + * @param array $appRoot The app root config + * @return string[] The none writable directory paths inside the app root + */ + private function getAppDirsWithDifferentOwnerForAppRoot(array $currentUser, array $appRoot): array { + $appDirsWithDifferentOwner = []; + $appsPath = $appRoot['path']; + $appsDir = new DirectoryIterator($appRoot['path']); + + foreach ($appsDir as $fileInfo) { + if ($fileInfo->isDir() && !$fileInfo->isDot()) { + $absAppPath = $appsPath . DIRECTORY_SEPARATOR . $fileInfo->getFilename(); + $appDirUser = posix_getpwuid(fileowner($absAppPath)); + if ($appDirUser !== $currentUser) { + $appDirsWithDifferentOwner[] = $absAppPath . DIRECTORY_SEPARATOR . $fileInfo->getFilename(); + } + } + } + + return $appDirsWithDifferentOwner; + } + /** * @return DataResponse */ -- cgit v1.2.3