PostgreSQL Source Code git master
test_oat_hooks.c File Reference
#include "postgres.h"
#include "access/parallel.h"
#include "catalog/dependency.h"
#include "catalog/objectaccess.h"
#include "executor/executor.h"
#include "fmgr.h"
#include "miscadmin.h"
#include "tcop/utility.h"
Include dependency graph for test_oat_hooks.c:

Go to the source code of this file.

Functions

static void REGRESS_object_access_hook_str (ObjectAccessType access, Oid classId, const char *objName, int subId, void *arg)
 
static void REGRESS_object_access_hook (ObjectAccessType access, Oid classId, Oid objectId, int subId, void *arg)
 
static bool REGRESS_exec_check_perms (List *rangeTabls, List *rteperminfos, bool do_abort)
 
static void REGRESS_utility_command (PlannedStmt *pstmt, const char *queryString, bool readOnlyTree, ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, DestReceiver *dest, QueryCompletion *qc)
 
static char * accesstype_to_string (ObjectAccessType access, int subId)
 
static char * accesstype_arg_to_string (ObjectAccessType access, void *arg)
 
void _PG_init (void)
 
static void emit_audit_message (const char *type, const char *hook, char *action, char *objName)
 
static void audit_attempt (const char *hook, char *action, char *objName)
 
static void audit_success (const char *hook, char *action, char *objName)
 
static void audit_failure (const char *hook, char *action, char *objName)
 

Variables

 PG_MODULE_MAGIC
 
static bool REGRESS_deny_set_variable = false
 
static bool REGRESS_deny_alter_system = false
 
static bool REGRESS_deny_object_access = false
 
static bool REGRESS_deny_exec_perms = false
 
static bool REGRESS_deny_utility_commands = false
 
static bool REGRESS_audit = false
 
static bool REGRESS_userset_variable1 = false
 
static bool REGRESS_userset_variable2 = false
 
static bool REGRESS_suset_variable1 = false
 
static bool REGRESS_suset_variable2 = false
 
static object_access_hook_type next_object_access_hook = NULL
 
static object_access_hook_type_str next_object_access_hook_str = NULL
 
static ExecutorCheckPerms_hook_type next_exec_check_perms_hook = NULL
 
static ProcessUtility_hook_type next_ProcessUtility_hook = NULL
 

Function Documentation

◆ _PG_init()

void _PG_init ( void  )

Definition at line 74 of file test_oat_hooks.c.

