1#! /bin/sh 2## This work is part of OpenLDAP Software <http://www.openldap.org/>. 3## 4## Copyright 1998-2008 The OpenLDAP Foundation. 5## All rights reserved. 6## 7## Redistribution and use in source and binary forms, with or without 8## modification, are permitted only as authorized by the OpenLDAP 9## Public License. 10## 11## A copy of this license is available in the file LICENSE in the 12## top-level directory of the distribution or, alternatively, at 13## <http://www.OpenLDAP.org/license.html>. 14 15if test "$BACKEND" != "bdb" && test "$BACKEND" != "hdb" ; then 16 echo "Test does not support $BACKEND" 17 exit 0 18fi 19 20echo "running defines.sh" 21. $SRCDIR/scripts/defines.sh 22 23if test $SYNCPROV = syncprovno; then 24 echo "Syncrepl provider overlay not available, test skipped" 25 exit 0 26fi 27 28mkdir -p $TESTDIR $DBDIR1A $DBDIR1B $DBDIR1C $DBDIR2A $DBDIR2B 29 30echo "Running slapadd to build glued slapd databases..." 31. $CONFFILTER $BACKEND $MONITORDB < $GLUECONF > $CONF1 32$SLAPADD -d $LVL -f $CONF1 -l $LDIFORDERED > $SLAPADDLOG1 2>&1 33RC=$? 34if test $RC != 0 ; then 35 echo "slapadd failed ($RC)!" 36 exit $RC 37fi 38 39rm -f $DBDIR1A/* $DBDIR1B/* 40cp -pr $DBDIR1C $DBDIR2C 41 42echo "Starting slapd 1 on TCP/IP port $PORT1..." 43. $CONFFILTER $BACKEND $MONITORDB < $GLUESYNCCONF1 > $CONF1 44$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & 45PID=$! 46if test $WAIT != 0 ; then 47 echo PID $PID 48 read foo 49fi 50KILLPIDS="$PID" 51 52sleep 1 53 54echo "Using ldapsearch to check that slapd 1 is running..." 55for i in 0 1 2 3 4 5; do 56 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \ 57 '(objectclass=*)' > /dev/null 2>&1 58 RC=$? 59 if test $RC = 0 ; then 60 break 61 fi 62 echo "Waiting 5 seconds for slapd to start..." 63 sleep 5 64done 65 66echo "Starting slapd 2 on TCP/IP port $PORT2..." 67. $CONFFILTER $BACKEND $MONITORDB < $GLUESYNCCONF2 > $CONF2 68$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & 69PID=$! 70if test $WAIT != 0 ; then 71 echo PID $PID 72 read foo 73fi 74KILLPIDS="$KILLPIDS $PID" 75 76sleep 1 77 78echo "Using ldapsearch to check that slapd 2 is running..." 79for i in 0 1 2 3 4 5; do 80 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ 81 '(objectclass=*)' > /dev/null 2>&1 82 RC=$? 83 if test $RC = 0 ; then 84 break 85 fi 86 echo "Waiting 5 seconds for slapd to start..." 87 sleep 5 88done 89 90SUBTREE1="ou=Information Technology Division,ou=People,dc=example,dc=com" 91SUBTREE2="ou=Groups,dc=example,dc=com" 92 93echo "Using ldapadd to populate subtree=\"${SUBTREE1}\" on port $PORT1..." 94$LDAPADD -D "cn=Manager 1,$BASEDN" -w $PASSWD -h $LOCALHOST -p $PORT1 \ 95 -f $LDIFORDERED -c \ 96 > /dev/null 2>&1 97RC=$? 98case $RC in 990) 100 echo "ldapadd should have failed ($RC)!" 101 test $KILLSERVERS != no && kill -HUP $KILLPIDS 102 exit -1 103 ;; 10410|68) 105 # Fine if we get alreadyExists or referrals 106 ;; 107*) 108 echo "ldapadd failed ($RC)!" 109 test $KILLSERVERS != no && kill -HUP $KILLPIDS 110 exit $RC 111 ;; 112esac 113 114echo "Using ldapadd to populate subtree=\"${SUBTREE2}\" on port $PORT2..." 115$LDAPADD -D "cn=Manager 2,$BASEDN" -w $PASSWD -h $LOCALHOST -p $PORT2 \ 116 -f $LDIFORDERED -c \ 117 > /dev/null 2>&1 118RC=$? 119case $RC in 1200) 121 echo "ldapadd should have failed ($RC)!" 122 test $KILLSERVERS != no && kill -HUP $KILLPIDS 123 exit -1 124 ;; 12510|68) 126 # Fine if we get alreadyExists or referrals 127 ;; 128*) 129 echo "ldapadd failed ($RC)!" 130 test $KILLSERVERS != no && kill -HUP $KILLPIDS 131 exit $RC 132 ;; 133esac 134 135SLEEP=15 136echo "Waiting $SLEEP seconds for shadow subtrees to sync..." 137sleep $SLEEP 138 139echo "Filtering original ldif used to create database..." 140. $LDIFFILTER < $GLUESYNCOUT > $LDIFFLT 141 142for P in $PORT1 $PORT2 ; do 143 echo "Using ldapsearch to read all the entries from port $P..." 144 $LDAPSEARCH -b "$BASEDN" -h $LOCALHOST -p $P \ 145 -S "" '(objectclass=*)' > "${SEARCHOUT}.${P}" 2>&1 146 RC=$? 147 148 if test $RC != 0 ; then 149 echo "ldapsearch failed ($RC)!" 150 test $KILLSERVERS != no && kill -HUP $KILLPIDS 151 exit $RC 152 fi 153 154 echo "Filtering ldapsearch results..." 155 . $LDIFFILTER < "${SEARCHOUT}.${P}" > $SEARCHFLT 156 echo "Comparing filter output..." 157 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT 158 159 if test $? != 0 ; then 160 echo "comparison failed - database was not created correctly" 161 test $KILLSERVERS != no && kill -HUP $KILLPIDS 162 exit 1 163 fi 164done 165 166echo "Testing ldapdelete propagation..." 167$LDAPDELETE -D "cn=Manager 1,$BASEDN" -w $PASSWD -H $URI1 "$BABSDN" \ 168 > $TESTOUT 2>&1 169RC=$? 170if test $RC != 0 ; then 171 echo "ldapdelete failed ($RC)!" 172 test $KILLSERVERS != no && kill -HUP $KILLPIDS 173 exit $RC 174fi 175 176# This usually propagates immediately 177sleep 1 178 179$LDAPSEARCH -H $URI2 -b "$BABSDN" > $TESTOUT 2>&1 180RC=$? 181if test $RC = 0 ; then 182 echo "ldapsearch should have failed ($RC)!" 183 test $KILLSERVERS != no && kill -HUP $KILLPIDS 184 exit -1 185fi 186 187test $KILLSERVERS != no && kill -HUP $KILLPIDS 188 189echo ">>>>> Test succeeded" 190 191test $KILLSERVERS != no && wait 192 193exit 0 194