net-ldap 0.16.2 → 0.19.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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/History.rdoc +59 -0
  3. data/README.rdoc +10 -3
  4. data/lib/net/ber/core_ext.rb +6 -6
  5. data/lib/net/ber.rb +2 -2
  6. data/lib/net/ldap/auth_adapter/gss_spnego.rb +2 -2
  7. data/lib/net/ldap/auth_adapter/sasl.rb +1 -1
  8. data/lib/net/ldap/auth_adapter/simple.rb +1 -1
  9. data/lib/net/ldap/connection.rb +22 -14
  10. data/lib/net/ldap/dataset.rb +1 -3
  11. data/lib/net/ldap/dn.rb +19 -27
  12. data/lib/net/ldap/entry.rb +11 -2
  13. data/lib/net/ldap/error.rb +2 -26
  14. data/lib/net/ldap/filter.rb +3 -3
  15. data/lib/net/ldap/instrumentation.rb +2 -2
  16. data/lib/net/ldap/password.rb +7 -5
  17. data/lib/net/ldap/pdu.rb +1 -1
  18. data/lib/net/ldap/version.rb +1 -1
  19. data/lib/net/ldap.rb +41 -16
  20. data/lib/net/snmp.rb +1 -1
  21. data/lib/net-ldap.rb +1 -1
  22. metadata +16 -92
  23. data/.gitignore +0 -10
  24. data/.rubocop.yml +0 -20
  25. data/.rubocop_todo.yml +0 -753
  26. data/.travis.yml +0 -55
  27. data/CONTRIBUTING.md +0 -54
  28. data/Gemfile +0 -2
  29. data/Rakefile +0 -23
  30. data/net-ldap.gemspec +0 -37
  31. data/script/changelog +0 -47
  32. data/script/ldap-docker +0 -12
  33. data/script/package +0 -7
  34. data/script/release +0 -16
  35. data/test/ber/core_ext/test_array.rb +0 -22
  36. data/test/ber/core_ext/test_string.rb +0 -25
  37. data/test/ber/test_ber.rb +0 -153
  38. data/test/fixtures/ca/docker-ca.pem +0 -18
  39. data/test/fixtures/ldif/06-retcode.ldif +0 -75
  40. data/test/fixtures/ldif/50-seed.ldif +0 -374
  41. data/test/integration/test_add.rb +0 -26
  42. data/test/integration/test_ber.rb +0 -30
  43. data/test/integration/test_bind.rb +0 -222
  44. data/test/integration/test_delete.rb +0 -29
  45. data/test/integration/test_open.rb +0 -87
  46. data/test/integration/test_password_modify.rb +0 -93
  47. data/test/integration/test_return_codes.rb +0 -46
  48. data/test/integration/test_search.rb +0 -77
  49. data/test/support/vm/openldap/.gitignore +0 -1
  50. data/test/test_auth_adapter.rb +0 -15
  51. data/test/test_dn.rb +0 -44
  52. data/test/test_entry.rb +0 -65
  53. data/test/test_filter.rb +0 -223
  54. data/test/test_filter_parser.rb +0 -24
  55. data/test/test_helper.rb +0 -73
  56. data/test/test_ldap.rb +0 -114
  57. data/test/test_ldap_connection.rb +0 -491
  58. data/test/test_ldif.rb +0 -104
  59. data/test/test_password.rb +0 -10
  60. data/test/test_rename.rb +0 -77
  61. data/test/test_search.rb +0 -39
  62. data/test/test_snmp.rb +0 -119
  63. data/test/test_ssl_ber.rb +0 -40
  64. data/test/testdata.ldif +0 -101
  65. data/testserver/ldapserver.rb +0 -209
  66. data/testserver/testdata.ldif +0 -101