75{
76 /*
77 * test_oat_hooks.deny_set_variable = (on|off)
78 */
79 DefineCustomBoolVariable("test_oat_hooks.deny_set_variable",
80 "Deny non-superuser set permissions",
81 NULL,
83 false,
86 NULL,
87 NULL,
88 NULL);
89
90 /*
91 * test_oat_hooks.deny_alter_system = (on|off)
92 */
93 DefineCustomBoolVariable("test_oat_hooks.deny_alter_system",
94 "Deny non-superuser alter system set permissions",
95 NULL,
97 false,
100 NULL,
101 NULL,
102 NULL);
103
104 /*
105 * test_oat_hooks.deny_object_access = (on|off)
106 */
107 DefineCustomBoolVariable("test_oat_hooks.deny_object_access",
108 "Deny non-superuser object access permissions",
109 NULL,
111 false,
112 PGC_SUSET,
114 NULL,
115 NULL,
116 NULL);
117
118 /*
119 * test_oat_hooks.deny_exec_perms = (on|off)
120 */
121 DefineCustomBoolVariable("test_oat_hooks.deny_exec_perms",
122 "Deny non-superuser exec permissions",
123 NULL,
125 false,
126 PGC_SUSET,
128 NULL,
129 NULL,
130 NULL);
131
132 /*
133 * test_oat_hooks.deny_utility_commands = (on|off)
134 */
135 DefineCustomBoolVariable("test_oat_hooks.deny_utility_commands",
136 "Deny non-superuser utility commands",
137 NULL,
139 false,
140 PGC_SUSET,
142 NULL,
143 NULL,
144 NULL);
145
146 /*
147 * test_oat_hooks.audit = (on|off)
148 */
149 DefineCustomBoolVariable("test_oat_hooks.audit",
150 "Turn on/off debug audit messages",
151 NULL,
153 false,
154 PGC_SUSET,
156 NULL,
157 NULL,
158 NULL);
159
160 /*
161 * test_oat_hooks.user_var{1,2} = (on|off)
162 */
163 DefineCustomBoolVariable("test_oat_hooks.user_var1",
164 "Dummy parameter settable by public",
165 NULL,
167 false,
170 NULL,
171 NULL,
172 NULL);
173
174 DefineCustomBoolVariable("test_oat_hooks.user_var2",
175 "Dummy parameter settable by public",
176 NULL,
178 false,
181 NULL,
182 NULL,
183 NULL);
184
185 /*
186 * test_oat_hooks.super_var{1,2} = (on|off)
187 */
188 DefineCustomBoolVariable("test_oat_hooks.super_var1",
189 "Dummy parameter settable by superuser",
190 NULL,
192 false,
193 PGC_SUSET,
195 NULL,
196 NULL,
197 NULL);
198
199 DefineCustomBoolVariable("test_oat_hooks.super_var2",
200 "Dummy parameter settable by superuser",
201 NULL,
203 false,
204 PGC_SUSET,
206 NULL,
207 NULL,
208 NULL);
209
210 MarkGUCPrefixReserved("test_oat_hooks");
211
212 /* Object access hook */
215
216 /* Object access hook str */
219
220 /* DML permission check */
223
224 /* ProcessUtility hook */
227}
ExecutorCheckPerms_hook_type ExecutorCheckPerms_hook
Definition: execMain.c:73
void DefineCustomBoolVariable(const char *name, const char *short_desc, const char *long_desc, bool *valueAddr, bool bootValue, GucContext context, int flags, GucBoolCheckHook check_hook, GucBoolAssignHook assign_hook, GucShowHook show_hook)
Definition: guc.c:5132
void MarkGUCPrefixReserved(const char *className)
Definition: guc.c:5279
@ PGC_SUSET
Definition: guc.h:74
@ PGC_USERSET
Definition: guc.h:75
#define GUC_NOT_IN_SAMPLE
Definition: guc.h:217
object_access_hook_type object_access_hook
Definition: objectaccess.c:22
object_access_hook_type_str object_access_hook_str
Definition: objectaccess.c:23
static bool REGRESS_suset_variable1
static bool REGRESS_deny_exec_perms
static bool REGRESS_deny_object_access
static void REGRESS_utility_command(PlannedStmt *pstmt, const char *queryString, bool readOnlyTree, ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, DestReceiver *dest, QueryCompletion *qc)
static ExecutorCheckPerms_hook_type next_exec_check_perms_hook
static ProcessUtility_hook_type next_ProcessUtility_hook
static bool REGRESS_deny_set_variable
static bool REGRESS_userset_variable2
static bool REGRESS_deny_alter_system
static void REGRESS_object_access_hook(ObjectAccessType access, Oid classId, Oid objectId, int subId, void *arg)
static bool REGRESS_exec_check_perms(List *rangeTabls, List *rteperminfos, bool do_abort)
static bool REGRESS_userset_variable1
static bool REGRESS_deny_utility_commands
static object_access_hook_type next_object_access_hook
static object_access_hook_type_str next_object_access_hook_str
static bool REGRESS_suset_variable2
static void REGRESS_object_access_hook_str(ObjectAccessType access, Oid classId, const char *objName, int subId, void *arg)
static bool REGRESS_audit
ProcessUtility_hook_type ProcessUtility_hook
Definition: utility.c:70

References DefineCustomBoolVariable(), ExecutorCheckPerms_hook, GUC_NOT_IN_SAMPLE, MarkGUCPrefixReserved(), next_exec_check_perms_hook, next_object_access_hook, next_object_access_hook_str, next_ProcessUtility_hook, object_access_hook, object_access_hook_str, PGC_SUSET, PGC_USERSET, ProcessUtility_hook, REGRESS_audit, REGRESS_deny_alter_system, REGRESS_deny_exec_perms, REGRESS_deny_object_access, REGRESS_deny_set_variable, REGRESS_deny_utility_commands, REGRESS_exec_check_perms(), REGRESS_object_access_hook(), REGRESS_object_access_hook_str(), REGRESS_suset_variable1, REGRESS_suset_variable2, REGRESS_userset_variable1, REGRESS_userset_variable2, and REGRESS_utility_command().

◆ accesstype_arg_to_string()

static char * accesstype_arg_to_string ( ObjectAccessType  access,
void *  arg 
)
static

