net-ldap 0.11 → 0.16.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.

Potentially problematic release.


This version of net-ldap might be problematic. Click here for more details.

Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +15 -0
  3. data/.rubocop_todo.yml +471 -180
  4. data/.travis.yml +10 -5
  5. data/Contributors.rdoc +1 -0
  6. data/History.rdoc +60 -0
  7. data/README.rdoc +18 -11
  8. data/Rakefile +0 -1
  9. data/lib/net/ber/ber_parser.rb +4 -4
  10. data/lib/net/ber/core_ext/array.rb +1 -1
  11. data/lib/net/ber/core_ext/integer.rb +1 -1
  12. data/lib/net/ber/core_ext/string.rb +1 -1
  13. data/lib/net/ber.rb +37 -5
  14. data/lib/net/ldap/auth_adapter/gss_spnego.rb +41 -0
  15. data/lib/net/ldap/auth_adapter/sasl.rb +62 -0
  16. data/lib/net/ldap/auth_adapter/simple.rb +34 -0
  17. data/lib/net/ldap/auth_adapter.rb +29 -0
  18. data/lib/net/ldap/connection.rb +197 -187
  19. data/lib/net/ldap/dataset.rb +2 -2
  20. data/lib/net/ldap/dn.rb +4 -5
  21. data/lib/net/ldap/entry.rb +4 -5
  22. data/lib/net/ldap/error.rb +36 -1
  23. data/lib/net/ldap/filter.rb +6 -6
  24. data/lib/net/ldap/pdu.rb +26 -2
  25. data/lib/net/ldap/version.rb +1 -1
  26. data/lib/net/ldap.rb +189 -75
  27. data/lib/net/snmp.rb +18 -18
  28. data/net-ldap.gemspec +4 -2
  29. data/script/changelog +47 -0
  30. data/script/generate-fixture-ca +48 -0
  31. data/script/install-openldap +67 -44
  32. data/test/ber/core_ext/test_array.rb +1 -1
  33. data/test/ber/test_ber.rb +11 -3
  34. data/test/fixtures/ca/ca.info +4 -0
  35. data/test/fixtures/ca/cacert.pem +24 -0
  36. data/test/fixtures/ca/cakey.pem +190 -0
  37. data/test/fixtures/openldap/slapd.conf.ldif +1 -1
  38. data/test/integration/test_add.rb +1 -1
  39. data/test/integration/test_ber.rb +1 -1
  40. data/test/integration/test_bind.rb +220 -10
  41. data/test/integration/test_delete.rb +1 -1
  42. data/test/integration/test_open.rb +1 -1
  43. data/test/integration/test_password_modify.rb +80 -0
  44. data/test/integration/test_search.rb +1 -1
  45. data/test/support/vm/openldap/README.md +35 -3
  46. data/test/support/vm/openldap/Vagrantfile +1 -0
  47. data/test/test_auth_adapter.rb +15 -0
  48. data/test/test_dn.rb +3 -3
  49. data/test/test_filter.rb +4 -4
  50. data/test/test_filter_parser.rb +4 -0
  51. data/test/test_helper.rb +10 -2
  52. data/test/test_ldap.rb +64 -10
  53. data/test/test_ldap_connection.rb +115 -28
  54. data/test/test_ldif.rb +11 -11
  55. data/test/test_search.rb +2 -2
  56. data/test/test_snmp.rb +4 -4
  57. data/testserver/ldapserver.rb +11 -12
  58. metadata +50 -8
  59. data/test/fixtures/cacert.pem +0 -20
@@ -1,45 +1,132 @@
1
1
  require_relative 'test_helper'
2
2
 
3
3
  class TestLDAPConnection < Test::Unit::TestCase
