Home | History | Annotate | Line # | Download | only in scripts
      1      1.1  christos #! /bin/sh
      2      1.1  christos # $OpenLDAP$
      3      1.1  christos ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
      4      1.1  christos ##
      5  1.1.1.5  christos ## Copyright 1998-2024 The OpenLDAP Foundation.
      6      1.1  christos ## All rights reserved.
      7      1.1  christos ##
      8      1.1  christos ## Redistribution and use in source and binary forms, with or without
      9      1.1  christos ## modification, are permitted only as authorized by the OpenLDAP
     10      1.1  christos ## Public License.
     11      1.1  christos ##
     12      1.1  christos ## A copy of this license is available in the file LICENSE in the
     13      1.1  christos ## top-level directory of the distribution or, alternatively, at
     14      1.1  christos ## <http://www.OpenLDAP.org/license.html>.
     15      1.1  christos 
     16      1.1  christos PCACHETTL=${PCACHETTL-"1m"}
     17      1.1  christos PCACHENTTL=${PCACHENTTL-"1m"}
     18      1.1  christos PCACHESTTL=${PCACHESTTL-"1m"}
     19      1.1  christos PCACHE_ENTRY_LIMIT=${PCACHE_ENTRY_LIMIT-"6"}
     20      1.1  christos PCACHE_CCPERIOD=${PCACHE_CCPERIOD-"2"}
     21      1.1  christos PCACHETTR=${PCACHETTR-"2"}
     22      1.1  christos PCACHEBTTR=${PCACHEBTTR-"5"}
     23      1.1  christos 
     24      1.1  christos . $SRCDIR/scripts/defines.sh
     25      1.1  christos 
     26      1.1  christos LVL=0x100
     27      1.1  christos 
     28      1.1  christos if test $PROXYCACHE = pcacheno; then 
     29      1.1  christos 	echo "Proxy cache overlay not available, test skipped"
     30      1.1  christos 	exit 0
     31      1.1  christos fi 
     32      1.1  christos 
     33      1.1  christos if test $BACKLDAP = "ldapno" ; then 
     34      1.1  christos 	echo "LDAP backend not available, test skipped"
     35      1.1  christos 	exit 0
     36      1.1  christos fi 
     37      1.1  christos 
     38      1.1  christos if test $BACKEND = ldif ; then
     39      1.1  christos 	# The (mail=example.com*) queries hit a sizelimit, so which
     40      1.1  christos 	# entry is returned depends on the ordering in the backend.
     41      1.1  christos 	echo "Test does not support $BACKEND backend, test skipped"
     42      1.1  christos 	exit 0
     43      1.1  christos fi
     44      1.1  christos 
     45      1.1  christos mkdir -p $TESTDIR $DBDIR1 $DBDIR2
     46      1.1  christos 
     47      1.1  christos # Test proxy caching:
     48  1.1.1.4  christos # - start provider
     49      1.1  christos # - start proxy cache
     50  1.1.1.4  christos # - populate provider 
     51      1.1  christos # - perform a first search
     52      1.1  christos # - verify cacheability
     53      1.1  christos # - perform a second search with the same filter and same user 
     54      1.1  christos # - verify answerability and cacheability of the bind
     55      1.1  christos # - perform a third search with the same user but a different filter
     56      1.1  christos # - verify cacheability of the bind and the non-answerability of the result 
     57      1.1  christos 
     58  1.1.1.4  christos echo "Starting provider slapd on TCP/IP port $PORT1..."
     59  1.1.1.4  christos . $CONFFILTER < $PROXYAUTHZPROVIDERCONF > $CONF1
     60      1.1  christos $SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 &
     61      1.1  christos PID=$!
     62      1.1  christos if test $WAIT != 0 ; then
     63      1.1  christos 	echo PID $PID
     64      1.1  christos 	read foo
     65      1.1  christos fi
     66      1.1  christos KILLPIDS="$PID"
     67      1.1  christos 
     68      1.1  christos sleep 1
     69      1.1  christos 
     70  1.1.1.4  christos echo "Using ldapsearch to check that provider slapd is running..."
     71      1.1  christos for i in 0 1 2 3 4 5; do
     72  1.1.1.4  christos 	$LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
     73      1.1  christos 		-D "cn=Manager,dc=example,dc=com" -w secret 'objectclass=*' > /dev/null 2>&1
     74      1.1  christos 	RC=$?
     75      1.1  christos 	if test $RC = 0 ; then
     76      1.1  christos 		break
     77      1.1  christos 	fi
     78      1.1  christos 	echo "Waiting 5 seconds for slapd to start..."
     79      1.1  christos 	sleep 5
     80      1.1  christos done
     81      1.1  christos 
     82      1.1  christos if test $RC != 0 ; then
     83      1.1  christos 	echo "ldapsearch failed ($RC)!"
     84      1.1  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     85      1.1  christos 	exit $RC
     86      1.1  christos fi
     87      1.1  christos 
     88  1.1.1.4  christos echo "Using ldapadd to populate the provider directory..."
     89  1.1.1.4  christos $LDAPADD -x -D "$MANAGERDN" -H $URI1 -w $PASSWD < \
     90      1.1  christos 	$LDIFORDERED > /dev/null 2>&1
     91      1.1  christos RC=$?
     92      1.1  christos if test $RC != 0 ; then
     93      1.1  christos 	echo "ldapadd failed ($RC)!"
     94      1.1  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     95      1.1  christos 	exit $RC
     96      1.1  christos fi
     97      1.1  christos 
     98      1.1  christos echo "Starting proxy cache on TCP/IP port $PORT2..."
     99      1.1  christos . $CONFFILTER < $PROXYAUTHZCONF | sed \
    100      1.1  christos 	-e "s/@TTL@/${PCACHETTL}/"			\
    101      1.1  christos 	-e "s/@NTTL@/${PCACHENTTL}/"		\
    102      1.1  christos 	-e "s/@STTL@/${PCACHENTTL}/"		\
    103      1.1  christos 	-e "s/@TTR@/${PCACHETTR}/"			\
    104      1.1  christos 	-e "s/@ENTRY_LIMIT@/${PCACHE_ENTRY_LIMIT}/"	\
    105      1.1  christos 	-e "s/@CCPERIOD@/${PCACHE_CCPERIOD}/"			\
    106      1.1  christos 	-e "s/@BTTR@/${PCACHEBTTR}/"			\
    107      1.1  christos 	> $CONF2
    108      1.1  christos 
    109      1.1  christos $SLAPD -f $CONF2 -h $URI2 -d $LVL -d pcache > $LOG2 2>&1 &
    110      1.1  christos CACHEPID=$!
    111      1.1  christos if test $WAIT != 0 ; then
    112      1.1  christos 	echo CACHEPID $CACHEPID
    113      1.1  christos 	read foo
    114      1.1  christos fi
    115      1.1  christos KILLPIDS="$KILLPIDS $CACHEPID"
    116      1.1  christos 
    117      1.1  christos sleep 1
    118      1.1  christos 
    119      1.1  christos echo "Using ldapsearch to check that proxy slapd is running..."
    120      1.1  christos for i in 0 1 2 3 4 5; do
    121  1.1.1.4  christos 	$LDAPSEARCH -s base -b "$MONITOR" -H $URI2 \
    122      1.1  christos 		-D "cn=Manager,dc=example,dc=com" -w secret 'objectclass=*' > /dev/null 2>&1
    123      1.1  christos 	RC=$?
    124      1.1  christos 	if test $RC = 0 ; then
    125      1.1  christos 		break
    126      1.1  christos 	fi
    127      1.1  christos 	echo "Waiting 5 seconds for slapd to start..."
    128      1.1  christos 	sleep 5
    129      1.1  christos done
    130      1.1  christos 
    131      1.1  christos if test $RC != 0 ; then
    132      1.1  christos 	echo "ldapsearch failed ($RC)!"
    133      1.1  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    134      1.1  christos 	exit $RC
    135      1.1  christos fi
    136      1.1  christos 
    137      1.1  christos cat /dev/null > $SEARCHOUT
    138      1.1  christos 
    139      1.1  christos echo "Making queries on the proxy cache..." 
    140      1.1  christos CNT=0
    141      1.1  christos 
    142      1.1  christos 
    143      1.1  christos CNT=`expr $CNT + 1`
    144      1.1  christos USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com"
    145      1.1  christos UPASSWD="jaj"
    146      1.1  christos echo "Query $CNT: $USERDN"
    147      1.1  christos echo "# Query $CNT: $USERDN" >> $SEARCHOUT
    148      1.1  christos 
    149  1.1.1.4  christos $LDAPSEARCH -S "" -b "dc=example,dc=com" -s SUB -H $URI2 \
    150      1.1  christos 	-D "$USERDN" -w "$UPASSWD" "(sn=je*)" sn >> $SEARCHOUT 2>> $TESTOUT
    151      1.1  christos RC=$?
    152      1.1  christos 
    153      1.1  christos if test $RC != 0 ; then
    154      1.1  christos 	echo "ldapsearch failed ($RC)!"
    155      1.1  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    156      1.1  christos 	exit $RC
    157      1.1  christos fi
    158      1.1  christos 
    159      1.1  christos # Check that the bind is cached
    160      1.1  christos grep "CACHING BIND for $USERDN" $LOG2 > /dev/null
    161      1.1  christos 
    162      1.1  christos RC=$?
    163      1.1  christos if test $RC != 0 ; then
    164      1.1  christos 	echo "Refresh failed"
    165      1.1  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
    166      1.1  christos 	exit 1
    167      1.1  christos fi
    168      1.1  christos 
    169      1.1  christos CNT=`expr $CNT + 1`
    170      1.1  christos USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com"
    171      1.1  christos UPASSWD="jaj"
    172      1.1  christos echo "Query $CNT: (Bind should be cached)"
    173      1.1  christos echo "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT
    174      1.1  christos 
    175  1.1.1.4  christos $LDAPSEARCH -S "" -b "dc=example,dc=com" -s SUB -H $URI2 \
    176      1.1  christos 	-D "$USERDN" -w "$UPASSWD" "(sn=je*)" sn >> $SEARCHOUT 2>> $TESTOUT
    177      1.1  christos 
    178      1.1  christos RC=$?
    179      1.1  christos if test $RC != 0 ; then
    180      1.1  christos 	echo "ldapsearch failed ($RC)!"
    181      1.1  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    182      1.1  christos 	exit $RC
    183      1.1  christos fi
    184      1.1  christos 
    185      1.1  christos grep "CACHED BIND for $USERDN" $LOG2 > /dev/null
    186      1.1  christos RC=$?
    187      1.1  christos if test $RC != 0 ; then
    188      1.1  christos 	echo "Refresh failed"
    189      1.1  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
    190      1.1  christos 	exit 1
    191      1.1  christos fi
    192      1.1  christos 
    193      1.1  christos CNT=`expr $CNT + 1`
    194      1.1  christos USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com"
    195      1.1  christos 
    196      1.1  christos echo "Query $CNT: (Bind should be cached)"
    197      1.1  christos echo "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT
    198  1.1.1.4  christos $LDAPSEARCH -S "" -b "dc=example,dc=com" -s SUB -H $URI2 \
    199      1.1  christos 	-D "$USERDN" -w "$UPASSWD" "(sn=je*)" sn >> $SEARCHOUT 2>> $TESTOUT
    200      1.1  christos 
    201      1.1  christos RC=$?
    202      1.1  christos if test $RC != 0 ; then
    203      1.1  christos 	echo "ldapsearch failed ($RC)!"
    204      1.1  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    205      1.1  christos 	exit $RC
    206      1.1  christos fi
    207      1.1  christos 
    208      1.1  christos RC=`grep "CACHED BIND for $USERDN" $LOG2 | wc -l`
    209      1.1  christos if test $RC != 2 ; then
    210      1.1  christos 	echo "Bind wasn't answered from cache"
    211      1.1  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
    212      1.1  christos 	exit 1
    213      1.1  christos fi
    214      1.1  christos 
    215      1.1  christos echo "=== New search on (sn=jo*)"
    216      1.1  christos cat /dev/null > $SEARCHOUT
    217      1.1  christos echo "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT
    218  1.1.1.4  christos $LDAPSEARCH -S "" -b "dc=example,dc=com" -s SUB -H $URI2 \
    219      1.1  christos 	-D "$USERDN" -w "$UPASSWD" "(sn=jo*)" sn >> $SEARCHOUT 2>> $TESTOUT
    220      1.1  christos 
    221      1.1  christos RC=$?
    222      1.1  christos if test $RC != 0 ; then
    223      1.1  christos 	echo "ldapsearch failed ($RC)!"
    224      1.1  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    225      1.1  christos 	exit $RC
    226      1.1  christos fi
    227      1.1  christos 
    228      1.1  christos RC=`grep "CACHED BIND for $USERDN" $LOG2 | wc -l`
    229      1.1  christos if test $RC != 3 ; then
    230      1.1  christos 	echo "Bind wasn't answered from cache"
    231      1.1  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
    232      1.1  christos 	exit 1
    233      1.1  christos fi
    234      1.1  christos 
    235      1.1  christos RC=`grep "QUERY NOT ANSWERABLE" $LOG2 | wc -l`
    236      1.1  christos if test $RC != 3 ; then
    237      1.1  christos 	echo "Search wasn't searched on remote peer"
    238      1.1  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
    239      1.1  christos 	exit 1
    240      1.1  christos fi
    241      1.1  christos 
    242      1.1  christos RC=`grep "dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com" $SEARCHOUT | wc -l`
    243      1.1  christos if test $RC != 1 ; then
    244      1.1  christos 	echo "Search wasn't retrieved on remote peer"
    245      1.1  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
    246      1.1  christos 	exit 1
    247      1.1  christos fi
    248      1.1  christos 
    249      1.1  christos echo "Test succeeded"
    250      1.1  christos 
    251      1.1  christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
    252      1.1  christos 
    253      1.1  christos test $KILLSERVERS != no && wait
    254      1.1  christos 
    255      1.1  christos exit 0
    256