net-ldap 0.16.2 → 0.16.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/.rubocop_todo.yml +216 -246
- data/.travis.yml +4 -2
- data/CONTRIBUTING.md +1 -1
- data/README.rdoc +2 -2
- data/Rakefile +1 -1
- data/lib/net-ldap.rb +1 -1
- data/lib/net/ber.rb +2 -2
- data/lib/net/ber/core_ext.rb +6 -6
- data/lib/net/ldap.rb +13 -13
- data/lib/net/ldap/auth_adapter/gss_spnego.rb +2 -2
- data/lib/net/ldap/auth_adapter/sasl.rb +1 -1
- data/lib/net/ldap/auth_adapter/simple.rb +1 -1
- data/lib/net/ldap/connection.rb +4 -4
- data/lib/net/ldap/dataset.rb +2 -2
- data/lib/net/ldap/dn.rb +10 -10
- data/lib/net/ldap/entry.rb +1 -1
- data/lib/net/ldap/error.rb +1 -0
- data/lib/net/ldap/filter.rb +3 -3
- data/lib/net/ldap/instrumentation.rb +2 -2
- data/lib/net/ldap/password.rb +3 -5
- data/lib/net/ldap/pdu.rb +1 -1
- data/lib/net/ldap/version.rb +1 -1
- data/lib/net/snmp.rb +1 -1
- data/net-ldap.gemspec +4 -4
- data/test/ber/test_ber.rb +1 -1
- data/test/integration/test_ber.rb +1 -1
- data/test/integration/test_bind.rb +1 -2
- data/test/integration/test_password_modify.rb +10 -10
- data/test/test_dn.rb +2 -3
- data/test/test_entry.rb +3 -2
- data/test/test_filter_parser.rb +5 -0
- data/test/test_helper.rb +1 -1
- data/test/test_ldap.rb +5 -5
- data/test/test_ldap_connection.rb +46 -32
- data/test/test_ldif.rb +12 -12
- data/test/test_password.rb +2 -2
- data/test/test_snmp.rb +4 -5
- data/test/test_ssl_ber.rb +7 -3
- data/testserver/ldapserver.rb +13 -22
- metadata +10 -10
data/.travis.yml
CHANGED
@@ -7,11 +7,13 @@ rvm:
|
|
7
7
|
- 2.4
|
8
8
|
- 2.5
|
9
9
|
- 2.6
|
10
|
+
- 2.7
|
11
|
+
- jruby-9.2
|
10
12
|
# optional
|
11
13
|
- ruby-head
|
12
14
|
- jruby-19mode
|
15
|
+
- jruby-9.2
|
13
16
|
- jruby-head
|
14
|
-
- rbx-2
|
15
17
|
|
16
18
|
addons:
|
17
19
|
hosts:
|
@@ -47,8 +49,8 @@ matrix:
|
|
47
49
|
allow_failures:
|
48
50
|
- rvm: ruby-head
|
49
51
|
- rvm: jruby-19mode
|
52
|
+
- rvm: jruby-9.2
|
50
53
|
- rvm: jruby-head
|
51
|
-
- rvm: rbx-2
|
52
54
|
fast_finish: true
|
53
55
|
|
54
56
|
notifications:
|
data/CONTRIBUTING.md
CHANGED
@@ -49,6 +49,6 @@ MyClass.new \
|
|
49
49
|
baz: 'garply'
|
50
50
|
```
|
51
51
|
|
52
|
-
[issues]: https://github.com/ruby-
|
52
|
+
[issues]: https://github.com/ruby-ldap/ruby-net-ldap/issues
|
53
53
|
[pr]: https://help.github.com/articles/using-pull-requests
|
54
54
|
[travis]: https://travis-ci.org/ruby-ldap/ruby-net-ldap
|
data/README.rdoc
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
= Net::LDAP for Ruby {<img src="https://travis-ci.org/ruby-ldap/ruby-net-ldap.
|
1
|
+
= Net::LDAP for Ruby {<img src="https://travis-ci.org/ruby-ldap/ruby-net-ldap.svg" />}[https://travis-ci.org/ruby-ldap/ruby-net-ldap]
|
2
2
|
|
3
3
|
== Description
|
4
4
|
|
@@ -21,7 +21,7 @@ the most recent LDAP RFCs (4510–4519, plus portions of 4520–4532).
|
|
21
21
|
|
22
22
|
== Synopsis
|
23
23
|
|
24
|
-
See Net::LDAP for documentation and usage samples.
|
24
|
+
See {Net::LDAP on rubydoc.info}[https://www.rubydoc.info/gems/net-ldap/Net/LDAP] for documentation and usage samples.
|
25
25
|
|
26
26
|
== Requirements
|
27
27
|
|
data/Rakefile
CHANGED
data/lib/net-ldap.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# -*- ruby encoding: utf-8 -*-
|
2
|
-
|
2
|
+
require_relative 'net/ldap'
|
data/lib/net/ber.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# -*- ruby encoding: utf-8 -*-
|
2
|
-
|
2
|
+
require_relative 'ldap/version'
|
3
3
|
|
4
4
|
module Net # :nodoc:
|
5
5
|
##
|
@@ -349,4 +349,4 @@ module Net::BER
|
|
349
349
|
Null = Net::BER::BerIdentifiedNull.new
|
350
350
|
end
|
351
351
|
|
352
|
-
|
352
|
+
require_relative 'ber/core_ext'
|
data/lib/net/ber/core_ext.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# -*- ruby encoding: utf-8 -*-
|
2
|
-
|
2
|
+
require_relative 'ber_parser'
|
3
3
|
# :stopdoc:
|
4
4
|
class IO
|
5
5
|
include Net::BER::BERParser
|
@@ -19,35 +19,35 @@ end
|
|
19
19
|
module Net::BER::Extensions # :nodoc:
|
20
20
|
end
|
21
21
|
|
22
|
-
|
22
|
+
require_relative 'core_ext/string'
|
23
23
|
# :stopdoc:
|
24
24
|
class String
|
25
25
|
include Net::BER::BERParser
|
26
26
|
include Net::BER::Extensions::String
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
require_relative 'core_ext/array'
|
30
30
|
# :stopdoc:
|
31
31
|
class Array
|
32
32
|
include Net::BER::Extensions::Array
|
33
33
|
end
|
34
34
|
# :startdoc:
|
35
35
|
|
36
|
-
|
36
|
+
require_relative 'core_ext/integer'
|
37
37
|
# :stopdoc:
|
38
38
|
class Integer
|
39
39
|
include Net::BER::Extensions::Integer
|
40
40
|
end
|
41
41
|
# :startdoc:
|
42
42
|
|
43
|
-
|
43
|
+
require_relative 'core_ext/true_class'
|
44
44
|
# :stopdoc:
|
45
45
|
class TrueClass
|
46
46
|
include Net::BER::Extensions::TrueClass
|
47
47
|
end
|
48
48
|
# :startdoc:
|
49
49
|
|
50
|
-
|
50
|
+
require_relative 'core_ext/false_class'
|
51
51
|
# :stopdoc:
|
52
52
|
class FalseClass
|
53
53
|
include Net::BER::Extensions::FalseClass
|
data/lib/net/ldap.rb
CHANGED
@@ -17,19 +17,19 @@ module Net # :nodoc:
|
|
17
17
|
end
|
18
18
|
require 'socket'
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
20
|
+
require_relative 'ber'
|
21
|
+
require_relative 'ldap/pdu'
|
22
|
+
require_relative 'ldap/filter'
|
23
|
+
require_relative 'ldap/dataset'
|
24
|
+
require_relative 'ldap/password'
|
25
|
+
require_relative 'ldap/entry'
|
26
|
+
require_relative 'ldap/instrumentation'
|
27
|
+
require_relative 'ldap/connection'
|
28
|
+
require_relative 'ldap/version'
|
29
|
+
require_relative 'ldap/error'
|
30
|
+
require_relative 'ldap/auth_adapter'
|
31
|
+
require_relative 'ldap/auth_adapter/simple'
|
32
|
+
require_relative 'ldap/auth_adapter/sasl'
|
33
33
|
|
34
34
|
Net::LDAP::AuthAdapter.register([:simple, :anon, :anonymous], Net::LDAP::AuthAdapter::Simple)
|
35
35
|
Net::LDAP::AuthAdapter.register(:sasl, Net::LDAP::AuthAdapter::Sasl)
|
data/lib/net/ldap/connection.rb
CHANGED
@@ -181,7 +181,7 @@ class Net::LDAP::Connection #:nodoc:
|
|
181
181
|
# have to call it, but perhaps it will come in handy someday.
|
182
182
|
#++
|
183
183
|
def close
|
184
|
-
return if @conn.nil?
|
184
|
+
return if !defined?(@conn) || @conn.nil?
|
185
185
|
@conn.close
|
186
186
|
@conn = nil
|
187
187
|
end
|
@@ -300,7 +300,7 @@ class Net::LDAP::Connection #:nodoc:
|
|
300
300
|
control[2] = (control[2] == true).to_ber
|
301
301
|
control.to_ber_sequence
|
302
302
|
end
|
303
|
-
|
303
|
+
[
|
304
304
|
Net::LDAP::LDAPControls::SORT_REQUEST.to_ber,
|
305
305
|
false.to_ber,
|
306
306
|
sort_control_values.to_ber_sequence.to_s.to_ber,
|
@@ -610,7 +610,7 @@ class Net::LDAP::Connection #:nodoc:
|
|
610
610
|
pdu = queued_read(message_id)
|
611
611
|
|
612
612
|
if !pdu || pdu.app_tag != Net::LDAP::PDU::ExtendedResponse
|
613
|
-
raise Net::LDAP::
|
613
|
+
raise Net::LDAP::ResponseMissingOrInvalidError, "response missing or invalid"
|
614
614
|
end
|
615
615
|
|
616
616
|
pdu
|
@@ -710,7 +710,7 @@ class Net::LDAP::Connection #:nodoc:
|
|
710
710
|
# Wrap around Socket.tcp to normalize with other Socket initializers
|
711
711
|
class DefaultSocket
|
712
712
|
def self.new(host, port, socket_opts = {})
|
713
|
-
Socket.tcp(host, port, socket_opts)
|
713
|
+
Socket.tcp(host, port, **socket_opts)
|
714
714
|
end
|
715
715
|
end
|
716
716
|
end # class Connection
|
data/lib/net/ldap/dataset.rb
CHANGED
@@ -103,7 +103,7 @@ class Net::LDAP::Dataset < Hash
|
|
103
103
|
# with the conversion of
|
104
104
|
def from_entry(entry)
|
105
105
|
dataset = Net::LDAP::Dataset.new
|
106
|
-
hash = {
|
106
|
+
hash = {}
|
107
107
|
entry.each_attribute do |attribute, value|
|
108
108
|
next if attribute == :dn
|
109
109
|
hash[attribute] = value
|
@@ -165,4 +165,4 @@ class Net::LDAP::Dataset < Hash
|
|
165
165
|
end
|
166
166
|
end
|
167
167
|
|
168
|
-
|
168
|
+
require_relative 'entry' unless defined? Net::LDAP::Entry
|
data/lib/net/ldap/dn.rb
CHANGED
@@ -57,19 +57,19 @@ class Net::LDAP::DN
|
|
57
57
|
state = :key_oid
|
58
58
|
key << char
|
59
59
|
when ' ' then state = :key
|
60
|
-
else raise "DN badly formed"
|
60
|
+
else raise Net::LDAP::InvalidDNError, "DN badly formed"
|
61
61
|
end
|
62
62
|
when :key_normal then
|
63
63
|
case char
|
64
64
|
when '=' then state = :value
|
65
65
|
when 'a'..'z', 'A'..'Z', '0'..'9', '-', ' ' then key << char
|
66
|
-
else raise "DN badly formed"
|
66
|
+
else raise Net::LDAP::InvalidDNError, "DN badly formed"
|
67
67
|
end
|
68
68
|
when :key_oid then
|
69
69
|
case char
|
70
70
|
when '=' then state = :value
|
71
71
|
when '0'..'9', '.', ' ' then key << char
|
72
|
-
else raise "DN badly formed"
|
72
|
+
else raise Net::LDAP::InvalidDNError, "DN badly formed"
|
73
73
|
end
|
74
74
|
when :value then
|
75
75
|
case char
|
@@ -110,7 +110,7 @@ class Net::LDAP::DN
|
|
110
110
|
when '0'..'9', 'a'..'f', 'A'..'F' then
|
111
111
|
state = :value_normal
|
112
112
|
value << "#{hex_buffer}#{char}".to_i(16).chr
|
113
|
-
else raise "DN badly formed"
|
113
|
+
else raise Net::LDAP::InvalidDNError, "DN badly formed"
|
114
114
|
end
|
115
115
|
when :value_quoted then
|
116
116
|
case char
|
@@ -132,7 +132,7 @@ class Net::LDAP::DN
|
|
132
132
|
when '0'..'9', 'a'..'f', 'A'..'F' then
|
133
133
|
state = :value_quoted
|
134
134
|
value << "#{hex_buffer}#{char}".to_i(16).chr
|
135
|
-
else raise "DN badly formed"
|
135
|
+
else raise Net::LDAP::InvalidDNError, "DN badly formed"
|
136
136
|
end
|
137
137
|
when :value_hexstring then
|
138
138
|
case char
|
@@ -145,14 +145,14 @@ class Net::LDAP::DN
|
|
145
145
|
yield key.string.strip, value.string.rstrip
|
146
146
|
key = StringIO.new
|
147
147
|
value = StringIO.new;
|
148
|
-
else raise "DN badly formed"
|
148
|
+
else raise Net::LDAP::InvalidDNError, "DN badly formed"
|
149
149
|
end
|
150
150
|
when :value_hexstring_hex then
|
151
151
|
case char
|
152
152
|
when '0'..'9', 'a'..'f', 'A'..'F' then
|
153
153
|
state = :value_hexstring
|
154
154
|
value << char
|
155
|
-
else raise "DN badly formed"
|
155
|
+
else raise Net::LDAP::InvalidDNError, "DN badly formed"
|
156
156
|
end
|
157
157
|
when :value_end then
|
158
158
|
case char
|
@@ -162,14 +162,14 @@ class Net::LDAP::DN
|
|
162
162
|
yield key.string.strip, value.string.rstrip
|
163
163
|
key = StringIO.new
|
164
164
|
value = StringIO.new;
|
165
|
-
else raise "DN badly formed"
|
165
|
+
else raise Net::LDAP::InvalidDNError, "DN badly formed"
|
166
166
|
end
|
167
|
-
else raise "Fell out of state machine"
|
167
|
+
else raise Net::LDAP::InvalidDNError, "Fell out of state machine"
|
168
168
|
end
|
169
169
|
end
|
170
170
|
|
171
171
|
# Last pair
|
172
|
-
raise "DN badly formed" unless
|
172
|
+
raise Net::LDAP::InvalidDNError, "DN badly formed" unless
|
173
173
|
[:value, :value_normal, :value_hexstring, :value_end].include? state
|
174
174
|
|
175
175
|
yield key.string.strip, value.string.rstrip
|
data/lib/net/ldap/entry.rb
CHANGED
data/lib/net/ldap/error.rb
CHANGED
@@ -60,6 +60,7 @@ class Net::LDAP
|
|
60
60
|
class ResponseTypeInvalidError < Error; end
|
61
61
|
class ResponseMissingOrInvalidError < Error; end
|
62
62
|
class EmptyDNError < Error; end
|
63
|
+
class InvalidDNError < Error; end
|
63
64
|
class HashTypeUnsupportedError < Error; end
|
64
65
|
class OperatorError < Error; end
|
65
66
|
class SubstringFilterError < Error; end
|
data/lib/net/ldap/filter.rb
CHANGED
@@ -490,7 +490,7 @@ class Net::LDAP::Filter
|
|
490
490
|
when :eq
|
491
491
|
if @right == "*" # presence test
|
492
492
|
@left.to_s.to_ber_contextspecific(7)
|
493
|
-
elsif @right =~ /[*]/ # substring
|
493
|
+
elsif @right.to_s =~ /[*]/ # substring
|
494
494
|
# Parsing substrings is a little tricky. We use String#split to
|
495
495
|
# break a string into substrings delimited by the * (star)
|
496
496
|
# character. But we also need to know whether there is a star at the
|
@@ -646,7 +646,7 @@ class Net::LDAP::Filter
|
|
646
646
|
##
|
647
647
|
# Converts escaped characters (e.g., "\\28") to unescaped characters
|
648
648
|
# @note slawson20170317: Don't attempt to unescape 16 byte binary data which we assume are objectGUIDs
|
649
|
-
# The binary form of 5936AE79-664F-44EA-BCCB-5C39399514C6 triggers a BINARY -> UTF-8 conversion error
|
649
|
+
# The binary form of 5936AE79-664F-44EA-BCCB-5C39399514C6 triggers a BINARY -> UTF-8 conversion error
|
650
650
|
def unescape(right)
|
651
651
|
right = right.to_s
|
652
652
|
if right.length == 16 && right.encoding == Encoding::BINARY
|
@@ -755,7 +755,7 @@ class Net::LDAP::Filter
|
|
755
755
|
# This parses a given expression inside of parentheses.
|
756
756
|
def parse_filter_branch(scanner)
|
757
757
|
scanner.scan(/\s*/)
|
758
|
-
if token = scanner.scan(/[-\w
|
758
|
+
if token = scanner.scan(/[-\w:.;]*[\w]/)
|
759
759
|
scanner.scan(/\s*/)
|
760
760
|
if op = scanner.scan(/<=|>=|!=|:=|=/)
|
761
761
|
scanner.scan(/\s*/)
|
@@ -12,8 +12,8 @@ module Net::LDAP::Instrumentation
|
|
12
12
|
def instrument(event, payload = {})
|
13
13
|
payload = (payload || {}).dup
|
14
14
|
if instrumentation_service
|
15
|
-
instrumentation_service.instrument(event, payload) do |
|
16
|
-
|
15
|
+
instrumentation_service.instrument(event, payload) do |instr_payload|
|
16
|
+
instr_payload[:result] = yield(instr_payload) if block_given?
|
17
17
|
end
|
18
18
|
else
|
19
19
|
yield(payload) if block_given?
|
data/lib/net/ldap/password.rb
CHANGED
@@ -19,20 +19,18 @@ class Net::LDAP::Password
|
|
19
19
|
# * Should we provide sha1 as a synonym for sha1? I vote no because then
|
20
20
|
# should you also provide ssha1 for symmetry?
|
21
21
|
#
|
22
|
-
attribute_value = ""
|
23
22
|
def generate(type, str)
|
24
23
|
case type
|
25
24
|
when :md5
|
26
|
-
|
25
|
+
'{MD5}' + Base64.strict_encode64(Digest::MD5.digest(str))
|
27
26
|
when :sha
|
28
|
-
|
27
|
+
'{SHA}' + Base64.strict_encode64(Digest::SHA1.digest(str))
|
29
28
|
when :ssha
|
30
29
|
salt = SecureRandom.random_bytes(16)
|
31
|
-
|
30
|
+
'{SSHA}' + Base64.strict_encode64(Digest::SHA1.digest(str + salt) + salt)
|
32
31
|
else
|
33
32
|
raise Net::LDAP::HashTypeUnsupportedError, "Unsupported password-hash type (#{type})"
|
34
33
|
end
|
35
|
-
return attribute_value
|
36
34
|
end
|
37
35
|
end
|
38
36
|
end
|
data/lib/net/ldap/pdu.rb
CHANGED
@@ -123,7 +123,7 @@ class Net::LDAP::PDU
|
|
123
123
|
when ExtendedResponse
|
124
124
|
parse_extended_response(ber_object[1])
|
125
125
|
else
|
126
|
-
raise
|
126
|
+
raise Error.new("unknown pdu-type: #{@app_tag}")
|
127
127
|
end
|
128
128
|
|
129
129
|
parse_controls(ber_object[2]) if ber_object[2]
|
data/lib/net/ldap/version.rb
CHANGED
data/lib/net/snmp.rb
CHANGED
data/net-ldap.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
|
4
|
+
require_relative 'lib/net/ldap/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{net-ldap}
|
@@ -30,8 +30,8 @@ the most recent LDAP RFCs (4510-4519, plutions of 4520-4532).}
|
|
30
30
|
s.summary = %q{Net::LDAP for Ruby (also called net-ldap) implements client access for the Lightweight Directory Access Protocol (LDAP), an IETF standard protocol for accessing distributed directory services}
|
31
31
|
|
32
32
|
s.add_development_dependency("flexmock", "~> 1.3")
|
33
|
-
s.add_development_dependency("rake", "~>
|
34
|
-
s.add_development_dependency("rubocop", "~> 0.
|
33
|
+
s.add_development_dependency("rake", "~> 12.3.3")
|
34
|
+
s.add_development_dependency("rubocop", "~> 0.49.0")
|
35
35
|
s.add_development_dependency("test-unit")
|
36
|
-
s.add_development_dependency("byebug")
|
36
|
+
s.add_development_dependency("byebug") unless RUBY_PLATFORM == "java"
|
37
37
|
end
|
data/test/ber/test_ber.rb
CHANGED
@@ -95,7 +95,7 @@ class TestBEREncoding < Test::Unit::TestCase
|
|
95
95
|
def test_encode_binary_data
|
96
96
|
# This is used for searching for GUIDs in Active Directory
|
97
97
|
assert_equal "\x04\x10" + "j1\xB4\xA1*\xA2zA\xAC\xA9`?'\xDDQ\x16".b,
|
98
|
-
|
98
|
+
["6a31b4a12aa27a41aca9603f27dd5116"].pack("H*").to_ber_bin
|
99
99
|
end
|
100
100
|
|
101
101
|
def test_non_utf8_encodable_strings
|
@@ -25,6 +25,6 @@ class TestBERIntegration < LDAPIntegrationTestCase
|
|
25
25
|
end
|
26
26
|
|
27
27
|
assert_includes Net::LDAP::ResultCodesSearchSuccess,
|
28
|
-
|
28
|
+
@ldap.get_operation_result.code, "should be a successful search operation"
|
29
29
|
end
|
30
30
|
end
|