4
+ def capture_stderr
5
+ stderr, $stderr = $stderr, StringIO.new
6
+ yield
7
+ $stderr.string
8
+ ensure
9
+ $stderr = stderr
10
+ end
11
+
12
+ # Fake socket for testing
13
+ #
14
+ # FakeTCPSocket.new("success", 636)
15
+ # FakeTCPSocket.new("fail.SocketError", 636) # raises SocketError
16
+ class FakeTCPSocket
17
+ def initialize(host, port, socket_opts = {})
18
+ status, error = host.split(".")
19
+ raise Object.const_get(error) if status == "fail"
20
+ end
21
+ end
22
+
23
+ def test_list_of_hosts_with_first_host_successful
24
+ hosts = [
25
+ ["success.host", 636],
26
+ ["fail.SocketError", 636],
27
+ ["fail.SocketError", 636],
28
+ ]
29
+
30
+ connection = Net::LDAP::Connection.new(:hosts => hosts, :socket_class => FakeTCPSocket)
31
+ connection.socket
32
+ end
33
+
34
+ def test_list_of_hosts_with_first_host_failure
35
+ hosts = [
36
+ ["fail.SocketError", 636],
37
+ ["success.host", 636],
38
+ ["fail.SocketError", 636],
39
+ ]
40
+
41
+ connection = Net::LDAP::Connection.new(:hosts => hosts, :socket_class => FakeTCPSocket)
42
+ connection.socket
43
+ end
44
+
45
+ def test_list_of_hosts_with_all_hosts_failure
46
+ hosts = [
47
+ ["fail.SocketError", 636],
48
+ ["fail.SocketError", 636],
49
+ ["fail.SocketError", 636],
50
+ ]
51
+
52
+ connection = Net::LDAP::Connection.new(:hosts => hosts, :socket_class => FakeTCPSocket)
53
+ assert_raise Net::LDAP::ConnectionError do
54
+ connection.socket
55
+ end
56
+ end
57
+
58
+ # This belongs in test_ldap, not test_ldap_connection
59
+ def test_result_for_connection_failed_is_set
60
+ flexmock(Socket).should_receive(:tcp).and_raise(Errno::ECONNREFUSED)
61
+
62
+ ldap_client = Net::LDAP.new(host: '127.0.0.1', port: 12345)
63
+
64
+ assert_raise Net::LDAP::ConnectionRefusedError do
65
+ ldap_client.bind(method: :simple, username: 'asdf', password: 'asdf')
66
+ end
67
+
68
+ assert_equal(ldap_client.get_operation_result.code, 52)
69
+ assert_equal(ldap_client.get_operation_result.message, 'Unavailable')
70
+ end
71
+
4
72
  def test_unresponsive_host
73
+ connection = Net::LDAP::Connection.new(:host => "fail.Errno::ETIMEDOUT", :port => 636, :socket_class => FakeTCPSocket)
5
74
  assert_raise Net::LDAP::Error do
6
- Net::LDAP::Connection.new(:host => 'test.mocked.com', :port => 636)
75
+ connection.socket
7
76
  end
8
77
  end
9
78
 
10
79
  def test_blocked_port
11
- flexmock(TCPSocket).should_receive(:new).and_raise(SocketError)
80
+ connection = Net::LDAP::Connection.new(:host => "fail.SocketError", :port => 636, :socket_class => FakeTCPSocket)
12
81
  assert_raise Net::LDAP::Error do
13
- Net::LDAP::Connection.new(:host => 'test.mocked.com', :port => 636)
82
+ connection.socket
83
+ end
84
+ end
85
+
86
+ def test_connection_refused
87
+ connection = Net::LDAP::Connection.new(:host => "fail.Errno::ECONNREFUSED", :port => 636, :socket_class => FakeTCPSocket)
88
+ stderr = capture_stderr do
89
+ assert_raise Net::LDAP::ConnectionRefusedError do
90
+ connection.socket
91
+ end
92
+ end
93
+ assert_equal("Deprecation warning: Net::LDAP::ConnectionRefused will be deprecated. Use Errno::ECONNREFUSED instead.\n", stderr)
94
+ end
95
+
96
+ def test_connection_timeout
97
+ connection = Net::LDAP::Connection.new(:host => "fail.Errno::ETIMEDOUT", :port => 636, :socket_class => FakeTCPSocket)
98
+ stderr = capture_stderr do
99
+ assert_raise Net::LDAP::Error do
100
+ connection.socket
101
+ end
14
102
  end
15
103
  end
16
104
 
17
105
  def test_raises_unknown_exceptions
