1 #! /bin/sh 2 # $OpenLDAP$ 3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>. 4 ## 5 ## Copyright 1998-2024 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 16 echo "running defines.sh" 17 . $SRCDIR/scripts/defines.sh 18 19 if test $SYNCPROV = syncprovno; then 20 echo "Syncrepl provider overlay not available, test skipped" 21 exit 0 22 fi 23 24 CONFDIR=$TESTDIR/slapd.d 25 DBDIR=$TESTDIR/db 26 RCOUT=$TESTDIR/rcout 27 28 mkdir -p $TESTDIR $CONFDIR $DBDIR 29 30 $SLAPPASSWD -g -n >$CONFIGPWF 31 32 # 33 # Test dynamic add/delete of syncprov overlay: 34 # - Create minimal back-conf setup 35 # - Add syncprov overlay to the cn=config database 36 # - Remove the overlay again 37 # 38 39 echo "Starting slapd on TCP/IP port $PORT1... $PWD" 40 . $CONFFILTER $BACKEND < $DYNAMICCONF > $CONFLDIF 41 $SLAPADD -F $CONFDIR -n 0 -l $CONFLDIF 42 RC=$? 43 if test $RC != 0 ; then 44 echo "slapadd failed ($RC)!" 45 exit $RC 46 fi 47 48 cd $TESTDIR 49 $SLAPD -F ./slapd.d -h $URI1 -d $LVL > $LOG1 2>&1 & 50 PID=$! 51 if test $WAIT != 0 ; then 52 echo PID $PID 53 read foo 54 fi 55 KILLPIDS="$PID" 56 cd $TESTWD 57 58 sleep 1 59 60 echo "Using ldapsearch to check that slapd is running..." 61 for i in 0 1 2 3 4 5; do 62 $LDAPSEARCH -s base -b "" -H $URI1 \ 63 'objectclass=*' > /dev/null 2>&1 64 RC=$? 65 if test $RC = 0 ; then 66 break 67 fi 68 echo "Waiting 5 seconds for slapd to start..." 69 sleep 5 70 done 71 72 if test $RC != 0 ; then 73 echo "ldapsearch failed ($RC)!" 74 test $KILLSERVERS != no && kill -HUP $KILLPIDS 75 exit $RC 76 fi 77 78 echo "Inserting syncprov overlay ..." 79 if [ "$SYNCPROV" = syncprovmod ]; then 80 $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1 81 dn: cn=module,cn=config 82 objectClass: olcModuleList 83 cn: module 84 olcModulePath: $TESTWD/../servers/slapd/overlays 85 olcModuleLoad: syncprov.la 86 EOF 87 RC=$? 88 if test $RC != 0 ; then 89 echo "ldapadd failed for moduleLoad ($RC)!" 90 test $KILLSERVERS != no && kill -HUP $KILLPIDS 91 exit $RC 92 fi 93 fi 94 read CONFIGPW < $CONFIGPWF 95 $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 96 dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config 97 changetype: add 98 objectClass: olcOverlayConfig 99 objectClass: olcSyncProvConfig 100 olcOverlay: syncprov 101 EOF 102 103 RC=$? 104 if test $RC != 0 ; then 105 echo "ldapmodify failed for syncrepl config ($RC)!" 106 test $KILLSERVERS != no && kill -HUP $KILLPIDS 107 exit $RC 108 fi 109 110 echo "Starting a refreshAndPersist search in background" 111 rm -f $RCOUT 112 ( 113 $LDAPSEARCH -D cn=config -H $URI1 -y $CONFIGPWF -bcn=config -E \!sync=rp >/dev/null 2>&1 114 RC=$? 115 echo $RC > $RCOUT 116 exit $RC 117 ) & 118 119 SEARCHPID=$! 120 121 sleep 2 122 123 echo "Removing syncprov overlay again ..." 124 $LDAPDELETE -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 125 olcOverlay={0}syncprov,olcDatabase={0}config,cn=config 126 EOF 127 RC=$? 128 129 if test $RC != 0 ; then 130 echo "ldapmodify failed for syncrepl config ($RC)!" 131 test $KILLSERVERS != no && kill -HUP $KILLPIDS 132 exit $RC 133 fi 134 135 for i in 0 1 2 3 4; do 136 if test -f "$RCOUT" ; then 137 break 138 else 139 echo "Waiting 2 seconds for RefreshAndPersist search to end ..." 140 sleep 2 141 fi 142 done 143 144 if test -f "$RCOUT" ; then 145 wait $SEARCHPID 146 SEARCHRC=`cat $RCOUT` 147 echo "Checking return code of backgrounded RefreshAndPersist search ..." 148 if test 52 != "$SEARCHRC" ; then 149 echo "Error: Backgrounded ldapsearch returned the wrong error code: $SEARCHRC" 150 RC=1 151 else 152 echo "Exit code correct." 153 fi 154 else 155 echo "Backgrounded ldapsearch did not exit after overlay removal." 156 kill -HUP $SEARCHPID 157 RC=2 158 fi 159 if test $RC != 0 ; then 160 test $KILLSERVERS != no && kill -HUP $KILLPIDS 161 exit $RC 162 fi 163 164 echo "Running a refreshOnly search, should fail..." 165 $LDAPSEARCH -D cn=config -H $URI1 -y $CONFIGPWF -bcn=config -E \!sync=ro > /dev/null 2>&1 166 167 RC=$? 168 if test $RC != 12 ; then 169 echo "ldapsearch should have failed with Critical extension is unavailable (12)!" 170 test $KILLSERVERS != no && kill -HUP $KILLPIDS 171 exit $RC 172 else 173 echo "Failed with \"Critical extension is unavailable (12)\". Ok." 174 fi 175 176 177 test $KILLSERVERS != no && kill -HUP $KILLPIDS 178 179 echo ">>>>> Test succeeded" 180 181 test $KILLSERVERS != no && wait 182 183 exit 0 184