Definition at line 457 of file test_oat_hooks.c.

458{
459 if (arg == NULL)
460 return pstrdup("extra info null");
461
462 switch (access)
463 {
464 case OAT_POST_CREATE:
465 {
467
468 return pstrdup(pc_arg->is_internal ? "internal" : "explicit");
469 }
470 break;
471 case OAT_DROP:
472 {
473 ObjectAccessDrop *drop_arg = (ObjectAccessDrop *) arg;
474
475 return psprintf("%s%s%s%s%s%s",
477 ? "internal action," : ""),
479 ? "concurrent drop," : ""),
481 ? "suppress notices," : ""),
483 ? "keep original object," : ""),
485 ? "keep extensions," : ""),
487 ? "normal concurrent drop," : ""));
488 }
489 break;
490 case OAT_POST_ALTER:
491 {
493
494 return psprintf("%s %s auxiliary object",
495 (pa_arg->is_internal ? "internal" : "explicit"),
496 (OidIsValid(pa_arg->auxiliary_id) ? "with" : "without"));
497 }
498 break;
500 {
502
503 return psprintf("%s, %s",
504 (ns_arg->ereport_on_violation ? "report on violation" : "no report on violation"),
505 (ns_arg->result ? "allowed" : "denied"));
506 }
507 break;
508 case OAT_TRUNCATE:
510 /* hook takes no arg. */
511 return pstrdup("unexpected extra info pointer received");
512 default:
513 return pstrdup("cannot parse extra info for unrecognized access type");
514 }
515
516 return pstrdup("unknown");
517}
#define OidIsValid(objectId)
Definition: c.h:732
#define PERFORM_DELETION_CONCURRENTLY
Definition: dependency.h:93
#define PERFORM_DELETION_SKIP_EXTENSIONS
Definition: dependency.h:96
#define PERFORM_DELETION_CONCURRENT_LOCK
Definition: dependency.h:97
#define PERFORM_DELETION_QUIETLY
Definition: dependency.h:94
#define PERFORM_DELETION_SKIP_ORIGINAL
Definition: dependency.h:95
#define PERFORM_DELETION_INTERNAL
Definition: dependency.h:92
char * pstrdup(const char *in)
Definition: mcxt.c:1696
@ OAT_NAMESPACE_SEARCH
Definition: objectaccess.h:53
@ OAT_FUNCTION_EXECUTE
Definition: objectaccess.h:54
@ OAT_DROP
Definition: objectaccess.h:51
@ OAT_TRUNCATE
Definition: objectaccess.h:55
@ OAT_POST_ALTER
Definition: objectaccess.h:52
@ OAT_POST_CREATE
Definition: objectaccess.h:50
void * arg
short access
Definition: preproc-type.c:36
char * psprintf(const char *fmt,...)
Definition: psprintf.c:43

References arg, ObjectAccessPostAlter::auxiliary_id, ObjectAccessDrop::dropflags, ObjectAccessNamespaceSearch::ereport_on_violation, ObjectAccessPostCreate::is_internal, ObjectAccessPostAlter::is_internal, OAT_DROP, OAT_FUNCTION_EXECUTE, OAT_NAMESPACE_SEARCH, OAT_POST_ALTER, OAT_POST_CREATE, OAT_TRUNCATE, OidIsValid, PERFORM_DELETION_CONCURRENT_LOCK, PERFORM_DELETION_CONCURRENTLY, PERFORM_DELETION_INTERNAL, PERFORM_DELETION_QUIETLY, PERFORM_DELETION_SKIP_EXTENSIONS, PERFORM_DELETION_SKIP_ORIGINAL, psprintf(), pstrdup(), and ObjectAccessNamespaceSearch::result.

Referenced by REGRESS_object_access_hook().

◆ accesstype_to_string()

static char * accesstype_to_string ( ObjectAccessType  access,
int  subId 
)
static

Definition at line 418 of file test_oat_hooks.c.

