Skip to content

Commit 234e90b

Browse files
authored
Merge pull request #2875 from magento-thunder/MAGETWO-93265
Fixed issues: - MAGETWO-93265: Change the depth of a recursive check of directory write permissions
2 parents 97bf9fd + 4c73c3c commit 234e90b

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Setup\Model;
7+
8+
use Magento\Framework\Setup\FilePermissions;
9+
use Magento\Framework\Filesystem;
10+
use Magento\TestFramework\Helper\Bootstrap;
11+
use Magento\Framework\App\Filesystem\DirectoryList;
12+
use Magento\Framework\App\State;
13+
use Magento\Framework\Filesystem\Directory\WriteInterface;
14+
15+
/**
16+
* @magentoAppIsolation enabled
17+
*/
18+
class FilePermissionsTest extends \PHPUnit_Framework_TestCase
19+
{
20+
/**
21+
* @var FilePermissions
22+
*/
23+
private $filePermissions;
24+
25+
/**
26+
* @var WriteInterface
27+
*/
28+
private $varDirectoryWriter;
29+
30+
/**
31+
* @var string
32+
*/
33+
private $testDir = 'test';
34+
35+
/**
36+
* @inheritdoc
37+
*/
38+
protected function setUp()
39+
{
40+
$objectManager = Bootstrap::getObjectManager();
41+
/** @var Filesystem $filesystem */
42+
$filesystem = $objectManager->get(Filesystem::class);
43+
$this->varDirectoryWriter = $filesystem->getDirectoryWrite(DirectoryList::VAR_DIR);
44+
45+
$this->filePermissions = $objectManager->create(FilePermissions::class, [
46+
'filesystem' => $filesystem,
47+
'directoryList' => $objectManager->get(DirectoryList::class),
48+
'state' => $objectManager->get(State::class),
49+
]);
50+
}
51+
52+
/**
53+
* Checks the depth of recursive check permissions
54+
*/
55+
public function testDeepOfRecursiveCheckPermissions()
56+
{
57+
$dirs = [
58+
'dir1',
59+
'dir2/dir21',
60+
'dir2/dir22/dir221',
61+
'dir3/dir31/dir311/dir3111',
62+
];
63+
foreach ($dirs as $dir) {
64+
$pathToReadOnlyDir = $this->testDir . '/' . $dir;
65+
$this->varDirectoryWriter->create($pathToReadOnlyDir);
66+
$this->varDirectoryWriter->changePermissionsRecursively($pathToReadOnlyDir, 0555, 0444);
67+
}
68+
$missingWritablePathsForInstallation = $this->filePermissions->getMissingWritablePathsForInstallation();
69+
$this->assertCount(1, $missingWritablePathsForInstallation);
70+
$this->assertEquals('dir1', basename($missingWritablePathsForInstallation[0]));
71+
}
72+
73+
/**
74+
* @inheritdoc
75+
*/
76+
protected function tearDown()
77+
{
78+
if ($this->varDirectoryWriter->isExist($this->testDir)) {
79+
$this->varDirectoryWriter->delete($this->testDir);
80+
}
81+
}
82+
}

lib/internal/Magento/Framework/Setup/FilePermissions.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
use Magento\Framework\App\State;
1313
use Magento\Framework\App\ObjectManager;
1414

15+
/**
16+
* Checks permissions to files and folders.
17+
*/
1518
class FilePermissions
1619
{
1720
/**
@@ -147,6 +150,7 @@ public function getInstallationCurrentWritableDirectories()
147150
*/
148151
private function checkRecursiveDirectories($directory)
149152
{
153+
/** @var $directoryIterator \RecursiveIteratorIterator */
150154
$directoryIterator = new \RecursiveIteratorIterator(
151155
new \RecursiveDirectoryIterator($directory, \RecursiveDirectoryIterator::SKIP_DOTS),
152156
\RecursiveIteratorIterator::CHILD_FIRST
@@ -168,6 +172,8 @@ private function checkRecursiveDirectories($directory)
168172
]
169173
);
170174

175+
$directoryIterator->setMaxDepth(1);
176+
171177
$foundNonWritable = false;
172178

173179
try {

0 commit comments

Comments
 (0)