+++ /dev/null
-#! /bin/sh
-# $OpenLDAP$
-## This work is part of OpenLDAP Software <http://www.openldap.org/>.
-##
-## Copyright 1998-2008 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
-## <http://www.OpenLDAP.org/license.html>.
-
-# This script tests a bug where syncprov used on a glue database
-# with a subordinate syncrepl consumer database looses a read-lock
-# on the glue suffix entry when a modification is received on the
-# syncrepl consumer. The bug is only triggered when there is an
-# active syncrepl consumers of the glue suffix entry.
-
-echo "running defines.sh"
-. $SRCDIR/scripts/defines.sh
-
-if test $SYNCPROV = syncprovno; then
- echo "Syncrepl provider overlay not available, test skipped"
- exit 0
-fi
-
-PRODDIR=$TESTDIR/prod
-PRO2DIR=$TESTDIR/pro2
-CONSDIR=$TESTDIR/cons
-CFPROD=$PRODDIR/slapd.d
-CFPRO2=$PRO2DIR/slapd.d
-CFCONS=$CONSDIR/slapd.d
-
-mkdir -p $TESTDIR
-mkdir -p $PRODDIR $CFPROD $PRODDIR/db $PRODDIR/ou1
-mkdir -p $PRO2DIR $CFPRO2 $PRO2DIR/db
-mkdir -p $CONSDIR $CFCONS $CONSDIR/db
-
-cd $TESTDIR
-
-KILLPIDS=
-
-$SLAPPASSWD -g -n >$CONFIGPWF
-
-echo "Initializing producer configurations..."
-$SLAPADD -F $CFPROD -n 0 <<EOF
-dn: cn=config
-objectClass: olcGlobal
-cn: config
-
-dn: olcDatabase={0}config,cn=config
-objectClass: olcDatabaseConfig
-olcDatabase: {0}config
-olcRootPW:< file://$CONFIGPWF
-
-EOF
-
-echo "Initializing producer2 configurations..."
-$SLAPADD -F $CFPRO2 -n 0 <<EOF
-dn: cn=config
-objectClass: olcGlobal
-cn: config
-
-dn: olcDatabase={0}config,cn=config
-objectClass: olcDatabaseConfig
-olcDatabase: {0}config
-olcRootPW:< file://$CONFIGPWF
-
-EOF
-
-$SLAPADD -F $CFCONS -n 0 <<EOF
-dn: cn=config
-objectClass: olcGlobal
-cn: config
-
-dn: olcDatabase={0}config,cn=config
-objectClass: olcDatabaseConfig
-olcDatabase: {0}config
-olcRootPW:< file://$CONFIGPWF
-EOF
-
-echo "Starting producer slapd on TCP/IP port $PORT1..."
-cd $PRODDIR
-$SLAPD -F slapd.d -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
-PID=$!
-if test $WAIT != 0 ; then
- echo PID $PID
- read foo
-fi
-KILLPIDS="$KILLPIDS $PID"
-cd $TESTWD
-sleep 1
-echo "Using ldapsearch to check that producer 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
-if test $RC != 0 ; then
- echo "ldapsearch failed ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
-fi
-
-echo "Starting producer2 slapd on TCP/IP port $PORT2..."
-cd $PRO2DIR
-$SLAPD -F slapd.d -h $URI2 -d $LVL $TIMING > $LOG1 2>&1 &
-PID=$!
-if test $WAIT != 0 ; then
- echo PID $PID
- read foo
-fi
-KILLPIDS="$KILLPIDS $PID"
-cd $TESTWD
-sleep 1
-echo "Using ldapsearch to check that producer slapd is running..."
-for i in 0 1 2 3 4 5; do
- $LDAPSEARCH -s base -b "" -H $URI2 \
- '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
-
-echo "Starting consumer slapd on TCP/IP port $PORT3..."
-cd $CONSDIR
-$SLAPD -F slapd.d -h $URI3 -d $LVL $TIMING > $LOG2 2>&1 &
-PID=$!
-if test $WAIT != 0 ; then
- echo PID $PID
- read foo
-fi
-KILLPIDS="$KILLPIDS $PID"
-cd $TESTWD
-sleep 1
-echo "Using ldapsearch to check that consumer slapd is running..."
-for i in 0 1 2 3 4 5; do
- $LDAPSEARCH -s base -b "" -H $URI3 \
- '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
-
-for uri in $URI1 $URI2 $URI3; do
- echo "Adding schema on $uri..."
- $LDAPADD -D cn=config -H $uri -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
-include: file://$ABS_SCHEMADIR/core.ldif
-
-include: file://$ABS_SCHEMADIR/cosine.ldif
-
-include: file://$ABS_SCHEMADIR/inetorgperson.ldif
-
-include: file://$ABS_SCHEMADIR/openldap.ldif
-
-include: file://$ABS_SCHEMADIR/nis.ldif
-EOF
- RC=$?
- if test $RC != 0 ; then
- echo "ldapadd failed for schema config ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
- fi
-
- [ "$BACKENDTYPE" = mod ] || continue
-
- echo "Adding backend module on $uri..."
- $LDAPADD -D cn=config -H $uri -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1
-dn: cn=module,cn=config
-objectClass: olcModuleList
-cn: module
-olcModulePath: ../../../servers/slapd/back-$BACKEND
-olcModuleLoad: back_$BACKEND.la
-EOF
- RC=$?
- if test $RC != 0 ; then
- echo "ldapadd failed for backend module ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
- fi
-done
-
-echo "Adding databases on producer..."
-if [ "$SYNCPROV" = syncprovmod ]; then
- $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
-dn: cn=module,cn=config
-objectClass: olcModuleList
-cn: module
-olcModulePath: ../../../servers/slapd/overlays
-olcModuleLoad: syncprov.la
-
-EOF
- RC=$?
- if test $RC != 0 ; then
- echo "ldapadd failed for moduleLoad ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
- fi
-fi
-
-$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
-dn: olcDatabase={1}$BACKEND,cn=config
-objectClass: olcDatabaseConfig
-objectClass: olc${BACKEND}Config
-olcDatabase: {1}$BACKEND
-olcDbDirectory: $PRODDIR/db
-olcSuffix: $BASEDN
-olcRootDN: $MANAGERDN
-olcRootPW: $PASSWD
-
-EOF
-RC=$?
-if test $RC != 0 ; then
- echo "ldapadd failed for producer database config1 ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
-fi
-
-$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
-dn: olcOverlay={0}glue,olcDatabase={1}$BACKEND,cn=config
-objectClass: olcOverlayConfig
-olcOverlay: {0}glue
-
-dn: olcOverlay={1}syncprov,olcDatabase={1}$BACKEND,cn=config
-objectClass: olcOverlayConfig
-objectClass: olcSyncProvConfig
-olcOverlay: {1}syncprov
-
-dn: olcDatabase={1}$BACKEND,cn=config
-objectClass: olcDatabaseConfig
-objectClass: olc${BACKEND}Config
-olcDatabase: {1}$BACKEND
-olcDbDirectory: $PRODDIR/ou1
-olcSubordinate: TRUE
-olcSuffix: ou=ou1,$BASEDN
-olcRootDN: $MANAGERDN
-
-EOF
-RC=$?
-if test $RC != 0 ; then
- echo "ldapadd failed for producer database config ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
-fi
-
-echo "Adding databases on producer2..."
-if [ "$SYNCPROV" = syncprovmod ]; then
- $LDAPADD -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
-dn: cn=module,cn=config
-objectClass: olcModuleList
-cn: module
-olcModulePath: ../../../servers/slapd/overlays
-olcModuleLoad: syncprov.la
-
-EOF
- RC=$?
- if test $RC != 0 ; then
- echo "ldapadd failed for moduleLoad ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
- fi
-fi
-
-$LDAPADD -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
-dn: olcDatabase={1}$BACKEND,cn=config
-objectClass: olcDatabaseConfig
-objectClass: olc${BACKEND}Config
-olcDatabase: {1}$BACKEND
-olcDbDirectory: $PRO2DIR/db
-olcSuffix: $BASEDN
-olcRootDN: $MANAGERDN
-olcRootPW: $PASSWD
-
-dn: olcOverlay={0}syncprov,olcDatabase={1}$BACKEND,cn=config
-objectClass: olcOverlayConfig
-objectClass: olcSyncProvConfig
-olcOverlay: {0}syncprov
-
-EOF
-RC=$?
-if test $RC != 0 ; then
- echo "ldapadd failed for producer database config ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
-fi
-
-echo "Adding databases on consumer..."
-$LDAPADD -D cn=config -H $URI3 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
-dn: olcDatabase={1}$BACKEND,cn=config
-objectClass: olcDatabaseConfig
-objectClass: olc${BACKEND}Config
-olcDatabase: {1}$BACKEND
-olcDbDirectory: $CONSDIR/db
-olcSuffix: $BASEDN
-olcRootDN: $MANAGERDN
-
-EOF
-RC=$?
-if test $RC != 0 ; then
- echo "ldapadd failed for consumer database config ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
-fi
-
-echo "Populating producer..."
-$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD <<EOF >> $TESTOUT 2>&1
-dn: dc=example,dc=com
-objectClass: top
-objectClass: organization
-objectClass: dcObject
-dc: example
-o: Example, Inc
-
-dn: ou=ou1,dc=example,dc=com
-objectClass: top
-objectClass: organizationalUnit
-ou: ou1
-
-EOF
-RC=$?
-if test $RC != 0 ; then
- echo "ldapadd failed to populate producer entry ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
-fi
-
-echo "Populating producer2..."
-$LDAPADD -D "$MANAGERDN" -H $URI2 -w $PASSWD <<EOF >> $TESTOUT 2>&1
-dn: dc=example,dc=com
-objectClass: top
-objectClass: organization
-objectClass: dcObject
-dc: example
-o: Example, Inc
-
-dn: ou=ou1,dc=example,dc=com
-objectClass: top
-objectClass: organizationalUnit
-ou: ou1
-
-EOF
-RC=$?
-if test $RC != 0 ; then
- echo "ldapadd failed to populate producer entry ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
-fi
-
-echo "Adding syncrepl on producer..."
-$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
-dn: olcDatabase={1}$BACKEND,cn=config
-changetype: modify
-add: olcSyncRepl
-olcSyncRepl: rid=1 provider=$URI2 searchbase="ou=ou1,$BASEDN"
- binddn="$MANAGERDN" bindmethod=simple credentials=$PASSWD
- type=refreshAndPersist retry="5 5 300 5" timeout=1
-
-EOF
-RC=$?
-if test $RC != 0 ; then
- echo "ldapmodify failed to add syncrepl consumer ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
-fi
-
-echo "Adding syncrepl consumer on consumer..."
-$LDAPMODIFY -D cn=config -H $URI3 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
-dn: olcDatabase={1}$BACKEND,cn=config
-changetype: modify
-add: olcSyncRepl
-olcSyncRepl: rid=1 provider=$URI1 searchbase="$BASEDN"
- binddn="$MANAGERDN" bindmethod=simple credentials=$PASSWD
- type=refreshAndPersist retry="5 5 300 5" timeout=1
-
-EOF
-RC=$?
-if test $RC != 0 ; then
- echo "ldapmodify failed to add syncrepl consumer ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
-fi
-
-echo "Using ldapsearch to check that consumer received changes..."
-RC=32
-for i in 0 1 2 3 4 5; do
- RESULT=`$LDAPSEARCH -H $URI3 \
- -s base -b "ou=ou1,$BASEDN" \
- '(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
- if test "x$RESULT" = "xOK" ; then
- RC=0
- break
- fi
- echo "Waiting 5 seconds for syncrepl to receive changes..."
- sleep 5
-done
-if test $RC != 0 ; then
- echo "ldapsearch failed ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
-fi
-
-echo "Using ldapmodify to modify producer2..."
-$LDAPADD -D "$MANAGERDN" -H $URI2 -w $PASSWD <<EOF >> $TESTOUT 2>&1
-dn: ou=ou1,dc=example,dc=com
-changetype: modify
-add: description
-description: Modify1
-
-EOF
-RC=$?
-if test $RC != 0 ; then
- echo "ldapmodify failed ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
-fi
-
-sleep 1
-
-echo "Using ldapsearch to check that consumer received changes..."
-RC=32
-for i in 0 1 2 3 4 5; do
- RESULT=`$LDAPSEARCH -H $URI3 \
- -s base -b "ou=ou1,$BASEDN" \
- '(description=Modify1)' 2>&1 | awk '/^dn:/ {print "OK"}'`
- if test "x$RESULT" = "xOK" ; then
- RC=0
- break
- fi
- echo "Waiting 5 seconds for syncrepl to receive changes..."
- sleep 5
-done
-if test $RC != 0 ; then
- echo "ldapsearch failed ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
-fi
-
-type db_stat >/dev/null 2>&1
-RC=$?
-if test $RC != 0 ; then
- echo "Could not find db_stat ($RC)!"
- lock_bug=1
-elif db_stat -E -h $PRODDIR/db | egrep -q 'HELD .* len:'; then
- echo "WARNING: Glue lock bug hit, next modify could deadlock"
- lock_bug=2
-else
- echo "Glue lock bug not found :-)"
- lock_bug=0
-fi
-
-echo "Using ldapmodify to modify glue suffix on producer..."
-$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD <<EOF >> $TESTOUT 2>&1
-dn: dc=example,dc=com
-changetype: modify
-add: description
-description: Test1
-
-EOF
-RC=$?
-if test $RC != 0 ; then
- echo "ldapadd failed to modify suffix ($RC)!"
- test $KILLSERVERS != no && kill -HUP $KILLPIDS
- exit $RC
-fi
-
-test $KILLSERVERS != no && kill -HUP $KILLPIDS
-test "$lock_bug" = 2 && exit 2
-
-echo ">>>>> Test succeeded"
-
-exit 0