--source include/have_validate_password_component.inc --source include/have_debug.inc # Warning is generated when default file (NULL) is used CALL mtr.add_suppression("Dictionary file not specified"); # Warning is generated when dictionary file is not loaded CALL mtr.add_suppression("Dictionary file open failed"); # Warning is generated when dictionary file is not provided with # PASSWORD_POLICY_STRONG CALL mtr.add_suppression("Since the validate_password_policy is mentioned "); # Warning is generated when dictionary file size exceeded # MAX_DICTIONARY_FILE_LENGTH CALL mtr.add_suppression("Dictionary file size exceeded"); # Warning is generated when validate_password.length is chaged # as a result of changing value of system variables listed below: # VALIDATE_PASSWORD.NUMBER_COUNT # VALIDATE_PASSWORD.MIXED_CASE_COUNT # VALIDATE_PASSWORD.SPECIAL_CHAR_COUNT CALL mtr.add_suppression("Effective value of validate_password.length is changed."); let $MYSQL_ERRMSG_BASEDIR=`select @@lc_messages_dir`; # component is not installed so even 'pass' (very weak) is accepted as # a password CREATE USER 'base_user'@'localhost' IDENTIFIED BY 'pass'; CREATE USER 'user1'@'localhost' IDENTIFIED BY 'pass'; GRANT ALL ON mysql.* TO 'user1'@'localhost'; INSTALL COMPONENT "file://component_validate_password"; # test for all the three password policy # policy: LOW, MEDIUM, STRONG --echo # password policy LOW (which only check for password length) --echo # default case: password length should be minimum 8 SET @@global.validate_password.policy=LOW; --error ER_NOT_VALID_PASSWORD CREATE USER 'user'@'localhost' IDENTIFIED BY ''; --error ER_NOT_VALID_PASSWORD ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'aweg'; ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'password3'; ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'password'; --error ER_NOT_VALID_PASSWORD ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'passwor'; SET @@global.validate_password.length= 12; --error ER_NOT_VALID_PASSWORD ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'afrgtyhlp98'; ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'iuyt567nbvfA'; SET @@global.validate_password.mixed_case_count= 0; SET @@global.validate_password.number_count= 0; SET @@global.validate_password.special_char_count= 0; SET @@global.validate_password.length= 0; ALTER USER 'base_user'@'localhost' IDENTIFIED BY ''; ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'p'; ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'password'; SET @@global.validate_password.length= -2; -- Error ER_WRONG_TYPE_FOR_VAR SET @@global.validate_password.length= 3.5; # test to check maximum value of password_length SET @@global.validate_password.length= 2147483647; SET @@global.validate_password.length= 2147483648; PREPARE stmt1 FROM 'UPDATE mysql.user SET authentication_string=(?) where USER = ?'; SET @a = REPEAT('a',2147483647); SET @b = 'user@localhost'; EXECUTE stmt1 USING @a,@b; DEALLOCATE PREPARE stmt1; SET @@global.validate_password.length= 4294967295; SET @@global.validate_password.length= 8; PREPARE stmt1 FROM 'UPDATE mysql.user SET authentication_string=(?) where USER = ?'; SET @a = REPEAT('a',1048576); SET @b = 'user@localhost'; EXECUTE stmt1 USING @a,@b; DEALLOCATE PREPARE stmt1; --echo # password policy MEDIUM (check for mixed_case, digits, special_chars) --echo # default case : atleast 1 mixed_case, 1 digit, 1 special_char SET @@global.validate_password.mixed_case_count= 1; SET @@global.validate_password.number_count= 1; SET @@global.validate_password.special_char_count= 1; SET @@global.validate_password.policy=MEDIUM; SET @@global.validate_password.number_count= 0; CREATE USER 'user'@'localhost' IDENTIFIED BY 'aedfoiASE$%'; --error ER_NOT_VALID_PASSWORD ALTER USER 'user'@'localhost' IDENTIFIED BY 'foiuiuytd78'; --error ER_NOT_VALID_PASSWORD ALTER USER 'user'@'localhost' IDENTIFIED BY 'abcdefgh'; --error ER_NOT_VALID_PASSWORD ALTER USER 'user'@'localhost' IDENTIFIED BY 'abcdeFGH'; ALTER USER 'user'@'localhost' IDENTIFIED BY 'pasretryFRGH&^98'; SET @@global.validate_password.mixed_case_count= 0; --error ER_NOT_VALID_PASSWORD CREATE USER 'user'@'localhost' IDENTIFIED BY 'aedSWEhjui'; ALTER USER 'user'@'localhost' IDENTIFIED BY 'gruyuHOIU&*('; ALTER USER 'user'@'localhost' IDENTIFIED BY 'passwor0987**&'; SET @@global.validate_password.special_char_count= 0; ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'piufgklol'; ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'password1A#'; SET @@global.validate_password.special_char_count= 1; SET @@global.validate_password.number_count= 1; SET @@global.validate_password.mixed_case_count= 1; --error ER_NOT_VALID_PASSWORD ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'erftuiik'; --error ER_NOT_VALID_PASSWORD ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'erftuIIK'; --error ER_NOT_VALID_PASSWORD ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'erftu123'; ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'password1A#'; SET @@global.validate_password.number_count= 2; --error ER_NOT_VALID_PASSWORD ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'password1A#'; ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'password12A#'; SET @@global.validate_password.number_count= 1; SET @@global.validate_password.mixed_case_count= 2; --error ER_NOT_VALID_PASSWORD ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'password1A#'; ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'password1AB#'; SET @@global.validate_password.mixed_case_count= 1; SET @@global.validate_password.special_char_count= 2; SET @@global.validate_password.special_char_count= 1; --echo # No dictionary file present, no dictionary check SET @@global.validate_password.policy=STRONG; ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'password1A#'; --replace_result $MYSQL_ERRMSG_BASEDIR MYSQL_ERRMSG_BASEDIR eval SET @@global.validate_password.dictionary_file="$MYSQL_ERRMSG_BASEDIR/dictionary.txt"; --echo # password policy strong --echo # default_file : dictionary.txt # file should contain 1 word per line # error if substring of password is a dictionary word SET @@global.validate_password.policy=STRONG; --error ER_NOT_VALID_PASSWORD CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; --error ER_NOT_VALID_PASSWORD ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'password1A#'; --error ER_NOT_VALID_PASSWORD ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'pass12345A#'; --error ER_NOT_VALID_PASSWORD ALTER USER 'base_user'@'localhost' IDENTIFIED BY 'pass0000A#'; --echo # test for password_validate_strength function --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT VALIDATE_PASSWORD_STRENGTH('password', 0); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT VALIDATE_PASSWORD_STRENGTH(); SELECT VALIDATE_PASSWORD_STRENGTH(''); SELECT VALIDATE_PASSWORD_STRENGTH('pass'); SELECT VALIDATE_PASSWORD_STRENGTH('password'); SELECT VALIDATE_PASSWORD_STRENGTH('password0000'); SELECT VALIDATE_PASSWORD_STRENGTH('password1A#'); SELECT VALIDATE_PASSWORD_STRENGTH('PA12wrd!#'); SELECT VALIDATE_PASSWORD_STRENGTH('PA00wrd!#'); # Test for multibyte character set that have greater size when converted # from uppercase to lowercase. SET NAMES 'ujis'; SELECT VALIDATE_PASSWORD_STRENGTH('PA12wrd!#'); # default policy is set, all other component variables set to default Test to # ensure that only the privileged user can access the component variables SET @@global.validate_password.policy=MEDIUM; # New connection connect (plug_con,localhost,user1,pass); --error ER_SPECIFIC_ACCESS_DENIED_ERROR SET @@global.validate_password.policy=LOW; --error ER_SPECIFIC_ACCESS_DENIED_ERROR SET @@global.validate_password.length= 4; --error ER_SPECIFIC_ACCESS_DENIED_ERROR SET @@global.validate_password.special_char_count= 0; --error ER_SPECIFIC_ACCESS_DENIED_ERROR SET @@global.validate_password.mixed_case_count= 0; # user has the update/create privilege but needs to satisfy password policy # to update/create new account --error ER_NOT_VALID_PASSWORD CREATE USER 'user2'@'localhost' IDENTIFIED BY 'password'; CREATE USER 'user2'@'localhost' IDENTIFIED BY 'PA00wrd!#'; --error ER_NOT_VALID_PASSWORD ALTER USER 'user2'@'localhost' IDENTIFIED BY 'password'; ALTER USER 'user2'@'localhost' IDENTIFIED BY 'PA00wrd!#'; DROP USER 'user2'@'localhost'; disconnect plug_con; --source include/wait_until_disconnected.inc connection default; DROP USER 'base_user'@'localhost'; DROP USER 'user1'@'localhost'; DROP USER 'user'@'localhost'; SET @@global.validate_password.length=default; SET @@global.validate_password.number_count=default; SET @@global.validate_password.mixed_case_count=default; SET @@global.validate_password.special_char_count=default; SET @@global.validate_password.policy=default; SET @@global.validate_password.dictionary_file=default; SELECT @@validate_password.length, @@validate_password.number_count, @@validate_password.mixed_case_count, @@validate_password.special_char_count, @@validate_password.policy, @@validate_password.dictionary_file; --echo # --echo # Bug#14588145 - NEED ABILITY TO FLUSH PASSWORD VALIDATION DICTIONARY FILE --echo # SET @@global.validate_password.policy=STRONG; --write_file $MYSQLTEST_VARDIR/tmp/dictionary.txt password validate EOF --write_file $MYSQLTEST_VARDIR/tmp/dictionary2.txt password validate monkey EOF --echo # No dictionary file, password is accepted CREATE USER 'user1'@'localhost' IDENTIFIED BY 'passWORD123#'; --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval SET @@global.validate_password.dictionary_file="$MYSQLTEST_VARDIR/tmp/dictionary2.txt"; # Dictionary file loaded --echo # must return 3 SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'validate_password.dictionary_file_words_count'; SELECT VARIABLE_VALUE into @ts1 FROM performance_schema.global_status WHERE VARIABLE_NAME = "validate_password.dictionary_file_last_parsed"; --echo # check format of the TS --replace_regex /[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]/0000-00-00 00:00:00/ SELECT @ts1; --echo # must return 19 SELECT LENGTH(@ts1); --echo # must sleep for at least 1 sec so that the timestamps differ --sleep 1 --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval SET @@global.validate_password.dictionary_file="$MYSQLTEST_VARDIR/tmp/dictionary.txt"; --echo # must return 2 SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'validate_password.dictionary_file_words_count'; SELECT VARIABLE_VALUE into @ts2 FROM performance_schema.global_status WHERE VARIABLE_NAME = "validate_password.dictionary_file_last_parsed"; --echo # must return 1 SELECT @ts1 <> @ts2; --error ER_NOT_VALID_PASSWORD CREATE USER 'user2'@'localhost' IDENTIFIED BY 'passWORD123#'; SET @@global.validate_password.dictionary_file=NULL; --echo # Cache flushed and no dictionary file is loaded CREATE USER 'user2'@'localhost' IDENTIFIED BY 'passWORD123#'; --echo # Select commands to show that the validate_password lock is instrumented SELECT NAME FROM performance_schema.setup_instruments WHERE NAME LIKE '%validate%'; SELECT NAME FROM performance_schema.rwlock_instances WHERE NAME LIKE '%validate%'; --echo # cleanup DROP USER 'user1'@'localhost', 'user2'@'localhost'; SET @@global.validate_password.policy=DEFAULT; remove_file $MYSQLTEST_VARDIR/tmp/dictionary.txt; remove_file $MYSQLTEST_VARDIR/tmp/dictionary2.txt; --echo # clean up after the test UNINSTALL COMPONENT "file://component_validate_password"; --echo # --echo # CREATE ROLE DOESN'T WORK WITH PASSWORD VALIDATION PLUGIN --echo # INSTALL COMPONENT "file://component_validate_password"; CREATE ROLE r1; DROP ROLE r1; UNINSTALL COMPONENT "file://component_validate_password"; --echo # --echo # Lets try to add a variable from the validate_password component --echo # while its not installed. (expect warning) --echo # call mtr.add_suppression("Dictionary file not specified"); SELECT @@global.session_track_system_variables; SELECT @@session.session_track_system_variables; --echo SET @@session.session_track_system_variables='validate_password.policy,autocommit'; --echo # Now lets install the validate password component. INSTALL COMPONENT "file://component_validate_password"; --echo # component installed! --echo SELECT @@session.session_track_system_variables; --echo # The following SET should now execute successfully without a warning. SET @@session.session_track_system_variables='validate_password.policy,autocommit'; --echo --echo # --echo # Bug#14458293 : WRITE PASSED END OF BUFFER IN --echo # VALIDATE_DICTIONARY_CHECK --echo # SELECT VALIDATE_PASSWORD_STRENGTH(REPEAT("aA1#", 26)); --echo # --echo # BUG#14292624 - VALIDATE_PASSWORD_STRENGTH(NULL) CRASHES SERVER --echo # SELECT VALIDATE_PASSWORD_STRENGTH(NULL); SELECT VALIDATE_PASSWORD_STRENGTH('NULL'); --echo # --echo # Bug#14588148: PASSWORD VALIDATION PLUGIN DOES NOT --echo # WARN ON INVALID DICTIONARY FILE --echo # --echo # restarting server multiple times with different dictionary files # Write file to make mysql-test-run.pl wait for the server to stop --exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect # Request shutdown -- send_shutdown # Call script that will poll the server waiting for it to disapear -- source include/wait_until_disconnected.inc #--echo # Restart server with unknown dictionary file. --exec echo "restart:--loose-validate_password.dictionary_file=dict.txt" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect # Turn on reconnect --enable_reconnect # Call script that will poll the server waiting for it to be back online again --source include/wait_until_connected_again.inc # Turn off reconnect again --disable_reconnect # Generate file of size greater than MAX_DICTIONARY_FILE_LENGTH --perl EOF my $dict_file= "$ENV{MYSQLTEST_VARDIR}/tmp/dict.txt"; my $outer = 100000; open(DICT_FILE, ">", $dict_file) or die "Can't open $dict_file for write: $!"; while ($outer-- > 0) { print DICT_FILE "validate_password_plugin\n"; } close DICT_FILE; EOF # restarting server second time # Write file to make mysql-test-run.pl wait for the server to stop --exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect # Request shutdown -- send_shutdown # Call script that will poll the server waiting for it to disapear -- source include/wait_until_disconnected.inc --echo # Restart server with file of size greater than MAX_DICTIONARY_FILE_LENGTH --exec echo "restart:--loose-validate_password.dictionary_file=$MYSQLTEST_VARDIR/tmp/dict.txt" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect # Turn on reconnect --enable_reconnect # Call script that will poll the server waiting for it to be back online again --source include/wait_until_connected_again.inc # Turn off reconnect again --disable_reconnect --echo # --echo # Bug#14850601 - VALIDATE_PASSWORD.LENGTH SHOULD NOT ACCEPT BELOW --echo # 4 AS ANY WAY NOT ABLE TO SET IT --echo # --echo # default values SELECT @@GLOBAL.VALIDATE_PASSWORD.LENGTH; SELECT @@GLOBAL.VALIDATE_PASSWORD.NUMBER_COUNT; SELECT @@GLOBAL.VALIDATE_PASSWORD.MIXED_CASE_COUNT; SELECT @@GLOBAL.VALIDATE_PASSWORD.SPECIAL_CHAR_COUNT; --echo Set password length to a value greater than the default one SET @@GLOBAL.VALIDATE_PASSWORD.LENGTH=16; SELECT @@GLOBAL.VALIDATE_PASSWORD.LENGTH; --echo Try to set a value less than --echo (2*mixed_case_count + number_count + special char_count) SET @@GLOBAL.VALIDATE_PASSWORD.LENGTH=3; SELECT @@GLOBAL.VALIDATE_PASSWORD.LENGTH; --echo set variables that affects effective password length SET @@GLOBAL.VALIDATE_PASSWORD.MIXED_CASE_COUNT=2; SELECT @@GLOBAL.VALIDATE_PASSWORD.LENGTH; SET @@GLOBAL.VALIDATE_PASSWORD.NUMBER_COUNT=3; SELECT @@GLOBAL.VALIDATE_PASSWORD.LENGTH; SET @@GLOBAL.VALIDATE_PASSWORD.SPECIAL_CHAR_COUNT=4; SELECT @@GLOBAL.VALIDATE_PASSWORD.LENGTH; --echo Reducing value of above variables shoud not have effect on --echo password length SET @@GLOBAL.VALIDATE_PASSWORD.MIXED_CASE_COUNT=1; SELECT @@GLOBAL.VALIDATE_PASSWORD.LENGTH; SET @@GLOBAL.VALIDATE_PASSWORD.NUMBER_COUNT=1; SELECT @@GLOBAL.VALIDATE_PASSWORD.LENGTH; SET @@GLOBAL.VALIDATE_PASSWORD.SPECIAL_CHAR_COUNT=1; SELECT @@GLOBAL.VALIDATE_PASSWORD.LENGTH; --echo Any adjustment in password length which does not go below --echo (2*mixed_case_count + number_count + special char_count) --echo will be carried out as it is SET @@GLOBAL.VALIDATE_PASSWORD.LENGTH=8; --echo # back to default values SELECT @@GLOBAL.VALIDATE_PASSWORD.LENGTH; SELECT @@GLOBAL.VALIDATE_PASSWORD.NUMBER_COUNT; SELECT @@GLOBAL.VALIDATE_PASSWORD.MIXED_CASE_COUNT; SELECT @@GLOBAL.VALIDATE_PASSWORD.SPECIAL_CHAR_COUNT; --echo # --echo # BUG #19388163 PASSWORD VALIDATION PLUGIN CRASH WITH --echo # USER VARIABLE + DICTIONARY LOOKUP --echo # SET @a='Aaaaaaaaa1!'; # must not crash --disable_result_log SELECT VALIDATE_PASSWORD_STRENGTH(@a); --enable_result_log --echo # --echo # BUG#14843970 - VALIDATE_PASSWORD ALLOWS BLANK PASSWORDS --echo # --error ER_NOT_VALID_PASSWORD SET PASSWORD= ''; --error ER_NOT_VALID_PASSWORD SET PASSWORD=''; # checking for empty password string in sha256 mode --error ER_NOT_VALID_PASSWORD CREATE USER 'sha256user'@'localhost' IDENTIFIED WITH sha256_password; --echo # --echo # Bug #16346443 - EMPTY PASSWORDS ARE ALLOWED WITH VALIDATE-PASSWORD-POLICY SET --echo # --error ER_NOT_VALID_PASSWORD CREATE USER passtest@localhost; CREATE TABLE test.t1 (a int); --error ER_NOT_VALID_PASSWORD CREATE USER 'passtest'@'localhost' IDENTIFIED WITH 'caching_sha2_password' AS ''; DROP TABLE test.t1; --echo # --echo # Bug#18636874 - PASSWORD VALIDATE PLUGIN: DICTIONARY CHECK MISBEHAVES WITH GOOD HEX INPUT --echo # SET @@global.validate_password.policy=STRONG; --write_file $MYSQLTEST_VARDIR/tmp/dictionary.txt password validate EOF --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval SET @@global.validate_password.dictionary_file="$MYSQLTEST_VARDIR/tmp/dictionary.txt"; # Dictionary file loaded SELECT VALIDATE_PASSWORD_STRENGTH( 0x6E616E646F73617135234552 ); SELECT VALIDATE_PASSWORD_STRENGTH( 0xae4fb3774143790d0036033d6e ); eval SET @@global.validate_password.dictionary_file=NULL; SET @@global.validate_password.policy=DEFAULT; remove_file $MYSQLTEST_VARDIR/tmp/dictionary.txt; --echo # --echo # Bug#16938568: ERROR 1819 (HY000): YOUR PASSWORD DOES NOT SATISFY --echo # THE CURRENT POLICY REQUIREMEN --echo # CREATE USER 'passtest'@'localhost' IDENTIFIED BY 'My!Complex@Passw0rd'; # User exsist so grant should work fine GRANT ALL ON *.* TO 'passtest'@'localhost'; DROP USER 'passtest'@'localhost'; --echo # --echo # Bug #16957721 - VALIDATE_PASSWORD.LENGTH ALLOWED TO HAVE BELOW --echo # VALIDATE_PASSWORD PARAMETER VALUE --echo # --echo # Case 1: Less than default value --echo # restarting server # Write file to make mysql-test-run.pl wait for the server to stop --exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect # Request shutdown -- send_shutdown # Call script that will poll the server waiting for it to disapear -- source include/wait_until_disconnected.inc #--echo # Restart server --exec echo "restart:--loose-validate_password.mixed_case_count=5 --loose-validate_password.length=4" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect # Turn on reconnect --enable_reconnect # Call script that will poll the server waiting for it to be back online again --source include/wait_until_connected_again.inc # Turn off reconnect again --disable_reconnect show variables like 'validate_password%'; --echo # Case 2: Greater than default value --echo # restarting server # Write file to make mysql-test-run.pl wait for the server to stop --exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect # Request shutdown -- send_shutdown # Call script that will poll the server waiting for it to disapear -- source include/wait_until_disconnected.inc #--echo # Restart server --exec echo "restart:--loose-validate_password.number_count=5 --loose-validate_password.length=10" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect # Turn on reconnect --enable_reconnect # Call script that will poll the server waiting for it to be back online again --source include/wait_until_connected_again.inc # Turn off reconnect again --disable_reconnect show variables like 'validate_password%'; --echo # Case 3: Greater than default value for all variables --echo # restarting server # Write file to make mysql-test-run.pl wait for the server to stop --exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect # Request shutdown -- send_shutdown # Call script that will poll the server waiting for it to disapear -- source include/wait_until_disconnected.inc #--echo # Restart server --exec echo "restart:--loose-validate_password.number_count=5 --loose-validate_password.mixed_case_count=5 --loose-validate_password.special_char_count=5 --loose-validate_password.length=10" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect # Turn on reconnect --enable_reconnect # Call script that will poll the server waiting for it to be back online again --source include/wait_until_connected_again.inc # Turn off reconnect again --disable_reconnect show variables like 'validate_password%'; --echo # --echo # Bug #18636291 VALIDATE_PASSWORD_STRENGTH() FLOORS CPU ON CASTED INPUTS --echo # SET NAMES UTF8; SELECT VALIDATE_PASSWORD_STRENGTH(CAST(0xd2 AS CHAR(10))); --echo # --echo # BUG #20863229 ASSERTION FAILED: --echo # PASSWORD != 0 IN AUTH\PASSWORD_POLICY_SERVICE.CC --echo # --echo #assert should not fail DO validate_password_strength(export_set('a','a','a','a','a')); --echo #should return empty string SELECT export_set('a','a','a','a','a'); --echo #should return 0 SELECT isnull(export_set('a','a','a','a','a')); --echo # --echo # Bug #17065383 PASSWORD VALIDATE PLUGIN STORES HASH OF --echo # LOWERCASE PASSWORD BY MISTAKE --echo # SET @@GLOBAL.VALIDATE_PASSWORD.POLICY=STRONG; SET @@GLOBAL.VALIDATE_PASSWORD.NUMBER_COUNT= 1; SET @@GLOBAL.VALIDATE_PASSWORD.MIXED_CASE_COUNT= 1; SET @@GLOBAL.VALIDATE_PASSWORD.SPECIAL_CHAR_COUNT= 1; SET @@GLOBAL.VALIDATE_PASSWORD.LENGTH= 8; create user user@localhost identified by 'ABCabc1!'; grant all privileges on *.* to user@localhost; # Able to connect connect (con1,localhost,user,ABCabc1!,); SET @@GLOBAL.VALIDATE_PASSWORD.POLICY=MEDIUM; disconnect con1; connection default; --echo # Cleanup. UNINSTALL COMPONENT "file://component_validate_password"; disconnect default; --echo End of tests