]> granicus.if.org Git - php/commitdiff
Implement FR #48587 (MySQL PDO driver doesn't support SSL connections)
authorRob Richards <rrichards@php.net>
Fri, 15 Apr 2011 14:24:40 +0000 (14:24 +0000)
committerRob Richards <rrichards@php.net>
Fri, 15 Apr 2011 14:24:40 +0000 (14:24 +0000)
ext/pdo_mysql/mysql_driver.c
ext/pdo_mysql/pdo_mysql.c
ext/pdo_mysql/php_pdo_mysql_int.h

index d9718c6f83c601b62c04646a9c560d2842748e77..60d9eba1dc9c0cbbc426156526230d407b87ac6c 100755 (executable)
@@ -597,6 +597,7 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
                char *default_file = NULL, *default_group = NULL;
                long compress = 0;
 #endif
+               char *ssl_key = NULL, *ssl_cert = NULL, *ssl_ca = NULL, *ssl_capath = NULL, *ssl_cipher = NULL;
                H->buffered = pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_USE_BUFFERED_QUERY, 1 TSRMLS_CC);
 
                H->emulate_prepare = pdo_attr_lval(driver_options,
@@ -681,6 +682,30 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
                        }
                }
 #endif
+               ssl_key = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SSL_KEY, NULL TSRMLS_CC);
+               ssl_cert = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SSL_CERT, NULL TSRMLS_CC);
+               ssl_ca = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SSL_CA, NULL TSRMLS_CC);
+               ssl_capath = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SSL_CAPATH, NULL TSRMLS_CC);
+               ssl_cipher = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_SSL_CIPHER, NULL TSRMLS_CC);
+               
+               if (ssl_key || ssl_cert || ssl_ca || ssl_capath || ssl_cipher) {
+                       mysql_ssl_set(H->server, ssl_key, ssl_cert, ssl_ca, ssl_capath, ssl_cipher);
+                       if (ssl_key) {
+                               efree(ssl_key);
+                       }
+                       if (ssl_cert) {
+                               efree(ssl_cert);
+                       }
+                       if (ssl_ca) {
+                               efree(ssl_ca);
+                       }
+                       if (ssl_capath) {
+                               efree(ssl_capath);
+                       }
+                       if (ssl_cipher) {
+                               efree(ssl_cipher);
+                       }
+               }
        }
 
 #ifdef PDO_MYSQL_HAS_CHARSET
index d9301ede6546727b4a3b769bb15d1d4683fb4db4..831676fcd207661a78de480cdaec119e9b6135b1 100755 (executable)
@@ -79,7 +79,11 @@ static PHP_MINIT_FUNCTION(pdo_mysql)
        REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_DIRECT_QUERY", (long)PDO_MYSQL_ATTR_DIRECT_QUERY);
        REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_FOUND_ROWS", (long)PDO_MYSQL_ATTR_FOUND_ROWS);
        REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_IGNORE_SPACE", (long)PDO_MYSQL_ATTR_IGNORE_SPACE);
-
+       REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_KEY", (long)PDO_MYSQL_ATTR_SSL_KEY);
+       REGISTER_PDO_CLASS_CONST_LONG("MYSQL_ATTR_SSL_CERT", (long)PDO_MYSQL_ATTR_SSL_CERT);
+       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);
        return php_pdo_register_driver(&pdo_mysql_driver);
 }
 /* }}} */
index 839b3ae137cef86156ee8e017bb01aa09fa25eb3..9858514a983c37455a25e8beef80100eb043906f 100755 (executable)
@@ -166,7 +166,12 @@ enum {
 #endif
        PDO_MYSQL_ATTR_DIRECT_QUERY,
        PDO_MYSQL_ATTR_FOUND_ROWS,
-       PDO_MYSQL_ATTR_IGNORE_SPACE
+       PDO_MYSQL_ATTR_IGNORE_SPACE,
+       PDO_MYSQL_ATTR_SSL_KEY,
+       PDO_MYSQL_ATTR_SSL_CERT,
+       PDO_MYSQL_ATTR_SSL_CA,
+       PDO_MYSQL_ATTR_SSL_CAPATH,
+       PDO_MYSQL_ATTR_SSL_CIPHER
 };
 
 #endif