1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-11 05:41:32 +03:00

Integrate superuser check into has_rolreplication()

This makes it consistent with similar functions like
has_createrole_privilege() and allows removing some explicit superuser
checks.

Author: Nathan Bossart <nathandbossart@gmail.com>
Discussion: https://www.postgresql.org/message-id/20230310000313.GA3992372%40nathanxps13
This commit is contained in:
Peter Eisentraut 2023-03-16 15:43:33 +01:00
parent 3b7cd8c690
commit 442f870065
3 changed files with 6 additions and 2 deletions

View File

@ -1140,7 +1140,7 @@ CheckSlotRequirements(void)
void void
CheckSlotPermissions(void) CheckSlotPermissions(void)
{ {
if (!superuser() && !has_rolreplication(GetUserId())) if (!has_rolreplication(GetUserId()))
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
errmsg("must be superuser or replication role to use replication slots"))); errmsg("must be superuser or replication role to use replication slots")));

View File

@ -709,6 +709,10 @@ has_rolreplication(Oid roleid)
bool result = false; bool result = false;
HeapTuple utup; HeapTuple utup;
/* Superusers bypass all permission checking. */
if (superuser_arg(roleid))
return true;
utup = SearchSysCache1(AUTHOID, ObjectIdGetDatum(roleid)); utup = SearchSysCache1(AUTHOID, ObjectIdGetDatum(roleid));
if (HeapTupleIsValid(utup)) if (HeapTupleIsValid(utup))
{ {

View File

@ -962,7 +962,7 @@ InitPostgres(const char *in_dbname, Oid dboid,
{ {
Assert(!bootstrap); Assert(!bootstrap);
if (!superuser() && !has_rolreplication(GetUserId())) if (!has_rolreplication(GetUserId()))
ereport(FATAL, ereport(FATAL,
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
errmsg("must be superuser or replication role to start walsender"))); errmsg("must be superuser or replication role to start walsender")));