Skip to content

Commit 263a905

Browse files
SugatDantaflos
andcommitted
(MODULES-11819) Properly quote role name in default_privileges type
Co-authored-by: Andreas Ntaflos <andreas.ntaflos@rise-world.com>
1 parent 121a455 commit 263a905

2 files changed

Lines changed: 33 additions & 7 deletions

File tree

manifests/server/default_privileges.pp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,8 @@
145145
}
146146

147147
$_unless = $ensure ? {
148-
'absent' => "SELECT 1 WHERE NOT EXISTS (SELECT * FROM pg_default_acl AS da LEFT JOIN pg_namespace AS n ON da.defaclnamespace = n.oid WHERE '%s=%s%s' = ANY (defaclacl)%s and defaclobjtype = '%s')", # lint:ignore:140chars
149-
default => "SELECT 1 WHERE EXISTS (SELECT * FROM pg_default_acl AS da LEFT JOIN pg_namespace AS n ON da.defaclnamespace = n.oid WHERE '%s=%s%s' = ANY (defaclacl)%s and defaclobjtype = '%s')", # lint:ignore:140chars
148+
'absent' => "SELECT 1 WHERE NOT EXISTS (SELECT * FROM pg_default_acl AS da LEFT JOIN pg_namespace AS n ON da.defaclnamespace = n.oid WHERE '\"%s\"=%s%s' = ANY (defaclacl)%s and defaclobjtype = '%s')", # lint:ignore:140chars
149+
default => "SELECT 1 WHERE EXISTS (SELECT * FROM pg_default_acl AS da LEFT JOIN pg_namespace AS n ON da.defaclnamespace = n.oid WHERE '\"%s\"=%s%s' = ANY (defaclacl)%s and defaclobjtype = '%s')", # lint:ignore:140chars
150150
}
151151

152152
$unless_cmd = sprintf($_unless, $role, $_check_privilege, $_check_target_role, $_check_schema, $_check_type)

