Make WordPress Core

Ticket #58541: class-wp-filesystem-ssh2.patch

File class-wp-filesystem-ssh2.patch, 3.8 KB (added by jobst, 16 months ago)

Patch for the problem

  • .php

    old new  
    7070                        return;
    7171                }
    7272
     73                // Get what can be found in DB and/or wp-config.php
     74                // This will set any KEY not found to ''
     75                $ajaxURL = admin_url('admin-ajax.php');
     76                $credentials = request_filesystem_credentials($ajaxURL, 'ssh', false, ABSPATH );
     77
    7378                // Set defaults:
    7479                if ( empty( $opt['port'] ) ) {
    7580                        $this->options['port'] = 22;
     
    7782                        $this->options['port'] = $opt['port'];
    7883                }
    7984
     85                // Fill ALL $this->options with data required for a proper connection
     86                // If a $opt[key] is passed, use that
     87                // If a $opt[key] is NOT passed, use $credentials[key] from above
     88                // If both not found, raise error
     89
     90                // Check if hostname is OK
    8091                if ( empty( $opt['hostname'] ) ) {
    81                         $this->errors->add( 'empty_hostname', __( 'SSH2 hostname is required' ) );
     92                        if ( ! empty ( $credentials['hostname'] ) ) {
     93                                // assign value found in the DB and/or wp-config.php
     94                                $this->options['hostname'] = $credentials['hostname'];
     95
     96                        } else {
     97                                // create/raise an error
     98                                $this->errors->add( 'empty_hostname', __( 'SSH2 credentials (hostname) is required!' ) );
     99                                $this->options['hostname'] = '';
     100                        }
    82101                } else {
    83102                        $this->options['hostname'] = $opt['hostname'];
    84103                }
    85104
    86                 // Check if the options provided are OK.
     105                // Check if username is OK
     106                // Needs to be done before the keys!
     107                if ( empty( $opt['username'] ) ) {
     108                        if ( ! empty ( $credentials['username'] ) ) {
     109                                // assign value found in the DB and/or wp-config.php
     110                                $this->options['username'] = $credentials['username'];
     111                        } else {
     112                                // create/raise an error
     113                                $this->errors->add( 'empty_username', __( 'SSH2 credentials (username) is required!' ) );
     114                                $this->options['username'] = '';
     115                        }
     116                } else {
     117                        $this->options['username'] = $opt['username'];
     118                }
     119
     120                // Check if the key options provided are OK.
    87121                if ( ! empty( $opt['public_key'] ) && ! empty( $opt['private_key'] ) ) {
    88122                        $this->options['public_key']  = $opt['public_key'];
    89123                        $this->options['private_key'] = $opt['private_key'];
    90 
    91124                        $this->options['hostkey'] = array( 'hostkey' => 'ssh-rsa,ssh-ed25519' );
    92 
    93125                        $this->keys = true;
    94                 } elseif ( empty( $opt['username'] ) ) {
    95                         $this->errors->add( 'empty_username', __( 'SSH2 username is required' ) );
    96                 }
    97 
    98                 if ( ! empty( $opt['username'] ) ) {
    99                         $this->options['username'] = $opt['username'];
    100                 }
     126                } else {
     127                        if ( ! empty( $credentials['public_key'] ) && ! empty ( $credentials['private_key'] ) ) {
     128                                $this->options['public_key']  = $credentials['public_key'];
     129                                $this->options['private_key'] = $credentials['private_key'];
     130                                $this->options['hostkey'] = array( 'hostkey' => 'ssh-rsa,ssh-ed25519' );
     131                                $this->keys = true;
     132                        } elseif ( empty( $this->options['username'] ) ) {
     133                                $this->errors->add( 'empty_username', __( 'SSH2 credentials (username) is required when using SSH keys!' ) );
     134                        }
     135                }
    101136
     137                // Check for password OK, only required when not using keys
    102138                if ( empty( $opt['password'] ) ) {
    103139                        // Password can be blank if we are using keys.
    104140                        if ( ! $this->keys ) {
    105                                 $this->errors->add( 'empty_password', __( 'SSH2 password is required' ) );
     141                                if ( ! empty ( $credentials['passwrod'] ) ) {
     142                                        // assign value found in the DB and/or wp-config.php
     143                                        $this->options['password'] = $credentials['password'];
     144                                } else {
     145                                        // create/raise an error
     146                                        $this->errors->add( 'empty_password', __( 'SSH2 credentials (password) is required when not using SSH keys!' ) );
     147                                        $this->options['password'] = '';
     148                                }
    106149                        }
    107150                } else {
    108151                        $this->options['password'] = $opt['password'];
    109152                }
     153
    110154        }
    111155
    112156        /**