#! /bin/bash # $OpenLDAP$ ## This work is part of OpenLDAP Software . ## ## Copyright 1998-2016 The OpenLDAP Foundation. ## All rights reserved. ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted only as authorized by the OpenLDAP ## Public License. ## ## A copy of this license is available in the file LICENSE in the ## top-level directory of the distribution or, alternatively, at ## . echo "running defines.sh" . $SRCDIR/scripts/defines.sh if test $PPOLICY = ppolicyno; then echo "Password policy overlay not available, test skipped" exit 0 fi if test $SYNCPROV = syncprovno; then echo "Syncrepl provider overlay not available, test skipped" exit 0 fi if test $ACCESSLOG = accesslogno; then echo "Accesslog overlay not available, test skipped" exit 0 fi if test $BACKEND = ldif ; then # Onelevel search does not return entries in order of creation or CSN. echo "$BACKEND backend unsuitable for syncprov logdb, test skipped" exit 0 fi echo "This test tracks a case where changes are not refreshed when an old db is reloaded" echo "See http://www.openldap.org/its/index.cgi/?findid=8800 for more information." MMR=4 XDIR=$TESTDIR/srv mkdir -p $TESTDIR $SLAPPASSWD -g -n >$CONFIGPWF ITS=8800 ITSDIR=$DATADIR/regressions/its$ITS n=1 while [ $n -le $MMR ]; do echo "Initializing server configuration for MMR$n..." DBDIR=${XDIR}$n/db CFDIR=${XDIR}$n/slapd.d mkdir -p ${XDIR}$n $DBDIR.1 $DBDIR.2 $CFDIR . $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd-provider${n}.ldif > $CONFLDIF $SLAPADD -F $CFDIR -n 0 -l $CONFLDIF $SLAPADD -F $CFDIR -q -b $BASEDN -l $ITSDIR/its8800db.ldif n=`expr $n + 1` done KILLPIDS= n=1 while [ $n -le $MMR ]; do MYURI=`eval echo '$URI'$n` MYLOG=`eval echo '$LOG'$n` CFDIR=${XDIR}$n/slapd.d echo "Starting provider slapd on TCP/IP URI $MYURI" $SLAPD -F $CFDIR -h $MYURI -d $LVL $TIMING > $MYLOG 2>&1 & PID=$! if test $WAIT != 0 ; then echo PID $PID read foo fi KILLPIDS="$PID $KILLPIDS" PIDS[$n]="$PID" sleep 1 echo "Using ldapsearch to check that provider slapd is running..." for i in 0 1 2 3 4 5; do $LDAPSEARCH -s base -b "" -H $MYURI \ 'objectclass=*' > /dev/null 2>&1 RC=$? if test $RC = 0 ; then break fi echo "Waiting 5 seconds for slapd to start..." sleep 5 done if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi n=`expr $n + 1` done echo "Sleeping 10 seconds to allow stabalization..." sleep 10 echo "Looping failed authentications for 50 users 10 times each..." user=250 while [ $user -le 300 ]; do auths=1 echo -n "user $user..." while [ $auths -le 10 ]; do $LDAPSEARCH -x -H $URI1 -D uid=user.$user,ou=user,dc=example,dc=com -w wrongpass uid=fred >/dev/null 2>&1 RC=$? if test $RC = 0 ; then echo "ldapsearch succeeded when it should have failed" exit 1 fi auths=`expr $auths + 1` done echo "done" user=`expr $user + 1` done echo -n "Sleeping 1 minute to ensure consumers catch up..." sleep 60 echo "done" echo -n "Stopping MMR1 slapd..." kill -HUP "${PIDS[1]}" wait ${PIDS[1]} sleep $SLEEP2 echo "done" echo -n "Wiping primary and accesslog databases for MMR1..." DBDIR="$TESTDIR/srv1/db" CFDIR="$TESTDIR/srv1/slapd.d" mv $DBDIR.1 $DBDIR.1.orig mv $DBDIR.2 $DBDIR.2.orig mkdir -p $DBDIR.1 $DBDIR.2 $SLAPADD -F $CFDIR -q -b $BASEDN -l $ITSDIR/its8800db.ldif echo "done" echo "Starting provider1 slapd on TCP/IP URI $URI1" CFDIR="$TESTDIR/srv1/slapd.d" $SLAPD -F $CFDIR -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 & PID=$! if test $WAIT != 0 ; then echo PID $PID read foo fi PIDS[1]=$PID sleep 1 echo "Using ldapsearch to check that provider slapd is running..." for i in 0 1 2 3 4 5; do $LDAPSEARCH -s base -b "" -H $URI1 \ 'objectclass=*' > /dev/null 2>&1 RC=$? if test $RC = 0 ; then break fi echo "Waiting 5 seconds for slapd to start..." sleep 5 done n=1 KILLPIDS= while [ $n -le 4 ]; do KILLPIDS="${PIDS[$n]} $KILLPIDS" n=`expr $n + 1` done if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "done" echo "Sleeping 5 minutes to allow databases to sync..." sleep 300 echo "Comparing resulting databases..." n=1 while [ $n -le 4 ]; do CFDIR=${XDIR}$n/slapd.d $SLAPCAT -F $CFDIR -b $BASEDN -l $TESTDIR/finaldb-$n.ldif n=`expr $n + 1` done n=2 while [ $n -le 4 ]; do diff $TESTDIR/finaldb-1.ldif $TESTDIR/finaldb-$n.ldif > /dev/null 2>&1 RC=$? if test $RC != 0 ; then echo "ERROR: Final LDIF files differ" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi n=`expr $n + 1` done test $KILLSERVERS != no && kill -HUP $KILLPIDS echo ">>>>> Test succeeded" test $KILLSERVERS != no && wait exit 0