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