pg-ldap-sync 0.4.0 → 0.5.1
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 +19 -6
- data/CHANGELOG.md +12 -0
- data/Gemfile +0 -1
- data/README.md +9 -2
- data/appveyor.yml +5 -4
- data/config/sample-config.yaml +15 -1
- data/config/sample-config2.yaml +8 -5
- data/lib/pg_ldap_sync/application.rb +21 -3
- data/lib/pg_ldap_sync/compat.rb +1 -0
- data/lib/pg_ldap_sync/version.rb +1 -1
- data/pg-ldap-sync.gemspec +4 -1
- data.tar.gz.sig +1 -4
- metadata +61 -25
- 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: 62fea7bb7d0ed64a4ccb20bae815fd3f5412fb5d594d5a5aa54c8062da2ec401
|
4
|
+
data.tar.gz: db9d4ff658763c76efc0bcf7d6713b02476d2902df9c2a9ee42de77172bf8b7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b56eafdd8955a818d78d65e34916109255b64ff8b0c48d1c6c5ab4d3b6588c0221166dfd5428f36332ea20aede3b22f8fa52122aaaaf3493dd802a56a07c0504
|
7
|
+
data.tar.gz: eb4216d46013a6dd84189ed7ffa913e2cf635bd5ea57a33137f930c5731fe5f8712abe50a0b68a5e55936a427a4a57497630412f99bc53f3ade352acf53b6a13
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/.github/workflows/ci.yml
CHANGED
@@ -1,6 +1,18 @@
|
|
1
1
|
name: CI
|
2
2
|
|
3
|
-
on:
|
3
|
+
on:
|
4
|
+
workflow_dispatch:
|
5
|
+
schedule:
|
6
|
+
- cron: "0 1 2 * *" # At 01:00 on the second day of each month - https://crontab.guru/#0_1_2_*_*
|
7
|
+
push:
|
8
|
+
branches:
|
9
|
+
- master
|
10
|
+
tags:
|
11
|
+
- "*.*.*"
|
12
|
+
pull_request:
|
13
|
+
types: [opened, synchronize]
|
14
|
+
branches:
|
15
|
+
- "*"
|
4
16
|
|
5
17
|
jobs:
|
6
18
|
job_test_gem:
|
@@ -11,23 +23,23 @@ jobs:
|
|
11
23
|
include:
|
12
24
|
- os: windows
|
13
25
|
ruby: "head"
|
14
|
-
PGVERSION:
|
15
|
-
PGVER: "
|
26
|
+
PGVERSION: 17.0-1-windows-x64
|
27
|
+
PGVER: "17"
|
16
28
|
- os: windows
|
17
29
|
ruby: "2.4"
|
18
30
|
PGVERSION: 9.4.26-1-windows-x64
|
19
31
|
PGVER: "9.4"
|
20
32
|
- os: ubuntu
|
21
33
|
ruby: "head"
|
22
|
-
PGVER: "
|
34
|
+
PGVER: "17"
|
23
35
|
- os: ubuntu
|
24
36
|
os_ver: "20.04"
|
25
37
|
ruby: "2.3"
|
26
38
|
PGVER: "9.3"
|
27
39
|
- os: macos
|
28
40
|
ruby: "head"
|
29
|
-
PGVERSION:
|
30
|
-
PGVER: "
|
41
|
+
PGVERSION: 17.0-1-osx
|
42
|
+
PGVER: "17"
|
31
43
|
|
32
44
|
runs-on: ${{ matrix.os }}-${{ matrix.os_ver || 'latest' }}
|
33
45
|
env:
|
@@ -73,6 +85,7 @@ jobs:
|
|
73
85
|
wget https://get.enterprisedb.com/postgresql/postgresql-$PGVERSION-binaries.zip && \
|
74
86
|
sudo mkdir -p /Library/PostgreSQL && \
|
75
87
|
sudo unzip postgresql-$PGVERSION-binaries.zip -d /Library/PostgreSQL/$PGVER && \
|
88
|
+
sudo mv /Library/PostgreSQL/$PGVER/pgsql/* /Library/PostgreSQL/$PGVER/ && \
|
76
89
|
echo /Library/PostgreSQL/$PGVER/bin >> $GITHUB_PATH
|
77
90
|
|
78
91
|
- run: bundle install
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
## 0.5.1 / 2025-03-22
|
2
|
+
|
3
|
+
* Add dependent gems for compat with ruby-3.5
|
4
|
+
* Add predefined roles for compat with PostgreSQL-16 and 17
|
5
|
+
|
6
|
+
|
7
|
+
## 0.5.0 / 2023-08-24
|
8
|
+
|
9
|
+
* Add Kerberos and NTLM authentication support to LDAP connection
|
10
|
+
* Fix retrieval of groups with over 1500 users in Active Directory server. #45
|
11
|
+
|
12
|
+
|
1
13
|
## 0.4.0 / 2022-12-02
|
2
14
|
|
3
15
|
* Support groups with over 1500 users in Active Directory server. #32
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -20,16 +20,18 @@ It is meant to be started as a cron job.
|
|
20
20
|
|
21
21
|
## FEATURES:
|
22
22
|
|
23
|
+
* User+group creation, deletion and changes in memberships are synchronized from LDAP to PostgreSQL
|
24
|
+
* Nested groups/roles supported
|
23
25
|
* Configurable per YAML config file
|
24
26
|
* Can use Active Directory as LDAP-Server
|
25
|
-
* Nested groups/roles supported
|
26
27
|
* Set scope of considered users/groups on LDAP and PG side
|
27
28
|
* Test mode which doesn't do any changes to the DBMS
|
28
29
|
* Both LDAP and PG connections can be secured by SSL/TLS
|
30
|
+
* NTLM and Kerberos authentication to LDAP server
|
29
31
|
|
30
32
|
## REQUIREMENTS:
|
31
33
|
|
32
|
-
* Ruby-2.0
|
34
|
+
* Ruby-2.0+
|
33
35
|
* LDAP-v3 server
|
34
36
|
* PostgreSQL-server v9.0+
|
35
37
|
|
@@ -70,6 +72,11 @@ Run in modify-mode:
|
|
70
72
|
pg_ldap_sync -c my_config.yaml -vv
|
71
73
|
```
|
72
74
|
|
75
|
+
It is recommended to avoid granting permissions to synchronized users on the PostgreSQL server, but to grant permissions to groups instead.
|
76
|
+
This is because `DROP USER` statements invoked when a user leaves otherwise fail due to depending objects.
|
77
|
+
`DROP GROUP` equally fails if there are depending objects, but groups are typically more stable and removed rarely.
|
78
|
+
|
79
|
+
|
73
80
|
## TEST:
|
74
81
|
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
82
|
```sh
|
data/appveyor.yml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
image: Visual Studio
|
1
|
+
image: Visual Studio 2022
|
2
2
|
|
3
3
|
init:
|
4
4
|
- set PATH=C:/Ruby%ruby_version%/bin;c:/Program Files/Git/cmd;c:/Windows/system32;C:/Windows/System32/WindowsPowerShell/v1.0
|
@@ -21,7 +21,8 @@ test_script:
|
|
21
21
|
|
22
22
|
environment:
|
23
23
|
matrix:
|
24
|
+
# ruby-3.3.6 currently fails installing stringio-3.1.5.gem
|
25
|
+
# - ruby_version: "33-x64"
|
26
|
+
# PGVER: 16
|
24
27
|
- ruby_version: "27-x64"
|
25
|
-
PGVER:
|
26
|
-
- ruby_version: "24"
|
27
|
-
PGVER: 10
|
28
|
+
PGVER: 11
|
data/config/sample-config.yaml
CHANGED
@@ -5,13 +5,26 @@
|
|
5
5
|
# Connection parameters to LDAP server
|
6
6
|
# see also: http://net-ldap.rubyforge.org/Net/LDAP.html#method-c-new
|
7
7
|
ldap_connection:
|
8
|
-
host:
|
8
|
+
host: ldapserver
|
9
9
|
port: 389
|
10
10
|
auth:
|
11
11
|
method: :simple
|
12
12
|
username: CN=username,OU=!Serviceaccounts,OU=company,DC=company,DC=de
|
13
13
|
password: secret
|
14
14
|
|
15
|
+
# or GSSAPI / Kerberos authentication:
|
16
|
+
auth:
|
17
|
+
method: :gssapi
|
18
|
+
hostname: ldapserver.company.de
|
19
|
+
servicename: ldap # optional, defaults to "ldap"
|
20
|
+
|
21
|
+
# or GSS-SPNEGO / NTLM authentication
|
22
|
+
auth:
|
23
|
+
method: :gss_spnego
|
24
|
+
username: 'myuser'
|
25
|
+
password: 'secret'
|
26
|
+
domain: 'company.de' # optional
|
27
|
+
|
15
28
|
# Search parameters for LDAP users which should be synchronized
|
16
29
|
ldap_users:
|
17
30
|
base: OU=company,OU=company,DC=company,DC=de
|
@@ -51,4 +64,5 @@ pg_groups:
|
|
51
64
|
filter: NOT rolcanlogin AND NOT rolsuper
|
52
65
|
# Options for CREATE RULE statements
|
53
66
|
create_options: NOLOGIN
|
67
|
+
# Options for GRANT <role> TO <group> statements
|
54
68
|
grant_options:
|
data/config/sample-config2.yaml
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
# With this sample config the distinction between LDAP-synchronized
|
2
|
-
# groups/users from is done by the
|
3
|
-
#
|
4
|
-
# pg_ldap_sync can
|
5
|
-
#
|
6
|
-
#
|
2
|
+
# groups/users from manually created PostgreSQL users is done by the
|
3
|
+
# membership in ldap_user and ldap_group.
|
4
|
+
# These two roles have to be defined manally before pg_ldap_sync can
|
5
|
+
# run and all synchronized users/groups will become member of them
|
6
|
+
# later on:
|
7
|
+
# CREATE GROUP ldap_groups;
|
8
|
+
# CREATE USER ldap_users;
|
7
9
|
#
|
8
10
|
|
9
11
|
# Connection parameters to LDAP server
|
@@ -63,4 +65,5 @@ pg_groups:
|
|
63
65
|
filter: oid IN (SELECT pam.member FROM pg_auth_members pam JOIN pg_roles pr ON pr.oid=pam.roleid WHERE pr.rolname='ldap_groups')
|
64
66
|
# Options for CREATE RULE statements
|
65
67
|
create_options: NOLOGIN IN ROLE ldap_groups
|
68
|
+
# Options for GRANT <role> TO <group> statements
|
66
69
|
grant_options:
|
@@ -103,7 +103,7 @@ class Application
|
|
103
103
|
array += entry[ranged_attr]
|
104
104
|
log.debug "retrieved attribute range #{ranged_attr.inspect} of dn #{entry_dn}"
|
105
105
|
|
106
|
-
if ranged_attr =~ /;range=\d
|
106
|
+
if ranged_attr =~ /;range=\d+\-\*\z/
|
107
107
|
break
|
108
108
|
end
|
109
109
|
|
@@ -168,7 +168,7 @@ class Application
|
|
168
168
|
PgRole = Struct.new :name, :member_names
|
169
169
|
|
170
170
|
# List of default roles taken from https://www.postgresql.org/docs/current/predefined-roles.html
|
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]
|
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 pg_create_subscription pg_maintain pg_use_reserved_connections ]
|
172
172
|
|
173
173
|
def search_pg_users
|
174
174
|
pg_users_conf = @config[:pg_users]
|
@@ -361,8 +361,26 @@ class Application
|
|
361
361
|
def start!
|
362
362
|
read_config_file(@config_fname)
|
363
363
|
|
364
|
+
ldap_conf = @config[:ldap_connection]
|
365
|
+
auth_meth = ldap_conf.dig(:auth, :method).to_s
|
366
|
+
if auth_meth == "gssapi"
|
367
|
+
begin
|
368
|
+
require 'net/ldap/auth_adapter/gssapi'
|
369
|
+
rescue LoadError => err
|
370
|
+
raise "#{err}\nTo use GSSAPI authentication please run:\n gem install net-ldap-auth_adapter-gssapi"
|
371
|
+
end
|
372
|
+
elsif auth_meth == "gss_spnego"
|
373
|
+
begin
|
374
|
+
require 'net-ldap-gss-spnego'
|
375
|
+
# This doesn't work since this file is defined in net-ldap as a placeholder:
|
376
|
+
# require 'net/ldap/auth_adapter/gss_spnego'
|
377
|
+
rescue LoadError => err
|
378
|
+
raise "#{err}\nTo use GSSAPI authentication please run:\n gem install net-ldap-gss-spnego"
|
379
|
+
end
|
380
|
+
end
|
381
|
+
|
364
382
|
# gather LDAP users and groups
|
365
|
-
@ldap = Net::LDAP.new
|
383
|
+
@ldap = Net::LDAP.new ldap_conf
|
366
384
|
ldap_users = uniq_names search_ldap_users
|
367
385
|
ldap_groups = uniq_names search_ldap_groups
|
368
386
|
|
data/lib/pg_ldap_sync/compat.rb
CHANGED
data/lib/pg_ldap_sync/version.rb
CHANGED
data/pg-ldap-sync.gemspec
CHANGED
@@ -24,7 +24,10 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_runtime_dependency "net-ldap", "~> 0.16"
|
25
25
|
spec.add_runtime_dependency "kwalify", "~> 0.7"
|
26
26
|
spec.add_runtime_dependency "pg", ">= 0.14", "< 2.0"
|
27
|
-
spec.
|
27
|
+
spec.add_runtime_dependency "logger", "~> 1.0"
|
28
|
+
spec.add_runtime_dependency "ostruct", "~> 0.1" # workaround missing dependency in net-ldap-0.19.0
|
29
|
+
spec.add_runtime_dependency "base64", "~> 0.1" # workaround missing dependency in net-ldap-0.19.0
|
30
|
+
spec.add_development_dependency "ruby-ldapserver", "~> 0.7"
|
28
31
|
spec.add_development_dependency "minitest", "~> 5.0"
|
29
32
|
spec.add_development_dependency "bundler", ">= 1.16", "< 3.0"
|
30
33
|
spec.add_development_dependency "rake", "~> 13.0"
|
data.tar.gz.sig
CHANGED
metadata
CHANGED
@@ -1,18 +1,17 @@
|
|
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.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lars Kanis
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain:
|
11
10
|
- |
|
12
11
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
MIIEBDCCAmygAwIBAgIBAzANBgkqhkiG9w0BAQsFADAoMSYwJAYDVQQDDB1sYXJz
|
13
|
+
L0RDPWdyZWl6LXJlaW5zZG9yZi9EQz1kZTAeFw0yNDEyMjkxOTU2NTZaFw0yNTEy
|
14
|
+
MjkxOTU2NTZaMCgxJjAkBgNVBAMMHWxhcnMvREM9Z3JlaXotcmVpbnNkb3JmL0RD
|
16
15
|
PWRlMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAwum6Y1KznfpzXOT/
|
17
16
|
mZgJTBbxZuuZF49Fq3K0WA67YBzNlDv95qzSp7V/7Ek3NCcnT7G+2kSuhNo1FhdN
|
18
17
|
eSDO/moYebZNAcu3iqLsuzuULXPLuoU0GsMnVMqV9DZPh7cQHE5EBZ7hlzDBK7k/
|
@@ -21,21 +20,19 @@ cert_chain:
|
|
21
20
|
JMNDFsmHK/6Ji4Kk48Z3TyscHQnipAID5GhS1oD21/WePdj7GhmbF5gBzkV5uepd
|
22
21
|
eJQPgWGwrQW/Z2oPjRuJrRofzWfrMWqbOahj9uth6WSxhNexUtbjk6P8emmXOJi5
|
23
22
|
chQPnWX+N3Gj+jjYxqTFdwT7Mj3pv1VHa+aNUbqSPpvJeDyxRIuo9hvzDaBHb/Cg
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
oL1mUdzB8KrZL4/WbG5YNX6UTtJbIOu9qEFbBAy4/jtIkJX+dlNoFwd4GXQW1YNO
|
36
|
-
nA==
|
23
|
+
9qRVcm8a96n4t7y2lrX1oookY6bkBaxWOMtWlqIprq8JZXM9AgMBAAGjOTA3MAkG
|
24
|
+
A1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQ4h1tIyvdUWtMI739xMzTR
|
25
|
+
7EfMFzANBgkqhkiG9w0BAQsFAAOCAYEAoZZWzNV2XXaoSmvyamSSN+Wt/Ia+DNrU
|
26
|
+
2pc3kMEqykH6l1WiVPszr6HavQ//2I2UcSRSS5AGDdiSXcfyFmHtMBdtJHhTPcn7
|
27
|
+
4DLliB0szpvwG+ltGD8PI8eWkLaTQeFzs+0QCTavgKV+Zw56Q0J5zZvHHUMrLkUD
|
28
|
+
qhwKjdTdkrRTn9Sqi0BrIRRZGTUDdrt8qoWm35aES5arKZzytgrRD/kXfFW2LCg0
|
29
|
+
FzgTKibR4/3g8ph94kQLg/D2SMlVPkQ3ECi036mZxDC2n8V6u3rDkG5923wmrRZB
|
30
|
+
J6cqz475Q8HYORQCB68OPzkWMfC7mBo3vpSsIqRoNs1FE4FJu4FGwZG8fBSrDC4H
|
31
|
+
bZe+GtyS3e2SMjgT65zp35gLO9I7MquzYN9P6V2u1iBpTycchk5z9R1ghxzZSBT8
|
32
|
+
DrkJ9tVlPQtJB0LqT0tvBap4upnwT1xYq721b5dwH6AF4Pi6iz/dc5vnq1/MH8bV
|
33
|
+
8VbbBzzeE7MsvgkP3sHlLmY8PtuyViJ8
|
37
34
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
35
|
+
date: 2025-03-22 00:00:00.000000000 Z
|
39
36
|
dependencies:
|
40
37
|
- !ruby/object:Gem::Dependency
|
41
38
|
name: net-ldap
|
@@ -85,20 +82,62 @@ dependencies:
|
|
85
82
|
- - "<"
|
86
83
|
- !ruby/object:Gem::Version
|
87
84
|
version: '2.0'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: logger
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '1.0'
|
92
|
+
type: :runtime
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - "~>"
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '1.0'
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: ostruct
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - "~>"
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0.1'
|
106
|
+
type: :runtime
|
107
|
+
prerelease: false
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - "~>"
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0.1'
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: base64
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0.1'
|
120
|
+
type: :runtime
|
121
|
+
prerelease: false
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - "~>"
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0.1'
|
88
127
|
- !ruby/object:Gem::Dependency
|
89
128
|
name: ruby-ldapserver
|
90
129
|
requirement: !ruby/object:Gem::Requirement
|
91
130
|
requirements:
|
92
131
|
- - "~>"
|
93
132
|
- !ruby/object:Gem::Version
|
94
|
-
version: '0.
|
133
|
+
version: '0.7'
|
95
134
|
type: :development
|
96
135
|
prerelease: false
|
97
136
|
version_requirements: !ruby/object:Gem::Requirement
|
98
137
|
requirements:
|
99
138
|
- - "~>"
|
100
139
|
- !ruby/object:Gem::Version
|
101
|
-
version: '0.
|
140
|
+
version: '0.7'
|
102
141
|
- !ruby/object:Gem::Dependency
|
103
142
|
name: minitest
|
104
143
|
requirement: !ruby/object:Gem::Requirement
|
@@ -161,7 +200,6 @@ dependencies:
|
|
161
200
|
- - "~>"
|
162
201
|
- !ruby/object:Gem::Version
|
163
202
|
version: '1.4'
|
164
|
-
description:
|
165
203
|
email:
|
166
204
|
- lars@greiz-reinsdorf.de
|
167
205
|
executables:
|
@@ -194,7 +232,6 @@ homepage: https://github.com/larskanis/pg-ldap-sync
|
|
194
232
|
licenses:
|
195
233
|
- MIT
|
196
234
|
metadata: {}
|
197
|
-
post_install_message:
|
198
235
|
rdoc_options:
|
199
236
|
- "--main"
|
200
237
|
- README.md
|
@@ -212,8 +249,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
212
249
|
- !ruby/object:Gem::Version
|
213
250
|
version: '0'
|
214
251
|
requirements: []
|
215
|
-
rubygems_version: 3.
|
216
|
-
signing_key:
|
252
|
+
rubygems_version: 3.6.2
|
217
253
|
specification_version: 4
|
218
254
|
summary: Use LDAP permissions in PostgreSQL
|
219
255
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|