diff options
Diffstat (limited to 'includes/filerepo/FSRepo.php')
-rw-r--r-- | includes/filerepo/FSRepo.php | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/includes/filerepo/FSRepo.php b/includes/filerepo/FSRepo.php index 08ec1514..eb8df0f5 100644 --- a/includes/filerepo/FSRepo.php +++ b/includes/filerepo/FSRepo.php @@ -149,10 +149,8 @@ class FSRepo extends FileRepo { if ( !wfMkdirParents( $dstDir ) ) { return $this->newFatal( 'directorycreateerror', $dstDir ); } - // In the deleted zone, seed new directories with a blank - // index.html, to prevent crawling if ( $dstZone == 'deleted' ) { - file_put_contents( "$dstDir/index.html", '' ); + $this->initDeletedDir( $dstDir ); } } @@ -215,6 +213,20 @@ class FSRepo extends FileRepo { } /** + * Take all available measures to prevent web accessibility of new deleted + * directories, in case the user has not configured offline storage + */ + protected function initDeletedDir( $dir ) { + // Add a .htaccess file to the root of the deleted zone + $root = $this->getZonePath( 'deleted' ); + if ( !file_exists( "$root/.htaccess" ) ) { + file_put_contents( "$root/.htaccess", "Deny from all\n" ); + } + // Seed new directories with a blank index.html, to prevent crawling + file_put_contents( "$dir/index.html", '' ); + } + + /** * Pick a random name in the temp zone and store a file to it. * @param string $originalName The base name of the file as specified * by the user. The file extension will be maintained. @@ -393,8 +405,7 @@ class FSRepo extends FileRepo { $status->fatal( 'directorycreateerror', $archiveDir ); continue; } - // Seed new directories with a blank index.html, to prevent crawling - file_put_contents( "$archiveDir/index.html", '' ); + $this->initDeletedDir( $archiveDir ); } // Check if the archive directory is writable // This doesn't appear to work on NTFS |