summaryrefslogtreecommitdiff
path: root/sql/sql_acl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_acl.cc')
-rw-r--r--sql/sql_acl.cc122
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' "