Skip to content

Commit c6a1016

Browse files
towotdb
authored andcommitted
Fix readonly handling
The database `readonly` property expects a boolean, but the olc provider doesn't take care to parse the existing value into a boolean, thus leading to issues. Simply applies the same logic applied to `olcMirrorMode` for `olcReadOnly`.
1 parent 76b8d07 commit c6a1016

File tree

3 files changed

+58
-1
lines changed

3 files changed

+58
-1
lines changed

lib/puppet/provider/openldap_database/olc.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def self.instances
5050
when %r{^olcRelay: }
5151
relay = line.split[1]
5252
when %r{^olcReadOnly: }i
53-
readonly = line.split[1]
53+
readonly = line.split[1] == 'TRUE' ? :true : :false
5454
when %r{^olcSizeLimit: }i
5555
sizelimit = line.split[1]
5656
when %r{^olcDbMaxSize: }i

lib/puppet/type/openldap_database.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,8 @@ def should_to_s(_newvalue)
167167

168168
newproperty(:readonly) do
169169
desc 'Puts the database into read-only mode.'
170+
newvalues(:true, :false)
171+
defaultto(:false)
170172
end
171173

172174
newproperty(:sizelimit) do
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# frozen_string_literal: true
2+
3+
require 'spec_helper'
4+
5+
describe Puppet::Type.type(:openldap_database).provider(:olc) do
6+
let(:params) do
7+
{
8+
suffix: 'dc=example,dc=com',
9+
backend: 'mdb',
10+
readonly: false,
11+
# provider: described_class.name,
12+
}
13+
end
14+
15+
let(:resource) do
16+
Puppet::Type.type(:openldap_database).new(params)
17+
end
18+
let(:provider) do
19+
resource.provider
20+
end
21+
22+
before do
23+
allow(described_class).to receive(:slapcat).with('(|(olcDatabase=monitor)(olcDatabase={0}config)(&(objectClass=olcDatabaseConfig)(|(objectClass=olcBdbConfig)(objectClass=olcHdbConfig)(objectClass=olcMdbConfig)(objectClass=olcMonitorConfig)(objectClass=olcRelayConfig)(objectClass=olcLDAPConfig))))').and_return(<<~SLAPCAT)
24+
dn: olcDatabase={1}mdb,cn=config
25+
olcDatabase: {1}mdb
26+
olcReadOnly: FALSE
27+
SLAPCAT
28+
allow(provider).to receive(:slapcat)
29+
allow(provider).to receive(:ldapmodify)
30+
allow(provider).to receive(:ldapadd)
31+
# allow(described_class).to receive(:slapcat)
32+
# allow(described_class).to receive(:ldapmodify)
33+
# allow(described_class).to receive(:ldapadd)
34+
end
35+
36+
describe 'when creating' do
37+
context 'with readonly set to false' do
38+
it 'parses olcReadOnly as false' do
39+
provider.create
40+
expect(described_class.instances.first.readonly).to eq :false
41+
# expect(described_class.instances.first.readonly).to eq(:false)
42+
end
43+
end
44+
45+
context 'with readonly set to true' do
46+
let(:params) do
47+
super().merge({ readonly: true })
48+
end
49+
50+
it 'parses olcReadonly' do
51+
expect(described_class.instances.first.readonly).to eq(:true)
52+
end
53+
end
54+
end
55+
end

0 commit comments

Comments
 (0)