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);
141 dn: cn=ldaptest2computer,cn=computers," + base_dn + "
143 replace: servicePrincipalName
144 servicePrincipalName: host/ldaptest2computer
145 servicePrincipalName: host/ldaptest2computer
146 servicePrincipalName: cifs/ldaptest2computer
149 //LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS
150 if (ok.error != 20) {
151 println("Expected error LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS, got :" + ok.errstr);
152 assert(ok.error == 20);
156 dn: cn=ldaptestuser2,cn=useRs," + base_dn + "
164 ok = ldb.del("cn=ldaptestuser2,cn=users," + base_dn);
167 assert(ok.error == 0);
170 dn: cn=ldaptestuser2,cn=useRs," + base_dn + "
179 assert(ok.error == 0);
184 println("Testing Ambigious Name Resolution");
185 // Testing ldb.search for (&(anr=ldap testy)(objectClass=user))
186 var res = ldb.search("(&(anr=ldap testy)(objectClass=user))");
187 if (res.error != 0 || res.msgs.length != 3) {
188 println("Could not find (&(anr=ldap testy)(objectClass=user))");
189 assert(res.error == 0);
190 assert(res.msgs.length == 3);
193 // Testing ldb.search for (&(anr=testy ldap)(objectClass=user))
194 var res = ldb.search("(&(anr=testy ldap)(objectClass=user))");
195 if (res.error != 0 || res.msgs.length != 2) {
196 println("Found only " + res.msgs.length + " for (&(anr=testy ldap)(objectClass=user))");
197 assert(res.error == 0);
198 assert(res.msgs.length == 2);
201 // Testing ldb.search for (&(anr=ldap)(objectClass=user))
202 var res = ldb.search("(&(anr=ldap)(objectClass=user))");
203 if (res.error != 0 || res.msgs.length != 4) {
204 println("Found only " + res.msgs.length + " for (&(anr=ldap)(objectClass=user))");
205 assert(res.error == 0);
206 assert(res.msgs.length == 4);
209 // Testing ldb.search for (&(anr==ldap)(objectClass=user))
210 var res = ldb.search("(&(anr==ldap)(objectClass=user))");
211 if (res.error != 0 || res.msgs.length != 1) {
212 println("Found only " + res.msgs.length + " for (&(anr=ldap)(objectClass=user))");
213 println("Could not find (&(anr==ldap)(objectClass=user))");
214 assert(res.error == 0);
215 assert(res.msgs.length == 1);
218 assert(res.msgs[0].dn == ("CN=ldaptestuser,CN=Users," + base_dn));
219 assert(res.msgs[0].cn == "ldaptestuser");
220 assert(res.msgs[0].name == "ldaptestuser");
222 // Testing ldb.search for (&(anr=testy)(objectClass=user))
223 var res = ldb.search("(&(anr=testy)(objectClass=user))");
224 if (res.error != 0 || res.msgs.length != 2) {
225 println("Found only " + res.msgs.length + " for (&(anr=testy)(objectClass=user))");
226 assert(res.error == 0);
227 assert(res.msgs.length == 2);
230 // Testing ldb.search for (&(anr=ldap testy)(objectClass=user))
231 var res = ldb.search("(&(anr=testy ldap)(objectClass=user))");
232 if (res.error != 0 || res.msgs.length != 2) {
233 println("Found only " + res.msgs.length + " for (&(anr=ldap testy)(objectClass=user))");
234 assert(res.error == 0);
235 assert(res.msgs.length == 2);
238 // Testing ldb.search for (&(anr==ldap testy)(objectClass=user))
239 var res = ldb.search("(&(anr==testy ldap)(objectClass=user))");
240 if (res.error != 0 || res.msgs.length != 1) {
241 println("Found only " + res.msgs.length + " for (&(anr==ldap testy)(objectClass=user))");
242 assert(res.error == 0);
243 assert(res.msgs.length == 1);
246 assert(res.msgs[0].dn == ("CN=ldaptestuser,CN=Users," + base_dn));
247 assert(res.msgs[0].cn == "ldaptestuser");
248 assert(res.msgs[0].name == "ldaptestuser");
250 // Testing ldb.search for (&(anr==testy ldap)(objectClass=user))
251 var res = ldb.search("(&(anr==testy ldap)(objectClass=user))");
252 if (res.error != 0 || res.msgs.length != 1) {
253 println("Could not find (&(anr==testy ldap)(objectClass=user))");
254 assert(res.error == 0);
255 assert(res.msgs.length == 1);
258 assert(res.msgs[0].dn == ("CN=ldaptestuser,CN=Users," + base_dn));
259 assert(res.msgs[0].cn == "ldaptestuser");
260 assert(res.msgs[0].name == "ldaptestuser");
262 // Testing ldb.search for (&(anr=testy ldap user)(objectClass=user))
263 var res = ldb.search("(&(anr=testy ldap user)(objectClass=user))");
264 if (res.error != 0 || res.msgs.length != 1) {
265 println("Could not find (&(anr=testy ldap user)(objectClass=user))");
266 assert(res.error == 0);
267 assert(res.msgs.length == 1);
270 assert(res.msgs[0].dn == ("CN=ldaptestuser2,CN=Users," + base_dn));
271 assert(res.msgs[0].cn == "ldaptestuser2");
272 assert(res.msgs[0].name == "ldaptestuser2");
274 // Testing ldb.search for (&(anr==testy ldap user2)(objectClass=user))
275 var res = ldb.search("(&(anr==testy ldap user2)(objectClass=user))");
276 if (res.error != 0 || res.msgs.length != 1) {
277 println("Could not find (&(anr==testy ldap user2)(objectClass=user))");
278 assert(res.error == 0);
279 assert(res.msgs.length == 1);
282 assert(res.msgs[0].dn == ("CN=ldaptestuser2,CN=Users," + base_dn));
283 assert(res.msgs[0].cn == "ldaptestuser2");
284 assert(res.msgs[0].name == "ldaptestuser2");
286 // Testing ldb.search for (&(anr==ldap user2)(objectClass=user))
287 var res = ldb.search("(&(anr==ldap user2)(objectClass=user))");
288 if (res.error != 0 || res.msgs.length != 1) {
289 println("Could not find (&(anr==ldap user2)(objectClass=user))");
290 assert(res.error == 0);
291 assert(res.msgs.length == 1);
294 assert(res.msgs[0].dn == ("CN=ldaptestuser2,CN=Users," + base_dn));
295 assert(res.msgs[0].cn == "ldaptestuser2");
296 assert(res.msgs[0].name == "ldaptestuser2");
298 // Testing ldb.search for (&(anr==not ldap user2)(objectClass=user))
299 var res = ldb.search("(&(anr==not ldap user2)(objectClass=user))");
300 if (res.error != 0 || res.msgs.length != 0) {
301 println("Must not find (&(anr==not ldap user2)(objectClass=user))");
302 assert(res.error == 0);
303 assert(res.msgs.length == 0);
306 // Testing ldb.search for (&(anr=not ldap user2)(objectClass=user))
307 var res = ldb.search("(&(anr=not ldap user2)(objectClass=user))");
308 if (res.error != 0 || res.msgs.length != 0) {
309 println("Must not find (&(anr=not ldap user2)(objectClass=user))");
310 assert(res.error == 0);
311 assert(res.msgs.length == 0);
314 println("Testing Group Modifies");
316 dn: cn=ldaptestgroup,cn=users," + base_dn + "
319 member: cn=ldaptestuser2,cn=users," + base_dn + "
320 member: cn=ldaptestcomputer,cn=computers," + base_dn + "
325 assert(ok.error == 0);
328 ok = ldb.del("cn=ldaptestuser3,cn=users," + base_dn);
330 println("Testing adding non-existent user to a group");
332 dn: cn=ldaptestgroup,cn=users," + base_dn + "
335 member: cn=ldaptestuser3,cn=users," + base_dn + "
337 if (ok.error != 32) { /* LDAP_NO_SUCH_OBJECT */
339 assert(ok.error == 32);
342 println("Testing Renames");
344 ok = ldb.rename("cn=ldaptestuser2,cn=users," + base_dn, "cn=ldaptestuser3,cn=users," + base_dn);
346 println("Could not rename cn=ldaptestuser2,cn=users," + base_dn + " into cn=ldaptestuser3,cn=users," + base_dn + ": " + ok.errstr);
347 assert(ok.error == 0);
350 ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser3,cn=users," + base_dn);
352 println("Could not rename cn=ldaptestuser3,cn=users," + base_dn + " onto itself: " + ok.errstr);
353 assert(ok.error == 0);
356 ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestUSER3,cn=users," + base_dn);
358 println("Could not rename cn=ldaptestuser3,cn=users," + base_dn + " into cn=ldaptestUSER3,cn=users," + base_dn + ": " + ok.errstr);
359 assert(ok.error == 0);
362 println("Testing ldb.search for (&(cn=ldaptestuser3)(objectClass=user))");
363 var res = ldb.search("(&(cn=ldaptestuser3)(objectClass=user))");
364 if (res.error != 0 || res.msgs.length != 1) {
365 println("Could not find (&(cn=ldaptestuser3)(objectClass=user))");
366 assert(res.error == 0);
367 assert(res.msgs.length == 1);
370 assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn));
371 assert(res.msgs[0].cn == "ldaptestUSER3");
372 assert(res.msgs[0].name == "ldaptestUSER3");
374 // This is a Samba special, and does not exist in real AD
375 // println("Testing ldb.search for (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")");
376 // var res = ldb.search("(dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")");
377 // if (res.error != 0 || res.msgs.length != 1) {
378 // println("Could not find (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")");
379 // assert(res.error == 0);
380 // assert(res.msgs.length == 1);
382 // assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn));
383 // assert(res.msgs[0].cn == "ldaptestUSER3");
384 // assert(res.msgs[0].name == "ldaptestUSER3");
386 println("Testing ldb.search for (distinguishedName=CN=ldaptestUSER3,CN=Users," + base_dn + ")");
387 var res = ldb.search("(distinguishedName=CN=ldaptestUSER3,CN=Users," + base_dn + ")");
388 if (res.error != 0 || res.msgs.length != 1) {
389 println("Could not find (dn=CN=ldaptestUSER3,CN=Users," + base_dn + ")");
390 assert(res.error == 0);
391 assert(res.msgs.length == 1);
393 assert(res.msgs[0].dn == ("CN=ldaptestUSER3,CN=Users," + base_dn));
394 assert(res.msgs[0].cn == "ldaptestUSER3");
395 assert(res.msgs[0].name == "ldaptestUSER3");
397 // ensure we cannot add it again
399 dn: cn=ldaptestuser3,cn=userS," + base_dn + "
404 //LDB_ERR_ENTRY_ALREADY_EXISTS
405 if (ok.error != 68) {
406 println("expected error LDB_ERR_ENTRY_ALREADY_EXISTS, got: " + ok.errstr);
407 assert(ok.error == 68);
411 ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser2,cn=users," + base_dn);
414 assert(ok.error == 0);
417 // ensure we cannnot rename it twice
418 ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser2,cn=users," + base_dn);
419 //LDB_ERR_NO_SUCH_OBJECT
420 assert(ok.error == 32);
422 // ensure can now use that name
424 dn: cn=ldaptestuser3,cn=users," + base_dn + "
430 // ensure we now cannnot rename
431 ok = ldb.rename("cn=ldaptestuser2,cn=users," + base_dn, "cn=ldaptestuser3,cn=users," + base_dn);
432 //LDB_ERR_ENTRY_ALREADY_EXISTS
433 if (ok.error != 68) {
434 println("expected error LDB_ERR_ENTRY_ALREADY_EXISTS, got: " + ok.errstr);
435 assert(ok.error == 68);
437 assert(ok.error == 68);
438 ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser3,cn=configuration," + base_dn);
439 if (ok.error != 71 && ok.error != 64) {
440 println("expected error LDB_ERR_ENTRY_ALREADY_EXISTS or LDAP_NAMING_VIOLATION, got: " + ok.errstr);
441 assert(ok.error == 71 || ok.error == 64);
443 assert(ok.error == 71 || ok.error == 64);
445 ok = ldb.rename("cn=ldaptestuser3,cn=users," + base_dn, "cn=ldaptestuser5,cn=users," + base_dn);
448 assert(ok.error == 0);
451 ok = ldb.del("cn=ldaptestuser5,cn=users," + base_dn);
453 ok = ldb.del("cn=ldaptestgroup2,cn=users," + base_dn);
455 ok = ldb.rename("cn=ldaptestgroup,cn=users," + base_dn, "cn=ldaptestgroup2,cn=users," + base_dn);
458 assert(ok.error == 0);
461 println("Testing subtree Renames");
464 dn: cn=ldaptestcontainer," + base_dn + "
465 objectClass: container
469 dn: CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + "
475 ok = ldb.del("cn=ldaptestuser4,cn=ldaptestcontainer," + base_dn);
478 assert(ok.error == 0);
481 dn: CN=ldaptestuser4,CN=ldaptestcontainer," + base_dn + "
488 assert(ok.error == 0);
493 dn: cn=ldaptestgroup2,cn=users," + base_dn + "
496 member: cn=ldaptestuser4,cn=ldaptestcontainer," + base_dn + "
499 println("Failure adding ldaptestuser4 to a group");
501 assert(ok.error == 0);
504 println("Testing ldb.rename of cn=ldaptestcontainer," + base_dn + " to cn=ldaptestcontainer2," + base_dn);
505 ok = ldb.rename("CN=ldaptestcontainer," + base_dn, "CN=ldaptestcontainer2," + base_dn);
508 assert(ok.error == 0);
511 println("Testing ldb.search for (&(cn=ldaptestuser4)(objectClass=user))");
512 var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))");
513 if (res.error != 0 || res.msgs.length != 1) {
514 println("Could not find (&(cn=ldaptestuser4)(objectClass=user))");
515 assert(res.error == 0);
516 assert(res.msgs.length == 1);
519 println("Testing subtree ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in (just renamed from) cn=ldaptestcontainer," + base_dn);
520 var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer," + base_dn, ldb.SCOPE_SUBTREE);
521 if (res.error != 32) {
523 assert(res.error == 32);
526 println("Testing one-level ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in (just renamed from) cn=ldaptestcontainer," + base_dn);
527 var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer," + base_dn, ldb.SCOPE_ONELEVEL);
528 if (res.error != 32) {
530 assert(res.error == 32);
533 println("Testing ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in renamed container");
534 var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer2," + base_dn, ldb.SCOPE_SUBTREE);
535 if (res.error != 0 || res.msgs.length != 1) {
536 println("Could not find (&(cn=ldaptestuser4)(objectClass=user)) under cn=ldaptestcontainer2," + base_dn);
537 assert(res.error == 0);
538 assert(res.msgs.length == 1);
541 assert(res.msgs[0].dn == ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn));
542 assert(strupper(res.msgs[0].memberOf[0]) == strupper(("CN=ldaptestgroup2,CN=Users," + base_dn)));
544 println("Testing ldb.search for (&(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")(objectclass=group)) to check subtree renames and linked attributes");
545 var res = ldb.search("(&(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")(objectclass=group))", base_dn, ldb.SCOPE_SUBTREE);
546 if (res.error != 0 || res.msgs.length != 1) {
547 println("Could not find (&(member=CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn + ")(objectclass=group)), perhaps linked attributes are not conistant with subtree renames?");
548 assert(res.error == 0);
549 assert(res.msgs.length == 1);
552 println("Testing ldb.rename (into itself) of cn=ldaptestcontainer2," + base_dn + " to cn=ldaptestcontainer,cn=ldaptestcontainer2," + base_dn);
553 ok = ldb.rename("cn=ldaptestcontainer2," + base_dn, "cn=ldaptestcontainer,cn=ldaptestcontainer2," + base_dn);
554 if (ok.error != 53) { /* LDAP_UNWILLING_TO_PERFORM */
556 assert(ok.error == 53);
559 println("Testing ldb.rename (into non-existent container) of cn=ldaptestcontainer2," + base_dn + " to cn=ldaptestcontainer,cn=ldaptestcontainer3," + base_dn);
560 ok = ldb.rename("cn=ldaptestcontainer2," + base_dn, "cn=ldaptestcontainer,cn=ldaptestcontainer3," + base_dn);
561 if (ok.error != 53 && ok.error != 80) { /* LDAP_UNWILLING_TO_PERFORM or LDAP_OTHER*/
563 assert(ok.error == 53 || ok.error == 80);
566 println("Testing delete (should fail, not a leaf node) of renamed cn=ldaptestcontainer2," + base_dn);
567 ok = ldb.del("cn=ldaptestcontainer2," + base_dn);
568 if (ok.error != 66) { /* LDB_ERR_NOT_ALLOWED_ON_NON_LEAF */
570 assert(ok.error == 66);
573 println("Testing base ldb.search for CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn);
574 var res = ldb.search("(objectclass=*)", ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn), ldb.SCOPE_BASE);
575 if (res.error == 0 && res.count == 1) {
576 assert(res.error == 0 && res.count == 1);
578 var res = ldb.search("(cn=ldaptestuser40)", ("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn), ldb.SCOPE_BASE);
579 if (res.error == 0 && res.count == 0) {
580 assert(res.error == 0 && res.count == 0);
583 println("Testing one-level ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in cn=ldaptestcontainer2," + base_dn);
584 var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer2," + base_dn, ldb.SCOPE_ONELEVEL);
585 if (res.error == 0 && res.count == 0) {
586 assert(res.error == 0 && res.count == 0);
589 println("Testing one-level ldb.search for (&(cn=ldaptestuser4)(objectClass=user)) in cn=ldaptestcontainer2," + base_dn);
590 var res = ldb.search("(&(cn=ldaptestuser4)(objectClass=user))", "cn=ldaptestcontainer2," + base_dn, ldb.SCOPE_SUBTREE);
591 if (res.error == 0 && res.count == 0) {
592 assert(res.error == 0 && res.count == 0);
595 println("Testing delete of subtree renamed "+("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn));
596 ok = ldb.del(("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn));
599 assert(ok.error == 0);
601 println("Testing delete of renamed cn=ldaptestcontainer2," + base_dn);
602 ok = ldb.del("cn=ldaptestcontainer2," + base_dn);
605 assert(ok.error == 0);
609 dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + "
613 ok = ldb.del("cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn);
616 assert(ok.error == 0);
619 dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + "
624 assert(ok.error == 0);
629 dn: cn=ldaptestutf8user2 èùéìòà ,cn=users," + base_dn + "
633 ok = ldb.del("cn=ldaptestutf8user2 èùéìòà ,cn=users," + base_dn);
636 assert(ok.error == 0);
639 dn: cn=ldaptestutf8user2 èùéìòà ,cn=users," + base_dn + "
644 assert(ok.error == 0);
648 println("Testing ldb.search for (&(cn=ldaptestuser)(objectClass=user))");
649 var res = ldb.search("(&(cn=ldaptestuser)(objectClass=user))");
650 if (res.error != 0 || res.msgs.length != 1) {
651 println("Could not find (&(cn=ldaptestuser)(objectClass=user))");
652 assert(res.error == 0);
653 assert(res.msgs.length == 1);
656 assert(res.msgs[0].dn == ("CN=ldaptestuser,CN=Users," + base_dn));
657 assert(res.msgs[0].cn == "ldaptestuser");
658 assert(res.msgs[0].name == "ldaptestuser");
659 assert(res.msgs[0].objectClass[0] == "top");
660 assert(res.msgs[0].objectClass[1] == "person");
661 assert(res.msgs[0].objectClass[2] == "organizationalPerson");
662 assert(res.msgs[0].objectClass[3] == "user");
663 assert(res.msgs[0].objectGUID != undefined);
664 assert(res.msgs[0].whenCreated != undefined);
665 assert(res.msgs[0].objectCategory == ("CN=Person,CN=Schema,CN=Configuration," + base_dn));
666 assert(res.msgs[0].sAMAccountType == 805306368);
667 // assert(res[0].userAccountControl == 546);
668 assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn));
669 assert(res.msgs[0].memberOf.length == 1);
671 println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))");
672 var res2 = ldb.search("(&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))");
673 if (res2.error != 0 || res2.msgs.length != 1) {
674 println("Could not find (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))");
675 assert(res2.error == 0);
676 assert(res2.msgs.length == 1);
679 assert(res.msgs[0].dn == res2.msgs[0].dn);
681 println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon))");
682 var res3 = ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))");
683 if (res3.error != 0) {
684 println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)): " + res3.errstr);
685 assert(res3.error == 0);
686 } else if (res3.msgs.length != 1) {
687 println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)): matched " + res3.msgs.length);
688 assert(res3.msgs.length == 1);
691 assert(res.msgs[0].dn == res3.msgs[0].dn);
693 if (gc_ldb != undefined) {
694 println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog");
695 var res3gc = gc_ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))");
696 if (res3gc.error != 0) {
697 println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog: " + res3gc.errstr);
698 assert(res3gc.error == 0);
699 } else if (res3gc.msgs.length != 1) {
700 println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog: matched " + res3gc.msgs.length);
701 assert(res3gc.msgs.length == 1);
704 assert(res.msgs[0].dn == res3gc.msgs[0].dn);
707 println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon)) in with 'phantom root' control");
708 var attrs = new Array("cn");
709 var controls = new Array("search_options:1:2");
710 var res3control = gc_ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))", base_dn, ldb.SCOPE_SUBTREE, attrs, controls);
711 if (res3control.error != 0 || res3control.msgs.length != 1) {
712 println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon)) in Global Catalog");
713 assert(res3control.error == 0);
714 assert(res3control.msgs.length == 1);
717 assert(res.msgs[0].dn == res3control.msgs[0].dn);
719 ok = ldb.del(res.msgs[0].dn);
722 assert(ok.error == 0);
725 println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectClass=user))");
726 var res = ldb.search("(&(cn=ldaptestcomputer)(objectClass=user))");
727 if (res.error != 0 || res.msgs.length != 1) {
728 println("Could not find (&(cn=ldaptestuser)(objectClass=user))");
729 assert(res.error == 0);
730 assert(res.msgs.length == 1);
733 assert(res.msgs[0].dn == ("CN=ldaptestcomputer,CN=Computers," + base_dn));
734 assert(res.msgs[0].cn == "ldaptestcomputer");
735 assert(res.msgs[0].name == "ldaptestcomputer");
736 assert(res.msgs[0].objectClass[0] == "top");
737 assert(res.msgs[0].objectClass[1] == "person");
738 assert(res.msgs[0].objectClass[2] == "organizationalPerson");
739 assert(res.msgs[0].objectClass[3] == "user");
740 assert(res.msgs[0].objectClass[4] == "computer");
741 assert(res.msgs[0].objectGUID != undefined);
742 assert(res.msgs[0].whenCreated != undefined);
743 assert(res.msgs[0].objectCategory == ("CN=Computer,CN=Schema,CN=Configuration," + base_dn));
744 assert(res.msgs[0].primaryGroupID == 513);
745 // assert(res.msgs[0].sAMAccountType == 805306368);
746 // assert(res.msgs[0].userAccountControl == 546);
747 assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn));
748 assert(res.msgs[0].memberOf.length == 1);
750 println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))");
751 var res2 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))");
752 if (res2.error != 0 || res2.msgs.length != 1) {
753 println("Could not find (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))");
754 assert(res2.error == 0);
755 assert(res2.msgs.length == 1);
758 assert(res.msgs[0].dn == res2.msgs[0].dn);
760 if (gc_ldb != undefined) {
761 println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + ")) in Global Catlog");
762 var res2gc = gc_ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))");
763 if (res2gc.error != 0 || res2gc.msgs.length != 1) {
764 println("Could not find (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + ")) in Global Catlog");
765 assert(res2gc.error == 0);
766 assert(res2gc.msgs.length == 1);
769 assert(res.msgs[0].dn == res2gc.msgs[0].dn);
772 println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=compuTER))");
773 var res3 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=compuTER))");
774 if (res3.error != 0 || res3.msgs.length != 1) {
775 println("Could not find (&(cn=ldaptestcomputer)(objectCategory=compuTER))");
776 assert(res3.error == 0);
777 assert(res3.msgs.length == 1);
780 assert(res.msgs[0].dn == res3.msgs[0].dn);
782 if (gc_ldb != undefined) {
783 println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=compuTER)) in Global Catalog");
784 var res3gc = gc_ldb.search("(&(cn=ldaptestcomputer)(objectCategory=compuTER))");
785 if (res3gc.error != 0 || res3gc.msgs.length != 1) {
786 println("Could not find (&(cn=ldaptestcomputer)(objectCategory=compuTER)) in Global Catalog");
787 assert(res3gc.error == 0);
788 assert(res3gc.msgs.length == 1);
791 assert(res.msgs[0].dn == res3gc.msgs[0].dn);
794 println("Testing ldb.search for (&(cn=ldaptestcomp*r)(objectCategory=compuTER))");
795 var res4 = ldb.search("(&(cn=ldaptestcomp*r)(objectCategory=compuTER))");
796 if (res4.error != 0 || res4.msgs.length != 1) {
797 println("Could not find (&(cn=ldaptestcomp*r)(objectCategory=compuTER))");
798 assert(res4.error == 0);
799 assert(res4.msgs.length == 1);
802 assert(res.msgs[0].dn == res4.msgs[0].dn);
804 println("Testing ldb.search for (&(cn=ldaptestcomput*)(objectCategory=compuTER))");
805 var res5 = ldb.search("(&(cn=ldaptestcomput*)(objectCategory=compuTER))");
806 if (res5.error != 0 || res5.msgs.length != 1) {
807 println("Could not find (&(cn=ldaptestcomput*)(objectCategory=compuTER))");
808 assert(res5.error == 0);
809 assert(res5.msgs.length == 1);
812 assert(res.msgs[0].dn == res5.msgs[0].dn);
814 println("Testing ldb.search for (&(cn=*daptestcomputer)(objectCategory=compuTER))");
815 var res6 = ldb.search("(&(cn=*daptestcomputer)(objectCategory=compuTER))");
816 if (res6.error != 0 || res6.msgs.length != 1) {
817 println("Could not find (&(cn=*daptestcomputer)(objectCategory=compuTER))");
818 assert(res6.error == 0);
819 assert(res6.msgs.length == 1);
822 assert(res.msgs[0].dn == res6.msgs[0].dn);
824 ok = ldb.del(res.msgs[0].dn);
827 assert(ok.error == 0);
830 println("Testing ldb.search for (&(cn=ldaptest2computer)(objectClass=user))");
831 var res = ldb.search("(&(cn=ldaptest2computer)(objectClass=user))");
832 if (res.error != 0 || res.msgs.length != 1) {
833 println("Could not find (&(cn=ldaptest2computer)(objectClass=user))");
834 assert(res.error == 0);
835 assert(res.msgs.length == 1);
838 assert(res.msgs[0].dn == ("CN=ldaptest2computer,CN=Computers," + base_dn));
839 assert(res.msgs[0].cn == "ldaptest2computer");
840 assert(res.msgs[0].name == "ldaptest2computer");
841 assert(res.msgs[0].objectClass[0] == "top");
842 assert(res.msgs[0].objectClass[1] == "person");
843 assert(res.msgs[0].objectClass[2] == "organizationalPerson");
844 assert(res.msgs[0].objectClass[3] == "user");
845 assert(res.msgs[0].objectClass[4] == "computer");
846 assert(res.msgs[0].objectGUID != undefined);
847 assert(res.msgs[0].whenCreated != undefined);
848 assert(res.msgs[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn);
849 assert(res.msgs[0].sAMAccountType == 805306369);
850 // assert(res.msgs[0].userAccountControl == 4098);
853 ok = ldb.del(res.msgs[0].dn);
856 assert(ok.error == 0);
859 var attrs = new Array("cn", "name", "objectClass", "objectGUID", "whenCreated", "nTSecurityDescriptor", "memberOf");
860 println("Testing ldb.search for (&(cn=ldaptestUSer2)(objectClass=user))");
861 var res = ldb.search("(&(cn=ldaptestUSer2)(objectClass=user))", base_dn, ldb.SCOPE_SUBTREE, attrs);
862 if (res.error != 0 || res.msgs.length != 1) {
863 println("Could not find (&(cn=ldaptestUSer2)(objectClass=user))");
864 assert(res.error == 0);
865 assert(res.msgs.length == 1);
868 assert(res.msgs[0].dn == ("CN=ldaptestuser2,CN=Users," + base_dn));
869 assert(res.msgs[0].cn == "ldaptestuser2");
870 assert(res.msgs[0].name == "ldaptestuser2");
871 assert(res.msgs[0].objectClass[0] == "top");
872 assert(res.msgs[0].objectClass[1] == "person");
873 assert(res.msgs[0].objectClass[2] == "organizationalPerson");
874 assert(res.msgs[0].objectClass[3] == "user");
875 assert(res.msgs[0].objectGUID != undefined);
876 assert(res.msgs[0].whenCreated != undefined);
877 assert(res.msgs[0].nTSecurityDescriptor != undefined);
878 assert(res.msgs[0].memberOf[0] == ("CN=ldaptestgroup2,CN=Users," + base_dn));
880 var attrs = new Array("cn", "name", "objectClass", "objectGUID", "whenCreated", "nTSecurityDescriptor", "member");
881 println("Testing ldb.search for (&(cn=ldaptestgroup2)(objectClass=group))");
882 var res = ldb.search("(&(cn=ldaptestgroup2)(objectClass=group))", base_dn, ldb.SCOPE_SUBTREE, attrs);
883 if (res.error != 0 || res.msgs.length != 1) {
884 println("Could not find (&(cn=ldaptestgroup2)(objectClass=group))");
885 assert(res.error == 0);
886 assert(res.msgs.length == 1);
889 assert(res.msgs[0].dn == ("CN=ldaptestgroup2,CN=Users," + base_dn));
890 assert(res.msgs[0].cn == "ldaptestgroup2");
891 assert(res.msgs[0].name == "ldaptestgroup2");
892 assert(res.msgs[0].objectClass[0] == "top");
893 assert(res.msgs[0].objectClass[1] == "group");
894 assert(res.msgs[0].objectGUID != undefined);
895 assert(res.msgs[0].whenCreated != undefined);
896 assert(res.msgs[0].nTSecurityDescriptor != undefined);
897 assert(res.msgs[0].member[0] == ("CN=ldaptestuser2,CN=Users," + base_dn));
898 assert(res.msgs[0].member.length == 1);
901 dn: cn=ldaptestgroup2,cn=users," + base_dn + "
904 member: CN=ldaptestuser2,CN=Users," + base_dn + "
905 member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + "
908 println("Failure testing replace of linked attributes");
910 assert(ok.error == 0);
913 println("Testing Linked attribute behaviours");
915 dn: cn=ldaptestgroup2,cn=users," + base_dn + "
920 println("Failure testing delete of linked attributes");
922 assert(ok.error == 0);
926 dn: cn=ldaptestgroup2,cn=users," + base_dn + "
929 member: CN=ldaptestuser2,CN=Users," + base_dn + "
930 member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + "
933 println("Failure testing add of linked attributes");
935 assert(ok.error == 0);
939 dn: cn=ldaptestgroup2,cn=users," + base_dn + "
944 println("Failure testing replace of linked attributes");
946 assert(ok.error == 0);
950 dn: cn=ldaptestgroup2,cn=users," + base_dn + "
953 member: CN=ldaptestuser2,CN=Users," + base_dn + "
954 member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + "
957 println("Failure testing add of linked attributes");
959 assert(ok.error == 0);
963 dn: cn=ldaptestgroup2,cn=users," + base_dn + "
966 member: CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn + "
969 println("Failure testing replace of linked attributes");
971 assert(ok.error == 0);
974 var res = ldb.search("(&(cn=ldaptestgroup2)(objectClass=group))", base_dn, ldb.SCOPE_SUBTREE, attrs);
975 if (res.error != 0 || res.msgs.length != 1) {
976 println("Could not find (&(cn=ldaptestgroup2)(objectClass=group))");
977 assert(res.error == 0);
978 assert(res.msgs.length == 1);
981 assert(res.msgs[0].dn == ("CN=ldaptestgroup2,CN=Users," + base_dn));
982 assert(res.msgs[0].member[0] == ("CN=ldaptestuser2,CN=Users," + base_dn));
983 assert(res.msgs[0].member.length == 1);
985 ok = ldb.del(("CN=ldaptestuser2,CN=Users," + base_dn));
988 assert(ok.error == 0);
991 var attrs = new Array("cn", "name", "objectClass", "objectGUID", "whenCreated", "nTSecurityDescriptor", "member");
992 println("Testing ldb.search for (&(cn=ldaptestgroup2)(objectClass=group)) to check linked delete");
993 var res = ldb.search("(&(cn=ldaptestgroup2)(objectClass=group))", base_dn, ldb.SCOPE_SUBTREE, attrs);
994 if (res.error != 0 || res.msgs.length != 1) {
995 println("Could not find (&(cn=ldaptestgroup2)(objectClass=group)) to check linked delete");
996 assert(res.error == 0);
997 assert(res.msgs.length == 1);
1000 assert(res.msgs[0].dn == ("CN=ldaptestgroup2,CN=Users," + base_dn));
1001 assert(res.msgs[0].member == undefined);
1003 println("Testing ldb.search for (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
1004 var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
1006 if (res.error != 0 || res.msgs.length != 1) {
1007 println("Could not find (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
1008 assert(res.error == 0);
1009 assert(res.msgs.length == 1);
1012 assert(res.msgs[0].dn == ("CN=ldaptestutf8user èùéìòà,CN=Users," + base_dn));
1013 assert(res.msgs[0].cn == "ldaptestutf8user èùéìòà");
1014 assert(res.msgs[0].name == "ldaptestutf8user èùéìòà");
1015 assert(res.msgs[0].objectClass[0] == "top");
1016 assert(res.msgs[0].objectClass[1] == "person");
1017 assert(res.msgs[0].objectClass[2] == "organizationalPerson");
1018 assert(res.msgs[0].objectClass[3] == "user");
1019 assert(res.msgs[0].objectGUID != undefined);
1020 assert(res.msgs[0].whenCreated != undefined);
1022 ok = ldb.del(res.msgs[0].dn);
1023 if (ok.error != 0) {
1025 assert(ok.error == 0);
1028 println("Testing ldb.search for (&(cn=ldaptestutf8user2*)(objectClass=user))");
1029 var res = ldb.search("(&(cn=ldaptestutf8user2*)(objectClass=user))");
1030 if (res.error != 0 || res.msgs.length != 1) {
1031 println("Could not find (&(cn=ldaptestutf8user2*)(objectClass=user))");
1032 assert(res.error == 0);
1033 assert(res.msgs.length == 1);
1036 ok = ldb.del(res.msgs[0].dn);
1037 if (ok.error != 0) {
1039 assert(ok.error == 0);
1042 ok = ldb.del(("CN=ldaptestgroup2,CN=Users," + base_dn))
1043 if (ok.error != 0) {
1045 assert(ok.error == 0);
1048 println("Testing ldb.search for (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))");
1049 var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
1051 if (res.error != 0 || res.msgs.length != 1) {
1052 println("Could not find (expect space collapse, win2k3 fails) (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))");
1054 assert(res.msgs[0].dn == ("cn=ldaptestutf8user2 èùéìòà,cn=users," + base_dn));
1055 assert(res.msgs[0].cn == "ldaptestutf8user2 èùéìòà");
1058 println("Testing that we can't get at the configuration DN from the main search base");
1059 var attrs = new Array("cn");
1060 var res = ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs);
1061 assert(res.error == 0);
1062 if (res.msgs.length != 0) {
1063 println("Got configuration DN " + res.msgs[0].dn + " which should not be able to be seen from main search base");
1065 assert(res.msgs.length == 0);
1067 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");
1068 var attrs = new Array("cn");
1069 var controls = new Array("search_options:1:2");
1070 var res = ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs, controls);
1071 assert(res.error == 0);
1072 assert(res.msgs.length > 0);
1074 if (gc_ldb != undefined) {
1075 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");
1076 var attrs = new Array("cn");
1077 var controls = new Array("search_options:1:0");
1078 var res = gc_ldb.search("objectClass=crossRef", base_dn, gc_ldb.SCOPE_SUBTREE, attrs, controls);
1079 assert(res.error == 0);
1080 assert(res.msgs.length > 0);
1082 println("Testing that we do find configuration elements in the global catlog");
1083 var attrs = new Array("cn");
1084 var res = gc_ldb.search("objectClass=crossRef", base_dn, ldb.SCOPE_SUBTREE, attrs);
1085 assert(res.error == 0);
1086 assert (res.msgs.length > 0);
1088 println("Testing that we do find configuration elements and user elements at the same time");
1089 var attrs = new Array("cn");
1090 var res = gc_ldb.search("(|(objectClass=crossRef)(objectClass=person))", base_dn, ldb.SCOPE_SUBTREE, attrs);
1091 assert(res.error == 0);
1092 assert (res.msgs.length > 0);
1094 println("Testing that we do find configuration elements in the global catlog, with the configuration basedn");
1095 var attrs = new Array("cn");
1096 var res = gc_ldb.search("objectClass=crossRef", configuration_dn, ldb.SCOPE_SUBTREE, attrs);
1097 assert(res.error == 0);
1098 assert (res.msgs.length > 0);
1101 println("Testing that we can get at the configuration DN on the main LDAP port");
1102 var attrs = new Array("cn");
1103 var res = ldb.search("objectClass=crossRef", configuration_dn, ldb.SCOPE_SUBTREE, attrs);
1104 assert(res.error == 0);
1105 assert (res.msgs.length > 0);
1107 println("Testing objectCategory canonacolisation");
1108 var attrs = new Array("cn");
1109 var res = ldb.search("objectCategory=ntDsDSA", configuration_dn, ldb.SCOPE_SUBTREE, attrs);
1110 assert(res.error == 0);
1111 if (res.msgs.length == 0) {
1112 println("Didn't find any records with objectCategory=ntDsDSA");
1114 assert(res.msgs.length != 0);
1116 var attrs = new Array("cn");
1117 var res = ldb.search("objectCategory=CN=ntDs-DSA," + schema_dn, configuration_dn, ldb.SCOPE_SUBTREE, attrs);
1118 assert(res.error == 0);
1119 if (res.msgs.length == 0) {
1120 println("Didn't find any records with objectCategory=CN=ntDs-DSA," + schema_dn);
1122 assert(res.msgs.length != 0);
1124 println("Testing objectClass attribute order on "+ base_dn);
1125 var attrs = new Array("objectClass");
1126 var res = ldb.search("objectClass=domain", base_dn, ldb.SCOPE_BASE, attrs);
1127 assert(res.error == 0);
1128 assert(res.msgs.length == 1);
1130 assert(res.msgs[0].objectClass[0] == "top");
1131 assert(res.msgs[0].objectClass[1] == "domain");
1132 assert(res.msgs[0].objectClass[2] == "domainDNS");
1134 // check enumeration
1136 var attrs = new Array("cn");
1137 println("Testing ldb.search for objectCategory=person");
1138 var res = ldb.search("objectCategory=person", base_dn, ldb.SCOPE_SUBTREE, attrs);
1139 assert(res.error == 0);
1140 assert(res.msgs.length > 0);
1142 var attrs = new Array("cn");
1143 var controls = new Array("domain_scope:1");
1144 println("Testing ldb.search for objectCategory=person with domain scope control");
1145 var res = ldb.search("objectCategory=person", base_dn, ldb.SCOPE_SUBTREE, attrs, controls);
1146 assert(res.error == 0);
1147 assert(res.msgs.length > 0);
1149 var attrs = new Array("cn");
1150 println("Testing ldb.search for objectCategory=user");
1151 var res = ldb.search("objectCategory=user", base_dn, ldb.SCOPE_SUBTREE, attrs);
1152 assert(res.error == 0);
1153 assert(res.msgs.length > 0);
1155 var attrs = new Array("cn");
1156 var controls = new Array("domain_scope:1");
1157 println("Testing ldb.search for objectCategory=user with domain scope control");
1158 var res = ldb.search("objectCategory=user", base_dn, ldb.SCOPE_SUBTREE, attrs, controls);
1159 assert(res.error == 0);
1160 assert(res.msgs.length > 0);
1162 var attrs = new Array("cn");
1163 println("Testing ldb.search for objectCategory=group");
1164 var res = ldb.search("objectCategory=group", base_dn, ldb.SCOPE_SUBTREE, attrs);
1165 assert(res.error == 0);
1166 assert(res.msgs.length > 0);
1168 var attrs = new Array("cn");
1169 var controls = new Array("domain_scope:1");
1170 println("Testing ldb.search for objectCategory=group with domain scope control");
1171 var res = ldb.search("objectCategory=group", base_dn, ldb.SCOPE_SUBTREE, attrs, controls);
1172 assert(res.error == 0);
1173 assert(res.msgs.length > 0);
1177 function basedn_tests(ldb, gc_ldb)
1179 println("Testing for all rootDSE attributes");
1180 var attrs = new Array();
1181 var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
1182 assert(res.error == 0);
1183 assert(res.msgs.length == 1);
1185 println("Testing for highestCommittedUSN");
1186 var attrs = new Array("highestCommittedUSN");
1187 var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
1188 assert(res.error == 0);
1189 assert(res.msgs.length == 1);
1190 assert(res.msgs[0].highestCommittedUSN != undefined);
1191 assert(res.msgs[0].highestCommittedUSN != 0);
1193 println("Testing for netlogon via LDAP");
1194 var attrs = new Array("netlogon");
1195 var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
1196 assert(res.error == 0);
1197 assert(res.msgs.length == 0);
1199 println("Testing for netlogon and highestCommittedUSN via LDAP");
1200 var attrs = new Array("netlogon", "highestCommittedUSN");
1201 var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
1202 assert(res.error == 0);
1203 assert(res.msgs.length == 0);
1206 function find_basedn(ldb)
1208 var attrs = new Array("defaultNamingContext");
1209 var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
1210 assert(res.error == 0);
1211 assert(res.msgs.length == 1);
1212 return res.msgs[0].defaultNamingContext;
1215 function find_configurationdn(ldb)
1217 var attrs = new Array("configurationNamingContext");
1218 var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
1219 assert(res.error == 0);
1220 assert(res.msgs.length == 1);
1221 return res.msgs[0].configurationNamingContext;
1224 function find_schemadn(ldb)
1226 var attrs = new Array("schemaNamingContext");
1227 var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
1228 assert(res.error == 0);
1229 assert(res.msgs.length == 1);
1230 return res.msgs[0].schemaNamingContext;
1233 /* use command line creds if available */
1234 ldb.credentials = options.get_credentials();
1235 gc_ldb.credentials = options.get_credentials();
1237 var ok = ldb.connect("ldap://" + host);
1238 var base_dn = find_basedn(ldb);
1240 var configuration_dn = find_configurationdn(ldb);
1241 var schema_dn = find_schemadn(ldb);
1243 println("baseDN: %s\n", base_dn);
1245 var ok = gc_ldb.connect("ldap://" + host + ":3268");
1250 basic_tests(ldb, gc_ldb, base_dn, configuration_dn, schema_dn)
1252 basedn_tests(ldb, gc_ldb)