Sync usage with man page.
[netbsd-mini2440.git] / external / bsd / openldap / dist / tests / scripts / test024-unique
blob16d814ec13b549762a500269e3d653bce17d867f
1 #! /bin/sh
2 # $OpenLDAP: pkg/ldap/tests/scripts/test024-unique,v 1.8.2.5 2008/02/11 23:26:51 kurt Exp $
3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 ##
5 ## Copyright 2004-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 $UNIQUE = uniqueno; then
20 echo "Attribute Uniqueness overlay not available, test skipped"
21 exit 0
24 mkdir -p $TESTDIR $DBDIR1
26 $SLAPPASSWD -g -n >$CONFIGPWF
27 echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
29 echo "Running slapadd to build slapd database..."
30 . $CONFFILTER $BACKEND $MONITORDB < $UNIQUECONF > $CONF1
31 $SLAPADD -f $CONF1 -l $LDIFUNIQUE
32 RC=$?
33 if test $RC != 0 ; then
34 echo "slapadd failed ($RC)!"
35 exit $RC
38 echo "Starting slapd on TCP/IP port $PORT1..."
39 mkdir $TESTDIR/confdir
40 $SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
41 PID=$!
42 if test $WAIT != 0 ; then
43 echo PID $PID
44 read foo
46 KILLPIDS="$PID"
48 sleep 1
50 echo "Testing slapd attribute uniqueness operations..."
51 for i in 0 1 2 3 4 5; do
52 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
53 'objectclass=*' > /dev/null 2>&1
54 RC=$?
55 if test $RC = 0 ; then
56 break
58 echo "Waiting 5 seconds for slapd to start..."
59 sleep 5
60 done
62 if test $RC != 0 ; then
63 echo "ldapsearch failed ($RC)!"
64 test $KILLSERVERS != no && kill -HUP $KILLPIDS
65 exit $RC
68 echo "Adding a unique record..."
69 $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
70 > /dev/null << EOTUNIQ1
71 dn: uid=dave,ou=users,o=unique
72 objectClass: inetOrgPerson
73 uid: dave
74 sn: nothere
75 cn: dave
76 businessCategory: otest
77 carLicense: TEST
78 departmentNumber: 42
79 # NOTE: use special chars in attr value to be used
80 # in internal searches ITS#4212
81 displayName: Dave (ITS#4212)
82 employeeNumber: 69
83 employeeType: contractor
84 givenName: Dave
85 EOTUNIQ1
86 RC=$?
87 if test $RC != 0 ; then
88 echo "ldapadd failed ($RC)!"
89 test $KILLSERVERS != no && kill -HUP $KILLPIDS
90 exit $RC
93 echo "Adding a non-unique record..."
94 $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
95 $TESTOUT 2>&1 << EOTUNIQ2
96 dn: uid=bill,ou=users,o=unique
97 objectClass: inetOrgPerson
98 uid: bill
99 sn: johnson
100 cn: bill
101 businessCategory: rtest
102 carLicense: ABC123
103 departmentNumber: 42
104 displayName: Bill
105 employeeNumber: 5150
106 employeeType: contractor
107 givenName: Bill
108 EOTUNIQ2
109 RC=$?
110 if test $RC != 19 ; then
111 echo "unique check failed ($RC)!"
112 test $KILLSERVERS != no && kill -HUP $KILLPIDS
113 exit -1
116 echo Dynamically retrieving initial configuration...
117 $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/initial-config.ldif
118 cat <<EOF >$TESTDIR/initial-reference.ldif
119 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
120 objectClass: olcOverlayConfig
121 objectClass: olcUniqueConfig
122 olcOverlay: {0}unique
123 olcUniqueBase: o=unique
124 olcUniqueAttribute: employeeNumber
125 olcUniqueAttribute: displayName
128 diff $TESTDIR/initial-config.ldif $TESTDIR/initial-reference.ldif > /dev/null 2>&1
129 RC=$?
130 if test $RC != 0 ; then
131 echo "Initial configuration is not reported correctly."
132 test $KILLSERVERS != no && kill -HUP $KILLPIDS
133 exit -1
136 echo Dynamically trying to add a URI with legacy attrs present...
137 $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
138 > $TESTOUT 2>&1 <<EOF
139 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
140 changetype: modify
141 add: olcUniqueURI
142 olcUniqueURI: ldap:///?employeeNumber,displayName?sub
144 RC=$?
145 if test $RC != 80 ; then
146 echo "legacy and unique_uri allowed together"
147 test $KILLSERVERS != no && kill -HUP $KILLPIDS
148 exit -1
151 echo Dynamically trying to add legacy ignored attrs with legacy attrs present...
152 $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
153 > $TESTOUT 2>&1 <<EOF
154 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
155 changetype: modify
156 add: olcUniqueIgnore
157 olcUniqueIgnore: objectClass
159 RC=$?
160 if test $RC != 80 ; then
161 echo "legacy attrs and legacy ignore attrs allowed together"
162 test $KILLSERVERS != no && kill -HUP $KILLPIDS
163 exit -1
166 echo Verifying initial configuration intact...
167 $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/initial-config-recheck.ldif
168 diff $TESTDIR/initial-config-recheck.ldif $TESTDIR/initial-reference.ldif > /dev/null 2>&1
169 RC=$?
170 if test $RC != 0 ; then
171 echo "Initial configuration damaged by unsuccessful modifies."
172 test $KILLSERVERS != no && kill -HUP $KILLPIDS
173 exit -1
176 echo Dynamically removing legacy base...
177 $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
178 > $TESTOUT 2>&1 <<EOF
179 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
180 changetype: modify
181 delete: olcUniqueBase
183 RC=$?
184 if test $RC != 0 ; then
185 echo "base removal failed"
186 test $KILLSERVERS != no && kill -HUP $KILLPIDS
187 exit -1
190 echo Verifying base removal...
191 $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/baseremoval-config.ldif
192 cat >$TESTDIR/baseremoval-reference.ldif <<EOF
193 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
194 objectClass: olcOverlayConfig
195 objectClass: olcUniqueConfig
196 olcOverlay: {0}unique
197 olcUniqueAttribute: employeeNumber
198 olcUniqueAttribute: displayName
201 diff $TESTDIR/baseremoval-config.ldif $TESTDIR/baseremoval-reference.ldif > /dev/null 2>&1
202 RC=$?
203 if test $RC != 0 ; then
204 echo "Configuration damaged by base removal"
205 test $KILLSERVERS != no && kill -HUP $KILLPIDS
206 exit -1
209 echo "Adding a non-unique record..."
210 $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
211 $TESTOUT 2>&1 << EOTUNIQ2
212 dn: uid=bill,ou=users,o=unique
213 objectClass: inetOrgPerson
214 uid: bill
215 sn: johnson
216 cn: bill
217 businessCategory: rtest
218 carLicense: ABC123
219 departmentNumber: 42
220 displayName: Bill
221 employeeNumber: 5150
222 employeeType: contractor
223 givenName: Bill
224 EOTUNIQ2
225 RC=$?
226 if test $RC != 19 ; then
227 echo "unique check failed ($RC)!"
228 test $KILLSERVERS != no && kill -HUP $KILLPIDS
229 exit -1
232 echo Trying a legacy base outside of the backend...
233 $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
234 > $TESTOUT 2>&1 <<EOF
235 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
236 changetype: modify
237 add: olcUniqueBase
238 olcUniqueBase: cn=config
240 RC=$?
241 if test $RC != 80 ; then
242 echo "out of backend scope base allowed"
243 test $KILLSERVERS != no && kill -HUP $KILLPIDS
244 exit -1
247 echo "Adding and removing attrs..."
248 $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
249 > $TESTOUT 2>&1 <<EOF
250 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
251 changetype: modify
252 add: olcUniqueAttribute
253 olcUniqueAttribute: description
254 olcUniqueAttribute: telephoneNumber
256 delete: olcUniqueAttribute
257 olcUniqueAttribute: displayName
259 RC=$?
260 if test $RC != 0 ; then
261 echo "Unable to remove an attribute"
262 test $KILLSERVERS != no && kill -HUP $KILLPIDS
263 exit -1
266 echo "Verifying we removed the right attr..."
267 $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
268 $TESTOUT 2>&1 << EOTUNIQ2
269 dn: uid=bill,ou=users,o=unique
270 objectClass: inetOrgPerson
271 uid: bill
272 sn: johnson
273 cn: bill
274 businessCategory: rtest
275 carLicense: ABC123
276 departmentNumber: 42
277 displayName: Bill
278 employeeNumber: 5150
279 employeeType: contractor
280 givenName: Bill
281 EOTUNIQ2
282 RC=$?
283 if test $RC != 19 ; then
284 echo "olcUniqueAttribtue single deletion hit the wrong value"
285 test $KILLSERVERS != no && kill -HUP $KILLPIDS
286 exit -1
289 echo Removing legacy config and adding URIs...
290 $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
291 > $TESTOUT 2>&1 <<EOF
292 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
293 changetype: modify
294 delete: olcUniqueAttribute
296 add: olcUniqueURI
297 olcUniqueURI: ldap:///?employeeNumber,displayName?sub
298 olcUniqueURI: ldap:///?description?one
300 RC=$?
301 if test $RC != 0 ; then
302 echo "Reconfiguration to URIs failed"
303 test $KILLSERVERS != no && kill -HUP $KILLPIDS
304 exit -1
307 echo Dynamically retrieving second configuration...
308 $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/second-config.ldif
309 cat >$TESTDIR/second-reference.ldif <<EOF
310 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
311 objectClass: olcOverlayConfig
312 objectClass: olcUniqueConfig
313 olcOverlay: {0}unique
314 olcUniqueURI: ldap:///?employeeNumber,displayName?sub
315 olcUniqueURI: ldap:///?description?one
318 diff $TESTDIR/second-config.ldif $TESTDIR/second-reference.ldif > /dev/null 2>&1
319 RC=$?
320 if test $RC != 0 ; then
321 echo "Second configuration is not reported correctly."
322 test $KILLSERVERS != no && kill -HUP $KILLPIDS
323 exit -1
326 echo "Adding a non-unique record..."
327 $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
328 $TESTOUT 2>&1 << EOTUNIQ2
329 dn: uid=bill,ou=users,o=unique
330 objectClass: inetOrgPerson
331 uid: bill
332 sn: johnson
333 cn: bill
334 businessCategory: rtest
335 carLicense: ABC123
336 departmentNumber: 42
337 displayName: Bill
338 employeeNumber: 5150
339 employeeType: contractor
340 givenName: Bill
341 EOTUNIQ2
342 RC=$?
343 if test $RC != 19 ; then
344 echo "unique check failed ($RC)!"
345 test $KILLSERVERS != no && kill -HUP $KILLPIDS
346 exit -1
349 echo Dynamically trying to add legacy base
350 $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
351 > $TESTOUT 2>&1 <<EOF
352 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
353 changetype: modify
354 add: olcUniqueBase
355 olcUniqueBase: o=unique
357 RC=$?
358 if test $RC != 80 ; then
359 echo "legacy base allowed with URIs"
360 test $KILLSERVERS != no && kill -HUP $KILLPIDS
361 exit -1
364 echo Dynamically trying to add legacy attrs
365 $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
366 > $TESTOUT 2>&1 <<EOF
367 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
368 changetype: modify
369 add: olcUniqueAttribute
370 olcUniqueAttribute: description
372 RC=$?
373 if test $RC != 80 ; then
374 echo "legacy attributes allowed with URIs"
375 test $KILLSERVERS != no && kill -HUP $KILLPIDS
376 exit -1
379 echo Dynamically trying to add legacy strictness
380 $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
381 > $TESTOUT 2>&1 <<EOF
382 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
383 changetype: modify
384 add: olcUniqueStrict
385 olcUniqueStrict: TRUE
387 RC=$?
388 if test $RC != 80 ; then
389 echo "legacy strictness allowed with URIs"
390 test $KILLSERVERS != no && kill -HUP $KILLPIDS
391 exit -1
394 #echo ----------------------
395 echo Dynamically trying a bad filter...
396 $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
397 > $TESTOUT 2>&1 <<EOF
398 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
399 changetype: modify
400 replace: olcUniqueURI
401 olcUniqueURI: ldap:///?sn?sub?((cn=e*))
403 RC=$?
404 if test $RC != 80 ; then
405 echo "bad filter allowed"
406 test $KILLSERVERS != no && kill -HUP $KILLPIDS
407 exit -1
410 echo Verifying second configuration intact...
411 $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/second-config-recheck.ldif
412 diff $TESTDIR/second-config-recheck.ldif $TESTDIR/second-reference.ldif > /dev/null 2>&1
413 RC=$?
414 if test $RC != 0 ; then
415 echo "Second configuration damaged by rejected modifies."
416 test $KILLSERVERS != no && kill -HUP $KILLPIDS
417 exit -1
420 #echo ----------------------
421 echo Dynamically reconfiguring to use different URIs...
422 $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
423 > $TESTOUT 2>&1 <<EOF
424 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
425 changetype: modify
426 add: olcUniqueURI
427 olcUniqueURI: ldap:///?sn?sub?(cn=e*)
429 delete: olcUniqueURI
430 olcUniqueURI: ldap:///?description?one
432 RC=$?
433 if test $RC != 0 ; then
434 echo "unable to reconfigure"
435 test $KILLSERVERS != no && kill -HUP $KILLPIDS
436 exit -1
439 echo Dynamically retrieving third configuration...
440 $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/third-config.ldif
441 cat >$TESTDIR/third-reference.ldif <<EOF
442 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
443 objectClass: olcOverlayConfig
444 objectClass: olcUniqueConfig
445 olcOverlay: {0}unique
446 olcUniqueURI: ldap:///?employeeNumber,displayName?sub
447 olcUniqueURI: ldap:///?sn?sub?(cn=e*)
450 diff $TESTDIR/third-config.ldif $TESTDIR/third-reference.ldif > /dev/null 2>&1
451 RC=$?
452 if test $RC != 0 ; then
453 echo "Third configuration is not reported correctly."
454 test $KILLSERVERS != no && kill -HUP $KILLPIDS
455 exit -1
458 echo "Adding a record unique in both domains if filtered..."
460 $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
461 $TESTOUT 2>&1 << EOF
462 dn: uid=edgar,ou=users,o=unique
463 objectClass: inetOrgPerson
464 uid: edgar
465 sn: johnson
466 cn: edgar
469 RC=$?
470 if test $RC != 0 ; then
471 echo "unique check failed ($RC)!"
472 test $KILLSERVERS != no && kill -HUP $KILLPIDS
473 exit -1
476 echo "Adding a record unique in one domain, non-unique in the filtered domain..."
478 $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
479 $TESTOUT 2>&1 << EOF
480 dn: uid=elvis,ou=users,o=unique
481 objectClass: inetOrgPerson
482 uid: elvis
483 sn: johnson
484 cn: elvis
487 RC=$?
488 if test $RC != 19 ; then
489 echo "unique check failed ($RC)!"
490 test $KILLSERVERS != no && kill -HUP $KILLPIDS
491 exit -1
494 #echo ----------------------
495 echo Dynamically reconfiguring to use attribute-ignore URIs...
496 $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
497 > $TESTOUT 2>&1 <<EOF
498 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
499 changetype: modify
500 replace: olcUniqueURI
501 olcUniqueURI: ignore ldap:///?objectClass,uid,cn,sn?sub
503 RC=$?
504 if test $RC != 0 ; then
505 echo "unable to reconfigure"
506 test $KILLSERVERS != no && kill -HUP $KILLPIDS
507 exit -1
510 echo Dynamically retrieving fourth configuration...
511 $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/fourth-config.ldif
512 cat >$TESTDIR/fourth-reference.ldif <<EOF
513 dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
514 objectClass: olcOverlayConfig
515 objectClass: olcUniqueConfig
516 olcOverlay: {0}unique
517 olcUniqueURI: ignore ldap:///?objectClass,uid,cn,sn?sub
520 diff $TESTDIR/fourth-config.ldif $TESTDIR/fourth-reference.ldif > /dev/null 2>&1
521 RC=$?
522 if test $RC != 0 ; then
523 echo "Fourth configuration is not reported correctly."
524 test $KILLSERVERS != no && kill -HUP $KILLPIDS
525 exit -1
528 echo "Adding a record unique in the ignore-domain..."
530 $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
531 $TESTOUT 2>&1 << EOF
532 dn: uid=elvis,ou=users,o=unique
533 objectClass: inetOrgPerson
534 uid: elvis
535 sn: johnson
536 cn: elvis
537 description: left the building
540 RC=$?
541 if test $RC != 0 ; then
542 echo "unique check failed ($RC)!"
543 test $KILLSERVERS != no && kill -HUP $KILLPIDS
544 exit -1
547 echo "Adding a record non-unique in the ignore-domain..."
549 $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
550 $TESTOUT 2>&1 << EOF
551 dn: uid=harry,ou=users,o=unique
552 objectClass: inetOrgPerson
553 uid: harry
554 sn: johnson
555 cn: harry
556 description: left the building
559 RC=$?
560 if test $RC != 19 ; then
561 echo "unique check failed ($RC)!"
562 test $KILLSERVERS != no && kill -HUP $KILLPIDS
563 exit -1
566 test $KILLSERVERS != no && kill -HUP $KILLPIDS
568 echo ">>>>> Test succeeded"
570 test $KILLSERVERS != no && wait
572 exit 0