@@ -109,34 +109,8 @@ SET @@global.validate_password_policy=STRONG;
109109SET PASSWORD FOR 'base_user'@'localhost'= PASSWORD('password1A#');
110110UPDATE mysql.user SET PASSWORD= PASSWORD('password1A#') WHERE user='base_user';
111111
112- UNINSTALL PLUGIN validate_password;
113-
114- --echo # restarting the server with dictionary file.
115-
116- # Write file to make mysql-test-run.pl wait for the server to stop
117- --exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
118-
119- # Request shutdown
120- -- send_shutdown
121-
122- # Call script that will poll the server waiting for it to disapear
123- -- source include/wait_until_disconnected.inc
124-
125- --echo # Restart server.
126-
127- --exec echo "restart:--loose-validate_password_dictionary_file=$MYSQL_ERRMSG_BASEDIR/dictionary.txt" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
128-
129- # Turn on reconnect
130- --enable_reconnect
131-
132- # Call script that will poll the server waiting for it to be back online again
133- --source include/wait_until_connected_again.inc
134-
135- # Turn off reconnect again
136- --disable_reconnect
137-
138- --replace_regex /\.dll/.so/
139- eval INSTALL PLUGIN validate_password SONAME '$VALIDATE_PASSWORD';
112+ --replace_result $MYSQL_ERRMSG_BASEDIR MYSQL_ERRMSG_BASEDIR
113+ eval SET @@global.validate_password_dictionary_file="$MYSQL_ERRMSG_BASEDIR/dictionary.txt";
140114
141115--echo # password policy strong
142116--echo # default_file : dictionary.txt
@@ -189,7 +163,7 @@ SET @@global.validate_password_special_char_count= 0;
189163--error ER_SPECIFIC_ACCESS_DENIED_ERROR
190164SET @@global.validate_password_mixed_case_count= 0;
191165# user has the update/create privilege but needs to satisfy password policy
192- # to update/create new account
166+ # to update/create new account
193167--error ER_NOT_VALID_PASSWORD
194168CREATE USER 'user2'@'localhost' IDENTIFIED BY 'password';
195169CREATE USER 'user2'@'localhost' IDENTIFIED BY 'PA00wrd!#';
@@ -204,4 +178,94 @@ connection default;
204178DROP USER 'base_user'@'localhost';
205179DROP USER 'user1'@'localhost';
206180DROP USER 'user'@'localhost';
181+ SET @@global.validate_password_length=default;
182+ SET @@global.validate_password_number_count=default;
183+ SET @@global.validate_password_mixed_case_count=default;
184+ SET @@global.validate_password_special_char_count=default;
185+ SET @@global.validate_password_policy=default;
186+ SET @@global.validate_password_dictionary_file=default;
187+
188+ SELECT @@validate_password_length,
189+ @@validate_password_number_count,
190+ @@validate_password_mixed_case_count,
191+ @@validate_password_special_char_count,
192+ @@validate_password_policy,
193+ @@validate_password_dictionary_file;
194+
195+
196+ --echo #
197+ --echo # Bug#14588145 - NEED ABILITY TO FLUSH PASSWORD VALIDATION DICTIONARY FILE
198+ --echo #
199+
200+ SET @@global.validate_password_policy=STRONG;
201+
202+ --write_file $MYSQLTEST_VARDIR/tmp/dictionary.txt
203+ password
204+ validate
205+ EOF
206+
207+ --write_file $MYSQLTEST_VARDIR/tmp/dictionary2.txt
208+ password
209+ validate
210+ monkey
211+ EOF
212+
213+ --echo # No dictionary file, password is accepted
214+ CREATE USER 'user1'@'localhost' IDENTIFIED BY 'passWORD123#';
215+ --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
216+ eval SET @@global.validate_password_dictionary_file="$MYSQLTEST_VARDIR/tmp/dictionary2.txt";
217+ # Dictionary file loaded
218+
219+ --echo # must return 3
220+ SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS
221+ WHERE VARIABLE_NAME = 'validate_password_dictionary_file_words_count';
222+
223+ SELECT VARIABLE_VALUE into @ts1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS
224+ WHERE VARIABLE_NAME = "validate_password_dictionary_file_last_parsed";
225+
226+ --echo # check format of the TS
227+ --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/
228+ SELECT @ts1;
229+
230+ --echo # must return 19
231+ SELECT LENGTH(@ts1);
232+
233+ --echo # must sleep for at least 1 sec so that the timestamps differ
234+ --sleep 1
235+
236+ --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
237+ eval SET @@global.validate_password_dictionary_file="$MYSQLTEST_VARDIR/tmp/dictionary.txt";
238+
239+ --echo # must return 2
240+ SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS
241+ WHERE VARIABLE_NAME = 'validate_password_dictionary_file_words_count';
242+
243+ SELECT VARIABLE_VALUE into @ts2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS
244+ WHERE VARIABLE_NAME = "validate_password_dictionary_file_last_parsed";
245+
246+ --echo # must return 1
247+ SELECT @ts1 <> @ts2;
248+
249+ --error ER_NOT_VALID_PASSWORD
250+ CREATE USER 'user2'@'localhost' IDENTIFIED BY 'passWORD123#';
251+
252+ SET @@global.validate_password_dictionary_file=NULL;
253+
254+ --echo # Cache flushed and no dictionary file is loaded
255+ CREATE USER 'user2'@'localhost' IDENTIFIED BY 'passWORD123#';
256+
257+ --echo # Select commands to show that the validate_password lock is instrumented
258+ SELECT NAME FROM performance_schema.setup_instruments WHERE NAME LIKE '%validate%';
259+ SELECT NAME FROM performance_schema.rwlock_instances WHERE NAME LIKE '%validate%';
260+
261+ --echo # cleanup
262+ DROP USER 'user1'@'localhost', 'user2'@'localhost';
263+ SET @@global.validate_password_policy=DEFAULT;
264+ remove_file $MYSQLTEST_VARDIR/tmp/dictionary.txt;
265+ remove_file $MYSQLTEST_VARDIR/tmp/dictionary2.txt;
266+
267+ --echo # clean up after the test
207268UNINSTALL PLUGIN validate_password;
269+
270+
271+ --echo End of tests
0 commit comments