Line data Source code
1 : /* 2 : * dummy_seclabel.c 3 : * 4 : * Dummy security label provider. 5 : * 6 : * This module does not provide anything worthwhile from a security 7 : * perspective, but allows regression testing independent of platform-specific 8 : * features like SELinux. 9 : * 10 : * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group 11 : * Portions Copyright (c) 1994, Regents of the University of California 12 : */ 13 : #include "postgres.h" 14 : 15 : #include "commands/seclabel.h" 16 : #include "fmgr.h" 17 : #include "miscadmin.h" 18 : #include "utils/rel.h" 19 : 20 2 : PG_MODULE_MAGIC; 21 : 22 2 : PG_FUNCTION_INFO_V1(dummy_seclabel_dummy); 23 : 24 : static void 25 36 : dummy_object_relabel(const ObjectAddress *object, const char *seclabel) 26 : { 27 36 : if (seclabel == NULL || 28 36 : strcmp(seclabel, "unclassified") == 0 || 29 28 : strcmp(seclabel, "classified") == 0) 30 26 : return; 31 : 32 10 : if (strcmp(seclabel, "secret") == 0 || 33 6 : strcmp(seclabel, "top secret") == 0) 34 : { 35 6 : if (!superuser()) 36 4 : ereport(ERROR, 37 : (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), 38 : errmsg("only superuser can set '%s' label", seclabel))); 39 2 : return; 40 : } 41 4 : ereport(ERROR, 42 : (errcode(ERRCODE_INVALID_NAME), 43 : errmsg("'%s' is not a valid security label", seclabel))); 44 : } 45 : 46 : void 47 2 : _PG_init(void) 48 : { 49 2 : register_label_provider("dummy", dummy_object_relabel); 50 2 : } 51 : 52 : /* 53 : * This function is here just so that the extension is not completely empty 54 : * and the dynamic library is loaded when CREATE EXTENSION runs. 55 : */ 56 : Datum 57 0 : dummy_seclabel_dummy(PG_FUNCTION_ARGS) 58 : { 59 0 : PG_RETURN_VOID(); 60 : }