Changeset: e87b49ae6227 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e87b49ae6227 Modified Files: sql/backends/monet5/sql.mx sql/server/rel_schema.c sql/test/BugTracker-2011/Tests/All sql/test/BugTracker-2011/Tests/user_create_temp_table.Bug-2916.SQL.py Branch: Aug2011 Log Message:
allow local temps to be created by any body (is al session local schema) diffs (121 lines): diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx --- a/sql/backends/monet5/sql.mx +++ b/sql/backends/monet5/sql.mx @@ -1800,7 +1800,7 @@ create_table_or_view( mvc *sql, char *sn if (mvc_bind_table(sql, s, t->base.name)) { char *cd = (temp == SQL_DECLARED_TABLE)?"DECLARE":"CREATE"; return sql_message("%s TABLE: name '%s' already in use", cd, t->base.name); - } else if (temp != SQL_DECLARED_TABLE &&!schema_privs(sql->role_id, s)){ + } else if (temp != SQL_DECLARED_TABLE && (!schema_privs(sql->role_id, s) && !(isTempSchema(s) && temp == SQL_LOCAL_TEMP))){ return sql_message("CREATE TABLE: insufficient privileges for user '%s' in schema '%s'", stack_get_string(sql, "current_user"), s->base.name); } @@ -1868,7 +1868,7 @@ alter_table( mvc *sql, char *sname, sql_ if ((nt = mvc_bind_table(sql, s, t->base.name)) == NULL) { return sql_message("ALTER TABLE: no such table '%s'", t->base.name); - } else if (!schema_privs(sql->role_id, s)){ + } else if (!schema_privs(sql->role_id, s) && !(isTempSchema(s) && t->persistence == SQL_LOCAL_TEMP)){ return sql_message("ALTER TABLE: insufficient privileges for user '%s' in schema '%s'", stack_get_string(sql, "current_user"), s->base.name); } @@ -1996,7 +1996,7 @@ drop_table(mvc *sql, char *sname, char * return sql_message("DROP TABLE: cannot drop VIEW '%s'", tname); } else if (t->system) { return sql_message("DROP TABLE: cannot drop system table '%s'", tname); - } else if (!schema_privs(sql->role_id, s)) { + } else if (!schema_privs(sql->role_id, s) && !(isTempSchema(s) && t->persistence == SQL_LOCAL_TEMP)){ return sql_message("DROP TABLE: access denied for %s to schema ;'%s'", stack_get_string(sql, "current_user"), s->base.name); } if ( !drop_action && t->keys.set) { @@ -2041,7 +2041,7 @@ drop_view(mvc *sql, char *sname, char *t t = mvc_bind_table(sql, ss, tname); - if (!schema_privs(sql->role_id, ss)) { + if (!schema_privs(sql->role_id, ss) && !(isTempSchema(ss) && t && t->persistence == SQL_LOCAL_TEMP)){ return sql_message("DROP VIEW: access denied for %s to schema '%s'", stack_get_string(sql, "current_user"), ss->base.name); } else if (!t) { return sql_message("DROP VIEW: unknown view '%s'", tname); diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c --- a/sql/server/rel_schema.c +++ b/sql/server/rel_schema.c @@ -795,7 +795,7 @@ rel_create_table(mvc *sql, sql_schema *s if (mvc_bind_table(sql, s, name)) { char *cd = (temp == SQL_DECLARED_TABLE)?"DECLARE":"CREATE"; return sql_error(sql, 02, "%s TABLE: name '%s' already in use", cd, name); - } else if (temp != SQL_DECLARED_TABLE &&!schema_privs(sql->role_id, s)){ + } else if (temp != SQL_DECLARED_TABLE && (!schema_privs(sql->role_id, s) && !(isTempSchema(s) && temp == SQL_LOCAL_TEMP))){ return sql_error(sql, 02, "CREATE TABLE: insufficient privileges for user '%s' in schema '%s'", stack_get_string(sql, "current_user"), s->base.name); } else if (table_elements_or_subquery->token == SQL_CREATE_TABLE) { /* table element list */ @@ -864,7 +864,7 @@ rel_create_view(mvc *sql, sql_schema *ss if (create && mvc_bind_table(sql, s, name) != NULL) { return sql_error(sql, 02, "CREATE VIEW: name '%s' already in use", name); - } else if (create && !schema_privs(sql->role_id, s)) { + } else if (create && (!schema_privs(sql->role_id, s) && !(isTempSchema(s) && persistent == SQL_LOCAL_TEMP))) { return sql_error(sql, 02, "CREATE VIEW: access denied for %s to schema ;'%s'", stack_get_string(sql, "current_user"), s->base.name); } else if (query) { char emode = sql->emode; diff --git a/sql/test/BugTracker-2011/Tests/All b/sql/test/BugTracker-2011/Tests/All --- a/sql/test/BugTracker-2011/Tests/All +++ b/sql/test/BugTracker-2011/Tests/All @@ -59,3 +59,4 @@ sqltables.Bug-2921 Multiplication_and_cast.Bug-2923 like_or.Bug-2924 update_with_count.Bug-2928 +user_create_temp_table.Bug-2916 diff --git a/sql/test/BugTracker-2011/Tests/user_create_temp_table.Bug-2916.SQL.py b/sql/test/BugTracker-2011/Tests/user_create_temp_table.Bug-2916.SQL.py new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2011/Tests/user_create_temp_table.Bug-2916.SQL.py @@ -0,0 +1,48 @@ +import os, sys +try: + from MonetDBtesting import process +except ImportError: + import process + +c = process.client('sql', + args = ['-s', '''CREATE USER "testuser" WITH PASSWORD \'password\' NAME \'Test User\' SCHEMA "sys";''' ], + stdout = process.PIPE, + stderr = process.PIPE) +out, err = c.communicate() +if out: + sys.stdout.write(out) +if err: + sys.stderr.write(err) + +c = process.client('sql', + args = ['-s', 'CREATE GLOBAL TEMPORARY TABLE TempTable (i int);' ], + user = 'testuser', passwd = 'password', + stdout = process.PIPE, + stderr = process.PIPE) +out, err = c.communicate() +if out: + sys.stdout.write(out) +if err: + sys.stderr.write(err) + +c = process.client('sql', + args = ['-s', 'CREATE LOCAL TEMPORARY TABLE TempTable (i int); '], + user = 'testuser', passwd = 'password', + stdout = process.PIPE, + stderr = process.PIPE) +out, err = c.communicate() +if out: + sys.stdout.write(out) +if err: + sys.stderr.write(err) + +# undo damage +c = process.client('sql', + args = ['-s', '''DROP USER "testuser"'''], + stdout = process.PIPE, + stderr = process.PIPE) +out, err = c.communicate() +if out: + sys.stdout.write(out) +if err: + sys.stderr.write(err) _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list