spec/defines/server/default_privileges_spec.rb

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,33 @@
9292
# rubocop:disable Layout/LineLength
9393
expect(subject).to contain_postgresql_psql('default_privileges:test')
9494
.with_command('ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO "test"')
95-
.with_unless("SELECT 1 WHERE EXISTS (SELECT * FROM pg_default_acl AS da LEFT JOIN pg_namespace AS n ON da.defaclnamespace = n.oid WHERE 'test=arwdDxt' = ANY (defaclacl) AND nspname = 'public' and defaclobjtype = 'r')")
95+
.with_unless("SELECT 1 WHERE EXISTS (SELECT * FROM pg_default_acl AS da LEFT JOIN pg_namespace AS n ON da.defaclnamespace = n.oid WHERE '\"test\"=arwdDxt' = ANY (defaclacl) AND nspname = 'public' and defaclobjtype = 'r')")
96+
# rubocop:enable Layout/LineLength
97+
end
98+
end
99+
100+
context 'supported privilege and a role name with a hyphen' do
101+
let :params do
102+
{
103+
db: 'test',
104+
role: 'test-foo',
105+
privilege: 'all',
106+
object_type: 'tables'
107+
}
108+
end
109+
110+
let :pre_condition do
111+
"class {'postgresql::server':}"
112+
end
113+
114+
it { is_expected.to compile.with_all_deps }
115+
it { is_expected.to contain_postgresql__server__default_privileges('test') }
116+
117+
it do
118+
# rubocop:disable Layout/LineLength
119+
expect(subject).to contain_postgresql_psql('default_privileges:test')
120+
.with_command('ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO "test-foo"')
121+
.with_unless("SELECT 1 WHERE EXISTS (SELECT * FROM pg_default_acl AS da LEFT JOIN pg_namespace AS n ON da.defaclnamespace = n.oid WHERE '\"test-foo\"=arwdDxt' = ANY (defaclacl) AND nspname = 'public' and defaclobjtype = 'r')")
96122
# rubocop:enable Layout/LineLength
97123
end
98124
end
@@ -163,7 +189,7 @@ class { 'postgresql::server': }
163189
# rubocop:disable Layout/LineLength
164190
expect(subject).to contain_postgresql_psql('default_privileges:test')
165191
.with_command('ALTER DEFAULT PRIVILEGES GRANT ALL ON SCHEMAS TO "test"')
166-
.with_unless("SELECT 1 WHERE EXISTS (SELECT * FROM pg_default_acl AS da LEFT JOIN pg_namespace AS n ON da.defaclnamespace = n.oid WHERE 'test=UC' = ANY (defaclacl) AND nspname IS NULL and defaclobjtype = 'n')")
192+
.with_unless("SELECT 1 WHERE EXISTS (SELECT * FROM pg_default_acl AS da LEFT JOIN pg_namespace AS n ON da.defaclnamespace = n.oid WHERE '\"test\"=UC' = ANY (defaclacl) AND nspname IS NULL and defaclobjtype = 'n')")
167193
# rubocop:enable Layout/LineLength
168194
end
169195
end
@@ -282,7 +308,7 @@ class { 'postgresql::server': }
282308
# rubocop:disable Layout/LineLength
283309
expect(subject).to contain_postgresql_psql('default_privileges:test')
284310
.with_command('ALTER DEFAULT PRIVILEGES IN SCHEMA my_schema GRANT ALL ON TABLES TO "test"')
285-
.with_unless("SELECT 1 WHERE EXISTS (SELECT * FROM pg_default_acl AS da LEFT JOIN pg_namespace AS n ON da.defaclnamespace = n.oid WHERE 'test=arwdDxt' = ANY (defaclacl) AND nspname = 'my_schema' and defaclobjtype = 'r')")
311+
.with_unless("SELECT 1 WHERE EXISTS (SELECT * FROM pg_default_acl AS da LEFT JOIN pg_namespace AS n ON da.defaclnamespace = n.oid WHERE '\"test\"=arwdDxt' = ANY (defaclacl) AND nspname = 'my_schema' and defaclobjtype = 'r')")
286312
# rubocop:enable Layout/LineLength
287313
end
288314
end
@@ -309,7 +335,7 @@ class { 'postgresql::server': }
309335
# rubocop:disable Layout/LineLength
310336
expect(subject).to contain_postgresql_psql('default_privileges:test')
311337
.with_command('ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO "test"')
312-
.with_unless("SELECT 1 WHERE EXISTS (SELECT * FROM pg_default_acl AS da LEFT JOIN pg_namespace AS n ON da.defaclnamespace = n.oid WHERE 'test=arwdDxt' = ANY (defaclacl) AND nspname IS NULL and defaclobjtype = 'r')")
338+
.with_unless("SELECT 1 WHERE EXISTS (SELECT * FROM pg_default_acl AS da LEFT JOIN pg_namespace AS n ON da.defaclnamespace = n.oid WHERE '\"test\"=arwdDxt' = ANY (defaclacl) AND nspname IS NULL and defaclobjtype = 'r')")
313339
# rubocop:enable Layout/LineLength
314340
end
315341
end
@@ -367,7 +393,7 @@ class {'postgresql::server':}
367393
# rubocop:disable Layout/LineLength
368394
expect(subject).to contain_postgresql_psql('default_privileges:test')
369395
.with_command('ALTER DEFAULT PRIVILEGES FOR ROLE target IN SCHEMA public GRANT ALL ON TABLES TO "test"')
370-
.with_unless("SELECT 1 WHERE EXISTS (SELECT * FROM pg_default_acl AS da LEFT JOIN pg_namespace AS n ON da.defaclnamespace = n.oid WHERE 'test=arwdDxt/target' = ANY (defaclacl) AND nspname = 'public' and defaclobjtype = 'r')")
396+
.with_unless("SELECT 1 WHERE EXISTS (SELECT * FROM pg_default_acl AS da LEFT JOIN pg_namespace AS n ON da.defaclnamespace = n.oid WHERE '\"test\"=arwdDxt/target' = ANY (defaclacl) AND nspname = 'public' and defaclobjtype = 'r')")
371397
# rubocop:enable Layout/LineLength
372398
end
373399
end

0 commit comments

Comments
 (0)