pg-ldap-sync 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1fb003bb7920f52ed32b13515630a10149a56044c43dae3d131c6d2c5d2b42ba
4
- data.tar.gz: 973f117c4b23f726ffba5a0fec75b9388318428da44729076df441c92b6ca618
3
+ metadata.gz: 0e6ea134d34a9ff15f8e16aacb27ee545ff22a23500097e7474256c666bc4eff
4
+ data.tar.gz: 32aedf90f32b328497bee8df9d01943b073a6faaf6f3f4c0336b2e90f0d779cc
5
5
  SHA512:
6
- metadata.gz: 022c17d2bc330f6e07a09339e0e407078af90446faf0651fd1fffb62a8fb6b271acbec0c2e9e7bc9ac608535712be63c88f5cb7ef7b00b5ccc58dc9e878e9ff5
7
- data.tar.gz: c992719c0f6dd535db928c92d5c6b7223e6f1268410a13193cbb102ecd56573aaf839e57563439cf08cc9404a7a6ec81595c4787a54784d5494e9b9c0e681c0e
6
+ metadata.gz: 8ac395dee24a267cbab7c89ca277cb57f7bccfbdbff4f48ee6d9db2dc6f740c442df9127831658e6aa52fdbe708f853741f3b727061a7ae4c6814343ddecbc73
7
+ data.tar.gz: 14e0858af1c20fd488ba0ec9beb1bc5c71492e2f8904a97821612a09a2b5f4cf4def1e27631392cb4f1f88710f76564e74f9f5dd736ffd2dbf301b73725f057a
checksums.yaml.gz.sig CHANGED
Binary file
data/.travis.yml CHANGED
@@ -1,17 +1,20 @@
1
1
  sudo: required
2
+ dist: focal
2
3
  language: ruby
3
4
  rvm:
4
- - "2.0.0"
5
+ - "2.4.0"
5
6
  - ruby-head
6
7
  env:
7
- - "PGVERSION=10.0-1-linux-x64 PATH=\"/opt/PostgreSQL/10/bin:$PATH\""
8
- - "PGVERSION=9.3.19-1-linux-x64 PATH=\"/opt/PostgreSQL/9.3/bin:$PATH\""
8
+ - "PGVERSION=14"
9
+ - "PGVERSION=9.6"
9
10
  before_install:
10
- - gem install bundler
11
+ - gem install bundler --no-doc --conservative
11
12
  - bundle install
12
- # Download and install postgresql version to test against in /opt
13
- - |
14
- wget http://get.enterprisedb.com/postgresql/postgresql-$PGVERSION.run && \
15
- chmod +x postgresql-$PGVERSION.run && \
16
- sudo ./postgresql-$PGVERSION.run --extract-only 1 --mode unattended
13
+ # Download and install postgresql version to test against in /opt (for non-cross compile only)
14
+ - echo "deb http://apt.postgresql.org/pub/repos/apt/ ${TRAVIS_DIST}-pgdg main $PGVERSION" | sudo tee -a /etc/apt/sources.list.d/pgdg.list
15
+ - wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
16
+ - sudo apt -y update
17
+ - sudo apt -y --allow-downgrades install postgresql-$PGVERSION libpq-dev
18
+ - export PATH=/usr/lib/postgresql/$PGVERSION/bin:$PATH
19
+
17
20
  script: rake test