18
- error = Class.new(StandardError)
19
- flexmock(TCPSocket).should_receive(:new).and_raise(error)
20
- assert_raise error do
21
- Net::LDAP::Connection.new(:host => 'test.mocked.com', :port => 636)
106
+ connection = Net::LDAP::Connection.new(:host => "fail.StandardError", :port => 636, :socket_class => FakeTCPSocket)
107
+ assert_raise StandardError do
108
+ connection.socket
22
109
  end
23
110
  end
24
111
 
25
112
  def test_modify_ops_delete
26
- args = { :operations => [ [ :delete, "mail" ] ] }
113
+ args = { :operations => [[:delete, "mail"]] }
27
114
  result = Net::LDAP::Connection.modify_ops(args[:operations])
28
- expected = [ "0\r\n\x01\x010\b\x04\x04mail1\x00" ]
115
+ expected = ["0\r\n\x01\x010\b\x04\x04mail1\x00"]
29
116
  assert_equal(expected, result)
30
117
  end
31
118
 
32
119
  def test_modify_ops_add
33
- args = { :operations => [ [ :add, "mail", "testuser@example.com" ] ] }
120
+ args = { :operations => [[:add, "mail", "testuser@example.com"]] }
34
121
  result = Net::LDAP::Connection.modify_ops(args[:operations])
35
- expected = [ "0#\n\x01\x000\x1E\x04\x04mail1\x16\x04\x14testuser@example.com" ]
122
+ expected = ["0#\n\x01\x000\x1E\x04\x04mail1\x16\x04\x14testuser@example.com"]
36
123
  assert_equal(expected, result)
37
124
  end
38
125
 
39
126
  def test_modify_ops_replace
40
- args = { :operations =>[ [ :replace, "mail", "testuser@example.com" ] ] }
127
+ args = { :operations =>[[:replace, "mail", "testuser@example.com"]] }
41
128
  result = Net::LDAP::Connection.modify_ops(args[:operations])
42
- expected = [ "0#\n\x01\x020\x1E\x04\x04mail1\x16\x04\x14testuser@example.com" ]
129
+ expected = ["0#\n\x01\x020\x1E\x04\x04mail1\x16\x04\x14testuser@example.com"]
43
130
  assert_equal(expected, result)
44
131
  end
45
132
 
@@ -73,7 +160,7 @@ class TestLDAPConnectionSocketReads < Test::Unit::TestCase
73
160
  app_tag: Net::LDAP::PDU::SearchResult,
74
161
  code: Net::LDAP::ResultCodeSuccess,
75
162
  matched_dn: "",
76
- error_message: ""
163
+ error_message: "",
77
164
  }.merge(options)
78
165
  result = Net::BER::BerIdentifiedArray.new([options[:code], options[:matched_dn], options[:error_message]])
79
166
  result.ber_identifier = options[:app_tag]
@@ -168,7 +255,7 @@ class TestLDAPConnectionSocketReads < Test::Unit::TestCase
168
255
 
169
256
  assert result = conn.rename(
170
257
  olddn: "uid=renamable-user1,ou=People,dc=rubyldap,dc=com",
171
- newrdn: "uid=renamed-user1"
258
+ newrdn: "uid=renamed-user1",
172
259
  )
173
260
  assert result.success?
174
261
  assert_equal 2, result.message_id
@@ -202,7 +289,7 @@ class TestLDAPConnectionSocketReads < Test::Unit::TestCase
202
289
  and_return(result2)
203
290
  mock.should_receive(:write)
204
291
  conn = Net::LDAP::Connection.new(:socket => mock)
205
- flexmock(Net::LDAP::Connection).should_receive(:wrap_with_ssl).with(mock, {}).
292
+ flexmock(Net::LDAP::Connection).should_receive(:wrap_with_ssl).with(mock, {}, nil).
206
293
  and_return(mock)
207
294
 
208
295
  conn.next_msgid # simulates ongoing query
@@ -259,7 +346,7 @@ class TestLDAPConnectionErrors < Test::Unit::TestCase
259
346
  def setup
260
347
  @tcp_socket = flexmock(:connection)
261
348
  @tcp_socket.should_receive(:write)
