1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-24 11:21:21 +03:00

Bug #57916: Fix the naming of the proxy_priv table

1. Fixed the name of the table to proxies_priv
2. Fixed the column names to be of the form Capitalized_lowecarse instead of
Capitalized_Capitalized
3. Added Timestamp and Grantor columns
4. Added tests to plugin_auth to check the table structure
5. Updated the existing tests
This commit is contained in:
Georgi Kodinov
2010-11-02 17:45:26 +02:00
parent 3a7d79d5a5
commit b69f9b397a
24 changed files with 137 additions and 95 deletions

View File

@@ -268,11 +268,13 @@ class ACL_PROXY_USER :public ACL_ACCESS
bool with_grant;
typedef enum {
MYSQL_PROXY_PRIV_HOST,
MYSQL_PROXY_PRIV_USER,
MYSQL_PROXY_PRIV_PROXIED_HOST,
MYSQL_PROXY_PRIV_PROXIED_USER,
MYSQL_PROXY_PRIV_WITH_GRANT } old_acl_proxy_users;
MYSQL_PROXIES_PRIV_HOST,
MYSQL_PROXIES_PRIV_USER,
MYSQL_PROXIES_PRIV_PROXIED_HOST,
MYSQL_PROXIES_PRIV_PROXIED_USER,
MYSQL_PROXIES_PRIV_WITH_GRANT,
MYSQL_PROXIES_PRIV_GRANTOR,
MYSQL_PROXIES_PRIV_TIMESTAMP } old_acl_proxy_users;
public:
ACL_PROXY_USER () {};
@@ -308,11 +310,11 @@ public:
void init(TABLE *table, MEM_ROOT *mem)
{
init (get_field(mem, table->field[MYSQL_PROXY_PRIV_HOST]),
get_field(mem, table->field[MYSQL_PROXY_PRIV_USER]),
get_field(mem, table->field[MYSQL_PROXY_PRIV_PROXIED_HOST]),
get_field(mem, table->field[MYSQL_PROXY_PRIV_PROXIED_USER]),
table->field[MYSQL_PROXY_PRIV_WITH_GRANT]->val_int() != 0);
init (get_field(mem, table->field[MYSQL_PROXIES_PRIV_HOST]),
get_field(mem, table->field[MYSQL_PROXIES_PRIV_USER]),
get_field(mem, table->field[MYSQL_PROXIES_PRIV_PROXIED_HOST]),
get_field(mem, table->field[MYSQL_PROXIES_PRIV_PROXIED_USER]),
table->field[MYSQL_PROXIES_PRIV_WITH_GRANT]->val_int() != 0);
}
bool get_with_grant() { return with_grant; }
@@ -337,7 +339,7 @@ public:
(hostname_requires_resolving(host.hostname) ||
hostname_requires_resolving(proxied_host.hostname)))
{
sql_print_warning("'proxy_priv' entry '%s@%s %s@%s' "
sql_print_warning("'proxes_priv' entry '%s@%s %s@%s' "
"ignored in --skip-name-resolve mode.",
proxied_user ? proxied_user : "",
proxied_host.hostname ? proxied_host.hostname : "",
@@ -452,19 +454,19 @@ public:
user->str ? user->str : "<NULL>",
proxied_host->str ? proxied_host->str : "<NULL>",
proxied_user->str ? proxied_user->str : "<NULL>"));
if (table->field[MYSQL_PROXY_PRIV_HOST]->store(host->str,
if (table->field[MYSQL_PROXIES_PRIV_HOST]->store(host->str,
host->length,
system_charset_info))
DBUG_RETURN(TRUE);
if (table->field[MYSQL_PROXY_PRIV_USER]->store(user->str,
if (table->field[MYSQL_PROXIES_PRIV_USER]->store(user->str,
user->length,
system_charset_info))
DBUG_RETURN(TRUE);
if (table->field[MYSQL_PROXY_PRIV_PROXIED_HOST]->store(proxied_host->str,
if (table->field[MYSQL_PROXIES_PRIV_PROXIED_HOST]->store(proxied_host->str,
proxied_host->length,
system_charset_info))
DBUG_RETURN(TRUE);
if (table->field[MYSQL_PROXY_PRIV_PROXIED_USER]->store(proxied_user->str,
if (table->field[MYSQL_PROXIES_PRIV_PROXIED_USER]->store(proxied_user->str,
proxied_user->length,
system_charset_info))
DBUG_RETURN(TRUE);
@@ -472,20 +474,25 @@ public:
DBUG_RETURN(FALSE);
}
static int store_data_record(TABLE *table,
const LEX_STRING *host,
static int store_data_record(TABLE *table,
const LEX_STRING *host,
const LEX_STRING *user,
const LEX_STRING *proxied_host,
const LEX_STRING *proxied_host,
const LEX_STRING *proxied_user,
bool with_grant)
bool with_grant,
const char *grantor)
{
DBUG_ENTER ("ACL_PROXY_USER::store_pk");
if (store_pk (table, host, user, proxied_host, proxied_user))
DBUG_ENTER("ACL_PROXY_USER::store_pk");
if (store_pk(table, host, user, proxied_host, proxied_user))
DBUG_RETURN(TRUE);
DBUG_PRINT ("info", ("with_grant=%s", with_grant ? "TRUE" : "FALSE"));
if (table->field[MYSQL_PROXY_PRIV_WITH_GRANT]->store(with_grant ? 1 : 0,
DBUG_PRINT("info", ("with_grant=%s", with_grant ? "TRUE" : "FALSE"));
if (table->field[MYSQL_PROXIES_PRIV_WITH_GRANT]->store(with_grant ? 1 : 0,
TRUE))
DBUG_RETURN(TRUE);
if (table->field[MYSQL_PROXIES_PRIV_GRANTOR]->store(grantor,
strlen(grantor),
system_charset_info))
DBUG_RETURN(TRUE);
DBUG_RETURN(FALSE);
}
@@ -1113,8 +1120,8 @@ my_bool acl_reload(THD *thd)
tables[2].init_one_table(C_STRING_WITH_LEN("mysql"),
C_STRING_WITH_LEN("db"), "db", TL_READ);
tables[3].init_one_table(C_STRING_WITH_LEN("mysql"),
C_STRING_WITH_LEN("proxy_priv"),
"proxy_priv", TL_READ);
C_STRING_WITH_LEN("proxies_priv"),
"proxies_priv", TL_READ);
tables[0].next_local= tables[0].next_global= tables + 1;
tables[1].next_local= tables[1].next_global= tables + 2;
tables[2].next_local= tables[2].next_global= tables + 3;
@@ -2608,7 +2615,7 @@ acl_insert_proxy_user(ACL_PROXY_USER *new_value)
static int
replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
replace_proxies_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
const LEX_USER *proxied_user, bool with_grant_arg,
bool revoke_grant)
{
@@ -2616,8 +2623,9 @@ replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
int error;
uchar user_key[MAX_KEY_LENGTH];
ACL_PROXY_USER new_grant;
char grantor[USER_HOST_BUFF_SIZE];
DBUG_ENTER("replace_proxy_priv_table");
DBUG_ENTER("replace_proxies_priv_table");
if (!initialized)
{
@@ -2639,6 +2647,8 @@ replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
key_copy(user_key, table->record[0], table->key_info,
table->key_info->key_length);
get_grantor(thd, grantor);
table->file->ha_index_init(0, 1);
if (table->file->index_read_map(table->record[0], user_key,
HA_WHOLE_KEY,
@@ -2655,7 +2665,8 @@ replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
ACL_PROXY_USER::store_data_record(table, &user->host, &user->user,
&proxied_user->host,
&proxied_user->user,
with_grant_arg);
with_grant_arg,
grantor);
}
else
{
@@ -2712,7 +2723,7 @@ table_error:
table->file->print_error(error, MYF(0)); /* purecov: inspected */
abort:
DBUG_PRINT("info", ("aborting replace_proxy_priv_table"));
DBUG_PRINT("info", ("aborting replace_proxies_priv_table"));
table->file->ha_index_end();
DBUG_RETURN(-1);
}
@@ -3962,14 +3973,14 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list,
proxied_user= str_list++;
}
/* open the mysql.user and mysql.db or mysql.proxy_priv tables */
/* open the mysql.user and mysql.db or mysql.proxies_priv tables */
tables[0].init_one_table(C_STRING_WITH_LEN("mysql"),
C_STRING_WITH_LEN("user"), "user", TL_WRITE);
if (is_proxy)
tables[1].init_one_table(C_STRING_WITH_LEN("mysql"),
C_STRING_WITH_LEN("proxy_priv"),
"proxy_priv",
C_STRING_WITH_LEN("proxies_priv"),
"proxies_priv",
TL_WRITE);
else
tables[1].init_one_table(C_STRING_WITH_LEN("mysql"),
@@ -4063,7 +4074,7 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list,
}
else if (is_proxy)
{
if (replace_proxy_priv_table (thd, tables[1].table, Str, proxied_user,
if (replace_proxies_priv_table (thd, tables[1].table, Str, proxied_user,
rights & GRANT_ACL ? TRUE : FALSE,
revoke_grant))
result= -1;
@@ -5690,8 +5701,8 @@ int open_grant_tables(THD *thd, TABLE_LIST *tables)
C_STRING_WITH_LEN("procs_priv"),
"procs_priv", TL_WRITE);
(tables+5)->init_one_table(C_STRING_WITH_LEN("mysql"),
C_STRING_WITH_LEN("proxy_priv"),
"proxy_priv", TL_WRITE);
C_STRING_WITH_LEN("proxies_priv"),
"proxies_priv", TL_WRITE);
tables->next_local= tables->next_global= tables + 1;
(tables+1)->next_local= (tables+1)->next_global= tables + 2;
(tables+2)->next_local= (tables+2)->next_global= tables + 3;
@@ -6283,7 +6294,7 @@ static int handle_grant_data(TABLE_LIST *tables, bool drop,
}
}
/* Handle proxy_priv table. */
/* Handle proxies_priv table. */
if ((found= handle_grant_table(tables, 5, drop, user_from, user_to)) < 0)
{
/* Handle of table failed, don't touch the in-memory array. */
@@ -6291,7 +6302,7 @@ static int handle_grant_data(TABLE_LIST *tables, bool drop,
}
else
{
/* Handle proxy_priv array. */
/* Handle proxies_priv array. */
if ((handle_grant_struct(5, drop, user_from, user_to) && !result) ||
found)
result= 1; /* At least one record/element found. */