Skip to content

Commit f787e21

Browse files
author
ULF WENDEL
committed
Merge branch 'PHP-5.4' into PHP-5.5
* PHP-5.4: MySQL 5.6 EXPIRE PASSWORD flag tests
2 parents b3a934b + 36e88d7 commit f787e21

File tree

2 files changed

+149
-0
lines changed

2 files changed

+149
-0
lines changed

ext/mysqli/tests/mysqli_constants.phpt

+4
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,10 @@ require_once('skipifconnectfailure.inc');
182182
}
183183
}
184184

185+
if (($IS_MYSQLND && version_compare(PHP_VERSION, ' 5.4.12-dev', '>=')) || (!$IS_MYSQLND && ($version > 50610))) {
186+
/* could be that MySQL/libmysql 5.6.9 had the flag already but it was no stable release */
187+
$expected_constants["MYSQLI_OPT_CAN_HANDLE_EXPIRED_PASSWORDS"] = true;
188+
}
185189

186190
$unexpected_constants = array();
187191

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
--TEST--
2+
MySQL 5.6 EXPIRE PASSWORD protocol change
3+
--SKIPIF--
4+
<?php
5+
require_once('skipif.inc');
6+
require_once('skipifemb.inc');
7+
require_once('connect.inc');
8+
9+
if ($IS_MYSQLND && !version_compare(PHP_VERSION, '5.4.12-dev', ">=")) {
10+
die("SKIP Available in mysqlnd as of PHP 5.4.12-dev");
11+
}
12+
13+
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
14+
die(sprintf("SKIP Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
15+
$host, $user, $db, $port, $socket));
16+
}
17+
18+
if ($link->server_version < 50610)
19+
die(sprintf("SKIP Needs MySQL 5.6.10 or newer, found MySQL %s\n", $link->server_info));
20+
21+
if (!$IS_MYSQLND && (mysqli_get_client_version() < 50610)) {
22+
die(sprintf("SKIP Needs libmysql 5.6.10 or newer, found %s\n", mysqli_get_client_version()));
23+
}
24+
25+
mysqli_query($link, 'DROP USER expiretest');
26+
mysqli_query($link, 'DROP USER expiretest@localhost');
27+
28+
if (!mysqli_query($link, 'CREATE USER expiretest@"%"') ||
29+
!mysqli_query($link, 'CREATE USER expiretest@"localhost"')) {
30+
printf("skip Cannot create second DB user [%d] %s", mysqli_errno($link), mysqli_error($link));
31+
mysqli_close($link);
32+
die("skip CREATE USER failed");
33+
}
34+
35+
if (!mysqli_query($link, 'ALTER USER expiretest@"%" PASSWORD EXPIRE') ||
36+
!mysqli_query($link, 'ALTER USER expiretest@"localhost" PASSWORD EXPIRE')) {
37+
printf("skip Cannot modify second DB user [%d] %s", mysqli_errno($link), mysqli_error($link));
38+
mysqli_close($link);
39+
die("skip ALTER USER failed");
40+
}
41+
42+
if (!$link->query("DROP TABLE IF EXISTS test") ||
43+
!$link->query("CREATE TABLE test (id INT)") || !$link->query("INSERT INTO test(id) VALUES (1)"))
44+
die(sprintf("SKIP [%d] %s\n", $link->errno, $link->error));
45+
46+
47+
48+
if (!mysqli_query($link, sprintf("GRANT SELECT ON TABLE %s.test TO expiretest@'%%'", $db)) ||
49+
!mysqli_query($link, sprintf("GRANT SELECT ON TABLE %s.test TO expiretest@'localhost'", $db))) {
50+
printf("skip Cannot grant SELECT to user [%d] %s", mysqli_errno($link), mysqli_error($link));
51+
mysqli_close($link);
52+
die("skip GRANT failed");
53+
}
54+
?>
55+
--FILE--
56+
<?php
57+
require_once('connect.inc');
58+
require_once('table.inc');
59+
60+
/* default */
61+
if (!$link = my_mysqli_connect($host, 'expiretest', "", $db, $port, $socket)) {
62+
printf("[001] Cannot connect [%d] %s\n",
63+
mysqli_connect_errno(), mysqli_connect_error());
64+
} else {
65+
$link->query("SELECT id FROM test WHERE id = 1");
66+
printf("[002] Connect should fail, [%d] %s\n", $link->errno, $link->error);
67+
}
68+
69+
/* explicitly requesting default */
70+
$link = mysqli_init();
71+
$link->options(MYSQLI_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, 0);
72+
if (!my_mysqli_real_connect($link, $host, 'expiretest', "", $db, $port, $socket)) {
73+
printf("[003] Cannot connect [%d] %s\n",
74+
mysqli_connect_errno(), mysqli_connect_error());
75+
} else {
76+
$link->query("SELECT id FROM test WHERE id = 1");
77+
printf("[004] Connect should fail, [%d] %s\n", $link->errno, $link->error);
78+
}
79+
80+
/* allow connect */
81+
$link = mysqli_init();
82+
$link->options(MYSQLI_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, 1);
83+
if (!my_mysqli_real_connect($link, $host, 'expiretest', "", $db, $port, $socket)) {
84+
printf("[005] Cannot connect [%d] %s\n",
85+
mysqli_connect_errno(), mysqli_connect_error());
86+
} else {
87+
$link->query("SELECT id FROM test WHERE id = 1");
88+
printf("[006] Connect allowed, query fail, [%d] %s\n", $link->errno, $link->error);
89+
$link->close();
90+
}
91+
92+
/* allow connect, fix pw */
93+
$link = mysqli_init();
94+
$link->options(MYSQLI_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, 1);
95+
if (!my_mysqli_real_connect($link, $host, 'expiretest', "", $db, $port, $socket)) {
96+
printf("[007] Cannot connect [%d] %s\n",
97+
mysqli_connect_errno(), mysqli_connect_error());
98+
} else {
99+
$link->query("SET PASSWORD=PASSWORD('expiretest')");
100+
printf("[008] Connect allowed, pw set, [%d] %s\n", $link->errno, $link->error);
101+
if ($res = $link->query("SELECT id FROM test WHERE id = 1"))
102+
var_dump($res->fetch_assoc());
103+
$link->close();
104+
}
105+
106+
107+
/* check login */
108+
if (!$link = my_mysqli_connect($host, 'expiretest', "expiretest", $db, $port, $socket)) {
109+
printf("[001] Cannot connect [%d] %s\n",
110+
mysqli_connect_errno(), mysqli_connect_error());
111+
} else {
112+
$link->query("SELECT id FROM test WHERE id = 1");
113+
if ($res = $link->query("SELECT id FROM test WHERE id = 1"))
114+
var_dump($res->fetch_assoc());
115+
$link->close();
116+
}
117+
118+
119+
120+
print "done!";
121+
?>
122+
--CLEAN--
123+
<?php
124+
require_once("clean_table.inc");
125+
mysqli_query($link, 'DROP USER expiretest');
126+
mysqli_query($link, 'DROP USER expiretest@localhost');
127+
?>
128+
--EXPECTF--
129+
130+
Warning: mysqli_real_connect(): (HY000/1820): %s in %s on line %d
131+
[001] Cannot connect [1820] %s
132+
133+
Warning: mysqli_real_connect(): (HY000/1820): %s in %s on line %d
134+
[003] Cannot connect [1820] %s
135+
[006] Connect allowed, query fail, [1820] %s
136+
[008] Connect allowed, pw set, [0%A
137+
array(1) {
138+
["id"]=>
139+
string(1) "1"
140+
}
141+
array(1) {
142+
["id"]=>
143+
string(1) "1"
144+
}
145+
done!

0 commit comments

Comments
 (0)