diff options
author | Andrey Hristov <andrey@php.net> | 2011-08-05 13:39:30 +0000 |
---|---|---|
committer | Andrey Hristov <andrey@php.net> | 2011-08-05 13:39:30 +0000 |
commit | 8a929d8942de7d2661d028bdd4b4538926cbf831 (patch) | |
tree | d4de242bfe3351d455c07e4b7bea503edb3629fc | |
parent | 32319a142f671015d567358f898b3a841d21cd3d (diff) | |
download | php-git-8a929d8942de7d2661d028bdd4b4538926cbf831.tar.gz |
Fix for bug #55283 SSL options set by mysqli_ssl_set ignored for MySQLi persistent connections
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | ext/mysqli/mysqli_nonapi.c | 10 | ||||
-rw-r--r-- | ext/mysqli/tests/bug55283.phpt | 55 |
3 files changed, 65 insertions, 5 deletions
@@ -1,7 +1,10 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 5.3.7 - +- mysqli + . Fixed bug #55238 (SSL options set by mysqli_ssl_set ignored for MySQLi + persistent connections). (Andrey) + 28 Jul 2011, PHP 5.3.7 RC4 - Improved core functions: . Updated crypt_blowfish to 1.2. ((CVE-2011-2483) (Solar Designer) diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 6de657c279..4c281c2761 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -141,10 +141,12 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne hostname = MyG(default_host); } - if (mysql->mysql && mysqli_resource && (mysqli_resource->status > MYSQLI_STATUS_INITIALIZED || (strlen(SAFE_STR(hostname)) > 2 && !strncasecmp(hostname, "p:", 2)))) { - /* already connected, we should close the connection */ - php_mysqli_close(mysql, MYSQLI_CLOSE_IMPLICIT, mysqli_resource->status TSRMLS_CC); - } + if (mysql->mysql && mysqli_resource && + (mysqli_resource->status > MYSQLI_STATUS_INITIALIZED)) + { + /* already connected, we should close the connection */ + php_mysqli_close(mysql, MYSQLI_CLOSE_IMPLICIT, mysqli_resource->status TSRMLS_CC); + } if (strlen(SAFE_STR(hostname)) > 2 && !strncasecmp(hostname, "p:", 2)) { hostname += 2; diff --git a/ext/mysqli/tests/bug55283.phpt b/ext/mysqli/tests/bug55283.phpt new file mode 100644 index 0000000000..0611c773cf --- /dev/null +++ b/ext/mysqli/tests/bug55283.phpt @@ -0,0 +1,55 @@ +--TEST-- +Bug #55283 (SSL options set by mysqli_ssl_set ignored for MySQLi persistent connections) +--SKIPIF-- +<?php +require_once('skipif.inc'); +require_once('skipifconnectfailure.inc'); +$link = mysqli_init(); +mysqli_ssl_set($link, null, null, null, null, "RC4-MD5"); +if (my_mysqli_real_connect($link, $host, $user, $passwd, $db, $port, null, $flags)) { + $res = $link->query("SHOW STATUS LIKE 'Ssl_cipher'"); + $row = $res->fetch_row(); + if ($row[1] === "") { + die('skip Server started without SSL support'); + } +} +?> +--FILE-- +<?php + include "connect.inc"; + $db1 = new mysqli(); + + + $flags = MYSQLI_CLIENT_SSL; + + $link = mysqli_init(); + mysqli_ssl_set($link, null, null, null, null, "RC4-MD5"); + if (my_mysqli_real_connect($link, 'p:' . $host, $user, $passwd, $db, $port, null, $flags)) { + $r = $link->query("SHOW STATUS LIKE 'Ssl_cipher'"); + var_dump($r->fetch_row()); + } + + /* non-persistent connection */ + $link2 = mysqli_init(); + mysqli_ssl_set($link2, null, null, null, null, "RC4-MD5"); + if (my_mysqli_real_connect($link2, $host, $user, $passwd, $db, $port, null, $flags)) { + $r2 = $link2->query("SHOW STATUS LIKE 'Ssl_cipher'"); + var_dump($r2->fetch_row()); + } + + echo "done\n"; +?> +--EXPECTF-- +array(2) { + [0]=> + string(10) "Ssl_cipher" + [1]=> + string(7) "RC4-MD5" +} +array(2) { + [0]=> + string(10) "Ssl_cipher" + [1]=> + string(7) "RC4-MD5" +} +done
\ No newline at end of file |