Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
forked fromphp/php-src

Commitf787e21

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 parentsb3a934b +36e88d7 commitf787e21

File tree

2 files changed

+149
-0
lines changed

2 files changed

+149
-0
lines changed

‎ext/mysqli/tests/mysqli_constants.phpt‎

Lines changed: 4 additions & 0 deletions
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

Lines changed: 145 additions & 0 deletions
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)

[8]ページ先頭

©2009-2025 Movatter.jp