1#! /bin/sh 2# $OpenLDAP$ 3## This work is part of OpenLDAP Software <http://www.openldap.org/>. 4## 5## Copyright 1998-2021 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 16echo "running defines.sh" 17. $SRCDIR/scripts/defines.sh 18 19if test $BACKLDAP = "ldapno" ; then 20 echo "LDAP backend not available, test skipped" 21 exit 0 22fi 23 24rm -rf $TESTDIR 25 26mkdir -p $TESTDIR $DBDIR1 $DBDIR2 27 28echo "Running slapadd to build slapd database..." 29. $CONFFILTER $BACKEND < $CHAINCONF1 > $ADDCONF 30. $CONFFILTER < $LDIFCHAIN1 > $SEARCHOUT 31$SLAPADD -f $ADDCONF -l $SEARCHOUT 32RC=$? 33if test $RC != 0 ; then 34 echo "slapadd 1 failed ($RC)!" 35 exit $RC 36fi 37 38. $CONFFILTER $BACKEND < $CHAINCONF2 > $ADDCONF 39. $CONFFILTER < $LDIFCHAIN2 > $SEARCHOUT 40$SLAPADD -f $ADDCONF -l $SEARCHOUT 41RC=$? 42if test $RC != 0 ; then 43 echo "slapadd 2 failed ($RC)!" 44 exit $RC 45fi 46 47echo "Starting first slapd on TCP/IP port $PORT1..." 48. $CONFFILTER $BACKEND < $CHAINCONF1 > $CONF1 49$SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 & 50PID1=$! 51if test $WAIT != 0 ; then 52 echo PID $PID1 53 read foo 54fi 55KILLPIDS="$PID1" 56 57echo "Starting second slapd on TCP/IP port $PORT2..." 58. $CONFFILTER $BACKEND < $CHAINCONF2 > $CONF2 59$SLAPD -f $CONF2 -h $URI2 -d $LVL > $LOG2 2>&1 & 60PID2=$! 61if test $WAIT != 0 ; then 62 echo PID $PID2 63 read foo 64fi 65 66KILLPIDS="$KILLPIDS $PID2" 67 68sleep 1 69 70echo "Using ldapsearch to check that first slapd is running..." 71for i in 0 1 2 3 4 5; do 72 $LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \ 73 'objectclass=*' > /dev/null 2>&1 74 RC=$? 75 if test $RC = 0 ; then 76 break 77 fi 78 echo "Waiting 5 seconds for slapd to start..." 79 sleep 5 80done 81 82if test $RC != 0 ; then 83 echo "ldapsearch failed ($RC)!" 84 test $KILLSERVERS != no && kill -HUP $KILLPIDS 85 exit $RC 86fi 87 88echo "Using ldapsearch to check that second slapd is running..." 89for i in 0 1 2 3 4 5; do 90 $LDAPSEARCH -s base -b "$MONITOR" -H $URI2 \ 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 98done 99 100if test $RC != 0 ; then 101 echo "ldapsearch failed ($RC)!" 102 test $KILLSERVERS != no && kill -HUP $KILLPIDS 103 exit $RC 104fi 105 106for n in 1 2 ; do 107 URI=`eval echo '$URI'$n` 108 echo "Testing ldapsearch as anonymous for \"$BASEDN\" on server $n..." 109 $LDAPSEARCH -H $URI -b "$BASEDN" -S "" \ 110 > $SEARCHOUT 2>&1 111 112 RC=$? 113 if test $RC != 0 ; then 114 echo "ldapsearch failed ($RC)!" 115 test $KILLSERVERS != no && kill -HUP $KILLPIDS 116 exit $RC 117 fi 118 119 echo "Filtering ldapsearch results..." 120 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT 121 echo "Filtering original ldif used to create database..." 122 $LDIFFILTER < $CHAINOUT > $LDIFFLT 123 echo "Comparing filter output..." 124 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT 125 126 if test $? != 0 ; then 127 echo "comparison failed - chained search didn't succeed" 128 test $KILLSERVERS != no && kill -HUP $KILLPIDS 129 exit 1 130 fi 131 132 echo "Reading the referral entry \"ou=Other,$BASEDN\" as anonymous on server $n..." 133 $LDAPSEARCH -H $URI -b "ou=Other,$BASEDN" -S "" \ 134 > $SEARCHOUT 2>&1 135 136 RC=$? 137 if test $RC != 0 ; then 138 echo "ldapsearch failed ($RC)!" 139 test $KILLSERVERS != no && kill -HUP $KILLPIDS 140 exit $RC 141 fi 142 143 echo "Filtering ldapsearch results..." 144 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT 145 echo "Filtering original ldif used to create database..." 146 $LDIFFILTER < $CHAINREFOUT > $LDIFFLT 147 echo "Comparing filter output..." 148 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT 149 150 if test $? != 0 ; then 151 echo "comparison failed - chained search didn't succeed" 152 test $KILLSERVERS != no && kill -HUP $KILLPIDS 153 exit 1 154 fi 155 156 DN="cn=Mark Elliot,ou=Alumni Association,ou=People,$BASEDN" 157 echo "Comparing \"$DN\" on server $n..." 158 $LDAPCOMPARE -H $URI "$DN" "cn:Mark Elliot" \ 159 > $TESTOUT 2>&1 160 161 RC=$? 162 if test $RC != 6 && test $RC,$BACKEND != 5,null ; then 163 echo "ldapcompare failed ($RC)!" 164 test $KILLSERVERS != no && kill -HUP $KILLPIDS 165 exit 1 166 fi 167 168 DN="ou=Other,$BASEDN" 169 echo "Comparing \"$DN\" on server $n with manageDSAit control..." 170 $LDAPCOMPARE -H $URI -M "$DN" "ou:Other" \ 171 > $TESTOUT 2>&1 172 173 RC=$? 174 if test $RC != 6 && test $RC,$BACKEND != 5,null ; then 175 echo "ldapcompare failed ($RC)!" 176 test $KILLSERVERS != no && kill -HUP $KILLPIDS 177 exit 1 178 fi 179done 180 181# 182# Testing writes to first server 183# 184echo "Writing to first server with scope on second server..." 185$LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD > \ 186 $TESTOUT 2>&1 << EOMODS 187dn: cn=New Group,ou=Groups,dc=example,dc=com 188changetype: add 189objectClass: groupOfNames 190cn: New Group 191member: 192 193dn: cn=New Group,ou=Groups,dc=example,dc=com 194changetype: modify 195add: description 196description: testing chain overlay writes... 197- 198replace: member 199member: cn=New Group,ou=Groups,dc=example,dc=com 200member: cn=Manager,dc=example,dc=com 201- 202add: owner 203owner: cn=Manager,dc=example,dc=com 204- 205 206dn: cn=New Group,ou=Groups,dc=example,dc=com 207changetype: modrdn 208newrdn: cn=Renamed Group 209deleteoldrdn: 1 210 211dn: cn=All Staff,ou=Groups,dc=example,dc=com 212changetype: delete 213EOMODS 214 215RC=$? 216if test $RC != 0 ; then 217 echo "ldapmodify failed ($RC)!" 218 test $KILLSERVERS != no && kill -HUP $KILLPIDS 219 exit $RC 220fi 221 222# 223# Testing writes to second server 224# 225echo "Writing to second server with scope on first server..." 226$LDAPMODIFY -v -D "$MANAGERDN" -H $URI2 -w $PASSWD > \ 227 $TESTOUT 2>&1 << EOMODS 228dn: cn=New User,ou=People,dc=example,dc=com 229changetype: add 230objectClass: person 231cn: New User 232sn: User 233seeAlso: cn=New Group,ou=Groups,dc=example,dc=com 234 235dn: cn=New User,ou=People,dc=example,dc=com 236changetype: modify 237add: description 238description: testing chain overlay writes... 239- 240replace: seeAlso 241seeAlso: cn=Renamed Group,ou=Groups,dc=example,dc=com 242- 243 244dn: cn=New User,ou=People,dc=example,dc=com 245changetype: modrdn 246newrdn: cn=Renamed User 247deleteoldrdn: 1 248 249dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com 250changetype: delete 251EOMODS 252 253RC=$? 254if test $RC != 0 ; then 255 echo "ldapmodify failed ($RC)!" 256 test $KILLSERVERS != no && kill -HUP $KILLPIDS 257 exit $RC 258fi 259 260for n in 1 2 ; do 261 URI=`eval echo '$URI'$n` 262 echo "Testing ldapsearch as anonymous for \"$BASEDN\" on server $n..." 263 $LDAPSEARCH -H $URI -b "$BASEDN" -S "" \ 264 > $SEARCHOUT 2>&1 265 266 RC=$? 267 if test $RC != 0 ; then 268 echo "ldapsearch failed ($RC)!" 269 test $KILLSERVERS != no && kill -HUP $KILLPIDS 270 exit $RC 271 fi 272 273 echo "Filtering ldapsearch results..." 274 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT 275 echo "Filtering original ldif used to create database..." 276 $LDIFFILTER < $CHAINMODOUT > $LDIFFLT 277 echo "Comparing filter output..." 278 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT 279 280 if test $? != 0 ; then 281 echo "comparison failed - chained search didn't succeed" 282 test $KILLSERVERS != no && kill -HUP $KILLPIDS 283 exit 1 284 fi 285done 286 287NEWPW=newsecret 288echo "Using ldappasswd on second server with scope on first server..." 289$LDAPPASSWD -H $URI2 \ 290 -w secret -s $NEWPW \ 291 -D "$MANAGERDN" "$BJORNSDN" >> $TESTOUT 2>&1 292RC=$? 293if test $RC != 0 ; then 294 echo "ldappasswd failed ($RC)!" 295 test $KILLSERVERS != no && kill -HUP $KILLPIDS 296 exit $RC 297fi 298 299echo "Binding with newly changed password on first server..." 300$LDAPWHOAMI -H $URI1 \ 301 -D "$BJORNSDN" -w $NEWPW 302RC=$? 303if test $RC != 0 ; then 304 echo "ldapwhoami failed ($RC)!" 305 test $KILLSERVERS != no && kill -HUP $KILLPIDS 306 exit $RC 307fi 308 309# ITS#57?? 310$LDAPADD -H $URI1 \ 311 -D "$MANAGERDN" -w secret \ 312 >> $TESTOUT 2>&1 \ 313 << EOMODS 314dn: ou=Can't Contact,dc=example,dc=com 315changetype: add 316objectclass: referral 317objectclass: extensibleobject 318ou: Can't Contact 319# invalid URI to test broken connectivity handling (search only) 320ref: ${URI3}ou=Can't%20Contact,dc=example,dc=com 321EOMODS 322 323echo "Reading the referral entry \"ou=Can't Contact,$BASEDN\" as anonymous on port $PORT1..." 324$LDAPSEARCH -H $URI1 -b "$BASEDN" -S "" "(cn=Can't Contact)" \ 325 > $SEARCHOUT 2>&1 326 327RC=$? 328if test $RC != 0 ; then 329 echo "ldapsearch failed ($RC)!" 330 test $KILLSERVERS != no && kill -HUP $KILLPIDS 331 exit $RC 332fi 333 334test $KILLSERVERS != no && kill -HUP $KILLPIDS 335 336echo ">>>>> Test succeeded" 337 338test $KILLSERVERS != no && wait 339 340exit 0 341