WordPress.org

Make WordPress Core

Ticket #21663: ssl.patch

File ssl.patch, 4.0 KB (added by hypertextranch, 4 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;