WordPress.org

Make WordPress Core

Ticket #21663: ssl.patch

File ssl.patch, 4.0 KB (added by hypertextranch, 5 years ago)

Path for wp-db-driver to add SSL support to PDO and mysqli

  • inc/interface-wp-db-driver.php

     
    44        public function escape( $string );
    55        public function get_error_message();
    66        public function flush();
    7         public function connect( $host, $user, $pass, $port = 3306 );
     7        public function connect( $host, $user, $pass, $port = 3306, $options = array() );
    88        public function select( $name );
    99        public function query( $query );
    1010        public function load_col_info();
  • db.php

     
    198198
    199199                $this->is_mysql = true;
    200200
    201                 $new_link = defined( 'MYSQL_NEW_LINK' ) ? MYSQL_NEW_LINK : true;
    202                 $client_flags = defined( 'MYSQL_CLIENT_FLAGS' ) ? MYSQL_CLIENT_FLAGS : 0;
     201                $options = array();
     202                $options['key'] = defined( 'DB_SSL_KEY' ) ? DB_SSL_KEY : null;
     203                $options['cert'] = defined( 'DB_SSL_CERT' ) ? DB_SSL_CERT : null;
     204                $options['ca'] = defined( 'DB_SSL_CA' ) ? DB_SSL_CA : null;
     205                $options['ca_path'] = defined( 'DB_SSL_CA_PATH' ) ? DB_SSL_CA_PATH : null;
     206                $options['cipher'] = defined( 'DB_SSL_CIPHER' ) ? DB_SSL_CIPHER : null;
    203207
    204208                $host = $this->dbhost;
    205209                $port = 3306;
     
    207211                        list( $host, $port ) = explode( ':', $this->dbhost );
    208212                }
    209213
    210                 if ( !$this->dbh->connect( $host, $this->dbuser, $this->dbpassword, $port ) ) {
     214                if ( !$this->dbh->connect( $host, $this->dbuser, $this->dbpassword, $port, $options ) ) {
    211215                        wp_load_translations_early();
    212216                        $this->bail( sprintf( __( "
    213217<h1>Error establishing a database connection</h1>
  • drivers/mysqli.php

     
    6262         * Connect to database
    6363         * @return bool
    6464         */
    65         public function connect( $host, $user, $pass, $port = 3306 ) {
     65        public function connect( $host, $user, $pass, $port = 3306, $options = array() ) {
    6666                $this->dbh = new mysqli( $host, $user, $pass, '', $port );
     67
     68                if ( !empty( $options['key'] ) && !empty( $options['cert'] ) && !empty( $options['ca'] ) ) {
     69                        $this->dbh->ssl_set(
     70                                $options['key'],
     71                                $options['cert'],
     72                                $options['ca'],
     73                                $options['ca_path'],
     74                                $options['cipher']
     75                        );
     76                }
     77
    6778                return ( !mysqli_connect_error() );
    6879        }
    6980
  • drivers/mysql.php

     
    6262         * Connect to database
    6363         * @return bool
    6464         */
    65         public function connect( $host, $user, $pass, $port = 3306 ) {
     65        public function connect( $host, $user, $pass, $port = 3306, $options = array() ) {
    6666
    6767                $new_link = defined( 'MYSQL_NEW_LINK' ) ? MYSQL_NEW_LINK : true;
    6868                $client_flags = defined( 'MYSQL_CLIENT_FLAGS' ) ? MYSQL_CLIENT_FLAGS : 0;
  • drivers/pdo_mysql.php

     
    7575         * Connect to database
    7676         * @return bool
    7777         */
    78         public function connect( $host, $user, $pass, $port = 3306 ) {
     78        public function connect( $host, $user, $pass, $port = 3306, $options = array() ) {
    7979                $dsn = sprintf( 'mysql:host=%1$s;port=%2$d', $host, $port );
    8080                try {
    81                         $this->dbh = new PDO( $dsn, $user, $pass );
     81                        $pdo_options = array();
     82                        $pdo_options[PDO::MYSQL_ATTR_SSL_KEY] = $options['key'];
     83                        $pdo_options[PDO::MYSQL_ATTR_SSL_CERT] = $options['cert'];
     84                        $pdo_options[PDO::MYSQL_ATTR_SSL_CA] = $options['ca'];
     85                        $pdo_options[PDO::MYSQL_ATTR_SSL_CAPATH] = $options['ca_path'];
     86                        $pdo_options[PDO::MYSQL_ATTR_SSL_CIPHER] = $options['cipher'];
     87                        $pdo_options = array_filter( $pdo_options );
     88
     89                        $this->dbh = new PDO( $dsn, $user, $pass, $pdo_options );
    8290                        $this->dbh->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    8391                } catch ( Exception $e ) {
    8492                        return false;