net-ldap 0.16.3 → 0.17.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/History.rdoc +46 -0
  3. data/README.rdoc +10 -3
  4. data/lib/net/ldap/connection.rb +3 -2
  5. data/lib/net/ldap/dataset.rb +0 -2
  6. data/lib/net/ldap/entry.rb +11 -2
  7. data/lib/net/ldap/error.rb +1 -26
  8. data/lib/net/ldap/password.rb +4 -0
  9. data/lib/net/ldap/version.rb +1 -1
  10. data/lib/net/ldap.rb +26 -3
  11. metadata +12 -88
  12. data/.gitignore +0 -10
  13. data/.rubocop.yml +0 -20
  14. data/.rubocop_todo.yml +0 -723
  15. data/.travis.yml +0 -57
  16. data/CONTRIBUTING.md +0 -54
  17. data/Gemfile +0 -2
  18. data/Rakefile +0 -23
  19. data/net-ldap.gemspec +0 -37
  20. data/script/changelog +0 -47
  21. data/script/ldap-docker +0 -12
  22. data/script/package +0 -7
  23. data/script/release +0 -16
  24. data/test/ber/core_ext/test_array.rb +0 -22
  25. data/test/ber/core_ext/test_string.rb +0 -25
  26. data/test/ber/test_ber.rb +0 -153
  27. data/test/fixtures/ca/docker-ca.pem +0 -18
  28. data/test/fixtures/ldif/06-retcode.ldif +0 -75
  29. data/test/fixtures/ldif/50-seed.ldif +0 -374
  30. data/test/integration/test_add.rb +0 -26
  31. data/test/integration/test_ber.rb +0 -30
  32. data/test/integration/test_bind.rb +0 -221
  33. data/test/integration/test_delete.rb +0 -29
  34. data/test/integration/test_open.rb +0 -87
  35. data/test/integration/test_password_modify.rb +0 -93
  36. data/test/integration/test_return_codes.rb +0 -46
  37. data/test/integration/test_search.rb +0 -77
  38. data/test/support/vm/openldap/.gitignore +0 -1
  39. data/test/test_auth_adapter.rb +0 -15
  40. data/test/test_dn.rb +0 -43
  41. data/test/test_entry.rb +0 -66
  42. data/test/test_filter.rb +0 -223
  43. data/test/test_filter_parser.rb +0 -29
  44. data/test/test_helper.rb +0 -73
  45. data/test/test_ldap.rb +0 -114
  46. data/test/test_ldap_connection.rb +0 -505
  47. data/test/test_ldif.rb +0 -104
  48. data/test/test_password.rb +0 -10
  49. data/test/test_rename.rb +0 -77
  50. data/test/test_search.rb +0 -39
  51. data/test/test_snmp.rb +0 -118
  52. data/test/test_ssl_ber.rb +0 -44
  53. data/test/testdata.ldif +0 -101
  54. data/testserver/ldapserver.rb +0 -200
  55. 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,221 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- class TestBindIntegration < LDAPIntegrationTestCase
