xref: /netbsd-src/external/bsd/openldap/dist/tests/scripts/test020-proxycache (revision b1c86f5f087524e68db12794ee9c3e3da1ab17a0)
1#! /bin/sh
2# OpenLDAP: pkg/ldap/tests/scripts/test020-proxycache,v 1.26.2.11 2009/08/25 21:24:47 quanah Exp
3## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4##
5## Copyright 1998-2009 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
16PCACHETTL=${PCACHETTL-"1m"}
17PCACHENTTL=${PCACHENTTL-"1m"}
18PCACHESTTL=${PCACHESTTL-"1m"}
19PCACHE_ENTRY_LIMIT=${PCACHE_ENTRY_LIMIT-"6"}
20PCACHE_CCPERIOD=${PCACHE_CCPERIOD-"2"}
21PCACHETTR=${PCACHETTR-"2"}
22PCACHEBTTR=${PCACHEBTTR-"5"}
23
24. $SRCDIR/scripts/defines.sh
25
26if test $PROXYCACHE = pcacheno; then
27	echo "Proxy cache overlay not available, test skipped"
28	exit 0
29fi
30
31if test $BACKLDAP = "ldapno" ; then
32	echo "LDAP backend not available, test skipped"
33	exit 0
34fi
35
36mkdir -p $TESTDIR $DBDIR1 $DBDIR2
37
38# Test proxy caching:
39# - start master
40# - start proxy cache
41# - populate master
42# - perform first set of searches at the proxy
43# - verify cacheability
44# - perform second set of searches at the proxy
45# - verify answerability
46
47echo "Starting master slapd on TCP/IP port $PORT1..."
48. $CONFFILTER < $CACHEMASTERCONF > $CONF1
49$SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 &
50PID=$!
51if test $WAIT != 0 ; then
52	echo PID $PID
53	read foo
54fi
55KILLPIDS="$PID"
56
57sleep 1
58
59echo "Using ldapsearch to check that master slapd is running..."
60for i in 0 1 2 3 4 5; do
61	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
62		'objectclass=*' > /dev/null 2>&1
63	RC=$?
64	if test $RC = 0 ; then
65		break
66	fi
67	echo "Waiting 5 seconds for slapd to start..."
68	sleep 5
69done
70
71if test $RC != 0 ; then
72	echo "ldapsearch failed ($RC)!"
73	test $KILLSERVERS != no && kill -HUP $KILLPIDS
74	exit $RC
75fi
76
77echo "Using ldapadd to populate the master directory..."
78$LDAPADD -x -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \
79	$LDIFORDERED > /dev/null 2>&1
80RC=$?
81if test $RC != 0 ; then
82	echo "ldapadd failed ($RC)!"
83	test $KILLSERVERS != no && kill -HUP $KILLPIDS
84	exit $RC
85fi
86
87echo "Starting proxy cache on TCP/IP port $PORT2..."
88. $CONFFILTER < $PROXYCACHECONF | sed \
89	-e "s/@TTL@/${PCACHETTL}/"			\
90	-e "s/@NTTL@/${PCACHENTTL}/"		\
91	-e "s/@STTL@/${PCACHENTTL}/"		\
92	-e "s/@TTR@/${PCACHETTR}/"			\
93	-e "s/@ENTRY_LIMIT@/${PCACHE_ENTRY_LIMIT}/"	\
94	-e "s/@CCPERIOD@/${PCACHE_CCPERIOD}/"			\
95	-e "s/@BTTR@/${PCACHEBTTR}/"			\
96	> $CONF2
97
98$SLAPD -f $CONF2 -h $URI2 -d $LVL -d pcache > $LOG2 2>&1 &
99CACHEPID=$!
100if test $WAIT != 0 ; then
101	echo CACHEPID $CACHEPID
102	read foo
103fi
104KILLPIDS="$KILLPIDS $CACHEPID"
105
106sleep 1
107
108echo "Using ldapsearch to check that proxy slapd is running..."
109for i in 0 1 2 3 4 5; do
110	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \
111		'objectclass=*' > /dev/null 2>&1
112	RC=$?
113	if test $RC = 0 ; then
114		break
115	fi
116	echo "Waiting 5 seconds for slapd to start..."
117	sleep 5
118done
119
120if test $RC != 0 ; then
121	echo "ldapsearch failed ($RC)!"
122	test $KILLSERVERS != no && kill -HUP $KILLPIDS
123	exit $RC
124fi
125
126cat /dev/null > $SEARCHOUT
127
128echo "Making queries on the proxy cache..."
129CNT=0
130
131CNT=`expr $CNT + 1`
132FILTER="(sn=Jon)"
133echo "Query $CNT: filter:$FILTER attrs:all (expect nothing)"
134echo "# Query $CNT: filter:$FILTER attrs:all (expect nothing)" >> $SEARCHOUT
135$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
136	"$FILTER" >> $SEARCHOUT 2>> $TESTOUT
137RC=$?
138if test $RC != 0 ; then
139	echo "ldapsearch failed ($RC)!"
140	test $KILLSERVERS != no && kill -HUP $KILLPIDS
141	exit $RC
142fi
143
144# ITS#4491, if debug messages are unavailable, we can't verify the tests.
145grep "query template" $LOG2 > /dev/null
146RC=$?
147if test $RC != 0 ; then
148	echo "Debug messages unavailable, test aborted..."
149	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
150	exit 0
151fi
152
153CNT=`expr $CNT + 1`
154FILTER="(|(cn=*Jon*)(sn=Jon*))"
155ATTRS="cn sn title uid"
156echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
157echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
158$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
159	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
160RC=$?
161if test $RC != 0 ; then
162	echo "ldapsearch failed ($RC)!"
163	test $KILLSERVERS != no && kill -HUP $KILLPIDS
164	exit $RC
165fi
166
167CNT=`expr $CNT + 1`
168FILTER="(sn=Smith*)"
169ATTRS="cn sn uid"
170echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
171echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
172$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
173	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
174RC=$?
175if test $RC != 0 ; then
176	echo "ldapsearch failed ($RC)!"
177	test $KILLSERVERS != no && kill -HUP $KILLPIDS
178	exit $RC
179fi
180
181CNT=`expr $CNT + 1`
182FILTER="(sn=Doe*)"
183ATTRS="cn sn title uid"
184echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
185echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
186$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
187	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
188RC=$?
189if test $RC != 0 ; then
190	echo "ldapsearch failed ($RC)!"
191	test $KILLSERVERS != no && kill -HUP $KILLPIDS
192	exit $RC
193fi
194
195CNT=`expr $CNT + 1`
196FILTER="(uid=johnd)"
197ATTRS="mail postaladdress telephonenumber cn uid"
198echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
199echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
200$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
201	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
202RC=$?
203if test $RC != 0 ; then
204	echo "ldapsearch failed ($RC)!"
205	test $KILLSERVERS != no && kill -HUP $KILLPIDS
206	exit $RC
207fi
208
209CNT=`expr $CNT + 1`
210FILTER="(mail=*@mail.alumni.example.com)"
211ATTRS="cn sn title uid"
212echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
213echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
214$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
215	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
216RC=$?
217if test $RC != 0 ; then
218	echo "ldapsearch failed ($RC)!"
219	test $KILLSERVERS != no && kill -HUP $KILLPIDS
220	exit $RC
221fi
222
223CNT=`expr $CNT + 1`
224FILTER="(mail=*)"
225ATTRS="cn sn title uid"
226echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
227echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
228$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
229	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
230RC=$?
231if test $RC != 0 ; then
232	echo "ldapsearch failed ($RC)!"
233	test $KILLSERVERS != no && kill -HUP $KILLPIDS
234	exit $RC
235fi
236
237CNT=`expr $CNT + 1`
238FILTER="(mail=*example.com)"
239ATTRS="cn sn title uid"
240USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
241UPASSWD="bjorn"
242echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
243echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
244$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
245	-D "$USERDN" -w "$UPASSWD" \
246	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
247RC=$?
248case $RC in
2490)
250	echo "ldapsearch should have failed!"
251	test $KILLSERVERS != no && kill -HUP $KILLPIDS
252	exit $RC
253	;;
2544)
255	echo "ldapsearch failed ($RC)"
256	;;
257*)
258	echo "ldapsearch failed ($RC)!"
259	test $KILLSERVERS != no && kill -HUP $KILLPIDS
260	exit $RC
261	;;
262esac
263
264CNT=`expr $CNT + 1`
265FILTER="(uid=b*)"
266ATTRS="mail"
267USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
268UPASSWD="bjorn"
269echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
270echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
271$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
272	-D "$USERDN" -w "$UPASSWD" \
273	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
274RC=$?
275case $RC in
2760)
277	echo "ldapsearch should have failed!"
278	test $KILLSERVERS != no && kill -HUP $KILLPIDS
279	exit $RC
280	;;
2814)
282	echo "ldapsearch failed ($RC)"
283	;;
284*)
285	echo "ldapsearch failed ($RC)!"
286	test $KILLSERVERS != no && kill -HUP $KILLPIDS
287	exit $RC
288	;;
289esac
290
291FIRST=$CNT
292
293# queries 2-6,8-9 are cacheable
294CACHEABILITY=011111011
295grep CACHEABLE $LOG2 | awk '{
296		if ($2 == "NOT")
297			printf "Query %d not cacheable\n",NR
298		else
299			printf "Query %d cacheable\n",NR
300	}'
301CACHED=`grep CACHEABLE $LOG2 | awk '{
302		if ($2 == "NOT")
303			printf "0"
304		else
305			printf "1"
306	}'`
307
308if test "$CACHEABILITY" = "$CACHED" ; then
309	echo "Successfully verified cacheability"
310else
311	echo "Error in verifying cacheability"
312	test $KILLSERVERS != no && kill -HUP $KILLPIDS
313	exit 1
314fi
315
316CNT=`expr $CNT + 1`
317FILTER="(|(cn=*Jones)(sn=Jones))"
318ATTRS="cn sn title uid"
319echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
320echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
321$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
322	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
323RC=$?
324if test $RC != 0 ; then
325	echo "ldapsearch failed ($RC)!"
326	test $KILLSERVERS != no && kill -HUP $KILLPIDS
327	exit $RC
328fi
329
330CNT=`expr $CNT + 1`
331FILTER="(sn=Smith)"
332ATTRS="cn sn title uid"
333echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
334echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
335$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
336	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
337RC=$?
338if test $RC != 0 ; then
339	echo "ldapsearch failed ($RC)!"
340	test $KILLSERVERS != no && kill -HUP $KILLPIDS
341	exit $RC
342fi
343
344CNT=`expr $CNT + 1`
345FILTER="(uid=bjorn)"
346ATTRS="mail postaladdress telephonenumber cn uid"
347echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
348echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
349$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
350	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
351RC=$?
352if test $RC != 0 ; then
353	echo "ldapsearch failed ($RC)!"
354	test $KILLSERVERS != no && kill -HUP $KILLPIDS
355	exit $RC
356fi
357
358CNT=`expr $CNT + 1`
359FILTER="(mail=jaj@mail.alumni.example.com)"
360ATTRS="cn sn title uid"
361echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
362echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
363$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
364	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
365RC=$?
366
367if test $RC != 0 ; then
368	echo "ldapsearch failed ($RC)!"
369	test $KILLSERVERS != no && kill -HUP $KILLPIDS
370	exit $RC
371fi
372
373CNT=`expr $CNT + 1`
374FILTER="(mail=*example.com)"
375ATTRS="cn sn title uid"
376USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
377UPASSWD="bjorn"
378echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
379echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
380$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
381	-D "$USERDN" -w "$UPASSWD" \
382	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
383RC=$?
384case $RC in
3850)
386	echo "ldapsearch should have failed!"
387	test $KILLSERVERS != no && kill -HUP $KILLPIDS
388	exit $RC
389	;;
3904)
391	echo "ldapsearch failed ($RC)"
392	;;
393*)
394	echo "ldapsearch failed ($RC)!"
395	test $KILLSERVERS != no && kill -HUP $KILLPIDS
396	exit $RC
397	;;
398esac
399
400CNT=`expr $CNT + 1`
401FILTER="(uid=b*)"
402ATTRS="mail"
403USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
404UPASSWD="bjorn"
405echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
406echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
407$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
408	-D "$USERDN" -w "$UPASSWD" \
409	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
410RC=$?
411case $RC in
4120)
413	echo "ldapsearch should have failed!"
414	test $KILLSERVERS != no && kill -HUP $KILLPIDS
415	exit $RC
416	;;
4174)
418	echo "ldapsearch failed ($RC)"
419	;;
420*)
421	echo "ldapsearch failed ($RC)!"
422	test $KILLSERVERS != no && kill -HUP $KILLPIDS
423	exit $RC
424	;;
425esac
426
427#queries 10-12,15 are answerable, 13-14 are not
428#actually, 12 would be answerable, but since 8 made mail=*example.com
429#not answerable because of sizelimit, queries contained in it are no longer
430#answerable as well
431ANSWERABILITY=111001
432grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{
433		if (NR > FIRST) {
434			if ($2 == "NOT")
435				printf "Query %d not answerable\n",NR
436			else
437				printf "Query %d answerable\n",NR
438		}
439	}'
440ANSWERED=`grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{
441		if (NR > FIRST) {
442			if ($2 == "NOT")
443				printf "0"
444			else
445				printf "1"
446		}
447	}'`
448
449if test "$ANSWERABILITY" = "$ANSWERED" ; then
450	echo "Successfully verified answerability"
451else
452	echo "Error in verifying answerability"
453	test $KILLSERVERS != no && kill -HUP $KILLPIDS
454	exit 1
455fi
456
457echo "Filtering ldapsearch results..."
458. $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
459echo "Filtering original ldif..."
460. $LDIFFILTER < $PROXYCACHEOUT > $LDIFFLT
461echo "Comparing filter output..."
462$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
463
464if test $? != 0 ; then
465	echo "Comparison failed"
466	test $KILLSERVERS != no && kill -HUP $KILLPIDS
467	exit 1
468fi
469
470echo ""
471echo "Testing cache refresh"
472
473CNT=`expr $CNT + 1`
474FILTER="(&(objectclass=person)(uid=dots))"
475ATTRS="cn mail telephonenumber"
476echo "Query $CNT: filter:$FILTER attrs:$ATTRS"
477echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
478$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
479	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
480RC=$?
481if test $RC != 0 ; then
482	echo "ldapsearch failed ($RC)!"
483	test $KILLSERVERS != no && kill -HUP $KILLPIDS
484	exit $RC
485fi
486
487$LDAPMODIFY -x -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD <<EOF \
488	> /dev/null 2>&1
489dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com
490changetype: modify
491replace: mail
492mail: dots@admin.example2.com
493-
494
495EOF
496RC=$?
497if test $RC != 0 ; then
498	echo "ldapmodify failed ($RC)!"
499	test $KILLSERVERS != no && kill -HUP $KILLPIDS
500	exit $RC
501fi
502
503SLEEP=`expr $PCACHETTR + $PCACHE_CCPERIOD`
504echo "Waiting $SLEEP seconds for cache to refresh"
505
506sleep $SLEEP
507
508echo "Checking entry again"
509$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
510	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
511RC=$?
512if test $RC != 0 ; then
513	echo "ldapsearch failed ($RC)!"
514	test $KILLSERVERS != no && kill -HUP $KILLPIDS
515	exit $RC
516fi
517
518grep "^mail: dots@admin" $SEARCHOUT > /dev/null
519RC=$?
520if test $RC != 0 ; then
521	echo "Refresh failed"
522	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
523	exit 0
524fi
525
526echo ""
527echo "Testing Bind caching"
528
529CNT=`expr $CNT + 1`
530USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com"
531UPASSWD="jaj"
532echo "Query $CNT: $USERDN"
533echo "# Query $CNT: $USERDN" >> $SEARCHOUT
534$LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 \
535	-D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT
536RC=$?
537if test $RC != 0 ; then
538	echo "ldapsearch failed ($RC)!"
539	test $KILLSERVERS != no && kill -HUP $KILLPIDS
540	exit $RC
541fi
542
543grep "CACHING BIND" $LOG2 > /dev/null
544RC=$?
545if test $RC != 0 ; then
546	echo "Refresh failed"
547	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
548	exit 0
549fi
550
551CNT=`expr $CNT + 1`
552USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com"
553UPASSWD="jaj"
554echo "Query $CNT: (Bind should be cached)"
555echo "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT
556$LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 \
557	-D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT
558RC=$?
559if test $RC != 0 ; then
560	echo "ldapsearch failed ($RC)!"
561	test $KILLSERVERS != no && kill -HUP $KILLPIDS
562	exit $RC
563fi
564
565grep "CACHED BIND" $LOG2 > /dev/null
566RC=$?
567if test $RC != 0 ; then
568	echo "Refresh failed"
569	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
570	exit 0
571fi
572
573echo ""
574echo "Testing pwdModify"
575$LDAPPASSWD -h $LOCALHOST -p $PORT2 \
576	-D "$MANAGERDN" -w "$PASSWD" -s newpw "$USERDN" >> $TESTOUT 2>&1
577RC=$?
578if test $RC != 0 ; then
579	echo "ldappasswd failed ($RC)!"
580	test $KILLSERVERS != no && kill -HUP $KILLPIDS
581	exit $RC
582fi
583
584RC=`grep "CACH.* BIND" $LOG2 | wc -l`
585if test $RC != 3 ; then
586	echo "ldappasswd didn't update the cache"
587	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
588	exit 0
589fi
590
591CNT=`expr $CNT + 1`
592USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com"
593UPASSWD=newpw
594echo "Query $CNT: (Bind should be cached)"
595echo "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT
596$LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 \
597	-D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT
598RC=$?
599if test $RC != 0 ; then
600	echo "ldapsearch failed ($RC)!"
601	test $KILLSERVERS != no && kill -HUP $KILLPIDS
602	exit $RC
603fi
604
605RC=`grep "CACH.* BIND" $LOG2 | wc -l`
606if test $RC != 4 ; then
607	echo "Bind wasn't answered from cache"
608	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
609	exit 0
610fi
611test $KILLSERVERS != no && kill -HUP $KILLPIDS
612
613echo ">>>>> Test succeeded"
614
615test $KILLSERVERS != no && wait
616
617exit 0
618