[BUGFIX] Allow access to filemount directories 20/27120/8
authorAlexander Stehlik <alexander.stehlik@googlemail.com>
Thu, 30 Jan 2014 15:08:38 +0000 (16:08 +0100)
committerSteffen Ritter <info@rs-websystems.de>
Fri, 31 Jan 2014 09:16:07 +0000 (10:16 +0100)
Currently a backend user can only access files within filemounts
but not the filemount directory itself.

After that fix LocalDriver::isWithin returns true, if the folder
itself is requested.

Resolves: #55416
Releases: 6.2
Change-Id: I455664359ec620c413bfc01787bda8766462fbab
Reviewed-on: https://review.typo3.org/27120
Reviewed-by: Ingo Schmitt
Tested-by: Ingo Schmitt
Reviewed-by: Wouter Wolters
Reviewed-by: Steffen Ritter
Tested-by: Steffen Ritter
typo3/sysext/core/Classes/Resource/Driver/DriverInterface.php
typo3/sysext/core/Classes/Resource/Driver/LocalDriver.php

index bd5698a..35e637e 100644 (file)
@@ -379,10 +379,13 @@ interface DriverInterface {
         * a file or folder is within another folder.
         * This can e.g. be used to check for web-mounts.
         *
+        * Hint: this also needs to return TRUE if the given identifier
+        * matches the container identifier to allow access to the root
+        * folder of a filemount.
+        *
         * @param string $folderIdentifier
         * @param string $identifier identifier to be checked against $folderIdentifier
-        *
-        * @return boolean TRUE if $content is within $folderIdentifier
+        * @return boolean TRUE if $content is within or matches $folderIdentifier
         */
        public function isWithin($folderIdentifier, $identifier);
 
@@ -430,4 +433,4 @@ interface DriverInterface {
         */
        public function getFoldersInFolder($folderIdentifier, $start = 0, $numberOfItems = 0, $recursive = FALSE, array $folderNameFilterCallbacks = array());
 
-}
\ No newline at end of file
+}
index 62d64ef..aca87e5 100644 (file)
@@ -1071,18 +1071,20 @@ class LocalDriver extends AbstractHierarchicalFilesystemDriver {
 
        /**
         * Checks if a given identifier is within a container, e.g. if
-        * a file or folder is within another folder.
-        * This can e.g. be used to check for webmounts.
+        * a file or folder is within another folder. It will also return
+        * TRUE if both canonicalized identifiers are equal.
         *
         * @param string $folderIdentifier
         * @param string $identifier identifier to be checked against $folderIdentifier
-        *
-        * @return boolean TRUE if $content is within $folderIdentifier
+        * @return boolean TRUE if $content is within or matches $folderIdentifier
         */
        public function isWithin($folderIdentifier, $identifier) {
-               $folderPath = $this->canonicalizeAndCheckFolderIdentifier($folderIdentifier);
-               $identifier = $this->canonicalizeAndCheckFileIdentifier($identifier);
-               return GeneralUtility::isFirstPartOfStr($identifier, $folderPath);
+               $folderIdentifier = $this->canonicalizeAndCheckFileIdentifier($folderIdentifier);
+               $entryIdentifier = $this->canonicalizeAndCheckFileIdentifier($identifier);
+               if ($folderIdentifier === $entryIdentifier) {
+                       return TRUE;
+               }
+               return GeneralUtility::isFirstPartOfStr($entryIdentifier, $folderIdentifier . '/');
        }
 
        /**