diff --git a/wp-admin/includes/class-wp-filesystem-base.php b/wp-admin/includes/class-wp-filesystem-base.php index 2569a8674a..6b0d098169 100644 --- a/wp-admin/includes/class-wp-filesystem-base.php +++ b/wp-admin/includes/class-wp-filesystem-base.php @@ -210,7 +210,7 @@ class WP_Filesystem_Base { return trailingslashit($base . $last_path); } if ( $loop ) - return false;//Prevent tihs function looping again. + return false; //Prevent tihs function looping again. //As an extra last resort, Change back to / if the folder wasnt found. This comes into effect when the CWD is /home/user/ but WP is at /var/www/.... mainly dedicated setups. return $this->search_for_folder($folder, '/', true); @@ -242,7 +242,7 @@ class WP_Filesystem_Base { $info = 'd'; elseif (($perms & 0x2000) == 0x2000) // Character special $info = 'c'; - elseif (($perms & 0x1000) == 0x1000)// FIFO pipe + elseif (($perms & 0x1000) == 0x1000) // FIFO pipe $info = 'p'; else // Unknown $info = 'u'; diff --git a/wp-admin/includes/class-wp-filesystem-direct.php b/wp-admin/includes/class-wp-filesystem-direct.php index 03a797734c..d60c3659cf 100644 --- a/wp-admin/includes/class-wp-filesystem-direct.php +++ b/wp-admin/includes/class-wp-filesystem-direct.php @@ -15,38 +15,84 @@ * @uses WP_Filesystem_Base Extends class */ class WP_Filesystem_Direct extends WP_Filesystem_Base { - var $permission = null; var $errors = null; + /** + * constructor + * + * @param $arg mixed ingored argument + */ function WP_Filesystem_Direct($arg) { $this->method = 'direct'; $this->errors = new WP_Error(); } + /** + * connect filesystem. + * + * @return bool Returns true on success or false on failure (always true for WP_Filesystem_Direct). + */ function connect() { return true; } - function setDefaultPermissions($perm) { - $this->permission = $perm; - } + /** + * Reads entire file into a string + * + * @param $file string Name of the file to read. + * @return string|bool The function returns the read data or false on failure. + */ function get_contents($file) { return @file_get_contents($file); } + /** + * Reads entire file into an array + * + * @param $file string Path to the file. + * @return array|bool the file contents in an array or false on failure. + */ function get_contents_array($file) { return @file($file); } + /** + * Write a string to a file + * + * @param $file string Path to the file where to write the data. + * @param $contents string The data to write. + * @param $mode int (optional) The file permissions as octal number, usually 0644. + * @param $type string (optional) Specifies additional type of access you require to the file. + * @return bool False upon failure. + */ function put_contents($file, $contents, $mode = false, $type = '') { if ( ! ($fp = @fopen($file, 'w' . $type)) ) return false; @fwrite($fp, $contents); @fclose($fp); - $this->chmod($file,$mode); + $this->chmod($file, $mode); return true; } + /** + * Gets the current working directory + * + * @return string|bool the current working directory on success, or false on failure. + */ function cwd() { return @getcwd(); } + /** + * Change directory + * + * @param $dir string The new current directory. + * @return bool Returns true on success or false on failure. + */ function chdir($dir) { return @chdir($dir); } + /** + * Changes file group + * + * @param $file string Path to the file. + * @param $group mixed A group name or number. + * @param $recursive bool (optional) If set True changes file group recursivly. Defaults to False. + * @return bool Returns true on success or false on failure. + */ function chgrp($file, $group, $recursive = false) { if ( ! $this->exists($file) ) return false; @@ -62,14 +108,20 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base { return true; } + /** + * Changes filesystem permissions + * + * @param $file string Path to the file. + * @param $mode int (optional) The permissions as octal number, usually 0644 for files, 0755 for dirs. + * @param $recursive bool (optional) If set True changes file group recursivly. Defaults to False. + * @return bool Returns true on success or false on failure. + */ function chmod($file, $mode = false, $recursive = false) { if ( ! $this->exists($file) ) return false; if ( ! $mode ) { - if ( $this->permission ) - $mode = $this->permission; - elseif ( $this->is_file($file) ) + if ( $this->is_file($file) ) $mode = FS_CHMOD_FILE; elseif ( $this->is_dir($file) ) $mode = FS_CHMOD_DIR; @@ -89,6 +141,14 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base { return true; } + /** + * Changes file owner + * + * @param $file string Path to the file. + * @param $owner mixed A user name or number. + * @param $recursive bool (optional) If set True changes file owner recursivly. Defaults to False. + * @return bool Returns true on success or false on failure. + */ function chown($file, $owner, $recursive = false) { if ( ! $this->exists($file) ) return false; @@ -98,11 +158,17 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base { return @chown($file, $owner); //Is a directory, and we want recursive $filelist = $this->dirlist($file); - foreach ($filelist as $filename){ + foreach ($filelist as $filename) { $this->chown($file . '/' . $filename, $owner, $recursive); } return true; } + /** + * Gets file owner + * + * @param $file string Path to the file. + * @return string Username of the user. + */ function owner($file) { $owneruid = @fileowner($file); if ( ! $owneruid ) @@ -112,6 +178,14 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base { $ownerarray = posix_getpwuid($owneruid); return $ownerarray['name']; } + /** + * Gets file permissions + * + * FIXME does not handle errors in fileperms() + * + * @param $file string Path to the file. + * @return string Mode of the file (last 4 digits). + */ function getchmod($file) { return substr(decoct(@fileperms($file)),3); } @@ -133,7 +207,7 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base { function move($source, $destination, $overwrite = false) { //Possible to use rename()? - if ( $this->copy($source, $destination, $overwrite) && $this->exists($destination) ){ + if ( $this->copy($source, $destination, $overwrite) && $this->exists($destination) ) { $this->delete($source); return true; } else { @@ -197,7 +271,7 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base { return @filesize($file); } - function touch($file, $time = 0, $atime = 0){ + function touch($file, $time = 0, $atime = 0) { if ($time == 0) $time = time(); if ($atime == 0) @@ -205,7 +279,10 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base { return @touch($file, $time, $atime); } - function mkdir($path, $chmod = false, $chown = false, $chgrp = false){ + function mkdir($path, $chmod = false, $chown = false, $chgrp = false) { + if ( ! $chmod ) + $chmod = FS_CHMOD_DIR; + if ( ! @mkdir($path) ) return false; $this->chmod($path, $chmod); diff --git a/wp-admin/includes/class-wp-filesystem-ftpext.php b/wp-admin/includes/class-wp-filesystem-ftpext.php index db9e307d79..a03f11b20b 100644 --- a/wp-admin/includes/class-wp-filesystem-ftpext.php +++ b/wp-admin/includes/class-wp-filesystem-ftpext.php @@ -19,8 +19,6 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { var $errors = null; var $options = array(); - var $permission = null; - function WP_Filesystem_FTPext($opt='') { $this->method = 'ftpext'; $this->errors = new WP_Error(); @@ -90,19 +88,15 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { return true; } - function setDefaultPermissions($perm) { - $this->permission = $perm; - } - - function get_contents($file, $type = '', $resumepos = 0 ){ - if( empty($type) ) + function get_contents($file, $type = '', $resumepos = 0 ) { + if ( empty($type) ) $type = FTP_BINARY; $temp = tmpfile(); if ( ! $temp ) return false; - if( ! @ftp_fget($this->link, $temp, $file, $type, $resumepos) ) + if ( ! @ftp_fget($this->link, $temp, $file, $type, $resumepos) ) return false; fseek($temp, 0); //Skip back to the start of the file being written to @@ -118,7 +112,7 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { return explode("\n", $this->get_contents($file)); } function put_contents($file, $contents, $type = '' ) { - if( empty($type) ) + if ( empty($type) ) $type = $this->is_binary($contents) ? FTP_BINARY : FTP_ASCII; $temp = tmpfile(); @@ -135,7 +129,7 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { } function cwd() { $cwd = @ftp_pwd($this->link); - if( $cwd ) + if ( $cwd ) $cwd = trailingslashit($cwd); return $cwd; } @@ -146,12 +140,18 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { return false; } function chmod($file, $mode = false, $recursive = false) { - if( ! $mode ) - $mode = $this->permission; - if( ! $mode ) - return false; if ( ! $this->exists($file) && ! $this->is_dir($file) ) return false; + + if ( ! $mode ) { + if ( $this->is_file($file) ) + $mode = FS_CHMOD_FILE; + elseif ( $this->is_dir($file) ) + $mode = FS_CHMOD_DIR; + else + return false; + } + if ( ! $recursive || ! $this->is_dir($file) ) { if ( ! function_exists('ftp_chmod') ) return @ftp_site($this->link, sprintf('CHMOD %o %s', $mode, $file)); @@ -159,7 +159,7 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { } //Is a directory, and we want recursive $filelist = $this->dirlist($file); - foreach($filelist as $filename){ + foreach ( $filelist as $filename ) { $this->chmod($file . '/' . $filename, $mode, $recursive); } return true; @@ -180,10 +180,10 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { return $dir[$file]['group']; } function copy($source, $destination, $overwrite = false ) { - if( ! $overwrite && $this->exists($destination) ) + if ( ! $overwrite && $this->exists($destination) ) return false; $content = $this->get_contents($source); - if( false === $content) + if ( false === $content) return false; return $this->put_contents($destination, $content); } @@ -216,7 +216,7 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { function is_dir($path) { $cwd = $this->cwd(); $result = @ftp_chdir($this->link, trailingslashit($path) ); - if( $result && $path == $this->cwd() || $this->cwd() != $cwd ) { + if ( $result && $path == $this->cwd() || $this->cwd() != $cwd ) { @ftp_chdir($this->link, $cwd); return true; } @@ -243,13 +243,14 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { return false; } function mkdir($path, $chmod = false, $chown = false, $chgrp = false) { - if( !ftp_mkdir($this->link, $path) ) + if ( !ftp_mkdir($this->link, $path) ) return false; - if( $chmod ) - $this->chmod($path, $chmod); - if( $chown ) + if ( ! $chmod ) + $chmod = FS_CHMOD_DIR; + $this->chmod($path, $chmod); + if ( $chown ) $this->chown($path, $chown); - if( $chgrp ) + if ( $chgrp ) $this->chgrp($path, $chgrp); return true; } @@ -262,9 +263,9 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { if ( is_null($is_windows) ) $is_windows = strpos( strtolower(ftp_systype($this->link)), 'win') !== false; - if ($is_windows && preg_match("/([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|) +(.+)/", $line, $lucifer)) { + if ( $is_windows && preg_match("/([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|) +(.+)/", $line, $lucifer) ) { $b = array(); - if ($lucifer[3]<70) { $lucifer[3] +=2000; } else { $lucifer[3]+=1900; } // 4digit year fix + if ( $lucifer[3] < 70 ) { $lucifer[3] +=2000; } else { $lucifer[3] += 1900; } // 4digit year fix $b['isdir'] = ($lucifer[7]==""); if ( $b['isdir'] ) $b['type'] = 'd'; @@ -323,7 +324,7 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { } function dirlist($path = '.', $incdot = false, $recursive = false) { - if( $this->is_file($path) ) { + if ( $this->is_file($path) ) { $limitFile = basename($path); $path = dirname($path) . '/'; } else { @@ -358,9 +359,9 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { if ( 'd' == $struc['type'] ) { $struc['files'] = array(); - if ( $incdot ){ + if ( $incdot ) { //We're including the doted starts - if( '.' != $struc['name'] && '..' != $struc['name'] ){ //Ok, It isnt a special folder + if ( '.' != $struc['name'] && '..' != $struc['name'] ) { //Ok, It isnt a special folder if ($recursive) $struc['files'] = $this->dirlist($path . '/' . $struc['name'], $incdot, $recursive); } @@ -375,8 +376,8 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { return $ret; } - function __destruct(){ - if( $this->link ) + function __destruct() { + if ( $this->link ) ftp_close($this->link); } } diff --git a/wp-admin/includes/class-wp-filesystem-ftpsockets.php b/wp-admin/includes/class-wp-filesystem-ftpsockets.php index 3f0b74fd55..101b741e8e 100644 --- a/wp-admin/includes/class-wp-filesystem-ftpsockets.php +++ b/wp-admin/includes/class-wp-filesystem-ftpsockets.php @@ -19,14 +19,12 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base { var $errors = null; var $options = array(); - var $permission = null; - function WP_Filesystem_ftpsockets($opt = '') { $this->method = 'ftpsockets'; $this->errors = new WP_Error(); //Check if possible to use ftp functions. - if( ! @include_once ABSPATH . 'wp-admin/includes/class-ftp.php' ) + if ( ! @include_once ABSPATH . 'wp-admin/includes/class-ftp.php' ) return false; $this->ftp = new ftp(); @@ -83,15 +81,11 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base { return true; } - function setDefaultPermissions($perm) { - $this->permission = $perm; - } - function get_contents($file, $type = '', $resumepos = 0) { - if( ! $this->exists($file) ) + if ( ! $this->exists($file) ) return false; - if( empty($type) ) + if ( empty($type) ) $type = FTP_AUTOASCII; $this->ftp->SetType($type); @@ -122,7 +116,7 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base { } function put_contents($file, $contents, $type = '' ) { - if( empty($type) ) + if ( empty($type) ) $type = $this->is_binary($contents) ? FTP_BINARY : FTP_ASCII; $this->ftp->SetType($type); @@ -145,7 +139,7 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base { function cwd() { $cwd = $this->ftp->pwd(); - if( $cwd ) + if ( $cwd ) $cwd = trailingslashit($cwd); return $cwd; } @@ -159,14 +153,18 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base { } function chmod($file, $mode = false, $recursive = false ) { - if( ! $mode ) - $mode = $this->permission; - if( ! $mode ) - return false; - //if( ! $this->exists($file) ) - // return false; - if( ! $recursive || ! $this->is_dir($file) ) { - return $this->ftp->chmod($file,$mode); + + if ( ! $mode ) { + if ( $this->is_file($file) ) + $mode = FS_CHMOD_FILE; + elseif ( $this->is_dir($file) ) + $mode = FS_CHMOD_DIR; + else + return false; + } + + if ( ! $recursive || ! $this->is_dir($file) ) { + return $this->ftp->chmod($file, $mode); } //Is a directory, and we want recursive $filelist = $this->dirlist($file); @@ -196,7 +194,7 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base { } function copy($source, $destination, $overwrite = false ) { - if( ! $overwrite && $this->exists($destination) ) + if ( ! $overwrite && $this->exists($destination) ) return false; $content = $this->get_contents($source); @@ -265,26 +263,27 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base { } function mkdir($path, $chmod = false, $chown = false, $chgrp = false ) { - if( ! $this->ftp->mkdir($path) ) + if ( ! $this->ftp->mkdir($path) ) return false; - if( $chmod ) - $this->chmod($path, $chmod); - if( $chown ) + if ( ! $chmod ) + $chmod = FS_CHMOD_DIR; + $this->chmod($path, $chmod); + if ( $chown ) $this->chown($path, $chown); - if( $chgrp ) + if ( $chgrp ) $this->chgrp($path, $chgrp); return true; } function rmdir($path, $recursive = false ) { - if( ! $recursive ) + if ( ! $recursive ) return $this->ftp->rmdir($path); return $this->ftp->mdel($path); } function dirlist($path = '.', $incdot = false, $recursive = false ) { - if( $this->is_file($path) ) { + if ( $this->is_file($path) ) { $limitFile = basename($path); $path = dirname($path) . '/'; } else { @@ -292,9 +291,9 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base { } $list = $this->ftp->dirlist($path); - if( ! $list ) + if ( ! $list ) return false; - if( empty($list) ) + if ( empty($list) ) return array(); $ret = array(); @@ -305,7 +304,7 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base { if ( $incdot ){ //We're including the doted starts - if( '.' != $struc['name'] && '..' != $struc['name'] ){ //Ok, It isnt a special folder + if ( '.' != $struc['name'] && '..' != $struc['name'] ){ //Ok, It isnt a special folder if ($recursive) $struc['files'] = $this->dirlist($path . '/' . $struc['name'], $incdot, $recursive); } diff --git a/wp-admin/includes/class-wp-filesystem-ssh2.php b/wp-admin/includes/class-wp-filesystem-ssh2.php index d406106b50..a9f8dbd652 100644 --- a/wp-admin/includes/class-wp-filesystem-ssh2.php +++ b/wp-admin/includes/class-wp-filesystem-ssh2.php @@ -48,8 +48,6 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base { var $errors = array(); var $options = array(); - var $permission = 0644; - function WP_Filesystem_SSH2($opt='') { $this->method = 'ssh2'; $this->errors = new WP_Error(); @@ -152,12 +150,6 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base { return false; } - function setDefaultPermissions($perm) { - $this->debug("setDefaultPermissions();"); - if ( $perm ) - $this->permission = $perm; - } - function get_contents($file, $type = '', $resumepos = 0 ) { $file = ltrim($file, '/'); return file_get_contents('ssh2.sftp://' . $this->sftp_link . '/' . $file); @@ -193,12 +185,18 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base { } function chmod($file, $mode = false, $recursive = false) { - if( ! $mode ) - $mode = $this->permission; - if( ! $mode ) - return false; if ( ! $this->exists($file) ) return false; + + if ( ! $mode ) { + if ( $this->is_file($file) ) + $mode = FS_CHMOD_FILE; + elseif ( $this->is_dir($file) ) + $mode = FS_CHMOD_DIR; + else + return false; + } + if ( ! $recursive || ! $this->is_dir($file) ) return $this->run_command(sprintf('chmod %o %s', $mode, escapeshellarg($file)), true); return $this->run_command(sprintf('chmod -R %o %s', $mode, escapeshellarg($file)), true); @@ -307,9 +305,10 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base { //Not implmented. } - function mkdir($path, $chmod = null, $chown = false, $chgrp = false) { + function mkdir($path, $chmod = false, $chown = false, $chgrp = false) { $path = untrailingslashit($path); - $chmod = !empty($chmod) ? $chmod : $this->permission; + if ( ! $chmod ) + $chmod = FS_CHMOD_DIR; if ( ! ssh2_sftp_mkdir($this->sftp_link, $path, $chmod, true) ) return false; if ( $chown )