pg-ldap-sync 0.3.0 → 0.4.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/.github/workflows/ci.yml +81 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile +5 -0
- data/Rakefile +2 -0
- data/config/sample-config2.yaml +5 -2
- data/lib/pg_ldap_sync/application.rb +55 -10
- data/lib/pg_ldap_sync/compat.rb +9 -0
- data/lib/pg_ldap_sync/logger.rb +9 -5
- data/lib/pg_ldap_sync/version.rb +1 -1
- data/lib/pg_ldap_sync.rb +3 -1
- data/pg-ldap-sync.gemspec +1 -1
- data.tar.gz.sig +4 -1
- metadata +34 -26
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3630b9ed2307ae5d629896016d302f8ccfee7e324ca963b2ba6dfe1cee612351
|
4
|
+
data.tar.gz: f2065307ea2d61d6e2498e604c3d2105248380a27039601808be6b24579ef586
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 449792e68c3cf512209e42231b134fec4a090bb873473e4db844eb50a3f9be87cd23c07676bd80ffbf604774f6a72d1d7b508cee13d8f703577c19a4312d9975
|
7
|
+
data.tar.gz: 2bbe1be11834f35b361dc0a255cd8e02323aa2f000940efcec6e695bfa5e2653ff940c883cd6264462afda36d8125913ac012c7e89d760440345d67cd48bddd5
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
@@ -0,0 +1,81 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on: [push, pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
job_test_gem:
|
7
|
+
name: Test built gem
|
8
|
+
strategy:
|
9
|
+
fail-fast: false
|
10
|
+
matrix:
|
11
|
+
include:
|
12
|
+
- os: windows
|
13
|
+
ruby: "head"
|
14
|
+
PGVERSION: 15.1-1-windows-x64
|
15
|
+
PGVER: "15"
|
16
|
+
- os: windows
|
17
|
+
ruby: "2.4"
|
18
|
+
PGVERSION: 9.4.26-1-windows-x64
|
19
|
+
PGVER: "9.4"
|
20
|
+
- os: ubuntu
|
21
|
+
ruby: "head"
|
22
|
+
PGVER: "15"
|
23
|
+
- os: ubuntu
|
24
|
+
os_ver: "20.04"
|
25
|
+
ruby: "2.3"
|
26
|
+
PGVER: "9.3"
|
27
|
+
- os: macos
|
28
|
+
ruby: "head"
|
29
|
+
PGVERSION: 15.1-1-osx
|
30
|
+
PGVER: "15"
|
31
|
+
|
32
|
+
runs-on: ${{ matrix.os }}-${{ matrix.os_ver || 'latest' }}
|
33
|
+
env:
|
34
|
+
PGVERSION: ${{ matrix.PGVERSION }}
|
35
|
+
PGVER: ${{ matrix.PGVER }}
|
36
|
+
|
37
|
+
steps:
|
38
|
+
- uses: actions/checkout@v3
|
39
|
+
- name: Set up Ruby
|
40
|
+
uses: ruby/setup-ruby@v1
|
41
|
+
with:
|
42
|
+
ruby-version: ${{ matrix.ruby }}
|
43
|
+
|
44
|
+
- name: Download PostgreSQL Windows
|
45
|
+
if: matrix.os == 'windows'
|
46
|
+
run: |
|
47
|
+
Add-Type -AssemblyName System.IO.Compression.FileSystem
|
48
|
+
function Unzip {
|
49
|
+
param([string]$zipfile, [string]$outpath)
|
50
|
+
[System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
|
51
|
+
}
|
52
|
+
|
53
|
+
$(new-object net.webclient).DownloadFile("http://get.enterprisedb.com/postgresql/postgresql-$env:PGVERSION-binaries.zip", "postgresql-binaries.zip")
|
54
|
+
Unzip "postgresql-binaries.zip" "."
|
55
|
+
echo "$pwd/pgsql/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
56
|
+
echo "PGUSER=$env:USERNAME" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
57
|
+
echo "PGPASSWORD=" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
58
|
+
md temp
|
59
|
+
icacls temp /grant "Everyone:(OI)(CI)F" /T
|
60
|
+
|
61
|
+
- name: Download PostgreSQL Ubuntu
|
62
|
+
if: matrix.os == 'ubuntu'
|
63
|
+
run: |
|
64
|
+
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main $PGVER" | sudo tee -a /etc/apt/sources.list.d/pgdg.list
|
65
|
+
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
66
|
+
sudo apt-get -y update
|
67
|
+
sudo apt-get -y --allow-downgrades install postgresql-$PGVER libpq5=$PGVER* libpq-dev=$PGVER*
|
68
|
+
echo /usr/lib/postgresql/$PGVER/bin >> $GITHUB_PATH
|
69
|
+
|
70
|
+
- name: Download PostgreSQL Macos
|
71
|
+
if: matrix.os == 'macos'
|
72
|
+
run: |
|
73
|
+
wget https://get.enterprisedb.com/postgresql/postgresql-$PGVERSION-binaries.zip && \
|
74
|
+
sudo mkdir -p /Library/PostgreSQL && \
|
75
|
+
sudo unzip postgresql-$PGVERSION-binaries.zip -d /Library/PostgreSQL/$PGVER && \
|
76
|
+
echo /Library/PostgreSQL/$PGVER/bin >> $GITHUB_PATH
|
77
|
+
|
78
|
+
- run: bundle install
|
79
|
+
|
80
|
+
- name: Run specs
|
81
|
+
run: bundle exec rake test
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
## 0.4.0 / 2022-12-02
|
2
|
+
|
3
|
+
* Support groups with over 1500 users in Active Directory server. #32
|
4
|
+
* Retrieve only necessary attributes from LDAP server.
|
5
|
+
* Add error text to exception, so that it's visible even if nothing is logged.
|
6
|
+
* Fix compatibility with PostgreSQL-15
|
7
|
+
* Require ruby-2.3+
|
8
|
+
|
9
|
+
|
1
10
|
## 0.3.0 / 2022-01-18
|
2
11
|
|
3
12
|
* Add config option :bothcase_name .
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/config/sample-config2.yaml
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
# With this sample config the distinction between LDAP-synchronized
|
2
2
|
# groups/users from is done by the membership to ldap_user and
|
3
|
-
# ldap_group. These two roles
|
4
|
-
# pg_ldap_sync can run
|
3
|
+
# ldap_group. These two roles have to be defined manally before
|
4
|
+
# pg_ldap_sync can run:
|
5
|
+
# CREATE GROUP ldap_group;
|
6
|
+
# CREATE USER ldap_user;
|
7
|
+
#
|
5
8
|
|
6
9
|
# Connection parameters to LDAP server
|
7
10
|
# see also: http://net-ldap.rubyforge.org/Net/LDAP.html#method-c-new
|
@@ -52,13 +52,18 @@ class Application
|
|
52
52
|
|
53
53
|
def search_ldap_users
|
54
54
|
ldap_user_conf = @config[:ldap_users]
|
55
|
+
name_attribute = ldap_user_conf[:name_attribute]
|
55
56
|
|
56
57
|
users = []
|
57
|
-
res = @ldap.search(
|
58
|
-
|
58
|
+
res = @ldap.search(
|
59
|
+
base: ldap_user_conf[:base],
|
60
|
+
filter: ldap_user_conf[:filter],
|
61
|
+
attributes: [name_attribute, :dn]
|
62
|
+
) do |entry|
|
63
|
+
name = entry[name_attribute].first
|
59
64
|
|
60
65
|
unless name
|
61
|
-
log.warn "user attribute #{
|
66
|
+
log.warn "user attribute #{name_attribute.inspect} not defined for #{entry.dn}"
|
62
67
|
next
|
63
68
|
end
|
64
69
|
log.info "found user-dn: #{entry.dn}"
|
@@ -85,17 +90,56 @@ class Application
|
|
85
90
|
return users
|
86
91
|
end
|
87
92
|
|
93
|
+
def retrieve_array_attribute(entry, attribute_name)
|
94
|
+
array = entry[attribute_name]
|
95
|
+
if array.empty?
|
96
|
+
# Possibly an attribute, which must be retrieved in several ranges
|
97
|
+
|
98
|
+
ranged_attr = entry.attribute_names.find { |n| n =~ /\A#{Regexp.escape(attribute_name)};range=/ }
|
99
|
+
if ranged_attr
|
100
|
+
entry_dn = entry.dn
|
101
|
+
|
102
|
+
loop do
|
103
|
+
array += entry[ranged_attr]
|
104
|
+
log.debug "retrieved attribute range #{ranged_attr.inspect} of dn #{entry_dn}"
|
105
|
+
|
106
|
+
if ranged_attr =~ /;range=\d\-\*\z/
|
107
|
+
break
|
108
|
+
end
|
109
|
+
|
110
|
+
attribute_with_range = ranged_attr.to_s.gsub(/;range=.*/, ";range=#{array.size}-*")
|
111
|
+
entry = @ldap.search(
|
112
|
+
base: entry_dn,
|
113
|
+
scope: Net::LDAP::SearchScope_BaseObject,
|
114
|
+
attributes: attribute_with_range).first
|
115
|
+
|
116
|
+
ranged_attr = entry.attribute_names.find { |n| n =~ /\A#{Regexp.escape(attribute_name)};range=/ }
|
117
|
+
end
|
118
|
+
end
|
119
|
+
else
|
120
|
+
# Values already received -> No ranged attribute
|
121
|
+
end
|
122
|
+
return array
|
123
|
+
end
|
124
|
+
|
88
125
|
def search_ldap_groups
|
89
126
|
ldap_group_conf = @config[:ldap_groups]
|
127
|
+
name_attribute = ldap_group_conf[:name_attribute]
|
128
|
+
member_attribute = ldap_group_conf[:member_attribute]
|
90
129
|
|
91
130
|
groups = []
|
92
|
-
res = @ldap.search(
|
93
|
-
|
131
|
+
res = @ldap.search(
|
132
|
+
base: ldap_group_conf[:base],
|
133
|
+
filter: ldap_group_conf[:filter],
|
134
|
+
attributes: [name_attribute, member_attribute, :dn]
|
135
|
+
) do |entry|
|
136
|
+
name = entry[name_attribute].first
|
94
137
|
|
95
138
|
unless name
|
96
|
-
log.warn "user attribute #{
|
139
|
+
log.warn "user attribute #{name_attribute.inspect} not defined for #{entry.dn}"
|
97
140
|
next
|
98
141
|
end
|
142
|
+
|
99
143
|
log.info "found group-dn: #{entry.dn}"
|
100
144
|
|
101
145
|
names = if ldap_group_conf[:bothcase_name]
|
@@ -107,7 +151,8 @@ class Application
|
|
107
151
|
end
|
108
152
|
|
109
153
|
names.each do |n|
|
110
|
-
|
154
|
+
group_members = retrieve_array_attribute(entry, member_attribute)
|
155
|
+
groups << LdapRole.new(n, entry.dn, group_members)
|
111
156
|
end
|
112
157
|
entry.each do |attribute, values|
|
113
158
|
log.debug " #{attribute}:"
|
@@ -123,7 +168,7 @@ class Application
|
|
123
168
|
PgRole = Struct.new :name, :member_names
|
124
169
|
|
125
170
|
# 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 ]
|
171
|
+
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 pg_checkpoint]
|
127
172
|
|
128
173
|
def search_pg_users
|
129
174
|
pg_users_conf = @config[:pg_users]
|
@@ -348,14 +393,14 @@ class Application
|
|
348
393
|
|
349
394
|
# Determine exitcode
|
350
395
|
if log.had_errors?
|
351
|
-
raise ErrorExit,
|
396
|
+
raise ErrorExit.new(1, log.first_error)
|
352
397
|
end
|
353
398
|
end
|
354
399
|
|
355
400
|
def self.run(argv)
|
356
401
|
s = self.new
|
357
402
|
s.config_fname = '/etc/pg_ldap_sync.yaml'
|
358
|
-
s.log = Logger.new($stdout
|
403
|
+
s.log = Logger.new($stdout)
|
359
404
|
s.log.level = Logger::ERROR
|
360
405
|
|
361
406
|
OptionParser.new do |opts|
|
data/lib/pg_ldap_sync/logger.rb
CHANGED
@@ -2,23 +2,27 @@ require 'logger'
|
|
2
2
|
|
3
3
|
module PgLdapSync
|
4
4
|
class Logger < ::Logger
|
5
|
-
def initialize(io
|
5
|
+
def initialize(io)
|
6
6
|
super(io)
|
7
7
|
@counters = {}
|
8
8
|
end
|
9
9
|
|
10
|
-
def add(severity, *args)
|
11
|
-
@counters[severity] ||= 0
|
12
|
-
@counters[severity] += 1
|
10
|
+
def add(severity, *args, &block)
|
13
11
|
super
|
12
|
+
return unless [Logger::FATAL, Logger::ERROR].include?(severity)
|
13
|
+
@counters[severity] ||= block ? block.call : args.first
|
14
14
|
end
|
15
15
|
|
16
16
|
def had_logged?(severity)
|
17
|
-
|
17
|
+
!!@counters[severity]
|
18
18
|
end
|
19
19
|
|
20
20
|
def had_errors?
|
21
21
|
had_logged?(Logger::FATAL) || had_logged?(Logger::ERROR)
|
22
22
|
end
|
23
|
+
|
24
|
+
def first_error
|
25
|
+
@counters[Logger::FATAL] || @counters[Logger::ERROR]
|
26
|
+
end
|
23
27
|
end
|
24
28
|
end
|
data/lib/pg_ldap_sync/version.rb
CHANGED
data/lib/pg_ldap_sync.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "pg_ldap_sync/application"
|
2
|
+
require "pg_ldap_sync/compat"
|
2
3
|
require "pg_ldap_sync/version"
|
3
4
|
|
4
5
|
module PgLdapSync
|
@@ -8,7 +9,8 @@ module PgLdapSync
|
|
8
9
|
class ApplicationExit < RuntimeError
|
9
10
|
attr_reader :exitcode
|
10
11
|
|
11
|
-
def initialize(exitcode)
|
12
|
+
def initialize(exitcode, error=nil)
|
13
|
+
super(error)
|
12
14
|
@exitcode = exitcode
|
13
15
|
end
|
14
16
|
end
|
data/pg-ldap-sync.gemspec
CHANGED
@@ -19,7 +19,7 @@ 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.
|
22
|
+
spec.required_ruby_version = ">= 2.3"
|
23
23
|
|
24
24
|
spec.add_runtime_dependency "net-ldap", "~> 0.16"
|
25
25
|
spec.add_runtime_dependency "kwalify", "~> 0.7"
|
data.tar.gz.sig
CHANGED
@@ -1 +1,4 @@
|
|
1
|
-
|
1
|
+
j�"�gj�y�1D�FDb�:떙uqWg��a�1�?5FE�{�{E�_��Ld��+*���:�]��\h�W��{�?��
|
2
|
+
�8_���v���-))Z�x7�T_���X�^���c��&���V��Ѿ�dM�E��c��a�ⰨZ��bL��Ȓ@�
|
3
|
+
�n�r8 _@��BR���[^�zP���6�����&|��QF~=%+�C���q
|
4
|
+
��غ�Գ.<FG=}��q�1�?�EE��
|
metadata
CHANGED
@@ -1,35 +1,41 @@
|
|
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.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lars Kanis
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
13
|
+
MIIETTCCArWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAoMSYwJAYDVQQDDB1sYXJz
|
14
|
+
L0RDPWdyZWl6LXJlaW5zZG9yZi9EQz1kZTAeFw0yMjAyMTQxMzMwNTZaFw0yMzAy
|
15
|
+
MTQxMzMwNTZaMCgxJjAkBgNVBAMMHWxhcnMvREM9Z3JlaXotcmVpbnNkb3JmL0RD
|
16
|
+
PWRlMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAwum6Y1KznfpzXOT/
|
17
|
+
mZgJTBbxZuuZF49Fq3K0WA67YBzNlDv95qzSp7V/7Ek3NCcnT7G+2kSuhNo1FhdN
|
18
|
+
eSDO/moYebZNAcu3iqLsuzuULXPLuoU0GsMnVMqV9DZPh7cQHE5EBZ7hlzDBK7k/
|
19
|
+
8nBMvR0mHo77kIkapHc26UzVq/G0nKLfDsIHXVylto3PjzOumjG6GhmFN4r3cP6e
|
20
|
+
SDfl1FSeRYVpt4kmQULz/zdSaOH3AjAq7PM2Z91iGwQvoUXMANH2v89OWjQO/NHe
|
21
|
+
JMNDFsmHK/6Ji4Kk48Z3TyscHQnipAID5GhS1oD21/WePdj7GhmbF5gBzkV5uepd
|
22
|
+
eJQPgWGwrQW/Z2oPjRuJrRofzWfrMWqbOahj9uth6WSxhNexUtbjk6P8emmXOJi5
|
23
|
+
chQPnWX+N3Gj+jjYxqTFdwT7Mj3pv1VHa+aNUbqSPpvJeDyxRIuo9hvzDaBHb/Cg
|
24
|
+
9qRVcm8a96n4t7y2lrX1oookY6bkBaxWOMtWlqIprq8JZXM9AgMBAAGjgYEwfzAJ
|
25
|
+
BgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUOIdbSMr3VFrTCO9/cTM0
|
26
|
+
0exHzBcwIgYDVR0RBBswGYEXbGFyc0BncmVpei1yZWluc2RvcmYuZGUwIgYDVR0S
|
27
|
+
BBswGYEXbGFyc0BncmVpei1yZWluc2RvcmYuZGUwDQYJKoZIhvcNAQELBQADggGB
|
28
|
+
AFWP7F/y3Oq3NgrqUOnjKOeDaBa7AqNhHS+PZg+C90lnJzMgOs4KKgZYxqSQVSab
|
29
|
+
SCEmzIO/StkXY4NpJ4fYLrHemf/fJy1wPyu+fNdp5SEEUwEo+2toRFlzTe4u4LdS
|
30
|
+
QC636nPPTMt8H3xz2wf/lUIUeo2Qc95Qt2BQM465ibbG9kmA3c7Sopx6yOabYOAl
|
31
|
+
KPRbOSEPiWYcF9Suuz8Gdf8jxEtPlnZiwRvnYJ+IHMq3XQCJWPpMzdDMbtlgHbXE
|
32
|
+
vq1zOTLMSYAS0UB3uionR4yo1hLz60odwkCm7qf0o2Ci/5OjtB0a89VuyqRU2vUJ
|
33
|
+
QH95WBjDJ6lCCW7J0mrMPnJQSUFTmufsU6jOChvPaCeAzW1YwrsP/YKnvwueG7ip
|
34
|
+
VOdW6RitjtFxhS7evRL0201+KUvLz12zZWWjOcujlQs64QprxOtiv/MiisKb1Ng+
|
35
|
+
oL1mUdzB8KrZL4/WbG5YNX6UTtJbIOu9qEFbBAy4/jtIkJX+dlNoFwd4GXQW1YNO
|
36
|
+
nA==
|
31
37
|
-----END CERTIFICATE-----
|
32
|
-
date: 2022-
|
38
|
+
date: 2022-12-02 00:00:00.000000000 Z
|
33
39
|
dependencies:
|
34
40
|
- !ruby/object:Gem::Dependency
|
35
41
|
name: net-ldap
|
@@ -155,7 +161,7 @@ dependencies:
|
|
155
161
|
- - "~>"
|
156
162
|
- !ruby/object:Gem::Version
|
157
163
|
version: '1.4'
|
158
|
-
description:
|
164
|
+
description:
|
159
165
|
email:
|
160
166
|
- lars@greiz-reinsdorf.de
|
161
167
|
executables:
|
@@ -164,6 +170,7 @@ extensions: []
|
|
164
170
|
extra_rdoc_files: []
|
165
171
|
files:
|
166
172
|
- ".autotest"
|
173
|
+
- ".github/workflows/ci.yml"
|
167
174
|
- ".gitignore"
|
168
175
|
- ".travis.yml"
|
169
176
|
- CHANGELOG.md
|
@@ -179,6 +186,7 @@ files:
|
|
179
186
|
- exe/pg_ldap_sync
|
180
187
|
- lib/pg_ldap_sync.rb
|
181
188
|
- lib/pg_ldap_sync/application.rb
|
189
|
+
- lib/pg_ldap_sync/compat.rb
|
182
190
|
- lib/pg_ldap_sync/logger.rb
|
183
191
|
- lib/pg_ldap_sync/version.rb
|
184
192
|
- pg-ldap-sync.gemspec
|
@@ -186,7 +194,7 @@ homepage: https://github.com/larskanis/pg-ldap-sync
|
|
186
194
|
licenses:
|
187
195
|
- MIT
|
188
196
|
metadata: {}
|
189
|
-
post_install_message:
|
197
|
+
post_install_message:
|
190
198
|
rdoc_options:
|
191
199
|
- "--main"
|
192
200
|
- README.md
|
@@ -197,15 +205,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
197
205
|
requirements:
|
198
206
|
- - ">="
|
199
207
|
- !ruby/object:Gem::Version
|
200
|
-
version: '2.
|
208
|
+
version: '2.3'
|
201
209
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
202
210
|
requirements:
|
203
211
|
- - ">="
|
204
212
|
- !ruby/object:Gem::Version
|
205
213
|
version: '0'
|
206
214
|
requirements: []
|
207
|
-
rubygems_version: 3.3.
|
208
|
-
signing_key:
|
215
|
+
rubygems_version: 3.3.7
|
216
|
+
signing_key:
|
209
217
|
specification_version: 4
|
210
218
|
summary: Use LDAP permissions in PostgreSQL
|
211
219
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|