419{
420 const char *type;
421
422 switch (access)
423 {
424 case OAT_POST_CREATE:
425 type = "create";
426 break;
427 case OAT_DROP:
428 type = "drop";
429 break;
430 case OAT_POST_ALTER:
431 type = "alter";
432 break;
434 type = "namespace search";
435 break;
437 type = "execute";
438 break;
439 case OAT_TRUNCATE:
440 type = "truncate";
441 break;
442 default:
443 type = "UNRECOGNIZED ObjectAccessType";
444 }
445
446 if ((subId & ACL_SET) && (subId & ACL_ALTER_SYSTEM))
447 return psprintf("%s (subId=0x%x, all privileges)", type, subId);
448 if (subId & ACL_SET)
449 return psprintf("%s (subId=0x%x, set)", type, subId);
450 if (subId & ACL_ALTER_SYSTEM)
451 return psprintf("%s (subId=0x%x, alter system)", type, subId);
452
453 return psprintf("%s (subId=0x%x)", type, subId);
454}
#define ACL_SET
Definition: parsenodes.h:88
#define ACL_ALTER_SYSTEM
Definition: parsenodes.h:89
const char * type

References ACL_ALTER_SYSTEM, ACL_SET, OAT_DROP, OAT_FUNCTION_EXECUTE, OAT_NAMESPACE_SEARCH, OAT_POST_ALTER, OAT_POST_CREATE, OAT_TRUNCATE, psprintf(), and type.

Referenced by REGRESS_object_access_hook(), and REGRESS_object_access_hook_str().

◆ audit_attempt()

static void audit_attempt ( const char *  hook,
char *  action,
char *  objName 
)
static

Definition at line 258 of file test_oat_hooks.c.

259{
260 emit_audit_message("attempting", hook, action, objName);
261}
static void emit_audit_message(const char *type, const char *hook, char *action, char *objName)

References generate_unaccent_rules::action, and emit_audit_message().

Referenced by REGRESS_exec_check_perms(), REGRESS_object_access_hook(), REGRESS_object_access_hook_str(), and REGRESS_utility_command().

◆ audit_failure()

static void audit_failure ( const char *  hook,
char *  action,
char *  objName 
)
static

Definition at line 270 of file test_oat_hooks.c.

271{
272 emit_audit_message("denied", hook, action, objName);
273}

References generate_unaccent_rules::action, and emit_audit_message().

Referenced by REGRESS_exec_check_perms().

◆ audit_success()

static void audit_success ( const char *  hook,
char *  action,
char *  objName 
)
static

◆ emit_audit_message()

static void emit_audit_message ( const char *  type,
const char *  hook,
char *  action,
char *  objName 
)
static

Definition at line 230 of file test_oat_hooks.c.

231{
232 /*
233 * Ensure that audit messages are not duplicated by only emitting them
234 * from a leader process, not a worker process. This makes the test
235 * results deterministic even if run with debug_parallel_query = regress.
236 */
238 {
239 const char *who = superuser_arg(GetUserId()) ? "superuser" : "non-superuser";
240
241 if (objName)
243 (errcode(ERRCODE_INTERNAL_ERROR),
244 errmsg("in %s: %s %s %s [%s]", hook, who, type, action, objName)));
245 else
247 (errcode(ERRCODE_INTERNAL_ERROR),
248 errmsg("in %s: %s %s %s", hook, who, type, action)));
249 }
250
251 if (action)
252 pfree(action);
253 if (objName)
254 pfree(objName);
255}
int errcode(int sqlerrcode)
Definition: elog.c:853
int errmsg(const char *fmt,...)
Definition: elog.c:1070
#define NOTICE
Definition: elog.h:35
#define ereport(elevel,...)
Definition: elog.h:149
#define IsParallelWorker()
Definition: parallel.h:60
void pfree(void *pointer)
Definition: mcxt.c:1521
Oid GetUserId(void)
Definition: miscinit.c:517
bool superuser_arg(Oid roleid)
Definition: superuser.c:56

References generate_unaccent_rules::action, ereport, errcode(), errmsg(), GetUserId(), IsParallelWorker, NOTICE, pfree(), REGRESS_audit, superuser_arg(), and type.

Referenced by audit_attempt(), audit_failure(), and audit_success().

◆ REGRESS_exec_check_perms()

static bool REGRESS_exec_check_perms ( List rangeTabls,
List rteperminfos,
bool  do_abort 
)
static

Definition at line 347 of file test_oat_hooks.c.