4
- INTEGRATION_HOSTNAME = 'ldap.example.org'.freeze
5
-
6
- def test_bind_success
7
- assert @ldap.bind(BIND_CREDS),
8
- @ldap.get_operation_result.inspect
9
- end
10
-
11
- def test_bind_timeout
12
- @ldap.host = "10.255.255.1" # non-routable IP
13
-
14
- error = assert_raise Net::LDAP::Error do
15
- @ldap.bind BIND_CREDS
16
- end
17
- msgs = ['Operation timed out - user specified timeout',
18
- 'Connection timed out - user specified timeout']
19
- assert_send([msgs, :include?, error.message])
20
- end
21
-
22
- def test_bind_anonymous_fail
23
- refute @ldap.bind(BIND_CREDS.merge(password: '')),
24
- @ldap.get_operation_result.inspect
25
-
26
- result = @ldap.get_operation_result
27
- assert_equal Net::LDAP::ResultCodeUnwillingToPerform, result.code
28
- assert_equal Net::LDAP::ResultStrings[Net::LDAP::ResultCodeUnwillingToPerform], result.message
29
- assert_equal "unauthenticated bind (DN with no password) disallowed",
30
- result.error_message
31
- assert_equal "", result.matched_dn
32
- end
33
-
34
- def test_bind_fail
35
- refute @ldap.bind(BIND_CREDS.merge(password: "not my password")),
36
- @ldap.get_operation_result.inspect
37
- end
38
-
39
- def test_bind_tls_with_cafile
40
- @ldap.host = INTEGRATION_HOSTNAME
41
- @ldap.encryption(
42
- method: :start_tls,
43
- tls_options: TLS_OPTS.merge(ca_file: CA_FILE),
44
- )
45
- assert @ldap.bind(BIND_CREDS),
46
- @ldap.get_operation_result.inspect
47
- end
48
-
49
- def test_bind_tls_with_bad_hostname_verify_none_no_ca_passes
50
- @ldap.host = INTEGRATION_HOSTNAME
51
- @ldap.encryption(
52
- method: :start_tls,
53
- tls_options: { verify_mode: OpenSSL::SSL::VERIFY_NONE },
54
- )
55
- assert @ldap.bind(BIND_CREDS),
56
- @ldap.get_operation_result.inspect
57
- end
58
-
59
- def test_bind_tls_with_bad_hostname_verify_none_no_ca_opt_merge_passes
60
- @ldap.host = '127.0.0.1'
61
- @ldap.encryption(
62
- method: :start_tls,
63
- tls_options: TLS_OPTS.merge(verify_mode: OpenSSL::SSL::VERIFY_NONE),
64
- )
65
- assert @ldap.bind(BIND_CREDS),
66
- @ldap.get_operation_result.inspect
67
- end
68
-
69
- def test_bind_tls_with_bad_hostname_verify_peer_ca_fails
70
- @ldap.host = '127.0.0.1'
71
- @ldap.encryption(
72
- method: :start_tls,
73
- tls_options: { verify_mode: OpenSSL::SSL::VERIFY_PEER,
74
- ca_file: CA_FILE },
75
- )
76
- error = assert_raise Net::LDAP::Error,
77
- Net::LDAP::ConnectionRefusedError do
78
- @ldap.bind BIND_CREDS
79
- end
80
- assert_equal(
81
- "hostname \"#{@ldap.host}\" does not match the server certificate",
82
- error.message,
83
- )
84
- end
85
-
86
- def test_bind_tls_with_bad_hostname_ca_default_opt_merge_fails
87
- @ldap.host = '127.0.0.1'
88
- @ldap.encryption(
89
- method: :start_tls,
90
- tls_options: TLS_OPTS.merge(ca_file: CA_FILE),
91
- )
92
- error = assert_raise Net::LDAP::Error,
93
- Net::LDAP::ConnectionRefusedError do
94
- @ldap.bind BIND_CREDS
95
- end
96
- assert_equal(
97
- "hostname \"#{@ldap.host}\" does not match the server certificate",
98
- error.message,
99
- )
100
- end
101
-
102
- def test_bind_tls_with_bad_hostname_ca_no_opt_merge_fails
103
- @ldap.host = '127.0.0.1'
104
- @ldap.encryption(
105
- method: :start_tls,
106
- tls_options: { ca_file: CA_FILE },
107
- )
108
- error = assert_raise Net::LDAP::Error,
109
- Net::LDAP::ConnectionRefusedError do
110
- @ldap.bind BIND_CREDS
111
- end
112
- assert_equal(
113
- "hostname \"#{@ldap.host}\" does not match the server certificate",
114
- error.message,
115
- )
116
- end
117
-
118
- def test_bind_tls_with_valid_hostname_default_opts_passes
119
- @ldap.host = INTEGRATION_HOSTNAME
120
- @ldap.encryption(
121
- method: :start_tls,
122
- tls_options: TLS_OPTS.merge(verify_mode: OpenSSL::SSL::VERIFY_PEER,
123
- ca_file: CA_FILE),
124
- )
125
- assert @ldap.bind(BIND_CREDS),
126
- @ldap.get_operation_result.inspect
127
- end
128
-
129
- def test_bind_tls_with_valid_hostname_just_verify_peer_ca_passes
130
- @ldap.host = INTEGRATION_HOSTNAME
131
- @ldap.encryption(
132
- method: :start_tls,
133
- tls_options: { verify_mode: OpenSSL::SSL::VERIFY_PEER,
134
- ca_file: CA_FILE },
135
- )
136
- assert @ldap.bind(BIND_CREDS),
137
- @ldap.get_operation_result.inspect
138
- end
139
-
140
- def test_bind_tls_with_bogus_hostname_system_ca_fails
141
- @ldap.host = '127.0.0.1'
142
- @ldap.encryption(method: :start_tls, tls_options: {})
143
- error = assert_raise Net::LDAP::Error,
144
- Net::LDAP::ConnectionRefusedError do
145
- @ldap.bind BIND_CREDS
146
- end
147
- assert_equal(
148
- "hostname \"#{@ldap.host}\" does not match the server certificate",
149
- error.message,
150
- )
151
- end
152
-
153
- def test_bind_tls_with_multiple_hosts
154
- @ldap.host = nil
155
- @ldap.hosts = [[INTEGRATION_HOSTNAME, 389], [INTEGRATION_HOSTNAME, 389]]
156
- @ldap.encryption(
157
- method: :start_tls,
158
- tls_options: TLS_OPTS.merge(verify_mode: OpenSSL::SSL::VERIFY_PEER,
159
- ca_file: CA_FILE),
160
- )
161
- assert @ldap.bind(BIND_CREDS),
162
- @ldap.get_operation_result.inspect
163
- end
164
-
165
- def test_bind_tls_with_multiple_bogus_hosts
166
- @ldap.host = nil
167
- @ldap.hosts = [['127.0.0.1', 389], ['bogus.example.com', 389]]
168
- @ldap.encryption(
169
- method: :start_tls,
170
- tls_options: TLS_OPTS.merge(verify_mode: OpenSSL::SSL::VERIFY_PEER,
171
- ca_file: CA_FILE),
172
- )
173
- error = assert_raise Net::LDAP::Error,
174
- Net::LDAP::ConnectionError do
175
- @ldap.bind BIND_CREDS
176
- end
177
- assert_equal("Unable to connect to any given server: ",
178
- error.message.split("\n").shift)
179
- end
180
-
181
- def test_bind_tls_with_multiple_bogus_hosts_no_verification
182
- @ldap.host = nil
183
- @ldap.hosts = [['127.0.0.1', 389], ['bogus.example.com', 389]]
184
- @ldap.encryption(
185
- method: :start_tls,
186
- tls_options: TLS_OPTS.merge(verify_mode: OpenSSL::SSL::VERIFY_NONE),
187
- )
188
- assert @ldap.bind(BIND_CREDS),
189
- @ldap.get_operation_result.inspect
190
- end
191
-
192
- def test_bind_tls_with_multiple_bogus_hosts_ca_check_only_fails
193
- @ldap.host = nil
194
- @ldap.hosts = [['127.0.0.1', 389], ['bogus.example.com', 389]]
195
- @ldap.encryption(
196
- method: :start_tls,
197
- tls_options: { ca_file: CA_FILE },
198
- )
199
- error = assert_raise Net::LDAP::Error,
200
- Net::LDAP::ConnectionError do
201
- @ldap.bind BIND_CREDS
202
- end
203
- assert_equal("Unable to connect to any given server: ",
204
- error.message.split("\n").shift)
205
- end
206
-
207
- # This test is CI-only because we can't add the fixture CA
208
- # to the system CA store on people's dev boxes.
209
- def test_bind_tls_valid_hostname_system_ca_on_travis_passes
210
- omit "not sure how to install custom CA cert in travis"
211
- omit_unless ENV['TRAVIS'] == 'true'
212
-
213
- @ldap.host = INTEGRATION_HOSTNAME
214
- @ldap.encryption(
215
- method: :start_tls,
216
- tls_options: { verify_mode: OpenSSL::SSL::VERIFY_PEER },
217
- )
218
- assert @ldap.bind(BIND_CREDS),
219
- @ldap.get_operation_result.inspect
220
- end
221
- 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