2 exec smbscript "$0" ${1+"$@"}
4 test certin LDAP behaviours
8 var gc_ldb = ldb_init();
10 var options = GetOptions(ARGV,
13 "POPT_COMMON_CREDENTIALS");
14 if (options == undefined) {
15 println("Failed to parse options");
19 libinclude("base.js");
21 if (options.ARGV.length != 1) {
22 println("Usage: ldap.js <HOST>");
26 var host = options.ARGV[0];
28 function basic_tests(ldb, gc_ldb, base_dn, configuration_dn, schema_dn)
30 println("Running basic tests");
32 ldb.del("cn=ldaptestuser,cn=users," + base_dn);
34 ldb.del("cn=ldaptestgroup,cn=users," + base_dn);
36 println("Testing group add with invalid member");
38 dn: cn=ldaptestgroup,cn=uSers," + base_dn + "
40 member: cn=ldaptestuser,cn=useRs," + base_dn + "
43 if (ok.error != 32) { /* LDAP_NO_SUCH_OBJECT */
45 assert(ok.error == 32);
48 println("Testing user add");
50 dn: cn=ldaptestuser,cn=uSers," + base_dn + "
58 ok = ldb.del("cn=ldaptestuser,cn=users," + base_dn);
61 assert(ok.error == 0);
64 dn: cn=ldaptestuser,cn=uSers," + base_dn + "
73 assert(ok.error == 0);
78 dn: cn=ldaptestgroup,cn=uSers," + base_dn + "
80 member: cn=ldaptestuser,cn=useRs," + base_dn + "
84 assert(ok.error == 0);
88 dn: cn=ldaptestcomputer,cn=computers," + base_dn + "
93 ok = ldb.del("cn=ldaptestcomputer,cn=computers," + base_dn);
96 assert(ok.error == 0);
99 dn: cn=ldaptestcomputer,cn=computers," + base_dn + "
100 objectClass: computer
105 assert(ok.error == 0);
111 assert(ok.error == 0);
115 dn: cn=ldaptest2computer,cn=computers," + base_dn + "
116 objectClass: computer
117 cn: LDAPtest2COMPUTER
118 userAccountControl: 4096
119 displayname: ldap testy
122 ok = ldb.del("cn=ldaptest2computer,cn=computers," + base_dn);
125 assert(ok.error == 0);
128 dn: cn=ldaptest2computer,cn=computers," + base_dn + "
129 objectClass: computer
130 cn: LDAPtest2COMPUTER
131 userAccountControl: 4096
132 displayname: ldap testy
136 assert(ok.error == 0);
140 println("Testing attribute or value exists behaviour");
142 dn: cn=ldaptest2computer,cn=computers," + base_dn + "
144 replace: servicePrincipalName
145 servicePrincipalName: host/ldaptest2computer
146 servicePrincipalName: host/ldaptest2computer
147 servicePrincipalName: cifs/ldaptest2computer
150 //LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS
151 if (ok.error != 20) {
152 println("Expected error LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS, got :" + ok.errstr);
153 assert(ok.error == 20);
157 dn: cn=ldaptest2computer,cn=computers," + base_dn + "
159 replace: servicePrincipalName
160 servicePrincipalName: host/ldaptest2computer
161 servicePrincipalName: cifs/ldaptest2computer
165 println("Failed to replace servicePrincpalName:" + ok.errstr);
166 assert(ok.error == 20);
170 dn: cn=ldaptest2computer,cn=computers," + base_dn + "
172 add: servicePrincipalName
173 servicePrincipalName: host/ldaptest2computer
176 //LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS
177 if (ok.error != 20) {
178 println("Expected error LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS, got :" + ok.errstr);
179 assert(ok.error == 20);
183 dn: cn=ldaptestuser2,cn=useRs," + base_dn + "
191 ok = ldb.del("cn=ldaptestuser2,cn=users," + base_dn);
194 assert(ok.error == 0);
197 dn: cn=ldaptestuser2,cn=useRs," + base_dn + "
206 assert(ok.error == 0);
211 println("Testing Ambigious Name Resolution");
212 // Testing ldb.search for (&(anr=ldap testy)(objectClass=user))
213 var res = ldb.search("(&(anr=ldap testy)(objectClass=user))");
214 if (res.error != 0 || res.msgs.length != 3) {
215 println("Could not find (&(anr=ldap testy)(objectClass=user))");
216 assert(res.error == 0);
217 assert(res.msgs.length == 3);
220 // Testing ldb.search for (&(anr=testy ldap)(objectClass=user))
221 var res = ldb.search("(&(anr=testy ldap)(objectClass=user))");
222 if (res.error != 0 || res.msgs.length != 2) {
223 println("Found only " + res.msgs.length + " for (&(anr=testy ldap)(objectClass=user))");
224 assert(res.error == 0);
225 assert(res.msgs.length == 2);
228 // Testing ldb.search for (&(anr=ldap)(objectClass=user))
229 var res = ldb.search("(&(anr=ldap)(objectClass=user))");
230 if (res.error != 0 || res.msgs.length != 4) {
231 println("Found only " + res.msgs.length + " for (&(anr=ldap)(objectClass=user))");
232 assert(res.error == 0);
233 assert(res.msgs.length == 4);
236 // Testing ldb.search for (&(anr==ldap)(objectClass=user))
237 var res = ldb.search("(&(anr==ldap)(objectClass=user))");
238 if (res.error != 0 || res.msgs.length != 1) {
239 println("Found only " + res.msgs.length + " for (&(anr=ldap)(objectClass=user))");
240 println("Could not find (&(anr==ldap)(objectClass=user))");
241 assert(res.error == 0);
242 assert(res.msgs.length == 1);
245 assert(res.msgs[0].dn == ("CN=ldaptestuser,CN=Users," + base_dn));
246 assert(res.msgs[0].cn == "ldaptestuser");
247 assert(res.msgs[0].name == "ldaptestuser");
249 // Testing ldb.search for (&(anr=testy)(objectClass=user))
250 var res = ldb.search("(&(anr=testy)(objectClass=user))");
251 if (res.error != 0 || res.msgs.length != 2) {
252 println("Found only " + res.msgs.length + " for (&(anr=testy)(objectClass=user))");
253 assert(res.error == 0);
254 assert(res.msgs.length == 2);
257 // Testing ldb.search for (&(anr=ldap testy)(objectClass=user))
258 var res = ldb.search("(&(anr=testy ldap)(objectClass=user))");
259 if (res.error != 0 || res.msgs.length != 2) {
260 println("Found only " + res.msgs.length + " for (&(anr=ldap testy)(objectClass=user))");
261 assert(res.error == 0);
262 assert(res.msgs.length == 2);
265 // Testing ldb.search for (&(anr==ldap testy)(objectClass=user))
266 var res = ldb.search("(&(anr==testy ldap)(objectClass=user))");
267 if (res.error != 0 || res.msgs.length != 1) {
268 println("Found only " + res.msgs.length + " for (&(anr==ldap testy)(objectClass=user))");
269 assert(res.error == 0);
270 assert(res.msgs.length == 1);
273 assert(res.msgs[0].dn == ("CN=ldaptestuser,CN=Users," + base_dn));
274 assert(res.msgs[0].cn == "ldaptestuser");
275 assert(res.msgs[0].name == "ldaptestuser");
277 // Testing ldb.search for (&(anr==testy ldap)(objectClass=user))
278 var res = ldb.search("(&(anr==testy ldap)(objectClass=user))");
279 if (res.error != 0 || res.msgs.length != 1) {
280 println("Could not find (&(anr==testy ldap)(objectClass=user))");
281 assert(res.error == 0);
282 assert(res.msgs.length == 1);
285 assert(res.msgs[0].dn == ("CN=ldaptestuser,CN=Users," + base_dn));
286 assert(res.msgs[0].cn == "ldaptestuser");
287 assert(res.msgs[0].name == "ldaptestuser");
289 // Testing ldb.search for (&(anr=testy ldap user)(objectClass=user))
290 var res = ldb.search("(&(anr=testy ldap user)(objectClass=user))");
291 if (res.error != 0 || res.msgs.length != 1) {
292 println("Could not find (&(anr=testy ldap user)(objectClass=user))");
293 assert(res.error == 0);
294 assert(res.msgs.length == 1);
297 assert(res.msgs[0].dn == ("CN=ldaptestuser2,CN=Users," + base_dn));
298 assert(res.msgs[0].cn == "ldaptestuser2");
299 assert(res.msgs[0].name == "ldaptestuser2");
301 // Testing ldb.search for (&(anr==testy ldap user2)(objectClass=user))
302 var res = ldb.search("(&(anr==testy ldap user2)(objectClass=user))");
303 if (res.error != 0 || res.msgs.length != 1) {
304 println("Could not find (&(anr==testy ldap user2)(objectClass=user))");
305 assert(res.error == 0);
306 assert(res.msgs.length == 1);
309 assert(res.msgs[0].dn == ("CN=ldaptestuser2,CN=Users," + base_dn));
310 assert(res.msgs[0].cn == "ldaptestuser2");
311 assert(res.msgs[0].name == "ldaptestuser2");
313 // Testing ldb.search for (&(anr==ldap user2)(objectClass=user))
314 var res = ldb.search("(&(anr==ldap user2)(objectClass=user))");
315 if (res.error != 0 || res.msgs.length != 1) {
316 println("Could not find (&(anr==ldap user2)(objectClass=user))");
317 assert(res.error == 0);
318 assert(res.msgs.length == 1);
321 assert(res.msgs[0].dn == ("CN=ldaptestuser2,CN=Users," + base_dn));
322 assert(res.msgs[0].cn == "ldaptestuser2");
323 assert(res.msgs[0].name == "ldaptestuser2");
325 // Testing ldb.search for (&(anr==not ldap user2)(objectClass=user))
326 var res = ldb.search("(&(anr==not ldap user2)(objectClass=user))");
327 if (res.error != 0 || res.msgs.length != 0) {
328 println("Must not find (&(anr==not ldap user2)(objectClass=user))");
329 assert(res.error == 0);
330 assert(res.msgs.length == 0);
333 // Testing ldb.search for (&(anr=not ldap user2)(objectClass=user))
334 var res = ldb.search("(&(anr=not ldap user2)(objectClass=user))");
335 if (res.error != 0 || res.msgs.length != 0) {
336 println("Must not find (&(anr=not ldap user2)(objectClass=user))");
337 assert(res.error == 0);
338 assert(res.msgs.length == 0);
341 println("Testing Group Modifies");
343 dn: cn=ldaptestgroup,cn=users," + base_dn + "
346 member: cn=ldaptestuser2,cn=users," + base_dn + "
347 member: cn=ldaptestcomputer,cn=computers," + base_dn + "
352 assert(ok.error == 0);
355 ok = ldb.del("cn=ldaptestuser3,cn=users," + base_dn);
357 println("Testing adding non-existent user to a group");
359 dn: cn=ldaptestgroup,cn=users," + base_dn + "
362 member: cn=ldaptestuser3,cn=users," + base_dn + "
364 if (ok.error != 32) { /* LDAP_NO_SUCH_OBJECT */
366 assert(ok.error == 32);
369 println("Testing Renames");
371 ok = ldb.rename("cn=ldaptestuser2,cn=users," + base_dn, "cn=ldaptestuser3,cn=users," + base_dn);
373 println("Could not rename cn=ldaptestuser2,cn=users," + base_dn + " into cn=ldaptestuser3,cn=users," + base_dn + ": " + ok.errstr);
374 assert(ok.error == 0);
377 ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser3,cn=users," + base_dn);
379 println("Could not rename cn=ldaptestuser3,cn=users," + base_dn + " onto itself: " + ok.errstr);
380 assert(ok.error == 0);
383 ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestUSER3,cn=users," + base_dn);
385 println("Could not rename cn=ldaptestuser3,cn=users," + base_dn + " into cn=ldaptestUSER3,cn=users," + base_dn + ": " + ok.errstr);
386 assert(ok.error == 0);
389 println("Testing ldb.search for (&(cn=ldaptestuser3)(objectClass=user))");
390 var res = ldb.search("(&(cn=ldaptestuser3)(objectClass=user))");
391 if (res.error != 0 || res.msgs.length != 1) {
392 println("Could not find (&(cn=ldaptestuser3)(objectClass=user))");
393 assert(res.error == 0);
394 assert(res.msgs.length == 1);
397 assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn));
398 assert(res.msgs[0].cn == "ldaptestUSER3");
399 assert(res.msgs[0].name == "ldaptestUSER3");
401 // This is a Samba special, and does not exist in real AD
402 // println("Testing ldb.search for (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")");
403 // var res = ldb.search("(dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")");
404 // if (res.error != 0 || res.msgs.length != 1) {
405 // println("Could not find (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")");
406 // assert(res.error == 0);
407 // assert(res.msgs.length == 1);
409 // assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn));
410 // assert(res.msgs[0].cn == "ldaptestUSER3");
411 // assert(res.msgs[0].name == "ldaptestUSER3");
413 println("Testing ldb.search for (distinguishedName=CN=ldaptestUSER3,CN=Users," + base_dn + ")");
414 var res = ldb.search("(distinguishedName=CN=ldaptestUSER3,CN=Users," + base_dn + ")");
415 if (res.error != 0 || res.msgs.length != 1) {
416 println("Could not find (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")");
417 assert(res.error == 0);
418 assert(res.msgs.length == 1);
420 assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn));
421 assert(res.msgs[0].cn == "ldaptestUSER3");
422 assert(res.msgs[0].name == "ldaptestUSER3");
424 // ensure we cannot add it again
426 dn: cn=ldaptestuser3,cn=userS," + base_dn + "
431 //LDB_ERR_ENTRY_ALREADY_EXISTS
432 if (ok.error != 68) {
433 println("expected error LDB_ERR_ENTRY_ALREADY_EXISTS, got: " + ok.errstr);
434 assert(ok.error == 68);
438 ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser2,cn=users," + base_dn);
441 assert(ok.error == 0);
444 // ensure we cannnot rename it twice
445 ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser2,cn=users," + base_dn);
446 //LDB_ERR_NO_SUCH_OBJECT
447 assert(ok.error == 32);
449 // ensure can now use that name
451 dn: cn=ldaptestuser3,cn=users," + base_dn + "
457 // ensure we now cannnot rename
458 ok = ldb.rename("cn=ldaptestuser2,cn=users," + base_dn, "cn=ldaptestuser3,cn=users," + base_dn);
459 //LDB_ERR_ENTRY_ALREADY_EXISTS
460 if (ok.error != 68) {
461 println("expected error LDB_ERR_ENTRY_ALREADY_EXISTS, got: " + ok.errstr);
462 assert(ok.error == 68);
464 assert(ok.error == 68);
465 ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser3,cn=configuration," + base_dn);
466 if (ok.error != 71 && ok.error != 64) {
467 println("expected error LDB_ERR_ENTRY_ALREADY_EXISTS or LDAP_NAMING_VIOLATION, got: " + ok.errstr);
468 assert(ok.error == 71 || ok.error == 64);
470 assert(ok.error == 71 || ok.error == 64);
472 ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser5,cn=users," + base_dn);
475 assert(ok.error == 0);
478 ok = ldb.del("cn=ldaptestuser5,cn=users," + base_dn);
480 ok = ldb.del("cn=ldaptestgroup2,cn=users," + base_dn);
482 ok = ldb.rename("cn=ldaptestgroup,cn=users," + base_dn, "cn=ldaptestgroup2,cn=users," + base_dn);
485 assert(ok.error == 0);
488 println("Testing subtree Renames");
491 dn: cn=ldaptestcontainer," + base_dn + "
492 objectClass: container
496 dn: CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + "
502 ok = ldb.del("cn=ldaptestuser4,cn=ldaptestcontainer," + base_dn);
505 assert(ok.error == 0);
508 dn: CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + "
515 assert(ok.error == 0);
520 dn: cn=ldaptestgroup2,cn=users," + base_dn + "
523 member: cn=ldaptestuser4,cn=ldaptestcontainer," + base_dn + "
526 println("Failure adding ldaptestuser4 to a group");
528 assert(ok.error == 0);
531 println("Testing ldb.rename of cn=ldaptestcontainer," + base_dn + " to cn=ldaptestcontainer2," + base_dn);
532 ok = ldb.rename("CN=ldaptestcontainer," + base_dn, "CN=ldaptestcontainer2," + base_dn);
535 assert(ok.error == 0);
538 println("Testing ldb.search for (&(cn=ldaptestuser4)(objectClass=user))");
539 var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))");
540 if (res.error != 0 || res.msgs.length != 1) {
541 println("Could not find (&(cn=ldaptestuser4)(objectClass=user))");
542 assert(res.error == 0);
543 assert(res.msgs.length == 1);
546 println("Testing subtree ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in (just renamed from) cn=ldaptestcontainer," + base_dn);
547 var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer," + base_dn, ldb.SCOPE_SUBTREE);
548 if (res.error != 32) {
550 assert(res.error == 32);
553 println("Testing one-level ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in (just renamed from) cn=ldaptestcontainer," + base_dn);
554 var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer," + base_dn, ldb.SCOPE_ONELEVEL);
555 if (res.error != 32) {
557 assert(res.error == 32);
560 println("Testing ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in renamed container");
561 var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer2," + base_dn, ldb.SCOPE_SUBTREE);
562 if (res.error != 0 || res.msgs.length != 1) {
563 println("Could not find (&(cn=ldaptestuser4)(objectClass=user)) under cn=ldaptestcontainer2," + base_dn);
564 assert(res.error == 0);
565 assert(res.msgs.length == 1);
568 assert(res.msgs[0].dn == ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn));
569 assert(strupper(res.msgs[0].memberOf[0]) == strupper(("CN=ldaptestgroup2,CN=Users," + base_dn)));
571 println("Testing ldb.search for (&(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")(objectclass=group)) to check subtree renames and linked attributes");
572 var res = ldb.search("(&(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")(objectclass=group))", base_dn, ldb.SCOPE_SUBTREE);
573 if (res.error != 0 || res.msgs.length != 1) {
574 println("Could not find (&(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")(objectclass=group)), perhaps linked attributes are not conistant with subtree renames?");
575 assert(res.error == 0);
576 assert(res.msgs.length == 1);
579 println("Testing ldb.rename (into itself) of cn=ldaptestcontainer2," + base_dn + " to cn=ldaptestcontainer,cn=ldaptestcontainer2," + base_dn);
580 ok = ldb.rename("cn=ldaptestcontainer2," + base_dn, "cn=ldaptestcontainer,cn=ldaptestcontainer2," + base_dn);
581 if (ok.error != 53) { /* LDAP_UNWILLING_TO_PERFORM */
583 assert(ok.error == 53);
586 println("Testing ldb.rename (into non-existent container) of cn=ldaptestcontainer2," + base_dn + " to cn=ldaptestcontainer,cn=ldaptestcontainer3," + base_dn);
587 ok = ldb.rename("cn=ldaptestcontainer2," + base_dn, "cn=ldaptestcontainer,cn=ldaptestcontainer3," + base_dn);
588 if (ok.error != 53 && ok.error != 80) { /* LDAP_UNWILLING_TO_PERFORM or LDAP_OTHER*/
590 assert(ok.error == 53 || ok.error == 80);
593 println("Testing delete (should fail, not a leaf node) of renamed cn=ldaptestcontainer2," + base_dn);
594 ok = ldb.del("cn=ldaptestcontainer2," + base_dn);
595 if (ok.error != 66) { /* LDB_ERR_NOT_ALLOWED_ON_NON_LEAF */
597 assert(ok.error == 66);
600 println("Testing base ldb.search for CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn);
601 var res = ldb.search("(objectclass=*)", ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn), ldb.SCOPE_BASE);
602 if (res.error == 0 && res.count == 1) {
603 assert(res.error == 0 && res.count == 1);
605 var res = ldb.search("(cn=ldaptestuser40)", ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn), ldb.SCOPE_BASE);
606 if (res.error == 0 && res.count == 0) {
607 assert(res.error == 0 && res.count == 0);
610 println("Testing one-level ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in cn=ldaptestcontainer2," + base_dn);
611 var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer2," + base_dn, ldb.SCOPE_ONELEVEL);
612 if (res.error == 0 && res.count == 0) {
613 assert(res.error == 0 && res.count == 0);
616 println("Testing one-level ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in cn=ldaptestcontainer2," + base_dn);
617 var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer2," + base_dn, ldb.SCOPE_SUBTREE);
618 if (res.error == 0 && res.count == 0) {
619 assert(res.error == 0 && res.count == 0);
622 println("Testing delete of subtree renamed "+("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn));
623 ok = ldb.del(("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn));
626 assert(ok.error == 0);
628 println("Testing delete of renamed cn=ldaptestcontainer2," + base_dn);
629 ok = ldb.del("cn=ldaptestcontainer2," + base_dn);
632 assert(ok.error == 0);
636 dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + "
640 ok = ldb.del("cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn);
643 assert(ok.error == 0);
646 dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + "
651 assert(ok.error == 0);
656 dn: cn=ldaptestutf8user2 èùéìòà ,cn=users," + base_dn + "
660 ok = ldb.del("cn=ldaptestutf8user2 èùéìòà ,cn=users," + base_dn);
663 assert(ok.error == 0);
666 dn: cn=ldaptestutf8user2 èùéìòà ,cn=users," + base_dn + "
671 assert(ok.error == 0);
675 println("Testing ldb.search for (&(cn=ldaptestuser)(objectClass=user))");
676 var res = ldb.search("(&(cn=ldaptestuser)(objectClass=user))");
677 if (res.error != 0 || res.msgs.length != 1) {
678 println("Could not find (&(cn=ldaptestuser)(objectClass=user))");
679 assert(res.error == 0);
680 assert(res.msgs.length == 1);
683 assert(res.msgs[0].dn == ("CN=ldaptestuser,CN=Users," + base_dn));
684 assert(res.msgs[0].cn == "ldaptestuser");
685 assert(res.msgs[0].name == "ldaptestuser");
686 assert(res.msgs[0].objectClass[0] == "top");
687 assert(res.msgs[0].objectClass[1] == "person");
688 assert(res.msgs[0].objectClass[2] == "organizationalPerson");
689 assert(res.msgs[0].objectClass[3] == "user");
690 assert(res.msgs[0].objectGUID != undefined);
691 assert(res.msgs[0].whenCreated != undefined);
692 assert(res.msgs[0].objectCategory == ("CN=Person,CN=Schema,CN=Configuration," + base_dn));
693 assert(res.msgs[0].sAMAccountType == 805306368);
694 // assert(res[0].userAccountControl == 546);
695 assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn));
696 assert(res.msgs[0].memberOf.length == 1);
698 println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))");
699 var res2 = ldb.search("(&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))");
700 if (res2.error != 0 || res2.msgs.length != 1) {
701 println("Could not find (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))");
702 assert(res2.error == 0);
703 assert(res2.msgs.length == 1);
706 assert(res.msgs[0].dn == res2.msgs[0].dn);
708 println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon))");
709 var res3 = ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))");
710 if (res3.error != 0) {
711 println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)): " + res3.errstr);
712 assert(res3.error == 0);
713 } else if (res3.msgs.length != 1) {
714 println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)): matched " + res3.msgs.length);
715 assert(res3.msgs.length == 1);
718 assert(res.msgs[0].dn == res3.msgs[0].dn);
720 if (gc_ldb != undefined) {
721 println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog");
722 var res3gc = gc_ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))");
723 if (res3gc.error != 0) {
724 println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog: " + res3gc.errstr);
725 assert(res3gc.error == 0);
726 } else if (res3gc.msgs.length != 1) {
727 println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog: matched " + res3gc.msgs.length);
728 assert(res3gc.msgs.length == 1);
731 assert(res.msgs[0].dn == res3gc.msgs[0].dn);
734 println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon)) in with 'phantom root' control");
735 var attrs = new Array("cn");
736 var controls = new Array("search_options:1:2");
737 var res3control = gc_ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))", base_dn, ldb.SCOPE_SUBTREE, attrs, controls);
738 if (res3control.error != 0 || res3control.msgs.length != 1) {
739 println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog");
740 assert(res3control.error == 0);
741 assert(res3control.msgs.length == 1);
744 assert(res.msgs[0].dn == res3control.msgs[0].dn);
746 ok = ldb.del(res.msgs[0].dn);
749 assert(ok.error == 0);
752 println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectClass=user))");
753 var res = ldb.search("(&(cn=ldaptestcomputer)(objectClass=user))");
754 if (res.error != 0 || res.msgs.length != 1) {
755 println("Could not find (&(cn=ldaptestuser)(objectClass=user))");
756 assert(res.error == 0);
757 assert(res.msgs.length == 1);
760 assert(res.msgs[0].dn == ("CN=ldaptestcomputer,CN=Computers," + base_dn));
761 assert(res.msgs[0].cn == "ldaptestcomputer");
762 assert(res.msgs[0].name == "ldaptestcomputer");
763 assert(res.msgs[0].objectClass[0] == "top");
764 assert(res.msgs[0].objectClass[1] == "person");
765 assert(res.msgs[0].objectClass[2] == "organizationalPerson");
766 assert(res.msgs[0].objectClass[3] == "user");
767 assert(res.msgs[0].objectClass[4] == "computer");
768 assert(res.msgs[0].objectGUID != undefined);
769 assert(res.msgs[0].whenCreated != undefined);
770 assert(res.msgs[0].objectCategory == ("CN=Computer,CN=Schema,CN=Configuration," + base_dn));
771 assert(res.msgs[0].primaryGroupID == 513);
772 // assert(res.msgs[0].sAMAccountType == 805306368);
773 // assert(res.msgs[0].userAccountControl == 546);
774 assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn));
775 assert(res.msgs[0].memberOf.length == 1);
777 println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))");
778 var res2 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))");
779 if (res2.error != 0 || res2.msgs.length != 1) {
780 println("Could not find (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))");
781 assert(res2.error == 0);
782 assert(res2.msgs.length == 1);
785 assert(res.msgs[0].dn == res2.msgs[0].dn);
787 if (gc_ldb != undefined) {
788 println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + ")) in Global Catlog");
789 var res2gc = gc_ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))");
790 if (res2gc.error != 0 || res2gc.msgs.length != 1) {
791 println("Could not find (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + ")) in Global Catlog");
792 assert(res2gc.error == 0);
793 assert(res2gc.msgs.length == 1);
796 assert(res.msgs[0].dn == res2gc.msgs[0].dn);
799 println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=compuTER))");
800 var res3 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=compuTER))");
801 if (res3.error != 0 || res3.msgs.length != 1) {
802 println("Could not find (&(cn=ldaptestcomputer)(objectCategory=compuTER))");
803 assert(res3.error == 0);
804 assert(res3.msgs.length == 1);
807 assert(res.msgs[0].dn == res3.msgs[0].dn);
809 if (gc_ldb != undefined) {
810 println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=compuTER)) in Global Catalog");
811 var res3gc = gc_ldb.search("(&(cn=ldaptestcomputer)(objectCategory=compuTER))");
812 if (res3gc.error != 0 || res3gc.msgs.length != 1) {
813 println("Could not find (&(cn=ldaptestcomputer)(objectCategory=compuTER)) in Global Catalog");
814 assert(res3gc.error == 0);
815 assert(res3gc.msgs.length == 1);
818 assert(res.msgs[0].dn == res3gc.msgs[0].dn);
821 println("Testing ldb.search for (&(cn=ldaptestcomp*r)(objectCategory=compuTER))");
822 var res4 = ldb.search("(&(cn=ldaptestcomp*r)(objectCategory=compuTER))");
823 if (res4.error != 0 || res4.msgs.length != 1) {
824 println("Could not find (&(cn=ldaptestcomp*r)(objectCategory=compuTER))");
825 assert(res4.error == 0);
826 assert(res4.msgs.length == 1);
829 assert(res.msgs[0].dn == res4.msgs[0].dn);
831 println("Testing ldb.search for (&(cn=ldaptestcomput*)(objectCategory=compuTER))");
832 var res5 = ldb.search("(&(cn=ldaptestcomput*)(objectCategory=compuTER))");
833 if (res5.error != 0 || res5.msgs.length != 1) {
834 println("Could not find (&(cn=ldaptestcomput*)(objectCategory=compuTER))");
835 assert(res5.error == 0);
836 assert(res5.msgs.length == 1);
839 assert(res.msgs[0].dn == res5.msgs[0].dn);
841 println("Testing ldb.search for (&(cn=*daptestcomputer)(objectCategory=compuTER))");
842 var res6 = ldb.search("(&(cn=*daptestcomputer)(objectCategory=compuTER))");
843 if (res6.error != 0 || res6.msgs.length != 1) {
844 println("Could not find (&(cn=*daptestcomputer)(objectCategory=compuTER))");
845 assert(res6.error == 0);
846 assert(res6.msgs.length == 1);
849 assert(res.msgs[0].dn == res6.msgs[0].dn);
851 ok = ldb.del(res.msgs[0].dn);
854 assert(ok.error == 0);
857 println("Testing ldb.search for (&(cn=ldaptest2computer)(objectClass=user))");
858 var res = ldb.search("(&(cn=ldaptest2computer)(objectClass=user))");
859 if (res.error != 0 || res.msgs.length != 1) {
860 println("Could not find (&(cn=ldaptest2computer)(objectClass=user))");
861 assert(res.error == 0);
862 assert(res.msgs.length == 1);
865 assert(res.msgs[0].dn == ("CN=ldaptest2computer,CN=Computers," + base_dn));
866 assert(res.msgs[0].cn == "ldaptest2computer");
867 assert(res.msgs[0].name == "ldaptest2computer");
868 assert(res.msgs[0].objectClass[0] == "top");
869 assert(res.msgs[0].objectClass[1] == "person");
870 assert(res.msgs[0].objectClass[2] == "organizationalPerson");
871 assert(res.msgs[0].objectClass[3] == "user");
872 assert(res.msgs[0].objectClass[4] == "computer");
873 assert(res.msgs[0].objectGUID != undefined);
874 assert(res.msgs[0].whenCreated != undefined);
875 assert(res.msgs[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn);
876 assert(res.msgs[0].sAMAccountType == 805306369);
877 // assert(res.msgs[0].userAccountControl == 4098);
880 ok = ldb.del(res.msgs[0].dn);
883 assert(ok.error == 0);
886 var attrs = new Array("cn", "name", "objectClass", "objectGUID", "whenCreated", "nTSecurityDescriptor", "memberOf");
887 println("Testing ldb.search for (&(cn=ldaptestUSer2)(objectClass=user))");
888 var res = ldb.search("(&(cn=ldaptestUSer2)(objectClass=user))", base_dn, ldb.SCOPE_SUBTREE, attrs);
889 if (res.error != 0 || res.msgs.length != 1) {
890 println("Could not find (&(cn=ldaptestUSer2)(objectClass=user))");
891 assert(res.error == 0);
892 assert(res.msgs.length == 1);
895 assert(res.msgs[0].dn == ("CN=ldaptestuser2,CN=Users," + base_dn));
896 assert(res.msgs[0].cn == "ldaptestuser2");
897 assert(res.msgs[0].name == "ldaptestuser2");
898 assert(res.msgs[0].objectClass[0] == "top");
899 assert(res.msgs[0].objectClass[1] == "person");
900 assert(res.msgs[0].objectClass[2] == "organizationalPerson");
901 assert(res.msgs[0].objectClass[3] == "user");
902 assert(res.msgs[0].objectGUID != undefined);
903 assert(res.msgs[0].whenCreated != undefined);
904 assert(res.msgs[0].nTSecurityDescriptor != undefined);
905 assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn));
907 var attrs = new Array("cn", "name", "objectClass", "objectGUID", "whenCreated", "nTSecurityDescriptor", "member");
908 println("Testing ldb.search for (&(cn=ldaptestgroup2)(objectClass=group))");
909 var res = ldb.search("(&(cn=ldaptestgroup2)(objectClass=group))", base_dn, ldb.SCOPE_SUBTREE, attrs);
910 if (res.error != 0 || res.msgs.length != 1) {
911 println("Could not find (&(cn=ldaptestgroup2)(objectClass=group))");
912 assert(res.error == 0);
913 assert(res.msgs.length == 1);
916 assert(res.msgs[0].dn == ("CN=ldaptestgroup2,CN=Users," + base_dn));
917 assert(res.msgs[0].cn == "ldaptestgroup2");
918 assert(res.msgs[0].name == "ldaptestgroup2");
919 assert(res.msgs[0].objectClass[0] == "top");
920 assert(res.msgs[0].objectClass[1] == "group");
921 assert(res.msgs[0].objectGUID != undefined);
922 assert(res.msgs[0].whenCreated != undefined);
923 assert(res.msgs[0].nTSecurityDescriptor != undefined);
924 assert(res.msgs[0].member[0] == ("CN=ldaptestuser2,CN=Users," + base_dn));
925 assert(res.msgs[0].member.length == 1);
928 dn: cn=ldaptestgroup2,cn=users," + base_dn + "
931 member: CN=ldaptestuser2,CN=Users," + base_dn + "
932 member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + "
935 println("Failure testing replace of linked attributes");
937 assert(ok.error == 0);
940 println("Testing Linked attribute behaviours");
942 dn: cn=ldaptestgroup2,cn=users," + base_dn + "
947 println("Failure testing delete of linked attributes");
949 assert(ok.error == 0);
953 dn: cn=ldaptestgroup2,cn=users," + base_dn + "
956 member: CN=ldaptestuser2,CN=Users," + base_dn + "
957 member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + "
960 println("Failure testing add of linked attributes");
962 assert(ok.error == 0);
966 dn: cn=ldaptestgroup2,cn=users," + base_dn + "
971 println("Failure testing replace of linked attributes");
973 assert(ok.error == 0);
977 dn: cn=ldaptestgroup2,cn=users," + base_dn + "
980 member: CN=ldaptestuser2,CN=Users," + base_dn + "
981 member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + "
984 println("Failure testing add of linked attributes");
986 assert(ok.error == 0);
990 dn: cn=ldaptestgroup2,cn=users," + base_dn + "
993 member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + "
996 println("Failure testing replace of linked attributes");
998 assert(ok.error == 0);
1001 var res = ldb.search("(&(cn=ldaptestgroup2)(objectClass=group))", base_dn, ldb.SCOPE_SUBTREE, attrs);
1002 if (res.error != 0 || res.msgs.length != 1) {
1003 println("Could not find (&(cn=ldaptestgroup2)(objectClass=group))");
1004 assert(res.error == 0);
1005 assert(res.msgs.length == 1);
1008 assert(res.msgs[0].dn == ("CN=ldaptestgroup2,CN=Users," + base_dn));
1009 assert(res.msgs[0].member[0] == ("CN=ldaptestuser2,CN=Users," + base_dn));
1010 assert(res.msgs[0].member.length == 1);
1012 ok = ldb.del(("CN=ldaptestuser2,CN=Users," + base_dn));
1013 if (ok.error != 0) {
1015 assert(ok.error == 0);
1018 var attrs = new Array("cn", "name", "objectClass", "objectGUID", "whenCreated", "nTSecurityDescriptor", "member");
1019 println("Testing ldb.search for (&(cn=ldaptestgroup2)(objectClass=group)) to check linked delete");
1020 var res = ldb.search("(&(cn=ldaptestgroup2)(objectClass=group))", base_dn, ldb.SCOPE_SUBTREE, attrs);
1021 if (res.error != 0 || res.msgs.length != 1) {
1022 println("Could not find (&(cn=ldaptestgroup2)(objectClass=group)) to check linked delete");
1023 assert(res.error == 0);
1024 assert(res.msgs.length == 1);
1027 assert(res.msgs[0].dn == ("CN=ldaptestgroup2,CN=Users," + base_dn));
1028 assert(res.msgs[0].member == undefined);
1030 println("Testing ldb.search for (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
1031 var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
1033 if (res.error != 0 || res.msgs.length != 1) {
1034 println("Could not find (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
1035 assert(res.error == 0);
1036 assert(res.msgs.length == 1);
1039 assert(res.msgs[0].dn == ("CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn));
1040 assert(res.msgs[0].cn == "ldaptestutf8user èùéìòà");
1041 assert(res.msgs[0].name == "ldaptestutf8user èùéìòà");
1042 assert(res.msgs[0].objectClass[0] == "top");
1043 assert(res.msgs[0].objectClass[1] == "person");
1044 assert(res.msgs[0].objectClass[2] == "organizationalPerson");
1045 assert(res.msgs[0].objectClass[3] == "user");
1046 assert(res.msgs[0].objectGUID != undefined);
1047 assert(res.msgs[0].whenCreated != undefined);
1049 ok = ldb.del(res.msgs[0].dn);
1050 if (ok.error != 0) {
1052 assert(ok.error == 0);
1055 println("Testing ldb.search for (&(cn=ldaptestutf8user2*)(objectClass=user))");
1056 var res = ldb.search("(&(cn=ldaptestutf8user2*)(objectClass=user))");
1057 if (res.error != 0 || res.msgs.length != 1) {
1058 println("Could not find (&(cn=ldaptestutf8user2*)(objectClass=user))");
1059 assert(res.error == 0);
1060 assert(res.msgs.length == 1);
1063 ok = ldb.del(res.msgs[0].dn);
1064 if (ok.error != 0) {
1066 assert(ok.error == 0);
1069 ok = ldb.del(("CN=ldaptestgroup2,CN=Users," + base_dn))
1070 if (ok.error != 0) {
1072 assert(ok.error == 0);
1075 println("Testing ldb.search for (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))");
1076 var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
1078 if (res.error != 0 || res.msgs.length != 1) {
1079 println("Could not find (expect space collapse, win2k3 fails) (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))");
1081 assert(res.msgs[0].dn == ("cn=ldaptestutf8user2 èùéìòà,cn=users," + base_dn));
1082 assert(res.msgs[0].cn == "ldaptestutf8user2 èùéìòà");
1085 println("Testing that we can't get at the configuration DN from the main search base");
1086 var attrs = new Array("cn");
1087 var res = ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs);
1088 assert(res.error == 0);
1089 if (res.msgs.length != 0) {
1090 println("Got configuration DN " + res.msgs[0].dn + " which should not be able to be seen from main search base");
1092 assert(res.msgs.length == 0);
1094 println("Testing that we can get at the configuration DN from the main search base on the LDAP port with the 'phantom root' search_options control");
1095 var attrs = new Array("cn");
1096 var controls = new Array("search_options:1:2");
1097 var res = ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs, controls);
1098 assert(res.error == 0);
1099 assert(res.msgs.length > 0);
1101 if (gc_ldb != undefined) {
1102 println("Testing that we can get at the configuration DN from the main search base on the GC port with the search_options control == 0");
1103 var attrs = new Array("cn");
1104 var controls = new Array("search_options:1:0");
1105 var res = gc_ldb.search("objectClass=crossRef", base_dn, gc_ldb.SCOPE_SUBTREE, attrs, controls);
1106 assert(res.error == 0);
1107 assert(res.msgs.length > 0);
1109 println("Testing that we do find configuration elements in the global catlog");
1110 var attrs = new Array("cn");
1111 var res = gc_ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs);
1112 assert(res.error == 0);
1113 assert (res.msgs.length > 0);
1115 println("Testing that we do find configuration elements and user elements at the same time");
1116 var attrs = new Array("cn");
1117 var res = gc_ldb.search("(|(objectClass=crossRef)(objectClass=person))", base_dn, ldb.SCOPE_SUBTREE, attrs);
1118 assert(res.error == 0);
1119 assert (res.msgs.length > 0);
1121 println("Testing that we do find configuration elements in the global catlog, with the configuration basedn");
1122 var attrs = new Array("cn");
1123 var res = gc_ldb.search("objectClass=crossRef", configuration_dn, ldb.SCOPE_SUBTREE, attrs);
1124 assert(res.error == 0);
1125 assert (res.msgs.length > 0);
1128 println("Testing that we can get at the configuration DN on the main LDAP port");
1129 var attrs = new Array("cn");
1130 var res = ldb.search("objectClass=crossRef", configuration_dn, ldb.SCOPE_SUBTREE, attrs);
1131 assert(res.error == 0);
1132 assert (res.msgs.length > 0);
1134 println("Testing objectCategory canonacolisation");
1135 var attrs = new Array("cn");
1136 var res = ldb.search("objectCategory=ntDsDSA", configuration_dn, ldb.SCOPE_SUBTREE, attrs);
1137 assert(res.error == 0);
1138 if (res.msgs.length == 0) {
1139 println("Didn't find any records with objectCategory=ntDsDSA");
1141 assert(res.msgs.length != 0);
1143 var attrs = new Array("cn");
1144 var res = ldb.search("objectCategory=CN=ntDs-DSA," + schema_dn, configuration_dn, ldb.SCOPE_SUBTREE, attrs);
1145 assert(res.error == 0);
1146 if (res.msgs.length == 0) {
1147 println("Didn't find any records with objectCategory=CN=ntDs-DSA," + schema_dn);
1149 assert(res.msgs.length != 0);
1151 println("Testing objectClass attribute order on "+ base_dn);
1152 var attrs = new Array("objectClass");
1153 var res = ldb.search("objectClass=domain", base_dn, ldb.SCOPE_BASE, attrs);
1154 assert(res.error == 0);
1155 assert(res.msgs.length == 1);
1157 assert(res.msgs[0].objectClass[0] == "top");
1158 assert(res.msgs[0].objectClass[1] == "domain");
1159 assert(res.msgs[0].objectClass[2] == "domainDNS");
1161 // check enumeration
1163 var attrs = new Array("cn");
1164 println("Testing ldb.search for objectCategory=person");
1165 var res = ldb.search("objectCategory=person", base_dn, ldb.SCOPE_SUBTREE, attrs);
1166 assert(res.error == 0);
1167 assert(res.msgs.length > 0);
1169 var attrs = new Array("cn");
1170 var controls = new Array("domain_scope:1");
1171 println("Testing ldb.search for objectCategory=person with domain scope control");
1172 var res = ldb.search("objectCategory=person", base_dn, ldb.SCOPE_SUBTREE, attrs, controls);
1173 assert(res.error == 0);
1174 assert(res.msgs.length > 0);
1176 var attrs = new Array("cn");
1177 println("Testing ldb.search for objectCategory=user");
1178 var res = ldb.search("objectCategory=user", base_dn, ldb.SCOPE_SUBTREE, attrs);
1179 assert(res.error == 0);
1180 assert(res.msgs.length > 0);
1182 var attrs = new Array("cn");
1183 var controls = new Array("domain_scope:1");
1184 println("Testing ldb.search for objectCategory=user with domain scope control");
1185 var res = ldb.search("objectCategory=user", base_dn, ldb.SCOPE_SUBTREE, attrs, controls);
1186 assert(res.error == 0);
1187 assert(res.msgs.length > 0);
1189 var attrs = new Array("cn");
1190 println("Testing ldb.search for objectCategory=group");
1191 var res = ldb.search("objectCategory=group", base_dn, ldb.SCOPE_SUBTREE, attrs);
1192 assert(res.error == 0);
1193 assert(res.msgs.length > 0);
1195 var attrs = new Array("cn");
1196 var controls = new Array("domain_scope:1");
1197 println("Testing ldb.search for objectCategory=group with domain scope control");
1198 var res = ldb.search("objectCategory=group", base_dn, ldb.SCOPE_SUBTREE, attrs, controls);
1199 assert(res.error == 0);
1200 assert(res.msgs.length > 0);
1204 function basedn_tests(ldb, gc_ldb)
1206 println("Testing for all rootDSE attributes");
1207 var attrs = new Array();
1208 var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
1209 assert(res.error == 0);
1210 assert(res.msgs.length == 1);
1212 println("Testing for highestCommittedUSN");
1213 var attrs = new Array("highestCommittedUSN");
1214 var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
1215 assert(res.error == 0);
1216 assert(res.msgs.length == 1);
1217 assert(res.msgs[0].highestCommittedUSN != undefined);
1218 assert(res.msgs[0].highestCommittedUSN != 0);
1220 println("Testing for netlogon via LDAP");
1221 var attrs = new Array("netlogon");
1222 var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
1223 assert(res.error == 0);
1224 assert(res.msgs.length == 0);
1226 println("Testing for netlogon and highestCommittedUSN via LDAP");
1227 var attrs = new Array("netlogon", "highestCommittedUSN");
1228 var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
1229 assert(res.error == 0);
1230 assert(res.msgs.length == 0);
1233 function find_basedn(ldb)
1235 var attrs = new Array("defaultNamingContext");
1236 var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
1237 assert(res.error == 0);
1238 assert(res.msgs.length == 1);
1239 return res.msgs[0].defaultNamingContext;
1242 function find_configurationdn(ldb)
1244 var attrs = new Array("configurationNamingContext");
1245 var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
1246 assert(res.error == 0);
1247 assert(res.msgs.length == 1);
1248 return res.msgs[0].configurationNamingContext;
1251 function find_schemadn(ldb)
1253 var attrs = new Array("schemaNamingContext");
1254 var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
1255 assert(res.error == 0);
1256 assert(res.msgs.length == 1);
1257 return res.msgs[0].schemaNamingContext;
1260 /* use command line creds if available */
1261 ldb.credentials = options.get_credentials();
1262 gc_ldb.credentials = options.get_credentials();
1264 var ok = ldb.connect("ldap://" + host);
1265 var base_dn = find_basedn(ldb);
1267 var configuration_dn = find_configurationdn(ldb);
1268 var schema_dn = find_schemadn(ldb);
1270 println("baseDN: %s\n", base_dn);
1272 var ok = gc_ldb.connect("ldap://" + host + ":3268");
1277 basic_tests(ldb, gc_ldb, base_dn, configuration_dn, schema_dn)
1279 basedn_tests(ldb, gc_ldb)