Fix for bug #32020: loading udfs while --skip-grant-tables is enabled
causes out of memory errors The code in mysql_create_function() and mysql_drop_function() assumed that the only reason for UDFs being uninitialized at that point is an out-of-memory error during initialization. However, another possible reason for that is the --skip-grant-tables option in which case UDF initialization is skipped and UDFs are unavailable. The solution is to check whether mysqld is running with --skip-grant-tables and issue a proper error in such a case. mysql-test/r/skip_grants.result: Added a test case for bug #32020. mysql-test/t/skip_grants.test: Added a test case for bug #32020. sql/sql_udf.cc: Issue a proper error when a user tries to CREATE/DROP a UDF on a server running with the --skip-grant-tables option.
This commit is contained in:
parent
04311fabaa
commit
737cdfeaeb
@ -70,3 +70,8 @@ count(*)
|
||||
select count(*) from information_schema.USER_PRIVILEGES;
|
||||
count(*)
|
||||
0
|
||||
CREATE FUNCTION a RETURNS STRING SONAME '';
|
||||
ERROR HY000: Can't initialize function 'a'; UDFs are unavailable with the --skip-grant-tables option
|
||||
DROP FUNCTION a;
|
||||
ERROR 42000: FUNCTION test.a does not exist
|
||||
End of 5.0 tests
|
||||
|
@ -116,3 +116,15 @@ select count(*) from information_schema.COLUMN_PRIVILEGES;
|
||||
select count(*) from information_schema.SCHEMA_PRIVILEGES;
|
||||
select count(*) from information_schema.TABLE_PRIVILEGES;
|
||||
select count(*) from information_schema.USER_PRIVILEGES;
|
||||
|
||||
#
|
||||
# Bug #32020: loading udfs while --skip-grant-tables is enabled causes out of
|
||||
# memory errors
|
||||
#
|
||||
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
CREATE FUNCTION a RETURNS STRING SONAME '';
|
||||
--error ER_SP_DOES_NOT_EXIST
|
||||
DROP FUNCTION a;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -410,7 +410,12 @@ int mysql_create_function(THD *thd,udf_func *udf)
|
||||
|
||||
if (!initialized)
|
||||
{
|
||||
my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0));
|
||||
if (opt_noacl)
|
||||
my_error(ER_CANT_INITIALIZE_UDF, MYF(0),
|
||||
udf->name.str,
|
||||
"UDFs are unavailable with the --skip-grant-tables option");
|
||||
else
|
||||
my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0));
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
@ -514,7 +519,10 @@ int mysql_drop_function(THD *thd,const LEX_STRING *udf_name)
|
||||
DBUG_ENTER("mysql_drop_function");
|
||||
if (!initialized)
|
||||
{
|
||||
my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0));
|
||||
if (opt_noacl)
|
||||
my_error(ER_FUNCTION_NOT_DEFINED, MYF(0), udf_name->str);
|
||||
else
|
||||
my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0));
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
rw_wrlock(&THR_LOCK_udf);
|
||||
|
Loading…
x
Reference in New Issue
Block a user