mariadb/mysql-test/t/skip_grants.test
unknown 737cdfeaeb 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.
2007-11-09 13:29:43 +03:00

130 lines
2.6 KiB
Text

# This tests not performed with embedded server
-- source include/not_embedded.inc
use test;
#
# BUG#16777: Can not create trigger nor view w/o definer if --skip-grant-tables
# specified
#
# Also, the following test cases have been moved here:
# - test that we can create VIEW if privileges check switched off has been
# moved here;
# - test that we can create and drop procedure without warnings (BUG#9993);
# - BUG#17595: "DROP FUNCTION IF EXISTS" crashes server;
# - BUG#13504: creation view with DEFINER clause if --skip-grant-tables
#
# Prepare.
--disable_warnings
DROP VIEW IF EXISTS v1;
DROP VIEW IF EXISTS v2;
DROP VIEW IF EXISTS v3;
DROP TABLE IF EXISTS t1;
DROP PROCEDURE IF EXISTS p1;
DROP PROCEDURE IF EXISTS p2;
DROP PROCEDURE IF EXISTS p3;
DROP FUNCTION IF EXISTS f1;
DROP FUNCTION IF EXISTS f2;
DROP FUNCTION IF EXISTS f3;
--enable_warnings
# Test case.
CREATE TABLE t1(c INT);
# - try to create with implicit definer (definer would be ''@'');
CREATE TRIGGER t1_bi BEFORE INSERT ON t1
FOR EACH ROW
SET @a = 1;
CREATE VIEW v1 AS SELECT * FROM t1;
CREATE PROCEDURE p1()
SELECT 1;
CREATE FUNCTION f1() RETURNS INT
RETURN 1;
# - try to create with explicit definer;
CREATE DEFINER=a@b TRIGGER ti_ai AFTER INSERT ON t1
FOR EACH ROW
SET @b = 1;
CREATE DEFINER=a@b VIEW v2 AS SELECT * FROM t1;
CREATE DEFINER=a@b PROCEDURE p2()
SELECT 2;
CREATE DEFINER=a@b FUNCTION f2() RETURNS INT
RETURN 2;
# - try to create with explicit definer with empty host;
CREATE DEFINER=a@'' TRIGGER ti_bu BEFORE UPDATE ON t1
FOR EACH ROW
SET @c = 1;
CREATE DEFINER=a@'' VIEW v3 AS SELECT * FROM t1;
CREATE DEFINER=a@'' PROCEDURE p3()
SELECT 3;
CREATE DEFINER=a@'' FUNCTION f3() RETURNS INT
RETURN 3;
# - check that empty host name is treated correctly;
SHOW CREATE VIEW v3;
SHOW CREATE PROCEDURE p3;
SHOW CREATE FUNCTION f3;
# Cleanup.
DROP TRIGGER t1_bi;
DROP TRIGGER ti_ai;
DROP TRIGGER ti_bu;
DROP VIEW v1;
DROP VIEW v2;
DROP VIEW v3;
DROP TABLE t1;
DROP PROCEDURE p1;
DROP PROCEDURE p2;
DROP PROCEDURE p3;
DROP FUNCTION f1;
DROP FUNCTION f2;
DROP FUNCTION f3;
#
# Bug#26285 Selecting information_schema crahes server
#
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