1 1.1 lukem #! /bin/sh 2 1.1.1.3 tron # $OpenLDAP$ 3 1.1 lukem ## This work is part of OpenLDAP Software <http://www.openldap.org/>. 4 1.1 lukem ## 5 1.1.1.9 christos ## Copyright 1998-2024 The OpenLDAP Foundation. 6 1.1 lukem ## All rights reserved. 7 1.1 lukem ## 8 1.1 lukem ## Redistribution and use in source and binary forms, with or without 9 1.1 lukem ## modification, are permitted only as authorized by the OpenLDAP 10 1.1 lukem ## Public License. 11 1.1 lukem ## 12 1.1 lukem ## A copy of this license is available in the file LICENSE in the 13 1.1 lukem ## top-level directory of the distribution or, alternatively, at 14 1.1 lukem ## <http://www.OpenLDAP.org/license.html>. 15 1.1 lukem 16 1.1 lukem echo "running defines.sh" 17 1.1 lukem . $SRCDIR/scripts/defines.sh 18 1.1 lukem 19 1.1 lukem if test $SYNCPROV = syncprovno; then 20 1.1 lukem echo "Syncrepl provider overlay not available, test skipped" 21 1.1 lukem exit 0 22 1.1 lukem fi 23 1.1 lukem 24 1.1 lukem mkdir -p $TESTDIR $DBDIR1 $DBDIR4 25 1.1 lukem 26 1.1 lukem # 27 1.1 lukem # Test replication: 28 1.1.1.3 tron # - start provider 29 1.1 lukem # - start consumer 30 1.1 lukem # - populate over ldap 31 1.1 lukem # - perform some modifies and deleted 32 1.1 lukem # - attempt to modify the consumer (referral or chain) 33 1.1 lukem # - retrieve database over ldap and compare against expected results 34 1.1 lukem # 35 1.1 lukem 36 1.1.1.3 tron echo "Starting provider slapd on TCP/IP port $PORT1..." 37 1.1.1.8 christos . $CONFFILTER $BACKEND < $SRPROVIDERCONF > $CONF1 38 1.1.1.8 christos $SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 & 39 1.1 lukem PID=$! 40 1.1 lukem if test $WAIT != 0 ; then 41 1.1 lukem echo PID $PID 42 1.1 lukem read foo 43 1.1 lukem fi 44 1.1 lukem KILLPIDS="$PID" 45 1.1 lukem 46 1.1 lukem sleep 1 47 1.1 lukem 48 1.1.1.3 tron echo "Using ldapsearch to check that provider slapd is running..." 49 1.1 lukem for i in 0 1 2 3 4 5; do 50 1.1.1.8 christos $LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \ 51 1.1 lukem 'objectclass=*' > /dev/null 2>&1 52 1.1 lukem RC=$? 53 1.1 lukem if test $RC = 0 ; then 54 1.1 lukem break 55 1.1 lukem fi 56 1.1 lukem echo "Waiting 5 seconds for slapd to start..." 57 1.1 lukem sleep 5 58 1.1 lukem done 59 1.1 lukem 60 1.1 lukem if test $RC != 0 ; then 61 1.1 lukem echo "ldapsearch failed ($RC)!" 62 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 63 1.1 lukem exit $RC 64 1.1 lukem fi 65 1.1 lukem 66 1.1.1.3 tron echo "Using ldapadd to create the context prefix entry in the provider..." 67 1.1.1.8 christos $LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD < \ 68 1.1 lukem $LDIFORDEREDCP > /dev/null 2>&1 69 1.1 lukem RC=$? 70 1.1 lukem if test $RC != 0 ; then 71 1.1 lukem echo "ldapadd failed ($RC)!" 72 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 73 1.1 lukem exit $RC 74 1.1 lukem fi 75 1.1 lukem 76 1.1 lukem echo "Starting consumer slapd on TCP/IP port $PORT4..." 77 1.1.1.8 christos . $CONFFILTER $BACKEND < $P1SRCONSUMERCONF > $CONF4 78 1.1.1.8 christos $SLAPD -f $CONF4 -h $URI4 -d $LVL > $LOG4 2>&1 & 79 1.1.1.8 christos CONSUMERPID=$! 80 1.1 lukem if test $WAIT != 0 ; then 81 1.1.1.8 christos echo CONSUMERPID $CONSUMERPID 82 1.1 lukem read foo 83 1.1 lukem fi 84 1.1.1.8 christos KILLPIDS="$KILLPIDS $CONSUMERPID" 85 1.1 lukem 86 1.1 lukem sleep 1 87 1.1 lukem 88 1.1 lukem echo "Using ldapsearch to check that consumer slapd is running..." 89 1.1 lukem for i in 0 1 2 3 4 5; do 90 1.1.1.8 christos $LDAPSEARCH -s base -b "$MONITOR" -H $URI4 \ 91 1.1 lukem 'objectclass=*' > /dev/null 2>&1 92 1.1 lukem RC=$? 93 1.1 lukem if test $RC = 0 ; then 94 1.1 lukem break 95 1.1 lukem fi 96 1.1 lukem echo "Waiting 5 seconds for slapd to start..." 97 1.1 lukem sleep 5 98 1.1 lukem done 99 1.1 lukem 100 1.1 lukem if test $RC != 0 ; then 101 1.1 lukem echo "ldapsearch failed ($RC)!" 102 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 103 1.1 lukem exit $RC 104 1.1 lukem fi 105 1.1 lukem 106 1.1 lukem MORELDIF=$TESTDIR/more.ldif 107 1.1 lukem TESTOUT1=$TESTDIR/testout1.out 108 1.1 lukem TESTOUT2=$TESTDIR/testout2.out 109 1.1 lukem sed -e 's/[Oo][Uu]=/ou=More /g' -e 's/^[Oo][Uu]: /ou: More /' \ 110 1.1 lukem -e 's/cn=Manager/cn=More Manager/g' \ 111 1.1 lukem -e 's/^cn: Manager/cn: More Manager/' \ 112 1.1 lukem $LDIFORDEREDNOCP > $MORELDIF 113 1.1 lukem 114 1.1.1.3 tron echo "Using ldapadd to populate the provider directory..." 115 1.1.1.8 christos $LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD < \ 116 1.1 lukem $LDIFORDEREDNOCP > $TESTOUT1 2>&1 & 117 1.1 lukem C1PID=$! 118 1.1.1.8 christos $LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD < \ 119 1.1 lukem $MORELDIF > $TESTOUT2 2>&1 & 120 1.1 lukem C2PID=$! 121 1.1 lukem wait $C1PID $C2PID 122 1.1 lukem 123 1.1 lukem echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." 124 1.1 lukem sleep $SLEEP1 125 1.1 lukem 126 1.1 lukem echo "Stopping the provider, sleeping 10 seconds and restarting it..." 127 1.1 lukem kill -HUP "$PID" 128 1.1 lukem wait $PID 129 1.1 lukem sleep 10 130 1.1 lukem echo "RESTART" >> $LOG1 131 1.1.1.8 christos $SLAPD -f $CONF1 -h $URI1 -d $LVL >> $LOG1 2>&1 & 132 1.1 lukem PID=$! 133 1.1 lukem if test $WAIT != 0 ; then 134 1.1 lukem echo PID $PID 135 1.1 lukem read foo 136 1.1 lukem fi 137 1.1.1.8 christos KILLPIDS="$PID $CONSUMERPID" 138 1.1 lukem 139 1.1 lukem sleep 1 140 1.1 lukem 141 1.1.1.3 tron echo "Using ldapsearch to check that provider slapd is running..." 142 1.1 lukem for i in 0 1 2 3 4 5; do 143 1.1.1.8 christos $LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \ 144 1.1 lukem 'objectclass=*' > /dev/null 2>&1 145 1.1 lukem RC=$? 146 1.1 lukem if test $RC = 0 ; then 147 1.1 lukem break 148 1.1 lukem fi 149 1.1 lukem echo "Waiting 5 seconds for slapd to start..." 150 1.1 lukem sleep 5 151 1.1 lukem done 152 1.1 lukem 153 1.1 lukem if test $RC != 0 ; then 154 1.1 lukem echo "ldapsearch failed ($RC)!" 155 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 156 1.1 lukem exit $RC 157 1.1 lukem fi 158 1.1 lukem 159 1.1 lukem echo "Waiting 10 seconds to let the system catch up" 160 1.1 lukem sleep 10 161 1.1 lukem 162 1.1.1.3 tron echo "Using ldapmodify to modify provider directory..." 163 1.1 lukem 164 1.1 lukem # 165 1.1 lukem # Do some modifications 166 1.1 lukem # 167 1.1 lukem 168 1.1.1.8 christos $LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD > \ 169 1.1 lukem $TESTOUT 2>&1 << EOMODS 170 1.1 lukem dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com 171 1.1 lukem changetype: modify 172 1.1 lukem add: drink 173 1.1 lukem drink: Orange Juice 174 1.1 lukem - 175 1.1 lukem delete: sn 176 1.1 lukem sn: Jones 177 1.1 lukem - 178 1.1 lukem add: sn 179 1.1 lukem sn: Jones 180 1.1 lukem 181 1.1 lukem dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com 182 1.1 lukem changetype: modify 183 1.1 lukem replace: drink 184 1.1 lukem drink: Iced Tea 185 1.1 lukem 186 1.1 lukem dn: cn=ITD Staff,ou=Groups,dc=example,dc=com 187 1.1 lukem changetype: modify 188 1.1 lukem delete: uniquemember 189 1.1 lukem uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com 190 1.1 lukem uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com 191 1.1 lukem - 192 1.1 lukem add: uniquemember 193 1.1 lukem uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com 194 1.1 lukem uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com 195 1.1 lukem 196 1.1 lukem dn: cn=All Staff,ou=Groups,dc=example,dc=com 197 1.1 lukem changetype: modify 198 1.1 lukem delete: description 199 1.1 lukem 200 1.1 lukem dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com 201 1.1 lukem changetype: add 202 1.1 lukem objectclass: OpenLDAPperson 203 1.1 lukem cn: Gern Jensen 204 1.1 lukem sn: Jensen 205 1.1 lukem uid: gjensen 206 1.1 lukem title: Chief Investigator, ITD 207 1.1 lukem postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103 208 1.1 lukem seealso: cn=All Staff, ou=Groups, dc=example,dc=com 209 1.1 lukem drink: Coffee 210 1.1 lukem homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104 211 1.1 lukem description: Very odd 212 1.1 lukem facsimiletelephonenumber: +1 313 555 7557 213 1.1 lukem telephonenumber: +1 313 555 8343 214 1.1 lukem mail: gjensen@mailgw.example.com 215 1.1 lukem homephone: +1 313 555 8844 216 1.1 lukem 217 1.1 lukem dn: ou=Retired, ou=People, dc=example,dc=com 218 1.1 lukem changetype: add 219 1.1 lukem objectclass: organizationalUnit 220 1.1 lukem ou: Retired 221 1.1 lukem 222 1.1 lukem dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com 223 1.1 lukem changetype: add 224 1.1 lukem objectclass: OpenLDAPperson 225 1.1 lukem cn: Rosco P. Coltrane 226 1.1 lukem sn: Coltrane 227 1.1 lukem uid: rosco 228 1.1 lukem description: Fat tycoon 229 1.1 lukem 230 1.1 lukem dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com 231 1.1 lukem changetype: modrdn 232 1.1 lukem newrdn: cn=Rosco P. Coltrane 233 1.1 lukem deleteoldrdn: 1 234 1.1 lukem newsuperior: ou=Retired, ou=People, dc=example,dc=com 235 1.1 lukem 236 1.1 lukem dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com 237 1.1 lukem changetype: delete 238 1.1 lukem 239 1.1 lukem EOMODS 240 1.1 lukem 241 1.1 lukem RC=$? 242 1.1 lukem if test $RC != 0 ; then 243 1.1 lukem echo "ldapmodify failed ($RC)!" 244 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 245 1.1 lukem exit $RC 246 1.1 lukem fi 247 1.1 lukem 248 1.1 lukem echo "Using ldappasswd to change some passwords..." 249 1.1.1.8 christos $LDAPPASSWD -D "$MANAGERDN" -H $URI1 -w $PASSWD \ 250 1.1 lukem 'cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com' \ 251 1.1 lukem > $TESTOUT 2>&1 252 1.1 lukem RC=$? 253 1.1 lukem if test $RC != 0 ; then 254 1.1 lukem echo "ldapmodify failed ($RC)!" 255 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 256 1.1 lukem exit $RC 257 1.1 lukem fi 258 1.1 lukem 259 1.1 lukem echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." 260 1.1 lukem sleep $SLEEP1 261 1.1 lukem 262 1.1 lukem echo "Stopping consumer to test recovery..." 263 1.1.1.8 christos kill -HUP $CONSUMERPID 264 1.1.1.8 christos wait $CONSUMERPID 265 1.1 lukem 266 1.1.1.3 tron echo "Modifying more entries on the provider..." 267 1.1.1.8 christos $LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD >> \ 268 1.1 lukem $TESTOUT 2>&1 << EOMODS 269 1.1 lukem dn: cn=Rosco P. Coltrane, ou=Retired, ou=People, dc=example,dc=com 270 1.1 lukem changetype: delete 271 1.1 lukem 272 1.1 lukem dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com 273 1.1 lukem changetype: modify 274 1.1 lukem add: drink 275 1.1 lukem drink: Mad Dog 20/20 276 1.1 lukem 277 1.1 lukem dn: cn=Rosco P. Coltrane, ou=Retired, ou=People, dc=example,dc=com 278 1.1 lukem changetype: add 279 1.1 lukem objectclass: OpenLDAPperson 280 1.1 lukem sn: Coltrane 281 1.1 lukem uid: rosco 282 1.1 lukem cn: Rosco P. Coltrane 283 1.1 lukem 284 1.1 lukem EOMODS 285 1.1 lukem 286 1.1 lukem echo "Restarting consumer..." 287 1.1 lukem echo "RESTART" >> $LOG4 288 1.1.1.8 christos $SLAPD -f $CONF4 -h $URI4 -d $LVL >> $LOG4 2>&1 & 289 1.1.1.8 christos CONSUMERPID=$! 290 1.1 lukem if test $WAIT != 0 ; then 291 1.1.1.8 christos echo CONSUMERPID $CONSUMERPID 292 1.1 lukem read foo 293 1.1 lukem fi 294 1.1.1.8 christos KILLPIDS="$PID $CONSUMERPID" 295 1.1 lukem 296 1.1 lukem echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." 297 1.1 lukem sleep $SLEEP1 298 1.1 lukem 299 1.1 lukem if test ! $BACKLDAP = "ldapno" ; then 300 1.1 lukem echo "Try updating the consumer slapd..." 301 1.1.1.8 christos $LDAPMODIFY -v -D "$MANAGERDN" -H $URI4 -w $PASSWD > \ 302 1.1 lukem $TESTOUT 2>&1 << EOMODS 303 1.1 lukem dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com 304 1.1 lukem changetype: modify 305 1.1 lukem add: description 306 1.1 lukem description: This write must fail because directed to a shadow context, 307 1.1 lukem description: unless the chain overlay is configured appropriately ;) 308 1.1 lukem 309 1.1 lukem EOMODS 310 1.1 lukem 311 1.1 lukem RC=$? 312 1.1 lukem if test $RC != 0 ; then 313 1.1 lukem echo "ldapmodify failed ($RC)!" 314 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 315 1.1 lukem exit $RC 316 1.1 lukem fi 317 1.1 lukem 318 1.1 lukem # ITS#4964 319 1.1 lukem echo "Trying to change some passwords on the consumer..." 320 1.1.1.8 christos $LDAPPASSWD -D "$MANAGERDN" -H $URI4 -w $PASSWD \ 321 1.1 lukem 'cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com' \ 322 1.1 lukem > $TESTOUT 2>&1 323 1.1 lukem RC=$? 324 1.1 lukem if test $RC != 0 ; then 325 1.1 lukem echo "ldapmodify failed ($RC)!" 326 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 327 1.1 lukem exit $RC 328 1.1 lukem fi 329 1.1 lukem 330 1.1 lukem echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." 331 1.1 lukem sleep $SLEEP1 332 1.1 lukem fi 333 1.1 lukem 334 1.1 lukem OPATTRS="entryUUID creatorsName createTimestamp modifiersName modifyTimestamp" 335 1.1 lukem 336 1.1.1.3 tron echo "Using ldapsearch to read all the entries from the provider..." 337 1.1.1.8 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \ 338 1.1.1.8 christos '(objectclass=*)' '*' $OPATTRS > $PROVIDEROUT 2>&1 339 1.1 lukem RC=$? 340 1.1 lukem 341 1.1 lukem if test $RC != 0 ; then 342 1.1.1.3 tron echo "ldapsearch failed at provider ($RC)!" 343 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 344 1.1 lukem exit $RC 345 1.1 lukem fi 346 1.1 lukem 347 1.1 lukem echo "Using ldapsearch to read all the entries from the consumer..." 348 1.1.1.8 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI4 \ 349 1.1.1.8 christos '(objectclass=*)' '*' $OPATTRS > $CONSUMEROUT 2>&1 350 1.1 lukem RC=$? 351 1.1 lukem 352 1.1 lukem if test $RC != 0 ; then 353 1.1 lukem echo "ldapsearch failed at consumer ($RC)!" 354 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 355 1.1 lukem exit $RC 356 1.1 lukem fi 357 1.1 lukem 358 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS 359 1.1 lukem 360 1.1.1.3 tron echo "Filtering provider results..." 361 1.1.1.8 christos $LDIFFILTER < $PROVIDEROUT > $PROVIDERFLT 362 1.1 lukem echo "Filtering consumer results..." 363 1.1.1.8 christos $LDIFFILTER < $CONSUMEROUT > $CONSUMERFLT 364 1.1 lukem 365 1.1.1.3 tron echo "Comparing retrieved entries from provider and consumer..." 366 1.1.1.8 christos $CMP $PROVIDERFLT $CONSUMERFLT > $CMPOUT 367 1.1 lukem 368 1.1 lukem if test $? != 0 ; then 369 1.1.1.3 tron echo "test failed - provider and consumer databases differ" 370 1.1 lukem exit 1 371 1.1 lukem fi 372 1.1 lukem 373 1.1 lukem echo ">>>>> Test succeeded" 374 1.1 lukem 375 1.1 lukem test $KILLSERVERS != no && wait 376 1.1 lukem 377 1.1 lukem exit 0 378