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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/.travis.yml +12 -9
- data/CHANGELOG.md +31 -0
- data/README.md +7 -6
- data/appveyor.yml +6 -4
- data/config/sample-config2.yaml +2 -0
- data/config/schema.yaml +6 -0
- data/lib/pg_ldap_sync/application.rb +50 -34
- data/lib/pg_ldap_sync/version.rb +1 -1
- data/pg-ldap-sync.gemspec +3 -2
- data.tar.gz.sig +0 -0
- metadata +24 -19
- metadata.gz.sig +0 -0
- data/History.txt +0 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0e6ea134d34a9ff15f8e16aacb27ee545ff22a23500097e7474256c666bc4eff
|
|
4
|
+
data.tar.gz: 32aedf90f32b328497bee8df9d01943b073a6faaf6f3f4c0336b2e90f0d779cc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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.
|
|
5
|
+
- "2.4.0"
|
|
5
6
|
- ruby-head
|
|
6
7
|
env:
|
|
7
|
-
- "PGVERSION=
|
|
8
|
-
- "PGVERSION=9.
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
[](https://app.travis-ci.com/larskanis/pg-ldap-sync) [](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
|
|
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
|
-
|
|
54
|
-
|
|
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
|
-
|
|
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: "
|
|
23
|
-
PGVER:
|
|
24
|
-
- ruby_version: "
|
|
24
|
+
- ruby_version: "27-x64"
|
|
25
|
+
PGVER: 13
|
|
26
|
+
- ruby_version: "24"
|
|
25
27
|
PGVER: 10
|
data/config/sample-config2.yaml
CHANGED
|
@@ -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({})
|
|
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
|
-
|
|
68
|
-
|
|
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
|
-
|
|
95
|
-
|
|
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/
|
|
110
|
-
PG_BUILTIN_ROLES = %w[
|
|
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
|
-
|
|
238
|
-
|
|
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.
|
|
241
|
-
|
|
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
|
-
|
|
248
|
-
|
|
263
|
+
end
|
|
264
|
+
end
|
|
249
265
|
|
|
250
|
-
|
|
251
|
-
|
|
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.
|
|
254
|
-
|
|
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
|
-
|
|
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
|
|
data/lib/pg_ldap_sync/version.rb
CHANGED
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", "
|
|
29
|
-
spec.add_development_dependency "rake", "~>
|
|
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.
|
|
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
|
-
|
|
13
|
+
MIIDLjCCAhagAwIBAgIBCTANBgkqhkiG9w0BAQsFADA9MQ4wDAYDVQQDDAVrYW5p
|
|
14
14
|
czEXMBUGCgmSJomT8ixkARkWB2NvbWNhcmQxEjAQBgoJkiaJk/IsZAEZFgJkZTAe
|
|
15
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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:
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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
|
-
|
|
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
|