WordPress.org

Make WordPress Core

Ticket #10304: 10304.patch

File 10304.patch, 17.5 KB (added by azaozz, 6 years ago)
  • wp-admin/includes/class-wp-filesystem-base.php

     
    210210                        return trailingslashit($base . $last_path); 
    211211                } 
    212212                if ( $loop ) 
    213                         return false;//Prevent tihs function looping again. 
     213                        return false; //Prevent tihs function looping again. 
    214214                //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. 
    215215                return $this->search_for_folder($folder, '/', true); 
    216216 
     
    242242                        $info = 'd'; 
    243243                elseif (($perms & 0x2000) == 0x2000) // Character special 
    244244                        $info = 'c'; 
    245                 elseif (($perms & 0x1000) == 0x1000)// FIFO pipe 
     245                elseif (($perms & 0x1000) == 0x1000) // FIFO pipe 
    246246                        $info = 'p'; 
    247247                else // Unknown 
    248248                        $info = 'u'; 
  • wp-admin/includes/class-wp-filesystem-direct.php

     
    1515 * @uses WP_Filesystem_Base Extends class 
    1616 */ 
    1717class WP_Filesystem_Direct extends WP_Filesystem_Base { 
    18         var $permission = null; 
    1918        var $errors = null; 
     19        /** 
     20         * constructor 
     21         *  
     22         * @param $arg mixed ingored argument 
     23         */ 
    2024        function WP_Filesystem_Direct($arg) { 
    2125                $this->method = 'direct'; 
    2226                $this->errors = new WP_Error(); 
    2327        } 
     28        /** 
     29         * connect filesystem. 
     30         *  
     31         * @return bool Returns true on success or false on failure (always true for WP_Filesystem_Direct). 
     32         */ 
    2433        function connect() { 
    2534                return true; 
    2635        } 
    27         function setDefaultPermissions($perm) { 
    28                 $this->permission = $perm; 
    29         } 
     36        /** 
     37         * Reads entire file into a string 
     38         *  
     39         * @param $file string Name of the file to read. 
     40         * @return string|bool The function returns the read data or false on failure.  
     41         */ 
    3042        function get_contents($file) { 
    3143                return @file_get_contents($file); 
    3244        } 
     45        /** 
     46         * Reads entire file into an array 
     47         *  
     48         * @param $file string Path to the file.  
     49         * @return array|bool the file contents in an array or false on failure.  
     50         */ 
    3351        function get_contents_array($file) { 
    3452                return @file($file); 
    3553        } 
     54        /** 
     55         * Write a string to a file 
     56         *  
     57         * @param $file string Path to the file where to write the data.  
     58         * @param $contents string The data to write. 
     59         * @param $mode int (optional) The file permissions as octal number, usually 0644. 
     60         * @param $type string (optional) Specifies additional type of access you require to the file. 
     61         * @return bool False upon failure. 
     62         */ 
    3663        function put_contents($file, $contents, $mode = false, $type = '') { 
    3764                if ( ! ($fp = @fopen($file, 'w' . $type)) ) 
    3865                        return false; 
    3966                @fwrite($fp, $contents); 
    4067                @fclose($fp); 
    41                 $this->chmod($file,$mode); 
     68                $this->chmod($file, $mode); 
    4269                return true; 
    4370        } 
     71        /** 
     72         * Gets the current working directory 
     73         *  
     74         * @return string|bool the current working directory on success, or false on failure.  
     75         */ 
    4476        function cwd() { 
    4577                return @getcwd(); 
    4678        } 
     79        /** 
     80         * Change directory 
     81         * 
     82         * @param $dir string The new current directory.  
     83         * @return bool Returns true on success or false on failure. 
     84         */ 
    4785        function chdir($dir) { 
    4886                return @chdir($dir); 
    4987        } 
     88        /** 
     89         * Changes file group 
     90         *  
     91         * @param $file string Path to the file.  
     92         * @param $group mixed A group name or number. 
     93         * @param $recursive bool (optional) If set True changes file group recursivly. Defaults to False.  
     94         * @return bool Returns true on success or false on failure. 
     95         */ 
    5096        function chgrp($file, $group, $recursive = false) { 
    5197                if ( ! $this->exists($file) ) 
    5298                        return false; 
     
    62108 
    63109                return true; 
    64110        } 
     111        /** 
     112         * Changes filesystem permissions 
     113         *  
     114         * @param $file string Path to the file. 
     115         * @param $mode int (optional) The permissions as octal number, usually 0644 for files, 0755 for dirs. 
     116         * @param $recursive bool (optional) If set True changes file group recursivly. Defaults to False.  
     117         * @return bool Returns true on success or false on failure. 
     118         */ 
    65119        function chmod($file, $mode = false, $recursive = false) { 
    66120                if ( ! $this->exists($file) ) 
    67121                        return false; 
    68122 
    69123                if ( ! $mode ) { 
    70                         if ( $this->permission ) 
    71                                 $mode = $this->permission; 
    72                         elseif ( $this->is_file($file) ) 
     124                        if ( $this->is_file($file) ) 
    73125                                $mode = FS_CHMOD_FILE; 
    74126                        elseif ( $this->is_dir($file) ) 
    75127                                $mode = FS_CHMOD_DIR; 
     
    89141 
    90142                return true; 
    91143        } 
     144        /** 
     145         * Changes file owner 
     146         *  
     147         * @param $file string Path to the file.  
     148         * @param $owner mixed A user name or number. 
     149         * @param $recursive bool (optional) If set True changes file owner recursivly. Defaults to False.  
     150         * @return bool Returns true on success or false on failure. 
     151         */ 
    92152        function chown($file, $owner, $recursive = false) { 
    93153                if ( ! $this->exists($file) ) 
    94154                        return false; 
     
    98158                        return @chown($file, $owner); 
    99159                //Is a directory, and we want recursive 
    100160                $filelist = $this->dirlist($file); 
    101                 foreach ($filelist as $filename){ 
     161                foreach ($filelist as $filename) { 
    102162                        $this->chown($file . '/' . $filename, $owner, $recursive); 
    103163                } 
    104164                return true; 
    105165        } 
     166        /** 
     167         * Gets file owner 
     168         *  
     169         * @param $file string Path to the file.  
     170         * @return string Username of the user. 
     171         */ 
    106172        function owner($file) { 
    107173                $owneruid = @fileowner($file); 
    108174                if ( ! $owneruid ) 
     
    112178                $ownerarray = posix_getpwuid($owneruid); 
    113179                return $ownerarray['name']; 
    114180        } 
     181        /** 
     182         * Gets file permissions 
     183         *  
     184         * FIXME does not handle errors in fileperms() 
     185         *  
     186         * @param $file string Path to the file.  
     187         * @return string Mode of the file (last 4 digits). 
     188         */ 
    115189        function getchmod($file) { 
    116190                return substr(decoct(@fileperms($file)),3); 
    117191        } 
     
    133207 
    134208        function move($source, $destination, $overwrite = false) { 
    135209                //Possible to use rename()? 
    136                 if ( $this->copy($source, $destination, $overwrite) && $this->exists($destination) ){ 
     210                if ( $this->copy($source, $destination, $overwrite) && $this->exists($destination) ) { 
    137211                        $this->delete($source); 
    138212                        return true; 
    139213                } else { 
     
    197271                return @filesize($file); 
    198272        } 
    199273 
    200         function touch($file, $time = 0, $atime = 0){ 
     274        function touch($file, $time = 0, $atime = 0) { 
    201275                if ($time == 0) 
    202276                        $time = time(); 
    203277                if ($atime == 0) 
     
    205279                return @touch($file, $time, $atime); 
    206280        } 
    207281 
    208         function mkdir($path, $chmod = false, $chown = false, $chgrp = false){ 
     282        function mkdir($path, $chmod = false, $chown = false, $chgrp = false) { 
     283                if ( ! $chmod ) 
     284                        $chmod = FS_CHMOD_DIR; 
     285 
    209286                if ( ! @mkdir($path) ) 
    210287                        return false; 
    211288                $this->chmod($path, $chmod); 
  • wp-admin/includes/class-wp-filesystem-ftpext.php

     
    2020        var $errors = null; 
    2121        var $options = array(); 
    2222 
    23         var $permission = null; 
    24  
    2523        function WP_Filesystem_FTPext($opt='') { 
    2624                $this->method = 'ftpext'; 
    2725                $this->errors = new WP_Error(); 
     
    8482                return true; 
    8583        } 
    8684 
    87         function setDefaultPermissions($perm) { 
    88                 $this->permission = $perm; 
    89         } 
    90  
    91         function get_contents($file, $type = '', $resumepos = 0 ){ 
    92                 if( empty($type) ) 
     85        function get_contents($file, $type = '', $resumepos = 0 ) { 
     86                if ( empty($type) ) 
    9387                        $type = FTP_BINARY; 
    9488 
    9589                $temp = tmpfile(); 
    9690                if ( ! $temp ) 
    9791                        return false; 
    9892 
    99                 if( ! @ftp_fget($this->link, $temp, $file, $type, $resumepos) ) 
     93                if ( ! @ftp_fget($this->link, $temp, $file, $type, $resumepos) ) 
    10094                        return false; 
    10195 
    10296                fseek($temp, 0); //Skip back to the start of the file being written to 
     
    112106                return explode("\n", $this->get_contents($file)); 
    113107        } 
    114108        function put_contents($file, $contents, $type = '' ) { 
    115                 if( empty($type) ) 
     109                if ( empty($type) ) 
    116110                        $type = $this->is_binary($contents) ? FTP_BINARY : FTP_ASCII; 
    117111 
    118112                $temp = tmpfile(); 
     
    129123        } 
    130124        function cwd() { 
    131125                $cwd = @ftp_pwd($this->link); 
    132                 if( $cwd ) 
     126                if ( $cwd ) 
    133127                        $cwd = trailingslashit($cwd); 
    134128                return $cwd; 
    135129        } 
     
    140134                return false; 
    141135        } 
    142136        function chmod($file, $mode = false, $recursive = false) { 
    143                 if( ! $mode ) 
    144                         $mode = $this->permission; 
    145                 if( ! $mode ) 
    146                         return false; 
    147137                if ( ! $this->exists($file) && ! $this->is_dir($file) ) 
    148138                        return false; 
     139 
     140                if ( ! $mode ) { 
     141                        if ( $this->is_file($file) ) 
     142                                $mode = FS_CHMOD_FILE; 
     143                        elseif ( $this->is_dir($file) ) 
     144                                $mode = FS_CHMOD_DIR; 
     145                        else 
     146                                return false;    
     147                } 
     148 
    149149                if ( ! $recursive || ! $this->is_dir($file) ) { 
    150150                        if ( ! function_exists('ftp_chmod') ) 
    151151                                return @ftp_site($this->link, sprintf('CHMOD %o %s', $mode, $file)); 
     
    153153                } 
    154154                //Is a directory, and we want recursive 
    155155                $filelist = $this->dirlist($file); 
    156                 foreach($filelist as $filename){ 
     156                foreach ( $filelist as $filename ) { 
    157157                        $this->chmod($file . '/' . $filename, $mode, $recursive); 
    158158                } 
    159159                return true; 
     
    174174                return $dir[$file]['group']; 
    175175        } 
    176176        function copy($source, $destination, $overwrite = false ) { 
    177                 if( ! $overwrite && $this->exists($destination) ) 
     177                if ( ! $overwrite && $this->exists($destination) ) 
    178178                        return false; 
    179179                $content = $this->get_contents($source); 
    180                 if( false === $content) 
     180                if ( false === $content) 
    181181                        return false; 
    182182                return $this->put_contents($destination, $content); 
    183183        } 
     
    210210        function is_dir($path) { 
    211211                $cwd = $this->cwd(); 
    212212                $result = @ftp_chdir($this->link, trailingslashit($path) ); 
    213                 if( $result && $path == $this->cwd() || $this->cwd() != $cwd ) { 
     213                if ( $result && $path == $this->cwd() || $this->cwd() != $cwd ) { 
    214214                        @ftp_chdir($this->link, $cwd); 
    215215                        return true; 
    216216                } 
     
    237237                return false; 
    238238        } 
    239239        function mkdir($path, $chmod = false, $chown = false, $chgrp = false) { 
    240                 if( !ftp_mkdir($this->link, $path) ) 
     240                if  ( !ftp_mkdir($this->link, $path) ) 
    241241                        return false; 
    242                 if( $chmod ) 
    243                         $this->chmod($path, $chmod); 
    244                 if( $chown ) 
     242                if ( ! $chmod ) 
     243                        $chmod = FS_CHMOD_DIR; 
     244                $this->chmod($path, $chmod); 
     245                if ( $chown ) 
    245246                        $this->chown($path, $chown); 
    246                 if( $chgrp ) 
     247                if ( $chgrp ) 
    247248                        $this->chgrp($path, $chgrp); 
    248249                return true; 
    249250        } 
     
    256257                if ( is_null($is_windows) ) 
    257258                        $is_windows = strpos( strtolower(ftp_systype($this->link)), 'win') !== false; 
    258259 
    259                 if ($is_windows && preg_match("/([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|<DIR>) +(.+)/", $line, $lucifer)) { 
     260                if ( $is_windows && preg_match("/([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|<DIR>) +(.+)/", $line, $lucifer) ) { 
    260261                        $b = array(); 
    261                         if ($lucifer[3]<70) { $lucifer[3] +=2000; } else { $lucifer[3]+=1900; } // 4digit year fix 
     262                        if ( $lucifer[3] < 70 ) { $lucifer[3] +=2000; } else { $lucifer[3] += 1900; } // 4digit year fix 
    262263                        $b['isdir'] = ($lucifer[7]=="<DIR>"); 
    263264                        if ( $b['isdir'] ) 
    264265                                $b['type'] = 'd'; 
     
    317318        } 
    318319 
    319320        function dirlist($path = '.', $incdot = false, $recursive = false) { 
    320                 if( $this->is_file($path) ) { 
     321                if ( $this->is_file($path) ) { 
    321322                        $limitFile = basename($path); 
    322323                        $path = dirname($path) . '/'; 
    323324                } else { 
     
    352353                        if ( 'd' == $struc['type'] ) { 
    353354                                $struc['files'] = array(); 
    354355 
    355                                 if ( $incdot ){ 
     356                                if ( $incdot ) { 
    356357                                        //We're including the doted starts 
    357                                         if( '.' != $struc['name'] && '..' != $struc['name'] ){ //Ok, It isnt a special folder 
     358                                        if ( '.' != $struc['name'] && '..' != $struc['name'] ) { //Ok, It isnt a special folder 
    358359                                                if ($recursive) 
    359360                                                        $struc['files'] = $this->dirlist($path . '/' . $struc['name'], $incdot, $recursive); 
    360361                                        } 
     
    369370                return $ret; 
    370371        } 
    371372 
    372         function __destruct(){ 
    373                 if( $this->link ) 
     373        function __destruct() { 
     374                if ( $this->link ) 
    374375                        ftp_close($this->link); 
    375376        } 
    376377} 
  • wp-admin/includes/class-wp-filesystem-ftpsockets.php

     
    2020        var $errors = null; 
    2121        var $options = array(); 
    2222 
    23         var $permission = null; 
    24  
    2523        function WP_Filesystem_ftpsockets($opt = '') { 
    2624                $this->method = 'ftpsockets'; 
    2725                $this->errors = new WP_Error(); 
    2826 
    2927                //Check if possible to use ftp functions. 
    30                 if( ! @include_once ABSPATH . 'wp-admin/includes/class-ftp.php' ) 
     28                if ( ! @include_once ABSPATH . 'wp-admin/includes/class-ftp.php' ) 
    3129                                return false; 
    3230                $this->ftp = new ftp(); 
    3331 
     
    8280                return true; 
    8381        } 
    8482 
    85         function setDefaultPermissions($perm) { 
    86                 $this->permission = $perm; 
    87         } 
    88  
    8983        function get_contents($file, $type = '', $resumepos = 0) { 
    90                 if( ! $this->exists($file) ) 
     84                if ( ! $this->exists($file) ) 
    9185                        return false; 
    9286 
    93                 if( empty($type) ) 
     87                if ( empty($type) ) 
    9488                        $type = FTP_AUTOASCII; 
    9589                $this->ftp->SetType($type); 
    9690 
     
    121115        } 
    122116 
    123117        function put_contents($file, $contents, $type = '' ) { 
    124                 if( empty($type) ) 
     118                if ( empty($type) ) 
    125119                        $type = $this->is_binary($contents) ? FTP_BINARY : FTP_ASCII; 
    126120 
    127121                $this->ftp->SetType($type); 
     
    144138 
    145139        function cwd() { 
    146140                $cwd = $this->ftp->pwd(); 
    147                 if( $cwd ) 
     141                if ( $cwd ) 
    148142                        $cwd = trailingslashit($cwd); 
    149143                return $cwd; 
    150144        } 
     
    158152        } 
    159153 
    160154        function chmod($file, $mode = false, $recursive = false ) { 
    161                 if( ! $mode ) 
    162                         $mode = $this->permission; 
    163                 if( ! $mode ) 
    164                         return false; 
    165                 //if( ! $this->exists($file) ) 
    166                 //      return false; 
    167                 if( ! $recursive || ! $this->is_dir($file) ) { 
    168                         return $this->ftp->chmod($file,$mode); 
     155 
     156                if ( ! $mode ) { 
     157                        if ( $this->is_file($file) ) 
     158                                $mode = FS_CHMOD_FILE; 
     159                        elseif ( $this->is_dir($file) ) 
     160                                $mode = FS_CHMOD_DIR; 
     161                        else 
     162                                return false;    
    169163                } 
     164 
     165                if ( ! $recursive || ! $this->is_dir($file) ) { 
     166                        return $this->ftp->chmod($file, $mode); 
     167                } 
    170168                //Is a directory, and we want recursive 
    171169                $filelist = $this->dirlist($file); 
    172170                foreach($filelist as $filename){ 
     
    195193        } 
    196194 
    197195        function copy($source, $destination, $overwrite = false ) { 
    198                 if( ! $overwrite && $this->exists($destination) ) 
     196                if ( ! $overwrite && $this->exists($destination) ) 
    199197                        return false; 
    200198 
    201199                $content = $this->get_contents($source); 
     
    264262        } 
    265263 
    266264        function mkdir($path, $chmod = false, $chown = false, $chgrp = false ) { 
    267                 if( ! $this->ftp->mkdir($path) ) 
     265                if ( ! $this->ftp->mkdir($path) ) 
    268266                        return false; 
    269                 if( $chmod ) 
    270                         $this->chmod($path, $chmod); 
    271                 if( $chown ) 
     267                if ( ! $chmod ) 
     268                        $chmod = FS_CHMOD_DIR; 
     269                $this->chmod($path, $chmod); 
     270                if ( $chown ) 
    272271                        $this->chown($path, $chown); 
    273                 if( $chgrp ) 
     272                if ( $chgrp ) 
    274273                        $this->chgrp($path, $chgrp); 
    275274                return true; 
    276275        } 
    277276 
    278277        function rmdir($path, $recursive = false ) { 
    279                 if( ! $recursive ) 
     278                if ( ! $recursive ) 
    280279                        return $this->ftp->rmdir($path); 
    281280 
    282281                return $this->ftp->mdel($path); 
    283282        } 
    284283 
    285284        function dirlist($path = '.', $incdot = false, $recursive = false ) { 
    286                 if( $this->is_file($path) ) { 
     285                if ( $this->is_file($path) ) { 
    287286                        $limitFile = basename($path); 
    288287                        $path = dirname($path) . '/'; 
    289288                } else { 
     
    291290                } 
    292291 
    293292                $list = $this->ftp->dirlist($path); 
    294                 if( ! $list ) 
     293                if ( ! $list ) 
    295294                        return false; 
    296                 if( empty($list) ) 
     295                if ( empty($list) ) 
    297296                        return array(); 
    298297 
    299298                $ret = array(); 
     
    304303 
    305304                                if ( $incdot ){ 
    306305                                        //We're including the doted starts 
    307                                         if( '.' != $struc['name'] && '..' != $struc['name'] ){ //Ok, It isnt a special folder 
     306                                        if ( '.' != $struc['name'] && '..' != $struc['name'] ){ //Ok, It isnt a special folder 
    308307                                                if ($recursive) 
    309308                                                        $struc['files'] = $this->dirlist($path . '/' . $struc['name'], $incdot, $recursive); 
    310309                                        } 
  • wp-admin/includes/class-wp-filesystem-ssh2.php

     
    5656        var $errors = array(); 
    5757        var $options = array(); 
    5858 
    59         var $permission = 0644; 
    60  
    6159        function WP_Filesystem_SSH2($opt='') { 
    6260                $this->method = 'ssh2'; 
    6361                $this->errors = new WP_Error(); 
     
    160158                return false; 
    161159        } 
    162160 
    163         function setDefaultPermissions($perm) { 
    164                 $this->debug("setDefaultPermissions();"); 
    165                 if ( $perm ) 
    166                         $this->permission = $perm; 
    167         } 
    168  
    169161        function get_contents($file, $type = '', $resumepos = 0 ) { 
    170162                $file = ltrim($file, '/'); 
    171163                return file_get_contents('ssh2.sftp://' . $this->sftp_link . '/' . $file); 
     
    201193        } 
    202194 
    203195        function chmod($file, $mode = false, $recursive = false) { 
    204                 if( ! $mode ) 
    205                         $mode = $this->permission; 
    206                 if( ! $mode ) 
    207                         return false; 
    208196                if ( ! $this->exists($file) ) 
    209197                        return false; 
     198 
     199                if ( ! $mode ) { 
     200                        if ( $this->is_file($file) ) 
     201                                $mode = FS_CHMOD_FILE; 
     202                        elseif ( $this->is_dir($file) ) 
     203                                $mode = FS_CHMOD_DIR; 
     204                        else 
     205                                return false;    
     206                } 
     207 
    210208                if ( ! $recursive || ! $this->is_dir($file) ) 
    211209                        return $this->run_command(sprintf('chmod %o %s', $mode, escapeshellarg($file)), true); 
    212210                return $this->run_command(sprintf('chmod -R %o %s', $mode, escapeshellarg($file)), true); 
     
    315313                //Not implmented. 
    316314        } 
    317315 
    318         function mkdir($path, $chmod = null, $chown = false, $chgrp = false) { 
     316        function mkdir($path, $chmod = false, $chown = false, $chgrp = false) { 
    319317                $path = untrailingslashit($path); 
    320                 $chmod = !empty($chmod) ? $chmod : $this->permission; 
     318                if ( ! $chmod ) 
     319                        $chmod = FS_CHMOD_DIR; 
    321320                if ( ! ssh2_sftp_mkdir($this->sftp_link, $path, $chmod, true) ) 
    322321                        return false; 
    323322                if ( $chown )