diff options
Diffstat (limited to 'sql/sql_acl.cc')
-rw-r--r-- | sql/sql_acl.cc | 122 |
1 files changed, 119 insertions, 3 deletions
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 8877d607e92..c0842c48e4b 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -36,6 +36,122 @@ #define FIRST_NON_YN_FIELD 26 +time_t mysql_db_table_last_check= 0L; + +TABLE_FIELD_W_TYPE mysql_db_table_fields[MYSQL_DB_FIELD_COUNT] = { + { + {(char *) STRING_WITH_LEN("Host")}, + {(char *) STRING_WITH_LEN("char(60)")}, + {NULL, 0} + }, + { + {(char *) STRING_WITH_LEN("Db")}, + {(char *) STRING_WITH_LEN("char(64)")}, + {NULL, 0} + }, + { + {(char *) STRING_WITH_LEN("User")}, + {(char *) STRING_WITH_LEN("char(16)")}, + {NULL, 0} + }, + { + {(char *) STRING_WITH_LEN("Select_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Insert_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Update_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Delete_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Create_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Drop_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Grant_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("References_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Index_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Alter_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Create_tmp_table_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Lock_tables_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Create_view_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Show_view_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Create_routine_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Alter_routine_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Execute_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Event_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + }, + { + {(char *) STRING_WITH_LEN("Trigger_priv")}, + {(char *) STRING_WITH_LEN("enum('N','Y')")}, + {(char *) STRING_WITH_LEN("utf8")} + } +}; + + class acl_entry :public hash_filo_element { public: @@ -435,14 +551,14 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables) while (!(read_record_info.read_record(&read_record_info))) { ACL_DB db; - update_hostname(&db.host,get_field(&mem, table->field[0])); - db.db=get_field(&mem, table->field[1]); + update_hostname(&db.host,get_field(&mem, table->field[MYSQL_DB_FIELD_HOST])); + db.db=get_field(&mem, table->field[MYSQL_DB_FIELD_DB]); if (!db.db) { sql_print_warning("Found an entry in the 'db' table with empty database name; Skipped"); continue; } - db.user=get_field(&mem, table->field[2]); + db.user=get_field(&mem, table->field[MYSQL_DB_FIELD_USER]); if (check_no_resolve && hostname_requires_resolving(db.host.hostname)) { sql_print_warning("'db' entry '%s %s@%s' " |