mirror of
https://github.com/postgres/postgres.git
synced 2025-11-12 05:01:15 +03:00
Back out pg_shadow changes to allow create table and locking permissions.
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.78 2000/06/09 15:50:43 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.79 2000/06/12 03:40:29 momjian Exp $
|
||||
*
|
||||
* NOTES
|
||||
* The PortalExecutorHeapMemory crap needs to be eliminated
|
||||
@@ -30,7 +30,6 @@
|
||||
#include "commands/command.h"
|
||||
#include "executor/spi.h"
|
||||
#include "catalog/heap.h"
|
||||
#include "catalog/pg_shadow.h"
|
||||
#include "miscadmin.h"
|
||||
#include "optimizer/prep.h"
|
||||
#include "utils/acl.h"
|
||||
@@ -1212,21 +1211,6 @@ LockTableCommand(LockStmt *lockstmt)
|
||||
{
|
||||
Relation rel;
|
||||
int aclresult;
|
||||
HeapTuple tup;
|
||||
|
||||
|
||||
/* ----------
|
||||
* Check pg_shadow for global lock setting
|
||||
* ----------
|
||||
*/
|
||||
tup = SearchSysCacheTuple(SHADOWNAME, PointerGetDatum(GetPgUserName()), 0, 0, 0);
|
||||
|
||||
if (!HeapTupleIsValid(tup))
|
||||
elog(ERROR, "LOCK TABLE: look at pg_shadow failed");
|
||||
|
||||
if (!((Form_pg_shadow) GETSTRUCT(tup))->uselocktable)
|
||||
elog(ERROR, "LOCK TABLE: permission denied");
|
||||
|
||||
|
||||
rel = heap_openr(lockstmt->relname, NoLock);
|
||||
if (!RelationIsValid(rel))
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
*
|
||||
* IDENTIFICATION
|
||||
<<<<<<< creatinh.c
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.60 2000/06/09 15:50:43 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.61 2000/06/12 03:40:29 momjian Exp $
|
||||
=======
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.60 2000/06/09 15:50:43 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.61 2000/06/12 03:40:29 momjian Exp $
|
||||
>>>>>>> 1.58
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -26,10 +26,8 @@
|
||||
#include "catalog/pg_inherits.h"
|
||||
#include "catalog/pg_ipl.h"
|
||||
#include "catalog/pg_type.h"
|
||||
#include "catalog/pg_shadow.h"
|
||||
#include "commands/creatinh.h"
|
||||
#include "utils/syscache.h"
|
||||
#include "miscadmin.h"
|
||||
|
||||
/* ----------------
|
||||
* local stuff
|
||||
@@ -65,22 +63,6 @@ DefineRelation(CreateStmt *stmt, char relkind)
|
||||
int i;
|
||||
AttrNumber attnum;
|
||||
|
||||
if (!stmt->istemp) {
|
||||
HeapTuple tup;
|
||||
|
||||
/* ----------
|
||||
* Check pg_shadow for global createTable setting
|
||||
* ----------
|
||||
*/
|
||||
tup = SearchSysCacheTuple(SHADOWNAME, PointerGetDatum(GetPgUserName()), 0, 0, 0);
|
||||
|
||||
if (!HeapTupleIsValid(tup))
|
||||
elog(ERROR, "CREATE TABLE: look at pg_shadow failed");
|
||||
|
||||
if (!((Form_pg_shadow) GETSTRUCT(tup))->usecreatetable)
|
||||
elog(ERROR, "CREATE TABLE: permission denied");
|
||||
}
|
||||
|
||||
if (strlen(stmt->relname) >= NAMEDATALEN)
|
||||
elog(ERROR, "the relation name %s is >= %d characters long",
|
||||
stmt->relname, NAMEDATALEN);
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/user.c,v 1.59 2000/06/09 15:50:43 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/user.c,v 1.60 2000/06/12 03:40:29 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -250,10 +250,6 @@ CreateUser(CreateUserStmt *stmt)
|
||||
return;
|
||||
}
|
||||
|
||||
AssertState(BoolIsValid(stmt->createtable));
|
||||
new_record[Anum_pg_shadow_usecreatetable-1] = (Datum)(stmt->createtable);
|
||||
AssertState(BoolIsValid(stmt->locktable));
|
||||
new_record[Anum_pg_shadow_uselocktable-1] = (Datum)(stmt->locktable);
|
||||
/*
|
||||
* Build a tuple to insert
|
||||
*/
|
||||
@@ -267,8 +263,6 @@ CreateUser(CreateUserStmt *stmt)
|
||||
AssertState(BoolIsValid(stmt->createuser));
|
||||
new_record[Anum_pg_shadow_usesuper - 1] = (Datum) (stmt->createuser);
|
||||
/* superuser gets catupd right by default */
|
||||
new_record_nulls[Anum_pg_shadow_usecreatetable-1] = ' ';
|
||||
new_record_nulls[Anum_pg_shadow_uselocktable-1] = ' ';
|
||||
new_record[Anum_pg_shadow_usecatupd - 1] = (Datum) (stmt->createuser);
|
||||
|
||||
if (stmt->password)
|
||||
@@ -358,8 +352,7 @@ AlterUser(AlterUserStmt *stmt)
|
||||
|
||||
/* must be superuser or just want to change your own password */
|
||||
if (!superuser() &&
|
||||
!(stmt->createdb==0 && stmt->createuser==0 && stmt->createtable==0
|
||||
&& stmt->locktable==0 && !stmt->validUntil
|
||||
!(stmt->createdb == 0 && stmt->createuser == 0 && !stmt->validUntil
|
||||
&& stmt->password && strcmp(GetPgUserName(), stmt->user) == 0))
|
||||
elog(ERROR, "ALTER USER: permission denied");
|
||||
|
||||
@@ -387,32 +380,8 @@ AlterUser(AlterUserStmt *stmt)
|
||||
/*
|
||||
* Build a tuple to update, perusing the information just obtained
|
||||
*/
|
||||
|
||||
/* createtable */
|
||||
if (stmt->createtable == 0)
|
||||
{
|
||||
/* don't change */
|
||||
new_record[Anum_pg_shadow_usecreatetable-1] = heap_getattr(tuple, Anum_pg_shadow_usecreatetable, pg_shadow_dsc, &null);
|
||||
new_record_nulls[Anum_pg_shadow_usecreatetable-1] = null ? 'n' : ' ';
|
||||
}
|
||||
else
|
||||
{
|
||||
new_record[Anum_pg_shadow_usecreatetable-1] = (Datum)(stmt->createtable > 0 ? true : false);
|
||||
new_record_nulls[Anum_pg_shadow_usecreatetable-1] = ' ';
|
||||
}
|
||||
|
||||
/* locktable */
|
||||
if (stmt->locktable == 0)
|
||||
{
|
||||
/* don't change */
|
||||
new_record[Anum_pg_shadow_uselocktable-1] = heap_getattr(tuple, Anum_pg_shadow_uselocktable, pg_shadow_dsc, &null);
|
||||
new_record_nulls[Anum_pg_shadow_uselocktable-1] = null ? 'n' : ' ';
|
||||
}
|
||||
else
|
||||
{
|
||||
new_record[Anum_pg_shadow_uselocktable-1] = (Datum)(stmt->locktable > 0 ? true : false);
|
||||
new_record_nulls[Anum_pg_shadow_uselocktable-1] = ' ';
|
||||
}
|
||||
new_record[Anum_pg_shadow_usename - 1] = PointerGetDatum(namein(stmt->user));
|
||||
new_record_nulls[Anum_pg_shadow_usename - 1] = ' ';
|
||||
|
||||
/* sysid - leave as is */
|
||||
new_record[Anum_pg_shadow_usesysid - 1] = heap_getattr(tuple, Anum_pg_shadow_usesysid, pg_shadow_dsc, &null);
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.171 2000/06/09 15:50:44 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.172 2000/06/12 03:40:30 momjian Exp $
|
||||
*
|
||||
* HISTORY
|
||||
* AUTHOR DATE MAJOR EVENT
|
||||
@@ -145,8 +145,7 @@ static void doNegateFloat(Value *v);
|
||||
%type <ival> opt_lock, lock_type
|
||||
%type <boolean> opt_lmode, opt_force
|
||||
|
||||
%type <ival> user_createdb_clause, user_createuser_clause, user_createtable_clause,
|
||||
user_locktable_clause
|
||||
%type <ival> user_createdb_clause, user_createuser_clause
|
||||
%type <str> user_passwd_clause
|
||||
%type <ival> sysid_clause
|
||||
%type <str> user_valid_clause
|
||||
@@ -340,14 +339,14 @@ static void doNegateFloat(Value *v);
|
||||
*/
|
||||
%token ABORT_TRANS, ACCESS, AFTER, AGGREGATE, ANALYZE,
|
||||
BACKWARD, BEFORE, BINARY, BIT,
|
||||
CACHE, CLUSTER, COMMENT, COPY, CREATEDB, CREATETABLE, CREATEUSER, CYCLE,
|
||||
CACHE, CLUSTER, COMMENT, COPY, CREATEDB, CREATEUSER, CYCLE,
|
||||
DATABASE, DELIMITERS, DO,
|
||||
EACH, ENCODING, EXCLUSIVE, EXPLAIN, EXTEND,
|
||||
FORCE, FORWARD, FUNCTION, HANDLER,
|
||||
INCREMENT, INDEX, INHERITS, INSTEAD, ISNULL,
|
||||
LANCOMPILER, LIMIT, LISTEN, LOAD, LOCATION, LOCK_P, LOCKTABLE,
|
||||
LANCOMPILER, LIMIT, LISTEN, LOAD, LOCATION, LOCK_P,
|
||||
MAXVALUE, MINVALUE, MODE, MOVE,
|
||||
NEW, NOCREATEDB, NOCREATETABLE, NOCREATEUSER, NOLOCKTABLE, NONE, NOTHING, NOTIFY, NOTNULL,
|
||||
NEW, NOCREATEDB, NOCREATEUSER, NONE, NOTHING, NOTIFY, NOTNULL,
|
||||
OFFSET, OIDS, OPERATOR, PASSWORD, PROCEDURAL,
|
||||
REINDEX, RENAME, RESET, RETURNS, ROW, RULE,
|
||||
SEQUENCE, SERIAL, SETOF, SHARE, SHOW, START, STATEMENT, STDIN, STDOUT, SYSID,
|
||||
@@ -474,37 +473,32 @@ stmt : AlterTableStmt
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
CreateUserStmt: CREATE USER UserId user_createdb_clause user_createuser_clause
|
||||
user_createtable_clause user_locktable_clause user_group_clause
|
||||
CreateUserStmt: CREATE USER UserId
|
||||
user_createdb_clause user_createuser_clause user_group_clause
|
||||
user_valid_clause
|
||||
{
|
||||
CreateUserStmt *n = makeNode(CreateUserStmt);
|
||||
n->user = $3;
|
||||
n->sysid = -1;
|
||||
n->sysid = -1;
|
||||
n->password = NULL;
|
||||
n->createdb = $4 == +1 ? true : false;
|
||||
n->createuser = $5 == +1 ? true : false;
|
||||
n->createtable = $6 == +1 ? true : false;
|
||||
n->locktable = $7 == +1 ? true : false;
|
||||
n->groupElts = $8;
|
||||
n->validUntil = $9;
|
||||
n->groupElts = $6;
|
||||
n->validUntil = $7;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| CREATE USER UserId WITH sysid_clause user_passwd_clause
|
||||
user_createdb_clause user_createuser_clause
|
||||
user_createtable_clause user_locktable_clause user_group_clause
|
||||
user_createdb_clause user_createuser_clause user_group_clause
|
||||
user_valid_clause
|
||||
{
|
||||
CreateUserStmt *n = makeNode(CreateUserStmt);
|
||||
n->user = $3;
|
||||
n->sysid = $5;
|
||||
n->sysid = $5;
|
||||
n->password = $6;
|
||||
n->createdb = $7 == +1 ? true : false;
|
||||
n->createuser = $8 == +1 ? true : false;
|
||||
n->createtable = $9 == +1 ? true : false;
|
||||
n->locktable = $10 == +1 ? true : false;
|
||||
n->groupElts = $11;
|
||||
n->validUntil = $12;
|
||||
n->groupElts = $9;
|
||||
n->validUntil = $10;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
;
|
||||
@@ -516,32 +510,27 @@ CreateUserStmt: CREATE USER UserId user_createdb_clause user_createuser_clause
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
AlterUserStmt: ALTER USER UserId user_createdb_clause user_createuser_clause
|
||||
user_createtable_clause user_locktable_clause user_valid_clause
|
||||
AlterUserStmt: ALTER USER UserId user_createdb_clause
|
||||
user_createuser_clause user_valid_clause
|
||||
{
|
||||
AlterUserStmt *n = makeNode(AlterUserStmt);
|
||||
n->user = $3;
|
||||
n->password = NULL;
|
||||
n->createdb = $4;
|
||||
n->createuser = $5;
|
||||
n->createtable = $6;
|
||||
n->locktable = $7;
|
||||
n->validUntil = $8;
|
||||
n->validUntil = $6;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| ALTER USER UserId WITH PASSWORD Sconst
|
||||
user_createdb_clause user_createuser_clause
|
||||
user_createtable_clause user_locktable_clause
|
||||
user_valid_clause
|
||||
user_createdb_clause
|
||||
user_createuser_clause user_valid_clause
|
||||
{
|
||||
AlterUserStmt *n = makeNode(AlterUserStmt);
|
||||
n->user = $3;
|
||||
n->password = $6;
|
||||
n->createdb = $7;
|
||||
n->createuser = $8;
|
||||
n->createtable = $9;
|
||||
n->locktable = $10;
|
||||
n->validUntil = $11;
|
||||
n->validUntil = $9;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
;
|
||||
@@ -584,22 +573,6 @@ user_createuser_clause: CREATEUSER { $$ = +1; }
|
||||
| /*EMPTY*/ { $$ = 0; }
|
||||
;
|
||||
|
||||
user_createtable_clause: CREATETABLE { $$ = +1; }
|
||||
| NOCREATETABLE { $$ = -1; }
|
||||
| /*EMPTY*/ {
|
||||
/* EMPTY is default = CREATETABLE */
|
||||
$$ = +1;
|
||||
}
|
||||
;
|
||||
|
||||
user_locktable_clause: LOCKTABLE { $$ = +1; }
|
||||
| NOLOCKTABLE { $$ = -1; }
|
||||
| /*EMPTY*/ {
|
||||
/* EMPTY is default = LOCKTABLE */
|
||||
$$ = +1;
|
||||
}
|
||||
;
|
||||
|
||||
user_list: user_list ',' UserId
|
||||
{
|
||||
$$ = lcons((void*)makeString($3), $1);
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
*
|
||||
* IDENTIFICATION
|
||||
<<<<<<< keywords.c
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.75 2000/06/09 15:50:45 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.76 2000/06/12 03:40:30 momjian Exp $
|
||||
=======
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.75 2000/06/09 15:50:45 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.76 2000/06/12 03:40:30 momjian Exp $
|
||||
>>>>>>> 1.73
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -75,7 +75,6 @@ static ScanKeyword ScanKeywords[] = {
|
||||
{"copy", COPY},
|
||||
{"create", CREATE},
|
||||
{"createdb", CREATEDB},
|
||||
{"createtable", CREATETABLE},
|
||||
{"createuser", CREATEUSER},
|
||||
{"cross", CROSS},
|
||||
{"current_date", CURRENT_DATE},
|
||||
@@ -156,7 +155,6 @@ static ScanKeyword ScanKeywords[] = {
|
||||
{"local", LOCAL},
|
||||
{"location", LOCATION},
|
||||
{"lock", LOCK_P},
|
||||
{"locktable", LOCKTABLE},
|
||||
{"match", MATCH},
|
||||
{"maxvalue", MAXVALUE},
|
||||
{"minute", MINUTE_P},
|
||||
@@ -172,9 +170,7 @@ static ScanKeyword ScanKeywords[] = {
|
||||
{"next", NEXT},
|
||||
{"no", NO},
|
||||
{"nocreatedb", NOCREATEDB},
|
||||
{"nocreatetable", NOCREATETABLE},
|
||||
{"nocreateuser", NOCREATEUSER},
|
||||
{"nolocktable", NOLOCKTABLE},
|
||||
{"none", NONE},
|
||||
{"not", NOT},
|
||||
{"nothing", NOTHING},
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/tcop/pquery.c,v 1.33 2000/06/09 15:50:46 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/tcop/pquery.c,v 1.34 2000/06/12 03:40:40 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -20,9 +20,6 @@
|
||||
#include "executor/executor.h"
|
||||
#include "tcop/pquery.h"
|
||||
#include "utils/ps_status.h"
|
||||
#include "catalog/pg_shadow.h"
|
||||
#include "miscadmin.h"
|
||||
#include "utils/syscache.h"
|
||||
|
||||
static char *CreateOperationTag(int operationType);
|
||||
static void ProcessQueryDesc(QueryDesc *queryDesc, Node *limoffset,
|
||||
@@ -253,23 +250,6 @@ ProcessQueryDesc(QueryDesc *queryDesc, Node *limoffset, Node *limcount)
|
||||
else if (parseTree->into != NULL)
|
||||
{
|
||||
/* select into table */
|
||||
|
||||
if (!parseTree->isTemp) {
|
||||
HeapTuple tup;
|
||||
|
||||
/* ----------
|
||||
* Check pg_shadow for global createTable setting
|
||||
* ----------
|
||||
*/
|
||||
tup = SearchSysCacheTuple(SHADOWNAME, PointerGetDatum(GetPgUserName()), 0, 0, 0);
|
||||
|
||||
if (!HeapTupleIsValid(tup))
|
||||
elog(ERROR, "ProcessQueryDesc: look at pg_shadow failed");
|
||||
|
||||
if (!((Form_pg_shadow) GETSTRUCT(tup))->usecreatetable)
|
||||
elog(ERROR, "SELECT INTO TABLE: permission denied");
|
||||
}
|
||||
|
||||
isRetrieveIntoRelation = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user