summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorRob Richards <rrichards@php.net>2011-04-15 14:24:40 +0000
committerRob Richards <rrichards@php.net>2011-04-15 14:24:40 +0000
commit1b6dd18082ee055933e1ed040db3dbfcf34d60da (patch)
tree183e0d39ae8ea5f905814618c7b1d7892e4f3f22 /ext
parent92e5b10c41668b1ceb55030a76cb74d41dac82d3 (diff)
downloadphp-git-1b6dd18082ee055933e1ed040db3dbfcf34d60da.tar.gz
Implement FR #48587 (MySQL PDO driver doesn't support SSL connections)
Diffstat (limited to 'ext')
-rwxr-xr-xext/pdo_mysql/mysql_driver.c29
-rwxr-xr-xext/pdo_mysql/pdo_mysql.c6
-rwxr-xr-xext/pdo_mysql/php_pdo_mysql_int.h7
3 files changed, 40 insertions, 2 deletions
diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c
index e32d9224f0..927f24bfbd 100755
--- a/ext/pdo_mysql/mysql_driver.c
+++ b/ext/pdo_mysql/mysql_driver.c
@@ -625,6 +625,9 @@ 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
+#if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSLQND
+ char *ssl_key = NULL, *ssl_cert = NULL, *ssl_ca = NULL, *ssl_capath = NULL, *ssl_cipher = NULL;
+#endif
H->buffered = pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_USE_BUFFERED_QUERY, 1 TSRMLS_CC);
H->emulate_prepare = pdo_attr_lval(driver_options,
@@ -709,6 +712,32 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
}
}
#endif
+#if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSLQND
+ 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);
+ }
+ }
+#endif
}
#ifdef PDO_MYSQL_HAS_CHARSET
diff --git a/ext/pdo_mysql/pdo_mysql.c b/ext/pdo_mysql/pdo_mysql.c
index d9301ede65..831676fcd2 100755
--- a/ext/pdo_mysql/pdo_mysql.c
+++ b/ext/pdo_mysql/pdo_mysql.c
@@ -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);
}
/* }}} */
diff --git a/ext/pdo_mysql/php_pdo_mysql_int.h b/ext/pdo_mysql/php_pdo_mysql_int.h
index 94ab41fddc..e1da3d2ed5 100755
--- a/ext/pdo_mysql/php_pdo_mysql_int.h
+++ b/ext/pdo_mysql/php_pdo_mysql_int.h
@@ -168,7 +168,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