privileges".
The first problem was that DROP USER didn't properly remove privileges
on stored functions from in-memory structures. So the dropped user
could have called stored functions on which he had privileges before
being dropped while his connection was still around.
Even worse if a new user with the same name was created he would
inherit privileges on stored functions from the dropped user.
Similar thing happened with old user name and function privileges
during RENAME USER.
This problem stemmed from the fact that the handle_grant_data() function
which handled DROP/RENAME USER didn't take any measures to update
in-memory hash with information about function privileges after
updating them on disk.
This patch solves this problem by adding code doing just that.
The second problem was that RENAME USER didn't properly update in-memory
structures describing table-level privileges and privileges on stored
procedures. As result such privileges could have been lost after a rename
(i.e. not associated with the new name of user) and inherited by a new
user with the same name as the old name of the original user.
This problem was caused by code handling RENAME USER in
handle_grant_struct() which [sic!]:
a) tried to update wrong (tables) hash when updating stored procedure
privileges for new user name.
b) passed wrong arguments to function performing the hash update and
didn't take into account the way in which such update could have
changed the order of the hash elements.
This patch solves this problem by ensuring that a) the correct hash
is updated, b) correct arguments are used for the hash_update()
function and c) we take into account possible changes in the order
of hash elements.
mysql-test/r/grant.result:
Added test coverage for bug#36544 "DROP USER does not remove stored
function privileges".
mysql-test/suite/funcs_1/r/innodb_storedproc_06.result:
Since after fixing bug#36544 "DROP USER does not remove stored function
privileges" in-memory structures are correctly updated by DROP USER,
DROP FUNCTION performed after DROP USER for its definer no longer
produces unwarranted warning/error messages.
mysql-test/suite/funcs_1/r/memory_storedproc_06.result:
Since after fixing bug#36544 "DROP USER does not remove stored function
privileges" in-memory structures are correctly updated by DROP USER,
DROP FUNCTION performed after DROP USER for its definer no longer
produces unwarranted warning/error messages.
mysql-test/suite/funcs_1/r/myisam_storedproc_06.result:
Since after fixing bug#36544 "DROP USER does not remove stored function
privileges" in-memory structures are correctly updated by DROP USER,
DROP FUNCTION performed after DROP USER for its definer no longer
produces unwarranted warning/error messages.
mysql-test/t/grant.test:
Added test coverage for bug#36544 "DROP USER does not remove stored
function privileges".
sql/sql_acl.cc:
Changed handle_grant_data() to also update hash with function
privileges. This allows DROP/RENAME USER correctly keep this
in-memory structure up-to-date.
To do this extended handle_grant_struct() to support updating of this
hash. In addition fixed code in this function which is responsible for
handling of column and routine hashes during RENAME USER, ensured that
we correctly update these hashes after changing user name and that we
don't skip elements while iterating through the hash and doing updates.
Details:
- Limit the queries to character sets and collations
which are most probably available in all build types.
But try to preserve the intention of the tests.
- Remove the variants adjusted to some build types.
Note:
1. The results of the review by Bar are included.
2. I am not able to check the correctness of this patch
on any existing build type and any MySQL version.
So it could happen that the new test fails somewhere.
Detail:
The results for the "normal" server testcase variants
were already adjusted to the modified information_schema
content. Therefore just do the same for the embedded
server variants.
including modifications according to code review
+ backport of the fix for
Bug 41932 funcs_1: is_collation_character_set_applicability path
too long for tar
which was missing in 5.0 (just a renaming of two files)
mysql-test/suite/funcs_1/r/memory_func_view.result:
Take additional precision into account.
mysql-test/suite/funcs_1/r/memory_views.result:
Take additional precision into account.
mysql-test/suite/funcs_1/r/myisam_func_view.result:
Take additional precision into account.
mysql-test/suite/funcs_1/r/myisam_views.result:
Take additional precision into account.
Static disabled plugins|engines and dynamic plugins which installed but disabled
are not visible in I_S PLUGINS|ENGINES tables because they are not stored into
global plugin array.
The fix: add such plugins|engines to plugin array with PLUGIN_IS_DISABLED status.
I_S.ENGINES 'Transactions', 'XA', 'Savepoints' fields have NULL value in this case.
mysql-test/r/warnings_engine_disabled.result:
test result
mysql-test/suite/funcs_1/r/is_columns_is.result:
result fix
mysql-test/suite/funcs_1/r/is_engines.result:
result fix
mysql-test/t/warnings_engine_disabled.test:
test case
sql/sql_plugin.cc:
store disabled plugins|engines into plugin array
sql/sql_plugin.h:
added PLUGIN_IS_DISABLED flag
sql/sql_show.cc:
added filling of 'engines'&'plugins' tables with disabled engines|plugins
Altered param_check to disable warnings on system-sensitive operations
and added some notes / possible TODO
Re-recorded.result file to account for change
VARIABLE_VALUE field is decreased to 1024 symbols.
(affected I_S tables: GLOBAL_VARIABLES, SESSION_VARIABLES,
GLOBAL_STATUS, SESSION_STATUS).
The only variable which can be longer than 1024 is
init_connect. The variable will be truncated with warning.
Additional fix:
Added where condition filter which speed up queries which
have where condition with expressions which use VARIABLE_NAME
field.
mysql-test/r/information_schema.result:
test result
mysql-test/r/show_check.result:
result fix
mysql-test/suite/funcs_1/r/is_columns_is.result:
result fix
mysql-test/t/information_schema.test:
test case
sql/sql_show.cc:
VARIABLE_VALUE field is decreased to 1024 symbols.
(affected I_S tables: GLOBAL_VARIABLES, SESSION_VARIABLES,
GLOBAL_STATUS, SESSION_STATUS).
The only variable which can be longer than 1024 is
init_connect. The variable will be truncated with warning.
Additional fix:
Added where condition filter which speed up queries which
have where condition with expressions which use VARIABLE_NAME
field.
changed 'charset', 'collation' field length from 64 to MY_CS_NAME_SIZE(32)
in tables:
SCHEMATA, TABLES, COLUMNS, CHARACTER_SETS,
COLLATIONS, COLLATION_CHARACTER_SET_APPLICABILITY
mysql-test/r/create.result:
result fix
mysql-test/r/information_schema.result:
result fix
mysql-test/r/show_check.result:
result fix
mysql-test/suite/funcs_1/r/is_character_sets.result:
result fix
mysql-test/suite/funcs_1/r/is_collation_character_set_applicability.result:
result fix
mysql-test/suite/funcs_1/r/is_collations.result:
result fix
mysql-test/suite/funcs_1/r/is_columns.result:
result fix
mysql-test/suite/funcs_1/r/is_columns_is.result:
result fix
mysql-test/suite/funcs_1/r/is_routines.result:
result fix
mysql-test/suite/funcs_1/r/is_schemata.result:
result fix
mysql-test/suite/funcs_1/r/is_tables.result:
result fix
sql/sql_show.cc:
changed 'charset', 'collation' field length from 64 to MY_CS_NAME_SIZE(32)
in tables:
SCHEMATA, TABLES, COLUMNS, CHARACTER_SETS,
COLLATIONS, COLLATION_CHARACTER_SET_APPLICABILITY
additional fix: ROUTINES.SQL_MODE is changed to be VARCHAR(addon for Bug#29153)
added FLUSH TABLES after INSERT because UPDATE_TIME is updated with delay
on Win.
mysql-test/suite/funcs_1/datadict/is_tables.inc:
test fix
mysql-test/suite/funcs_1/r/is_tables.result:
result fix
TRIGGERS.SQL_MODE, EVENTS.SQL_MODE, TRIGGERS.DEFINER:
field type is changed to VARCHAR.
mysql-test/r/information_schema.result:
result fix
mysql-test/r/show_check.result:
result fix
mysql-test/suite/funcs_1/r/is_columns_is.result:
result fix
mysql-test/suite/funcs_1/r/is_events.result:
result fix
mysql-test/suite/funcs_1/r/is_triggers.result:
result fix
sql/sql_show.cc:
TRIGGERS.SQL_MODE, EVENTS.SQL_MODE, TRIGGERS.DEFINER:
field type is changed to VARCHAR.
is inconsistent
+ several improvements
Details:
- The subtest with assignment of floating point numbers to
DECIMAL parameters in functions and procedures checks
now that the final DECIMAL value is the same as if we assign
the floating point numbers to columns, user variables etc.
= The impact of math libs or truncation must be the same.
- Remove storage engine variants of this test because the
stored procedure properties tested do not depend on
the storage engine.
Use the fastest storage engine (MEMORY) for any tables
needed.
- reset global sort_buffer_size to startup value
- Partially improved formatting.
Details of the fix:
- wrong command and state in processlist -> insert poll routine
- unexpected additional session -> abort if unexpected session found
37167 funcs_1: Many tests fail if the embedded
server is used.
37164 funcs_1: Some tests fail if an optional
character set is missing.
+ some cleanup within the testsuite related to the
fixes above
+ some adjustments to open bugs on Mac OS X
2. Skip tests which suffer from bug
37456 funcs_1: Several tests crash when used
with embedded server
3. Minor cleanup in some tests