Do basic wildcard searching in the ejs LDAP test.
[metze/old/v4-0-wb-ndr.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         ok = ldb.add("
80 dn: cn=ldaptestuser2,cn=users," + base_dn + "
81 objectClass: person
82 objectClass: user
83 cn: LDAPtestUSER2
84 ");
85         if (!ok) {
86                 ok = ldb.del("cn=ldaptestuser2,cn=users," + base_dn);
87                 if (!ok) {
88                         println(ldb.errstring());
89                         assert(ok);
90                 }
91                 ok = ldb.add("
92 dn: cn=ldaptestuser2,cn=users," + base_dn + "
93 objectClass: person
94 objectClass: user
95 cn: LDAPtestUSER2
96 ");
97                 if (!ok) {
98                         println(ldb.errstring());
99                         assert(ok);
100                 }
101         }
102
103         ok = ldb.add("
104 dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + "
105 objectClass: user
106 ");
107         if (!ok) {
108                 ok = ldb.del("cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn);
109                 if (!ok) {
110                         println(ldb.errstring());
111                         assert(ok);
112                 }
113         ok = ldb.add("
114 dn: cn=ldaptestutf8user èùéìòà ,cn=users," + base_dn + "
115 objectClass: user
116 ");
117                 if (!ok) {
118                         println(ldb.errstring());
119                         assert(ok);
120                 }
121         }
122
123         ok = ldb.add("
124 dn: cn=ldaptestutf8user2  èùéìòà ,cn=users," + base_dn + "
125 objectClass: user
126 ");
127         if (!ok) {
128                 ok = ldb.del("cn=ldaptestutf8user2  èùéìòà ,cn=users," + base_dn);
129                 if (!ok) {
130                         println(ldb.errstring());
131                         assert(ok);
132                 }
133         ok = ldb.add("
134 dn: cn=ldaptestutf8user2  èùéìòà ,cn=users," + base_dn + "
135 objectClass: user
136 ");
137                 if (!ok) {
138                         println(ldb.errstring());
139                         assert(ok);
140                 }
141         }
142
143         println("Testing ldb.search for (&(cn=ldaptestuser)(objectClass=user))");
144         var res = ldb.search("(&(cn=ldaptestuser)(objectClass=user))");
145         if (res.length != 1) {
146                 println("Could not find (&(cn=ldaptestuser)(objectClass=user))");
147                 assert(res.length == 1);
148         }
149
150         assert(res[0].dn == "cn=ldaptestuser,cn=users," + base_dn);
151         assert(res[0].cn == "ldaptestuser");
152         assert(res[0].name == "ldaptestuser");
153         assert(res[0].objectClass[0] == "top");
154         assert(res[0].objectClass[1] == "person");
155         assert(res[0].objectClass[2] == "organizationalPerson");
156         assert(res[0].objectClass[3] == "user");
157         assert(res[0].objectGUID != undefined);
158         assert(res[0].whenCreated != undefined);
159         assert(res[0].objectCategory == "cn=Person,cn=Schema,cn=Configuration," + base_dn);
160
161         println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))");
162         var res2 = ldb.search("(&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))");
163         if (res2.length != 1) {
164                 println("Could not find (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))");
165                 assert(res2.length == 1);
166         }
167
168         assert(res[0].dn == res2[0].dn);
169
170         println("Testing ldb.search for (&(cn=ldaptestuser)(objectCategory=PerSon))");
171         var res3 = ldb.search("(&(cn=ldaptestuser)(objectCategory=PerSon))");
172         if (res.length != 1) {
173                 println("Could not find (&(cn=ldaptestuser)(objectCategory=PerSon))");
174                 assert(res.length == 1);
175         }
176
177         assert(res[0].dn == res3[0].dn);
178
179         ok = ldb.del(res[0].dn);
180         if (!ok) {
181                 println(ldb.errstring());
182                 assert(ok);
183         }
184
185         println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectClass=user))");
186         var res = ldb.search("(&(cn=ldaptestcomputer)(objectClass=user))");
187         if (res.length != 1) {
188                 println("Could not find (&(cn=ldaptestuser)(objectClass=user))");
189                 assert(res.length == 1);
190         }
191
192         assert(res[0].dn == "cn=ldaptestcomputer,cn=computers," + base_dn);
193         assert(res[0].cn == "ldaptestcomputer");
194         assert(res[0].name == "ldaptestcomputer");
195         assert(res[0].objectClass[0] == "top");
196         assert(res[0].objectClass[1] == "person");
197         assert(res[0].objectClass[2] == "organizationalPerson");
198         assert(res[0].objectClass[3] == "user");
199         assert(res[0].objectClass[4] == "computer");
200         assert(res[0].objectGUID != undefined);
201         assert(res[0].whenCreated != undefined);
202         assert(res[0].objectCategory == "cn=Computer,cn=Schema,cn=Configuration," + base_dn);
203
204         println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))");
205         var res2 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))");
206         if (res2.length != 1) {
207                 println("Could not find (&(cn=ldaptestcomputer)(objectCategory=cn=computer,cn=schema,cn=configuration," + base_dn + "))");
208                 assert(res2.length == 1);
209         }
210
211         assert(res[0].dn == res2[0].dn);
212
213         println("Testing ldb.search for (&(cn=ldaptestcomputer)(objectCategory=compuTER))");
214         var res3 = ldb.search("(&(cn=ldaptestcomputer)(objectCategory=compuTER))");
215         if (res3.length != 1) {
216                 println("Could not find (&(cn=ldaptestcomputer)(objectCategory=compuTER))");
217                 assert(res3.length == 1);
218         }
219
220         assert(res[0].dn == res3[0].dn);
221
222         println("Testing ldb.search for (&(cn=ldaptest*computer)(objectCategory=compuTER))");
223         var res4 = ldb.search("(&(cn=ldaptest*computer)(objectCategory=compuTER))");
224         if (res4.length != 1) {
225                 println("Could not find (&(cn=ldaptest*computer)(objectCategory=compuTER))");
226                 assert(res4.length == 1);
227         }
228
229         assert(res[0].dn == res4[0].dn);
230
231         println("Testing ldb.search for (&(cn=ldaptestcomput*)(objectCategory=compuTER))");
232         var res5 = ldb.search("(&(cn=ldaptestcomput*)(objectCategory=compuTER))");
233         if (res5.length != 1) {
234                 println("Could not find (&(cn=ldaptestcomput*)(objectCategory=compuTER))");
235                 assert(res5.length == 1);
236         }
237
238         assert(res[0].dn == res5[0].dn);
239
240         println("Testing ldb.search for (&(cn=*daptestcomputer)(objectCategory=compuTER))");
241         var res6 = ldb.search("(&(cn=*daptestcomputer)(objectCategory=compuTER))");
242         if (res6.length != 1) {
243                 println("Could not find (&(cn=*daptestcomputer)(objectCategory=compuTER))");
244                 assert(res6.length == 1);
245         }
246
247         assert(res[0].dn == res6[0].dn);
248
249         ok = ldb.del(res[0].dn);
250         if (!ok) {
251                 println(ldb.errstring());
252                 assert(ok);
253         }
254
255         println("Testing ldb.search for (&(cn=ldaptestUSer2)(objectClass=user))");
256         var res = ldb.search("(&(cn=ldaptestUSer2)(objectClass=user))");
257         if (res.length != 1) {
258                 println("Could not find (&(cn=ldaptestUSer2)(objectClass=user))");
259                 assert(res.length == 1);
260         }
261
262         assert(res[0].dn == "cn=ldaptestuser2,cn=users," + base_dn);
263         assert(res[0].cn == "ldaptestuser2");
264         assert(res[0].name == "ldaptestuser2");
265         assert(res[0].objectClass[0] == "top");
266         assert(res[0].objectClass[1] == "person");
267         assert(res[0].objectClass[2] == "organizationalPerson");
268         assert(res[0].objectClass[3] == "user");
269         assert(res[0].objectGUID != undefined);
270         assert(res[0].whenCreated != undefined);
271
272         ok = ldb.del(res[0].dn);
273         if (!ok) {
274                 println(ldb.errstring());
275                 assert(ok);
276         }
277
278         println("Testing ldb.search for (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
279         var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
280
281         if (res.length != 1) {
282                 println("Could not find (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
283                 assert(res.length == 1);
284         }
285
286         assert(res[0].dn == "cn=ldaptestutf8user èùéìòà,cn=users," + base_dn);
287         assert(res[0].cn == "ldaptestutf8user èùéìòà");
288         assert(res[0].name == "ldaptestutf8user èùéìòà");
289         assert(res[0].objectClass[0] == "top");
290         assert(res[0].objectClass[1] == "person");
291         assert(res[0].objectClass[2] == "organizationalPerson");
292         assert(res[0].objectClass[3] == "user");
293         assert(res[0].objectGUID != undefined);
294         assert(res[0].whenCreated != undefined);
295
296         ok = ldb.del(res[0].dn);
297         if (!ok) {
298                 println(ldb.errstring());
299                 assert(ok);
300         }
301
302         println("Testing ldb.search for (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))");
303         var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
304
305         if (res.length != 1) {
306                 println("Could not find (expect space collapse, win2k3 fails) (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))");
307         } else {
308                 assert(res[0].dn == "cn=ldaptestutf8user2 èùéìòà,cn=users," + base_dn);
309                 assert(res[0].cn == "ldaptestutf8user2 èùéìòà");
310         }
311
312 }
313
314 function find_basedn(ldb)
315 {
316     var attrs = new Array("defaultNamingContext");
317     var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
318     assert(res.length == 1);
319     return res[0].defaultNamingContext;
320 }
321
322 /* use command line creds if available */
323 ldb.credentials = options.get_credentials();
324
325 var ok = ldb.connect("ldap://" + host);
326 var base_dn = find_basedn(ldb);
327
328 printf("baseDN: %s\n", base_dn);
329
330 basic_tests(ldb, base_dn)
331
332 return 0;