2 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 ## Copyright 1998-2012 The OpenLDAP Foundation.
5 ## All rights reserved.
7 ## Redistribution and use in source and binary forms, with or without
8 ## modification, are permitted only as authorized by the OpenLDAP
11 ## A copy of this license is available in the file LICENSE in the
12 ## top-level directory of the distribution or, alternatively, at
13 ## <http://www.OpenLDAP.org/license.html>.
15 echo "running defines.sh"
16 . $SRCDIR/scripts/defines.sh
18 if test $DYNLIST = "dynlistno" ; then
19 echo "dynlist overlay not available, test skipped"
23 if test $BACKEND = ldif ; then
24 # dynlist+ldif fails because back-ldif lacks bi_op_compare()
25 echo "$BACKEND backend unsuitable for dynlist overlay, test skipped"
29 mkdir -p $TESTDIR $DBDIR1
31 $SLAPPASSWD -g -n >$CONFIGPWF
32 echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
34 echo "Running slapadd to build slapd database..."
35 . $CONFFILTER $BACKEND $MONITORDB < $MCONF > $ADDCONF
36 $SLAPADD -f $ADDCONF -l $LDIFORDERED
38 if test $RC != 0 ; then
39 echo "slapadd failed ($RC)!"
43 . $CONFFILTER $BACKEND $MONITORDB < $DYNLISTCONF > $CONF1
45 echo "Starting slapd on TCP/IP port $PORT1..."
46 $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
48 if test $WAIT != 0 ; then
56 echo "Testing slapd searching..."
57 for i in 0 1 2 3 4 5; do
58 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
59 '(objectclass=*)' > /dev/null 2>&1
61 if test $RC = 0 ; then
64 echo "Waiting 5 seconds for slapd to start..."
68 if test $RC != 0 ; then
69 echo "ldapsearch failed ($RC)!"
70 test $KILLSERVERS != no && kill -HUP $KILLPIDS
74 cat /dev/null > $SEARCHOUT
76 LISTDN="ou=Dynamic Lists,$BASEDN"
77 echo "Adding a dynamic list..."
78 $LDAPADD -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
79 > $TESTOUT 2>&1 << EOMODS
81 objectClass: organizationalUnit
84 dn: cn=Dynamic List,$LISTDN
85 objectClass: groupOfURLs
87 memberURL: ldap:///ou=People,${BASEDN}?cn,mail?sub?(objectClass=person)
90 echo "Testing list search of all attrs..."
91 echo "# Testing list search of all attrs..." >> $SEARCHOUT
92 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
93 '(cn=Dynamic List)' '*' \
96 if test $RC != 0 ; then
97 echo "ldapsearch failed ($RC)!"
98 test $KILLSERVERS != no && kill -HUP $KILLPIDS
102 echo "Testing list search of a listed attr..."
103 echo "# Testing list search of a listed attr..." >> $SEARCHOUT
104 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
105 '(cn=Dynamic List)' mail \
108 if test $RC != 0 ; then
109 echo "ldapsearch failed ($RC)!"
110 test $KILLSERVERS != no && kill -HUP $KILLPIDS
114 echo "Testing list search of a non-listed attr..."
115 echo "# Testing list search of a non-listed attr..." >> $SEARCHOUT
116 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
117 '(cn=Dynamic List)' objectClass \
120 if test $RC != 0 ; then
121 echo "ldapsearch failed ($RC)!"
122 test $KILLSERVERS != no && kill -HUP $KILLPIDS
126 echo "Testing list search with (critical) manageDSAit..."
127 echo "# Testing list search with (critical) manageDSAit..." >> $SEARCHOUT
128 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 -MM \
129 '(cn=Dynamic List)' '*' \
132 if test $RC != 0 ; then
133 echo "ldapsearch failed ($RC)!"
134 test $KILLSERVERS != no && kill -HUP $KILLPIDS
138 echo "Testing list compare..."
139 echo "# Testing list compare..." >> $SEARCHOUT
140 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
141 "cn=Dynamic List,$LISTDN" "cn:Bjorn Jensen" \
146 echo "ldapcompare returned FALSE ($RC)!"
147 test $KILLSERVERS != no && kill -HUP $KILLPIDS
151 echo "ldapcompare returned TRUE ($RC)"
154 echo "ldapcompare returned success ($RC)!"
155 test $KILLSERVERS != no && kill -HUP $KILLPIDS
159 echo "ldapcompare failed ($RC)!"
160 test $KILLSERVERS != no && kill -HUP $KILLPIDS
164 echo "" >> $SEARCHOUT
166 echo "Testing list compare (should return FALSE)..."
167 echo "# Testing list compare (should return FALSE)..." >> $SEARCHOUT
168 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
169 "cn=Dynamic List,$LISTDN" "cn:FALSE" \
174 echo "ldapcompare returned FALSE ($RC)"
177 echo "ldapcompare returned TRUE ($RC)!"
178 test $KILLSERVERS != no && kill -HUP $KILLPIDS
182 echo "ldapcompare returned success ($RC)!"
183 test $KILLSERVERS != no && kill -HUP $KILLPIDS
187 echo "ldapcompare failed ($RC)!"
188 test $KILLSERVERS != no && kill -HUP $KILLPIDS
192 echo "" >> $SEARCHOUT
194 echo "Testing list compare (should return UNDEFINED)..."
195 echo "# Testing list compare (should return UNDEFINED)..." >> $SEARCHOUT
196 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
197 "cn=Dynamic List,$LISTDN" "dc:UNDEFINED" \
202 echo "ldapcompare returned FALSE ($RC)!"
203 test $KILLSERVERS != no && kill -HUP $KILLPIDS
207 echo "ldapcompare returned TRUE ($RC)!"
208 test $KILLSERVERS != no && kill -HUP $KILLPIDS
212 echo "ldapcompare returned UNDEFINED ($RC)"
215 echo "ldapcompare returned success ($RC)!"
216 test $KILLSERVERS != no && kill -HUP $KILLPIDS
220 echo "ldapcompare failed ($RC)"
223 echo "" >> $SEARCHOUT
225 echo "Testing list compare with manageDSAit..."
226 echo "# Testing list compare with manageDSAit..." >> $SEARCHOUT
227 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 -MM \
228 "cn=Dynamic List,$LISTDN" "cn:Bjorn Jensen" \
233 echo "ldapcompare returned FALSE ($RC)"
236 echo "ldapcompare returned TRUE ($RC)!"
237 test $KILLSERVERS != no && kill -HUP $KILLPIDS
241 echo "ldapcompare returned success ($RC)!"
242 test $KILLSERVERS != no && kill -HUP $KILLPIDS
246 echo "ldapcompare failed ($RC)!"
247 test $KILLSERVERS != no && kill -HUP $KILLPIDS
251 echo "" >> $SEARCHOUT
253 echo "Reconfiguring slapd..."
254 $LDAPMODIFY -x -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF > \
255 $TESTOUT 2>&1 << EOMODS
257 dn: olcOverlay={0}dynlist,olcDatabase={2}$BACKEND,cn=config
263 olcDLattrSet: groupOfURLs memberURL sn:cn mail
267 echo "==========================================================" >> $LOG1
269 echo "Testing attribute mapping"
271 echo "Testing list search of all (mapped) attrs..."
272 echo "# Testing list search of all (mapped) attrs..." >> $SEARCHOUT
273 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
274 '(cn=Dynamic List)' '*' \
277 if test $RC != 0 ; then
278 echo "ldapsearch failed ($RC)!"
279 test $KILLSERVERS != no && kill -HUP $KILLPIDS
283 echo "Testing list search of a (mapped) listed attr..."
284 echo "# Testing list search of a (mapped) listed attr..." >> $SEARCHOUT
285 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
286 '(cn=Dynamic List)' sn \
289 if test $RC != 0 ; then
290 echo "ldapsearch failed ($RC)!"
291 test $KILLSERVERS != no && kill -HUP $KILLPIDS
295 echo "Testing list search of a (n unmapped) listed attr..."
296 echo "# Testing list search of a (n unmapped) listed attr..." >> $SEARCHOUT
297 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
298 '(cn=Dynamic List)' mail \
301 if test $RC != 0 ; then
302 echo "ldapsearch failed ($RC)!"
303 test $KILLSERVERS != no && kill -HUP $KILLPIDS
307 echo "Testing list compare (mapped attrs) ..."
308 echo "# Testing list compare (mapped attrs) ..." >> $SEARCHOUT
309 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
310 "cn=Dynamic List,$LISTDN" "sn:Bjorn Jensen" \
315 echo "ldapcompare returned FALSE ($RC)!"
316 test $KILLSERVERS != no && kill -HUP $KILLPIDS
320 echo "ldapcompare returned TRUE ($RC)"
323 echo "ldapcompare returned success ($RC)!"
324 test $KILLSERVERS != no && kill -HUP $KILLPIDS
328 echo "ldapcompare failed ($RC)!"
329 test $KILLSERVERS != no && kill -HUP $KILLPIDS
333 echo "" >> $SEARCHOUT
335 echo "Testing list compare (mapped attrs; should return FALSE)..."
336 echo "# Testing list compare (mapped attrs; should return FALSE)..." >> $SEARCHOUT
337 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
338 "cn=Dynamic List,$LISTDN" "sn:FALSE" \
343 echo "ldapcompare returned FALSE ($RC)"
346 echo "ldapcompare returned TRUE ($RC)!"
347 test $KILLSERVERS != no && kill -HUP $KILLPIDS
351 echo "ldapcompare returned success ($RC)!"
352 test $KILLSERVERS != no && kill -HUP $KILLPIDS
356 echo "ldapcompare failed ($RC)!"
357 test $KILLSERVERS != no && kill -HUP $KILLPIDS
361 echo "" >> $SEARCHOUT
363 echo "Reconfiguring slapd..."
364 $LDAPMODIFY -x -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF > \
365 $TESTOUT 2>&1 << EOMODS
367 dn: olcOverlay={0}dynlist,olcDatabase={2}$BACKEND,cn=config
373 olcDLattrSet: groupOfURLs memberURL member
377 echo "==========================================================" >> $LOG1
379 echo "Adding a dynamic list..."
380 $LDAPADD -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
381 > $TESTOUT 2>&1 << EOMODS
382 dn: cn=Dynamic List of Members,$LISTDN
383 objectClass: groupOfURLs
384 cn: Dynamic List of Members
385 memberURL: ldap:///ou=People,${BASEDN}??sub?(objectClass=person)
388 echo "Testing list search of all attrs..."
389 echo "# Testing list search of all attrs..." >> $SEARCHOUT
390 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
391 '(cn=Dynamic List of Members)' '*' \
394 if test $RC != 0 ; then
395 echo "ldapsearch failed ($RC)!"
396 test $KILLSERVERS != no && kill -HUP $KILLPIDS
400 echo "Testing list search of a listed attr..."
401 echo "# Testing list search of a listed attr..." >> $SEARCHOUT
402 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
403 '(cn=Dynamic List of Members)' member \
406 if test $RC != 0 ; then
407 echo "ldapsearch failed ($RC)!"
408 test $KILLSERVERS != no && kill -HUP $KILLPIDS
412 echo "Testing list search of a non-listed attr..."
413 echo "# Testing list search of a non-listed attr..." >> $SEARCHOUT
414 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
415 '(cn=Dynamic List of Members)' objectClass \
418 if test $RC != 0 ; then
419 echo "ldapsearch failed ($RC)!"
420 test $KILLSERVERS != no && kill -HUP $KILLPIDS
424 echo "Testing list search with (critical) manageDSAit..."
425 echo "# Testing list search with (critical) manageDSAit..." >> $SEARCHOUT
426 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 -MM \
427 '(&(cn=Dynamic List of Members)(objectClass=groupOfURLs))' '*' \
430 if test $RC != 0 ; then
431 echo "ldapsearch failed ($RC)!"
432 test $KILLSERVERS != no && kill -HUP $KILLPIDS
437 echo "Testing list compare..."
438 echo "# Testing list compare..." >> $SEARCHOUT
439 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
440 "cn=Dynamic List of Members,$LISTDN" "member:$CMPDN" \
445 echo "ldapcompare returned FALSE ($RC)!"
446 test $KILLSERVERS != no && kill -HUP $KILLPIDS
450 echo "ldapcompare returned TRUE ($RC)"
453 echo "ldapcompare returned success ($RC)!"
454 test $KILLSERVERS != no && kill -HUP $KILLPIDS
458 echo "ldapcompare failed ($RC)!"
459 test $KILLSERVERS != no && kill -HUP $KILLPIDS
463 echo "" >> $SEARCHOUT
465 echo "Testing list compare (should return FALSE)..."
466 echo "# Testing list compare (should return FALSE)..." >> $SEARCHOUT
467 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
468 "cn=Dynamic List of Members,$LISTDN" "member:cn=Foo Bar" \
473 echo "ldapcompare returned FALSE ($RC)"
476 echo "ldapcompare returned TRUE ($RC)!"
477 test $KILLSERVERS != no && kill -HUP $KILLPIDS
481 echo "ldapcompare returned success ($RC)!"
482 test $KILLSERVERS != no && kill -HUP $KILLPIDS
486 echo "ldapcompare failed ($RC)!"
487 test $KILLSERVERS != no && kill -HUP $KILLPIDS
491 echo "" >> $SEARCHOUT
493 echo "Testing list compare with manageDSAit..."
494 echo "# Testing list compare with manageDSAit..." >> $SEARCHOUT
495 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 -MM \
496 "cn=Dynamic List,$LISTDN" "member:$CMPDN" \
501 echo "ldapcompare returned FALSE ($RC)"
504 echo "ldapcompare returned TRUE ($RC)!"
505 test $KILLSERVERS != no && kill -HUP $KILLPIDS
509 echo "ldapcompare returned success ($RC)!"
510 test $KILLSERVERS != no && kill -HUP $KILLPIDS
514 echo "ldapcompare failed ($RC)!"
515 test $KILLSERVERS != no && kill -HUP $KILLPIDS
519 echo "" >> $SEARCHOUT
521 echo "==========================================================" >> $LOG1
523 echo "Testing dgIdentity..."
525 # Set ACL, require authentication to get list contents
526 $LDAPMODIFY -x -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF > \
527 $TESTOUT 2>&1 << EOMODS
529 dn: olcDatabase={2}$BACKEND,cn=config
532 olcAccess: to dn.base="cn=Dynamic List of Members,$LISTDN" by * read
533 olcAccess: to * by users read by * search
536 echo "Testing list search without dgIdentity..."
537 echo "# Testing list search without dgIdentity..." >> $SEARCHOUT
538 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
539 '(cn=Dynamic List of Members)' '*' \
542 if test $RC != 0 ; then
543 echo "ldapsearch failed ($RC)!"
544 test $KILLSERVERS != no && kill -HUP $KILLPIDS
548 $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
549 > $TESTOUT 2>&1 << EOMODS
550 dn: cn=Dynamic List of Members,$LISTDN
553 objectClass: dgIdentityAux
559 echo "Testing list search with dgIdentity..."
560 echo "# Testing list search with dgIdentity..." >> $SEARCHOUT
561 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
562 '(cn=Dynamic List of Members)' '*' \
565 if test $RC != 0 ; then
566 echo "ldapsearch failed ($RC)!"
567 test $KILLSERVERS != no && kill -HUP $KILLPIDS
571 echo "Testing dgAuthz..."
573 CMPDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,$BASEDN"
574 $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
575 > $TESTOUT 2>&1 << EOMODS
576 dn: cn=Dynamic List of Members,$LISTDN
582 echo "Testing list search with dgIdentity and dgAuthz anonymously..."
583 echo "# Testing list search with dgIdentity and dgAuthz anonymously..." >> $SEARCHOUT
584 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
585 '(cn=Dynamic List of Members)' '*' \
588 if test $RC != 0 ; then
589 echo "ldapsearch failed ($RC)!"
590 test $KILLSERVERS != no && kill -HUP $KILLPIDS
594 echo "Testing list search with dgIdentity and dgAuthz as the authorized identity..."
595 echo "# Testing list search with dgIdentity and dgAuthz as the authorized identity..." >> $SEARCHOUT
596 $LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
597 -D "$BABSDN" -w bjensen \
598 '(cn=Dynamic List of Members)' '*' \
601 if test $RC != 0 ; then
602 echo "ldapsearch failed ($RC)!"
603 test $KILLSERVERS != no && kill -HUP $KILLPIDS
607 test $KILLSERVERS != no && kill -HUP $KILLPIDS
611 echo "Filtering ldapsearch results..."
612 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
613 echo "Filtering original ldif used to create database..."
614 $LDIFFILTER < $LDIF > $LDIFFLT
615 echo "Comparing filter output..."
616 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
618 if test $? != 0 ; then
619 echo "Comparison failed"
623 echo ">>>>> Test succeeded"
625 test $KILLSERVERS != no && wait