From a8793e00c0455b36ed16f045bbb85a9cf3791801 Mon Sep 17 00:00:00 2001 From: dd32 Date: Sun, 7 Feb 2010 01:12:29 +0000 Subject: [PATCH] Fix recursive chmod for WP_Filesystem. Props reaperhulk for FtpExt. Fixes #11261 git-svn-id: http://svn.automattic.com/wordpress/trunk@12997 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- .../includes/class-wp-filesystem-direct.php | 2 +- .../includes/class-wp-filesystem-ftpext.php | 20 +++++++++---------- .../class-wp-filesystem-ftpsockets.php | 15 +++++++------- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/wp-admin/includes/class-wp-filesystem-direct.php b/wp-admin/includes/class-wp-filesystem-direct.php index bdad6e609e..27703630c9 100644 --- a/wp-admin/includes/class-wp-filesystem-direct.php +++ b/wp-admin/includes/class-wp-filesystem-direct.php @@ -135,7 +135,7 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base { //Is a directory, and we want recursive $file = trailingslashit($file); $filelist = $this->dirlist($file); - foreach ($filelist as $filename) + foreach ( (array)$filelist as $filename => $filemeta) $this->chmod($file . $filename, $mode, $recursive); return true; diff --git a/wp-admin/includes/class-wp-filesystem-ftpext.php b/wp-admin/includes/class-wp-filesystem-ftpext.php index 9b5edded67..56cb83cd2d 100644 --- a/wp-admin/includes/class-wp-filesystem-ftpext.php +++ b/wp-admin/includes/class-wp-filesystem-ftpext.php @@ -154,17 +154,17 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { return false; } - if ( ! $recursive || ! $this->is_dir($file) ) { - if ( ! function_exists('ftp_chmod') ) - return @ftp_site($this->link, sprintf('CHMOD %o %s', $mode, $file)); - return @ftp_chmod($this->link, $mode, $file); + // chmod any sub-objects if recursive. + if ( $recursive && $this->is_dir($file) ) { + $filelist = $this->dirlist($file); + foreach ( (array)$filelist as $filename => $filemeta ) + $this->chmod($file . '/' . $filename, $mode, $recursive); } - //Is a directory, and we want recursive - $filelist = $this->dirlist($file); - foreach ( $filelist as $filename ) { - $this->chmod($file . '/' . $filename, $mode, $recursive); - } - return true; + + // chmod the file or directory + if ( ! function_exists('ftp_chmod') ) + return @ftp_site($this->link, sprintf('CHMOD %o %s', $mode, $file)); + return @ftp_chmod($this->link, $mode, $file); } function chown($file, $owner, $recursive = false ) { return false; diff --git a/wp-admin/includes/class-wp-filesystem-ftpsockets.php b/wp-admin/includes/class-wp-filesystem-ftpsockets.php index e0480c5414..a94ac71513 100644 --- a/wp-admin/includes/class-wp-filesystem-ftpsockets.php +++ b/wp-admin/includes/class-wp-filesystem-ftpsockets.php @@ -164,16 +164,15 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base { return false; } - if ( ! $recursive || ! $this->is_dir($file) ) { - return $this->ftp->chmod($file, $mode); + // chmod any sub-objects if recursive. + if ( $recursive && $this->is_dir($file) ) { + $filelist = $this->dirlist($file); + foreach ( (array)$filelist as $filename => $filemeta ) + $this->chmod($file . '/' . $filename, $mode, $recursive); } - //Is a directory, and we want recursive - $filelist = $this->dirlist($file); - foreach ( $filelist as $filename ) - $this->chmod($file . '/' . $filename, $mode, $recursive); - - return true; + // chmod the file or directory + return $this->ftp->chmod($file, $mode); } function chown($file, $owner, $recursive = false ) {