348{
349 bool am_super = superuser_arg(GetUserId());
350 bool allow = true;
351
352 audit_attempt("executor check perms", pstrdup("execute"), NULL);
353
354 /* Perform our check */
355 allow = !REGRESS_deny_exec_perms || am_super;
356 if (do_abort && !allow)
358 (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
359 errmsg("permission denied: %s", "execute")));
360
361 /* Forward to next hook in the chain */
363 !(*next_exec_check_perms_hook) (rangeTabls, rteperminfos, do_abort))
364 allow = false;
365
366 if (allow)
367 audit_success("executor check perms",
368 pstrdup("execute"),
369 NULL);
370 else
371 audit_failure("executor check perms",
372 pstrdup("execute"),
373 NULL);
374
375 return allow;
376}
#define ERROR
Definition: elog.h:39
static void audit_attempt(const char *hook, char *action, char *objName)
static void audit_failure(const char *hook, char *action, char *objName)
static void audit_success(const char *hook, char *action, char *objName)

References audit_attempt(), audit_failure(), audit_success(), ereport, errcode(), errmsg(), ERROR, GetUserId(), next_exec_check_perms_hook, pstrdup(), REGRESS_deny_exec_perms, and superuser_arg().

Referenced by _PG_init().

◆ REGRESS_object_access_hook()

static void REGRESS_object_access_hook ( ObjectAccessType  access,
Oid  classId,
Oid  objectId,
int  subId,
void *  arg 
)
static

Definition at line 324 of file test_oat_hooks.c.

325{
326 audit_attempt("object access",
329
332 (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
333 errmsg("permission denied: %s [%s]",
336
337 /* Forward to next hook in the chain */
339 (*next_object_access_hook) (access, classId, objectId, subId, arg);
340
341 audit_success("object access",
344}
static char * accesstype_arg_to_string(ObjectAccessType access, void *arg)
static char * accesstype_to_string(ObjectAccessType access, int subId)

References accesstype_arg_to_string(), accesstype_to_string(), arg, audit_attempt(), audit_success(), ereport, errcode(), errmsg(), ERROR, GetUserId(), next_object_access_hook, REGRESS_deny_object_access, and superuser_arg().

Referenced by _PG_init().

◆ REGRESS_object_access_hook_str()

static void REGRESS_object_access_hook_str ( ObjectAccessType  access,
Oid  classId,
const char *  objName,
int  subId,
void *  arg 
)
static

Definition at line 276 of file test_oat_hooks.c.

277{
278 audit_attempt("object_access_hook_str",
280 pstrdup(objName));
281
283 {
284 (*next_object_access_hook_str) (access, classId, objName, subId, arg);
285 }
286
287 switch (access)
288 {
289 case OAT_POST_ALTER:
290 if ((subId & ACL_SET) && (subId & ACL_ALTER_SYSTEM))
291 {
294 (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
295 errmsg("permission denied: all privileges %s", objName)));
296 }
297 else if (subId & ACL_SET)
298 {
301 (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
302 errmsg("permission denied: set %s", objName)));
303 }
304 else if (subId & ACL_ALTER_SYSTEM)
305 {
308 (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
309 errmsg("permission denied: alter system set %s", objName)));
310 }
311 else
312 elog(ERROR, "Unknown ParameterAclRelationId subId: %d", subId);
313 break;
314 default:
315 break;
316 }
317
318 audit_success("object_access_hook_str",
320 pstrdup(objName));
321}
#define elog(elevel,...)
Definition: elog.h:225

References accesstype_to_string(), ACL_ALTER_SYSTEM, ACL_SET, arg, audit_attempt(), audit_success(), elog, ereport, errcode(), errmsg(), ERROR, GetUserId(), next_object_access_hook_str, OAT_POST_ALTER, pstrdup(), REGRESS_deny_alter_system, REGRESS_deny_set_variable, and superuser_arg().

Referenced by _PG_init().

◆ REGRESS_utility_command()

static void REGRESS_utility_command ( PlannedStmt pstmt,
const char *  queryString,
bool  readOnlyTree,
ProcessUtilityContext  context,
ParamListInfo  params,
QueryEnvironment queryEnv,
DestReceiver dest,
QueryCompletion qc 
)
static

Definition at line 379 of file test_oat_hooks.c.

387{
388 Node *parsetree = pstmt->utilityStmt;
389 const char *action = GetCommandTagName(CreateCommandTag(parsetree));
390
391 audit_attempt("process utility",
393 NULL);
394
395 /* Check permissions */
398 (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
399 errmsg("permission denied: %s", action)));
400
401 /* Forward to next hook in the chain */
403 (*next_ProcessUtility_hook) (pstmt, queryString, readOnlyTree,
404 context, params, queryEnv,
405 dest, qc);
406 else
407 standard_ProcessUtility(pstmt, queryString, readOnlyTree,
408 context, params, queryEnv,
409 dest, qc);
410
411 /* We're done */
412 audit_success("process utility",
414 NULL);
415}
const char * GetCommandTagName(CommandTag commandTag)
Definition: cmdtag.c:47
Definition: nodes.h:129
Node * utilityStmt
Definition: plannodes.h:95
void standard_ProcessUtility(PlannedStmt *pstmt, const char *queryString, bool readOnlyTree, ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, DestReceiver *dest, QueryCompletion *qc)
Definition: utility.c:543
CommandTag CreateCommandTag(Node *parsetree)
Definition: utility.c:2362

