summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/commands/user.c23
-rw-r--r--src/test/regress/expected/privileges.out30
-rw-r--r--src/test/regress/sql/privileges.sql15
3 files changed, 6 insertions, 62 deletions
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index 1e3d4ab0e20..6ae42ea5656 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -30,7 +30,6 @@
#include "commands/defrem.h"
#include "commands/seclabel.h"
#include "commands/user.h"
-#include "lib/qunique.h"
#include "libpq/crypt.h"
#include "miscadmin.h"
#include "storage/lmgr.h"
@@ -490,7 +489,8 @@ CreateRole(ParseState *pstate, CreateRoleStmt *stmt)
* Advance command counter so we can see new record; else tests in
* AddRoleMems may fail.
*/
- CommandCounterIncrement();
+ if (addroleto || adminmembers || rolemembers)
+ CommandCounterIncrement();
/* Default grant. */
InitGrantRoleOptions(&popt);
@@ -1904,8 +1904,7 @@ AddRoleMems(Oid currentUserId, const char *rolename, Oid roleid,
else
{
Oid objectId;
- Oid *newmembers = (Oid *) palloc(3 * sizeof(Oid));
- int nnewmembers;
+ Oid *newmembers = palloc(sizeof(Oid));
/*
* The values for these options can be taken directly from 'popt'.
@@ -1947,22 +1946,12 @@ AddRoleMems(Oid currentUserId, const char *rolename, Oid roleid,
new_record, new_record_nulls);
CatalogTupleInsert(pg_authmem_rel, tuple);
- /*
- * Record dependencies on the roleid, member, and grantor, as if a
- * pg_auth_members entry were an object ACL.
- * updateAclDependencies() requires an input array that is
- * palloc'd (it will free it), sorted, and de-duped.
- */
- newmembers[0] = roleid;
- newmembers[1] = memberid;
- newmembers[2] = grantorId;
- qsort(newmembers, 3, sizeof(Oid), oid_cmp);
- nnewmembers = qunique(newmembers, 3, sizeof(Oid), oid_cmp);
-
+ /* updateAclDependencies wants to pfree array inputs */
+ newmembers[0] = grantorId;
updateAclDependencies(AuthMemRelationId, objectId,
0, InvalidOid,
0, NULL,
- nnewmembers, newmembers);
+ 1, newmembers);
}
/* CCI after each change, in case there are duplicates in list */
diff --git a/src/test/regress/expected/privileges.out b/src/test/regress/expected/privileges.out
index 6dcc95ede50..daafaa94fde 100644
--- a/src/test/regress/expected/privileges.out
+++ b/src/test/regress/expected/privileges.out
@@ -113,36 +113,6 @@ CREATE USER regress_priv_user2;
CREATE USER regress_priv_user3;
CREATE USER regress_priv_user4;
CREATE USER regress_priv_user5;
--- DROP OWNED should also act on granted and granted-to roles
-GRANT regress_priv_user1 TO regress_priv_user2;
-GRANT regress_priv_user2 TO regress_priv_user3;
-SELECT roleid::regrole, member::regrole FROM pg_auth_members
- WHERE roleid IN ('regress_priv_user1'::regrole,'regress_priv_user2'::regrole)
- ORDER BY roleid::regrole::text;
- roleid | member
---------------------+--------------------
- regress_priv_user1 | regress_priv_user2
- regress_priv_user2 | regress_priv_user3
-(2 rows)
-
-REASSIGN OWNED BY regress_priv_user2 TO regress_priv_user4; -- no effect
-SELECT roleid::regrole, member::regrole FROM pg_auth_members
- WHERE roleid IN ('regress_priv_user1'::regrole,'regress_priv_user2'::regrole)
- ORDER BY roleid::regrole::text;
- roleid | member
---------------------+--------------------
- regress_priv_user1 | regress_priv_user2
- regress_priv_user2 | regress_priv_user3
-(2 rows)
-
-DROP OWNED BY regress_priv_user2; -- removes both grants
-SELECT roleid::regrole, member::regrole FROM pg_auth_members
- WHERE roleid IN ('regress_priv_user1'::regrole,'regress_priv_user2'::regrole)
- ORDER BY roleid::regrole::text;
- roleid | member
---------+--------
-(0 rows)
-
GRANT pg_read_all_data TO regress_priv_user6;
GRANT pg_write_all_data TO regress_priv_user7;
GRANT pg_read_all_settings TO regress_priv_user8 WITH ADMIN OPTION;
diff --git a/src/test/regress/sql/privileges.sql b/src/test/regress/sql/privileges.sql
index fe409654c0e..96eff1104d2 100644
--- a/src/test/regress/sql/privileges.sql
+++ b/src/test/regress/sql/privileges.sql
@@ -90,21 +90,6 @@ CREATE USER regress_priv_user3;
CREATE USER regress_priv_user4;
CREATE USER regress_priv_user5;
--- DROP OWNED should also act on granted and granted-to roles
-GRANT regress_priv_user1 TO regress_priv_user2;
-GRANT regress_priv_user2 TO regress_priv_user3;
-SELECT roleid::regrole, member::regrole FROM pg_auth_members
- WHERE roleid IN ('regress_priv_user1'::regrole,'regress_priv_user2'::regrole)
- ORDER BY roleid::regrole::text;
-REASSIGN OWNED BY regress_priv_user2 TO regress_priv_user4; -- no effect
-SELECT roleid::regrole, member::regrole FROM pg_auth_members
- WHERE roleid IN ('regress_priv_user1'::regrole,'regress_priv_user2'::regrole)
- ORDER BY roleid::regrole::text;
-DROP OWNED BY regress_priv_user2; -- removes both grants
-SELECT roleid::regrole, member::regrole FROM pg_auth_members
- WHERE roleid IN ('regress_priv_user1'::regrole,'regress_priv_user2'::regrole)
- ORDER BY roleid::regrole::text;
-
GRANT pg_read_all_data TO regress_priv_user6;
GRANT pg_write_all_data TO regress_priv_user7;
GRANT pg_read_all_settings TO regress_priv_user8 WITH ADMIN OPTION;