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