Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  objectaccess.c  Sprache: unbekannt

 
/* -------------------------------------------------------------------------
 *
 * objectaccess.c
 *  functions for object_access_hook on various events
 *
 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * -------------------------------------------------------------------------
 */

#include "postgres.h"

#include "catalog/objectaccess.h"
#include "catalog/pg_class.h"
#include "catalog/pg_namespace.h"
#include "catalog/pg_proc.h"

/*
 * Hook on object accesses.  This is intended as infrastructure for security
 * and logging plugins.
 */

object_access_hook_type object_access_hook = NULL;
object_access_hook_type_str object_access_hook_str = NULL;


/*
 * RunObjectPostCreateHook
 *
 * OAT_POST_CREATE object ID based event hook entrypoint
 */

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,
         &pc_arg);
}

/*
 * RunObjectDropHook
 *
 * OAT_DROP object ID based event hook entrypoint
 */

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,
         &drop_arg);
}

/*
 * RunObjectTruncateHook
 *
 * OAT_TRUNCATE object ID based event hook entrypoint
 */

void
RunObjectTruncateHook(Oid objectId)
{
 /* caller should check, but just in case... */
 Assert(object_access_hook != NULL);

 (*object_access_hook) (OAT_TRUNCATE,
         RelationRelationId, objectId, 0,
         NULL);
}

/*
 * RunObjectPostAlterHook
 *
 * OAT_POST_ALTER object ID based event hook entrypoint
 */

void
RunObjectPostAlterHook(Oid classId, Oid objectId, int subId,
        Oid auxiliaryId, bool is_internal)
{
 ObjectAccessPostAlter pa_arg;

 /* caller should check, but just in case... */
 Assert(object_access_hook != NULL);

 memset(&pa_arg, 0, sizeof(ObjectAccessPostAlter));
 pa_arg.auxiliary_id = auxiliaryId;
 pa_arg.is_internal = is_internal;

 (*object_access_hook) (OAT_POST_ALTER,
         classId, objectId, subId,
         &pa_arg);
}

/*
 * RunNamespaceSearchHook
 *
 * OAT_NAMESPACE_SEARCH object ID based event hook entrypoint
 */

bool
RunNamespaceSearchHook(Oid objectId, bool ereport_on_violation)
{
 ObjectAccessNamespaceSearch ns_arg;

 /* caller should check, but just in case... */
 Assert(object_access_hook != NULL);

 memset(&ns_arg, 0, sizeof(ObjectAccessNamespaceSearch));
 ns_arg.ereport_on_violation = ereport_on_violation;
 ns_arg.result = true;

 (*object_access_hook) (OAT_NAMESPACE_SEARCH,
         NamespaceRelationId, objectId, 0,
         &ns_arg);

 return ns_arg.result;
}

/*
 * RunFunctionExecuteHook
 *
 * OAT_FUNCTION_EXECUTE object ID based event hook entrypoint
 */

void
RunFunctionExecuteHook(Oid objectId)
{
 /* caller should check, but just in case... */
 Assert(object_access_hook != NULL);

 (*object_access_hook) (OAT_FUNCTION_EXECUTE,
         ProcedureRelationId, objectId, 0,
         NULL);
}

/* String versions */


/*
 * RunObjectPostCreateHookStr
 *
 * OAT_POST_CREATE object name based event hook entrypoint
 */

void
RunObjectPostCreateHookStr(Oid classId, const char *objectName, int subId,
         bool is_internal)
{
 ObjectAccessPostCreate pc_arg;

 /* caller should check, but just in case... */
 Assert(object_access_hook_str != NULL);

 memset(&pc_arg, 0, sizeof(ObjectAccessPostCreate));
 pc_arg.is_internal = is_internal;

 (*object_access_hook_str) (OAT_POST_CREATE,
          classId, objectName, subId,
          &pc_arg);
}

/*
 * RunObjectDropHookStr
 *
 * OAT_DROP object name based event hook entrypoint
 */

void
RunObjectDropHookStr(Oid classId, const char *objectName, int subId,
      int dropflags)
{
 ObjectAccessDrop drop_arg;

 /* caller should check, but just in case... */
 Assert(object_access_hook_str != NULL);

 memset(&drop_arg, 0, sizeof(ObjectAccessDrop));
 drop_arg.dropflags = dropflags;

 (*object_access_hook_str) (OAT_DROP,
          classId, objectName, subId,
          &drop_arg);
}

/*
 * RunObjectTruncateHookStr
 *
 * OAT_TRUNCATE object name based event hook entrypoint
 */

void
RunObjectTruncateHookStr(const char *objectName)
{
 /* caller should check, but just in case... */
 Assert(object_access_hook_str != NULL);

 (*object_access_hook_str) (OAT_TRUNCATE,
          RelationRelationId, objectName, 0,
          NULL);
}

/*
 * RunObjectPostAlterHookStr
 *
 * OAT_POST_ALTER object name based event hook entrypoint
 */

void
RunObjectPostAlterHookStr(Oid classId, const char *objectName, int subId,
        Oid auxiliaryId, bool is_internal)
{
 ObjectAccessPostAlter pa_arg;

 /* caller should check, but just in case... */
 Assert(object_access_hook_str != NULL);

 memset(&pa_arg, 0, sizeof(ObjectAccessPostAlter));
 pa_arg.auxiliary_id = auxiliaryId;
 pa_arg.is_internal = is_internal;

 (*object_access_hook_str) (OAT_POST_ALTER,
          classId, objectName, subId,
          &pa_arg);
}

/*
 * RunNamespaceSearchHookStr
 *
 * OAT_NAMESPACE_SEARCH object name based event hook entrypoint
 */

bool
RunNamespaceSearchHookStr(const char *objectName, bool ereport_on_violation)
{
 ObjectAccessNamespaceSearch ns_arg;

 /* caller should check, but just in case... */
 Assert(object_access_hook_str != NULL);

 memset(&ns_arg, 0, sizeof(ObjectAccessNamespaceSearch));
 ns_arg.ereport_on_violation = ereport_on_violation;
 ns_arg.result = true;

 (*object_access_hook_str) (OAT_NAMESPACE_SEARCH,
          NamespaceRelationId, objectName, 0,
          &ns_arg);

 return ns_arg.result;
}

/*
 * RunFunctionExecuteHookStr
 *
 * OAT_FUNCTION_EXECUTE object name based event hook entrypoint
 */

void
RunFunctionExecuteHookStr(const char *objectName)
{
 /* caller should check, but just in case... */
 Assert(object_access_hook_str != NULL);

 (*object_access_hook_str) (OAT_FUNCTION_EXECUTE,
          ProcedureRelationId, objectName, 0,
          NULL);
}

Messung V0.5 in Prozent
C=93 H=94 G=93

[zur Elbe Produktseite wechseln0.21QuellennavigatorsAnalyse erneut starten2026-09-28]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

letze Version des Elbe Quellennavigators


Jenseits des Üblichen ....
    

Besucher

Besucher

Statistik
#Sources=1126864
#Domains=1897691