1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-02 09:02:37 +03:00

Replace pg_shadow and pg_group by new role-capable catalogs pg_authid

and pg_auth_members.  There are still many loose ends to finish in this
patch (no documentation, no regression tests, no pg_dump support for
instance).  But I'm going to commit it now anyway so that Alvaro can
make some progress on shared dependencies.  The catalog changes should
be pretty much done.
This commit is contained in:
Tom Lane
2005-06-28 05:09:14 +00:00
parent 977530d8da
commit 7762619e95
96 changed files with 3338 additions and 3240 deletions

View File

@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/cache/lsyscache.c,v 1.125 2005/05/01 18:56:19 tgl Exp $
* $PostgreSQL: pgsql/src/backend/utils/cache/lsyscache.c,v 1.126 2005/06/28 05:09:01 tgl Exp $
*
* NOTES
* Eventually, the index information should go through here, too.
@ -24,8 +24,6 @@
#include "catalog/pg_opclass.h"
#include "catalog/pg_operator.h"
#include "catalog/pg_proc.h"
#include "catalog/pg_shadow.h"
#include "catalog/pg_group.h"
#include "catalog/pg_statistic.h"
#include "catalog/pg_type.h"
#include "nodes/makefuncs.h"
@ -2010,66 +2008,35 @@ get_namespace_name(Oid nspid)
return NULL;
}
/* ---------- PG_SHADOW CACHE ---------- */
/* ---------- PG_AUTHID CACHE ---------- */
/*
* get_usesysid
*
* Given a user name, look up the user's sysid.
* Raises an error if no such user (rather than returning zero,
* which might possibly be a valid usesysid).
*
* Note: the type of usesysid is currently int4, but may change to Oid
* someday. It'd be reasonable to return zero on failure if we were
* using Oid ...
* get_roleid
* Given a role name, look up the role's OID.
* Returns InvalidOid if no such role.
*/
AclId
get_usesysid(const char *username)
Oid
get_roleid(const char *rolname)
{
AclId userId;
HeapTuple userTup;
userTup = SearchSysCache(SHADOWNAME,
PointerGetDatum(username),
0, 0, 0);
if (!HeapTupleIsValid(userTup))
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_OBJECT),
errmsg("user \"%s\" does not exist", username)));
userId = ((Form_pg_shadow) GETSTRUCT(userTup))->usesysid;
ReleaseSysCache(userTup);
return userId;
return GetSysCacheOid(AUTHNAME,
PointerGetDatum(rolname),
0, 0, 0);
}
/*
* get_grosysid
*
* Given a group name, look up the group's sysid.
* Raises an error if no such group (rather than returning zero,
* which might possibly be a valid grosysid).
*
* get_roleid_checked
* Given a role name, look up the role's OID.
* ereports if no such role.
*/
AclId
get_grosysid(char *groname)
Oid
get_roleid_checked(const char *rolname)
{
AclId groupId;
HeapTuple groupTup;
Oid roleid;
groupTup = SearchSysCache(GRONAME,
PointerGetDatum(groname),
0, 0, 0);
if (!HeapTupleIsValid(groupTup))
roleid = get_roleid(rolname);
if (!OidIsValid(roleid))
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_OBJECT),
errmsg("group \"%s\" does not exist", groname)));
groupId = ((Form_pg_group) GETSTRUCT(groupTup))->grosysid;
ReleaseSysCache(groupTup);
return groupId;
errmsg("role \"%s\" does not exist", rolname)));
return roleid;
}

View File

@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/cache/syscache.c,v 1.99 2005/05/11 01:26:02 neilc Exp $
* $PostgreSQL: pgsql/src/backend/utils/cache/syscache.c,v 1.100 2005/06/28 05:09:01 tgl Exp $
*
* NOTES
* These routines allow the parser/planner/executor to perform
@ -27,9 +27,10 @@
#include "catalog/pg_aggregate.h"
#include "catalog/pg_amop.h"
#include "catalog/pg_amproc.h"
#include "catalog/pg_authid.h"
#include "catalog/pg_auth_members.h"
#include "catalog/pg_cast.h"
#include "catalog/pg_conversion.h"
#include "catalog/pg_group.h"
#include "catalog/pg_index.h"
#include "catalog/pg_inherits.h"
#include "catalog/pg_language.h"
@ -38,7 +39,6 @@
#include "catalog/pg_operator.h"
#include "catalog/pg_proc.h"
#include "catalog/pg_rewrite.h"
#include "catalog/pg_shadow.h"
#include "catalog/pg_statistic.h"
#include "catalog/pg_type.h"
#include "utils/catcache.h"
@ -172,6 +172,46 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
{AuthMemRelationId, /* AUTHMEMMEMROLE */
AuthMemMemRoleIndexId,
0,
2,
{
Anum_pg_auth_members_member,
Anum_pg_auth_members_roleid,
0,
0
}},
{AuthMemRelationId, /* AUTHMEMROLEMEM */
AuthMemRoleMemIndexId,
0,
2,
{
Anum_pg_auth_members_roleid,
Anum_pg_auth_members_member,
0,
0
}},
{AuthIdRelationId, /* AUTHNAME */
AuthIdRolnameIndexId,
0,
1,
{
Anum_pg_authid_rolname,
0,
0,
0
}},
{AuthIdRelationId, /* AUTHOID */
AuthIdOidIndexId,
0,
1,
{
ObjectIdAttributeNumber,
0,
0,
0
}},
{
CastRelationId, /* CASTSOURCETARGET */
CastSourceTargetIndexId,
@ -233,26 +273,6 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
{GroupRelationId, /* GRONAME */
GroupNameIndexId,
0,
1,
{
Anum_pg_group_groname,
0,
0,
0
}},
{GroupRelationId, /* GROSYSID */
GroupSysidIndexId,
0,
1,
{
Anum_pg_group_grosysid,
0,
0,
0
}},
{IndexRelationId, /* INDEXRELID */
IndexRelidIndexId,
Anum_pg_index_indrelid,
@ -383,26 +403,6 @@ static const struct cachedesc cacheinfo[] = {
0,
0
}},
{ShadowRelationId, /* SHADOWNAME */
ShadowNameIndexId,
0,
1,
{
Anum_pg_shadow_usename,
0,
0,
0
}},
{ShadowRelationId, /* SHADOWSYSID */
ShadowSysidIndexId,
0,
1,
{
Anum_pg_shadow_usesysid,
0,
0,
0
}},
{StatisticRelationId, /* STATRELATT */
StatisticRelidAttnumIndexId,
Anum_pg_statistic_starelid,