summaryrefslogtreecommitdiff
path: root/sql/sql_db.cc
diff options
context:
space:
mode:
authorunknown <monty@mishka.local>2005-08-20 11:00:00 +0300
committerunknown <monty@mishka.local>2005-08-20 11:00:00 +0300
commit3eda70b270e2d24e6b4bd6662ddc0b2172b47b67 (patch)
tree499bcf518b69b974792bbb607094965a41e25061 /sql/sql_db.cc
parent4d2bf4befcf6a91978c60b9a402301e864ed999e (diff)
downloadmariadb-git-3eda70b270e2d24e6b4bd6662ddc0b2172b47b67.tar.gz
Fixes during review of new pushed code
Fixed new bug when running a SP without a default database mysql-test/r/information_schema.result: Added test to cover changes made in default handling mysql-test/r/sp-security.result: Added test when executing SP without a default database mysql-test/t/information_schema.test: Added test to cover changes made in default handling mysql-test/t/sp-security.test: Added test when executing SP without a default database sql/item_strfunc.cc: Removed wrong push sql/mysqld.cc: Indentation fix sql/sql_base.cc: Use share->db instead of share->table_cache_key Remove assert that can never fail (because of test in previous row) sql/sql_db.cc: Allow empty database name when called from SP (To allow on run without a default database) sql/sql_parse.cc: Added comment sql/sql_show.cc: Indentation fixes Simplified code by checking for 'wrong' condition first and doing continue instead of going down one level Simplified precision and decimal handling
Diffstat (limited to 'sql/sql_db.cc')
-rw-r--r--sql/sql_db.cc22
1 files changed, 16 insertions, 6 deletions
diff --git a/sql/sql_db.cc b/sql/sql_db.cc
index 67fc1053774..874dfd5f975 100644
--- a/sql/sql_db.cc
+++ b/sql/sql_db.cc
@@ -998,7 +998,7 @@ err:
mysql_change_db()
thd Thread handler
name Databasename
- no_access_check True= don't do access check
+ no_access_check True don't do access check. In this case name may be ""
DESCRIPTION
Becasue the database name may have been given directly from the
@@ -1025,14 +1025,22 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check)
char *dbname=my_strdup((char*) name,MYF(MY_WME));
char path[FN_REFLEN];
HA_CREATE_INFO create;
- bool schema_db= 0;
+ bool system_db= 0;
#ifndef NO_EMBEDDED_ACCESS_CHECKS
ulong db_access;
#endif
DBUG_ENTER("mysql_change_db");
+ DBUG_PRINT("enter",("name: '%s'",name));
+ /* dbname can only be NULL if malloc failed */
if (!dbname || !(db_length= strlen(dbname)))
{
+ if (no_access_check && dbname)
+ {
+ /* Called from SP when orignal database was not set */
+ system_db= 1;
+ goto end;
+ }
x_free(dbname); /* purecov: inspected */
my_message(ER_NO_DB_ERROR, ER(ER_NO_DB_ERROR),
MYF(0)); /* purecov: inspected */
@@ -1047,7 +1055,7 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check)
DBUG_PRINT("info",("Use database: %s", dbname));
if (!my_strcasecmp(system_charset_info, dbname, information_schema_name.str))
{
- schema_db= 1;
+ system_db= 1;
#ifndef NO_EMBEDDED_ACCESS_CHECKS
db_access= SELECT_ACL;
#endif
@@ -1055,13 +1063,15 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check)
}
#ifndef NO_EMBEDDED_ACCESS_CHECKS
- if (!no_access_check) {
+ if (!no_access_check)
+ {
if (test_all_bits(thd->master_access,DB_ACLS))
db_access=DB_ACLS;
else
db_access= (acl_get(thd->host,thd->ip, thd->priv_user,dbname,0) |
thd->master_access);
- if (!(db_access & DB_ACLS) && (!grant_option || check_grant_db(thd,dbname)))
+ if (!(db_access & DB_ACLS) && (!grant_option ||
+ check_grant_db(thd,dbname)))
{
my_error(ER_DBACCESS_DENIED_ERROR, MYF(0),
thd->priv_user,
@@ -1094,7 +1104,7 @@ end:
if (!no_access_check)
thd->db_access=db_access;
#endif
- if (schema_db)
+ if (system_db)
{
thd->db_charset= system_charset_info;
thd->variables.collation_database= system_charset_info;