Skip to content

Commit a36dc04

Browse files
committed
Add regression test for DROP OWNED BY with default ACLs
DROP OWNED BY has a specific code path to remove ACLs stored in pg_default_acl when cleaning up shared dependencies that had no coverage with the existing tests. This issue has been found while digging into the bug fixed by 21378e1. As ALTER DEFAULT PRIVILEGES impacts the ACLs of all objects created while the default permissions are visible, the test uses a transaction rollback to isolate the test and avoid any impact with other sessions running in parallel. Reviewed-by: Álvaro Herrera Discussion: https://postgr.es/m/YAbQ1OD+3ip4lRv8@paquier.xyz
1 parent 21378e1 commit a36dc04

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

src/test/regress/expected/privileges.out

+29
Original file line numberDiff line numberDiff line change
@@ -1760,6 +1760,35 @@ SELECT has_schema_privilege('regress_priv_user2', 'testns4', 'CREATE'); -- yes
17601760

17611761
ALTER DEFAULT PRIVILEGES REVOKE ALL ON SCHEMAS FROM regress_priv_user2;
17621762
COMMIT;
1763+
-- Test for DROP OWNED BY with shared dependencies. This is done in a
1764+
-- separate, rollbacked, transaction to avoid any trouble with other
1765+
-- regression sessions.
1766+
BEGIN;
1767+
ALTER DEFAULT PRIVILEGES GRANT ALL ON FUNCTIONS TO regress_priv_user2;
1768+
ALTER DEFAULT PRIVILEGES GRANT ALL ON SCHEMAS TO regress_priv_user2;
1769+
ALTER DEFAULT PRIVILEGES GRANT ALL ON SEQUENCES TO regress_priv_user2;
1770+
ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO regress_priv_user2;
1771+
ALTER DEFAULT PRIVILEGES GRANT ALL ON TYPES TO regress_priv_user2;
1772+
SELECT count(*) FROM pg_shdepend
1773+
WHERE deptype = 'a' AND
1774+
refobjid = 'regress_priv_user2'::regrole AND
1775+
classid = 'pg_default_acl'::regclass;
1776+
count
1777+
-------
1778+
5
1779+
(1 row)
1780+
1781+
DROP OWNED BY regress_priv_user2, regress_priv_user2;
1782+
SELECT count(*) FROM pg_shdepend
1783+
WHERE deptype = 'a' AND
1784+
refobjid = 'regress_priv_user2'::regrole AND
1785+
classid = 'pg_default_acl'::regclass;
1786+
count
1787+
-------
1788+
0
1789+
(1 row)
1790+
1791+
ROLLBACK;
17631792
CREATE SCHEMA testns5;
17641793
SELECT has_schema_privilege('regress_priv_user2', 'testns5', 'USAGE'); -- no
17651794
has_schema_privilege

src/test/regress/sql/privileges.sql

+20
Original file line numberDiff line numberDiff line change
@@ -1049,6 +1049,26 @@ ALTER DEFAULT PRIVILEGES REVOKE ALL ON SCHEMAS FROM regress_priv_user2;
10491049

10501050
COMMIT;
10511051

1052+
-- Test for DROP OWNED BY with shared dependencies. This is done in a
1053+
-- separate, rollbacked, transaction to avoid any trouble with other
1054+
-- regression sessions.
1055+
BEGIN;
1056+
ALTER DEFAULT PRIVILEGES GRANT ALL ON FUNCTIONS TO regress_priv_user2;
1057+
ALTER DEFAULT PRIVILEGES GRANT ALL ON SCHEMAS TO regress_priv_user2;
1058+
ALTER DEFAULT PRIVILEGES GRANT ALL ON SEQUENCES TO regress_priv_user2;
1059+
ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO regress_priv_user2;
1060+
ALTER DEFAULT PRIVILEGES GRANT ALL ON TYPES TO regress_priv_user2;
1061+
SELECT count(*) FROM pg_shdepend
1062+
WHERE deptype = 'a' AND
1063+
refobjid = 'regress_priv_user2'::regrole AND
1064+
classid = 'pg_default_acl'::regclass;
1065+
DROP OWNED BY regress_priv_user2, regress_priv_user2;
1066+
SELECT count(*) FROM pg_shdepend
1067+
WHERE deptype = 'a' AND
1068+
refobjid = 'regress_priv_user2'::regrole AND
1069+
classid = 'pg_default_acl'::regclass;
1070+
ROLLBACK;
1071+
10521072
CREATE SCHEMA testns5;
10531073

10541074
SELECT has_schema_privilege('regress_priv_user2', 'testns5', 'USAGE'); -- no

0 commit comments

Comments
 (0)