r16066: The OSX AD plugin uses objectCategory searches a lot, and uses them
[garming/samba-autobuild/.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 (res.length != 1) {
164                 println("Could not find (&(cn=ldaptestuser)(objectCategory=cn=person,cn=schema,cn=configuration," + base_dn + "))");
165                 assert(res.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         ok = ldb.del(res[0].dn);
223         if (!ok) {
224                 println(ldb.errstring());
225                 assert(ok);
226         }
227
228         println("Testing ldb.search for (&(cn=ldaptestUSer2)(objectClass=user))");
229         var res = ldb.search("(&(cn=ldaptestUSer2)(objectClass=user))");
230         if (res.length != 1) {
231                 println("Could not find (&(cn=ldaptestUSer2)(objectClass=user))");
232                 assert(res.length == 1);
233         }
234
235         assert(res[0].dn == "cn=ldaptestuser2,cn=users," + base_dn);
236         assert(res[0].cn == "ldaptestuser2");
237         assert(res[0].name == "ldaptestuser2");
238         assert(res[0].objectClass[0] == "top");
239         assert(res[0].objectClass[1] == "person");
240         assert(res[0].objectClass[2] == "organizationalPerson");
241         assert(res[0].objectClass[3] == "user");
242         assert(res[0].objectGUID != undefined);
243         assert(res[0].whenCreated != undefined);
244
245         ok = ldb.del(res[0].dn);
246         if (!ok) {
247                 println(ldb.errstring());
248                 assert(ok);
249         }
250
251         println("Testing ldb.search for (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
252         var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
253
254         if (res.length != 1) {
255                 println("Could not find (&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
256                 assert(res.length == 1);
257         }
258
259         assert(res[0].dn == "cn=ldaptestutf8user èùéìòà,cn=users," + base_dn);
260         assert(res[0].cn == "ldaptestutf8user èùéìòà");
261         assert(res[0].name == "ldaptestutf8user èùéìòà");
262         assert(res[0].objectClass[0] == "top");
263         assert(res[0].objectClass[1] == "person");
264         assert(res[0].objectClass[2] == "organizationalPerson");
265         assert(res[0].objectClass[3] == "user");
266         assert(res[0].objectGUID != undefined);
267         assert(res[0].whenCreated != undefined);
268
269         ok = ldb.del(res[0].dn);
270         if (!ok) {
271                 println(ldb.errstring());
272                 assert(ok);
273         }
274
275         println("Testing ldb.search for (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))");
276         var res = ldb.search("(&(cn=ldaptestutf8user ÈÙÉÌÒÀ)(objectClass=user))");
277
278         if (res.length != 1) {
279                 println("Could not find (expect space collapse, win2k3 fails) (&(cn=ldaptestutf8user2 ÈÙÉÌÒÀ)(objectClass=user))");
280         } else {
281                 assert(res[0].dn == "cn=ldaptestutf8user2 èùéìòà,cn=users," + base_dn);
282                 assert(res[0].cn == "ldaptestutf8user2 èùéìòà");
283         }
284
285 }
286
287 function find_basedn(ldb)
288 {
289     var attrs = new Array("defaultNamingContext");
290     var res = ldb.search("", "", ldb.SCOPE_BASE, attrs);
291     assert(res.length == 1);
292     return res[0].defaultNamingContext;
293 }
294
295 /* use command line creds if available */
296 ldb.credentials = options.get_credentials();
297
298 var ok = ldb.connect("ldap://" + host);
299 var base_dn = find_basedn(ldb);
300
301 printf("baseDN: %s\n", base_dn);
302
303 basic_tests(ldb, base_dn)
304
305 return 0;