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

📄 acl.c

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 C
📖 第 1 页 / 共 5 页
字号:
 *		current_user is assumed */Datumhas_language_privilege_id(PG_FUNCTION_ARGS){	Oid			languageoid = PG_GETARG_OID(0);	text	   *priv_type_text = PG_GETARG_TEXT_P(1);	Oid			roleid;	AclMode		mode;	AclResult	aclresult;	roleid = GetUserId();	mode = convert_language_priv_string(priv_type_text);	aclresult = pg_language_aclcheck(languageoid, roleid, mode);	PG_RETURN_BOOL(aclresult == ACLCHECK_OK);}/* * has_language_privilege_id_name *		Check user privileges on a language given *		roleid, text languagename, and text priv name. */Datumhas_language_privilege_id_name(PG_FUNCTION_ARGS){	Oid			roleid = PG_GETARG_OID(0);	text	   *languagename = PG_GETARG_TEXT_P(1);	text	   *priv_type_text = PG_GETARG_TEXT_P(2);	Oid			languageoid;	AclMode		mode;	AclResult	aclresult;	languageoid = convert_language_name(languagename);	mode = convert_language_priv_string(priv_type_text);	aclresult = pg_language_aclcheck(languageoid, roleid, mode);	PG_RETURN_BOOL(aclresult == ACLCHECK_OK);}/* * has_language_privilege_id_id *		Check user privileges on a language given *		roleid, language oid, and text priv name. */Datumhas_language_privilege_id_id(PG_FUNCTION_ARGS){	Oid			roleid = PG_GETARG_OID(0);	Oid			languageoid = PG_GETARG_OID(1);	text	   *priv_type_text = PG_GETARG_TEXT_P(2);	AclMode		mode;	AclResult	aclresult;	mode = convert_language_priv_string(priv_type_text);	aclresult = pg_language_aclcheck(languageoid, roleid, mode);	PG_RETURN_BOOL(aclresult == ACLCHECK_OK);}/* *		Support routines for has_language_privilege family. *//* * Given a language name expressed as a string, look it up and return Oid */static Oidconvert_language_name(text *languagename){	char	   *langname;	Oid			oid;	langname = DatumGetCString(DirectFunctionCall1(textout,											 PointerGetDatum(languagename)));	oid = GetSysCacheOid(LANGNAME,						 CStringGetDatum(langname),						 0, 0, 0);	if (!OidIsValid(oid))		ereport(ERROR,				(errcode(ERRCODE_UNDEFINED_OBJECT),				 errmsg("language \"%s\" does not exist", langname)));	return oid;}/* * convert_language_priv_string *		Convert text string to AclMode value. */static AclModeconvert_language_priv_string(text *priv_type_text){	char	   *priv_type;	priv_type = DatumGetCString(DirectFunctionCall1(textout,										   PointerGetDatum(priv_type_text)));	/*	 * Return mode from priv_type string	 */	if (pg_strcasecmp(priv_type, "USAGE") == 0)		return ACL_USAGE;	if (pg_strcasecmp(priv_type, "USAGE WITH GRANT OPTION") == 0)		return ACL_GRANT_OPTION_FOR(ACL_USAGE);	ereport(ERROR,			(errcode(ERRCODE_INVALID_PARAMETER_VALUE),			 errmsg("unrecognized privilege type: \"%s\"", priv_type)));	return ACL_NO_RIGHTS;		/* keep compiler quiet */}/* * has_schema_privilege variants *		These are all named "has_schema_privilege" at the SQL level. *		They take various combinations of schema name, schema OID, *		user name, user OID, or implicit user = current_user. * *		The result is a boolean value: true if user has the indicated *		privilege, false if not. *//* * has_schema_privilege_name_name *		Check user privileges on a schema given *		name username, text schemaname, and text priv name. */Datumhas_schema_privilege_name_name(PG_FUNCTION_ARGS){	Name		username = PG_GETARG_NAME(0);	text	   *schemaname = PG_GETARG_TEXT_P(1);	text	   *priv_type_text = PG_GETARG_TEXT_P(2);	Oid			roleid;	Oid			schemaoid;	AclMode		mode;	AclResult	aclresult;	roleid = get_roleid_checked(NameStr(*username));	schemaoid = convert_schema_name(schemaname);	mode = convert_schema_priv_string(priv_type_text);	aclresult = pg_namespace_aclcheck(schemaoid, roleid, mode);	PG_RETURN_BOOL(aclresult == ACLCHECK_OK);}/* * has_schema_privilege_name *		Check user privileges on a schema given *		text schemaname and text priv name. *		current_user is assumed */Datumhas_schema_privilege_name(PG_FUNCTION_ARGS){	text	   *schemaname = PG_GETARG_TEXT_P(0);	text	   *priv_type_text = PG_GETARG_TEXT_P(1);	Oid			roleid;	Oid			schemaoid;	AclMode		mode;	AclResult	aclresult;	roleid = GetUserId();	schemaoid = convert_schema_name(schemaname);	mode = convert_schema_priv_string(priv_type_text);	aclresult = pg_namespace_aclcheck(schemaoid, roleid, mode);	PG_RETURN_BOOL(aclresult == ACLCHECK_OK);}/* * has_schema_privilege_name_id *		Check user privileges on a schema given *		name usename, schema oid, and text priv name. */Datumhas_schema_privilege_name_id(PG_FUNCTION_ARGS){	Name		username = PG_GETARG_NAME(0);	Oid			schemaoid = PG_GETARG_OID(1);	text	   *priv_type_text = PG_GETARG_TEXT_P(2);	Oid			roleid;	AclMode		mode;	AclResult	aclresult;	roleid = get_roleid_checked(NameStr(*username));	mode = convert_schema_priv_string(priv_type_text);	aclresult = pg_namespace_aclcheck(schemaoid, roleid, mode);	PG_RETURN_BOOL(aclresult == ACLCHECK_OK);}/* * has_schema_privilege_id *		Check user privileges on a schema given *		schema oid, and text priv name. *		current_user is assumed */Datumhas_schema_privilege_id(PG_FUNCTION_ARGS){	Oid			schemaoid = PG_GETARG_OID(0);	text	   *priv_type_text = PG_GETARG_TEXT_P(1);	Oid			roleid;	AclMode		mode;	AclResult	aclresult;	roleid = GetUserId();	mode = convert_schema_priv_string(priv_type_text);	aclresult = pg_namespace_aclcheck(schemaoid, roleid, mode);	PG_RETURN_BOOL(aclresult == ACLCHECK_OK);}/* * has_schema_privilege_id_name *		Check user privileges on a schema given *		roleid, text schemaname, and text priv name. */Datumhas_schema_privilege_id_name(PG_FUNCTION_ARGS){	Oid			roleid = PG_GETARG_OID(0);	text	   *schemaname = PG_GETARG_TEXT_P(1);	text	   *priv_type_text = PG_GETARG_TEXT_P(2);	Oid			schemaoid;	AclMode		mode;	AclResult	aclresult;	schemaoid = convert_schema_name(schemaname);	mode = convert_schema_priv_string(priv_type_text);	aclresult = pg_namespace_aclcheck(schemaoid, roleid, mode);	PG_RETURN_BOOL(aclresult == ACLCHECK_OK);}/* * has_schema_privilege_id_id *		Check user privileges on a schema given *		roleid, schema oid, and text priv name. */Datumhas_schema_privilege_id_id(PG_FUNCTION_ARGS){	Oid			roleid = PG_GETARG_OID(0);	Oid			schemaoid = PG_GETARG_OID(1);	text	   *priv_type_text = PG_GETARG_TEXT_P(2);	AclMode		mode;	AclResult	aclresult;	mode = convert_schema_priv_string(priv_type_text);	aclresult = pg_namespace_aclcheck(schemaoid, roleid, mode);	PG_RETURN_BOOL(aclresult == ACLCHECK_OK);}/* *		Support routines for has_schema_privilege family. *//* * Given a schema name expressed as a string, look it up and return Oid */static Oidconvert_schema_name(text *schemaname){	char	   *nspname;	Oid			oid;	nspname = DatumGetCString(DirectFunctionCall1(textout,											   PointerGetDatum(schemaname)));	oid = GetSysCacheOid(NAMESPACENAME,						 CStringGetDatum(nspname),						 0, 0, 0);	if (!OidIsValid(oid))		ereport(ERROR,				(errcode(ERRCODE_UNDEFINED_SCHEMA),				 errmsg("schema \"%s\" does not exist", nspname)));	return oid;}/* * convert_schema_priv_string *		Convert text string to AclMode value. */static AclModeconvert_schema_priv_string(text *priv_type_text){	char	   *priv_type;	priv_type = DatumGetCString(DirectFunctionCall1(textout,										   PointerGetDatum(priv_type_text)));	/*	 * Return mode from priv_type string	 */	if (pg_strcasecmp(priv_type, "CREATE") == 0)		return ACL_CREATE;	if (pg_strcasecmp(priv_type, "CREATE WITH GRANT OPTION") == 0)		return ACL_GRANT_OPTION_FOR(ACL_CREATE);	if (pg_strcasecmp(priv_type, "USAGE") == 0)		return ACL_USAGE;	if (pg_strcasecmp(priv_type, "USAGE WITH GRANT OPTION") == 0)		return ACL_GRANT_OPTION_FOR(ACL_USAGE);	ereport(ERROR,			(errcode(ERRCODE_INVALID_PARAMETER_VALUE),			 errmsg("unrecognized privilege type: \"%s\"", priv_type)));	return ACL_NO_RIGHTS;		/* keep compiler quiet */}/* * has_tablespace_privilege variants *		These are all named "has_tablespace_privilege" at the SQL level. *		They take various combinations of tablespace name, tablespace OID, *		user name, user OID, or implicit user = current_user. * *		The result is a boolean value: true if user has the indicated *		privilege, false if not. *//* * has_tablespace_privilege_name_name *		Check user privileges on a tablespace given *		name username, text tablespacename, and text priv name. */Datumhas_tablespace_privilege_name_name(PG_FUNCTION_ARGS){	Name		username = PG_GETARG_NAME(0);	text	   *tablespacename = PG_GETARG_TEXT_P(1);	text	   *priv_type_text = PG_GETARG_TEXT_P(2);	Oid			roleid;	Oid			tablespaceoid;	AclMode		mode;	AclResult	aclresult;	roleid = get_roleid_checked(NameStr(*username));	tablespaceoid = convert_tablespace_name(tablespacename);	mode = convert_tablespace_priv_string(priv_type_text);	aclresult = pg_tablespace_aclcheck(tablespaceoid, roleid, mode);	PG_RETURN_BOOL(aclresult == ACLCHECK_OK);}/* * has_tablespace_privilege_name *		Check user privileges on a tablespace given *		text tablespacename and text priv name. *		current_user is assumed */Datumhas_tablespace_privilege_name(PG_FUNCTION_ARGS){	text	   *tablespacename = PG_GETARG_TEXT_P(0);	text	   *priv_type_text = PG_GETARG_TEXT_P(1);	Oid			roleid;	Oid			tablespaceoid;	AclMode		mode;	AclResult	aclresult;	roleid = GetUserId();	tablespaceoid = convert_tablespace_name(tablespacename);	mode = convert_tablespace_priv_string(priv_type_text);	aclresult = pg_tablespace_aclcheck(tablespaceoid, roleid, mode);	PG_RETURN_BOOL(aclresult == ACLCHECK_OK);}/* * has_tablespace_privilege_name_id *		Check user privileges on a tablespace given *		name usename, tablespace oid, and text priv name. */Datumhas_tablespace_privilege_name_id(PG_FUNCTION_ARGS){	Name		username = PG_GETARG_NAME(0);	Oid			tablespaceoid = PG_GETARG_OID(1);	text	   *priv_type_text = PG_GETARG_TEXT_P(2);	Oid			roleid;	AclMode		mode;	AclResult	aclresult;	roleid = get_roleid_checked(NameStr(*username));	mode = convert_tablespace_priv_string(priv_type_text);	aclresult = pg_tablespace_aclcheck(tablespaceoid, roleid, mode);	PG_RETURN_BOOL(aclresult == ACLCHECK_OK);}/* * has_tablespace_privilege_id *		Check user privileges on a tablespace given *		tablespace oid, and text priv name. *		current_user is assumed */Datumhas_tablespace_privilege_id(PG_FUNCTION_ARGS){	Oid			tablespaceoid = PG_GETARG_OID(0);	text	   *priv_type_text = PG_GETARG_TEXT_P(1);	Oid			roleid;	AclMode		mode;	AclResult	aclresult;	roleid = GetUserId();	mode = convert_tablespace_priv_string(priv_type_text);	aclresult = pg_tablespace_aclcheck(tablespaceoid, roleid, mode);	PG_RETURN_BOOL(aclresult == ACLCHECK_OK);}/* * has_tablespace_privilege_id_name *		Check user privileges on a tablespace given *		roleid, text tablespacename, and text priv name. */Datumhas_tablespace_privilege_id_name(PG_FUNCTION_ARGS){	Oid			roleid = PG_GETARG_OID(0);	text	   *tablespacename = PG_GETARG_TEXT_P(1);	text	   *priv_type_text = PG_GETARG_TEXT_P(2);	Oid			tablespaceoid;	AclMode		mode;	AclResult	aclresult;	tablespaceoid = convert_tablespace_name(tablespacename);	mode = convert_tablespace_priv_string(priv_type_text);	aclresult = pg_tablespace_aclcheck(tablespaceoid, roleid, mode);	PG_RETURN_BOOL(aclresult == ACLCHECK_OK);}/* * has_tablespace_privilege_id_id *		Check user privileges on a tablespace given *		roleid, tablespace oid, and text priv name. */Datumhas_tablespace_privilege_id_id(PG_FUNCTION_ARGS){	Oid			roleid = PG_GETARG_OID(0);	Oid			tablespaceoid = PG_GETARG_OID(1);	text	   *priv_type_text = PG_GETARG_TEXT_P(2);	AclMode		mode;	AclResult	aclresult;	mode = convert_tablespace_priv_string(priv_type_text);	aclresult = pg_tablespace_aclcheck(tablespaceoid, roleid, mode);	PG_RETURN_BOOL(aclresult == ACLCHECK_OK);}/* *		Support routines for has_tablespace_privilege family. *//* * Given a tablespace name expressed as a string, look it up and return Oid */static Oidconvert_tablespace_name(text *tablespacename){	char	   *spcname;	Oid			oid;	spcname = DatumGetCString(DirectFunctionCall1(textout,										   PointerGetDatum(tablespacename)));	oid = get_tablespace_oid(spcname);	if (!OidIsValid(oid))		ereport(ERROR,				(errcode(ERRCODE_UNDEFINED_OBJECT),				 errmsg("tablespace \"%s\" does not exist", spcname)));	return oid;}/* * convert_tablespace_priv_string *		Convert text string to AclMode value. */static AclModeconvert_tablespace_priv_string(text *priv_type_text){	char	   *priv_typ

⌨️ 快捷键说明

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