Index: tests/t3lib/t3lib_div_testcase.php =================================================================== --- tests/t3lib/t3lib_div_testcase.php (revision 7427) +++ tests/t3lib/t3lib_div_testcase.php (working copy) @@ -45,6 +45,7 @@ '_GET' => $_GET, '_POST' => $_POST, '_SERVER' => $_SERVER, + 'TYPO3_CONF_VARS' => $GLOBALS['TYPO3_CONF_VARS'], ); } @@ -1038,5 +1039,308 @@ $GLOBALS['HTTP_GET_VARS'] ); } + + /** + * Checks if t3lib_div::fixPermissions() correctly sets permissions to single file + * This test assumes directory 'PATH_site'/typo3temp exists + * This test is not available on windows OS + * + * @see t3lib_div::fixPermissions() + * @test + */ + public function checkFixPermissionsCorrectlySetsPermissionsToFile() { + if (TYPO3_OS == 'WIN') { + $this->markTestSkipped('fixPermissions() tests not available on Windows'); + } + + // Create and prepare test file + $filename = PATH_site . 'typo3temp/' . uniqid('test_'); + t3lib_div::writeFileToTypo3tempDir($filename, '42'); + chmod($filename, 0742); + + // Set target permissions and run method + $GLOBALS['TYPO3_CONF_VARS']['BE']['fileCreateMask'] = '0660'; + $GLOBALS['TYPO3_CONF_VARS']['BE']['createGroup'] = posix_getegid(); + $fixPermissionsResult = t3lib_div::fixPermissions($filename); + + // Get actual permissions and clean up + clearstatcache(); + $resultFilePermissions = substr(decoct(fileperms($filename)), 2); + $resultFileGroup = filegroup($filename); + unlink($filename); + + // Test if everything was ok + $this->assertTrue($fixPermissionsResult); + $this->assertEquals($resultFilePermissions, '0660'); + $this->assertEquals($resultFileGroup, posix_getegid()); + } + + /** + * Checks if t3lib_div::fixPermissions() correctly sets permissions to hidden file + * This test assumes directory 'PATH_site'/typo3temp exists + * This test is not available on windows OS + * + * @see t3lib_div::fixPermissions() + * @test + */ + public function checkFixPermissionsCorrectlySetsPermissionsToHiddenFile() { + if (TYPO3_OS == 'WIN') { + $this->markTestSkipped('fixPermissions() tests not available on Windows'); + } + + // Create and prepare test file + $filename = PATH_site . 'typo3temp/' . uniqid('.test_'); + t3lib_div::writeFileToTypo3tempDir($filename, '42'); + chmod($filename, 0742); + + // Set target permissions and run method + $GLOBALS['TYPO3_CONF_VARS']['BE']['fileCreateMask'] = '0660'; + $GLOBALS['TYPO3_CONF_VARS']['BE']['createGroup'] = posix_getegid(); + $fixPermissionsResult = t3lib_div::fixPermissions($filename); + + // Get actual permissions and clean up + clearstatcache(); + $resultFilePermissions = substr(decoct(fileperms($filename)), 2); + $resultFileGroup = filegroup($filename); + unlink($filename); + + // Test if everything was ok + $this->assertTrue($fixPermissionsResult); + $this->assertEquals($resultFilePermissions, '0660'); + $this->assertEquals($resultFileGroup, posix_getegid()); + } + + /** + * Checks if t3lib_div::fixPermissions() correctly sets permissions to directory with trailing shash + * This test assumes directory 'PATH_site'/typo3temp exists + * This test is not available on windows OS + * + * @see t3lib_div::fixPermissions() + * @test + */ + public function checkFixPermissionsCorrectlySetsPermissionsToDirectory() { + if (TYPO3_OS == 'WIN') { + $this->markTestSkipped('fixPermissions() tests not available on Windows'); + } + + // Create and prepare test directory + $directory = PATH_site . 'typo3temp/' . uniqid('test_'); + t3lib_div::mkdir($directory); + chmod($directory, 1551); + + // Set target permissions and run method + $GLOBALS['TYPO3_CONF_VARS']['BE']['folderCreateMask'] = '2770'; + $GLOBALS['TYPO3_CONF_VARS']['BE']['createGroup'] = posix_getegid(); + $fixPermissionsResult = t3lib_div::fixPermissions($directory . '/'); + + // Get actual permissions and clean up + clearstatcache(); + $resultDirectoryPermissions = substr(decoct(fileperms($directory)), 1); + $resultDirectoryGroup = filegroup($directory); + t3lib_div::rmdir($directory); + + // Test if everything was ok + $this->assertTrue($fixPermissionsResult); + $this->assertEquals($resultDirectoryPermissions, '2770'); + $this->assertEquals($resultDirectoryGroup, posix_getegid()); + } + + /** + * Checks if t3lib_div::fixPermissions() correctly sets permissions to hidden directory + * This test assumes directory 'PATH_site'/typo3temp exists + * This test is not available on windows OS + * + * @see t3lib_div::fixPermissions() + * @test + */ + public function checkFixPermissionsCorrectlySetsPermissionsToHiddenDirectory() { + if (TYPO3_OS == 'WIN') { + $this->markTestSkipped('fixPermissions() tests not available on Windows'); + } + + // Create and prepare test directory + $directory = PATH_site . 'typo3temp/' . uniqid('.test_'); + t3lib_div::mkdir($directory); + chmod($directory, 1551); + + // Set target permissions and run method + $GLOBALS['TYPO3_CONF_VARS']['BE']['folderCreateMask'] = '2770'; + $GLOBALS['TYPO3_CONF_VARS']['BE']['createGroup'] = posix_getegid(); + $fixPermissionsResult = t3lib_div::fixPermissions($directory); + + // Get actual permissions and clean up + clearstatcache(); + $resultDirectoryPermissions = substr(decoct(fileperms($directory)), 1); + $resultDirectoryGroup = filegroup($directory); + t3lib_div::rmdir($directory); + + // Test if everything was ok + $this->assertTrue($fixPermissionsResult); + $this->assertEquals($resultDirectoryPermissions, '2770'); + $this->assertEquals($resultDirectoryGroup, posix_getegid()); + } + + /** + * Checks if t3lib_div::fixPermissions() correctly sets permissions recursivly + * This test assumes directory 'PATH_site'/typo3temp exists + * This test is not available on windows OS + * + * @see t3lib_div::fixPermissions() + * @test + */ + public function checkFixPermissionsCorrectlySetsPermissionsRecursive() { + if (TYPO3_OS == 'WIN') { + $this->markTestSkipped('fixPermissions() tests not available on Windows'); + } + + // Create and prepare test directory and file structure + $baseDirectory = PATH_site . 'typo3temp/' . uniqid('test_'); + t3lib_div::mkdir($baseDirectory); + chmod($baseDirectory, 1751); + t3lib_div::writeFileToTypo3tempDir($baseDirectory . '/file', '42'); + chmod($baseDirectory . '/file', 0742); + t3lib_div::mkdir($baseDirectory . '/foo'); + chmod($baseDirectory . '/foo', 1751); + t3lib_div::writeFileToTypo3tempDir($baseDirectory . '/foo/file', '42'); + chmod($baseDirectory . '/foo/file', 0742); + t3lib_div::mkdir($baseDirectory . '/.bar'); + chmod($baseDirectory . '/.bar', 1751); + // Use this if writeFileToTypo3tempDir is fixed to create hidden files in subdirectories + // t3lib_div::writeFileToTypo3tempDir($baseDirectory . '/.bar/.file', '42'); + // t3lib_div::writeFileToTypo3tempDir($baseDirectory . '/.bar/..file2', '42'); + touch($baseDirectory . '/.bar/.file', '42'); + chmod($baseDirectory . '/.bar/.file', 0742); + touch($baseDirectory . '/.bar/..file2', '42'); + chmod($baseDirectory . '/.bar/..file2', 0742); + + // Set target permissions and run method + $GLOBALS['TYPO3_CONF_VARS']['BE']['fileCreateMask'] = '0660'; + $GLOBALS['TYPO3_CONF_VARS']['BE']['folderCreateMask'] = '2770'; + $GLOBALS['TYPO3_CONF_VARS']['BE']['createGroup'] = posix_getegid(); + $fixPermissionsResult = t3lib_div::fixPermissions($baseDirectory, TRUE); + + // Get actual permissions + clearstatcache(); + $resultBaseDirectoryPermissions = substr(decoct(fileperms($baseDirectory)), 1); + $resultBaseDirectoryGroup = filegroup($baseDirectory); + $resultBaseFilePermissions = substr(decoct(fileperms($baseDirectory . '/file')), 2); + $resultBaseFileGroup = filegroup($baseDirectory . '/file'); + $resultFooDirectoryPermissions = substr(decoct(fileperms($baseDirectory . '/foo')), 1); + $resultFooDirectoryGroup = filegroup($baseDirectory . '/foo'); + $resultFooFilePermissions = substr(decoct(fileperms($baseDirectory . '/foo/file')), 2); + $resultFooFileGroup = filegroup($baseDirectory . '/foo/file'); + $resultBarDirectoryPermissions = substr(decoct(fileperms($baseDirectory . '/.bar')), 1); + $resultBarDirectoryGroup = filegroup($baseDirectory . '/.bar'); + $resultBarFilePermissions = substr(decoct(fileperms($baseDirectory . '/.bar/.file')), 2); + $resultBarFileGroup = filegroup($baseDirectory . '/.bar/.file'); + $resultBarFile2Permissions = substr(decoct(fileperms($baseDirectory . '/.bar/..file2')), 2); + $resultBarFile2Group = filegroup($baseDirectory . '/.bar/..file2'); + + // Clean up + unlink($baseDirectory . '/file'); + unlink($baseDirectory . '/foo/file'); + unlink($baseDirectory . '/.bar/.file'); + unlink($baseDirectory . '/.bar/..file2'); + t3lib_div::rmdir($baseDirectory . '/foo'); + t3lib_div::rmdir($baseDirectory . '/.bar'); + t3lib_div::rmdir($baseDirectory); + + // Test if everything was ok + $this->assertTrue($fixPermissionsResult); + $this->assertEquals($resultBaseDirectoryPermissions, '2770'); + $this->assertEquals($resultBaseDirectoryGroup, posix_getegid()); + $this->assertEquals($resultBaseFilePermissions, '0660'); + $this->assertEquals($resultBaseFileGroup, posix_getegid()); + $this->assertEquals($resultFooDirectoryPermissions, '2770'); + $this->assertEquals($resultFooDirectoryGroup, posix_getegid()); + $this->assertEquals($resultFooFilePermissions, '0660'); + $this->assertEquals($resultFooFileGroup, posix_getegid()); + $this->assertEquals($resultBarDirectoryPermissions, '2770'); + $this->assertEquals($resultBarDirectoryGroup, posix_getegid()); + $this->assertEquals($resultBarFilePermissions, '0660'); + $this->assertEquals($resultBarFileGroup, posix_getegid()); + $this->assertEquals($resultBarFile2Permissions, '0660'); + $this->assertEquals($resultBarFile2Group, posix_getegid()); + } + + /** + * Checks if t3lib_div::fixPermissions() does not fix permissions on not allowed path + * This test assumes directory 'PATH_site'/typo3temp exists + * This test is not available on windows OS + * + * @see t3lib_div::fixPermissions() + * @test + */ + public function checkFixPermissionsDoesNotSetPermissionsToNotAllowedPath() { + if (TYPO3_OS == 'WIN') { + $this->markTestSkipped('fixPermissions() tests not available on Windows'); + } + + // Create and prepare test file + $filename = PATH_site . 'typo3temp/../typo3temp/' . uniqid('test_'); + touch($filename); + chmod($filename, 0742); + + // Set target permissions and run method + $GLOBALS['TYPO3_CONF_VARS']['BE']['fileCreateMask'] = '0660'; + $fixPermissionsResult = t3lib_div::fixPermissions($filename); + + // Get actual permissions and clean up + clearstatcache(); + $resultFilePermissions = substr(decoct(fileperms($filename)), 2); + unlink($filename); + + // Test if everything was ok + $this->assertFalse($fixPermissionsResult); + $this->assertEquals($resultFilePermissions, '0742'); + } + + /** + * Checks if t3lib_div::mkdir() correctly creates a directory + * This test assumes directory 'PATH_site'/typo3temp exists + * + * @test + * @see t3lib_div::mkdir() + */ + public function checkMkdirCorrectlyCreatesDirectory() { + $directory = PATH_site . 'typo3temp/' . uniqid('test_'); + $mkdirResult = t3lib_div::mkdir($directory); + $directoryCreated = is_dir($directory); + t3lib_div::rmdir($directory); + $this->assertTrue($mkdirResult); + $this->assertTrue($directoryCreated); + } + + /** + * Checks if t3lib_div::mkdir() correctly creates a hidden directory + * This test assumes directory 'PATH_site'/typo3temp exists + * + * @test + * @see t3lib_div::mkdir() + */ + public function checkMkdirCorrectlyCreatesHiddenDirectory() { + $directory = PATH_site . 'typo3temp/' . uniqid('.test_'); + $mkdirResult = t3lib_div::mkdir($directory); + $directoryCreated = is_dir($directory); + t3lib_div::rmdir($directory); + $this->assertTrue($mkdirResult); + $this->assertTrue($directoryCreated); + } + + /** + * Checks if t3lib_div::mkdir() correctly creates a directory with trailing slash + * This test assumes directory 'PATH_site'/typo3temp exists + * + * @test + * @see t3lib_div::mkdir() + */ + public function checkMkdirCorrectlyCreatesDirectoryWithTrailingSlash() { + $directory = PATH_site . 'typo3temp/' . uniqid('test_'); + $mkdirResult = t3lib_div::mkdir($directory); + $directoryCreated = is_dir($directory); + t3lib_div::rmdir($directory); + $this->assertTrue($mkdirResult); + $this->assertTrue($directoryCreated); + } } ?> \ No newline at end of file