test044-dynlist revision 1.1.1.3
1#! /bin/sh
2## This work is part of OpenLDAP Software <http://www.openldap.org/>.
3##
4## Copyright 1998-2010 The OpenLDAP Foundation.
5## All rights reserved.
6##
7## Redistribution and use in source and binary forms, with or without
8## modification, are permitted only as authorized by the OpenLDAP
9## Public License.
10##
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>.
14
15echo "running defines.sh"
16. $SRCDIR/scripts/defines.sh
17
18if test $DYNLIST = "dynlistno" ; then 
19	echo "dynlist overlay not available, test skipped"
20	exit 0
21fi 
22
23if 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"
26	exit 0
27fi
28
29mkdir -p $TESTDIR $DBDIR1
30
31$SLAPPASSWD -g -n >$CONFIGPWF
32echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
33
34echo "Running slapadd to build slapd database..."
35. $CONFFILTER $BACKEND $MONITORDB < $MCONF > $ADDCONF
36$SLAPADD -f $ADDCONF -l $LDIFORDERED
37RC=$?
38if test $RC != 0 ; then
39	echo "slapadd failed ($RC)!"
40	exit $RC
41fi
42
43. $CONFFILTER $BACKEND $MONITORDB < $DYNLISTCONF > $CONF1
44
45echo "Starting slapd on TCP/IP port $PORT1..."
46$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
47PID=$!
48if test $WAIT != 0 ; then
49    echo PID $PID
50    read foo
51fi
52KILLPIDS="$PID"
53
54sleep 1
55
56echo "Testing slapd searching..."
57for 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
60	RC=$?
61	if test $RC = 0 ; then
62		break
63	fi
64	echo "Waiting 5 seconds for slapd to start..."
65	sleep 5
66done
67
68if test $RC != 0 ; then
69	echo "ldapsearch failed ($RC)!"
70	test $KILLSERVERS != no && kill -HUP $KILLPIDS
71	exit $RC
72fi
73
74cat /dev/null > $SEARCHOUT
75
76LISTDN="ou=Dynamic Lists,$BASEDN"
77echo "Adding a dynamic list..."
78$LDAPADD -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
79	> $TESTOUT 2>&1 << EOMODS
80dn: $LISTDN
81objectClass: organizationalUnit
82ou: Dynamic Lists
83
84dn: cn=Dynamic List,$LISTDN
85objectClass: groupOfURLs
86cn: Dynamic List
87memberURL: ldap:///ou=People,${BASEDN}?cn,mail?sub?(objectClass=person)
88EOMODS
89
90echo "Testing list search of all attrs..."
91echo "# Testing list search of all attrs..." >> $SEARCHOUT
92$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
93	'(cn=Dynamic List)' '*' \
94	>> $SEARCHOUT 2>&1
95RC=$?
96if test $RC != 0 ; then
97	echo "ldapsearch failed ($RC)!"
98	test $KILLSERVERS != no && kill -HUP $KILLPIDS
99	exit $RC
100fi
101
102echo "Testing list search of a listed attr..."
103echo "# Testing list search of a listed attr..." >> $SEARCHOUT
104$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
105	'(cn=Dynamic List)' mail \
106	>> $SEARCHOUT 2>&1
107RC=$?
108if test $RC != 0 ; then
109	echo "ldapsearch failed ($RC)!"
110	test $KILLSERVERS != no && kill -HUP $KILLPIDS
111	exit $RC
112fi
113
114echo "Testing list search of a non-listed attr..."
115echo "# Testing list search of a non-listed attr..." >> $SEARCHOUT
116$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
117	'(cn=Dynamic List)' objectClass \
118	>> $SEARCHOUT 2>&1
119RC=$?
120if test $RC != 0 ; then
121	echo "ldapsearch failed ($RC)!"
122	test $KILLSERVERS != no && kill -HUP $KILLPIDS
123	exit $RC
124fi
125
126echo "Testing list search with (critical) manageDSAit..."
127echo "# Testing list search with (critical) manageDSAit..." >> $SEARCHOUT
128$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 -MM \
129	'(cn=Dynamic List)' '*' \
130	>> $SEARCHOUT 2>&1
131RC=$?
132if test $RC != 0 ; then
133	echo "ldapsearch failed ($RC)!"
134	test $KILLSERVERS != no && kill -HUP $KILLPIDS
135	exit $RC
136fi
137
138echo "Testing list compare..."
139echo "# Testing list compare..." >> $SEARCHOUT
140$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
141	"cn=Dynamic List,$LISTDN" "cn:Bjorn Jensen" \
142	>> $SEARCHOUT 2>&1
143RC=$?
144case $RC in
1455)
146	echo "ldapcompare returned FALSE ($RC)!"
147	test $KILLSERVERS != no && kill -HUP $KILLPIDS
148	exit $RC
149	;;
1506)
151	echo "ldapcompare returned TRUE ($RC)"
152	;;
1530)
154	echo "ldapcompare returned success ($RC)!"
155	test $KILLSERVERS != no && kill -HUP $KILLPIDS
156	exit -1
157	;;
158*)
159	echo "ldapcompare failed ($RC)!"
160	test $KILLSERVERS != no && kill -HUP $KILLPIDS
161	exit $RC
162	;;
163esac
164echo "" >> $SEARCHOUT
165
166echo "Testing list compare (should return FALSE)..."
167echo "# Testing list compare (should return FALSE)..." >> $SEARCHOUT
168$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
169	"cn=Dynamic List,$LISTDN" "cn:FALSE" \
170	>> $SEARCHOUT 2>&1
171RC=$?
172case $RC in
1735)
174	echo "ldapcompare returned FALSE ($RC)"
175	;;
1766)
177	echo "ldapcompare returned TRUE ($RC)!"
178	test $KILLSERVERS != no && kill -HUP $KILLPIDS
179	exit $RC
180	;;
1810)
182	echo "ldapcompare returned success ($RC)!"
183	test $KILLSERVERS != no && kill -HUP $KILLPIDS
184	exit -1
185	;;
186*)
187	echo "ldapcompare failed ($RC)!"
188	test $KILLSERVERS != no && kill -HUP $KILLPIDS
189	exit $RC
190	;;
191esac
192echo "" >> $SEARCHOUT
193
194echo "Testing list compare (should return UNDEFINED)..."
195echo "# Testing list compare (should return UNDEFINED)..." >> $SEARCHOUT
196$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
197	"cn=Dynamic List,$LISTDN" "dc:UNDEFINED" \
198	>> $SEARCHOUT 2>&1
199RC=$?
200case $RC in
2015)
202	echo "ldapcompare returned FALSE ($RC)!"
203	test $KILLSERVERS != no && kill -HUP $KILLPIDS
204	exit $RC
205	;;
2066)
207	echo "ldapcompare returned TRUE ($RC)!"
208	test $KILLSERVERS != no && kill -HUP $KILLPIDS
209	exit $RC
210	;;
21116|32)
212	echo "ldapcompare returned UNDEFINED ($RC)"
213	;;
2140)
215	echo "ldapcompare returned success ($RC)!"
216	test $KILLSERVERS != no && kill -HUP $KILLPIDS
217	exit -1
218	;;
219*)
220	echo "ldapcompare failed ($RC)"
221	;;
222esac
223echo "" >> $SEARCHOUT
224
225echo "Testing list compare with manageDSAit..."
226echo "# Testing list compare with manageDSAit..." >> $SEARCHOUT
227$LDAPCOMPARE -h $LOCALHOST -p $PORT1 -MM \
228	"cn=Dynamic List,$LISTDN" "cn:Bjorn Jensen" \
229	>> $SEARCHOUT 2>&1
230RC=$?
231case $RC in
2325)
233	echo "ldapcompare returned FALSE ($RC)"
234	;;
2356)
236	echo "ldapcompare returned TRUE ($RC)!"
237	test $KILLSERVERS != no && kill -HUP $KILLPIDS
238	exit $RC
239	;;
2400)
241	echo "ldapcompare returned success ($RC)!"
242	test $KILLSERVERS != no && kill -HUP $KILLPIDS
243	exit -1
244	;;
245*)
246	echo "ldapcompare failed ($RC)!"
247	test $KILLSERVERS != no && kill -HUP $KILLPIDS
248	exit $RC
249	;;
250esac
251echo "" >> $SEARCHOUT
252
253echo "Reconfiguring slapd..."
254$LDAPMODIFY -x -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF > \
255	$TESTOUT 2>&1 << EOMODS
256version: 1
257dn: olcOverlay={0}dynlist,olcDatabase={2}$BACKEND,cn=config
258changetype: modify
259delete: olcDLattrSet
260olcDLattrSet: {0}
261-
262add: olcDLattrSet
263olcDLattrSet: groupOfURLs memberURL sn:cn mail
264-
265EOMODS
266
267echo "==========================================================" >> $LOG1
268
269echo "Testing attribute mapping"
270
271echo "Testing list search of all (mapped) attrs..."
272echo "# Testing list search of all (mapped) attrs..." >> $SEARCHOUT
273$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
274	'(cn=Dynamic List)' '*' \
275	>> $SEARCHOUT 2>&1
276RC=$?
277if test $RC != 0 ; then
278	echo "ldapsearch failed ($RC)!"
279	test $KILLSERVERS != no && kill -HUP $KILLPIDS
280	exit $RC
281fi
282
283echo "Testing list search of a (mapped) listed attr..."
284echo "# Testing list search of a (mapped) listed attr..." >> $SEARCHOUT
285$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
286	'(cn=Dynamic List)' sn \
287	>> $SEARCHOUT 2>&1
288RC=$?
289if test $RC != 0 ; then
290	echo "ldapsearch failed ($RC)!"
291	test $KILLSERVERS != no && kill -HUP $KILLPIDS
292	exit $RC
293fi
294
295echo "Testing list search of a (n unmapped) listed attr..."
296echo "# Testing list search of a (n unmapped) listed attr..." >> $SEARCHOUT
297$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
298	'(cn=Dynamic List)' mail \
299	>> $SEARCHOUT 2>&1
300RC=$?
301if test $RC != 0 ; then
302	echo "ldapsearch failed ($RC)!"
303	test $KILLSERVERS != no && kill -HUP $KILLPIDS
304	exit $RC
305fi
306
307echo "Testing list compare (mapped attrs) ..."
308echo "# Testing list compare (mapped attrs) ..." >> $SEARCHOUT
309$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
310	"cn=Dynamic List,$LISTDN" "sn:Bjorn Jensen" \
311	>> $SEARCHOUT 2>&1
312RC=$?
313case $RC in
3145)
315	echo "ldapcompare returned FALSE ($RC)!"
316	test $KILLSERVERS != no && kill -HUP $KILLPIDS
317	exit $RC
318	;;
3196)
320	echo "ldapcompare returned TRUE ($RC)"
321	;;
3220)
323	echo "ldapcompare returned success ($RC)!"
324	test $KILLSERVERS != no && kill -HUP $KILLPIDS
325	exit -1
326	;;
327*)
328	echo "ldapcompare failed ($RC)!"
329	test $KILLSERVERS != no && kill -HUP $KILLPIDS
330	exit $RC
331	;;
332esac
333echo "" >> $SEARCHOUT
334
335echo "Testing list compare (mapped attrs; should return FALSE)..."
336echo "# Testing list compare (mapped attrs; should return FALSE)..." >> $SEARCHOUT
337$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
338	"cn=Dynamic List,$LISTDN" "sn:FALSE" \
339	>> $SEARCHOUT 2>&1
340RC=$?
341case $RC in
3425)
343	echo "ldapcompare returned FALSE ($RC)"
344	;;
3456)
346	echo "ldapcompare returned TRUE ($RC)!"
347	test $KILLSERVERS != no && kill -HUP $KILLPIDS
348	exit $RC
349	;;
3500)
351	echo "ldapcompare returned success ($RC)!"
352	test $KILLSERVERS != no && kill -HUP $KILLPIDS
353	exit -1
354	;;
355*)
356	echo "ldapcompare failed ($RC)!"
357	test $KILLSERVERS != no && kill -HUP $KILLPIDS
358	exit $RC
359	;;
360esac
361echo "" >> $SEARCHOUT
362
363echo "Reconfiguring slapd..."
364$LDAPMODIFY -x -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF > \
365	$TESTOUT 2>&1 << EOMODS
366version: 1
367dn: olcOverlay={0}dynlist,olcDatabase={2}$BACKEND,cn=config
368changetype: modify
369delete: olcDLattrSet
370olcDLattrSet: {0}
371-
372add: olcDLattrSet
373olcDLattrSet: groupOfURLs memberURL member
374-
375EOMODS
376
377echo "==========================================================" >> $LOG1
378
379echo "Adding a dynamic list..."
380$LDAPADD -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
381	> $TESTOUT 2>&1 << EOMODS
382dn: cn=Dynamic List of Members,$LISTDN
383objectClass: groupOfURLs
384cn: Dynamic List of Members
385memberURL: ldap:///ou=People,${BASEDN}??sub?(objectClass=person)
386EOMODS
387
388echo "Testing list search of all attrs..."
389echo "# Testing list search of all attrs..." >> $SEARCHOUT
390$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
391	'(cn=Dynamic List of Members)' '*' \
392	>> $SEARCHOUT 2>&1
393RC=$?
394if test $RC != 0 ; then
395	echo "ldapsearch failed ($RC)!"
396	test $KILLSERVERS != no && kill -HUP $KILLPIDS
397	exit $RC
398fi
399
400echo "Testing list search of a listed attr..."
401echo "# Testing list search of a listed attr..." >> $SEARCHOUT
402$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
403	'(cn=Dynamic List of Members)' member \
404	>> $SEARCHOUT 2>&1
405RC=$?
406if test $RC != 0 ; then
407	echo "ldapsearch failed ($RC)!"
408	test $KILLSERVERS != no && kill -HUP $KILLPIDS
409	exit $RC
410fi
411
412echo "Testing list search of a non-listed attr..."
413echo "# 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 \
416	>> $SEARCHOUT 2>&1
417RC=$?
418if test $RC != 0 ; then
419	echo "ldapsearch failed ($RC)!"
420	test $KILLSERVERS != no && kill -HUP $KILLPIDS
421	exit $RC
422fi
423
424echo "Testing list search with (critical) manageDSAit..."
425echo "# 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))' '*' \
428	>> $SEARCHOUT 2>&1
429RC=$?
430if test $RC != 0 ; then
431	echo "ldapsearch failed ($RC)!"
432	test $KILLSERVERS != no && kill -HUP $KILLPIDS
433	exit $RC
434fi
435
436CMPDN="$BJORNSDN"
437echo "Testing list compare..."
438echo "# Testing list compare..." >> $SEARCHOUT
439$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
440	"cn=Dynamic List of Members,$LISTDN" "member:$CMPDN" \
441	>> $SEARCHOUT 2>&1
442RC=$?
443case $RC in
4445)
445	echo "ldapcompare returned FALSE ($RC)!"
446	test $KILLSERVERS != no && kill -HUP $KILLPIDS
447	exit $RC
448	;;
4496)
450	echo "ldapcompare returned TRUE ($RC)"
451	;;
4520)
453	echo "ldapcompare returned success ($RC)!"
454	test $KILLSERVERS != no && kill -HUP $KILLPIDS
455	exit -1
456	;;
457*)
458	echo "ldapcompare failed ($RC)!"
459	test $KILLSERVERS != no && kill -HUP $KILLPIDS
460	exit $RC
461	;;
462esac
463echo "" >> $SEARCHOUT
464
465echo "Testing list compare (should return FALSE)..."
466echo "# Testing list compare (should return FALSE)..." >> $SEARCHOUT
467$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \
468	"cn=Dynamic List of Members,$LISTDN" "member:cn=Foo Bar" \
469	>> $SEARCHOUT 2>&1
470RC=$?
471case $RC in
4725)
473	echo "ldapcompare returned FALSE ($RC)"
474	;;
4756)
476	echo "ldapcompare returned TRUE ($RC)!"
477	test $KILLSERVERS != no && kill -HUP $KILLPIDS
478	exit $RC
479	;;
4800)
481	echo "ldapcompare returned success ($RC)!"
482	test $KILLSERVERS != no && kill -HUP $KILLPIDS
483	exit -1
484	;;
485*)
486	echo "ldapcompare failed ($RC)!"
487	test $KILLSERVERS != no && kill -HUP $KILLPIDS
488	exit $RC
489	;;
490esac
491echo "" >> $SEARCHOUT
492
493echo "Testing list compare with manageDSAit..."
494echo "# Testing list compare with manageDSAit..." >> $SEARCHOUT
495$LDAPCOMPARE -h $LOCALHOST -p $PORT1 -MM \
496	"cn=Dynamic List,$LISTDN" "member:$CMPDN" \
497	>> $SEARCHOUT 2>&1
498RC=$?
499case $RC in
5005)
501	echo "ldapcompare returned FALSE ($RC)"
502	;;
5036)
504	echo "ldapcompare returned TRUE ($RC)!"
505	test $KILLSERVERS != no && kill -HUP $KILLPIDS
506	exit $RC
507	;;
5080)
509	echo "ldapcompare returned success ($RC)!"
510	test $KILLSERVERS != no && kill -HUP $KILLPIDS
511	exit -1
512	;;
513*)
514	echo "ldapcompare failed ($RC)!"
515	test $KILLSERVERS != no && kill -HUP $KILLPIDS
516	exit $RC
517	;;
518esac
519echo "" >> $SEARCHOUT
520
521echo "==========================================================" >> $LOG1
522
523echo "Testing dgIdentity..."
524
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
528version: 1
529dn: olcDatabase={2}$BACKEND,cn=config
530changetype: modify
531add: olcAccess
532olcAccess: to dn.base="cn=Dynamic List of Members,$LISTDN" by * read
533olcAccess: to * by users read by * search
534EOMODS
535
536echo "Testing list search without dgIdentity..."
537echo "# Testing list search without dgIdentity..." >> $SEARCHOUT
538$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
539	'(cn=Dynamic List of Members)' '*' \
540	>> $SEARCHOUT 2>&1
541RC=$?
542if test $RC != 0 ; then
543	echo "ldapsearch failed ($RC)!"
544	test $KILLSERVERS != no && kill -HUP $KILLPIDS
545	exit $RC
546fi
547
548$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
549	> $TESTOUT 2>&1 << EOMODS
550dn: cn=Dynamic List of Members,$LISTDN
551changetype: modify
552add: objectClass
553objectClass: dgIdentityAux
554-
555add: dgIdentity
556dgIdentity: $CMPDN
557EOMODS
558
559echo "Testing list search with dgIdentity..."
560echo "# Testing list search with dgIdentity..." >> $SEARCHOUT
561$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
562	'(cn=Dynamic List of Members)' '*' \
563	>> $SEARCHOUT 2>&1
564RC=$?
565if test $RC != 0 ; then
566	echo "ldapsearch failed ($RC)!"
567	test $KILLSERVERS != no && kill -HUP $KILLPIDS
568	exit $RC
569fi
570
571echo "Testing dgAuthz..."
572
573CMPDN="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
576dn: cn=Dynamic List of Members,$LISTDN
577changetype: modify
578add: dgAuthz
579dgAuthz: dn:$BABSDN
580EOMODS
581
582echo "Testing list search with dgIdentity and dgAuthz anonymously..."
583echo "# Testing list search with dgIdentity and dgAuthz anonymously..." >> $SEARCHOUT
584$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \
585	'(cn=Dynamic List of Members)' '*' \
586	>> $SEARCHOUT 2>&1
587RC=$?
588if test $RC != 0 ; then
589	echo "ldapsearch failed ($RC)!"
590	test $KILLSERVERS != no && kill -HUP $KILLPIDS
591	exit $RC
592fi
593
594echo "Testing list search with dgIdentity and dgAuthz as the authorized identity..."
595echo "# 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)' '*' \
599	>> $SEARCHOUT 2>&1
600RC=$?
601if test $RC != 0 ; then
602	echo "ldapsearch failed ($RC)!"
603	test $KILLSERVERS != no && kill -HUP $KILLPIDS
604	exit $RC
605fi
606
607test $KILLSERVERS != no && kill -HUP $KILLPIDS
608
609LDIF=$DYNLISTOUT
610
611echo "Filtering ldapsearch results..."
612$LDIFFILTER < $SEARCHOUT > $SEARCHFLT
613echo "Filtering original ldif used to create database..."
614$LDIFFILTER < $LDIF > $LDIFFLT
615echo "Comparing filter output..."
616$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
617
618if test $? != 0 ; then
619	echo "Comparison failed"
620	exit 1
621fi
622
623echo ">>>>> Test succeeded"
624
625test $KILLSERVERS != no && wait
626
627exit 0
628