262
- flexmock(TCPSocket).should_receive(:new).and_return(@tcp_socket)
349
+ flexmock(Socket).should_receive(:tcp).and_return(@tcp_socket)
263
350
  @connection = Net::LDAP::Connection.new(:host => 'test.mocked.com', :port => 636)
264
351
  end
265
352
 
@@ -288,7 +375,7 @@ class TestLDAPConnectionInstrumentation < Test::Unit::TestCase
288
375
  def setup
289
376
  @tcp_socket = flexmock(:connection)
290
377
  @tcp_socket.should_receive(:write)
291
- flexmock(TCPSocket).should_receive(:new).and_return(@tcp_socket)
378
+ flexmock(Socket).should_receive(:tcp).and_return(@tcp_socket)
292
379
 
293
380
  @service = MockInstrumentationService.new
294
381
  @connection = Net::LDAP::Connection.new \
@@ -310,8 +397,8 @@ class TestLDAPConnectionInstrumentation < Test::Unit::TestCase
310
397
 
311
398
  # a write event
312
399
  payload, result = events.pop
313
- assert payload.has_key?(:result)
314
- assert payload.has_key?(:content_length)
400
+ assert payload.key?(:result)
401
+ assert payload.key?(:content_length)
315
402
  end
316
403
 
317
404
  def test_read_net_ldap_connection_event
@@ -327,7 +414,7 @@ class TestLDAPConnectionInstrumentation < Test::Unit::TestCase
327
414
 
328
415
  # a read event
329
416
  payload, result = events.pop
330
- assert payload.has_key?(:result)
417
+ assert payload.key?(:result)
331
418
  assert_equal read_result, result
332
419
  end
333
420
 
@@ -344,9 +431,9 @@ class TestLDAPConnectionInstrumentation < Test::Unit::TestCase
344
431
 
345
432
  # a parse_pdu event
346
433
  payload, result = events.pop
347
- assert payload.has_key?(:pdu)
348
- assert payload.has_key?(:app_tag)
349
- assert payload.has_key?(:message_id)
434
+ assert payload.key?(:pdu)
435
+ assert payload.key?(:app_tag)
436
+ assert payload.key?(:message_id)
350
437
  assert_equal Net::LDAP::PDU::BindResult, payload[:app_tag]
351
438
  assert_equal 1, payload[:message_id]
352
439
  pdu = payload[:pdu]
@@ -366,7 +453,7 @@ class TestLDAPConnectionInstrumentation < Test::Unit::TestCase
366
453
 
367
454
  # a read event
368
455
  payload, result = events.pop
369
- assert payload.has_key?(:result)
456
+ assert payload.key?(:result)
370
457
  assert result.success?, "should be success"
371
458
  end
372
459
 
@@ -374,7 +461,7 @@ class TestLDAPConnectionInstrumentation < Test::Unit::TestCase
374
461
  # search data
375
462
  search_data_ber = Net::BER::BerIdentifiedArray.new([1, [
376
463
  "uid=user1,ou=People,dc=rubyldap,dc=com",
377
- [ ["uid", ["user1"]] ]
464
+ [["uid", ["user1"]]],
378
465
  ]])
379
466
  search_data_ber.ber_identifier = Net::LDAP::PDU::SearchReturnedData
380
467
  search_data = [1, search_data_ber]
@@ -393,8 +480,8 @@ class TestLDAPConnectionInstrumentation < Test::Unit::TestCase
393
480
 
394
481
  # a search event
395
482
  payload, result = events.pop
396
- assert payload.has_key?(:result)
397
- assert payload.has_key?(:filter)
483
+ assert payload.key?(:result)
484
+ assert payload.key?(:filter)
398
485
  assert_equal "(uid=user1)", payload[:filter].to_s
399
486
  assert result
400
487
 
data/test/test_ldif.rb CHANGED
@@ -38,45 +38,45 @@ class TestLdif < Test::Unit::TestCase
38
38
 
39
39
  def test_ldif_with_continuation_lines
40
40
  ds = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: abcdefg\r\n hijklmn\r\n\r\n"))
41
- assert_equal(true, ds.has_key?("abcdefghijklmn"))
41
+ assert_equal(true, ds.key?("abcdefghijklmn"))
42
42
  end
43
43
 
44
44
  def test_ldif_with_continuation_lines_and_extra_whitespace
