diff options
author | Vicențiu Ciorbaru <cvicentiu@gmail.com> | 2022-06-08 17:42:49 +0300 |
---|---|---|
committer | Vicențiu Ciorbaru <cvicentiu@gmail.com> | 2022-06-12 17:24:12 +0300 |
commit | 97d340d4fb0b1e9ad3841796170c56ba3799c901 (patch) | |
tree | b6880ef7cf0ec6c4d87f448f92b74cf02bddc743 | |
parent | d48480c692123473337a583dbec2b1dffa0ebcc0 (diff) | |
download | mariadb-git-97d340d4fb0b1e9ad3841796170c56ba3799c901.tar.gz |
cleanup: get_column_grant takes in LEX_CSTRINGS instead of char *
This eliminates the need to recompute strlen of the parameters, given that most
callers already have the strlen computed.
-rw-r--r-- | sql/item.cc | 10 | ||||
-rw-r--r-- | sql/sql_acl.cc | 23 | ||||
-rw-r--r-- | sql/sql_acl.h | 5 | ||||
-rw-r--r-- | sql/sql_base.cc | 21 | ||||
-rw-r--r-- | sql/sql_show.cc | 8 | ||||
-rw-r--r-- | sql/sql_view.cc | 9 |
6 files changed, 46 insertions, 30 deletions
diff --git a/sql/item.cc b/sql/item.cc index 3ea0fec3b4e..4eb8e50be84 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -6181,16 +6181,16 @@ bool Item_field::fix_fields(THD *thd, Item **reference) #ifndef NO_EMBEDDED_ACCESS_CHECKS if (any_privileges) { - const char *db, *tab; - db= field->table->s->db.str; - tab= field->table->s->table_name.str; if (!(have_privileges= (get_column_grant(thd, &field->table->grant, - db, tab, field_name.str) & + field->table->s->db, + field->table->s->table_name, + field_name) & VIEW_ANY_ACL))) { my_error(ER_COLUMNACCESS_DENIED_ERROR, MYF(0), "ANY", thd->security_ctx->priv_user, - thd->security_ctx->host_or_ip, field_name.str, tab); + thd->security_ctx->host_or_ip, field_name.str, + field->table->s->table_name.str); goto error; } } diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 2d235961126..387cc719bd1 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -9795,7 +9795,7 @@ bool check_column_grant_in_table_ref(THD *thd, TABLE_LIST * table_ref, thd->lex->sql_command == SQLCOM_SHOW_FIELDS) { view_privs= get_column_grant(thd, grant, - db_name->str, table_name->str, name); + *db_name, *table_name, {name, length}); if (view_privs & VIEW_ANY_ACL) { table_ref->belong_to_view->allowed_show= TRUE; @@ -10260,8 +10260,9 @@ privilege_t get_table_grant(THD *thd, TABLE_LIST *table) */ privilege_t get_column_grant(THD *thd, GRANT_INFO *grant, - const char *db_name, const char *table_name, - const char *field_name) + const LEX_CSTRING &db_name, + const LEX_CSTRING &table_name, + const LEX_CSTRING &field_name) { GRANT_TABLE *grant_table; GRANT_TABLE *grant_table_role; @@ -10283,12 +10284,12 @@ privilege_t get_column_grant(THD *thd, GRANT_INFO *grant, grant->grant_table_user= table_hash_search(sctx->host, sctx->ip, - db_name, sctx->priv_user, - table_name, 0); /* purecov: inspected */ + db_name.str, sctx->priv_user, + table_name.str, 0); /* purecov: inspected */ grant->grant_table_role= - sctx->priv_role[0] ? table_hash_search("", "", db_name, + sctx->priv_role[0] ? table_hash_search("", "", db_name.str, sctx->priv_role, - table_name, TRUE) : NULL; + table_name.str, TRUE) : NULL; grant->version= grant_version; /* purecov: inspected */ } @@ -10301,8 +10302,8 @@ privilege_t get_column_grant(THD *thd, GRANT_INFO *grant, { if (grant_table) { - grant_column= column_hash_search(grant_table, field_name, - (uint) strlen(field_name)); + grant_column= column_hash_search(grant_table, field_name.str, + field_name.length); if (!grant_column) priv= (grant->privilege | grant_table->privs); else @@ -10311,8 +10312,8 @@ privilege_t get_column_grant(THD *thd, GRANT_INFO *grant, if (grant_table_role) { - grant_column= column_hash_search(grant_table_role, field_name, - (uint) strlen(field_name)); + grant_column= column_hash_search(grant_table_role, field_name.str, + field_name.length); if (!grant_column) priv|= (grant->privilege | grant_table_role->privs); else diff --git a/sql/sql_acl.h b/sql/sql_acl.h index f8eb49dbda4..0238e0e5fa5 100644 --- a/sql/sql_acl.h +++ b/sql/sql_acl.h @@ -159,8 +159,9 @@ check_table_access(THD *thd, privilege_t requirements,TABLE_LIST *tables, privilege_t get_table_grant(THD *thd, TABLE_LIST *table); privilege_t get_column_grant(THD *thd, GRANT_INFO *grant, - const char *db_name, const char *table_name, - const char *field_name); + const LEX_CSTRING &db_name, + const LEX_CSTRING &table_name, + const LEX_CSTRING &field_name); bool get_show_user(THD *thd, LEX_USER *lex_user, const char **username, const char **hostname, const char **rolename); void mysql_show_grants_get_fields(THD *thd, List<Item> *fields, diff --git a/sql/sql_base.cc b/sql/sql_base.cc index fedc3bb122b..d31ba5210b6 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -8467,19 +8467,32 @@ insert_fields(THD *thd, Name_resolution_context *context, const char *db_name, tables->is_natural_join); DBUG_ASSERT(item->type() == Item::FIELD_ITEM); Item_field *fld= (Item_field*) item; - const char *field_table_name= field_iterator.get_table_name(); + /* + TODO(cvicentiu) constructing these lex_cstrings could be avoided + if we updated all the users of field_iterator::get_xxx_name to + use LEX_CSTRING. + */ + const LEX_CSTRING field_db_name = { + field_iterator.get_db_name(), + strlen(field_iterator.get_db_name()) + }; + + const LEX_CSTRING field_table_name= { + field_iterator.get_table_name(), + strlen(field_iterator.get_table_name()) + }; if (!tables->schema_table && !(fld->have_privileges= (get_column_grant(thd, field_iterator.grant(), - field_iterator.get_db_name(), - field_table_name, fld->field_name.str) & + field_db_name, field_table_name, + fld->field_name) & VIEW_ANY_ACL))) { my_error(ER_TABLEACCESS_DENIED_ERROR, MYF(0), "ANY", thd->security_ctx->priv_user, thd->security_ctx->host_or_ip, - field_table_name); + field_table_name.str); DBUG_RETURN(TRUE); } } diff --git a/sql/sql_show.cc b/sql/sql_show.cc index a92992605cd..7f859076b1d 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1118,8 +1118,8 @@ public: push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, ER_VIEW_INVALID, ER_THD(thd, ER_VIEW_INVALID), - m_top_view->get_db_name(), - m_top_view->get_table_name()); + m_top_view->get_db_name().str, + m_top_view->get_table_name().str); is_handled= TRUE; break; @@ -6121,8 +6121,8 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables, check_access(thd,SELECT_ACL, db_name->str, &tables->grant.privilege, 0, 0, MY_TEST(tables->schema_table)); col_access= get_column_grant(thd, &tables->grant, - db_name->str, table_name->str, - field->field_name.str) & COL_ACLS; + *db_name, *table_name, + field->field_name) & COL_ACLS; if (!tables->schema_table && !col_access) continue; char *end= tmp; diff --git a/sql/sql_view.cc b/sql/sql_view.cc index 9f9ef6335f3..90c4e4fe0dc 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -624,10 +624,11 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views, while ((item= it++)) { Item_field *fld= item->field_for_view_update(); - privilege_t priv(get_column_grant(thd, &view->grant, view->db.str, - view->table_name.str, - item->name.str) & - VIEW_ANY_ACL); + privilege_t priv(get_column_grant(thd, &view->grant, + view->db, + view->table_name, + item->name) & + VIEW_ANY_ACL); if (!fld) continue; |