Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Postgres/src/backend/catalog/   (Postgres Database Version 18.4©)  Datei vom 11.4.2026 mit Größe 6 kB image not shown  

Quelle  objectaccess.c

  Sprache: C
 

/* -------------------------------------------------------------------------
 *
 * 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, 0sizeof(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, 0sizeof(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, 0sizeof(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, 0sizeof(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, 0sizeof(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, 0sizeof(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, 0sizeof(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, 0sizeof(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=91 H=98 G=94

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet am  2026-08-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.