45
45
  ds1 = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: abcdefg\r\n hijklmn\r\n\r\n"))
46
- assert_equal(true, ds1.has_key?("abcdefg hijklmn"))
46
+ assert_equal(true, ds1.key?("abcdefg hijklmn"))
47
47
  ds2 = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: abcdefg\r\n hij klmn\r\n\r\n"))
48
- assert_equal(true, ds2.has_key?("abcdefghij klmn"))
48
+ assert_equal(true, ds2.key?("abcdefghij klmn"))
49
49
  end
50
50
 
51
51
  def test_ldif_tab_is_not_continuation
52
52
  ds = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: key\r\n\tnotcontinued\r\n\r\n"))
53
- assert_equal(true, ds.has_key?("key"))
53
+ assert_equal(true, ds.key?("key"))
54
54
  end
55
55
 
56
56
  def test_ldif_with_base64_dn
57
57
  str = "dn:: Q049QmFzZTY0IGRuIHRlc3QsT1U9VGVzdCxPVT1Vbml0cyxEQz1leGFtcGxlLERDPWNvbQ==\r\n\r\n"
58
58
  ds = Net::LDAP::Dataset::read_ldif(StringIO.new(str))
59
- assert_equal(true, ds.has_key?("CN=Base64 dn test,OU=Test,OU=Units,DC=example,DC=com"))
59
+ assert_equal(true, ds.key?("CN=Base64 dn test,OU=Test,OU=Units,DC=example,DC=com"))
60
60
  end
61
61
 
62
62
  def test_ldif_with_base64_dn_and_continuation_lines
63
63
  str = "dn:: Q049QmFzZTY0IGRuIHRlc3Qgd2l0aCBjb250aW51YXRpb24gbGluZSxPVT1UZXN0LE9VPVVua\r\n XRzLERDPWV4YW1wbGUsREM9Y29t\r\n\r\n"
64
64
  ds = Net::LDAP::Dataset::read_ldif(StringIO.new(str))
65
- assert_equal(true, ds.has_key?("CN=Base64 dn test with continuation line,OU=Test,OU=Units,DC=example,DC=com"))
65
+ assert_equal(true, ds.key?("CN=Base64 dn test with continuation line,OU=Test,OU=Units,DC=example,DC=com"))
66
66
  end
67
67
 
68
68
  # TODO, INADEQUATE. We need some more tests
69
69
  # to verify the content.
70
70
  def test_ldif
71
- File.open(TestLdifFilename, "r") {|f|
71
+ File.open(TestLdifFilename, "r") do |f|
72
72
  ds = Net::LDAP::Dataset::read_ldif(f)
73
73
  assert_equal(13, ds.length)
74
- }
74
+ end
75
75
  end
76
76
 
77
77
  # Must test folded lines and base64-encoded lines as well as normal ones.
78
78
  def test_to_ldif
79
- data = File.open(TestLdifFilename, "rb") { |f| f.read }
79
+ data = File.open(TestLdifFilename, "rb", &:read)
80
80
  io = StringIO.new(data)
81
81
 
82
82
  # added .lines to turn to array because 1.9 doesn't have
