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:
73
src/backend/utils/cache/lsyscache.c
vendored
73
src/backend/utils/cache/lsyscache.c
vendored
@ -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;
|
||||
}
|
||||
|
||||
|
86
src/backend/utils/cache/syscache.c
vendored
86
src/backend/utils/cache/syscache.c
vendored
@ -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,
|
||||
|
Reference in New Issue
Block a user