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 ) {