aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/init/miscinit.c
diff options
context:
space:
mode:
authorMagnus Hagander <magnus@hagander.net>2010-12-29 11:05:03 +0100
committerMagnus Hagander <magnus@hagander.net>2010-12-29 11:05:03 +0100
commit9b8aff8c192e2f313f90395d114c58a9ef84f97f (patch)
treea4a4f7a5c25d4bbdd85599471a206433de704f1d /src/backend/utils/init/miscinit.c
parentf2ba1e994c4d17dc3d4b8d48d3933c96d09127e1 (diff)
downloadpostgresql-9b8aff8c192e2f313f90395d114c58a9ef84f97f.tar.gz
postgresql-9b8aff8c192e2f313f90395d114c58a9ef84f97f.zip
Add REPLICATION privilege for ROLEs
This privilege is required to do Streaming Replication, instead of superuser, making it possible to set up a SR slave that doesn't have write permissions on the master. Superuser privileges do NOT override this check, so in order to use the default superuser account for replication it must be explicitly granted the REPLICATION permissions. This is backwards incompatible change, in the interest of higher default security.
Diffstat (limited to 'src/backend/utils/init/miscinit.c')
-rw-r--r--src/backend/utils/init/miscinit.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index d74b5ccb30d..0d5ffb0a8e5 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -231,6 +231,7 @@ static int SecurityRestrictionContext = 0;
static bool SetRoleIsActive = false;
+
/*
* GetUserId - get the current effective user ID.
*
@@ -389,6 +390,24 @@ SetUserIdAndContext(Oid userid, bool sec_def_context)
/*
+ * Check if the authenticated user is a replication role
+ */
+bool
+is_authenticated_user_replication_role(void)
+{
+ bool result = false;
+ HeapTuple utup;
+
+ utup = SearchSysCache1(AUTHOID, ObjectIdGetDatum(AuthenticatedUserId));
+ if (HeapTupleIsValid(utup))
+ {
+ result = ((Form_pg_authid) GETSTRUCT(utup))->rolreplication;
+ ReleaseSysCache(utup);
+ }
+ return result;
+}
+
+/*
* Initialize user identity during normal backend startup
*/
void