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.2 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 echo "running defines.sh" 17 1.1 christos . $SRCDIR/scripts/defines.sh 18 1.1 christos 19 1.1 christos if test $WITH_TLS = no ; then 20 1.1 christos echo "TLS support not available, test skipped" 21 1.1 christos exit 0 22 1.1 christos fi 23 1.1 christos 24 1.1 christos if test $SYNCPROV = syncprovno; then 25 1.1 christos echo "Syncrepl provider overlay not available, test skipped" 26 1.1 christos exit 0 27 1.1 christos fi 28 1.1 christos if test $ACCESSLOG = accesslogno; then 29 1.1 christos echo "Accesslog overlay not available, test skipped" 30 1.1 christos exit 0 31 1.1 christos fi 32 1.1 christos 33 1.1 christos MMR=2 34 1.1 christos 35 1.1 christos XDIR=$TESTDIR/srv 36 1.1 christos TMP=$TESTDIR/tmp 37 1.1 christos 38 1.1 christos mkdir -p $TESTDIR 39 1.1 christos cp -r $DATADIR/tls $TESTDIR 40 1.1 christos 41 1.1 christos $SLAPPASSWD -g -n >$CONFIGPWF 42 1.1 christos 43 1.1 christos if test x"$SYNCMODE" = x ; then 44 1.1 christos SYNCMODE=rp 45 1.1 christos fi 46 1.1 christos case "$SYNCMODE" in 47 1.1 christos ro) 48 1.1 christos SYNCTYPE="type=refreshOnly interval=00:00:00:03" 49 1.1 christos ;; 50 1.1 christos rp) 51 1.1 christos SYNCTYPE="type=refreshAndPersist interval=00:00:00:03" 52 1.1 christos ;; 53 1.1 christos *) 54 1.1 christos echo "unknown sync mode $SYNCMODE" 55 1.1 christos exit 1; 56 1.1 christos ;; 57 1.1 christos esac 58 1.1 christos 59 1.1 christos # 60 1.1 christos # Test delta-sync mmr 61 1.1 christos # - start servers 62 1.1 christos # - configure over ldap 63 1.1 christos # - populate over ldap 64 1.1 christos # - configure syncrepl over ldap 65 1.1 christos # - break replication 66 1.1 christos # - modify each server separately 67 1.1 christos # - restore replication 68 1.1 christos # - compare results 69 1.1 christos # 70 1.1 christos 71 1.1 christos nullExclude="" 72 1.1 christos test $BACKEND = null && nullExclude="# " 73 1.1 christos 74 1.1 christos KILLPIDS= 75 1.1 christos 76 1.1 christos echo "Initializing server configurations..." 77 1.1 christos n=1 78 1.1 christos while [ $n -le $MMR ]; do 79 1.1 christos 80 1.1 christos DBDIR=${XDIR}$n/db 81 1.1 christos CFDIR=${XDIR}$n/slapd.d 82 1.1 christos 83 1.1 christos mkdir -p ${XDIR}$n $DBDIR.1 $DBDIR.2 $CFDIR 84 1.1 christos 85 1.1 christos o=`expr 3 - $n` 86 1.1 christos cat > $TMP <<EOF 87 1.1 christos dn: cn=config 88 1.1 christos objectClass: olcGlobal 89 1.1 christos cn: config 90 1.1 christos olcServerID: $n 91 1.1 christos olcTLSCertificateFile: $TESTDIR/tls/certs/localhost.crt 92 1.1 christos olcTLSCertificateKeyFile: $TESTDIR/tls/private/localhost.key 93 1.1 christos 94 1.1 christos EOF 95 1.1 christos 96 1.1 christos if [ "$SYNCPROV" = syncprovmod -o "$ACCESSLOG" = accesslogmod ]; then 97 1.1 christos cat <<EOF >> $TMP 98 1.1 christos dn: cn=module,cn=config 99 1.1 christos objectClass: olcModuleList 100 1.1 christos cn: module 101 1.1 christos olcModulePath: $TESTWD/../servers/slapd/overlays 102 1.1 christos EOF 103 1.1 christos if [ "$SYNCPROV" = syncprovmod ]; then 104 1.1 christos echo "olcModuleLoad: syncprov.la" >> $TMP 105 1.1 christos fi 106 1.1 christos if [ "$ACCESSLOG" = accesslogmod ]; then 107 1.1 christos echo "olcModuleLoad: accesslog.la" >> $TMP 108 1.1 christos fi 109 1.1 christos echo "" >> $TMP 110 1.1 christos fi 111 1.1 christos 112 1.1 christos if [ "$BACKENDTYPE" = mod ]; then 113 1.1 christos cat <<EOF >> $TMP 114 1.1 christos dn: cn=module,cn=config 115 1.1 christos objectClass: olcModuleList 116 1.1 christos cn: module 117 1.1 christos olcModulePath: $TESTWD/../servers/slapd/back-$BACKEND 118 1.1 christos olcModuleLoad: back_$BACKEND.la 119 1.1 christos 120 1.1 christos EOF 121 1.1 christos fi 122 1.1 christos MYURI=`eval echo '$SURIP'$n` 123 1.1 christos PROVIDERURI=`eval echo '$SURIP'$o` 124 1.1 christos if test $INDEXDB = indexdb ; then 125 1.1 christos INDEX1="olcDbIndex: objectClass,entryCSN,reqStart,reqDN,reqResult eq" 126 1.1 christos INDEX2="olcDbIndex: objectClass,entryCSN,entryUUID eq" 127 1.1 christos else 128 1.1 christos INDEX1= 129 1.1 christos INDEX2= 130 1.1 christos fi 131 1.1 christos cat >> $TMP <<EOF 132 1.1 christos dn: cn=schema,cn=config 133 1.1 christos objectclass: olcSchemaconfig 134 1.1 christos cn: schema 135 1.1 christos 136 1.1 christos include: file://$ABS_SCHEMADIR/core.ldif 137 1.1 christos 138 1.1 christos include: file://$ABS_SCHEMADIR/cosine.ldif 139 1.1 christos 140 1.1 christos include: file://$ABS_SCHEMADIR/inetorgperson.ldif 141 1.1 christos 142 1.1 christos include: file://$ABS_SCHEMADIR/openldap.ldif 143 1.1 christos 144 1.1 christos include: file://$ABS_SCHEMADIR/nis.ldif 145 1.1 christos 146 1.1 christos dn: olcDatabase={0}config,cn=config 147 1.1 christos objectClass: olcDatabaseConfig 148 1.1 christos olcDatabase: {0}config 149 1.1 christos olcRootPW:< file://$CONFIGPWF 150 1.1 christos 151 1.1 christos dn: olcDatabase={1}$BACKEND,cn=config 152 1.1 christos objectClass: olcDatabaseConfig 153 1.1 christos ${nullExclude}objectClass: olc${BACKEND}Config 154 1.1 christos olcDatabase: {1}$BACKEND 155 1.1 christos olcSuffix: cn=log 156 1.1 christos ${nullExclude}olcDbDirectory: ${DBDIR}.1 157 1.1 christos olcRootDN: $MANAGERDN 158 1.1 christos $INDEX1 159 1.1 christos 160 1.1 christos dn: olcOverlay=syncprov,olcDatabase={1}$BACKEND,cn=config 161 1.1 christos objectClass: olcOverlayConfig 162 1.1 christos objectClass: olcSyncProvConfig 163 1.1 christos olcOverlay: syncprov 164 1.1 christos olcSpNoPresent: TRUE 165 1.1 christos olcSpReloadHint: TRUE 166 1.1 christos 167 1.1 christos dn: olcDatabase={2}$BACKEND,cn=config 168 1.1 christos objectClass: olcDatabaseConfig 169 1.1 christos ${nullExclude}objectClass: olc${BACKEND}Config 170 1.1 christos olcDatabase: {2}$BACKEND 171 1.1 christos olcSuffix: $BASEDN 172 1.1 christos ${nullExclude}olcDbDirectory: ${DBDIR}.2 173 1.1 christos olcRootDN: $MANAGERDN 174 1.1 christos olcRootPW: $PASSWD 175 1.1 christos olcSyncRepl: rid=001 provider=$PROVIDERURI binddn="$MANAGERDN" bindmethod=simple 176 1.1 christos credentials=$PASSWD searchbase="$BASEDN" $SYNCTYPE 177 1.1 christos retry="3 +" timeout=3 logbase="cn=log" 178 1.1 christos logfilter="(&(objectclass=auditWriteObject)(reqresult=0))" 179 1.1 christos syncdata=accesslog tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt 180 1.1 christos olcMultiProvider: TRUE 181 1.1 christos $INDEX2 182 1.1 christos 183 1.1 christos dn: olcOverlay=syncprov,olcDatabase={2}$BACKEND,cn=config 184 1.1 christos objectClass: olcOverlayConfig 185 1.1 christos objectClass: olcSyncProvConfig 186 1.1 christos olcOverlay: syncprov 187 1.1 christos 188 1.1 christos dn: olcOverlay=accesslog,olcDatabase={2}$BACKEND,cn=config 189 1.1 christos objectClass: olcOverlayConfig 190 1.1 christos objectClass: olcAccessLogConfig 191 1.1 christos olcOverlay: accesslog 192 1.1 christos olcAccessLogDB: cn=log 193 1.1 christos olcAccessLogOps: writes 194 1.1 christos olcAccessLogSuccess: TRUE 195 1.1 christos 196 1.1 christos EOF 197 1.1 christos $SLAPADD -F $CFDIR -n 0 -d-1< $TMP > $TESTOUT 2>&1 198 1.1.1.2 christos RC=$? 199 1.1.1.2 christos if test $RC != 0 ; then 200 1.1.1.2 christos echo "slapadd failed ($RC)!" 201 1.1.1.2 christos exit $RC 202 1.1.1.2 christos fi 203 1.1.1.2 christos 204 1.1 christos PORT=`eval echo '$PORT'$n` 205 1.1 christos echo "Starting server $n on TCP/IP port $PORT..." 206 1.1 christos cd ${XDIR}${n} 207 1.1 christos LOG=`eval echo '$LOG'$n` 208 1.1 christos $SLAPD -F slapd.d -h $MYURI -d $LVL > $LOG 2>&1 & 209 1.1 christos PID=$! 210 1.1 christos if test $WAIT != 0 ; then 211 1.1 christos echo PID $PID 212 1.1 christos read foo 213 1.1 christos fi 214 1.1 christos KILLPIDS="$PID $KILLPIDS" 215 1.1 christos cd $TESTWD 216 1.1 christos 217 1.1 christos echo "Using ldapsearch to check that server $n is running..." 218 1.1 christos for i in 0 1 2 3 4 5; do 219 1.1 christos $LDAPSEARCH -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -s base -b "" -H $MYURI \ 220 1.1 christos 'objectclass=*' > /dev/null 2>&1 221 1.1 christos RC=$? 222 1.1 christos if test $RC = 0 ; then 223 1.1 christos break 224 1.1 christos fi 225 1.1 christos echo "Waiting 5 seconds for slapd to start..." 226 1.1 christos sleep 5 227 1.1 christos done 228 1.1 christos 229 1.1 christos if test $RC != 0 ; then 230 1.1 christos echo "ldapsearch failed ($RC)!" 231 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 232 1.1 christos exit $RC 233 1.1 christos fi 234 1.1 christos 235 1.1 christos if [ $n = 1 ]; then 236 1.1 christos echo "Using ldapadd for context on server 1..." 237 1.1 christos $LDAPADD -D "$MANAGERDN" -H $SURIP1 -w $PASSWD -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -f $LDIFORDEREDCP \ 238 1.1 christos >> $TESTOUT 2>&1 239 1.1 christos RC=$? 240 1.1 christos if test $RC != 0 ; then 241 1.1 christos echo "ldapadd failed for server $n database ($RC)!" 242 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 243 1.1 christos exit $RC 244 1.1 christos fi 245 1.1 christos fi 246 1.1 christos 247 1.1 christos n=`expr $n + 1` 248 1.1 christos done 249 1.1 christos 250 1.1 christos echo "Using ldapadd to populate server 1..." 251 1.1 christos $LDAPADD -D "$MANAGERDN" -H $SURIP1 -w $PASSWD -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -f $LDIFORDEREDNOCP \ 252 1.1 christos >> $TESTOUT 2>&1 253 1.1 christos RC=$? 254 1.1 christos if test $RC != 0 ; then 255 1.1 christos echo "ldapadd failed for server $n database ($RC)!" 256 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 257 1.1 christos exit $RC 258 1.1 christos fi 259 1.1 christos 260 1.1 christos echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." 261 1.1 christos sleep $SLEEP1 262 1.1 christos 263 1.1 christos n=1 264 1.1 christos while [ $n -le $MMR ]; do 265 1.1 christos PORT=`expr $BASEPORT + $n` 266 1.1 christos URI="ldaps://${LOCALIP}:$PORT/" 267 1.1 christos 268 1.1 christos echo "Using ldapsearch to read all the entries from server $n..." 269 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -D "$MANAGERDN" -H $URI -w $PASSWD \ 270 1.1 christos 'objectclass=*' > $TESTDIR/server$n.out 2>&1 271 1.1 christos RC=$? 272 1.1 christos 273 1.1 christos if test $RC != 0 ; then 274 1.1 christos echo "ldapsearch failed at server $n ($RC)!" 275 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 276 1.1 christos exit $RC 277 1.1 christos fi 278 1.1 christos $LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt 279 1.1 christos n=`expr $n + 1` 280 1.1 christos done 281 1.1 christos 282 1.1 christos n=2 283 1.1 christos while [ $n -le $MMR ]; do 284 1.1 christos echo "Comparing retrieved entries from server 1 and server $n..." 285 1.1 christos $CMP $PROVIDERFLT $TESTDIR/server$n.flt > $CMPOUT 286 1.1 christos 287 1.1 christos if test $? != 0 ; then 288 1.1 christos echo "test failed - server 1 and server $n databases differ" 289 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 290 1.1 christos exit 1 291 1.1 christos fi 292 1.1 christos n=`expr $n + 1` 293 1.1 christos done 294 1.1 christos 295 1.1 christos echo "Using ldapadd to populate server 2..." 296 1.1 christos $LDAPADD -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -D "$MANAGERDN" -H $SURIP2 -w $PASSWD -f $LDIFADD1 \ 297 1.1 christos >> $TESTOUT 2>&1 298 1.1 christos RC=$? 299 1.1 christos if test $RC != 0 ; then 300 1.1 christos echo "ldapadd failed for server 2 database ($RC)!" 301 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 302 1.1 christos exit $RC 303 1.1 christos fi 304 1.1 christos 305 1.1 christos THEDN="cn=James A Jones 2,ou=Alumni Association,ou=People,dc=example,dc=com" 306 1.1 christos sleep 1 307 1.1 christos for i in 1 2 3; do 308 1.1 christos $LDAPSEARCH -S "" -b "$THEDN" -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -H $SURIP1 \ 309 1.1 christos -s base '(objectClass=*)' entryCSN > "${PROVIDEROUT}.$i" 2>&1 310 1.1 christos RC=$? 311 1.1 christos 312 1.1 christos if test $RC = 0 ; then 313 1.1 christos break 314 1.1 christos fi 315 1.1 christos 316 1.1 christos if test $RC != 32 ; then 317 1.1 christos echo "ldapsearch failed at replica ($RC)!" 318 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 319 1.1 christos exit $RC 320 1.1 christos fi 321 1.1 christos 322 1.1 christos echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." 323 1.1 christos sleep $SLEEP1 324 1.1 christos done 325 1.1 christos 326 1.1 christos n=1 327 1.1 christos while [ $n -le $MMR ]; do 328 1.1 christos PORT=`expr $BASEPORT + $n` 329 1.1 christos URI="ldaps://${LOCALIP}:$PORT/" 330 1.1 christos 331 1.1 christos echo "Using ldapsearch to read all the entries from server $n..." 332 1.1 christos $LDAPSEARCH -S "" -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \ 333 1.1 christos 'objectclass=*' > $TESTDIR/server$n.out 2>&1 334 1.1 christos RC=$? 335 1.1 christos 336 1.1 christos if test $RC != 0 ; then 337 1.1 christos echo "ldapsearch failed at server $n ($RC)!" 338 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 339 1.1 christos exit $RC 340 1.1 christos fi 341 1.1 christos $LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt 342 1.1 christos n=`expr $n + 1` 343 1.1 christos done 344 1.1 christos 345 1.1 christos n=2 346 1.1 christos while [ $n -le $MMR ]; do 347 1.1 christos echo "Comparing retrieved entries from server 1 and server $n..." 348 1.1 christos $CMP $PROVIDERFLT $TESTDIR/server$n.flt > $CMPOUT 349 1.1 christos 350 1.1 christos if test $? != 0 ; then 351 1.1 christos echo "test failed - server 1 and server $n databases differ" 352 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 353 1.1 christos exit 1 354 1.1 christos fi 355 1.1 christos n=`expr $n + 1` 356 1.1 christos done 357 1.1 christos 358 1.1 christos echo "Breaking replication between server 1 and 2..." 359 1.1 christos n=1 360 1.1 christos while [ $n -le $MMR ]; do 361 1.1 christos o=`expr 3 - $n` 362 1.1 christos MYURI=`eval echo '$SURIP'$n` 363 1.1 christos PROVIDERURI=`eval echo '$SURIP'$o` 364 1.1 christos $LDAPMODIFY -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -D cn=config -H $MYURI -y $CONFIGPWF > $TESTOUT 2>&1 <<EOF 365 1.1 christos dn: olcDatabase={2}$BACKEND,cn=config 366 1.1 christos changetype: modify 367 1.1 christos replace: olcSyncRepl 368 1.1 christos olcSyncRepl: rid=001 provider=$PROVIDERURI binddn="$MANAGERDN" bindmethod=simple 369 1.1 christos credentials=InvalidPw searchbase="$BASEDN" $SYNCTYPE 370 1.1 christos retry="3 +" timeout=3 logbase="cn=log" 371 1.1 christos logfilter="(&(objectclass=auditWriteObject)(reqresult=0))" 372 1.1 christos syncdata=accesslog tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt 373 1.1 christos - 374 1.1 christos replace: olcMultiProvider 375 1.1 christos olcMultiProvider: TRUE 376 1.1 christos 377 1.1 christos EOF 378 1.1 christos RC=$? 379 1.1 christos if test $RC != 0 ; then 380 1.1 christos echo "ldapmodify failed for server $n config ($RC)!" 381 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 382 1.1 christos exit $RC 383 1.1 christos fi 384 1.1 christos n=`expr $n + 1` 385 1.1 christos done 386 1.1 christos 387 1.1 christos echo "Using ldapmodify to force conflicts between server 1 and 2..." 388 1.1 christos $LDAPMODIFY -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -D "$MANAGERDN" -H $SURIP1 -w $PASSWD \ 389 1.1 christos >> $TESTOUT 2>&1 << EOF 390 1.1 christos dn: $THEDN 391 1.1 christos changetype: modify 392 1.1 christos add: description 393 1.1 christos description: Amazing 394 1.1 christos 395 1.1 christos EOF 396 1.1 christos RC=$? 397 1.1 christos if test $RC != 0 ; then 398 1.1 christos echo "ldapmodify failed for server 1 database ($RC)!" 399 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 400 1.1 christos exit $RC 401 1.1 christos fi 402 1.1 christos 403 1.1 christos $LDAPMODIFY -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -D "$MANAGERDN" -H $SURIP2 -w $PASSWD \ 404 1.1 christos >> $TESTOUT 2>&1 << EOF 405 1.1 christos dn: $THEDN 406 1.1 christos changetype: modify 407 1.1 christos add: description 408 1.1 christos description: Stupendous 409 1.1 christos 410 1.1 christos EOF 411 1.1 christos RC=$? 412 1.1 christos if test $RC != 0 ; then 413 1.1 christos echo "ldapmodify failed for server 2 database ($RC)!" 414 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 415 1.1 christos exit $RC 416 1.1 christos fi 417 1.1 christos 418 1.1 christos $LDAPMODIFY -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -D "$MANAGERDN" -H $SURIP1 -w $PASSWD \ 419 1.1 christos >> $TESTOUT 2>&1 << EOF 420 1.1 christos dn: $THEDN 421 1.1 christos changetype: modify 422 1.1 christos delete: description 423 1.1 christos description: Outstanding 424 1.1 christos - 425 1.1 christos add: description 426 1.1 christos description: Mindboggling 427 1.1 christos 428 1.1 christos EOF 429 1.1 christos RC=$? 430 1.1 christos if test $RC != 0 ; then 431 1.1 christos echo "ldapmodify failed for server 1 database ($RC)!" 432 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 433 1.1 christos exit $RC 434 1.1 christos fi 435 1.1 christos 436 1.1 christos $LDAPMODIFY -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -D "$MANAGERDN" -H $SURIP2 -w $PASSWD \ 437 1.1 christos >> $TESTOUT 2>&1 << EOF 438 1.1 christos dn: $THEDN 439 1.1 christos changetype: modify 440 1.1 christos delete: description 441 1.1 christos description: OutStanding 442 1.1 christos - 443 1.1 christos add: description 444 1.1 christos description: Bizarre 445 1.1 christos 446 1.1 christos EOF 447 1.1 christos RC=$? 448 1.1 christos if test $RC != 0 ; then 449 1.1 christos echo "ldapmodify failed for server 2 database ($RC)!" 450 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 451 1.1 christos exit $RC 452 1.1 christos fi 453 1.1 christos 454 1.1 christos $LDAPMODIFY -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -D "$MANAGERDN" -H $SURIP1 -w $PASSWD \ 455 1.1 christos >> $TESTOUT 2>&1 << EOF 456 1.1 christos dn: $THEDN 457 1.1 christos changetype: modify 458 1.1 christos add: carLicense 459 1.1 christos carLicense: 123-XYZ 460 1.1 christos - 461 1.1 christos add: employeeNumber 462 1.1 christos employeeNumber: 32 463 1.1 christos 464 1.1 christos EOF 465 1.1 christos RC=$? 466 1.1 christos if test $RC != 0 ; then 467 1.1 christos echo "ldapmodify failed for server 1 database ($RC)!" 468 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 469 1.1 christos exit $RC 470 1.1 christos fi 471 1.1 christos 472 1.1 christos $LDAPMODIFY -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -D "$MANAGERDN" -H $SURIP2 -w $PASSWD \ 473 1.1 christos >> $TESTOUT 2>&1 << EOF 474 1.1 christos dn: $THEDN 475 1.1 christos changetype: modify 476 1.1 christos add: employeeType 477 1.1 christos employeeType: deadwood 478 1.1 christos - 479 1.1 christos add: employeeNumber 480 1.1 christos employeeNumber: 64 481 1.1 christos 482 1.1 christos EOF 483 1.1 christos RC=$? 484 1.1 christos if test $RC != 0 ; then 485 1.1 christos echo "ldapmodify failed for server 2 database ($RC)!" 486 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 487 1.1 christos exit $RC 488 1.1 christos fi 489 1.1 christos 490 1.1 christos $LDAPMODIFY -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -D "$MANAGERDN" -H $SURIP1 -w $PASSWD \ 491 1.1 christos >> $TESTOUT 2>&1 << EOF 492 1.1 christos dn: $THEDN 493 1.1 christos changetype: modify 494 1.1 christos replace: sn 495 1.1 christos sn: Replaced later 496 1.1 christos - 497 1.1 christos replace: sn 498 1.1 christos sn: Surname 499 1.1 christos EOF 500 1.1 christos RC=$? 501 1.1 christos if test $RC != 0 ; then 502 1.1 christos echo "ldapmodify failed for server 1 database ($RC)!" 503 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 504 1.1 christos exit $RC 505 1.1 christos fi 506 1.1 christos 507 1.1 christos echo "Restoring replication between server 1 and 2..." 508 1.1 christos n=1 509 1.1 christos while [ $n -le $MMR ]; do 510 1.1 christos o=`expr 3 - $n` 511 1.1 christos MYURI=`eval echo '$SURIP'$n` 512 1.1 christos PROVIDERURI=`eval echo '$SURIP'$o` 513 1.1 christos $LDAPMODIFY -D cn=config -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -H $MYURI -y $CONFIGPWF > $TESTOUT 2>&1 <<EOF 514 1.1 christos dn: olcDatabase={2}$BACKEND,cn=config 515 1.1 christos changetype: modify 516 1.1 christos replace: olcSyncRepl 517 1.1 christos olcSyncRepl: rid=001 provider=$PROVIDERURI binddn="$MANAGERDN" bindmethod=simple 518 1.1 christos credentials=$PASSWD searchbase="$BASEDN" $SYNCTYPE 519 1.1 christos retry="3 +" timeout=3 logbase="cn=log" 520 1.1 christos logfilter="(&(objectclass=auditWriteObject)(reqresult=0))" 521 1.1 christos syncdata=accesslog tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt 522 1.1 christos - 523 1.1 christos replace: olcMultiProvider 524 1.1 christos olcMultiProvider: TRUE 525 1.1 christos 526 1.1 christos EOF 527 1.1 christos RC=$? 528 1.1 christos if test $RC != 0 ; then 529 1.1 christos echo "ldapmodify failed for server $n config ($RC)!" 530 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 531 1.1 christos exit $RC 532 1.1 christos fi 533 1.1 christos n=`expr $n + 1` 534 1.1 christos done 535 1.1 christos 536 1.1 christos echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." 537 1.1 christos sleep $SLEEP1 538 1.1 christos 539 1.1 christos n=1 540 1.1 christos while [ $n -le $MMR ]; do 541 1.1 christos PORT=`expr $BASEPORT + $n` 542 1.1 christos URI="ldaps://${LOCALIP}:$PORT/" 543 1.1 christos 544 1.1 christos echo "Using ldapsearch to read all the entries from server $n..." 545 1.1 christos $LDAPSEARCH -o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \ 546 1.1 christos 'objectclass=*' > $TESTDIR/server$n.out 2>&1 547 1.1 christos RC=$? 548 1.1 christos 549 1.1 christos if test $RC != 0 ; then 550 1.1 christos echo "ldapsearch failed at server $n ($RC)!" 551 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 552 1.1 christos exit $RC 553 1.1 christos fi 554 1.1 christos $LDIFFILTER -s a < $TESTDIR/server$n.out > $TESTDIR/server$n.flt 555 1.1 christos n=`expr $n + 1` 556 1.1 christos done 557 1.1 christos 558 1.1 christos n=2 559 1.1 christos while [ $n -le $MMR ]; do 560 1.1 christos echo "Comparing retrieved entries from server 1 and server $n..." 561 1.1 christos $CMP $PROVIDERFLT $TESTDIR/server$n.flt > $CMPOUT 562 1.1 christos 563 1.1 christos if test $? != 0 ; then 564 1.1 christos echo "test failed - server 1 and server $n databases differ" 565 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 566 1.1 christos exit 1 567 1.1 christos fi 568 1.1 christos n=`expr $n + 1` 569 1.1 christos done 570 1.1 christos 571 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 572 1.1 christos 573 1.1 christos echo ">>>>> Test succeeded" 574 1.1 christos 575 1.1 christos test $KILLSERVERS != no && wait 576 1.1 christos 577 1.1 christos exit 0 578