0e7632aea1773885fd1cadd417b47394ff71d14f
[ira/wip.git] / testprogs / ejs / ldap.js
1 #!/bin/sh
2 exec smbscript "$0" ${1+"$@"}
3 /*
4         test certin LDAP behaviours
5 */
6
7 var ldb = ldb_init();
8
9 var options = GetOptions(ARGV, 
10                 "POPT_AUTOHELP",
11                 "POPT_COMMON_SAMBA",
12                 "POPT_COMMON_CREDENTIALS");
13 if (options == undefined) {
14    println("Failed to parse options");
15    return -1;
16 }
17
18 libinclude("base.js");
19
20 if (options.ARGV.length != 1) {
21    println("Usage: ldap.js <HOST>");
22    return -1;
23 }
24
25 var host = options.ARGV[0];
26
27 function basic_tests(ldb, base_dn)
28 {
29         println("Running basic tests");
30
31         ldb.del("cn=ldaptestuser,cn=users," + base_dn);
32
33         var ok = ldb.add("
34 dn: cn=ldaptestuser,cn=users," + base_dn + "
35 objectClass: user
36 objectClass: person
37 cn: LDAPtestUSER
38 ");
39         if (!ok) {
40                 ok = ldb.del("cn=ldaptestuser,cn=users," + base_dn);
41                 if (!ok) {
42                         println(ldb.errstring());
43                         assert(ok);
44                 }
45                 ok = ldb.add("
46 dn: cn=ldaptestuser,cn=users," + base_dn + "
47 objectClass: user
48 objectClass: person
49 cn: LDAPtestUSER
50 ");
51                 if (!ok) {
52                         println(ldb.errstring());
53                         assert(ok);
54                 }
55         }
56
57         var ok = ldb.add("
58 dn: cn=ldaptestcomputer,cn=computers," + base_dn + "
59 objectClass: computer
60 cn: LDAPtestCOMPUTER
61 ");
62         if (!ok) {
63                 ok = ldb.del("cn=ldaptestcomputer,cn=computers," + base_dn);
64                 if (!ok) {
65                         println(ldb.errstring());
66                         assert(ok);
67                 }
68                 ok = ldb.add("
69 dn: cn=ldaptestcomputer,cn=computers," + base_dn + "
70 objectClass: computer
71 cn: LDAPtestCOMPUTER
72 ");
73                 if (!ok) {
74                         println(ldb.errstring());
75                         assert(ok);
76                 }
77         }
78
79         var ok = ldb.add("
80 dn: cn=ldaptest2computer,cn=computers," + base_dn + "
81 objectClass: computer
82 cn: LDAPtest2COMPUTER
83 userAccountControl: 4096
84 ");
85         if (!ok) {
86                 ok = ldb.del("cn=ldaptest2computer,cn=computers," + base_dn);
87                 if (!ok) {
88                         println(ldb.errstring());
89                         assert(ok);
90                 }
91                 ok = ldb.add("
92 dn: cn=ldaptest2computer,cn=computers," + base_dn + "
93 objectClass: computer
94 cn: LDAPtest2COMPUTER
95 userAccountControl: 4096
96 ");
97                 if (!ok) {
98                         println(ldb.errstring());
99                         assert(ok);
100                 }
101         }
102
103         ok = ldb.add("
104 dn: cn=ldaptestuser2,cn=users," + base_dn + "
105 objectClass: person
106 objectClass: user
107 cn: LDAPtestUSER2
108 ");
109         if (!ok) {
110                 ok = ldb.del("cn=ldaptestuser2,cn=users," + base_dn);
111                 if (!ok) {
112                         println(ldb.errstring());
113                         assert(ok);
114                 }
115                 ok = ldb.add("
116 dn: cn=ldaptestuser2,cn=users," + base_dn + "
117 objectClass: person
118 objectClass: user
119 cn: LDAPtestUSER2
120 ");
121                 if (!ok) {
122                         println(ldb.errstring());
123                         assert(ok);
124                 }
125         }
126
127         ok = ldb.add("
128 dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + "
129 objectClass: user
130 ");
131         if (!ok) {
132                 ok = ldb.del("cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn);
133                 if (!ok) {
134                         println(ldb.errstring());
135                         assert(ok);
136                 }
137         ok = ldb.add("
138 dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + "
139 objectClass: user
140 ");
141                 if (!ok) {
142                         println(ldb.errstring());
143                         assert(ok);
144                 }
145         }
146
147         ok = ldb.add("
148 dn: cn=ldaptestutf8user2  èùéìòà ,cn=users," + base_dn + "
149 objectClass: user
150 ");
151         if (!ok) {
152                 ok = ldb.del("cn=ldaptestutf8user2  èùéìòà ,cn=users," + base_dn);
153                 if (!ok) {
154                         println(ldb.errstring());
155                         assert(ok);
156                 }
157         ok = ldb.add("
158 dn: cn=ldaptestutf8user2  èùéìòà ,cn=users," + base_dn + "
159 objectClass: user
160 ");
161                 if (!ok) {
162                         println(ldb.errstring());
163                         assert(ok);
164                 }
165         }
166
167         println("Testing ldb.search for (&(cn=ldaptestuser)(objectClass=user))");
168         var res = ldb.search("(&(cn=ldaptestuser)(objectClass=user))");
169         if (res.length != 1) {
170                 println("Could not find (&(cn=ldaptestuser)(objectClass=user))");
171                 assert(res.length == 1);
172         }
173
174         assert(res[0].dn == "cn=ldaptestuser,cn=users," + base_dn);
175         assert(res[0].cn == "ldaptestuser");
176         assert(res[0].name == "ldaptestuser");
177         assert(res[0].objectClass[0] == "top");
178         assert(res[0].objectClass[1] == "person");
179         assert(res[0].objectClass[2] == "organizationalPerson");
180         assert(res[0].objectClass[3] == "user");
181         assert(res[0].objectGUID != undefined);
182         assert(res[0].whenCreated != undefined);
183         assert(res[0].objectCategory == "cn=Person,cn=Schema,cn=Configuration," + base_dn);
184         assert(res[0].sAMAccountType == 805306368);
185 //      assert(res[0].userAccountControl == 546);
186
187         println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))");
188         var res2 = ldb.search("(&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))");
189         if (res2.length != 1) {
190                 println("Could not find (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))");
191                 assert(res2.length == 1);
192         }
193
194         assert(res[0].dn == res2[0].dn);
195
196         println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon))");
197         var res3 = ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))");
198         if (res.length != 1) {
199                 println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon))");
200                 assert(res.length == 1);
201         }
202
203         assert(res[0].dn == res3[0].dn);
204
205         ok = ldb.del(res[0].dn);
206         if (!ok) {
207                 println(ldb.errstring());
208                 assert(ok);
209         }
210
211         println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectClass=user))");
212         var res = ldb.search("(&(cn=ldaptestcomputer)(objectClass=user))");
213         if (res.length != 1) {
214                 println("Could not find (&(cn=ldaptestuser)(objectClass=user))");
215                 assert(res.length == 1);
216         }
217
218         assert(res[0].dn == "cn=ldaptestcomputer,cn=computers," + base_dn);
219         assert(res[0].cn == "ldaptestcomputer");
220         assert(res[0].name == "ldaptestcomputer");
221         assert(res[0].objectClass[0] == "top");
222         assert(res[0].objectClass[1] == "person");
223         assert(res[0].objectClass[2] == "organizationalPerson");
224         assert(res[0].objectClass[3] == "user");
225         assert(res[0].objectClass[4] == "computer");
226         assert(res[0].objectGUID != undefined);
227         assert(res[0].whenCreated != undefined);
228         assert(res[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn);
229 //      assert(res[0].sAMAccountType == 805306368);
230 //      assert(res[0].userAccountControl == 546);
231
232         println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))");
233         var res2 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))");
234         if (res2.length != 1) {
235                 println("Could not find (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))");
236                 assert(res2.length == 1);
237         }
238
239         assert(res[0].dn == res2[0].dn);
240
241         println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=compuTER))");
242         var res3 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=compuTER))");
243         if (res3.length != 1) {
244                 println("Could not find (&(cn=ldaptestcomputer)(objectCategory=compuTER))");
245                 assert(res3.length == 1);
246         }
247
248         assert(res[0].dn == res3[0].dn);
249
250         println("Testing ldb.search for (&(cn=ldaptestcomp*r)(objectCategory=compuTER))");
251         var res4 = ldb.search("(&(cn=ldaptestcomp*r)(objectCategory=compuTER))");
252         if (res4.length != 1) {
253                 println("Could not find (&(cn=ldaptestcomp*r)(objectCategory=compuTER))");
254                 assert(res4.length == 1);
255         }
256
257         assert(res[0].dn == res4[0].dn);
258
259         println("Testing ldb.search for (&(cn=ldaptestcomput*)(objectCategory=compuTER))");
260         var res5 = ldb.search("(&(cn=ldaptestcomput*)(objectCategory=compuTER))");
261         if (res5.length != 1) {
262                 println("Could not find (&(cn=ldaptestcomput*)(objectCategory=compuTER))");
263                 assert(res5.length == 1);
264         }
265
266         assert(res[0].dn == res5[0].dn);
267
268         println("Testing ldb.search for (&(cn=*daptestcomputer)(objectCategory=compuTER))");
269         var res6 = ldb.search("(&(cn=*daptestcomputer)(objectCategory=compuTER))");
270         if (res6.length != 1) {
271                 println("Could not find (&(cn=*daptestcomputer)(objectCategory=compuTER))");
272                 assert(res6.length == 1);
273         }
274
275         assert(res[0].dn == res6[0].dn);
276
277         ok = ldb.del(res[0].dn);
278         if (!ok) {
279                 println(ldb.errstring());
280                 assert(ok);
281         }
282
283         println("Testing ldb.search for (&(cn=ldaptest2computer)(objectClass=user))");
284         var res = ldb.search("(&(cn=ldaptest2computer)(objectClass=user))");
285         if (res.length != 1) {
286                 println("Could not find (&(cn=ldaptest2computer)(objectClass=user))");
287                 assert(res.length == 1);
288         }
289
290         assert(res[0].dn == "cn=ldaptest2computer,cn=computers," + base_dn);
291         assert(res[0].cn == "ldaptest2computer");
292         assert(res[0].name == "ldaptest2computer");
293         assert(res[0].objectClass[0] == "top");
294         assert(res[0].objectClass[1] == "person");
295         assert(res[0].objectClass[2] == "organizationalPerson");
296         assert(res[0].objectClass[3] == "user");
297         assert(res[0].objectClass[4] == "computer");
298         assert(res[0].objectGUID != undefined);
299         assert(res[0].whenCreated != undefined);
300         assert(res[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn);
301         assert(res[0].sAMAccountType == 805306369);
302 //      assert(res[0].userAccountControl == 4098);
303
304
305         println("Testing ldb.search for (&(cn=ldaptestUSer2)(objectClass=user))");
306         var res = ldb.search("(&(cn=ldaptestUSer2)(objectClass=user))");
307         if (res.length != 1) {
308                 println("Could not find (&(cn=ldaptestUSer2)(objectClass=user))");
309                 assert(res.length == 1);
310         }
311
312         assert(res[0].dn == "cn=ldaptestuser2,cn=users," + base_dn);
313         assert(res[0].cn == "ldaptestuser2");
314         assert(res[0].name == "ldaptestuser2");
315         assert(res[0].objectClass[0] == "top");
316         assert(res[0].objectClass[1] == "person");
317         assert(res[0].objectClass[2] == "organizationalPerson");
318         assert(res[0].objectClass[3] == "user");
319         assert(res[0].objectGUID != undefined);
320         assert(res[0].whenCreated != undefined);
321
322         ok = ldb.del(res[0].dn);
323         if (!ok) {
324                 println(ldb.errstring());
325                 assert(ok);
326         }
327
328         println("Testing ldb.search for (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
329         var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
330
331         if (res.length != 1) {
332                 println("Could not find (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
333                 assert(res.length == 1);
334         }
335
336         assert(res[0].dn == "cn=ldaptestutf8user èùéìòà,cn=users," + base_dn);
337         assert(res[0].cn == "ldaptestutf8user èùéìòà");
338         assert(res[0].name == "ldaptestutf8user èùéìòà");
339         assert(res[0].objectClass[0] == "top");
340         assert(res[0].objectClass[1] == "person");
341         assert(res[0].objectClass[2] == "organizationalPerson");
342         assert(res[0].objectClass[3] == "user");
343         assert(res[0].objectGUID != undefined);
344         assert(res[0].whenCreated != undefined);
345
346         ok = ldb.del(res[0].dn);
347         if (!ok) {
348                 println(ldb.errstring());
349                 assert(ok);
350         }
351
352         println("Testing ldb.search for (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))");
353         var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
354
355         if (res.length != 1) {
356                 println("Could not find (expect space collapse, win2k3 fails) (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))");
357         } else {
358                 assert(res[0].dn == "cn=ldaptestutf8user2 èùéìòà,cn=users," + base_dn);
359                 assert(res[0].cn == "ldaptestutf8user2 èùéìòà");
360         }
361
362         println("Testing for highestCommittedUSN");
363         var attrs = new Array("highestCommittedUSN");
364         var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
365         assert(res.length == 1);
366         assert(res[0].highestCommittedUSN != undefined);
367         assert(res[0].highestCommittedUSN != 0);
368
369 }
370
371 function find_basedn(ldb)
372 {
373     var attrs = new Array("defaultNamingContext");
374     var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
375     assert(res.length == 1);
376     return res[0].defaultNamingContext;
377 }
378
379 /* use command line creds if available */
380 ldb.credentials = options.get_credentials();
381
382 var ok = ldb.connect("ldap://" + host);
383 var base_dn = find_basedn(ldb);
384
385 printf("baseDN: %s\n", base_dn);
386
387 basic_tests(ldb, base_dn)
388
389 return 0;