Sync usage with man page.
[netbsd-mini2440.git] / external / bsd / openldap / dist / tests / scripts / sql-test900-write
blob748feccb3631effd740cd8d848601088cae7f173
1 #! /bin/sh
2 # $OpenLDAP: pkg/ldap/tests/scripts/sql-test900-write,v 1.12.2.3 2008/02/11 23:26:50 kurt Exp $
3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 ##
5 ## Copyright 1998-2008 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.
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>.
16 echo "running defines.sh"
17 . $SRCDIR/scripts/defines.sh
19 if test $BACKSQL = "sqlno" ; then
20 echo "SQL backend not available, test skipped"
21 exit 0
22 fi
24 if test $RDBMS = "rdbmsno" ; then
25 echo "SQL test not requested, test skipped"
26 exit 0
29 if test "${RDBMSWRITE}" != "yes"; then
30 echo "write test disabled for ${RDBMS}; set SLAPD_USE_SQLWRITE=yes to enable"
31 exit 0
34 mkdir -p $TESTDIR
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
44 KILLPIDS="$PID"
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
54 echo "Waiting 5 seconds for slapd to start..."
55 sleep 5
56 done
58 if test $RC != 0 ; then
59 echo "ldapsearch failed ($RC)!"
60 test $KILLSERVERS != no && kill -HUP $KILLPIDS
61 exit $RC
64 cat /dev/null > $SEARCHOUT
66 BASEDN="dc=example,dc=com"
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
73 RC=$?
74 if test $RC != 0 ; then
75 echo "ldapsearch failed ($RC)!"
76 test $KILLSERVERS != no && kill -HUP $KILLPIDS
77 exit $RC
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
89 # Adding an organization...
90 dn: o=An Org,${BASEDN}
91 changetype: add
92 objectClass: organization
93 o: An Org
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
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
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
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
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
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
152 RC=$?
153 if test $RC != 0 ; then
154 echo "ldapmodify failed ($RC)!"
155 test $KILLSERVERS != no && kill -HUP $KILLPIDS
156 exit $RC
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
164 RC=$?
165 if test $RC != 0 ; then
166 echo "ldapsearch failed ($RC)!"
167 test $KILLSERVERS != no && kill -HUP $KILLPIDS
168 exit $RC
171 echo "Testing modify..."
172 $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
173 -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
174 version: 1
176 # Deleting all telephone numbers...
177 dn: cn=Some One,${BASEDN}
178 changetype: modify
179 delete: telephoneNumber
182 # Adding a telephone number...
183 dn: cn=Mitya Kovalev,${BASEDN}
184 changetype: modify
185 add: telephoneNumber
186 telephoneNumber: +1 800 123 4567
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
195 add: telephoneNumber
196 telephoneNumber: +39 333 ZZZ 1234
199 # Adding an author to a document...
200 dn: documentTitle=book1,${BASEDN}
201 changetype: modify
202 add: documentAuthor
203 documentAuthor: cn=Lev Tolstoij,${BASEDN}
206 # Adding an author to another document...
207 dn: documentTitle=book2,${BASEDN}
208 changetype: modify
209 add: documentAuthor
210 documentAuthor: cn=Lev Tolstoij,${BASEDN}
213 # Adding an "auxiliary" objectClass...
214 dn: cn=Mitya Kovalev,${BASEDN}
215 changetype: modify
216 add: objectClass
217 objectClass: simpleSecurityObject
220 # Deleting an "auxiliary" objectClass...
221 dn: cn=Some One,${BASEDN}
222 changetype: modify
223 delete: objectClass
224 objectClass: simpleSecurityObject
227 # Deleting userPasswords
228 dn: cn=Lev Tolstoij,${BASEDN}
229 changetype: modify
230 delete: userPassword
232 EOMODS
234 RC=$?
235 if test $RC != 0 ; then
236 echo "ldapmodify failed ($RC)!"
237 test $KILLSERVERS != no && kill -HUP $KILLPIDS
238 exit $RC
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
246 RC=$?
247 if test $RC != 0 ; then
248 echo "ldapsearch failed ($RC)!"
249 test $KILLSERVERS != no && kill -HUP $KILLPIDS
250 exit $RC
253 echo "Testing delete..."
254 $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
255 -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
256 version: 1
258 # Deleting a person...
259 dn: cn=Torvlobnor Puzdoy,${BASEDN}
260 changetype: delete
262 # Deleting a document...
263 dn: documentTitle=book1,${BASEDN}
264 changetype: delete
266 # Deleting an organization with an "auxiliary" objectClass...
267 dn: dc=subnet2,${BASEDN}
268 changetype: delete
269 EOMODS
271 RC=$?
272 if test $RC != 0 ; then
273 echo "ldapmodify failed ($RC)!"
274 test $KILLSERVERS != no && kill -HUP $KILLPIDS
275 exit $RC
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
283 RC=$?
284 if test $RC != 0 ; then
285 echo "ldapsearch failed ($RC)!"
286 test $KILLSERVERS != no && kill -HUP $KILLPIDS
287 exit $RC
290 echo "Testing rename..."
291 $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
292 -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS
293 version: 1
295 # Renaming an organization...
296 dn: o=An Org,${BASEDN}
297 changetype: modrdn
298 newrdn: o=Renamed Org
299 deleteoldrdn: 1
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}
308 # Renaming a book...
309 dn: documentTitle=book2,${BASEDN}
310 changetype: modrdn
311 newrdn: documentTitle=Renamed Book
312 deleteoldrdn: 1
313 EOMODS
315 RC=$?
316 if test $RC != 0 ; then
317 echo "ldapmodify failed ($RC)!"
318 test $KILLSERVERS != no && kill -HUP $KILLPIDS
319 exit $RC
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
327 RC=$?
328 if test $RC != 0 ; then
329 echo "ldapsearch failed ($RC)!"
330 test $KILLSERVERS != no && kill -HUP $KILLPIDS
331 exit $RC
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
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
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
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
359 dn: ou=Referral,${BASEDN}
360 changetype: modify
361 replace: ref
362 ref: ldap://localhost:9009/
364 EOMODS
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
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
378 dn: ou=Referral,${BASEDN}
379 changetype: modrdn
380 newrdn: ou=Renamed Referral
381 deleteoldrdn: 1
382 EOMODS
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
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
396 dn: ou=Referral,${BASEDN}
397 changetype: delete
398 EOMODS
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
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
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
420 RC=$?
421 if test $RC != 0 ; then
422 echo "ldapmodify failed ($RC)!"
423 test $KILLSERVERS != no && kill -HUP $KILLPIDS
424 exit $RC
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
432 dn: ou=Referral,${BASEDN}
433 changetype: modify
434 replace: ref
435 ref: ldap://localhost:9009/
437 EOMODS
439 RC=$?
440 if test $RC != 0 ; then
441 echo "ldapmodify failed ($RC)!"
442 test $KILLSERVERS != no && kill -HUP $KILLPIDS
443 exit $RC
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
451 RC=$?
452 if test $RC != 0 ; then
453 echo "ldapsearch failed ($RC)!"
454 test $KILLSERVERS != no && kill -HUP $KILLPIDS
455 exit $RC
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
463 dn: ou=Referral,${BASEDN}
464 changetype: modrdn
465 newrdn: ou=Renamed Referral
466 deleteoldrdn: 1
467 EOMODS
469 RC=$?
470 if test $RC != 0 ; then
471 echo "ldapmodify failed ($RC)!"
472 test $KILLSERVERS != no && kill -HUP $KILLPIDS
473 exit $RC
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
481 RC=$?
482 if test $RC != 0 ; then
483 echo "ldapsearch failed ($RC)!"
484 test $KILLSERVERS != no && kill -HUP $KILLPIDS
485 exit $RC
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
493 dn: ou=Renamed Referral,${BASEDN}
494 changetype: delete
495 EOMODS
497 RC=$?
498 if test $RC != 0 ; then
499 echo "ldapmodify failed ($RC)!"
500 test $KILLSERVERS != no && kill -HUP $KILLPIDS
501 exit $RC
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
512 RC=$?
513 if test $RC != 0 ; then
514 echo "ldappasswd failed ($RC)!"
515 test $KILLSERVERS != no && kill -HUP $KILLPIDS
516 exit $RC
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
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
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
544 RC=$?
545 if test $RC != 0 ; then
546 echo "ldapsearch failed ($RC)!"
547 test $KILLSERVERS != no && kill -HUP $KILLPIDS
548 exit $RC
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
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
566 echo "apparently ${RDBMS} does not support writes; skipping..."
568 esac
570 test $KILLSERVERS != no && kill -HUP $KILLPIDS
572 echo ">>>>> Test succeeded"
573 exit 0