@@ -1,374 +0,0 @@
1
- dn: ou=People,dc=example,dc=org
2
- objectClass: top
3
- objectClass: organizationalUnit
4
- ou: People
5
-
6
- dn: ou=Groups,dc=example,dc=org
7
- objectClass: top
8
- objectClass: organizationalUnit
9
- ou: Groups
10
-
11
- # Directory Superuser
12
- dn: uid=admin,dc=example,dc=org
13
- uid: admin
14
- cn: system administrator
15
- sn: administrator
16
- objectClass: top
17
- objectClass: person
18
- objectClass: organizationalPerson
19
- objectClass: inetOrgPerson
20
- displayName: Directory Superuser
21
- userPassword: passworD1
22
-
23
- # Users 1-10
24
-
25
- dn: uid=user1,ou=People,dc=example,dc=org
26
- uid: user1
27
- cn: user1
28
- sn: user1
29
- objectClass: top
30
- objectClass: person
31
- objectClass: organizationalPerson
32
- objectClass: inetOrgPerson
33
- userPassword: passworD1
34
- mail: user1@rubyldap.com
35
-
36
- dn: uid=user2,ou=People,dc=example,dc=org
37
- uid: user2
38
- cn: user2
39
- sn: user2
40
- objectClass: top
41
- objectClass: person
42
- objectClass: organizationalPerson
43
- objectClass: inetOrgPerson
44
- userPassword: passworD1
45
- mail: user2@rubyldap.com
46
-
47
- dn: uid=user3,ou=People,dc=example,dc=org
48
- uid: user3
49
- cn: user3
50
- sn: user3
51
- objectClass: top
52
- objectClass: person
53
- objectClass: organizationalPerson
54
- objectClass: inetOrgPerson
55
- userPassword: passworD1
56
- mail: user3@rubyldap.com
57
-
58
- dn: uid=user4,ou=People,dc=example,dc=org
59
- uid: user4
60
- cn: user4
61
- sn: user4
62
- objectClass: top
63
- objectClass: person
64
- objectClass: organizationalPerson
65
- objectClass: inetOrgPerson
66
- userPassword: passworD1
67
- mail: user4@rubyldap.com
68
-
69
- dn: uid=user5,ou=People,dc=example,dc=org
70
- uid: user5
71
- cn: user5
72
- sn: user5
73
- objectClass: top
74
- objectClass: person
75
- objectClass: organizationalPerson
76
- objectClass: inetOrgPerson
77
- userPassword: passworD1
78
- mail: user5@rubyldap.com
79
-
80
- dn: uid=user6,ou=People,dc=example,dc=org
81
- uid: user6
82
- cn: user6
83
- sn: user6
84
- objectClass: top
85
- objectClass: person
86
- objectClass: organizationalPerson
87
- objectClass: inetOrgPerson
88
- userPassword: passworD1
89
- mail: user6@rubyldap.com
90
-
91
- dn: uid=user7,ou=People,dc=example,dc=org
92
- uid: user7
93
- cn: user7
94
- sn: user7
95
- objectClass: top
96
- objectClass: person
97
- objectClass: organizationalPerson
98
- objectClass: inetOrgPerson
99
- userPassword: passworD1
100
- mail: user7@rubyldap.com
101
-
102
- dn: uid=user8,ou=People,dc=example,dc=org
103
- uid: user8
104
- cn: user8
105
- sn: user8
106
- objectClass: top
107
- objectClass: person
108
- objectClass: organizationalPerson
109
- objectClass: inetOrgPerson
110
- userPassword: passworD1
111
- mail: user8@rubyldap.com
112
-
113
- dn: uid=user9,ou=People,dc=example,dc=org
114
- uid: user9
115
- cn: user9
116
- sn: user9
117
- objectClass: top
118
- objectClass: person
119
- objectClass: organizationalPerson
120
- objectClass: inetOrgPerson
121
- userPassword: passworD1
122
- mail: user9@rubyldap.com
123
-
124
- dn: uid=user10,ou=People,dc=example,dc=org
125
- uid: user10
126
- cn: user10
127
- sn: user10
128
- objectClass: top
129
- objectClass: person
130
- objectClass: organizationalPerson
131
- objectClass: inetOrgPerson
132
- userPassword: passworD1
133
- mail: user10@rubyldap.com
134
-
135
- # Emailless User
136
-
137
- dn: uid=emailless-user1,ou=People,dc=example,dc=org
138
- uid: emailless-user1
139
- cn: emailless-user1
140
- sn: emailless-user1
141
- objectClass: top
142
- objectClass: person
143
- objectClass: organizationalPerson
144
- objectClass: inetOrgPerson
145
- userPassword: passworD1
146
-
147
- # Groupless User
148
-
149
- dn: uid=groupless-user1,ou=People,dc=example,dc=org
150
- uid: groupless-user1
151
- cn: groupless-user1
152
- sn: groupless-user1
153
- objectClass: top
154
- objectClass: person
155
- objectClass: organizationalPerson
156
- objectClass: inetOrgPerson
157
- userPassword: passworD1
158
-
159
- # Admin User
160
-
161
- dn: uid=admin1,ou=People,dc=example,dc=org
162
- uid: admin1
163
- cn: admin1
164
- sn: admin1
165
- objectClass: top
166
- objectClass: person
167
- objectClass: organizationalPerson
168
- objectClass: inetOrgPerson
169
- userPassword: passworD1
170
- mail: admin1@rubyldap.com
171
-
172
- # Groups
173
-
174
- dn: cn=ghe-users,ou=Groups,dc=example,dc=org
175
- cn: ghe-users
176
- objectClass: groupOfNames
177
- member: uid=user1,ou=People,dc=example,dc=org
178
- member: uid=emailless-user1,ou=People,dc=example,dc=org
179
-
180
- dn: cn=all-users,ou=Groups,dc=example,dc=org
181
- cn: all-users
182
- objectClass: groupOfNames
183
- member: cn=ghe-users,ou=Groups,dc=example,dc=org
184
- member: uid=user1,ou=People,dc=example,dc=org
185
- member: uid=user2,ou=People,dc=example,dc=org
186
- member: uid=user3,ou=People,dc=example,dc=org
187
- member: uid=user4,ou=People,dc=example,dc=org
188
- member: uid=user5,ou=People,dc=example,dc=org
189
- member: uid=user6,ou=People,dc=example,dc=org
190
- member: uid=user7,ou=People,dc=example,dc=org
191
- member: uid=user8,ou=People,dc=example,dc=org
192
- member: uid=user9,ou=People,dc=example,dc=org
193
- member: uid=user10,ou=People,dc=example,dc=org
194
- member: uid=emailless-user1,ou=People,dc=example,dc=org
195
-
196
- dn: cn=ghe-admins,ou=Groups,dc=example,dc=org
197
- cn: ghe-admins
198
- objectClass: groupOfNames
199
- member: uid=admin1,ou=People,dc=example,dc=org
200
-
201
- dn: cn=all-admins,ou=Groups,dc=example,dc=org
202
- cn: all-admins
203
- objectClass: groupOfNames
204
- member: cn=ghe-admins,ou=Groups,dc=example,dc=org
205
- member: uid=admin1,ou=People,dc=example,dc=org
206
-
207
- dn: cn=n-member-group10,ou=Groups,dc=example,dc=org
208
- cn: n-member-group10
209
- objectClass: groupOfNames
210
- member: uid=user1,ou=People,dc=example,dc=org
211
- member: uid=user2,ou=People,dc=example,dc=org
212
- member: uid=user3,ou=People,dc=example,dc=org
213
- member: uid=user4,ou=People,dc=example,dc=org
214
- member: uid=user5,ou=People,dc=example,dc=org
215
- member: uid=user6,ou=People,dc=example,dc=org
216
- member: uid=user7,ou=People,dc=example,dc=org
217
- member: uid=user8,ou=People,dc=example,dc=org
218
- member: uid=user9,ou=People,dc=example,dc=org
219
- member: uid=user10,ou=People,dc=example,dc=org
220
-
221
- dn: cn=nested-group1,ou=Groups,dc=example,dc=org
222
- cn: nested-group1
223
- objectClass: groupOfNames
224
- member: uid=user1,ou=People,dc=example,dc=org
225
- member: uid=user2,ou=People,dc=example,dc=org
226
- member: uid=user3,ou=People,dc=example,dc=org
227
- member: uid=user4,ou=People,dc=example,dc=org
228
- member: uid=user5,ou=People,dc=example,dc=org
229
-
230
- dn: cn=nested-group2,ou=Groups,dc=example,dc=org
231
- cn: nested-group2
232
- objectClass: groupOfNames
233
- member: uid=user6,ou=People,dc=example,dc=org
234
- member: uid=user7,ou=People,dc=example,dc=org
235
- member: uid=user8,ou=People,dc=example,dc=org
236
- member: uid=user9,ou=People,dc=example,dc=org
237
- member: uid=user10,ou=People,dc=example,dc=org
238
-
239
- dn: cn=nested-groups,ou=Groups,dc=example,dc=org
240
- cn: nested-groups
241
- objectClass: groupOfNames
242
- member: cn=nested-group1,ou=Groups,dc=example,dc=org
243
- member: cn=nested-group2,ou=Groups,dc=example,dc=org
244
-
245
- dn: cn=n-member-nested-group1,ou=Groups,dc=example,dc=org
246
- cn: n-member-nested-group1
247
- objectClass: groupOfNames
248
- member: cn=nested-group1,ou=Groups,dc=example,dc=org
249
-
250
- dn: cn=deeply-nested-group0.0.0,ou=Groups,dc=example,dc=org
251
- cn: deeply-nested-group0.0.0
252
- objectClass: groupOfNames
253
- member: uid=user1,ou=People,dc=example,dc=org
254
- member: uid=user2,ou=People,dc=example,dc=org
255
- member: uid=user3,ou=People,dc=example,dc=org
256
- member: uid=user4,ou=People,dc=example,dc=org
257
- member: uid=user5,ou=People,dc=example,dc=org
258
-
259
- dn: cn=deeply-nested-group0.0.1,ou=Groups,dc=example,dc=org
260
- cn: deeply-nested-group0.0.1
261
- objectClass: groupOfNames
262
- member: uid=user6,ou=People,dc=example,dc=org
263
- member: uid=user7,ou=People,dc=example,dc=org
264
- member: uid=user8,ou=People,dc=example,dc=org
265
- member: uid=user9,ou=People,dc=example,dc=org
266
- member: uid=user10,ou=People,dc=example,dc=org
267
-
268
- dn: cn=deeply-nested-group0.0,ou=Groups,dc=example,dc=org
269
- cn: deeply-nested-group0.0
270
- objectClass: groupOfNames
271
- member: cn=deeply-nested-group0.0.0,ou=Groups,dc=example,dc=org
272
- member: cn=deeply-nested-group0.0.1,ou=Groups,dc=example,dc=org
273
-
274
- dn: cn=deeply-nested-group0,ou=Groups,dc=example,dc=org
275
- cn: deeply-nested-group0
276
- objectClass: groupOfNames
277
- member: cn=deeply-nested-group0.0,ou=Groups,dc=example,dc=org
278
-
279
- dn: cn=deeply-nested-groups,ou=Groups,dc=example,dc=org
280
- cn: deeply-nested-groups
281
- objectClass: groupOfNames
282
- member: cn=deeply-nested-group0,ou=Groups,dc=example,dc=org
283
-
284
- dn: cn=n-depth-nested-group1,ou=Groups,dc=example,dc=org
285
- cn: n-depth-nested-group1
286
- objectClass: groupOfNames
287
- member: cn=nested-group1,ou=Groups,dc=example,dc=org
288
-
289
- dn: cn=n-depth-nested-group2,ou=Groups,dc=example,dc=org
290
- cn: n-depth-nested-group2
291
- objectClass: groupOfNames
292
- member: cn=n-depth-nested-group1,ou=Groups,dc=example,dc=org
293
-
294
- dn: cn=n-depth-nested-group3,ou=Groups,dc=example,dc=org
295
- cn: n-depth-nested-group3
296
- objectClass: groupOfNames
297
- member: cn=n-depth-nested-group2,ou=Groups,dc=example,dc=org
298
-
299
- dn: cn=n-depth-nested-group4,ou=Groups,dc=example,dc=org
300
- cn: n-depth-nested-group4
301
- objectClass: groupOfNames
302
- member: cn=n-depth-nested-group3,ou=Groups,dc=example,dc=org
303
-
304
- dn: cn=n-depth-nested-group5,ou=Groups,dc=example,dc=org
305
- cn: n-depth-nested-group5
306
- objectClass: groupOfNames
307
- member: cn=n-depth-nested-group4,ou=Groups,dc=example,dc=org
308
-
309
- dn: cn=n-depth-nested-group6,ou=Groups,dc=example,dc=org
310
- cn: n-depth-nested-group6
311
- objectClass: groupOfNames
312
- member: cn=n-depth-nested-group5,ou=Groups,dc=example,dc=org
313
-
314
- dn: cn=n-depth-nested-group7,ou=Groups,dc=example,dc=org
315
- cn: n-depth-nested-group7
316
- objectClass: groupOfNames
317
- member: cn=n-depth-nested-group6,ou=Groups,dc=example,dc=org
318
-
319
- dn: cn=n-depth-nested-group8,ou=Groups,dc=example,dc=org
320
- cn: n-depth-nested-group8
321
- objectClass: groupOfNames
322
- member: cn=n-depth-nested-group7,ou=Groups,dc=example,dc=org
323
-
324
- dn: cn=n-depth-nested-group9,ou=Groups,dc=example,dc=org
325
- cn: n-depth-nested-group9
326
- objectClass: groupOfNames
327
- member: cn=n-depth-nested-group8,ou=Groups,dc=example,dc=org
328
-
329
- dn: cn=head-group,ou=Groups,dc=example,dc=org
330
- cn: head-group
331
- objectClass: groupOfNames
332
- member: cn=tail-group,ou=Groups,dc=example,dc=org
333
- member: uid=user1,ou=People,dc=example,dc=org
334
- member: uid=user2,ou=People,dc=example,dc=org
335
- member: uid=user3,ou=People,dc=example,dc=org
336
- member: uid=user4,ou=People,dc=example,dc=org
337
- member: uid=user5,ou=People,dc=example,dc=org
338
-
339
- dn: cn=tail-group,ou=Groups,dc=example,dc=org
340
- cn: tail-group
341
- objectClass: groupOfNames
342
- member: cn=head-group,ou=Groups,dc=example,dc=org
343
- member: uid=user6,ou=People,dc=example,dc=org
344
- member: uid=user7,ou=People,dc=example,dc=org
345
- member: uid=user8,ou=People,dc=example,dc=org
346
- member: uid=user9,ou=People,dc=example,dc=org
347
- member: uid=user10,ou=People,dc=example,dc=org
348
-
349
- dn: cn=recursively-nested-groups,ou=Groups,dc=example,dc=org
350
- cn: recursively-nested-groups
351
- objectClass: groupOfNames
352
- member: cn=head-group,ou=Groups,dc=example,dc=org
353
- member: cn=tail-group,ou=Groups,dc=example,dc=org
354
-
355
- # posixGroup
356
-
357
- dn: cn=posix-group1,ou=Groups,dc=example,dc=org
358
- cn: posix-group1
359
- objectClass: posixGroup
360
- gidNumber: 1001
361
- memberUid: user1
362
- memberUid: user2
363
- memberUid: user3
364
- memberUid: user4
365
- memberUid: user5
366
-
367
- # missing members
368
-
369
- dn: cn=missing-users,ou=Groups,dc=example,dc=org
370
- cn: missing-users
371
- objectClass: groupOfNames
372
- member: uid=user1,ou=People,dc=example,dc=org
373
- member: uid=user2,ou=People,dc=example,dc=org
374
- member: uid=nonexistent-user,ou=People,dc=example,dc=org
@@ -1,26 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- class TestAddIntegration < LDAPIntegrationTestCase
4
- def setup
5
- super
6
- @dn = "uid=added-user1,ou=People,dc=example,dc=org"
7
- end
8
-
9
- def test_add
10
- attrs = {
11
- objectclass: %w(top inetOrgPerson organizationalPerson person),
12
- uid: "added-user1",
13
- cn: "added-user1",
14
- sn: "added-user1",
15
- mail: "added-user1@rubyldap.com",
16
- }
17
-
18
- assert @ldap.add(dn: @dn, attributes: attrs), @ldap.get_operation_result.inspect
19
-
20
- assert result = @ldap.search(base: @dn, scope: Net::LDAP::SearchScope_BaseObject).first
21
- end
22
-
23
- def teardown
24
- @ldap.delete dn: @dn
25
- end
26
- end
@@ -1,30 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- class TestBERIntegration < LDAPIntegrationTestCase
4
- # Test whether the TRUE boolean value is encoded correctly by performing a
5
- # search operation.
6
- def test_true_ber_encoding
7
- # request these attrs to simplify test; use symbols to match Entry#attribute_names
8
- attrs = [:dn, :uid, :cn, :mail]
9
-
10
- assert types_entry = @ldap.search(
11
- base: "dc=example,dc=org",
12
- filter: "(uid=user1)",
13
- size: 1,
14
- attributes: attrs,
15
- attributes_only: true,
16
- ).first
17
-
18
- # matches attributes we requested
19
- assert_equal attrs, types_entry.attribute_names
20
-
21
- # assert values are empty
22
- types_entry.each do |name, values|
23
- next if name == :dn
24
- assert values.empty?
25
- end
26
-
27
- assert_includes Net::LDAP::ResultCodesSearchSuccess,
28
- @ldap.get_operation_result.code, "should be a successful search operation"
29
- end
30
- end
@@ -1,222 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- class TestBindIntegration < LDAPIntegrationTestCase
4
-
5
- INTEGRATION_HOSTNAME = 'ldap.example.org'.freeze
6
-
7
- def test_bind_success
8
- assert @ldap.bind(BIND_CREDS),
9
- @ldap.get_operation_result.inspect
10
- end
11
-
12
- def test_bind_timeout
13
- @ldap.host = "10.255.255.1" # non-routable IP
14
-
15
- error = assert_raise Net::LDAP::Error do
16
- @ldap.bind BIND_CREDS
17
- end
18
- msgs = ['Operation timed out - user specified timeout',
19
- 'Connection timed out - user specified timeout']
20
- assert_send([msgs, :include?, error.message])
21
- end
22
-
23
- def test_bind_anonymous_fail
24
- refute @ldap.bind(BIND_CREDS.merge(password: '')),
25
- @ldap.get_operation_result.inspect
26
-
27
- result = @ldap.get_operation_result
28
- assert_equal Net::LDAP::ResultCodeUnwillingToPerform, result.code
29
- assert_equal Net::LDAP::ResultStrings[Net::LDAP::ResultCodeUnwillingToPerform], result.message
30
- assert_equal "unauthenticated bind (DN with no password) disallowed",
31
- result.error_message
32
- assert_equal "", result.matched_dn
33
- end
34
-
35
- def test_bind_fail
36
- refute @ldap.bind(BIND_CREDS.merge(password: "not my password")),
37
- @ldap.get_operation_result.inspect
38
- end
39
-
40
- def test_bind_tls_with_cafile
41
- @ldap.host = INTEGRATION_HOSTNAME
42
- @ldap.encryption(
43
- method: :start_tls,
44
- tls_options: TLS_OPTS.merge(ca_file: CA_FILE),
45
- )
46
- assert @ldap.bind(BIND_CREDS),
47
- @ldap.get_operation_result.inspect
48
- end
49
-
50
- def test_bind_tls_with_bad_hostname_verify_none_no_ca_passes
51
- @ldap.host = INTEGRATION_HOSTNAME
52
- @ldap.encryption(
53
- method: :start_tls,
54
- tls_options: { verify_mode: OpenSSL::SSL::VERIFY_NONE },
55
- )
56
- assert @ldap.bind(BIND_CREDS),
57
- @ldap.get_operation_result.inspect
58
- end
59
-
60
- def test_bind_tls_with_bad_hostname_verify_none_no_ca_opt_merge_passes
61
- @ldap.host = '127.0.0.1'
62
- @ldap.encryption(
63
- method: :start_tls,
64
- tls_options: TLS_OPTS.merge(verify_mode: OpenSSL::SSL::VERIFY_NONE),
65
- )
66
- assert @ldap.bind(BIND_CREDS),
67
- @ldap.get_operation_result.inspect
68
- end
69
-
70
- def test_bind_tls_with_bad_hostname_verify_peer_ca_fails
71
- @ldap.host = '127.0.0.1'
72
- @ldap.encryption(
73
- method: :start_tls,
74
- tls_options: { verify_mode: OpenSSL::SSL::VERIFY_PEER,
75
- ca_file: CA_FILE },
76
- )
77
- error = assert_raise Net::LDAP::Error,
78
- Net::LDAP::ConnectionRefusedError do
79
- @ldap.bind BIND_CREDS
80
- end
81
- assert_equal(
82
- "hostname \"#{@ldap.host}\" does not match the server certificate",
83
- error.message,
84
- )
85
- end
86
-
87
- def test_bind_tls_with_bad_hostname_ca_default_opt_merge_fails
88
- @ldap.host = '127.0.0.1'
89
- @ldap.encryption(
90
- method: :start_tls,
91
- tls_options: TLS_OPTS.merge(ca_file: CA_FILE),
92
- )
93
- error = assert_raise Net::LDAP::Error,
94
- Net::LDAP::ConnectionRefusedError do
95
- @ldap.bind BIND_CREDS
96
- end
97
- assert_equal(
98
- "hostname \"#{@ldap.host}\" does not match the server certificate",
99
- error.message,
100
- )
101
- end
102
-
103
- def test_bind_tls_with_bad_hostname_ca_no_opt_merge_fails
104
- @ldap.host = '127.0.0.1'
105
- @ldap.encryption(
106
- method: :start_tls,
107
- tls_options: { ca_file: CA_FILE },
108
- )
109
- error = assert_raise Net::LDAP::Error,
110
- Net::LDAP::ConnectionRefusedError do
111
- @ldap.bind BIND_CREDS
112
- end
113
- assert_equal(
114
- "hostname \"#{@ldap.host}\" does not match the server certificate",
115
- error.message,
116
- )
117
- end
118
-
119
- def test_bind_tls_with_valid_hostname_default_opts_passes
120
- @ldap.host = INTEGRATION_HOSTNAME
121
- @ldap.encryption(
122
- method: :start_tls,
123
- tls_options: TLS_OPTS.merge(verify_mode: OpenSSL::SSL::VERIFY_PEER,
124
- ca_file: CA_FILE),
125
- )
126
- assert @ldap.bind(BIND_CREDS),
127
- @ldap.get_operation_result.inspect
128
- end
129
-
130
- def test_bind_tls_with_valid_hostname_just_verify_peer_ca_passes
131
- @ldap.host = INTEGRATION_HOSTNAME
132
- @ldap.encryption(
133
- method: :start_tls,
134
- tls_options: { verify_mode: OpenSSL::SSL::VERIFY_PEER,
135
- ca_file: CA_FILE },
136
- )
137
- assert @ldap.bind(BIND_CREDS),
138
- @ldap.get_operation_result.inspect
139
- end
140
-
141
- def test_bind_tls_with_bogus_hostname_system_ca_fails
142
- @ldap.host = '127.0.0.1'
143
- @ldap.encryption(method: :start_tls, tls_options: {})
144
- error = assert_raise Net::LDAP::Error,
145
- Net::LDAP::ConnectionRefusedError do
146
- @ldap.bind BIND_CREDS
147
- end
148
- assert_equal(
149
- "hostname \"#{@ldap.host}\" does not match the server certificate",
150
- error.message,
151
- )
152
- end
153
-
154
- def test_bind_tls_with_multiple_hosts
155
- @ldap.host = nil
156
- @ldap.hosts = [[INTEGRATION_HOSTNAME, 389], [INTEGRATION_HOSTNAME, 389]]
157
- @ldap.encryption(
158
- method: :start_tls,
159
- tls_options: TLS_OPTS.merge(verify_mode: OpenSSL::SSL::VERIFY_PEER,
160
- ca_file: CA_FILE),
161
- )
162
- assert @ldap.bind(BIND_CREDS),
163
- @ldap.get_operation_result.inspect
164
- end
165
-
166
- def test_bind_tls_with_multiple_bogus_hosts
167
- @ldap.host = nil
168
- @ldap.hosts = [['127.0.0.1', 389], ['bogus.example.com', 389]]
169
- @ldap.encryption(
170
- method: :start_tls,
171
- tls_options: TLS_OPTS.merge(verify_mode: OpenSSL::SSL::VERIFY_PEER,
172
- ca_file: CA_FILE),
173
- )
174
- error = assert_raise Net::LDAP::Error,
175
- Net::LDAP::ConnectionError do
176
- @ldap.bind BIND_CREDS
177
- end
178
- assert_equal("Unable to connect to any given server: ",
179
- error.message.split("\n").shift)
180
- end
181
-
182
- def test_bind_tls_with_multiple_bogus_hosts_no_verification
183
- @ldap.host = nil
184
- @ldap.hosts = [['127.0.0.1', 389], ['bogus.example.com', 389]]
185
- @ldap.encryption(
186
- method: :start_tls,
187
- tls_options: TLS_OPTS.merge(verify_mode: OpenSSL::SSL::VERIFY_NONE),
188
- )
189
- assert @ldap.bind(BIND_CREDS),
190
- @ldap.get_operation_result.inspect
191
- end
192
-
193
- def test_bind_tls_with_multiple_bogus_hosts_ca_check_only_fails
194
- @ldap.host = nil
195
- @ldap.hosts = [['127.0.0.1', 389], ['bogus.example.com', 389]]
196
- @ldap.encryption(
197
- method: :start_tls,
198
- tls_options: { ca_file: CA_FILE },
199
- )
200
- error = assert_raise Net::LDAP::Error,
201
- Net::LDAP::ConnectionError do
202
- @ldap.bind BIND_CREDS
203
- end
204
- assert_equal("Unable to connect to any given server: ",
205
- error.message.split("\n").shift)
206
- end
207
-
208
- # This test is CI-only because we can't add the fixture CA
209
- # to the system CA store on people's dev boxes.
210
- def test_bind_tls_valid_hostname_system_ca_on_travis_passes
211
- omit "not sure how to install custom CA cert in travis"
212
- omit_unless ENV['TRAVIS'] == 'true'
213
-
214
- @ldap.host = INTEGRATION_HOSTNAME
215
- @ldap.encryption(
216
- method: :start_tls,
217
- tls_options: { verify_mode: OpenSSL::SSL::VERIFY_PEER },
218
- )
219
- assert @ldap.bind(BIND_CREDS),
220
- @ldap.get_operation_result.inspect
221
- end
222
- end
@@ -1,29 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- class TestDeleteIntegration < LDAPIntegrationTestCase
4
- def setup
5
- super
6
- @dn = "uid=delete-user1,ou=People,dc=example,dc=org"
7
-
8
- attrs = {
9
- objectclass: %w(top inetOrgPerson organizationalPerson person),
10
- uid: "delete-user1",
11
- cn: "delete-user1",
12
- sn: "delete-user1",
13
- mail: "delete-user1@rubyldap.com",
14
- }
15
- unless @ldap.search(base: @dn, scope: Net::LDAP::SearchScope_BaseObject)
16
- assert @ldap.add(dn: @dn, attributes: attrs), @ldap.get_operation_result.inspect
17
- end
18
- assert @ldap.search(base: @dn, scope: Net::LDAP::SearchScope_BaseObject)
19
- end
20
-
21
- def test_delete
22
- assert @ldap.delete(dn: @dn), @ldap.get_operation_result.inspect
23
- refute @ldap.search(base: @dn, scope: Net::LDAP::SearchScope_BaseObject)
24
-
25
- result = @ldap.get_operation_result
26
- assert_equal Net::LDAP::ResultCodeNoSuchObject, result.code
27
- assert_equal Net::LDAP::ResultStrings[Net::LDAP::ResultCodeNoSuchObject], result.message
28
- end
29
- end