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