]> git.sur5r.net Git - openldap/blob - tests/scripts/sql-test900-write
Merge remote-tracking branch 'origin/mdb.RE/0.9'
[openldap] / tests / scripts / sql-test900-write
1 #! /bin/sh
2 # $OpenLDAP$
3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 ##
5 ## Copyright 1998-2015 The OpenLDAP Foundation.
6 ## All rights reserved.
7 ##
8 ## Redistribution and use in source and binary forms, with or without
9 ## modification, are permitted only as authorized by the OpenLDAP
10 ## Public License.
11 ##
12 ## A copy of this license is available in the file LICENSE in the
13 ## top-level directory of the distribution or, alternatively, at
14 ## <http://www.OpenLDAP.org/license.html>.
15
16 echo "running defines.sh"
17 . $SRCDIR/scripts/defines.sh
18
19 if test $BACKSQL = "sqlno" ; then 
20         echo "SQL backend not available, test skipped"
21         exit 0
22 fi 
23
24 if test $RDBMS = "rdbmsno" ; then
25         echo "SQL test not requested, test skipped"
26         exit 0
27 fi
28
29 if test "${RDBMSWRITE}" != "yes"; then
30         echo "write test disabled for ${RDBMS}; set SLAPD_USE_SQLWRITE=yes to enable"
31         exit 0
32 fi
33
34 mkdir -p $TESTDIR
35
36 echo "Starting slapd on TCP/IP port $PORT1..."
37 . $CONFFILTER $BACKEND $MONITORDB < $SQLCONF > $CONF1
38 $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
39 PID=$!
40 if test $WAIT != 0 ; then
41     echo PID $PID
42     read foo
43 fi
44 KILLPIDS="$PID"
45
46 echo "Testing SQL backend write operations..."
47 for i in 0 1 2 3 4 5; do
48         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
49                 'objectclass=*' > /dev/null 2>&1
50         RC=$?
51         if test $RC = 0 ; then
52                 break
53         fi
54         echo "Waiting 5 seconds for slapd to start..."
55         sleep 5
56 done
57
58 if test $RC != 0 ; then
59         echo "ldapsearch failed ($RC)!"
60         test $KILLSERVERS != no && kill -HUP $KILLPIDS
61         exit $RC
62 fi
63
64 cat /dev/null > $SEARCHOUT
65
66 BASEDN="dc=example,dc=com"
67
68 echo "Using ldapsearch to retrieve all the entries..."
69 echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT
70 $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \
71          "objectClass=*" >> $SEARCHOUT 2>&1
72
73 RC=$?
74 if test $RC != 0 ; then
75         echo "ldapsearch failed ($RC)!"
76         test $KILLSERVERS != no && kill -HUP $KILLPIDS
77         exit $RC
78 fi
79
80 case ${RDBMS} in
81         # list here the RDBMSes whose mapping allows writes
82 pgsql|ibmdb2)
83         MANAGERDN="cn=Manager,${BASEDN}"
84         echo "Testing add..."
85         $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
86                 -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
87 version: 1
88
89 # Adding an organization...
90 dn: o=An Org,${BASEDN}
91 changetype: add
92 objectClass: organization
93 o: An Org
94
95 # Adding an organization with an "auxiliary" objectClass..
96 dn: dc=subnet,${BASEDN}
97 changetype: add
98 objectClass: organization
99 objectClass: dcObject
100 o: SubNet
101 dc: subnet
102
103 # Adding another organization with an "auxiliary" objectClass..
104 dn: dc=subnet2,${BASEDN}
105 changetype: add
106 objectClass: organization
107 objectClass: dcObject
108 o: SubNet 2
109 dc: subnet2
110
111 # Adding a person...
112 dn: cn=Lev Tolstoij,${BASEDN}
113 changetype: add
114 objectClass: inetOrgPerson
115 cn: Lev Tolstoij
116 sn: Tolstoij
117 givenName: Lev
118 telephoneNumber: +39 02 XXXX YYYY
119 telephoneNumber: +39 02 XXXX ZZZZ
120 userPassword: tanja
121
122 # Adding a person with an "auxiliary" objectClass...
123 dn: cn=Some One,${BASEDN}
124 changetype: add
125 objectClass: inetOrgPerson
126 objectClass: simpleSecurityObject
127 cn: Some One
128 sn: One
129 givenName: Some
130 telephoneNumber: +1 800 900 1234
131 telephoneNumber: +1 800 900 1235
132 userPassword: someone
133
134 # Adding a person in another subtree...
135 dn: cn=SubNet User,dc=subnet,${BASEDN}
136 changetype: add
137 objectClass: inetOrgPerson
138 cn: SubNet User
139 sn: User
140 givenName: SubNet
141
142 # Adding a document...
143 dn: documentTitle=War and Peace,${BASEDN}
144 changetype: add
145 objectClass: document
146 description: Historical novel
147 documentTitle: War and Peace
148 documentAuthor: cn=Lev Tolstoij,dc=example,dc=com
149 documentIdentifier: document 3
150 EOMODS
151
152         RC=$?
153         if test $RC != 0 ; then
154                 echo "ldapmodify failed ($RC)!"
155                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
156                 exit $RC
157         fi
158
159         echo "Using ldapsearch to retrieve all the entries..."
160         echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT
161         $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \
162                  "objectClass=*" >> $SEARCHOUT 2>&1
163
164         RC=$?
165         if test $RC != 0 ; then
166                 echo "ldapsearch failed ($RC)!"
167                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
168                 exit $RC
169         fi
170
171         echo "Testing modify..."
172         $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
173                 -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
174 version: 1
175
176 # Deleting all telephone numbers...
177 dn: cn=Some One,${BASEDN}
178 changetype: modify
179 delete: telephoneNumber
180 -
181
182 # Adding a telephone number...
183 dn: cn=Mitya Kovalev,${BASEDN}
184 changetype: modify
185 add: telephoneNumber
186 telephoneNumber: +1 800 123 4567
187 -
188
189 # Deleting a specific telephone number and adding a new one...
190 dn: cn=Lev Tolstoij,${BASEDN}
191 changetype: modify
192 delete: telephoneNumber
193 telephoneNumber: +39 02 XXXX YYYY
194 -
195 add: telephoneNumber
196 telephoneNumber: +39 333 ZZZ 1234
197 -
198
199 # Adding an author to a document...
200 dn: documentTitle=book1,${BASEDN}
201 changetype: modify
202 add: documentAuthor
203 documentAuthor: cn=Lev Tolstoij,${BASEDN}
204 -
205
206 # Adding an author to another document...
207 dn: documentTitle=book2,${BASEDN}
208 changetype: modify
209 add: documentAuthor
210 documentAuthor: cn=Lev Tolstoij,${BASEDN}
211 -
212
213 # Adding an "auxiliary" objectClass...
214 dn: cn=Mitya Kovalev,${BASEDN}
215 changetype: modify
216 add: objectClass
217 objectClass: simpleSecurityObject
218 -
219
220 # Deleting an "auxiliary" objectClass...
221 dn: cn=Some One,${BASEDN}
222 changetype: modify
223 delete: objectClass
224 objectClass: simpleSecurityObject
225 -
226
227 # Deleting userPasswords
228 dn: cn=Lev Tolstoij,${BASEDN}
229 changetype: modify
230 delete: userPassword
231 -
232 EOMODS
233
234         RC=$?
235         if test $RC != 0 ; then
236                 echo "ldapmodify failed ($RC)!"
237                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
238                 exit $RC
239         fi
240
241         echo "Using ldapsearch to retrieve all the entries..."
242         echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT
243         $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \
244                  "objectClass=*" >> $SEARCHOUT 2>&1
245
246         RC=$?
247         if test $RC != 0 ; then
248                 echo "ldapsearch failed ($RC)!"
249                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
250                 exit $RC
251         fi
252
253         echo "Testing delete..."
254         $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
255                 -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
256 version: 1
257
258 # Deleting a person...
259 dn: cn=Torvlobnor Puzdoy,${BASEDN}
260 changetype: delete
261
262 # Deleting a document...
263 dn: documentTitle=book1,${BASEDN}
264 changetype: delete
265
266 # Deleting an organization with an "auxiliary" objectClass...
267 dn: dc=subnet2,${BASEDN}
268 changetype: delete
269 EOMODS
270
271         RC=$?
272         if test $RC != 0 ; then
273                 echo "ldapmodify failed ($RC)!"
274                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
275                 exit $RC
276         fi
277
278         echo "Using ldapsearch to retrieve all the entries..."
279         echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT
280         $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \
281                  "objectClass=*" >> $SEARCHOUT 2>&1
282
283         RC=$?
284         if test $RC != 0 ; then
285                 echo "ldapsearch failed ($RC)!"
286                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
287                 exit $RC
288         fi
289
290         echo "Testing rename..."
291         $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
292                 -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
293 version: 1
294
295 # Renaming an organization...
296 dn: o=An Org,${BASEDN}
297 changetype: modrdn
298 newrdn: o=Renamed Org
299 deleteoldrdn: 1
300
301 # Moving a person to another subtree...
302 dn: cn=Lev Tolstoij,${BASEDN}
303 changetype: modrdn
304 newrdn: cn=Lev Tolstoij
305 deleteoldrdn: 0
306 newsuperior: dc=subnet,${BASEDN}
307
308 # Renaming a book...
309 dn: documentTitle=book2,${BASEDN}
310 changetype: modrdn
311 newrdn: documentTitle=Renamed Book
312 deleteoldrdn: 1
313 EOMODS
314
315         RC=$?
316         if test $RC != 0 ; then
317                 echo "ldapmodify failed ($RC)!"
318                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
319                 exit $RC
320         fi
321
322         echo "Using ldapsearch to retrieve all the entries..."
323         echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT
324         $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \
325                  "objectClass=*" >> $SEARCHOUT 2>&1
326
327         RC=$?
328         if test $RC != 0 ; then
329                 echo "ldapsearch failed ($RC)!"
330                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
331                 exit $RC
332         fi
333
334         echo "Adding a child to a referral (should fail)..."
335         $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
336                 -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
337 version: 1
338
339 dn: cn=Should Fail,ou=Referral,${BASEDN}
340 changetype: add
341 objectClass: inetOrgPerson
342 cn: Should Fail
343 sn: Fail
344 telephoneNumber: +39 02 23456789
345 EOMODS
346
347         RC=$?
348         if test $RC = 0 ; then
349                 echo "ldapmodify should have failed ($RC)!"
350                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
351                 exit 1
352         fi
353
354         echo "Modifying a referral (should fail)..."
355         $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
356                 -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
357 version: 1
358
359 dn: ou=Referral,${BASEDN}
360 changetype: modify
361 replace: ref
362 ref: ldap://localhost:9009/
363 -
364 EOMODS
365
366         RC=$?
367         if test $RC = 0 ; then
368                 echo "ldapmodify should have failed ($RC)!"
369                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
370                 exit 1
371         fi
372
373         echo "Renaming a referral (should fail)..."
374         $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
375                 -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
376 version: 1
377
378 dn: ou=Referral,${BASEDN}
379 changetype: modrdn
380 newrdn: ou=Renamed Referral
381 deleteoldrdn: 1
382 EOMODS
383
384         RC=$?
385         if test $RC = 0 ; then
386                 echo "ldapmodify should have failed ($RC)!"
387                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
388                 exit 1
389         fi
390
391         echo "Deleting a referral (should fail)..."
392         $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
393                 -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
394 version: 1
395
396 dn: ou=Referral,${BASEDN}
397 changetype: delete
398 EOMODS
399
400         RC=$?
401         if test $RC = 0 ; then
402                 echo "ldapmodify should have failed ($RC)!"
403                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
404                 exit 1
405         fi
406
407         echo "Adding a referral..."
408         $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
409                 -h $LOCALHOST -p $PORT1 -M >> $TESTOUT 2>&1 << EOMODS
410 version: 1
411
412 dn: ou=Another Referral,${BASEDN}
413 changetype: add
414 objectClass: referral
415 objectClass: extensibleObject
416 ou: Another Referral
417 ref: ldap://localhost:9009/
418 EOMODS
419
420         RC=$?
421         if test $RC != 0 ; then
422                 echo "ldapmodify failed ($RC)!"
423                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
424                 exit $RC
425         fi
426
427         echo "Modifying a referral with manageDSAit..."
428         $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
429                 -h $LOCALHOST -p $PORT1 -M >> $TESTOUT 2>&1 << EOMODS
430 version: 1
431
432 dn: ou=Referral,${BASEDN}
433 changetype: modify
434 replace: ref
435 ref: ldap://localhost:9009/
436 -
437 EOMODS
438
439         RC=$?
440         if test $RC != 0 ; then
441                 echo "ldapmodify failed ($RC)!"
442                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
443                 exit $RC
444         fi
445
446         echo "Using ldapsearch to retrieve the modified entry..."
447         echo "# Using ldapsearch to retrieve the modified entry..." >> $SEARCHOUT
448         $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "ou=Referral,$BASEDN" -M \
449                  "objectClass=*" '*' ref >> $SEARCHOUT 2>&1
450
451         RC=$?
452         if test $RC != 0 ; then
453                 echo "ldapsearch failed ($RC)!"
454                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
455                 exit $RC
456         fi
457
458         echo "Renaming a referral with manageDSAit..."
459         $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
460                 -h $LOCALHOST -p $PORT1 -M >> $TESTOUT 2>&1 << EOMODS
461 version: 1
462
463 dn: ou=Referral,${BASEDN}
464 changetype: modrdn
465 newrdn: ou=Renamed Referral
466 deleteoldrdn: 1
467 EOMODS
468
469         RC=$?
470         if test $RC != 0 ; then
471                 echo "ldapmodify failed ($RC)!"
472                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
473                 exit $RC
474         fi
475
476         echo "Using ldapsearch to retrieve the renamed entry..."
477         echo "# Using ldapsearch to retrieve the renamed entry..." >> $SEARCHOUT
478         $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "ou=Renamed Referral,$BASEDN" -M \
479                  "objectClass=*" '*' ref >> $SEARCHOUT 2>&1
480
481         RC=$?
482         if test $RC != 0 ; then
483                 echo "ldapsearch failed ($RC)!"
484                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
485                 exit $RC
486         fi
487
488         echo "Deleting a referral with manageDSAit..."
489         $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
490                 -h $LOCALHOST -p $PORT1 -M >> $TESTOUT 2>&1 << EOMODS
491 version: 1
492
493 dn: ou=Renamed Referral,${BASEDN}
494 changetype: delete
495 EOMODS
496
497         RC=$?
498         if test $RC != 0 ; then
499                 echo "ldapmodify failed ($RC)!"
500                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
501                 exit $RC
502         fi
503
504         BINDDN="cn=Mitya Kovalev,${BASEDN}"
505         BINDPW="mit"
506         NEWPW="newsecret"
507         echo "Testing passwd change..."
508         $LDAPPASSWD -h $LOCALHOST -p $PORT1 \
509                 -D "${BINDDN}" -w ${BINDPW} -s ${NEWPW} \
510                 "$BINDDN" >> $TESTOUT 2>&1
511
512         RC=$?
513         if test $RC != 0 ; then
514                 echo "ldappasswd failed ($RC)!"
515                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
516                 exit $RC
517         fi
518
519         echo -n "Testing bind with new secret... "
520         $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $NEWPW
521         RC=$?
522         if test $RC != 0 ; then
523                 echo "ldapwhoami failed ($RC)!"
524                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
525                 exit $RC
526         fi
527
528         BINDDN="cn=Some One,${BASEDN}"
529         BINDPW="someone"
530         echo -n "Testing bind with newly added user... "
531         $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW
532         RC=$?
533         if test $RC != 0 ; then
534                 echo "ldapwhoami failed ($RC)!"
535                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
536                 exit $RC
537         fi
538
539         echo "Using ldapsearch to retrieve all the entries..."
540         echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT
541         $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \
542                  "objectClass=*" >> $SEARCHOUT 2>&1
543
544         RC=$?
545         if test $RC != 0 ; then
546                 echo "ldapsearch failed ($RC)!"
547                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
548                 exit $RC
549         fi
550
551         echo "Filtering ldapsearch results..."
552         $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
553         echo "Filtering modified ldif..."
554         $LDIFFILTER < $SQLWRITE > $LDIFFLT
555         echo "Comparing filter output..."
556         $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
557
558         if test $? != 0 ; then
559                 echo "comparison failed - SQL mods search didn't succeed"
560                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
561                 exit 1
562         fi
563         ;;
564
565 *)
566         echo "apparently ${RDBMS} does not support writes; skipping..."
567         ;;
568 esac
569
570 test $KILLSERVERS != no && kill -HUP $KILLPIDS
571
572 echo ">>>>> Test succeeded"
573 exit 0