pg-ldap-sync 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
-