1--TEST-- 2mysqli_change_user(), MySQL < 5.6 3--SKIPIF-- 4<?php 5require_once('skipif.inc'); 6require_once('skipifemb.inc'); 7require_once('skipifconnectfailure.inc'); 8 9if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) 10 die(sprintf("SKIP Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", 11 $host, $user, $db, $port, $socket)); 12 13if (mysqli_get_server_version($link) >= 50600) 14 die("SKIP For MySQL < 5.6.0"); 15?> 16--FILE-- 17<?php 18 require_once("connect.inc"); 19 20 $tmp = NULL; 21 $link = NULL; 22 23 if (!is_null($tmp = @mysqli_change_user())) 24 printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); 25 26 if (!is_null($tmp = @mysqli_change_user($link))) 27 printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); 28 29 if (!is_null($tmp = @mysqli_change_user($link, $link))) 30 printf("[003] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); 31 32 if (!is_null($tmp = @mysqli_change_user($link, $link, $link))) 33 printf("[004] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); 34 35 if (!is_null($tmp = @mysqli_change_user($link, $link, $link, $link, $link))) 36 printf("[005] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); 37 38 if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) 39 printf("[006] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", 40 $host, $user, $db, $port, $socket); 41 42 if (false !== ($tmp = mysqli_change_user($link, $user . '_unknown_really', $passwd . 'non_empty', $db))) 43 printf("[007] Expecting false, got %s/%s\n", gettype($tmp), $tmp); 44 45 if (false !== ($tmp = mysqli_change_user($link, $user, $passwd . '_unknown_really', $db))) 46 printf("[008] Expecting false, got %s/%s\n", gettype($tmp), $tmp); 47 48 if (false !== ($tmp = mysqli_change_user($link, $user, $passwd, $db . '_unknown_really'))) 49 printf("[009] Expecting false, got %s/%s\n", gettype($tmp), $tmp); 50 51 // Reconnect because Percona and MariaDB block any commands after 3 failed 52 // change_user commands 53 mysqli_close($link); 54 55 if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { 56 printf("[020] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", 57 $host, $user, $db, $port, $socket); 58 } 59 if (!mysqli_query($link, 'SET @mysqli_change_user_test_var=1')) 60 printf("[010] Failed to set test variable: [%d] %s\n", mysqli_errno($link), mysqli_error($link)); 61 62 if (!$res = mysqli_query($link, 'SELECT @mysqli_change_user_test_var AS test_var')) 63 printf("[011] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); 64 $tmp = mysqli_fetch_assoc($res); 65 mysqli_free_result($res); 66 if (1 != $tmp['test_var']) 67 printf("[012] Cannot set test variable\n"); 68 69 if (true !== ($tmp = mysqli_change_user($link, $user, $passwd, $db))) 70 printf("[013] Expecting true, got %s/%s\n", gettype($tmp), $tmp); 71 72 if (!$res = mysqli_query($link, 'SELECT database() AS dbname, user() AS user')) 73 printf("[014] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); 74 $tmp = mysqli_fetch_assoc($res); 75 mysqli_free_result($res); 76 77 if (substr($tmp['user'], 0, strlen($user)) !== $user) 78 printf("[015] Expecting user %s, got user() %s\n", $user, $tmp['user']); 79 if ($tmp['dbname'] != $db) 80 printf("[016] Expecting database %s, got database() %s\n", $db, $tmp['dbname']); 81 82 if (!$res = mysqli_query($link, 'SELECT @mysqli_change_user_test_var AS test_var')) 83 printf("[017] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); 84 $tmp = mysqli_fetch_assoc($res); 85 mysqli_free_result($res); 86 if (NULL !== $tmp['test_var']) 87 printf("[019] Test variable is still set!\n"); 88 89 mysqli_close($link); 90 91 if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { 92 printf("[020] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", 93 $host, $user, $db, $port, $socket); 94 } 95 96 if (false !== ($tmp = mysqli_change_user($link, str_repeat('user', 16384), str_repeat('pass', 16384), str_repeat('dbase', 16384)))) 97 printf("[021] Expecting false, got %s/%s\n", gettype($tmp), $tmp); 98 99 mysqli_close($link); 100 101 if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { 102 printf("[022] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", 103 $host, $user, $db, $port, $socket); 104 } 105 106 /* silent protocol change if no db which requires workaround in mysqlnd/libmysql 107 (empty db = no db send with COM_CHANGE_USER) */ 108 if (true !== ($tmp = mysqli_change_user($link, $user, $passwd, ""))) 109 printf("[023] Expecting true, got %s/%s\n", gettype($tmp), $tmp); 110 111 if (!$res = mysqli_query($link, 'SELECT database() AS dbname, user() AS user')) 112 printf("[024] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); 113 $tmp = mysqli_fetch_assoc($res); 114 mysqli_free_result($res); 115 116 if ($tmp['dbname'] != "") 117 printf("[025] Expecting database '', got database() '%s'\n", $tmp['dbname']); 118 119 mysqli_close($link); 120 121 if (NULL !== ($tmp = @mysqli_change_user($link, $user, $passwd, $db))) 122 printf("[026] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); 123 124 print "done!"; 125?> 126--EXPECTF-- 127done! 128