]> granicus.if.org Git - php/commitdiff
Allow setting SHA256 auth public key as option
authorJohannes Schlüter <johannes@php.net>
Wed, 31 Oct 2012 15:54:11 +0000 (16:54 +0100)
committerJohannes Schlüter <johannes@php.net>
Wed, 31 Oct 2012 15:54:11 +0000 (16:54 +0100)
ext/pdo_mysql/mysql_driver.c
ext/pdo_mysql/pdo_mysql.c
ext/pdo_mysql/php_pdo_mysql_int.h

index aa7109b51651c2aa0aec7948df18f58c8e4c07d6..527cb1c3b8d49f0888c07fff2708f6408ee4b232 100644 (file)
@@ -138,7 +138,7 @@ static int pdo_mysql_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *in
 /* }}} */
 
 /* {{{ mysql_handle_closer */
-static int mysql_handle_closer(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */
+static int mysql_handle_closer(pdo_dbh_t *dbh TSRMLS_DC)
 {
        pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
        
@@ -709,6 +709,20 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
                                efree(ssl_cipher);
                        }
                }
+
+#if MYSQL_VERSION_ID > 50605 || defined(MYSQLI_USE_MYSQLND)
+               {
+                       char *public_key = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SERVER_PUBLIC_KEY, NULL TSRMLS_CC);
+                       if (public_key) {
+                               if (mysql_options(H->server, MYSQL_SERVER_PUBLIC_KEY, public_key)) {
+                                       pdo_mysql_error(dbh);
+                                       efree(public_key);
+                                       goto cleanup;
+                               }
+                               efree(public_key);
+                       }
+               }
+#endif
        }
 
 #ifdef PDO_MYSQL_HAS_CHARSET
index ea69c3c11b1d2197d4afbac3ed823071001cc934..b5a8058da4c52126720e72d5c1505b366bb6fc76 100644 (file)
@@ -118,6 +118,10 @@ static PHP_MINIT_FUNCTION(pdo_mysql)
        REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CA", (long)PDO_MYSQL_ATTR_SSL_CA);
        REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CAPATH", (long)PDO_MYSQL_ATTR_SSL_CAPATH);
        REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CIPHER", (long)PDO_MYSQL_ATTR_SSL_CIPHER);
+#if MYSQL_VERSION_ID > 50605 || defined(MYSQLI_USE_MYSQLND)
+        REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SERVER_PUBLIC_KEY", (long)PDO_MYSQL_ATTR_SERVER_PUBLIC_KEY);
+#endif
+
 
 #ifdef PDO_USE_MYSQLND
        mysqlnd_reverse_api_register_api(&pdo_mysql_reverse_api TSRMLS_CC);
index 0b6d7752d33d1a74623c0bde06a745fbc472a58f..32cf0391525a37886c0ec88a4099a24342090ae2 100644 (file)
@@ -170,7 +170,10 @@ enum {
        PDO_MYSQL_ATTR_SSL_CERT,
        PDO_MYSQL_ATTR_SSL_CA,
        PDO_MYSQL_ATTR_SSL_CAPATH,
-       PDO_MYSQL_ATTR_SSL_CIPHER
+       PDO_MYSQL_ATTR_SSL_CIPHER,
+#if MYSQL_VERSION_ID > 50605 || defined(MYSQLI_USE_MYSQLND)
+       PDO_MYSQL_ATTR_SERVER_PUBLIC_KEY
+#endif
 };
 
 #endif