@@ -4241,9 +4241,6 @@ recordDependencyOnNewAcl(Oid classId, Oid objectId, int32 objsubId,
4241
4241
*
4242
4242
* For the object passed in, this will record its ACL (if any) and the ACLs of
4243
4243
* any sub-objects (eg: columns) into pg_init_privs.
4244
- *
4245
- * Any new kinds of objects which have ACLs associated with them and can be
4246
- * added to an extension should be added to the if-else tree below.
4247
4244
*/
4248
4245
void
4249
4246
recordExtObjInitPriv (Oid objoid , Oid classoid )
@@ -4336,74 +4333,6 @@ recordExtObjInitPriv(Oid objoid, Oid classoid)
4336
4333
4337
4334
ReleaseSysCache (tuple );
4338
4335
}
4339
- /* pg_foreign_data_wrapper */
4340
- else if (classoid == ForeignDataWrapperRelationId )
4341
- {
4342
- Datum aclDatum ;
4343
- bool isNull ;
4344
- HeapTuple tuple ;
4345
-
4346
- tuple = SearchSysCache1 (FOREIGNDATAWRAPPEROID ,
4347
- ObjectIdGetDatum (objoid ));
4348
- if (!HeapTupleIsValid (tuple ))
4349
- elog (ERROR , "cache lookup failed for foreign data wrapper %u" ,
4350
- objoid );
4351
-
4352
- aclDatum = SysCacheGetAttr (FOREIGNDATAWRAPPEROID , tuple ,
4353
- Anum_pg_foreign_data_wrapper_fdwacl ,
4354
- & isNull );
4355
-
4356
- /* Add the record, if any, for the top-level object */
4357
- if (!isNull )
4358
- recordExtensionInitPrivWorker (objoid , classoid , 0 ,
4359
- DatumGetAclP (aclDatum ));
4360
-
4361
- ReleaseSysCache (tuple );
4362
- }
4363
- /* pg_foreign_server */
4364
- else if (classoid == ForeignServerRelationId )
4365
- {
4366
- Datum aclDatum ;
4367
- bool isNull ;
4368
- HeapTuple tuple ;
4369
-
4370
- tuple = SearchSysCache1 (FOREIGNSERVEROID , ObjectIdGetDatum (objoid ));
4371
- if (!HeapTupleIsValid (tuple ))
4372
- elog (ERROR , "cache lookup failed for foreign server %u" ,
4373
- objoid );
4374
-
4375
- aclDatum = SysCacheGetAttr (FOREIGNSERVEROID , tuple ,
4376
- Anum_pg_foreign_server_srvacl ,
4377
- & isNull );
4378
-
4379
- /* Add the record, if any, for the top-level object */
4380
- if (!isNull )
4381
- recordExtensionInitPrivWorker (objoid , classoid , 0 ,
4382
- DatumGetAclP (aclDatum ));
4383
-
4384
- ReleaseSysCache (tuple );
4385
- }
4386
- /* pg_language */
4387
- else if (classoid == LanguageRelationId )
4388
- {
4389
- Datum aclDatum ;
4390
- bool isNull ;
4391
- HeapTuple tuple ;
4392
-
4393
- tuple = SearchSysCache1 (LANGOID , ObjectIdGetDatum (objoid ));
4394
- if (!HeapTupleIsValid (tuple ))
4395
- elog (ERROR , "cache lookup failed for language %u" , objoid );
4396
-
4397
- aclDatum = SysCacheGetAttr (LANGOID , tuple , Anum_pg_language_lanacl ,
4398
- & isNull );
4399
-
4400
- /* Add the record, if any, for the top-level object */
4401
- if (!isNull )
4402
- recordExtensionInitPrivWorker (objoid , classoid , 0 ,
4403
- DatumGetAclP (aclDatum ));
4404
-
4405
- ReleaseSysCache (tuple );
4406
- }
4407
4336
/* pg_largeobject_metadata */
4408
4337
else if (classoid == LargeObjectMetadataRelationId )
4409
4338
{
@@ -4446,60 +4375,21 @@ recordExtObjInitPriv(Oid objoid, Oid classoid)
4446
4375
4447
4376
systable_endscan (scan );
4448
4377
}
4449
- /* pg_namespace */
4450
- else if (classoid == NamespaceRelationId )
4378
+ /* This will error on unsupported classoid. */
4379
+ else if (get_object_attnum_acl ( classoid ) != InvalidAttrNumber )
4451
4380
{
4452
4381
Datum aclDatum ;
4453
4382
bool isNull ;
4454
4383
HeapTuple tuple ;
4455
4384
4456
- tuple = SearchSysCache1 (NAMESPACEOID , ObjectIdGetDatum (objoid ));
4457
- if (!HeapTupleIsValid (tuple ))
4458
- elog (ERROR , "cache lookup failed for schema %u" , objoid );
4459
-
4460
- aclDatum = SysCacheGetAttr (NAMESPACEOID , tuple ,
4461
- Anum_pg_namespace_nspacl , & isNull );
4462
-
4463
- /* Add the record, if any, for the top-level object */
4464
- if (!isNull )
4465
- recordExtensionInitPrivWorker (objoid , classoid , 0 ,
4466
- DatumGetAclP (aclDatum ));
4467
-
4468
- ReleaseSysCache (tuple );
4469
- }
4470
- /* pg_proc */
4471
- else if (classoid == ProcedureRelationId )
4472
- {
4473
- Datum aclDatum ;
4474
- bool isNull ;
4475
- HeapTuple tuple ;
4476
-
4477
- tuple = SearchSysCache1 (PROCOID , ObjectIdGetDatum (objoid ));
4478
- if (!HeapTupleIsValid (tuple ))
4479
- elog (ERROR , "cache lookup failed for function %u" , objoid );
4480
-
4481
- aclDatum = SysCacheGetAttr (PROCOID , tuple , Anum_pg_proc_proacl ,
4482
- & isNull );
4483
-
4484
- /* Add the record, if any, for the top-level object */
4485
- if (!isNull )
4486
- recordExtensionInitPrivWorker (objoid , classoid , 0 ,
4487
- DatumGetAclP (aclDatum ));
4488
-
4489
- ReleaseSysCache (tuple );
4490
- }
4491
- /* pg_type */
4492
- else if (classoid == TypeRelationId )
4493
- {
4494
- Datum aclDatum ;
4495
- bool isNull ;
4496
- HeapTuple tuple ;
4497
-
4498
- tuple = SearchSysCache1 (TYPEOID , ObjectIdGetDatum (objoid ));
4385
+ tuple = SearchSysCache1 (get_object_catcache_oid (classoid ),
4386
+ ObjectIdGetDatum (objoid ));
4499
4387
if (!HeapTupleIsValid (tuple ))
4500
- elog (ERROR , "cache lookup failed for type %u" , objoid );
4388
+ elog (ERROR , "cache lookup failed for %s %u" ,
4389
+ get_object_class_descr (classoid ), objoid );
4501
4390
4502
- aclDatum = SysCacheGetAttr (TYPEOID , tuple , Anum_pg_type_typacl ,
4391
+ aclDatum = SysCacheGetAttr (get_object_catcache_oid (classoid ), tuple ,
4392
+ get_object_attnum_acl (classoid ),
4503
4393
& isNull );
4504
4394
4505
4395
/* Add the record, if any, for the top-level object */
@@ -4509,32 +4399,6 @@ recordExtObjInitPriv(Oid objoid, Oid classoid)
4509
4399
4510
4400
ReleaseSysCache (tuple );
4511
4401
}
4512
- else if (classoid == AccessMethodRelationId ||
4513
- classoid == CastRelationId ||
4514
- classoid == CollationRelationId ||
4515
- classoid == ConversionRelationId ||
4516
- classoid == EventTriggerRelationId ||
4517
- classoid == OperatorRelationId ||
4518
- classoid == OperatorClassRelationId ||
4519
- classoid == OperatorFamilyRelationId ||
4520
- classoid == TSConfigRelationId ||
4521
- classoid == TSDictionaryRelationId ||
4522
- classoid == TSParserRelationId ||
4523
- classoid == TSTemplateRelationId ||
4524
- classoid == TransformRelationId
4525
- )
4526
- {
4527
- /* no ACL for these object types, so do nothing. */
4528
- }
4529
-
4530
- /*
4531
- * complain if we are given a class OID for a class that extensions don't
4532
- * support or that we don't recognize.
4533
- */
4534
- else
4535
- {
4536
- elog (ERROR , "unrecognized or unsupported class OID: %u" , classoid );
4537
- }
4538
4402
}
4539
4403
4540
4404
/*
0 commit comments