ldap_lookup 0.1.1 → 0.1.2
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
- data/Gemfile.lock +37 -0
- data/README.md +24 -25
- data/ldap_lookup.gemspec +1 -0
- data/ldaptest.rb +10 -8
- data/lib/ldap_lookup.rb +129 -112
- data/lib/ldap_lookup/version.rb +1 -1
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 961db29c00514e73df960b6dc63a1d4a6b0d7270822c138819b11d79cda44e2f
|
4
|
+
data.tar.gz: 2f10335caa65754e25d4209dab0d669bfceffaf25cd107380808d05a1e588388
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a9be952748ffa835db73e95776e193798c5886cd7ed39259401498a3a08fa4d8dc031aa55dc6739470ec46a71fbd70eb31237b0a23c7e1e017a5ea3f6e6faea
|
7
|
+
data.tar.gz: 7c0fd6a5de39acbb31000bb857f740af25404795de6d812501e0362e9d3f0e61c3b504d8c6c7d4396f6de54bbfbe3acbb42238b5a500bbba7b87b47490453d7f
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
ldap_lookup (0.1.1)
|
5
|
+
net-ldap (~> 0.16.1)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
diff-lcs (1.3)
|
11
|
+
net-ldap (0.16.1)
|
12
|
+
rake (10.5.0)
|
13
|
+
rspec (3.7.0)
|
14
|
+
rspec-core (~> 3.7.0)
|
15
|
+
rspec-expectations (~> 3.7.0)
|
16
|
+
rspec-mocks (~> 3.7.0)
|
17
|
+
rspec-core (3.7.1)
|
18
|
+
rspec-support (~> 3.7.0)
|
19
|
+
rspec-expectations (3.7.0)
|
20
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
21
|
+
rspec-support (~> 3.7.0)
|
22
|
+
rspec-mocks (3.7.0)
|
23
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
24
|
+
rspec-support (~> 3.7.0)
|
25
|
+
rspec-support (3.7.1)
|
26
|
+
|
27
|
+
PLATFORMS
|
28
|
+
ruby
|
29
|
+
|
30
|
+
DEPENDENCIES
|
31
|
+
bundler (~> 1.16)
|
32
|
+
ldap_lookup!
|
33
|
+
rake (~> 10.0)
|
34
|
+
rspec (~> 3.7.0)
|
35
|
+
|
36
|
+
BUNDLED WITH
|
37
|
+
1.16.1
|
data/README.md
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
# LdapLookup for Ruby
|
2
|
-
|
3
|
-
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/ldap_lookup`. To experiment with that code, run `bin/console` for an interactive prompt.
|
1
|
+
# LdapLookup for Ruby [](https://badge.fury.io/rb/ldap_lookup)
|
4
2
|
|
5
3
|
### Description
|
6
4
|
This module is to be used for anonymous lookup of user attributes in the MCommunity service provide at the University of Michigan. It can be easily modifed to use other LDAP server configurations.
|
@@ -12,23 +10,20 @@ This module is to be used for anonymous lookup of user attributes in the MCommun
|
|
12
10
|
Requirements:
|
13
11
|
* Ruby at least 2.0.0
|
14
12
|
* Gem 'net-ldap' ~> '0.16.1'
|
15
|
-
> Install by running the following command at your command prompt_for_action
|
16
13
|
> *The Net::LDAP (aka net-ldap) gem before 0.16.0 for Ruby has a Missing SSL Certificate Validation.*
|
17
|
-
```bash
|
18
|
-
gem install net-ldap
|
19
|
-
```
|
20
14
|
|
21
15
|
To try the module out:
|
22
16
|
1. Clone the repo
|
23
17
|
2. Edit the configurations by opening ldaptest.rb and set the *CONFIGURATION BLOCK* to your environment.
|
24
|
-
|
18
|
+
<pre>
|
25
19
|
LdapLookup.configuration do |config|
|
26
|
-
config.host = < your host > # "ldap.umich.edu"
|
27
|
-
config.
|
28
|
-
config.
|
29
|
-
config.
|
20
|
+
config.host = <em>< your host ></em> # "ldap.umich.edu"
|
21
|
+
config.port = <em>< your port ></em> # "986" the default is set to "389" so this optional
|
22
|
+
config.base = <em>< your LDAP base ></em> # "dc=umich,dc=edu"
|
23
|
+
config.dept_attribute = <em>< your dept attribute ></em> # "umichPostalAddressData"
|
24
|
+
config.group_attribute = <em>< your group email attribute ></em> # "umichGroupEmail"
|
30
25
|
end
|
31
|
-
|
26
|
+
</pre>
|
32
27
|
|
33
28
|
3. run the ldaptest.rb script
|
34
29
|
```ruby
|
@@ -54,40 +49,44 @@ Or install it yourself as:
|
|
54
49
|
$ gem install ldap_lookup
|
55
50
|
|
56
51
|
In your application create a file config/initializers/ldap_lookup.rb
|
57
|
-
|
52
|
+
<pre>
|
58
53
|
LdapLookup.configuration do |config|
|
59
|
-
config.host = < your host > # "ldap.umich.edu"
|
60
|
-
config.port = < your port > # "954" port 389 is set by default
|
61
|
-
config.base = < your LDAP base > # "dc=umich,dc=edu"
|
62
|
-
config.dept_attribute = < your dept attribute > # "umichPostalAddressData"
|
63
|
-
config.group_attribute = < your group email attribute > # "umichGroupEmail"
|
54
|
+
config.host = <em>< your host ></em> # "ldap.umich.edu"
|
55
|
+
config.port = <em>< your port ></em> # "954" port 389 is set by default
|
56
|
+
config.base = <em>< your LDAP base ></em> # "dc=umich,dc=edu"
|
57
|
+
config.dept_attribute = <em>< your dept attribute ></em> # "umichPostalAddressData"
|
58
|
+
config.group_attribute = <em>< your group email attribute ></em> # "umichGroupEmail"
|
64
59
|
end
|
65
|
-
|
60
|
+
</pre>
|
66
61
|
|
67
62
|
---
|
68
63
|
|
69
64
|
### Methods available
|
70
65
|
|
71
|
-
|
66
|
+
__get_simple_name:__ returns the Display Name
|
72
67
|
```
|
73
68
|
LdapLookup.get_simple_name(uniqname = nil)
|
74
69
|
```
|
75
|
-
|
70
|
+
__get_dept:__ returns the users Department_name
|
76
71
|
```
|
77
72
|
LdapLookup.get_dept(uniqname = nil)
|
78
73
|
```
|
79
|
-
|
74
|
+
__get_email:__ returns the users email address
|
80
75
|
```
|
81
76
|
LdapLookup.get_email(uniqname = nil)
|
82
77
|
```
|
83
|
-
|
78
|
+
__is_member_of_group?:__ returns true/false if uniqname is a member of the specified group
|
84
79
|
```
|
85
80
|
LdapLookup.is_member_of_group?(uid = nil, group_name = nil)
|
86
81
|
```
|
87
|
-
|
82
|
+
__get_email_distribution_list:__ Returns the list of emails that are associated to a group.
|
88
83
|
```
|
89
84
|
LdapLookup.get_email_distribution_list(group_name = nil)
|
90
85
|
```
|
86
|
+
all_groups_for_user: Returns the list of groups that a user is a member of.
|
87
|
+
```
|
88
|
+
LdapLookup.all_groups_for_user(uniqname = nil)
|
89
|
+
```
|
91
90
|
|
92
91
|
### Contributing
|
93
92
|
|
data/ldap_lookup.gemspec
CHANGED
data/ldaptest.rb
CHANGED
@@ -1,21 +1,20 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "lib/ldap_lookup"
|
4
4
|
|
5
5
|
class Ldaptest
|
6
|
-
|
7
6
|
include LdapLookup
|
8
7
|
|
9
|
-
############## CONFIGURATION BLOCK ###################
|
8
|
+
############## CONFIGURATION BLOCK ###################
|
10
9
|
LdapLookup.configuration do |config|
|
11
10
|
config.host = "ldap.umich.edu"
|
12
11
|
config.base = "dc=umich,dc=edu"
|
13
12
|
config.dept_attribute = "umichPostalAddressData"
|
14
13
|
config.group_attribute = "umichGroupEmail"
|
15
14
|
end
|
16
|
-
#######################################################
|
15
|
+
#######################################################
|
17
16
|
|
18
|
-
def initialize(name=nil)
|
17
|
+
def initialize(name = nil)
|
19
18
|
@uid = name
|
20
19
|
@group_uid = nil
|
21
20
|
end
|
@@ -59,6 +58,7 @@ class Ldaptest
|
|
59
58
|
puts "3: get users full name"
|
60
59
|
puts "4: get users department"
|
61
60
|
puts "5: get users email"
|
61
|
+
puts "55: get all groups a user is a member of"
|
62
62
|
puts "+++++++++++++++++++++++++"
|
63
63
|
puts "6: get ldap group-name member listing"
|
64
64
|
puts "7: check if uid is member of a group"
|
@@ -72,14 +72,15 @@ class Ldaptest
|
|
72
72
|
when 3 then result_box(LdapLookup.get_simple_name(@uid))
|
73
73
|
when 4 then result_box(LdapLookup.get_dept(@uid))
|
74
74
|
when 5 then result_box(LdapLookup.get_email(@uid))
|
75
|
+
when 55 then result_box(LdapLookup.all_groups_for_user(@uid))
|
75
76
|
when 6 then result_box(LdapLookup.get_email_distribution_list(@group_uid))
|
76
|
-
when 7 then result_box(LdapLookup.is_member_of_group?(@uid
|
77
|
+
when 7 then result_box(LdapLookup.is_member_of_group?(@uid, @group_uid))
|
77
78
|
when 8 then result_box(timestamp)
|
78
79
|
when 0 then puts "you chose exit!"
|
79
|
-
|
80
|
+
throw(:done)
|
80
81
|
else
|
81
82
|
print "\e[2J\e[f"
|
82
|
-
puts "====> Please type 1,2,3,4,5,6,7,8 or 0 only"
|
83
|
+
puts "====> Please type 1,2,3,4,5,55,6,7,8 or 0 only"
|
83
84
|
2.times { puts " " }
|
84
85
|
end
|
85
86
|
end
|
@@ -92,6 +93,7 @@ class Ldaptest
|
|
92
93
|
end
|
93
94
|
end
|
94
95
|
end
|
96
|
+
|
95
97
|
print "\e[2J\e[f"
|
96
98
|
print "Enter a valid UID=> "
|
97
99
|
name = gets.chomp.to_s
|
data/lib/ldap_lookup.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "helpers/configuration"
|
2
2
|
|
3
3
|
module LdapLookup
|
4
|
-
require
|
4
|
+
require "net/ldap"
|
5
5
|
|
6
6
|
extend Configuration
|
7
7
|
|
@@ -11,126 +11,143 @@ module LdapLookup
|
|
11
11
|
define_setting :dept_attribute
|
12
12
|
define_setting :group_attribute
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
# this was developed using guidence from this gist:
|
15
|
+
# https://gist.githubusercontent.com/jeffjohnson9046/7012167/raw/86587b9637ddc2ece7a42df774980fa9c0aac9b3/ruby-ldap-sample.rb
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
17
|
+
#######################################################################################################################
|
18
|
+
## HELPER/UTILITY METHOD
|
19
|
+
## This method interprets the response/return code from an LDAP bind operation (bind, search, add, modify, rename,
|
20
|
+
## delete). This method isn't necessarily complete, but it's a good starting point for handling the response codes
|
21
|
+
## from an LDAP bind operation.
|
22
|
+
##
|
23
|
+
## Additional details for the get_operation_result method can be found here:
|
24
|
+
## http://net-ldap.rubyforge.org/Net/LDAP.html#method-i-get_operation_result
|
25
|
+
########################################################################################################################
|
26
|
+
def self.get_ldap_response(ldap)
|
27
|
+
msg = "Response Code: #{ldap.get_operation_result.code}, Message: #{ldap.get_operation_result.message}"
|
28
|
+
raise msg unless ldap.get_operation_result.code == 0
|
29
|
+
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
31
|
+
#######################################################################################################################
|
32
|
+
# SET UP LDAP CONNECTION
|
33
|
+
# Setting up a connection to the LDAP server using .new() does not actually send any network traffic to the LDAP
|
34
|
+
# server. When you call an operation on ldap (e.g. add or search), .bind is called implicitly. *That's* when the
|
35
|
+
# connection is made to the LDAP server. This means that each operation called on the ldap object will create its own
|
36
|
+
# network connection to the LDAP server.
|
37
|
+
#######################################################################################################################
|
38
|
+
def self.ldap_connection
|
39
|
+
ldap = Net::LDAP.new host: host, # your LDAP host name or IP goes here,
|
40
|
+
port: port, # your LDAP host port goes here,
|
41
|
+
base: base, # the base of your AD tree goes here,
|
42
|
+
auth: {
|
43
|
+
:method => :anonymous,
|
44
|
+
}
|
45
|
+
end
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
47
|
+
# GET THE DISPLAY NAME FOR A SINGLE USER
|
48
|
+
def self.get_simple_name(uniqname = nil)
|
49
|
+
ldap = ldap_connection
|
50
|
+
search_param = uniqname # the AD account goes here
|
51
|
+
result_attrs = ["displayName"] # Whatever you want to bring back in your result set goes here
|
52
|
+
# Build filter
|
53
|
+
search_filter = Net::LDAP::Filter.eq("uid", search_param)
|
54
|
+
# Execute search
|
55
|
+
ldap.search(filter: search_filter, attributes: result_attrs) { |item|
|
56
|
+
return item.displayName.first
|
57
|
+
}
|
58
|
+
get_ldap_response(ldap)
|
59
|
+
end
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
61
|
+
# GET THE PRIMARY DEPARTMENT FOR A SINGLE USER
|
62
|
+
def self.get_dept(uniqname = nil)
|
63
|
+
ldap = ldap_connection
|
64
|
+
search_param = uniqname # the AD account goes here
|
65
|
+
result_attrs = [dept_attribute] # Whatever you want to bring back in your result set goes here
|
66
|
+
# Build filter
|
67
|
+
search_filter = Net::LDAP::Filter.eq("uid", search_param)
|
68
|
+
# Execute search
|
69
|
+
ldap.search(filter: search_filter, attributes: result_attrs) { |item|
|
70
|
+
return dept_name = item.umichpostaladdressdata.first.split("}:{").first.split("=")[1] unless item.umichpostaladdressdata.first.nil?
|
71
|
+
}
|
72
|
+
get_ldap_response(ldap)
|
73
|
+
end
|
74
74
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
75
|
+
# GET THE E-MAIL ADDRESS FOR A SINGLE USER
|
76
|
+
def self.get_email(uniqname = nil)
|
77
|
+
ldap = ldap_connection
|
78
|
+
search_param = uniqname # the AD account goes here
|
79
|
+
result_attrs = ["mail"] # Whatever you want to bring back in your result set goes here
|
80
|
+
# Build filter
|
81
|
+
search_filter = Net::LDAP::Filter.eq("uid", search_param)
|
82
|
+
# Execute search
|
83
|
+
ldap.search(filter: search_filter, attributes: result_attrs) { |item|
|
84
|
+
return item.mail.first
|
85
|
+
}
|
86
|
+
get_ldap_response(ldap)
|
87
|
+
end
|
88
88
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
end
|
89
|
+
# ---------------------------------------------------------------------------------------------------------------------
|
90
|
+
# Check if the UID is a member of an LDAP group. This function returns TRUE
|
91
|
+
# if uid passed in is a member of group_name passed in. Otherwise it will
|
92
|
+
# return false.
|
93
|
+
def self.is_member_of_group?(uid = nil, group_name = nil)
|
94
|
+
ldap = ldap_connection
|
95
|
+
# GET THE MEMBERS OF AN E-MAIL DISTRIBUTION LIST
|
96
|
+
search_param = group_name # the name of the distribution list you're looking for goes here
|
97
|
+
result_attrs = ["member"]
|
98
|
+
# Build filter
|
99
|
+
search_filter = Net::LDAP::Filter.eq("cn", search_param)
|
100
|
+
group_filter = Net::LDAP::Filter.eq("objectClass", "group")
|
101
|
+
composite_filter = Net::LDAP::Filter.join(search_filter, group_filter)
|
102
|
+
# Execute search, extracting the AD account name from each member of the distribution list
|
103
|
+
ldap.search(filter: composite_filter, attributes: result_attrs) do |item|
|
104
|
+
item.member.each do |entry|
|
105
|
+
if entry.split(",").first.split("=")[1] == uid
|
106
|
+
return true
|
108
107
|
end
|
109
108
|
end
|
110
|
-
return FALSE
|
111
|
-
get_ldap_response(ldap)
|
112
109
|
end
|
110
|
+
return false
|
111
|
+
get_ldap_response(ldap)
|
112
|
+
end
|
113
113
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
114
|
+
# ---------------------------------------------------------------------------------------------------------------------
|
115
|
+
# Get the Name email and members of an LDAP group as a hash
|
116
|
+
def self.get_email_distribution_list(group_name = nil)
|
117
|
+
ldap = ldap_connection
|
118
|
+
result_hash = {}
|
119
|
+
member_hash = {}
|
120
|
+
# GET THE MEMBERS OF AN E-MAIL DISTRIBUTION LIST
|
121
|
+
search_param = group_name # the name of the distribution list you're looking for goes here
|
122
|
+
result_attrs = ["cn", group_attribute, "member"]
|
123
|
+
# Build filter
|
124
|
+
search_filter = Net::LDAP::Filter.eq("cn", search_param)
|
125
|
+
group_filter = Net::LDAP::Filter.eq("objectClass", "group")
|
126
|
+
composite_filter = Net::LDAP::Filter.join(search_filter, group_filter)
|
127
|
+
# Execute search, extracting the AD account name from each member of the distribution list
|
128
|
+
ldap.search(filter: composite_filter, attributes: result_attrs) do |item|
|
129
|
+
result_hash["group_name"] = item.cn.first
|
130
|
+
result_hash["group_email"] = item.umichGroupEmail.first
|
131
|
+
individual_array = []
|
132
|
+
item.member.each do |individual|
|
133
|
+
individual_array.push(individual.split(",").first.split("=")[1])
|
132
134
|
end
|
133
|
-
|
134
|
-
|
135
|
+
result_hash["members"] = individual_array.sort
|
136
|
+
end
|
137
|
+
return result_hash
|
138
|
+
get_ldap_response(ldap)
|
139
|
+
end
|
140
|
+
|
141
|
+
# ---------------------------------------------------------------------------
|
142
|
+
# Get the groups a user is a member of
|
143
|
+
def self.all_groups_for_user(uid = nil)
|
144
|
+
ldap = ldap_connection
|
145
|
+
result_array = []
|
146
|
+
result_attrs = ["dn"]
|
147
|
+
ldap.search(filter: "member=uid=#{uid},ou=People,dc=umich,dc=edu", attributes: result_attrs) do |item|
|
148
|
+
item.each { |key, value| result_array << value.first.split("=")[1].split(",")[0] }
|
135
149
|
end
|
150
|
+
return result_array.sort
|
151
|
+
get_ldap_response(ldap)
|
136
152
|
end
|
153
|
+
end
|
data/lib/ldap_lookup/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ldap_lookup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rick Smoke
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 3.7.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 3.7.0
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: net-ldap
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -64,6 +78,7 @@ files:
|
|
64
78
|
- ".gitignore"
|
65
79
|
- CODE_OF_CONDUCT.md
|
66
80
|
- Gemfile
|
81
|
+
- Gemfile.lock
|
67
82
|
- LICENSE.txt
|
68
83
|
- README.md
|
69
84
|
- Rakefile
|
@@ -93,8 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
108
|
- !ruby/object:Gem::Version
|
94
109
|
version: '0'
|
95
110
|
requirements: []
|
96
|
-
|
97
|
-
rubygems_version: 2.7.2
|
111
|
+
rubygems_version: 3.0.3
|
98
112
|
signing_key:
|
99
113
|
specification_version: 4
|
100
114
|
summary: For anonymous lookup of user LDAP attributes.
|