⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acl.h

📁 关系型数据库 Postgresql 6.5.2
💻 H
字号:
/*------------------------------------------------------------------------- * * acl.h *	  Definition of (and support for) access control list data structures. * * * Copyright (c) 1994, Regents of the University of California * * $Id: acl.h,v 1.20.2.1 1999/07/30 17:07:22 scrappy Exp $ * * NOTES *	  For backward-compatability purposes we have to allow there *	  to be a null ACL in a pg_class tuple.  This will be defined as *	  meaning "no protection" (i.e., old catalogs get old semantics). * *	  The AclItems in an ACL array are currently kept in sorted order. *	  Things will break hard if you change that without changing the *	  code wherever this is included. * *------------------------------------------------------------------------- */#ifndef ACL_H#define ACL_H#include "nodes/parsenodes.h"#include "utils/array.h"#include "utils/memutils.h"/* * AclId		system identifier for the user, group, etc. *				XXX currently UNIX uid for users... */typedef uint32 AclId;#define ACL_ID_WORLD	0		/* XXX only idtype should be checked *//* * AclIdType	tag that describes if the AclId is a user, group, etc. */typedef uint8 AclIdType;#define ACL_IDTYPE_WORLD		0x00#define ACL_IDTYPE_UID			0x01	/* user id - from pg_shadow */#define ACL_IDTYPE_GID			0x02	/* group id - from pg_group *//* * AclMode		the actual permissions *				XXX should probably use bit.h routines. *				XXX should probably also stuff the modechg cruft in the *					high bits, too. */typedef uint8 AclMode;#define ACL_NO			0		/* no permissions */#define ACL_AP			(1<<0)	/* append */#define ACL_RD			(1<<1)	/* read */#define ACL_WR			(1<<2)	/* write (append/delete/replace) */#define ACL_RU			(1<<3)	/* place rules */#define N_ACL_MODES		4#define ACL_MODECHG_ADD			1#define ACL_MODECHG_DEL			2#define ACL_MODECHG_EQL			3/* change this line if you want to set the default acl permission  */#define ACL_WORLD_DEFAULT		(ACL_NO)/* #define		ACL_WORLD_DEFAULT		(ACL_RD|ACL_WR|ACL_AP|ACL_RU) */#define ACL_OWNER_DEFAULT		(ACL_RD|ACL_WR|ACL_AP|ACL_RU)/* * AclItem */typedef struct AclItem{	AclId		ai_id;	AclIdType	ai_idtype;	AclMode		ai_mode;	/*	 *	This is actually type 'aclitem', and we want a fixed size for	 *	for all platforms, so we pad this with dummies.	 */	char		dummy1, dummy2;} AclItem;/* Note: if the size of AclItem changes,   change the aclitem typlen in pg_type.h *//* * The value of the first dimension-array element.	Since these arrays * always have a lower-bound of 0, this is the same as the number of * elements in the array. */#define ARR_DIM0(a) (((unsigned *) (((char *) a) + sizeof(ArrayType)))[0])/* * Acl			a one-dimensional POSTGRES array of AclItem */typedef ArrayType Acl;#define ACL_NUM(ACL)			ARR_DIM0(ACL)#define ACL_DAT(ACL)			((AclItem *) ARR_DATA_PTR(ACL))#define ACL_N_SIZE(N) \		((unsigned) (ARR_OVERHEAD(1) + ((N) * sizeof(AclItem))))#define ACL_SIZE(ACL)			ARR_SIZE(ACL)/* * IdList		a one-dimensional POSTGRES array of AclId */typedef ArrayType IdList;#define IDLIST_NUM(IDL)			ARR_DIM0(IDL)#define IDLIST_DAT(IDL)			((AclId *) ARR_DATA_PTR(IDL))#define IDLIST_N_SIZE(N) \		((unsigned) (ARR_OVERHEAD(1) + ((N) * sizeof(AclId))))#define IDLIST_SIZE(IDL)		ARR_SIZE(IDL)#define ACL_MODECHG_STR			"+-="	/* list of valid characters */#define ACL_MODECHG_ADD_CHR		'+'#define ACL_MODECHG_DEL_CHR		'-'#define ACL_MODECHG_EQL_CHR		'='#define ACL_MODE_STR			"arwR"	/* list of valid characters */#define ACL_MODE_AP_CHR			'a'#define ACL_MODE_RD_CHR			'r'#define ACL_MODE_WR_CHR			'w'#define ACL_MODE_RU_CHR			'R'/* result codes for pg_aclcheck */#define ACLCHECK_OK				  0#define ACLCHECK_NO_PRIV		  1#define ACLCHECK_NO_CLASS		  2#define ACLCHECK_NOT_OWNER		  3/* warning messages.  set these in aclchk.c. */extern char *aclcheck_error_strings[];/* * Enable ACL execution tracing and table dumps *//*#define ACLDEBUG_TRACE*//* * routines used internally (parser, etc.) */extern Acl *aclownerdefault(char *relname, AclId ownerid);extern Acl *acldefault(char *relname);extern Acl *aclinsert3(Acl *old_acl, AclItem *mod_aip, unsigned modechg);extern char *aclmakepriv(char *old_privlist, char new_priv);extern char *aclmakeuser(char *user_type, char *user);extern ChangeACLStmt *makeAclStmt(char *privs, List *rel_list, char *grantee,			char grant_or_revoke);/* * exported routines (from acl.c) */extern Acl *makeacl(int n);extern AclItem *aclitemin(char *s);extern char *aclitemout(AclItem *aip);extern Acl *aclinsert(Acl *old_acl, AclItem *mod_aip);extern Acl *aclremove(Acl *old_acl, AclItem *mod_aip);extern int32 aclcontains(Acl *acl, AclItem *aip);/* * prototypes for functions in aclchk.c */extern void ChangeAcl(char *relname, AclItem *mod_aip, unsigned modechg);extern AclId get_grosysid(char *groname);extern char *get_groname(AclId grosysid);extern int32 pg_aclcheck(char *relname, char *usename, AclMode mode);extern int32 pg_ownercheck(char *usename, char *value, int cacheid);extern int32 pg_func_ownercheck(char *usename, char *funcname,				   int nargs, Oid *arglist);extern int32 pg_aggr_ownercheck(char *usename, char *aggname,				   Oid basetypeID);#endif	 /* ACL_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -