mysqli_expire_password.phpt 4.7 KB

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