References generate_unaccent_rules::action, audit_attempt(), audit_success(), CreateCommandTag(), generate_unaccent_rules::dest, ereport, errcode(), errmsg(), ERROR, GetCommandTagName(), GetUserId(), next_ProcessUtility_hook, pstrdup(), REGRESS_deny_utility_commands, standard_ProcessUtility(), superuser_arg(), and PlannedStmt::utilityStmt.

Referenced by _PG_init().

Variable Documentation

◆ next_exec_check_perms_hook

ExecutorCheckPerms_hook_type next_exec_check_perms_hook = NULL
static

Definition at line 48 of file test_oat_hooks.c.

Referenced by _PG_init(), and REGRESS_exec_check_perms().

◆ next_object_access_hook

object_access_hook_type next_object_access_hook = NULL
static

Definition at line 46 of file test_oat_hooks.c.

Referenced by _PG_init(), and REGRESS_object_access_hook().

◆ next_object_access_hook_str

object_access_hook_type_str next_object_access_hook_str = NULL
static

Definition at line 47 of file test_oat_hooks.c.

Referenced by _PG_init(), and REGRESS_object_access_hook_str().

◆ next_ProcessUtility_hook

ProcessUtility_hook_type next_ProcessUtility_hook = NULL
static

Definition at line 49 of file test_oat_hooks.c.

Referenced by _PG_init(), and REGRESS_utility_command().

◆ PG_MODULE_MAGIC

PG_MODULE_MAGIC

Definition at line 24 of file test_oat_hooks.c.

◆ REGRESS_audit

bool REGRESS_audit = false
static

Definition at line 34 of file test_oat_hooks.c.

Referenced by _PG_init(), and emit_audit_message().

◆ REGRESS_deny_alter_system

bool REGRESS_deny_alter_system = false
static

Definition at line 30 of file test_oat_hooks.c.

Referenced by _PG_init(), and REGRESS_object_access_hook_str().

◆ REGRESS_deny_exec_perms

bool REGRESS_deny_exec_perms = false
static

Definition at line 32 of file test_oat_hooks.c.

Referenced by _PG_init(), and REGRESS_exec_check_perms().

◆ REGRESS_deny_object_access

bool REGRESS_deny_object_access = false
static

Definition at line 31 of file test_oat_hooks.c.

Referenced by _PG_init(), and REGRESS_object_access_hook().

◆ REGRESS_deny_set_variable

bool REGRESS_deny_set_variable = false
static

Definition at line 29 of file test_oat_hooks.c.

Referenced by _PG_init(), and REGRESS_object_access_hook_str().

◆ REGRESS_deny_utility_commands

bool REGRESS_deny_utility_commands = false
static

Definition at line 33 of file test_oat_hooks.c.

Referenced by _PG_init(), and REGRESS_utility_command().

◆ REGRESS_suset_variable1

bool REGRESS_suset_variable1 = false
static

Definition at line 42 of file test_oat_hooks.c.

Referenced by _PG_init().

◆ REGRESS_suset_variable2

bool REGRESS_suset_variable2 = false
static

Definition at line 43 of file test_oat_hooks.c.

Referenced by _PG_init().

◆ REGRESS_userset_variable1

bool REGRESS_userset_variable1 = false
static

Definition at line 40 of file test_oat_hooks.c.

Referenced by _PG_init().

◆ REGRESS_userset_variable2

bool REGRESS_userset_variable2 = false
static

Definition at line 41 of file test_oat_hooks.c.

Referenced by _PG_init().