@@ -84,13 +84,13 @@ class TestLdif < Test::Unit::TestCase
84
84
  entries = data.lines.grep(/^dn:\s*/) { $'.chomp }
85
85
  dn_entries = entries.dup
86
86
 
87
- ds = Net::LDAP::Dataset::read_ldif(io) { |type, value|
87
+ ds = Net::LDAP::Dataset::read_ldif(io) do |type, value|
88
88
  case type
89
89
  when :dn
90
90
  assert_equal(dn_entries.first, value)
91
91
  dn_entries.shift
92
92
  end
93
- }
93
+ end
94
94
  assert_equal(entries.size, ds.size)
95
95
  assert_equal(entries.sort, ds.to_ldif.grep(/^dn:\s*/) { $'.chomp })
96
96
  end
data/test/test_search.rb CHANGED
@@ -32,8 +32,8 @@ class TestSearch < Test::Unit::TestCase
32
32
  @connection.search(:filter => "test")
33
33
 
34
34
  payload, result = events.pop
35
- assert payload.has_key?(:result)
36
- assert payload.has_key?(:filter)
35
+ assert payload.key?(:result)
36
+ assert payload.key?(:filter)
37
37
  assert_equal "test", payload[:filter]
38
38
  end
39
39
  end
data/test/test_snmp.rb CHANGED
@@ -16,9 +16,9 @@ class TestSnmp < Test::Unit::TestCase
16
16
 
17
17
  def test_invalid_packet
18
18
  data = "xxxx"
19
- assert_raise(Net::BER::BerError) {
19
+ assert_raise(Net::BER::BerError) do
20
20
  ary = data.read_ber(Net::SNMP::AsnSyntax)
21
- }
21
+ end
22
22
  end
23
23
 
24
24
  # The method String#read_ber! added by Net::BER consumes a well-formed BER
@@ -40,9 +40,9 @@ ary = data.read_ber(Net::SNMP::AsnSyntax)
40
40
  end
41
41
 
42
42
  def test_weird_packet
43
- assert_raise(Net::SnmpPdu::Error) {
43
+ assert_raise(Net::SnmpPdu::Error) do
44
44
  Net::SnmpPdu.parse("aaaaaaaaaaaaaa")
45
- }
45
+ end
46
46
  end
47
47
 
48
48
  def test_get_request
@@ -24,7 +24,7 @@ module LdapServer
24
24
  },
25
25
  :primitive => {
26
26
  2 => :string, # ldapsearch sends this to unbind
27
- }
27
+ },
28
28
  },
29
29
  :context_specific => {
30
30
  :primitive => {
@@ -34,7 +34,7 @@ module LdapServer
34
34
  :constructed => {
35
35
  3 => :array # equality filter
36
36
  },
37
- }
37
+ },
38
38
  }
39
39
 
40
40
  def post_init
@@ -119,7 +119,7 @@ module LdapServer
119
119
  # pdu[1][7] is the list of requested attributes.
120
120
  # If it's an empty array, that means that *all* attributes were requested.
121
121
  requested_attrs = if pdu[1][7].length > 0
122
- pdu[1][7].map {|a| a.downcase}
122
+ pdu[1][7].map(&:downcase)
123
123
  else
124
124
  :all
125
125
  end
@@ -133,21 +133,21 @@ module LdapServer
133
133
  # TODO, what if this returns nil?
134
134
  filter = Net::LDAP::Filter.parse_ldap_filter( filters )
135
135
 
136
- $ldif.each {|dn, entry|
136
+ $ldif.each do |dn, entry|
137
137
  if filter.match( entry )
138
138
  attrs = []
139
- entry.each {|k, v|
139
+ entry.each do |k, v|
140
140
  if requested_attrs == :all or requested_attrs.include?(k.downcase)
141
- attrvals = v.map {|v1| v1.to_ber}.to_ber_set
141
+ attrvals = v.map(&:to_ber).to_ber_set
142
142
  attrs << [k.to_ber, attrvals].to_ber_sequence
143
143
  end
144
- }
144
+ end
145
145
 
146
146
  appseq = [dn.to_ber, attrs.to_ber_sequence].to_ber_appsequence(4)
147
147
  pkt = [msgid.to_ber, appseq].to_ber_sequence
148
148
  send_data pkt
149
149
  end
150
- }
150
+ end
151
151
 
152
152
 
153
153
  send_ldap_response 5, pdu[0].to_i, 0, "", "Was that what you wanted?"
@@ -156,7 +156,7 @@ module LdapServer
156
156
 
157
157
 
158
158
  def send_ldap_response pkt_tag, msgid, code, dn, text
159
- send_data( [msgid.to_ber, [code.to_ber, dn.to_ber, text.to_ber].to_ber_appsequence(pkt_tag) ].to_ber )
159
+ send_data( [msgid.to_ber, [code.to_ber, dn.to_ber, text.to_ber].to_ber_appsequence(pkt_tag)].to_ber )
160
160
  end
161
161
 
162
162
  end
@@ -201,10 +201,9 @@ if __FILE__ == $0
201
201
 
202
202
  require 'net/ldap'
203
203
 
