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.
- checksums.yaml +4 -4
- data/History.rdoc +59 -0
- data/README.rdoc +10 -3
- data/lib/net/ber/core_ext.rb +6 -6
- data/lib/net/ber.rb +2 -2
- 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 +22 -14
- data/lib/net/ldap/dataset.rb +1 -3
- data/lib/net/ldap/dn.rb +19 -27
- data/lib/net/ldap/entry.rb +11 -2
- data/lib/net/ldap/error.rb +2 -26
- data/lib/net/ldap/filter.rb +3 -3
- data/lib/net/ldap/instrumentation.rb +2 -2
- data/lib/net/ldap/password.rb +7 -5
- data/lib/net/ldap/pdu.rb +1 -1
- data/lib/net/ldap/version.rb +1 -1
- data/lib/net/ldap.rb +41 -16
- data/lib/net/snmp.rb +1 -1
- data/lib/net-ldap.rb +1 -1
- metadata +16 -92
- data/.gitignore +0 -10
- data/.rubocop.yml +0 -20
- data/.rubocop_todo.yml +0 -753
- data/.travis.yml +0 -55
- data/CONTRIBUTING.md +0 -54
- data/Gemfile +0 -2
- data/Rakefile +0 -23
- data/net-ldap.gemspec +0 -37
- data/script/changelog +0 -47
- data/script/ldap-docker +0 -12
- data/script/package +0 -7
- data/script/release +0 -16
- data/test/ber/core_ext/test_array.rb +0 -22
- data/test/ber/core_ext/test_string.rb +0 -25
- data/test/ber/test_ber.rb +0 -153
- data/test/fixtures/ca/docker-ca.pem +0 -18
- data/test/fixtures/ldif/06-retcode.ldif +0 -75
- data/test/fixtures/ldif/50-seed.ldif +0 -374
- data/test/integration/test_add.rb +0 -26
- data/test/integration/test_ber.rb +0 -30
- data/test/integration/test_bind.rb +0 -222
- data/test/integration/test_delete.rb +0 -29
- data/test/integration/test_open.rb +0 -87
- data/test/integration/test_password_modify.rb +0 -93
- data/test/integration/test_return_codes.rb +0 -46
- data/test/integration/test_search.rb +0 -77
- data/test/support/vm/openldap/.gitignore +0 -1
- data/test/test_auth_adapter.rb +0 -15
- data/test/test_dn.rb +0 -44
- data/test/test_entry.rb +0 -65
- data/test/test_filter.rb +0 -223
- data/test/test_filter_parser.rb +0 -24
- data/test/test_helper.rb +0 -73
- data/test/test_ldap.rb +0 -114
- data/test/test_ldap_connection.rb +0 -491
- data/test/test_ldif.rb +0 -104
- data/test/test_password.rb +0 -10
- data/test/test_rename.rb +0 -77
- data/test/test_search.rb +0 -39
- data/test/test_snmp.rb +0 -119
- data/test/test_ssl_ber.rb +0 -40
- data/test/testdata.ldif +0 -101
- data/testserver/ldapserver.rb +0 -209
- 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
|