1#! /bin/sh 2# $OpenLDAP: pkg/ldap/tests/scripts/test020-proxycache,v 1.26.2.9 2008/02/11 23:26:51 kurt Exp $ 3## This work is part of OpenLDAP Software <http://www.openldap.org/>. 4## 5## Copyright 1998-2008 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 16CACHETTL="1m" 17NCACHETTL="1m" 18SCACHETTL="1m" 19CACHE_ENTRY_LIMIT=6 20 21. $SRCDIR/scripts/defines.sh 22 23if test $PROXYCACHE = pcacheno; then 24 echo "Proxy cache overlay not available, test skipped" 25 exit 0 26fi 27 28if test $BACKLDAP = "ldapno" ; then 29 echo "LDAP backend not available, test skipped" 30 exit 0 31fi 32 33mkdir -p $TESTDIR $DBDIR1 $DBDIR2 34 35# Test proxy caching: 36# - start master 37# - start proxy cache 38# - populate master 39# - perform first set of searches at the proxy 40# - verify cacheability 41# - perform second set of searches at the proxy 42# - verify answerability 43 44echo "Starting master slapd on TCP/IP port $PORT1..." 45. $CONFFILTER < $CACHEMASTERCONF > $CONF1 46$SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 & 47PID=$! 48if test $WAIT != 0 ; then 49 echo PID $PID 50 read foo 51fi 52KILLPIDS="$PID" 53 54sleep 1 55 56echo "Using ldapsearch to check that master slapd is running..." 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 74echo "Using ldapadd to populate the master directory..." 75$LDAPADD -x -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ 76 $LDIFORDERED > /dev/null 2>&1 77RC=$? 78if test $RC != 0 ; then 79 echo "ldapadd failed ($RC)!" 80 test $KILLSERVERS != no && kill -HUP $KILLPIDS 81 exit $RC 82fi 83 84echo "Starting proxy cache on TCP/IP port $PORT2..." 85. $CONFFILTER < $PROXYCACHECONF > $CONF2 86$SLAPD -f $CONF2 -h $URI2 -d $LVL -d pcache > $LOG2 2>&1 & 87CACHEPID=$! 88if test $WAIT != 0 ; then 89 echo CACHEPID $CACHEPID 90 read foo 91fi 92KILLPIDS="$KILLPIDS $CACHEPID" 93 94sleep 1 95 96echo "Using ldapsearch to check that proxy slapd is running..." 97for i in 0 1 2 3 4 5; do 98 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ 99 'objectclass=*' > /dev/null 2>&1 100 RC=$? 101 if test $RC = 0 ; then 102 break 103 fi 104 echo "Waiting 5 seconds for slapd to start..." 105 sleep 5 106done 107 108if test $RC != 0 ; then 109 echo "ldapsearch failed ($RC)!" 110 test $KILLSERVERS != no && kill -HUP $KILLPIDS 111 exit $RC 112fi 113 114cat /dev/null > $SEARCHOUT 115 116echo "Making queries on the proxy cache..." 117CNT=0 118 119CNT=`expr $CNT + 1` 120FILTER="(sn=Jon)" 121echo "Query $CNT: filter:$FILTER attrs:all (expect nothing)" 122echo "# Query $CNT: filter:$FILTER attrs:all (expect nothing)" >> $SEARCHOUT 123$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 124 "$FILTER" >> $SEARCHOUT 2>> $TESTOUT 125RC=$? 126if test $RC != 0 ; then 127 echo "ldapsearch failed ($RC)!" 128 test $KILLSERVERS != no && kill -HUP $KILLPIDS 129 exit $RC 130fi 131 132# ITS#4491, if debug messages are unavailable, we can't verify the tests. 133grep "query template" $LOG2 > /dev/null 134RC=$? 135if test $RC != 0 ; then 136 echo "Debug messages unavailable, test aborted..." 137 test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait 138 exit 0 139fi 140 141CNT=`expr $CNT + 1` 142FILTER="(|(cn=*Jon*)(sn=Jon*))" 143ATTRS="cn sn title uid" 144echo "Query $CNT: filter:$FILTER attrs:$ATTRS" 145echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT 146$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 147 "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT 148RC=$? 149if test $RC != 0 ; then 150 echo "ldapsearch failed ($RC)!" 151 test $KILLSERVERS != no && kill -HUP $KILLPIDS 152 exit $RC 153fi 154 155CNT=`expr $CNT + 1` 156FILTER="(sn=Smith*)" 157ATTRS="cn sn uid" 158echo "Query $CNT: filter:$FILTER attrs:$ATTRS" 159echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT 160$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 161 "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT 162RC=$? 163if test $RC != 0 ; then 164 echo "ldapsearch failed ($RC)!" 165 test $KILLSERVERS != no && kill -HUP $KILLPIDS 166 exit $RC 167fi 168 169CNT=`expr $CNT + 1` 170FILTER="(sn=Doe*)" 171ATTRS="cn sn title uid" 172echo "Query $CNT: filter:$FILTER attrs:$ATTRS" 173echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT 174$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 175 "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT 176RC=$? 177if test $RC != 0 ; then 178 echo "ldapsearch failed ($RC)!" 179 test $KILLSERVERS != no && kill -HUP $KILLPIDS 180 exit $RC 181fi 182 183CNT=`expr $CNT + 1` 184FILTER="(uid=johnd)" 185ATTRS="mail postaladdress telephonenumber cn uid" 186echo "Query $CNT: filter:$FILTER attrs:$ATTRS" 187echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT 188$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 189 "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT 190RC=$? 191if test $RC != 0 ; then 192 echo "ldapsearch failed ($RC)!" 193 test $KILLSERVERS != no && kill -HUP $KILLPIDS 194 exit $RC 195fi 196 197CNT=`expr $CNT + 1` 198FILTER="(mail=*@mail.alumni.example.com)" 199ATTRS="cn sn title uid" 200echo "Query $CNT: filter:$FILTER attrs:$ATTRS" 201echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT 202$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 203 "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT 204RC=$? 205if test $RC != 0 ; then 206 echo "ldapsearch failed ($RC)!" 207 test $KILLSERVERS != no && kill -HUP $KILLPIDS 208 exit $RC 209fi 210 211CNT=`expr $CNT + 1` 212FILTER="(mail=*)" 213ATTRS="cn sn title uid" 214echo "Query $CNT: filter:$FILTER attrs:$ATTRS" 215echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT 216$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 217 "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT 218RC=$? 219if test $RC != 0 ; then 220 echo "ldapsearch failed ($RC)!" 221 test $KILLSERVERS != no && kill -HUP $KILLPIDS 222 exit $RC 223fi 224 225CNT=`expr $CNT + 1` 226FILTER="(mail=*example.com)" 227ATTRS="cn sn title uid" 228USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" 229PASSWD="bjorn" 230echo "Query $CNT: filter:$FILTER attrs:$ATTRS" 231echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT 232$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 233 -D "$USERDN" -w "$PASSWD" \ 234 "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT 235RC=$? 236case $RC in 2370) 238 echo "ldapsearch should have failed!" 239 test $KILLSERVERS != no && kill -HUP $KILLPIDS 240 exit $RC 241 ;; 2424) 243 echo "ldapsearch failed ($RC)" 244 ;; 245*) 246 echo "ldapsearch failed ($RC)!" 247 test $KILLSERVERS != no && kill -HUP $KILLPIDS 248 exit $RC 249 ;; 250esac 251 252CNT=`expr $CNT + 1` 253FILTER="(uid=b*)" 254ATTRS="mail" 255USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" 256PASSWD="bjorn" 257echo "Query $CNT: filter:$FILTER attrs:$ATTRS" 258echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT 259$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 260 -D "$USERDN" -w "$PASSWD" \ 261 "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT 262RC=$? 263case $RC in 2640) 265 echo "ldapsearch should have failed!" 266 test $KILLSERVERS != no && kill -HUP $KILLPIDS 267 exit $RC 268 ;; 2694) 270 echo "ldapsearch failed ($RC)" 271 ;; 272*) 273 echo "ldapsearch failed ($RC)!" 274 test $KILLSERVERS != no && kill -HUP $KILLPIDS 275 exit $RC 276 ;; 277esac 278 279FIRST=$CNT 280 281# queries 2-6,8-9 are cacheable 282CACHEABILITY=011111011 283grep CACHEABLE $LOG2 | awk '{ 284 if ($2 == "NOT") 285 printf "Query %d not cacheable\n",NR 286 else 287 printf "Query %d cacheable\n",NR 288 }' 289CACHED=`grep CACHEABLE $LOG2 | awk '{ 290 if ($2 == "NOT") 291 printf "0" 292 else 293 printf "1" 294 }'` 295 296if test "$CACHEABILITY" = "$CACHED" ; then 297 echo "Successfully verified cacheability" 298else 299 echo "Error in verifying cacheability" 300 test $KILLSERVERS != no && kill -HUP $KILLPIDS 301 exit 1 302fi 303 304CNT=`expr $CNT + 1` 305FILTER="(|(cn=*Jones)(sn=Jones))" 306ATTRS="cn sn title uid" 307echo "Query $CNT: filter:$FILTER attrs:$ATTRS" 308echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT 309$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 310 "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT 311RC=$? 312if test $RC != 0 ; then 313 echo "ldapsearch failed ($RC)!" 314 test $KILLSERVERS != no && kill -HUP $KILLPIDS 315 exit $RC 316fi 317 318CNT=`expr $CNT + 1` 319FILTER="(sn=Smith)" 320ATTRS="cn sn title uid" 321echo "Query $CNT: filter:$FILTER attrs:$ATTRS" 322echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT 323$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 324 "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT 325RC=$? 326if test $RC != 0 ; then 327 echo "ldapsearch failed ($RC)!" 328 test $KILLSERVERS != no && kill -HUP $KILLPIDS 329 exit $RC 330fi 331 332CNT=`expr $CNT + 1` 333FILTER="(uid=bjorn)" 334ATTRS="mail postaladdress telephonenumber cn uid" 335echo "Query $CNT: filter:$FILTER attrs:$ATTRS" 336echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT 337$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 338 "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT 339RC=$? 340if test $RC != 0 ; then 341 echo "ldapsearch failed ($RC)!" 342 test $KILLSERVERS != no && kill -HUP $KILLPIDS 343 exit $RC 344fi 345 346CNT=`expr $CNT + 1` 347FILTER="(mail=jaj@mail.alumni.example.com)" 348ATTRS="cn sn title uid" 349echo "Query $CNT: filter:$FILTER attrs:$ATTRS" 350echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT 351$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 352 "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT 353RC=$? 354 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="(mail=*example.com)" 363ATTRS="cn sn title uid" 364USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" 365PASSWD="bjorn" 366echo "Query $CNT: filter:$FILTER attrs:$ATTRS" 367echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT 368$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 369 -D "$USERDN" -w "$PASSWD" \ 370 "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT 371RC=$? 372case $RC in 3730) 374 echo "ldapsearch should have failed!" 375 test $KILLSERVERS != no && kill -HUP $KILLPIDS 376 exit $RC 377 ;; 3784) 379 echo "ldapsearch failed ($RC)" 380 ;; 381*) 382 echo "ldapsearch failed ($RC)!" 383 test $KILLSERVERS != no && kill -HUP $KILLPIDS 384 exit $RC 385 ;; 386esac 387 388CNT=`expr $CNT + 1` 389FILTER="(uid=b*)" 390ATTRS="mail" 391USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" 392PASSWD="bjorn" 393echo "Query $CNT: filter:$FILTER attrs:$ATTRS" 394echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT 395$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ 396 -D "$USERDN" -w "$PASSWD" \ 397 "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT 398RC=$? 399case $RC in 4000) 401 echo "ldapsearch should have failed!" 402 test $KILLSERVERS != no && kill -HUP $KILLPIDS 403 exit $RC 404 ;; 4054) 406 echo "ldapsearch failed ($RC)" 407 ;; 408*) 409 echo "ldapsearch failed ($RC)!" 410 test $KILLSERVERS != no && kill -HUP $KILLPIDS 411 exit $RC 412 ;; 413esac 414 415#queries 10-12,15 are answerable, 13-14 are not 416#actually, 12 would be answerable, but since 8 made mail=*example.com 417#not answerable because of sizelimit, queries contained in it are no longer 418#answerable as well 419ANSWERABILITY=111001 420grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{ 421 if (NR > FIRST) { 422 if ($2 == "NOT") 423 printf "Query %d not answerable\n",NR 424 else 425 printf "Query %d answerable\n",NR 426 } 427 }' 428ANSWERED=`grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{ 429 if (NR > FIRST) { 430 if ($2 == "NOT") 431 printf "0" 432 else 433 printf "1" 434 } 435 }'` 436 437test $KILLSERVERS != no && kill -HUP $KILLPIDS 438 439if test "$ANSWERABILITY" = "$ANSWERED" ; then 440 echo "Successfully verified answerability" 441else 442 echo "Error in verifying answerability" 443 exit 1 444fi 445 446echo "Filtering ldapsearch results..." 447. $LDIFFILTER < $SEARCHOUT > $SEARCHFLT 448echo "Filtering original ldif..." 449. $LDIFFILTER < $PROXYCACHEOUT > $LDIFFLT 450echo "Comparing filter output..." 451$CMP $SEARCHFLT $LDIFFLT > $CMPOUT 452 453if test $? != 0 ; then 454 echo "Comparison failed" 455 exit 1 456fi 457 458echo ">>>>> Test succeeded" 459 460test $KILLSERVERS != no && wait 461 462exit 0 463