204
- EventMachine.run {
204
+ EventMachine.run do
205
205
  $logger.info "starting LDAP server on 127.0.0.1 port 3890"
206
206
  EventMachine.start_server "127.0.0.1", 3890, LdapServer
207
207
  EventMachine.add_periodic_timer 60, proc {$logger.info "heartbeat"}
208
- }
208
+ end
209
209
  end
210
-
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net-ldap
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.11'
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francis Cianfrocca
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2015-01-21 00:00:00.000000000 Z
16
+ date: 2017-02-24 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: flexmock
@@ -49,14 +49,42 @@ dependencies:
49
49
  requirements:
50
50
  - - "~>"
51
51
  - !ruby/object:Gem::Version
52
- version: 0.28.0
52
+ version: 0.42.0
53
53
  type: :development
54
54
  prerelease: false
55
55
  version_requirements: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: 0.28.0
59
+ version: 0.42.0
60
+ - !ruby/object:Gem::Dependency
61
+ name: test-unit
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ - !ruby/object:Gem::Dependency
75
+ name: byebug
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ type: :development
82
+ prerelease: false
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
60
88
  description: |-
61
89
  Net::LDAP for Ruby (also called net-ldap) implements client access for the
62
90
  Lightweight Directory Access Protocol (LDAP), an IETF standard protocol for
@@ -106,6 +134,10 @@ files:
106
134
  - lib/net/ber/core_ext/string.rb
107
135
  - lib/net/ber/core_ext/true_class.rb
108
136
  - lib/net/ldap.rb
137
+ - lib/net/ldap/auth_adapter.rb
138
+ - lib/net/ldap/auth_adapter/gss_spnego.rb
139
+ - lib/net/ldap/auth_adapter/sasl.rb
140
+ - lib/net/ldap/auth_adapter/simple.rb
109
141
  - lib/net/ldap/connection.rb
110
142
  - lib/net/ldap/dataset.rb
111
143
  - lib/net/ldap/dn.rb
@@ -118,13 +150,17 @@ files:
118
150
  - lib/net/ldap/version.rb
119
151
  - lib/net/snmp.rb
120
152
  - net-ldap.gemspec
153
+ - script/changelog
154
+ - script/generate-fixture-ca
121
155
  - script/install-openldap
122
156
  - script/package
123
157
  - script/release
124
158
  - test/ber/core_ext/test_array.rb
125
159
  - test/ber/core_ext/test_string.rb
126
160
  - test/ber/test_ber.rb
127
- - test/fixtures/cacert.pem
161
+ - test/fixtures/ca/ca.info
162
+ - test/fixtures/ca/cacert.pem
163
+ - test/fixtures/ca/cakey.pem
128
164
  - test/fixtures/openldap/memberof.ldif
129
165
  - test/fixtures/openldap/retcode.ldif
130
166
  - test/fixtures/openldap/slapd.conf.ldif
@@ -134,11 +170,13 @@ files:
134
170
  - test/integration/test_bind.rb
135
171
  - test/integration/test_delete.rb
136
172
  - test/integration/test_open.rb
173
+ - test/integration/test_password_modify.rb
137
174
  - test/integration/test_return_codes.rb
138
175
  - test/integration/test_search.rb
139
176
  - test/support/vm/openldap/.gitignore
140
177
  - test/support/vm/openldap/README.md
141
178
  - test/support/vm/openldap/Vagrantfile
179
+ - test/test_auth_adapter.rb
142
180
  - test/test_dn.rb
143
181
  - test/test_entry.rb
144
182
  - test/test_filter.rb
@@ -169,7 +207,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
169
207
  requirements:
170
208
  - - ">="
171
209
  - !ruby/object:Gem::Version
172
- version: 1.9.3
210
+ version: 2.0.0
173
211
  required_rubygems_version: !ruby/object:Gem::Requirement
174
212
  requirements:
175
213
  - - ">="
@@ -177,7 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
215
  version: '0'
178
216
  requirements: []
179
217
  rubyforge_project:
180
- rubygems_version: 2.2.2
218
+ rubygems_version: 2.5.2
181
219
  signing_key:
182
220
  specification_version: 4
183
221
  summary: Net::LDAP for Ruby (also called net-ldap) implements client access for the
