diff options
-rw-r--r-- | src/backend/catalog/aclchk.c | 152 |
1 files changed, 8 insertions, 144 deletions
diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c index 7cb2faa1873..c4232344aab 100644 --- a/src/backend/catalog/aclchk.c +++ b/src/backend/catalog/aclchk.c @@ -4241,9 +4241,6 @@ recordDependencyOnNewAcl(Oid classId, Oid objectId, int32 objsubId, * * For the object passed in, this will record its ACL (if any) and the ACLs of * any sub-objects (eg: columns) into pg_init_privs. - * - * Any new kinds of objects which have ACLs associated with them and can be - * added to an extension should be added to the if-else tree below. */ void recordExtObjInitPriv(Oid objoid, Oid classoid) @@ -4336,74 +4333,6 @@ recordExtObjInitPriv(Oid objoid, Oid classoid) ReleaseSysCache(tuple); } - /* pg_foreign_data_wrapper */ - else if (classoid == ForeignDataWrapperRelationId) - { - Datum aclDatum; - bool isNull; - HeapTuple tuple; - - tuple = SearchSysCache1(FOREIGNDATAWRAPPEROID, - ObjectIdGetDatum(objoid)); - if (!HeapTupleIsValid(tuple)) - elog(ERROR, "cache lookup failed for foreign data wrapper %u", - objoid); - - aclDatum = SysCacheGetAttr(FOREIGNDATAWRAPPEROID, tuple, - Anum_pg_foreign_data_wrapper_fdwacl, - &isNull); - - /* Add the record, if any, for the top-level object */ - if (!isNull) - recordExtensionInitPrivWorker(objoid, classoid, 0, - DatumGetAclP(aclDatum)); - - ReleaseSysCache(tuple); - } - /* pg_foreign_server */ - else if (classoid == ForeignServerRelationId) - { - Datum aclDatum; - bool isNull; - HeapTuple tuple; - - tuple = SearchSysCache1(FOREIGNSERVEROID, ObjectIdGetDatum(objoid)); - if (!HeapTupleIsValid(tuple)) - elog(ERROR, "cache lookup failed for foreign server %u", - objoid); - - aclDatum = SysCacheGetAttr(FOREIGNSERVEROID, tuple, - Anum_pg_foreign_server_srvacl, - &isNull); - - /* Add the record, if any, for the top-level object */ - if (!isNull) - recordExtensionInitPrivWorker(objoid, classoid, 0, - DatumGetAclP(aclDatum)); - - ReleaseSysCache(tuple); - } - /* pg_language */ - else if (classoid == LanguageRelationId) - { - Datum aclDatum; - bool isNull; - HeapTuple tuple; - - tuple = SearchSysCache1(LANGOID, ObjectIdGetDatum(objoid)); - if (!HeapTupleIsValid(tuple)) - elog(ERROR, "cache lookup failed for language %u", objoid); - - aclDatum = SysCacheGetAttr(LANGOID, tuple, Anum_pg_language_lanacl, - &isNull); - - /* Add the record, if any, for the top-level object */ - if (!isNull) - recordExtensionInitPrivWorker(objoid, classoid, 0, - DatumGetAclP(aclDatum)); - - ReleaseSysCache(tuple); - } /* pg_largeobject_metadata */ else if (classoid == LargeObjectMetadataRelationId) { @@ -4446,60 +4375,21 @@ recordExtObjInitPriv(Oid objoid, Oid classoid) systable_endscan(scan); } - /* pg_namespace */ - else if (classoid == NamespaceRelationId) + /* This will error on unsupported classoid. */ + else if (get_object_attnum_acl(classoid) != InvalidAttrNumber) { Datum aclDatum; bool isNull; HeapTuple tuple; - tuple = SearchSysCache1(NAMESPACEOID, ObjectIdGetDatum(objoid)); - if (!HeapTupleIsValid(tuple)) - elog(ERROR, "cache lookup failed for schema %u", objoid); - - aclDatum = SysCacheGetAttr(NAMESPACEOID, tuple, - Anum_pg_namespace_nspacl, &isNull); - - /* Add the record, if any, for the top-level object */ - if (!isNull) - recordExtensionInitPrivWorker(objoid, classoid, 0, - DatumGetAclP(aclDatum)); - - ReleaseSysCache(tuple); - } - /* pg_proc */ - else if (classoid == ProcedureRelationId) - { - Datum aclDatum; - bool isNull; - HeapTuple tuple; - - tuple = SearchSysCache1(PROCOID, ObjectIdGetDatum(objoid)); - if (!HeapTupleIsValid(tuple)) - elog(ERROR, "cache lookup failed for function %u", objoid); - - aclDatum = SysCacheGetAttr(PROCOID, tuple, Anum_pg_proc_proacl, - &isNull); - - /* Add the record, if any, for the top-level object */ - if (!isNull) - recordExtensionInitPrivWorker(objoid, classoid, 0, - DatumGetAclP(aclDatum)); - - ReleaseSysCache(tuple); - } - /* pg_type */ - else if (classoid == TypeRelationId) - { - Datum aclDatum; - bool isNull; - HeapTuple tuple; - - tuple = SearchSysCache1(TYPEOID, ObjectIdGetDatum(objoid)); + tuple = SearchSysCache1(get_object_catcache_oid(classoid), + ObjectIdGetDatum(objoid)); if (!HeapTupleIsValid(tuple)) - elog(ERROR, "cache lookup failed for type %u", objoid); + elog(ERROR, "cache lookup failed for %s %u", + get_object_class_descr(classoid), objoid); - aclDatum = SysCacheGetAttr(TYPEOID, tuple, Anum_pg_type_typacl, + aclDatum = SysCacheGetAttr(get_object_catcache_oid(classoid), tuple, + get_object_attnum_acl(classoid), &isNull); /* Add the record, if any, for the top-level object */ @@ -4509,32 +4399,6 @@ recordExtObjInitPriv(Oid objoid, Oid classoid) ReleaseSysCache(tuple); } - else if (classoid == AccessMethodRelationId || - classoid == CastRelationId || - classoid == CollationRelationId || - classoid == ConversionRelationId || - classoid == EventTriggerRelationId || - classoid == OperatorRelationId || - classoid == OperatorClassRelationId || - classoid == OperatorFamilyRelationId || - classoid == TSConfigRelationId || - classoid == TSDictionaryRelationId || - classoid == TSParserRelationId || - classoid == TSTemplateRelationId || - classoid == TransformRelationId - ) - { - /* no ACL for these object types, so do nothing. */ - } - - /* - * complain if we are given a class OID for a class that extensions don't - * support or that we don't recognize. - */ - else - { - elog(ERROR, "unrecognized or unsupported class OID: %u", classoid); - } } /* |