Skip to content

Commit be7e320

Browse files
authored
Merge pull request #380 from jhunt-steds/postgres-ssl-clientcert-fix
use the correct value for clientcert in pg_hba.conf for Postgresql 12
2 parents 66737ab + 8cd78d0 commit be7e320

File tree

5 files changed

+41
-4
lines changed

5 files changed

+41
-4
lines changed

manifests/database/postgresql.pp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@
116116
postgresql_ssl_key_path => $postgresql_ssl_key_path,
117117
postgresql_ssl_cert_path => $postgresql_ssl_cert_path,
118118
postgresql_ssl_ca_cert_path => $postgresql_ssl_ca_cert_path,
119+
postgres_version => $postgres_version,
119120
create_read_user_rule => $create_read_user_rule,
120121
}
121122
}

manifests/database/postgresql_ssl_rules.pp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,24 @@
44
define puppetdb::database::postgresql_ssl_rules (
55
String $database_name,
66
String $database_username,
7+
String[2,3] $postgres_version,
78
String $puppetdb_server,
89
) {
910
$identity_map_key = "${database_name}-${database_username}-map"
1011

12+
$clientcert_value = Float($postgres_version) >= 12.0 ? {
13+
true => 'verify-full',
14+
false => '1',
15+
}
16+
1117
postgresql::server::pg_hba_rule { "Allow certificate mapped connections to ${database_name} as ${database_username} (ipv4)":
1218
type => 'hostssl',
1319
database => $database_name,
1420
user => $database_username,
1521
address => '0.0.0.0/0',
1622
auth_method => 'cert',
1723
order => 0,
18-
auth_option => "map=${identity_map_key} clientcert=1",
24+
auth_option => "map=${identity_map_key} clientcert=${clientcert_value}",
1925
}
2026

2127
postgresql::server::pg_hba_rule { "Allow certificate mapped connections to ${database_name} as ${database_username} (ipv6)":
@@ -25,7 +31,7 @@
2531
address => '::0/0',
2632
auth_method => 'cert',
2733
order => 0,
28-
auth_option => "map=${identity_map_key} clientcert=1",
34+
auth_option => "map=${identity_map_key} clientcert=${clientcert_value}",
2935
}
3036

3137
postgresql::server::pg_ident_rule { "Map the SSL certificate of the server as a ${database_username} user":

manifests/database/ssl_configuration.pp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
$postgresql_ssl_key_path = $puppetdb::params::postgresql_ssl_key_path,
1111
$postgresql_ssl_cert_path = $puppetdb::params::postgresql_ssl_cert_path,
1212
$postgresql_ssl_ca_cert_path = $puppetdb::params::postgresql_ssl_ca_cert_path,
13+
$postgres_version = $puppetdb::params::postgres_version,
1314
$create_read_user_rule = false,
1415
) inherits puppetdb::params {
1516
File {
@@ -56,13 +57,15 @@
5657
puppetdb::database::postgresql_ssl_rules { "Configure postgresql ssl rules for ${database_username}":
5758
database_name => $database_name,
5859
database_username => $database_username,
60+
postgres_version => $postgres_version,
5961
puppetdb_server => $puppetdb_server,
6062
}
6163

6264
if $create_read_user_rule {
6365
puppetdb::database::postgresql_ssl_rules { "Configure postgresql ssl rules for ${read_database_username}":
6466
database_name => $database_name,
6567
database_username => $read_database_username,
68+
postgres_version => $postgres_version,
6669
puppetdb_server => $puppetdb_server,
6770
}
6871
}

spec/defines/database/postgresql_ssl_rules_spec.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,28 @@
66
'puppetdb-read': {
77
database_name: 'puppetdb',
88
database_username: 'monitor',
9+
postgres_version: '11',
910
puppetdb_server: 'localhost',
1011
},
1112
'monitor': {
1213
database_name: 'opensesame',
1314
database_username: 'grover',
15+
postgres_version: '11',
16+
puppetdb_server: 'rainbow',
17+
},
18+
}
19+
20+
valid_12plus = {
21+
'puppetdb-read': {
22+
database_name: 'puppetdb',
23+
database_username: 'monitor',
24+
postgres_version: '12',
25+
puppetdb_server: 'localhost',
26+
},
27+
'monitor': {
28+
database_name: 'opensesame',
29+
database_username: 'grover',
30+
postgres_version: '12',
1431
puppetdb_server: 'rainbow',
1532
},
1633
}
@@ -34,6 +51,15 @@
3451
end
3552
end
3653

54+
valid_12plus.each do |name, params|
55+
context "for valid_12plus #{name}" do
56+
include_examples 'puppetdb::database::postgresql_ssl_rules' do
57+
let(:title) { name.to_s }
58+
let(:params) { params }
59+
end
60+
end
61+
end
62+
3763
invalid.each do |name, params|
3864
context "for invalid #{name}" do
3965
include_examples 'puppetdb::database::postgresql_ssl_rules', Puppet::Error do

spec/support/unit/shared/database.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@
227227
it { is_expected.to raise_error(error) }
228228
else
229229
let(:identity_map_key) { "#{with[:database_name]}-#{with[:database_username]}-map" }
230+
let(:client_cert) { (with[:postgres_version].to_f >= 12.0) ? 'verify-full' : '1' }
230231

231232
it { is_expected.to contain_puppetdb__database__postgresql_ssl_rules(name).with(with) }
232233

@@ -239,7 +240,7 @@
239240
address: '0.0.0.0/0',
240241
auth_method: 'cert',
241242
order: 0,
242-
auth_option: "map=#{identity_map_key} clientcert=1",
243+
auth_option: "map=#{identity_map_key} clientcert=#{client_cert}",
243244
)
244245
}
245246

@@ -252,7 +253,7 @@
252253
address: '::0/0',
253254
auth_method: 'cert',
254255
order: 0,
255-
auth_option: "map=#{identity_map_key} clientcert=1",
256+
auth_option: "map=#{identity_map_key} clientcert=#{client_cert}",
256257
)
257258
}
258259

0 commit comments

Comments
 (0)