@@ -187,7 +225,9 @@ test_files:
187
225
  - test/ber/core_ext/test_array.rb
188
226
  - test/ber/core_ext/test_string.rb
189
227
  - test/ber/test_ber.rb
190
- - test/fixtures/cacert.pem
228
+ - test/fixtures/ca/ca.info
229
+ - test/fixtures/ca/cacert.pem
230
+ - test/fixtures/ca/cakey.pem
191
231
  - test/fixtures/openldap/memberof.ldif
192
232
  - test/fixtures/openldap/retcode.ldif
193
233
  - test/fixtures/openldap/slapd.conf.ldif
@@ -197,11 +237,13 @@ test_files:
197
237
  - test/integration/test_bind.rb
198
238
  - test/integration/test_delete.rb
199
239
  - test/integration/test_open.rb
240
+ - test/integration/test_password_modify.rb
200
241
  - test/integration/test_return_codes.rb
201
242
  - test/integration/test_search.rb
202
243
  - test/support/vm/openldap/.gitignore
203
244
  - test/support/vm/openldap/README.md
204
245
  - test/support/vm/openldap/Vagrantfile
246
+ - test/test_auth_adapter.rb
205
247
  - test/test_dn.rb
206
248
  - test/test_entry.rb
207
249
  - test/test_filter.rb
@@ -1,20 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIDRzCCAf+gAwIBAgIEVHpbmjANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDEwhy
3
- dWJ5bGRhcDAeFw0xNDExMjkyMzQ5NDZaFw0xNTExMjkyMzQ5NDZaMBMxETAPBgNV
4
- BAMTCHJ1YnlsZGFwMIIBUjANBgkqhkiG9w0BAQEFAAOCAT8AMIIBOgKCATEA4pKe
5
- cDCNuL53fkpO/WSAS+gmMTsOs+oOK71kZlk2QT/MBz8TxC6m358qCADjnXcMVVxa
6
- ySQbQlVKZMkIvLNciZbiLDgC5II0NbHACNa8rqenoKRjS4J9W3OhA8EmnXn/Me+8
7
- uMCI9tfnKNRZYdkQZlra4I+Idn+xYfl/5q5b/7ZjPS2zY/585hFEYE+5vfOZVBSU
8
- 3HMNSeuJvTehLv7dD7aQfXNM4cRgHXequkJQ/HLLFAO4AgJ+LJrFWpj7GWz3crgr
9
- 9G5px4T78wJH3NQiOsG6UBXPw8c4T+Z6GAWX2l1zs1gZsaiCVbAraqK3404lL7yp
10
- +ThbsW3ifzgNPhmjScXBLdbEDrrAKosW7kkTOGzxiMCBmNlj2SKhcztoduAtfF1f
11
- Fs2Jk8MRTHwO8ThD7wIDAQABo0MwQTAPBgNVHRMBAf8EBTADAQH/MA8GA1UdDwEB
12
- /wQFAwMHBAAwHQYDVR0OBBYEFJDm67ekyFu4/Z7VcO6Vk/5pinGcMA0GCSqGSIb3
13
- DQEBCwUAA4IBMQDHeEPzfYRtjynpUKyrtxx/6ZVOfCLuz4eHkBZggz/pJacDCv/a
14
- I//W03XCk8RWq/fWVVUzvxXgPwnYcw992PLM7XW81zp6ruRUDWooYnjHZZz3bRhe
15
- kC4QvM2mZhcsMVmhmWWKZn81qXgVdUY1XNRhk87cuXjF/UTpEieFvWAsCUkFZkqB
16
- AmySCuI/FuPaauT1YAltkIlYAEIGNJGZDMf2BTVUQpXhTXeS9/AZWLNDBwiq+fwo
17
- YYnsr9MnBXCEmg1gVSR/Ay2AZmbYfiYtb5kU8uq2lSWAUb4LX6HZl82wo3OilrJ2
18
- WXl6Qf+Fcy4qqkRt4AKHjtzizpEDCOVYuuG0Zoy+QnxNXRsEzpb8ymnJFrcgYfk/
19
- 6Lv2gWAFl5FqCZp7gBWg55eL2coT4C+mbNTF
20
- -----END CERTIFICATE-----