From f90cc269823ba5282341a197c7387f5ada6703a6 Mon Sep 17 00:00:00 2001 From: Robert Haas <rhaas@postgresql.org> Date: Wed, 6 Mar 2013 20:52:06 -0500 Subject: [PATCH] Code beautification for object-access hook machinery. KaiGai Kohei --- src/backend/catalog/Makefile | 3 +- src/backend/catalog/dependency.c | 10 +--- src/backend/catalog/heap.c | 10 +--- src/backend/catalog/index.c | 11 +--- src/backend/catalog/objectaccess.c | 63 ++++++++++++++++++++++ src/backend/catalog/pg_collation.c | 3 +- src/backend/catalog/pg_constraint.c | 3 +- src/backend/catalog/pg_conversion.c | 3 +- src/backend/catalog/pg_namespace.c | 3 +- src/backend/catalog/pg_operator.c | 6 +-- src/backend/catalog/pg_proc.c | 3 +- src/backend/catalog/pg_type.c | 6 +-- src/backend/commands/aggregatecmds.c | 1 + src/backend/commands/dbcommands.c | 12 +---- src/backend/commands/event_trigger.c | 3 +- src/backend/commands/extension.c | 3 +- src/backend/commands/foreigncmds.c | 9 ++-- src/backend/commands/functioncmds.c | 3 +- src/backend/commands/opclasscmds.c | 6 +-- src/backend/commands/proclang.c | 3 +- src/backend/commands/tablecmds.c | 3 +- src/backend/commands/tablespace.c | 12 +---- src/backend/commands/trigger.c | 3 +- src/backend/commands/tsearchcmds.c | 12 ++--- src/backend/commands/user.c | 12 +---- src/backend/rewrite/rewriteDefine.c | 3 +- src/backend/storage/large_object/inv_api.c | 3 +- src/backend/utils/init/globals.c | 7 --- src/include/catalog/objectaccess.h | 23 ++++++-- 29 files changed, 123 insertions(+), 119 deletions(-) create mode 100644 src/backend/catalog/objectaccess.c diff --git a/src/backend/catalog/Makefile b/src/backend/catalog/Makefile index df6da1f0d33..c4d3f3c1dcc 100644 --- a/src/backend/catalog/Makefile +++ b/src/backend/catalog/Makefile @@ -11,7 +11,8 @@ top_builddir = ../../.. include $(top_builddir)/src/Makefile.global OBJS = catalog.o dependency.o heap.o index.o indexing.o namespace.o aclchk.o \ - objectaddress.o pg_aggregate.o pg_collation.o pg_constraint.o pg_conversion.o \ + objectaccess.o objectaddress.o pg_aggregate.o pg_collation.o \ + pg_constraint.o pg_conversion.o \ pg_depend.o pg_enum.o pg_inherits.o pg_largeobject.o pg_namespace.o \ pg_operator.o pg_proc.o pg_range.o pg_db_role_setting.o pg_shdepend.o \ pg_type.o storage.o toasting.o diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index 32f05bbabb0..7b8e0246339 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -997,14 +997,8 @@ deleteOneObject(const ObjectAddress *object, Relation *depRel, int flags) HeapTuple tup; /* DROP hook of the objects being removed */ - if (object_access_hook) - { - ObjectAccessDrop drop_arg; - - drop_arg.dropflags = flags; - InvokeObjectAccessHook(OAT_DROP, object->classId, object->objectId, - object->objectSubId, &drop_arg); - } + InvokeObjectDropHookArg(object->classId, object->objectId, + object->objectSubId, flags); /* * Close depRel if we are doing a drop concurrently. The object deletion diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 0ecfc78ed04..04a927dd0c6 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -1293,15 +1293,7 @@ heap_create_with_catalog(const char *relname, } /* Post creation hook for new relation */ - if (object_access_hook) - { - ObjectAccessPostCreate post_create_args; - - memset(&post_create_args, 0, sizeof(ObjectAccessPostCreate)); - post_create_args.is_internal = is_internal; - (*object_access_hook)(OAT_POST_CREATE, RelationRelationId, - relid, 0, &post_create_args); - } + InvokeObjectPostCreateHookArg(RelationRelationId, relid, 0, is_internal); /* * Store any supplied constraints and defaults. diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 9b339292e49..33a18030b79 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -1028,15 +1028,8 @@ index_create(Relation heapRelation, } /* Post creation hook for new index */ - if (object_access_hook) - { - ObjectAccessPostCreate post_create_args; - - memset(&post_create_args, 0, sizeof(ObjectAccessPostCreate)); - post_create_args.is_internal = is_internal; - (*object_access_hook)(OAT_POST_CREATE, RelationRelationId, - indexRelationId, 0, &post_create_args); - } + InvokeObjectPostCreateHookArg(RelationRelationId, + indexRelationId, 0, is_internal); /* * Advance the command counter so that we can see the newly-entered diff --git a/src/backend/catalog/objectaccess.c b/src/backend/catalog/objectaccess.c new file mode 100644 index 00000000000..09f9db5aaf8 --- /dev/null +++ b/src/backend/catalog/objectaccess.c @@ -0,0 +1,63 @@ +/* ------------------------------------------------------------------------- + * + * objectaccess.c + * functions for object_access_hook on various events + * + * Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * ------------------------------------------------------------------------- + */ +#include "postgres.h" + +#include "catalog/objectaccess.h" + +/* + * Hook on object accesses. This is intended as infrastructure for security + * and logging plugins. + */ +object_access_hook_type object_access_hook = NULL; + +/* + * RunObjectPostCreateHook + * + * It is entrypoint of OAT_POST_CREATE event + */ +void +RunObjectPostCreateHook(Oid classId, Oid objectId, int subId, + bool is_internal) +{ + ObjectAccessPostCreate pc_arg; + + /* caller should check, but just in case... */ + Assert(object_access_hook != NULL); + + memset(&pc_arg, 0, sizeof(ObjectAccessPostCreate)); + pc_arg.is_internal = is_internal; + + (*object_access_hook)(OAT_POST_CREATE, + classId, objectId, subId, + (void *) &pc_arg); +} + +/* + * RunObjectDropHook + * + * It is entrypoint of OAT_DROP event + */ +void +RunObjectDropHook(Oid classId, Oid objectId, int subId, + int dropflags) +{ + ObjectAccessDrop drop_arg; + + /* caller should check, but just in case... */ + Assert(object_access_hook != NULL); + + memset(&drop_arg, 0, sizeof(ObjectAccessDrop)); + drop_arg.dropflags = dropflags; + + (*object_access_hook)(OAT_DROP, + classId, objectId, subId, + (void *) &drop_arg); +} diff --git a/src/backend/catalog/pg_collation.c b/src/backend/catalog/pg_collation.c index 46d6e27d2de..dd0050267f1 100644 --- a/src/backend/catalog/pg_collation.c +++ b/src/backend/catalog/pg_collation.c @@ -136,8 +136,7 @@ CollationCreate(const char *collname, Oid collnamespace, recordDependencyOnCurrentExtension(&myself, false); /* Post creation hook for new collation */ - InvokeObjectAccessHook(OAT_POST_CREATE, - CollationRelationId, oid, 0, NULL); + InvokeObjectPostCreateHook(CollationRelationId, oid, 0); heap_freetuple(tup); heap_close(rel, RowExclusiveLock); diff --git a/src/backend/catalog/pg_constraint.c b/src/backend/catalog/pg_constraint.c index 7179fa93922..547c7ee00c6 100644 --- a/src/backend/catalog/pg_constraint.c +++ b/src/backend/catalog/pg_constraint.c @@ -367,8 +367,7 @@ CreateConstraintEntry(const char *constraintName, } /* Post creation hook for new constraint */ - InvokeObjectAccessHook(OAT_POST_CREATE, - ConstraintRelationId, conOid, 0, NULL); + InvokeObjectPostCreateHook(ConstraintRelationId, conOid, 0); return conOid; } diff --git a/src/backend/catalog/pg_conversion.c b/src/backend/catalog/pg_conversion.c index 75eafd447d7..45d8e628085 100644 --- a/src/backend/catalog/pg_conversion.c +++ b/src/backend/catalog/pg_conversion.c @@ -136,8 +136,7 @@ ConversionCreate(const char *conname, Oid connamespace, recordDependencyOnCurrentExtension(&myself, false); /* Post creation hook for new conversion */ - InvokeObjectAccessHook(OAT_POST_CREATE, ConversionRelationId, - HeapTupleGetOid(tup), 0, NULL); + InvokeObjectPostCreateHook(ConversionRelationId, HeapTupleGetOid(tup), 0); heap_freetuple(tup); heap_close(rel, RowExclusiveLock); diff --git a/src/backend/catalog/pg_namespace.c b/src/backend/catalog/pg_namespace.c index 2948c64d455..8be0558511e 100644 --- a/src/backend/catalog/pg_namespace.c +++ b/src/backend/catalog/pg_namespace.c @@ -96,8 +96,7 @@ NamespaceCreate(const char *nspName, Oid ownerId, bool isTemp) recordDependencyOnCurrentExtension(&myself, false); /* Post creation hook for new schema */ - InvokeObjectAccessHook(OAT_POST_CREATE, - NamespaceRelationId, nspoid, 0, NULL); + InvokeObjectPostCreateHook(NamespaceRelationId, nspoid, 0); return nspoid; } diff --git a/src/backend/catalog/pg_operator.c b/src/backend/catalog/pg_operator.c index 7a9148850e7..f8d6bb0e34b 100644 --- a/src/backend/catalog/pg_operator.c +++ b/src/backend/catalog/pg_operator.c @@ -275,8 +275,7 @@ OperatorShellMake(const char *operatorName, heap_freetuple(tup); /* Post creation hook for new shell operator */ - InvokeObjectAccessHook(OAT_POST_CREATE, - OperatorRelationId, operatorObjectId, 0, NULL); + InvokeObjectPostCreateHook(OperatorRelationId, operatorObjectId, 0); /* * Make sure the tuple is visible for subsequent lookups/updates. @@ -544,8 +543,7 @@ OperatorCreate(const char *operatorName, makeOperatorDependencies(tup); /* Post creation hook for new operator */ - InvokeObjectAccessHook(OAT_POST_CREATE, - OperatorRelationId, operatorObjectId, 0, NULL); + InvokeObjectPostCreateHook(OperatorRelationId, operatorObjectId, 0); heap_close(pg_operator_desc, RowExclusiveLock); diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index 3570240bf66..0b70adc4795 100644 --- a/src/backend/catalog/pg_proc.c +++ b/src/backend/catalog/pg_proc.c @@ -661,8 +661,7 @@ ProcedureCreate(const char *procedureName, heap_freetuple(tup); /* Post creation hook for new function */ - InvokeObjectAccessHook(OAT_POST_CREATE, - ProcedureRelationId, retval, 0, NULL); + InvokeObjectPostCreateHook(ProcedureRelationId, retval, 0); heap_close(rel, RowExclusiveLock); diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c index 591714f175b..b044400d993 100644 --- a/src/backend/catalog/pg_type.c +++ b/src/backend/catalog/pg_type.c @@ -163,8 +163,7 @@ TypeShellMake(const char *typeName, Oid typeNamespace, Oid ownerId) false); /* Post creation hook for new shell type */ - InvokeObjectAccessHook(OAT_POST_CREATE, - TypeRelationId, typoid, 0, NULL); + InvokeObjectPostCreateHook(TypeRelationId, typoid, 0); /* * clean up and return the type-oid @@ -476,8 +475,7 @@ TypeCreate(Oid newTypeOid, rebuildDeps); /* Post creation hook for new type */ - InvokeObjectAccessHook(OAT_POST_CREATE, - TypeRelationId, typeObjectId, 0, NULL); + InvokeObjectPostCreateHook(TypeRelationId, typeObjectId, 0); /* * finish up diff --git a/src/backend/commands/aggregatecmds.c b/src/backend/commands/aggregatecmds.c index e25108192ef..d34a102ee61 100644 --- a/src/backend/commands/aggregatecmds.c +++ b/src/backend/commands/aggregatecmds.c @@ -29,6 +29,7 @@ #include "catalog/pg_aggregate.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" +#include "commands/alter.h" #include "commands/defrem.h" #include "miscadmin.h" #include "parser/parse_func.h" diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index 5b06af24a6c..76ef23a1f44 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -524,8 +524,7 @@ createdb(const CreatedbStmt *stmt) copyTemplateDependencies(src_dboid, dboid); /* Post creation hook for new database */ - InvokeObjectAccessHook(OAT_POST_CREATE, - DatabaseRelationId, dboid, 0, NULL); + InvokeObjectPostCreateHook(DatabaseRelationId, dboid, 0); /* * Force a checkpoint before starting the copy. This will force dirty @@ -816,14 +815,7 @@ dropdb(const char *dbname, bool missing_ok) dbname); /* DROP hook for the database being removed */ - if (object_access_hook) - { - ObjectAccessDrop drop_arg; - - memset(&drop_arg, 0, sizeof(ObjectAccessDrop)); - InvokeObjectAccessHook(OAT_DROP, - DatabaseRelationId, db_id, 0, &drop_arg); - } + InvokeObjectDropHook(DatabaseRelationId, db_id, 0); /* * Disallow dropping a DB that is marked istemplate. This is just to diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c index 596178fbda7..2c3b6bf1dfa 100644 --- a/src/backend/commands/event_trigger.c +++ b/src/backend/commands/event_trigger.c @@ -310,8 +310,7 @@ insert_event_trigger_tuple(char *trigname, char *eventname, Oid evtOwner, recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL); /* Post creation hook for new operator family */ - InvokeObjectAccessHook(OAT_POST_CREATE, - EventTriggerRelationId, trigoid, 0, NULL); + InvokeObjectPostCreateHook(EventTriggerRelationId, trigoid, 0); /* Close pg_event_trigger. */ heap_close(tgrel, RowExclusiveLock); diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c index c02101f95d4..6b7cb5bc842 100644 --- a/src/backend/commands/extension.c +++ b/src/backend/commands/extension.c @@ -1562,8 +1562,7 @@ InsertExtensionTuple(const char *extName, Oid extOwner, recordDependencyOn(&myself, &otherext, DEPENDENCY_NORMAL); } /* Post creation hook for new extension */ - InvokeObjectAccessHook(OAT_POST_CREATE, - ExtensionRelationId, extensionOid, 0, NULL); + InvokeObjectPostCreateHook(ExtensionRelationId, extensionOid, 0); return extensionOid; } diff --git a/src/backend/commands/foreigncmds.c b/src/backend/commands/foreigncmds.c index 7700e91c821..83cdf9e3c51 100644 --- a/src/backend/commands/foreigncmds.c +++ b/src/backend/commands/foreigncmds.c @@ -599,8 +599,7 @@ CreateForeignDataWrapper(CreateFdwStmt *stmt) recordDependencyOnCurrentExtension(&myself, false); /* Post creation hook for new foreign data wrapper */ - InvokeObjectAccessHook(OAT_POST_CREATE, - ForeignDataWrapperRelationId, fdwId, 0, NULL); + InvokeObjectPostCreateHook(ForeignDataWrapperRelationId, fdwId, 0); heap_close(rel, RowExclusiveLock); @@ -900,8 +899,7 @@ CreateForeignServer(CreateForeignServerStmt *stmt) recordDependencyOnCurrentExtension(&myself, false); /* Post creation hook for new foreign server */ - InvokeObjectAccessHook(OAT_POST_CREATE, - ForeignServerRelationId, srvId, 0, NULL); + InvokeObjectPostCreateHook(ForeignServerRelationId, srvId, 0); heap_close(rel, RowExclusiveLock); @@ -1145,8 +1143,7 @@ CreateUserMapping(CreateUserMappingStmt *stmt) recordDependencyOnCurrentExtension(&myself, false); /* Post creation hook for new user mapping */ - InvokeObjectAccessHook(OAT_POST_CREATE, - UserMappingRelationId, umId, 0, NULL); + InvokeObjectPostCreateHook(UserMappingRelationId, umId, 0); heap_close(rel, RowExclusiveLock); diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index 7b912332feb..fda379a75df 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -1558,8 +1558,7 @@ CreateCast(CreateCastStmt *stmt) recordDependencyOnCurrentExtension(&myself, false); /* Post creation hook for new cast */ - InvokeObjectAccessHook(OAT_POST_CREATE, - CastRelationId, castid, 0, NULL); + InvokeObjectPostCreateHook(CastRelationId, castid, 0); heap_freetuple(tuple); diff --git a/src/backend/commands/opclasscmds.c b/src/backend/commands/opclasscmds.c index 95b9a738fed..e9563fbfab4 100644 --- a/src/backend/commands/opclasscmds.c +++ b/src/backend/commands/opclasscmds.c @@ -309,8 +309,7 @@ CreateOpFamily(char *amname, char *opfname, Oid namespaceoid, Oid amoid) recordDependencyOnCurrentExtension(&myself, false); /* Post creation hook for new operator family */ - InvokeObjectAccessHook(OAT_POST_CREATE, - OperatorFamilyRelationId, opfamilyoid, 0, NULL); + InvokeObjectPostCreateHook(OperatorFamilyRelationId, opfamilyoid, 0); heap_close(rel, RowExclusiveLock); @@ -710,8 +709,7 @@ DefineOpClass(CreateOpClassStmt *stmt) recordDependencyOnCurrentExtension(&myself, false); /* Post creation hook for new operator class */ - InvokeObjectAccessHook(OAT_POST_CREATE, - OperatorClassRelationId, opclassoid, 0, NULL); + InvokeObjectPostCreateHook(OperatorClassRelationId, opclassoid, 0); heap_close(rel, RowExclusiveLock); diff --git a/src/backend/commands/proclang.c b/src/backend/commands/proclang.c index e6c6d4e5e92..1c98c3226d0 100644 --- a/src/backend/commands/proclang.c +++ b/src/backend/commands/proclang.c @@ -429,8 +429,7 @@ create_proc_lang(const char *languageName, bool replace, } /* Post creation hook for new procedural language */ - InvokeObjectAccessHook(OAT_POST_CREATE, - LanguageRelationId, myself.objectId, 0, NULL); + InvokeObjectPostCreateHook(LanguageRelationId, myself.objectId, 0); heap_close(rel, RowExclusiveLock); diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 2a55e025779..47b6233a80d 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -4514,8 +4514,7 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, heap_freetuple(reltup); /* Post creation hook for new attribute */ - InvokeObjectAccessHook(OAT_POST_CREATE, - RelationRelationId, myrelid, newattnum, NULL); + InvokeObjectPostCreateHook(RelationRelationId, myrelid, newattnum); heap_close(pgclass, RowExclusiveLock); diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c index 7cad0cc969d..dfcc829b85f 100644 --- a/src/backend/commands/tablespace.c +++ b/src/backend/commands/tablespace.c @@ -331,8 +331,7 @@ CreateTableSpace(CreateTableSpaceStmt *stmt) recordDependencyOnOwner(TableSpaceRelationId, tablespaceoid, ownerId); /* Post creation hook for new tablespace */ - InvokeObjectAccessHook(OAT_POST_CREATE, - TableSpaceRelationId, tablespaceoid, 0, NULL); + InvokeObjectPostCreateHook(TableSpaceRelationId, tablespaceoid, 0); create_tablespace_directories(location, tablespaceoid); @@ -439,14 +438,7 @@ DropTableSpace(DropTableSpaceStmt *stmt) tablespacename); /* DROP hook for the tablespace being removed */ - if (object_access_hook) - { - ObjectAccessDrop drop_arg; - - memset(&drop_arg, 0, sizeof(ObjectAccessDrop)); - InvokeObjectAccessHook(OAT_DROP, TableSpaceRelationId, - tablespaceoid, 0, &drop_arg); - } + InvokeObjectDropHook(TableSpaceRelationId, tablespaceoid, 0); /* * Remove the pg_tablespace tuple (this will roll back if we fail below) diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index c0322b7becb..f79cef508c1 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -742,8 +742,7 @@ CreateTrigger(CreateTrigStmt *stmt, const char *queryString, DEPENDENCY_NORMAL); /* Post creation hook for new trigger */ - InvokeObjectAccessHook(OAT_POST_CREATE, - TriggerRelationId, trigoid, 0, NULL); + InvokeObjectPostCreateHook(TriggerRelationId, trigoid, 0); /* Keep lock on target rel until end of xact */ heap_close(rel, NoLock); diff --git a/src/backend/commands/tsearchcmds.c b/src/backend/commands/tsearchcmds.c index 95377ac492d..821fdc6b31e 100644 --- a/src/backend/commands/tsearchcmds.c +++ b/src/backend/commands/tsearchcmds.c @@ -272,8 +272,7 @@ DefineTSParser(List *names, List *parameters) makeParserDependencies(tup); /* Post creation hook for new text search parser */ - InvokeObjectAccessHook(OAT_POST_CREATE, - TSParserRelationId, prsOid, 0, NULL); + InvokeObjectPostCreateHook(TSParserRelationId, prsOid, 0); heap_freetuple(tup); @@ -479,8 +478,7 @@ DefineTSDictionary(List *names, List *parameters) makeDictionaryDependencies(tup); /* Post creation hook for new text search dictionary */ - InvokeObjectAccessHook(OAT_POST_CREATE, - TSDictionaryRelationId, dictOid, 0, NULL); + InvokeObjectPostCreateHook(TSDictionaryRelationId, dictOid, 0); heap_freetuple(tup); @@ -796,8 +794,7 @@ DefineTSTemplate(List *names, List *parameters) makeTSTemplateDependencies(tup); /* Post creation hook for new text search template */ - InvokeObjectAccessHook(OAT_POST_CREATE, - TSTemplateRelationId, tmplOid, 0, NULL); + InvokeObjectPostCreateHook(TSTemplateRelationId, tmplOid, 0); heap_freetuple(tup); @@ -1092,8 +1089,7 @@ DefineTSConfiguration(List *names, List *parameters) makeConfigurationDependencies(tup, false, mapRel); /* Post creation hook for new text search configuration */ - InvokeObjectAccessHook(OAT_POST_CREATE, - TSConfigRelationId, cfgOid, 0, NULL); + InvokeObjectPostCreateHook(TSConfigRelationId, cfgOid, 0); heap_freetuple(tup); diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c index 5edb59af36b..93024163755 100644 --- a/src/backend/commands/user.c +++ b/src/backend/commands/user.c @@ -426,8 +426,7 @@ CreateRole(CreateRoleStmt *stmt) GetUserId(), false); /* Post creation hook for new role */ - InvokeObjectAccessHook(OAT_POST_CREATE, - AuthIdRelationId, roleid, 0, NULL); + InvokeObjectPostCreateHook(AuthIdRelationId, roleid, 0); /* * Close pg_authid, but keep lock till commit. @@ -968,14 +967,7 @@ DropRole(DropRoleStmt *stmt) errmsg("must be superuser to drop superusers"))); /* DROP hook for the role being removed */ - if (object_access_hook) - { - ObjectAccessDrop drop_arg; - - memset(&drop_arg, 0, sizeof(ObjectAccessDrop)); - InvokeObjectAccessHook(OAT_DROP, - AuthIdRelationId, roleid, 0, &drop_arg); - } + InvokeObjectDropHook(AuthIdRelationId, roleid, 0); /* * Lock the role, so nobody can add dependencies to her while we drop diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c index 89632661575..0e265db15c5 100644 --- a/src/backend/rewrite/rewriteDefine.c +++ b/src/backend/rewrite/rewriteDefine.c @@ -182,8 +182,7 @@ InsertRule(char *rulname, } /* Post creation hook for new rule */ - InvokeObjectAccessHook(OAT_POST_CREATE, - RewriteRelationId, rewriteObjectId, 0, NULL); + InvokeObjectPostCreateHook(RewriteRelationId, rewriteObjectId, 0); heap_close(pg_rewrite_desc, RowExclusiveLock); diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c index 9e4377d5631..b98110cd998 100644 --- a/src/backend/storage/large_object/inv_api.c +++ b/src/backend/storage/large_object/inv_api.c @@ -218,8 +218,7 @@ inv_create(Oid lobjId) lobjId_new, GetUserId()); /* Post creation hook for new large object */ - InvokeObjectAccessHook(OAT_POST_CREATE, - LargeObjectRelationId, lobjId_new, 0, NULL); + InvokeObjectPostCreateHook(LargeObjectRelationId, lobjId_new, 0); /* * Advance command counter to make new tuple visible to later operations. diff --git a/src/backend/utils/init/globals.c b/src/backend/utils/init/globals.c index f1f8b177f35..9f51929191d 100644 --- a/src/backend/utils/init/globals.c +++ b/src/backend/utils/init/globals.c @@ -18,7 +18,6 @@ */ #include "postgres.h" -#include "catalog/objectaccess.h" #include "libpq/pqcomm.h" #include "miscadmin.h" #include "storage/backendid.h" @@ -126,9 +125,3 @@ int VacuumCostBalance = 0; /* working state for vacuum */ bool VacuumCostActive = false; int GinFuzzySearchLimit = 0; - -/* - * Hook on object accesses. This is intended as infrastructure for security - * and logging plugins. - */ -object_access_hook_type object_access_hook = NULL; diff --git a/src/include/catalog/objectaccess.h b/src/include/catalog/objectaccess.h index 67c8c1b5e3f..b9bb1bcd2f5 100644 --- a/src/include/catalog/objectaccess.h +++ b/src/include/catalog/objectaccess.h @@ -28,6 +28,7 @@ typedef enum ObjectAccessType { OAT_POST_CREATE, OAT_DROP, + OAT_POST_ALTER, } ObjectAccessType; /* @@ -66,11 +67,27 @@ typedef void (*object_access_hook_type) (ObjectAccessType access, extern PGDLLIMPORT object_access_hook_type object_access_hook; -#define InvokeObjectAccessHook(access,classId,objectId,subId,arg) \ +extern void RunObjectPostCreateHook(Oid classId, Oid objectId, int subId, + bool is_internal); +extern void RunObjectDropHook(Oid classId, Oid objectId, int subId, + int dropflags); + +#define InvokeObjectPostCreateHook(classId,objectId,subId) \ + InvokeObjectPostCreateHookArg((classId),(objectId),(subId),false) +#define InvokeObjectPostCreateHookArg(classId,objectId,subId,is_internal) \ + do { \ + if (object_access_hook) \ + RunObjectPostCreateHook((classId),(objectId),(subId), \ + (is_internal)); \ + } while(0) + +#define InvokeObjectDropHook(classId,objectId,subId) \ + InvokeObjectDropHookArg((classId),(objectId),(subId),0) +#define InvokeObjectDropHookArg(classId,objectId,subId,dropflags) \ do { \ if (object_access_hook) \ - (*object_access_hook)((access),(classId), \ - (objectId),(subId),(arg)); \ + RunObjectDropHook((classId),(objectId),(subId), \ + (dropflags)); \ } while(0) #endif /* OBJECTACCESS_H */ -- GitLab