test020-proxycache revision 1.1.1.8
1#! /bin/sh
2# $OpenLDAP$
3## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4##
5## Copyright 1998-2020 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, remaining test skipped..."
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 1
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 1
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
298CNT=`expr $CNT + 1`
299FILTER="(|(cn=All Staff)(sn=All Staff))"
300ATTRS="sn cn title uid undefinedAttr"
301echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
302echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
303$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
304	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
305RC=$?
306if test $RC != 0 ; then
307	echo "ldapsearch failed ($RC)!"
308	test $KILLSERVERS != no && kill -HUP $KILLPIDS
309	exit $RC
310fi
311
312FIRST=$CNT
313
314# queries 2-6,8-10 are cacheable
315CACHEABILITY=0111110111
316grep CACHEABLE $LOG2 | awk '{ 
317		if ($3 == "NOT") 
318			printf "Query %d not cacheable\n",NR
319		else 
320			printf "Query %d cacheable\n",NR
321	}' 
322CACHED=`grep CACHEABLE $LOG2 | awk '{ 
323		if ($3 == "NOT") 
324			printf "0" 
325		else 
326			printf "1" 
327	}'`
328
329if test "$CACHEABILITY" = "$CACHED" ; then
330	echo "Successfully verified cacheability"
331else 
332	echo "Error in verifying cacheability"
333	echo "$CACHED"
334	echo "$CACHEABILITY"
335	test $KILLSERVERS != no && kill -HUP $KILLPIDS
336	exit 1
337fi
338
339CNT=`expr $CNT + 1`
340FILTER="(|(cn=*Jones)(sn=Jones))"
341ATTRS="cn sn title uid"
342echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
343echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
344$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
345	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
346RC=$?
347if test $RC != 0 ; then
348	echo "ldapsearch failed ($RC)!"
349	test $KILLSERVERS != no && kill -HUP $KILLPIDS
350	exit $RC
351fi
352
353CNT=`expr $CNT + 1`
354FILTER="(sn=Smith)"
355ATTRS="cn sn title uid"
356echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
357echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
358$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
359	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
360RC=$?
361if test $RC != 0 ; then
362	echo "ldapsearch failed ($RC)!"
363	test $KILLSERVERS != no && kill -HUP $KILLPIDS
364	exit $RC
365fi
366
367CNT=`expr $CNT + 1`
368FILTER="(uid=bjorn)"
369ATTRS="mail postaladdress telephonenumber cn uid"
370echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
371echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
372$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
373	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
374RC=$?
375if test $RC != 0 ; then
376	echo "ldapsearch failed ($RC)!"
377	test $KILLSERVERS != no && kill -HUP $KILLPIDS
378	exit $RC
379fi
380
381CNT=`expr $CNT + 1`
382FILTER="(mail=jaj@mail.alumni.example.com)"
383ATTRS="cn sn title uid"
384echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
385echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
386$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
387	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
388RC=$?
389
390if test $RC != 0 ; then
391	echo "ldapsearch failed ($RC)!"
392	test $KILLSERVERS != no && kill -HUP $KILLPIDS
393	exit $RC
394fi
395
396CNT=`expr $CNT + 1`
397FILTER="(mail=*example.com)"
398ATTRS="cn sn title uid"
399USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
400UPASSWD="bjorn"
401echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
402echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
403$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
404	-D "$USERDN" -w "$UPASSWD" \
405	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
406RC=$?
407case $RC in
4080)
409	echo "ldapsearch should have failed!"
410	test $KILLSERVERS != no && kill -HUP $KILLPIDS
411	exit 1
412	;;
4134)
414	echo "ldapsearch failed ($RC)"
415	;;
416*)
417	echo "ldapsearch failed ($RC)!"
418	test $KILLSERVERS != no && kill -HUP $KILLPIDS
419	exit $RC
420	;;
421esac
422
423CNT=`expr $CNT + 1`
424FILTER="(uid=b*)"
425ATTRS="mail"
426USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com"
427UPASSWD="bjorn"
428echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
429echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
430$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
431	-D "$USERDN" -w "$UPASSWD" \
432	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
433RC=$?
434case $RC in
4350)
436	echo "ldapsearch should have failed!"
437	test $KILLSERVERS != no && kill -HUP $KILLPIDS
438	exit 1
439	;;
4404)
441	echo "ldapsearch failed ($RC)"
442	;;
443*)
444	echo "ldapsearch failed ($RC)!"
445	test $KILLSERVERS != no && kill -HUP $KILLPIDS
446	exit $RC
447	;;
448esac
449
450CNT=`expr $CNT + 1`
451FILTER="(|(cn=All Staff)(sn=All Staff))"
452ATTRS="sn cn title uid undefinedAttr"
453echo "Query $CNT: filter:$FILTER attrs:$ATTRS"  
454echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
455$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
456	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
457RC=$?
458if test $RC != 0 ; then
459	echo "ldapsearch failed ($RC)!"
460	test $KILLSERVERS != no && kill -HUP $KILLPIDS
461	exit $RC
462fi
463
464#queries 11-13,16-17 are answerable, 14-15 are not
465#actually, 14 would be answerable, but since 8 made mail=*example.com
466#not answerable because of sizelimit, queries contained in it are no longer
467#answerable as well
468ANSWERABILITY=1110011
469grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{ 
470		if (NR > FIRST) { 
471			if ($3 == "NOT") 
472				printf "Query %d not answerable\n",NR
473			else 
474				printf "Query %d answerable\n",NR 
475		}
476	}' 
477ANSWERED=`grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{ 
478		if (NR > FIRST) { 
479			if ($3 == "NOT") 
480				printf "0" 
481			else 
482				printf "1"
483		} 
484	}'`
485
486if test "$ANSWERABILITY" = "$ANSWERED" ; then
487	echo "Successfully verified answerability"
488else 
489	echo "Error in verifying answerability"
490	test $KILLSERVERS != no && kill -HUP $KILLPIDS
491	exit 1
492fi
493
494echo "Filtering ldapsearch results..."
495$LDIFFILTER -s ldif=a < $SEARCHOUT > $SEARCHFLT
496echo "Filtering original ldif..."
497$LDIFFILTER -s ldif=a < $PROXYCACHEOUT > $LDIFFLT
498echo "Comparing filter output..."
499$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
500
501if test $? != 0 ; then
502	echo "Comparison failed"
503	test $KILLSERVERS != no && kill -HUP $KILLPIDS
504	exit 1
505fi
506
507echo ""
508echo "Testing cache refresh"
509
510CNT=`expr $CNT + 1`
511FILTER="(&(objectclass=person)(uid=dots))"
512ATTRS="cn mail telephonenumber"
513echo "Query $CNT: filter:$FILTER attrs:$ATTRS" 
514echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT
515$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
516	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
517RC=$?
518if test $RC != 0 ; then
519	echo "ldapsearch failed ($RC)!"
520	test $KILLSERVERS != no && kill -HUP $KILLPIDS
521	exit $RC
522fi
523
524$LDAPMODIFY -x -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD <<EOF \
525	> /dev/null 2>&1
526dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com
527changetype: modify
528replace: mail
529mail: dots@admin.example2.com
530-
531
532EOF
533RC=$?
534if test $RC != 0 ; then
535	echo "ldapmodify failed ($RC)!"
536	test $KILLSERVERS != no && kill -HUP $KILLPIDS
537	exit $RC
538fi
539
540SLEEP=`expr $PCACHETTR + $PCACHE_CCPERIOD + 1`
541echo "Waiting $SLEEP seconds for cache to refresh"
542
543sleep $SLEEP
544
545echo "Checking entry again"
546$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
547	"$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT
548RC=$?
549if test $RC != 0 ; then
550	echo "ldapsearch failed ($RC)!"
551	test $KILLSERVERS != no && kill -HUP $KILLPIDS
552	exit $RC
553fi
554
555grep "^mail: dots@admin" $SEARCHOUT > /dev/null
556RC=$?
557if test $RC != 0 ; then
558	echo "Refresh failed"
559	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
560	exit 1
561fi
562
563echo ""
564echo "Testing Bind caching"
565
566CNT=`expr $CNT + 1`
567USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com"
568UPASSWD="jaj"
569echo "Query $CNT: $USERDN"
570echo "# Query $CNT: $USERDN" >> $SEARCHOUT
571$LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 \
572	-D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT
573RC=$?
574if test $RC != 0 ; then
575	echo "ldapsearch failed ($RC)!"
576	test $KILLSERVERS != no && kill -HUP $KILLPIDS
577	exit $RC
578fi
579
580grep "CACHING BIND" $LOG2 > /dev/null
581RC=$?
582if test $RC != 0 ; then
583	echo "Refresh failed"
584	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
585	exit 1
586fi
587
588CNT=`expr $CNT + 1`
589USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com"
590UPASSWD="jaj"
591echo "Query $CNT: (Bind should be cached)"
592echo "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT
593$LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 \
594	-D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT
595RC=$?
596if test $RC != 0 ; then
597	echo "ldapsearch failed ($RC)!"
598	test $KILLSERVERS != no && kill -HUP $KILLPIDS
599	exit $RC
600fi
601
602grep "CACHED BIND" $LOG2 > /dev/null
603RC=$?
604if test $RC != 0 ; then
605	echo "Refresh failed"
606	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
607	exit 1
608fi
609
610echo ""
611echo "Testing pwdModify"
612$LDAPPASSWD -h $LOCALHOST -p $PORT2 \
613	-D "$MANAGERDN" -w "$PASSWD" -s newpw "$USERDN" >> $TESTOUT 2>&1
614RC=$?
615if test $RC != 0 ; then
616	echo "ldappasswd failed ($RC)!"
617	test $KILLSERVERS != no && kill -HUP $KILLPIDS
618	exit $RC
619fi
620
621RC=`grep "CACH.* BIND" $LOG2 | wc -l`
622if test $RC != 3 ; then
623	echo "ldappasswd didn't update the cache"
624	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
625	exit 1
626fi
627
628CNT=`expr $CNT + 1`
629USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com"
630UPASSWD=newpw
631echo "Query $CNT: (Bind should be cached)"
632echo "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT
633$LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 \
634	-D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT
635RC=$?
636if test $RC != 0 ; then
637	echo "ldapsearch failed ($RC)!"
638	test $KILLSERVERS != no && kill -HUP $KILLPIDS
639	exit $RC
640fi
641
642RC=`grep "CACH.* BIND" $LOG2 | wc -l`
643if test $RC != 4 ; then
644	echo "Bind wasn't answered from cache"
645	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
646	exit 1
647fi
648test $KILLSERVERS != no && kill -HUP $KILLPIDS
649
650echo ">>>>> Test succeeded"
651
652test $KILLSERVERS != no && wait
653
654exit 0
655