Make WordPress Core

Ticket #37942: class-wp-filesystem-ssh2.php.patch

File class-wp-filesystem-ssh2.php.patch, 3.0 KB (added by billthor55, 8 years ago)

Patch file to use ssh2-sftp-stat for critical methods.

  • class-wp-filesystem-ssh2.php

    old new  
    162162                        );
    163163                        return false;
    164164                }
    165 
    166165                return true;
    167166        }
    168167
     
    183182         */
    184183        public function sftp_path( $path ) {
    185184                if ( '/' === $path ) {
    186                         $path = '/./';
     185                        $path = '.';
    187186                }
    188187                return 'ssh2.sftp://' . $this->sftp_link . '/' . ltrim( $path, '/' );
    189188        }
    190189
    191190        /**
     191         * Gets the ssh2.sftp file status
     192         *
    192193         * @access public
    193          *
     194         *
     195         * The stream wrapper is no reliably returning status data.  ssh2_sftp_stat
     196         * reliably returns a status structure.  This contains most of the status
     197         * data we are checking.  It may be worthwhile to cache the stats for a
     198         * path as it is common to ask for multiple stats for the same path.
     199         *
     200         * @since 4.6.0
     201         *
     202         * @param string $path The File/Directory path on the remote server to stat
     203         * @return stat structure for the file or directory
     204         */
     205        public function sftp_stat( $path ) {
     206                return ssh2_sftp_stat( $this->sftp_link, $path );
     207        }
     208
     209        /**
     210         * @access public
     211         *
    194212         * @param string $command
    195213         * @param bool $returnbool
    196214         * @return bool|string
     
    350368         * @return string|false
    351369         */
    352370        public function owner($file) {
    353                 $owneruid = @fileowner( $this->sftp_path( $file ) );
     371                $owneruid = $this->sftp_stat( $file )['uid'];
    354372                if ( ! $owneruid )
    355373                        return false;
    356374                if ( ! function_exists('posix_getpwuid') )
     
    366384         * @return string
    367385         */
    368386        public function getchmod($file) {
    369                 return substr( decoct( @fileperms( $this->sftp_path( $file ) ) ), -3 );
     387                return substr( decoct( $this->sftp_stat( $file )['mode'] ), -3 );
    370388        }
    371389
    372390        /**
     
    376394         * @return string|false
    377395         */
    378396        public function group($file) {
    379                 $gid = @filegroup( $this->sftp_path( $file ) );
     397                $gid = $this->sftp_stat( $file )['gid'];
    380398                if ( ! $gid )
    381399                        return false;
    382400                if ( ! function_exists('posix_getgrgid') )
     
    444462         * @return bool
    445463         */
    446464        public function exists($file) {
    447                 return file_exists( $this->sftp_path( $file ) );
     465                return = $this->sftp_stat( $file );
    448466        }
    449467
    450468        /**
     
    454472         * @return bool
    455473         */
    456474        public function is_file($file) {
    457                 return is_file( $this->sftp_path( $file ) );
     475                return substr( decoct( $this->sftp_stat( $file )['mode'] ), 0, 1 ) == 1;
    458476        }
    459477
    460478        /**
     
    464482         * @return bool
    465483         */
    466484        public function is_dir($path) {
    467                 return is_dir( $this->sftp_path( $path ) );
     485                return substr( decoct( $this->sftp_stat( $path )['mode'] ), 0, 1 ) == 4;
    468486        }
    469487
    470488        /**
     
    495513         * @return int
    496514         */
    497515        public function atime($file) {
    498                 return fileatime( $this->sftp_path( $file ) );
     516                return $this->sftp_stat( $file )['atime'];
    499517        }
    500518
    501519        /**
     
    505523         * @return int
    506524         */
    507525        public function mtime($file) {
    508                 return filemtime( $this->sftp_path( $file ) );
     526                return $this->sftp_stat( $file )['mtime'];
    509527        }
    510528
    511529        /**
     
    515533         * @return int
    516534         */
    517535        public function size($file) {
    518                 return filesize( $this->sftp_path( $file ) );
     536                return $this->sftp_stat( $file )['size'];
    519537        }
    520538
    521539        /**