Changeset: 830e1de7c33d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=830e1de7c33d
Modified Files:
sql/backends/monet5/sql.mx
sql/server/rel_schema.c
sql/test/BugTracker-2011/Tests/All
Branch: Dec2011
Log Message:
merge from Aug2011
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
@@ -1850,7 +1850,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);
}
@@ -1918,7 +1918,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);
}
@@ -2046,7 +2046,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) {
@@ -2091,7 +2091,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
@@ -797,7 +797,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 */
@@ -868,7 +868,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
@@ -60,3 +60,4 @@ Multiplication_and_cast.Bug-2923
like_or.Bug-2924
alter_table_add_column.Bug-2919
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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list