data/CHANGELOG.md ADDED
@@ -0,0 +1,31 @@
1
+ ## 0.3.0 / 2022-01-18
2
+
3
+ * Add config option :bothcase_name .
4
+ This adds both spellings "Fred_Flintstone" and "fred_flintstone" as PostgreSQL users/groups.
5
+ * Update gem dependencies
6
+ * Fix compatibility with PostgreSQL-14
7
+ * Require ruby-2.4+
8
+
9
+
10
+ ## 0.2.0 / 2018-03-13
11
+
12
+ * Update gem dependencies
13
+ * Fix compatibility to pg-1.0 gem
14
+ * Add `pg_ldap_sync --version`
15
+ * Fix compatibility with PostgreSQL-10
16
+ * Don't abort on SQL errors, but print ERROR notice
17
+ * Run sync within a SQL transaction, so that no partial sync happens
18
+ * Lots of improvements to the test suite
19
+ * Run automated tests on Travis-CI and Appveyor
20
+ * Remove support for postgres-pr, since it's no longer maintained
21
+
22
+
23
+ ## 0.1.1 / 2012-11-15
24
+
25
+ * Add ability to lowercase the LDAP name for use as PG role name
26
+
27
+
28
+ ## 0.1.0 / 2011-07-13
29
+
30
+ * Birthday!
31
+
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Build Status](https://travis-ci.org/larskanis/pg-ldap-sync.svg?branch=master)](https://travis-ci.org/larskanis/pg-ldap-sync) [![Build status](https://ci.appveyor.com/api/projects/status/09xn9q5p64jbxtka/branch/master?svg=true)](https://ci.appveyor.com/project/larskanis/pg-ldap-sync/branch/master)
1
+ [![Build Status](https://app.travis-ci.com/larskanis/pg-ldap-sync.svg?branch=master)](https://app.travis-ci.com/larskanis/pg-ldap-sync) [![Build status](https://ci.appveyor.com/api/projects/status/09xn9q5p64jbxtka/branch/master?svg=true)](https://ci.appveyor.com/project/larskanis/pg-ldap-sync/branch/master)
2
2
 
3
3
  # Use LDAP permissions in PostgreSQL
4
4
 
@@ -24,13 +24,12 @@ It is meant to be started as a cron job.
24
24
  * Can use Active Directory as LDAP-Server
25
25
  * Nested groups/roles supported
26
26
  * Set scope of considered users/groups on LDAP and PG side
27
- * Runs with pg.gem (C-library) or postgres-pr.gem (pure Ruby)
28
27
  * Test mode which doesn't do any changes to the DBMS
29
28
  * Both LDAP and PG connections can be secured by SSL/TLS
30
29
 
31
30
  ## REQUIREMENTS:
32
31
 
33
- * Ruby-2.0+, JRuby-1.2, Rubinius-1.2 or better
32
+ * Ruby-2.0+, JRuby-1.2+
34
33
  * LDAP-v3 server
35
34
  * PostgreSQL-server v9.0+
36
35
 
@@ -50,8 +49,9 @@ Install pg-ldap-sync and required dependencies:
50
49
  ```sh
51
50
  git clone https://github.com/larskanis/pg-ldap-sync.git
52
51
  cd pg-ldap-sync
53
- bundle
54
- rake install
52
+ gem install bundler
53
+ bundle install
54
+ bundle exec rake install
55
55
  ```
56
56
 
57
57
  ## USAGE:
@@ -74,7 +74,8 @@ Run in modify-mode:
74
74
  There is a small test suite in the `test` directory that runs against an internal LDAP server and a PostgreSQL server. Ensure `pg_ctl`, `initdb` and `psql` commands are in the `PATH` like so:
75
75
  ```sh
76
76
  cd pg-ldap-sync
77
- PATH=$PATH:/usr/lib/postgresql/10/bin/ rake test
77
+ bundle install
78
+ PATH=$PATH:/usr/lib/postgresql/10/bin/ bundle exec rake test
78
79
  ```
79
80
 
80
81
  ## ISSUES:
data/appveyor.yml CHANGED
@@ -1,3 +1,5 @@
1
+ image: Visual Studio 2019
2
+
1
3
  init:
2
4
  - set PATH=C:/Ruby%ruby_version%/bin;c:/Program Files/Git/cmd;c:/Windows/system32;C:/Windows/System32/WindowsPowerShell/v1.0
3
5
  - set RUBYOPT=--verbose
@@ -6,7 +8,7 @@ install:
6
8
  - ver
7
9
  - ruby --version
8
10
  - gem --version
9
- - gem install bundler --conservative
11
+ - gem install bundler --no-doc --conservative
10
12
  - bundle install
11
13
 
12
14
  build_script:
@@ -19,7 +21,7 @@ test_script:
19
21
 
20
22
  environment:
21
23
  matrix:
22
- - ruby_version: "25-x64"
23
- PGVER: 10
24
- - ruby_version: "22"
24
+ - ruby_version: "27-x64"
25
+ PGVER: 13
26
+ - ruby_version: "24"
25
27
  PGVER: 10
@@ -25,6 +25,8 @@ ldap_users:
25
25
  name_attribute: sAMAccountName
26
26
  # lowercase name for use as PG role name
27
27
  lowercase_name: true
28
+ # Add lowercase name *and* original name for use as PG role names (useful for migrating between case types)
29
+ bothcase_name: false
28
30
 
29
31
  # Search parameters for LDAP groups which should be synchronized
30
32
  ldap_groups:
data/config/schema.yaml CHANGED
@@ -20,6 +20,9 @@ mapping:
20
20
  "lowercase_name":
21
21
  type: bool
22
22
  required: no
23
+ "bothcase_name":
24
+ type: bool
25
+ required: no
23
26
 
24
27
  "ldap_groups":
25
28
  type: map
@@ -37,6 +40,9 @@ mapping:
37
40
  "lowercase_name":
38
41
  type: bool
39
42
  required: no
43
+ "bothcase_name":
44
+ type: bool
45
+ required: no
40
46
  "member_attribute":
41
47
  type: str
42
48
  required: yes
@@ -15,11 +15,11 @@ class Application
15
15
 
16
16
  def string_to_symbol(hash)
17
17
  if hash.kind_of?(Hash)
18
- return hash.inject({}){|h, v|
18
+ return hash.inject({}) do |h, v|
19
19
  raise "expected String instead of #{h.inspect}" unless v[0].kind_of?(String)
20
20
  h[v[0].intern] = string_to_symbol(v[1])
21
21
  h
22
- }
22
+ end
23
23
  else
24
24
  return hash
25
25
  end
@@ -61,11 +61,19 @@ class Application
61
61
  log.warn "user attribute #{ldap_user_conf[:name_attribute].inspect} not defined for #{entry.dn}"
62
62
  next
63
63
  end
64
- name.downcase! if ldap_user_conf[:lowercase_name]
65
-
66
64
  log.info "found user-dn: #{entry.dn}"
67
- user = LdapRole.new name, entry.dn
68
- users << user
65
+
66
+ names = if ldap_user_conf[:bothcase_name]
67
+ [name, name.downcase].uniq
68
+ elsif ldap_user_conf[:lowercase_name]
69
+ [name.downcase]
70
+ else
71
+ [name]
72
+ end
73
+
74
+ names.each do |n|
75
+ users << LdapRole.new(n, entry.dn)
76
+ end
69
77
  entry.each do |attribute, values|
70
78
  log.debug " #{attribute}:"
71
79
  values.each do |value|
@@ -88,11 +96,19 @@ class Application
88
96
  log.warn "user attribute #{ldap_group_conf[:name_attribute].inspect} not defined for #{entry.dn}"
89
97
  next
90
98
  end
91
- name.downcase! if ldap_group_conf[:lowercase_name]
92
-
93
99
  log.info "found group-dn: #{entry.dn}"
94
- group = LdapRole.new name, entry.dn, entry[ldap_group_conf[:member_attribute]]
95
- groups << group
100
+
101
+ names = if ldap_group_conf[:bothcase_name]
102
+ [name, name.downcase].uniq
103
+ elsif ldap_group_conf[:lowercase_name]
104
+ [name.downcase]
105
+ else
106
+ [name]
107
+ end
108
+
109
+ names.each do |n|
110
+ groups << LdapRole.new(n, entry.dn, entry[ldap_group_conf[:member_attribute]])
111
+ end
96
112
  entry.each do |attribute, values|
97
113
  log.debug " #{attribute}:"
98
114
  values.each do |value|
@@ -106,8 +122,8 @@ class Application
106
122
 
107
123
  PgRole = Struct.new :name, :member_names
108
124
 
109
- # List of default roles taken from https://www.postgresql.org/docs/current/static/default-roles.html
110
- PG_BUILTIN_ROLES = %w[ pg_signal_backend pg_monitor pg_read_all_settings pg_read_all_stats pg_stat_scan_tables]
125
+ # List of default roles taken from https://www.postgresql.org/docs/current/predefined-roles.html
126
+ PG_BUILTIN_ROLES = %w[ pg_read_all_data pg_write_all_data pg_read_all_settings pg_read_all_stats pg_stat_scan_tables pg_monitor pg_database_owner pg_signal_backend pg_read_server_files pg_write_server_files pg_execute_server_program ]
111
127
 
112
128
  def search_pg_users
113
129
  pg_users_conf = @config[:pg_users]
@@ -183,12 +199,12 @@ class Application
183
199
  r.type = type
184
200
  end
185
201
 
186
- log.info{
202
+ log.info do
187
203
  roles.each do |role|
188
204
  log.debug{ "#{role.state} #{role.type}: #{role.name}" }
189
205
  end
190
206
  "#{type} stat: create: #{roles.count{|r| r.state==:create }} drop: #{roles.count{|r| r.state==:drop }} keep: #{roles.count{|r| r.state==:keep }}"
191
- }
207
+ end
192
208
  return roles
193
209
  end
194
210
 
@@ -234,42 +250,42 @@ class Application
234
250
  MatchedMembership = Struct.new :role_name, :has_member, :state
235
251
 
236
252
  def match_memberships(ldap_roles, pg_roles)
237
- ldap_by_dn = ldap_roles.inject({}){|h,r| h[r.dn] = r; h }
238
- ldap_by_m2m = ldap_roles.inject([]){|a,r|
253
+ hash_of_arrays = Hash.new { |h, k| h[k] = [] }
254
+ ldap_by_dn = ldap_roles.inject(hash_of_arrays){|h,r| h[r.dn] << r; h }
255
+ ldap_by_m2m = ldap_roles.inject([]) do |a,r|
239
256
  next a unless r.member_dns
240
- a + r.member_dns.map{|dn|
241
- if has_member=ldap_by_dn[dn]
257
+ a + r.member_dns.flat_map do |dn|
258
+ has_members = ldap_by_dn[dn]
259
+ log.warn{"ldap member with dn #{dn} is unknown"} if has_members.empty?
260
+ has_members.map do |has_member|
242
261
  [r.name, has_member.name]
243
- else
244
- log.warn{"ldap member with dn #{dn} is unknown"}
245
- nil
246
262
  end
247
- }.compact
248
- }
263
+ end
264
+ end
249
265
 
250
- pg_by_name = pg_roles.inject({}){|h,r| h[r.name] = r; h }
251
- pg_by_m2m = pg_roles.inject([]){|a,r|
266
+ hash_of_arrays = Hash.new { |h, k| h[k] = [] }
267
+ pg_by_name = pg_roles.inject(hash_of_arrays){|h,r| h[r.name] << r; h }
268
+ pg_by_m2m = pg_roles.inject([]) do |a,r|
252
269
  next a unless r.member_names
253
- a + r.member_names.map{|name|
254
- if has_member=pg_by_name[name]
270
+ a + r.member_names.flat_map do |name|
271
+ has_members = pg_by_name[name]
272
+ log.warn{"pg member with name #{name} is unknown"} if has_members.empty?
273
+ has_members.map do |has_member|
255
274
  [r.name, has_member.name]
256
- else
257
- log.warn{"pg member with name #{name} is unknown"}
258
- nil
259
275
  end
260
- }.compact
261
- }
276
+ end
277
+ end
262
278
 
263
279
  memberships = (ldap_by_m2m & pg_by_m2m).map{|r,mo| MatchedMembership.new r, mo, :keep }
264
280
  memberships += (ldap_by_m2m - pg_by_m2m).map{|r,mo| MatchedMembership.new r, mo, :grant }
265
281
  memberships += (pg_by_m2m - ldap_by_m2m).map{|r,mo| MatchedMembership.new r, mo, :revoke }
266
282
 
267
- log.info{
283
+ log.info do
268
284
  memberships.each do |membership|
269
285
  log.debug{ "#{membership.state} #{membership.role_name} to #{membership.has_member}" }
270
286
  end
271
287
  "membership stat: grant: #{memberships.count{|u| u.state==:grant }} revoke: #{memberships.count{|u| u.state==:revoke }} keep: #{memberships.count{|u| u.state==:keep }}"
272
- }
288
+ end
273
289
  return memberships
274
290
  end
275
291
 
@@ -1,3 +1,3 @@
1
1
  module PgLdapSync
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/pg-ldap-sync.gemspec CHANGED
@@ -19,13 +19,14 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
  spec.rdoc_options = %w[--main README.md --charset=UTF-8]
22
+ spec.required_ruby_version = ">= 2.4"
22
23
 
23
24
  spec.add_runtime_dependency "net-ldap", "~> 0.16"
24
25
  spec.add_runtime_dependency "kwalify", "~> 0.7"
25
26
  spec.add_runtime_dependency "pg", ">= 0.14", "< 2.0"
26
27
  spec.add_development_dependency "ruby-ldapserver", "~> 0.3"
27
28
  spec.add_development_dependency "minitest", "~> 5.0"
28
- spec.add_development_dependency "bundler", "~> 1.16"
29
- spec.add_development_dependency "rake", "~> 10.0"
29
+ spec.add_development_dependency "bundler", ">= 1.16", "< 3.0"
30
+ spec.add_development_dependency "rake", "~> 13.0"
30
31
  spec.add_development_dependency "minitest-hooks", "~> 1.4"
31
32
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg-ldap-sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lars Kanis
@@ -10,9 +10,9 @@ bindir: exe
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDLjCCAhagAwIBAgIBBjANBgkqhkiG9w0BAQsFADA9MQ4wDAYDVQQDDAVrYW5p
13
+ MIIDLjCCAhagAwIBAgIBCTANBgkqhkiG9w0BAQsFADA9MQ4wDAYDVQQDDAVrYW5p
14
14
  czEXMBUGCgmSJomT8ixkARkWB2NvbWNhcmQxEjAQBgoJkiaJk/IsZAEZFgJkZTAe
15
- Fw0xODAzMDUwOTEzNDdaFw0xOTAzMDUwOTEzNDdaMD0xDjAMBgNVBAMMBWthbmlz
15
+ Fw0yMTA0MDcxMzQzNTZaFw0yMjA0MDcxMzQzNTZaMD0xDjAMBgNVBAMMBWthbmlz
16
16
  MRcwFQYKCZImiZPyLGQBGRYHY29tY2FyZDESMBAGCgmSJomT8ixkARkWAmRlMIIB
17
17
  IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApop+rNmg35bzRugZ21VMGqI6
18
18
  HGzPLO4VHYncWn/xmgPU/ZMcZdfj6MzIaZJ/czXyt4eHpBk1r8QOV3gBXnRXEjVW
@@ -21,15 +21,15 @@ cert_chain:
21
21
  Q53c63+VLGsOjODl1yPn/2ejyq8qWu6ahfTxiIlSar2UbwtaQGBDFdb2CXgEufXT
22
22
  L7oaPxlmj+Q2oLOfOnInd2Oxop59HoJCQPsg8f921J43NCQGA8VHK6paxIRDLQID
23
23
  AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUvgTdT7fe
24
- x17ugO3IOsjEJwW7KP4wDQYJKoZIhvcNAQELBQADggEBAEr2BqIKipd4rQ++Qmxw
25
- TU0prQzjlcDLxhQAX4JgmTMbSg8uO+cSvgsROcHfA1Cpo8VDDkZMoGISmfzmMegL
26
- QvZJp0Fr1TpeVxexhZq+MnC6OgqJSBfbhHh6DCMX1QAy8fvNzcmEOwRA5d3BYmWK
27
- bM8sBrAJGwrNRimekkTGTpYh5+gpiXm9JY07swwL2tR/faH/17IOXxJQ9sMXHNQU
28
- In/Pt5lKfMn+h+Ts8GhM91pEJnfwmBc0ksG8tDXAKAAUWIeizjL73bwtiXXeRRlA
29
- KtR70pH8rQHNxC2EvqVpBmRChJgWVMlfQofqhU2QK4s+5h52OHGZqMqCAeJ5taum
30
- Lvw=
24
+ x17ugO3IOsjEJwW7KP4wDQYJKoZIhvcNAQELBQADggEBAGCQhS4TBqUG1bSY5gw5
25
+ emj2GNePHFNlXTZ/W0/7FlnXQz/LyBZeYmy4AIHcdY0w9xsu3bPNGk8kLBkHgK3Y
26
+ l/yWiUK0NYRI3K3yI2EoTfrHPDT8XIgBPeUUGv5Nje+SUYMQWsfYWKo3+vLEG64a
27
+ n1xP+1+g2Za39WCS5LwnDWMiIk47NnxR9yXErKd0Iau/Q/IarYsHFX6kWWmlMoln
28
+ W1lMomCcOJFwIPnsy6aqq7YfS0YcqyHjcvs1h5k3zPaIRWhoPlQivniMVMa3Txh+
29
+ NEF/4atY64rruzkyfxGEcrFFOHJIkWnWQjRGaiZdgULxf7ira2gEFvV/ZtamqJWF
30
+ c+I=
31
31
  -----END CERTIFICATE-----
32
- date: 2018-03-13 00:00:00.000000000 Z
32
+ date: 2022-01-18 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: net-ldap
@@ -111,30 +111,36 @@ dependencies:
111
111
  name: bundler
112
112
  requirement: !ruby/object:Gem::Requirement
113
113
  requirements:
114
- - - "~>"
114
+ - - ">="
115
115
  - !ruby/object:Gem::Version
116
116
  version: '1.16'
117
+ - - "<"
118
+ - !ruby/object:Gem::Version
119
+ version: '3.0'
117
120
  type: :development
118
121
  prerelease: false
119
122
  version_requirements: !ruby/object:Gem::Requirement
120
123
  requirements:
121
- - - "~>"
124
+ - - ">="
122
125
  - !ruby/object:Gem::Version
123
126
  version: '1.16'
127
+ - - "<"
128
+ - !ruby/object:Gem::Version
129
+ version: '3.0'
124
130
  - !ruby/object:Gem::Dependency
125
131
  name: rake
126
132
  requirement: !ruby/object:Gem::Requirement
127
133
  requirements:
128
134
  - - "~>"
129
135
  - !ruby/object:Gem::Version
130
- version: '10.0'
136
+ version: '13.0'
131
137
  type: :development
132
138
  prerelease: false
133
139
  version_requirements: !ruby/object:Gem::Requirement
134
140
  requirements:
135
141
  - - "~>"
136
142
  - !ruby/object:Gem::Version
137
- version: '10.0'
143
+ version: '13.0'
138
144
  - !ruby/object:Gem::Dependency
139
145
  name: minitest-hooks
140
146
  requirement: !ruby/object:Gem::Requirement
@@ -160,8 +166,8 @@ files:
160
166
  - ".autotest"
161
167
  - ".gitignore"
162
168
  - ".travis.yml"
169
+ - CHANGELOG.md
163
170
  - Gemfile
164
- - History.txt
165
171
  - LICENSE.txt
166
172
  - Manifest.txt
167
173
  - README.md
@@ -191,15 +197,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
191
197
  requirements:
192
198
  - - ">="
193
199
  - !ruby/object:Gem::Version
194
- version: '0'
200
+ version: '2.4'
195
201
  required_rubygems_version: !ruby/object:Gem::Requirement
196
202
  requirements:
197
203
  - - ">="
198
204
  - !ruby/object:Gem::Version
199
205
  version: '0'
200
206
  requirements: []
201
- rubyforge_project:
202
- rubygems_version: 2.7.3
207
+ rubygems_version: 3.3.3
203
208
  signing_key:
204
209
  specification_version: 4
205
210
  summary: Use LDAP permissions in PostgreSQL
metadata.gz.sig CHANGED
Binary file
data/History.txt DELETED
@@ -1,8 +0,0 @@
1
- === 0.1.1 / 2012-11-15
2
-
3
- * Add ability to lowercase the LDAP name for use as PG role name
4
-
5
- === 0.1.0 / 2011-07-13
6
-
7
- * Birthday!
8
-