1#! /bin/sh 2# $OpenLDAP$ 3## This work is part of OpenLDAP Software <http://www.openldap.org/>. 4## 5## Copyright 1998-2011 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 "Using $RELAY backend..." 17echo "" 18 19echo "Starting slapd on TCP/IP port $PORT1..." 20echo "======== Starting slapd with $RELAY backend ========" >> $LOG1 21. $CONFFILTER $BACKEND $MONITORDB < $RELAYCONF > $CONF1 22$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 & 23PID=$! 24if test $WAIT != 0 ; then 25 echo PID $PID 26 read foo 27fi 28KILLPIDS="$PID" 29 30sleep 1 31 32echo "Using ldapsearch to check that slapd is running..." 33for i in 0 1 2 3 4 5; do 34 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \ 35 'objectclass=*' > /dev/null 2>&1 36 RC=$? 37 if test $RC = 0 ; then 38 break 39 fi 40 echo "Waiting 5 seconds for slapd to start..." 41 sleep 5 42done 43if test $RC != 0 ; then 44 echo "ldapsearch failed ($RC)!" 45 test $KILLSERVERS != no && kill -HUP $KILLPIDS 46 exit $RC 47fi 48 49echo "Using ldapadd to populate the database..." 50$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ 51 $LDIFORDERED > $TESTOUT 2>&1 52RC=$? 53if test $RC != 0 ; then 54 echo "ldapadd failed ($RC)!" 55 test $KILLSERVERS != no && kill -HUP $KILLPIDS 56 exit $RC 57fi 58 59cat /dev/null > $SEARCHOUT 60 61BASEDN="dc=example,dc=com" 62echo "Searching base=\"$BASEDN\"..." 63echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT 64$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" >> $SEARCHOUT 2>&1 65RC=$? 66if test $RC != 0 ; then 67 echo "Search failed ($RC)!" 68 test $KILLSERVERS != no && kill -HUP $KILLPIDS 69 exit $RC 70fi 71 72BASEDN="o=Example,c=US" 73echo "Searching base=\"$BASEDN\"..." 74echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT 75$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" >> $SEARCHOUT 2>&1 76RC=$? 77if test $RC != 0 ; then 78 echo "Search failed ($RC)!" 79 test $KILLSERVERS != no && kill -HUP $KILLPIDS 80 exit $RC 81fi 82 83BASEDN="o=Esempio,c=IT" 84echo "Searching base=\"$BASEDN\"..." 85echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT 86$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" >> $SEARCHOUT 2>&1 87RC=$? 88if test $RC != 0 ; then 89 echo "Search failed ($RC)!" 90 test $KILLSERVERS != no && kill -HUP $KILLPIDS 91 exit $RC 92fi 93 94BASEDN="o=Beispiel,c=DE" 95echo "Searching base=\"$BASEDN\"..." 96echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT 97$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" >> $SEARCHOUT 2>&1 98RC=$? 99if test $RC != 0 ; then 100 echo "Search failed ($RC)!" 101 test $KILLSERVERS != no && kill -HUP $KILLPIDS 102 exit $RC 103fi 104 105# 106# Do some modifications 107# 108 109BASEDN="o=Beispiel,c=DE" 110echo "Modifying database \"$BASEDN\"..." 111$LDAPMODIFY -v -D "cn=Manager,$BASEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ 112 -M >> $TESTOUT 2>&1 << EOMODS 113dn: cn=Added User,ou=Alumni Association,ou=People,$BASEDN 114changetype: add 115objectClass: OpenLDAPperson 116cn: Added User 117sn: User 118uid: auser 119seealso: cn=All Staff,ou=Groups,$BASEDN 120homephone: +49 1234567890 121drink: Beer 122mail: auser@mail.alumni.example.com 123telephonenumber: +49 1234-567-890 124description: Just added in o=Beispiel,c=DE naming context 125 126dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,$BASEDN 127changetype: modify 128add: seeAlso 129seeAlso: cn=Ursula Hampster,ou=Alumni Association,ou=People,$BASEDN 130- 131add: description 132description: Just added self to seeAlso in $BASEDN virtual naming context 133- 134 135dn: cn=Mark Elliot,ou=Alumni Association,ou=People,$BASEDN 136changetype: delete 137 138dn: cn=John Doe,ou=Information Technology Division,ou=People,$BASEDN 139changetype: modrdn 140newrdn: cn=John P. Doe 141deleteoldrdn: 1 142 143dn: cn=Jane Doe,ou=Alumni Association,ou=People,$BASEDN 144changetype: modrdn 145newrdn: cn=Jane Q. Doe 146deleteoldrdn: 1 147newsuperior: ou=Information Technology Division,ou=People,$BASEDN 148 149dn: cn=Jane Q. Doe,ou=Information Technology Division,ou=People,$BASEDN 150changetype: modify 151add: cn 152cn: Jane Qissapaolo Doe 153- 154# This operation (delete of DN-valued attribute) triggered ITS#3498 155delete: seeAlso 156- 157 158dn: cn=Jane Q. Doe,ou=Information Technology Division,ou=People,$BASEDN 159changetype: modify 160add: seeAlso 161seeAlso: cn=All Staff,ou=Groups,$BASEDN 162- 163 164dn: ou=Referrals,$BASEDN 165changetype: add 166objectclass: referral 167objectclass: extensibleObject 168ou: Referrals 169ref: ldap://localhost.localdomain/ou=Referrals,$BASEDN 170description: Just added as ldap://localhost.localdomain:389/ou=Referrals,$BASEDN 171 172dn: ou=Referrals,$BASEDN 173changetype: modify 174replace: ref 175ref: ldap://localhost:9012/ou=Referrals,$BASEDN 176- 177add: description 178description: ...and modified as ldap://localhost:9012/ou=Referrals,$BASEDN 179- 180EOMODS 181 182RC=$? 183if test $RC != 0 ; then 184 echo "Modify failed ($RC)!" 185 test $KILLSERVERS != no && kill -HUP $KILLPIDS 186 exit $RC 187fi 188 189BASEDN="o=Example,c=US" 190echo "Modifying database \"$BASEDN\"..." 191$LDAPMODIFY -v -D "cn=Manager,$BASEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ 192 -M >> $TESTOUT 2>&1 << EOMODS 193# These operations (updates with objectClass mapping) triggered ITS#3499 194dn: cn=Added Group,ou=Groups,$BASEDN 195changetype: add 196objectClass: groupOfNames 197objectClass: uidObject 198cn: Added Group 199member: cn=Added Group,ou=Groups,$BASEDN 200uid: added 201 202dn: cn=Another Added Group,ou=Groups,$BASEDN 203changetype: add 204objectClass: groupOfNames 205cn: Another Added Group 206member: cn=Added Group,ou=Groups,$BASEDN 207member: cn=Another Added Group,ou=Groups,$BASEDN 208 209dn: cn=Another Added Group,ou=Groups,$BASEDN 210changetype: modify 211add: objectClass 212objectClass: uidObject 213- 214add: uid 215uid: added 216- 217 218dn: cn=Added Group,ou=Groups,$BASEDN 219changetype: modify 220delete: objectClass 221objectClass: uidObject 222- 223delete: uid 224- 225EOMODS 226 227RC=$? 228if test $RC != 0 ; then 229 echo "Modify failed ($RC)!" 230 test $KILLSERVERS != no && kill -HUP $KILLPIDS 231 exit $RC 232fi 233 234echo "Searching base=\"$BASEDN\"..." 235echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT 236$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" >> $SEARCHOUT 2>&1 237RC=$? 238if test $RC != 0 ; then 239 echo "Search failed ($RC)!" 240 test $KILLSERVERS != no && kill -HUP $KILLPIDS 241 exit $RC 242fi 243 244BASEDN="o=Esempio,c=IT" 245echo "Searching base=\"$BASEDN\"..." 246echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT 247$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" >> $SEARCHOUT 2>&1 248RC=$? 249if test $RC != 0 ; then 250 echo "Search failed ($RC)!" 251 test $KILLSERVERS != no && kill -HUP $KILLPIDS 252 exit $RC 253fi 254 255FILTER="(objectClass=referral)" 256echo "Searching filter=\"$FILTER\"" 257echo " attrs=\"'*' ref\"" 258echo "# searching filter=\"$FILTER\"" >> $SEARCHOUT 259echo "# attrs=\"'*' ref\"" >> $SEARCHOUT 260 261BASEDN="dc=example,dc=com" 262echo " base=\"$BASEDN\"..." 263echo "# base=\"$BASEDN\"..." >> $SEARCHOUT 264$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" -M "$FILTER" '*' ref \ 265 >> $SEARCHOUT 2>&1 266RC=$? 267if test $RC != 0 ; then 268 echo "Search failed ($RC)!" 269 test $KILLSERVERS != no && kill -HUP $KILLPIDS 270 exit $RC 271fi 272 273BASEDN="o=Example,c=US" 274echo " base=\"$BASEDN\"..." 275echo "# base=\"$BASEDN\"..." >> $SEARCHOUT 276$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" -M "$FILTER" '*' ref \ 277 >> $SEARCHOUT 2>&1 278RC=$? 279if test $RC != 0 ; then 280 echo "Search failed ($RC)!" 281 test $KILLSERVERS != no && kill -HUP $KILLPIDS 282 exit $RC 283fi 284 285BASEDN="o=Esempio,c=IT" 286echo " base=\"$BASEDN\"..." 287echo "# base=\"$BASEDN\"..." >> $SEARCHOUT 288$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" -M "$FILTER" '*' ref \ 289 >> $SEARCHOUT 2>&1 290RC=$? 291if test $RC != 0 ; then 292 echo "Search failed ($RC)!" 293 test $KILLSERVERS != no && kill -HUP $KILLPIDS 294 exit $RC 295fi 296 297BASEDN="o=Example,c=US" 298FILTER="(seeAlso=cn=all staff,ou=Groups,$BASEDN)" 299echo "Searching filter=\"$FILTER\"" 300echo " attrs=\"seeAlso\"" 301echo " base=\"$BASEDN\"..." 302echo "# searching filter=\"$FILTER\"" >> $SEARCHOUT 303echo "# attrs=\"seeAlso\"" >> $SEARCHOUT 304echo "# base=\"$BASEDN\"..." >> $SEARCHOUT 305$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" "$FILTER" seeAlso \ 306 >> $SEARCHOUT 2>&1 307RC=$? 308if test $RC != 0 ; then 309 echo "Search failed ($RC)!" 310 test $KILLSERVERS != no && kill -HUP $KILLPIDS 311 exit $RC 312fi 313 314FILTER="(uid=example)" 315echo "Searching filter=\"$FILTER\"" 316echo " attrs=\"uid\"" 317echo " base=\"$BASEDN\"..." 318echo "# searching filter=\"$FILTER\"" >> $SEARCHOUT 319echo "# attrs=\"uid\"" >> $SEARCHOUT 320echo "# base=\"$BASEDN\"..." >> $SEARCHOUT 321$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" "$FILTER" uid \ 322 >> $SEARCHOUT 2>&1 323RC=$? 324if test $RC != 0 ; then 325 echo "Search failed ($RC)!" 326 test $KILLSERVERS != no && kill -HUP $KILLPIDS 327 exit $RC 328fi 329 330FILTER="(member=cn=Another Added Group,ou=Groups,$BASEDN)" 331echo "Searching filter=\"$FILTER\"" 332echo " attrs=\"member\"" 333echo " base=\"$BASEDN\"..." 334echo "# searching filter=\"$FILTER\"" >> $SEARCHOUT 335echo "# attrs=\"member\"" >> $SEARCHOUT 336echo "# base=\"$BASEDN\"..." >> $SEARCHOUT 337$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" "$FILTER" member \ 338 >> $SEARCHOUT 2>&1 339RC=$? 340if test $RC != 0 ; then 341 echo "Search failed ($RC)!" 342 test $KILLSERVERS != no && kill -HUP $KILLPIDS 343 exit $RC 344fi 345 346echo "Filtering ldapsearch results..." 347$LDIFFILTER < $SEARCHOUT > $SEARCHFLT 348echo "Filtering original ldif used to create database..." 349$LDIFFILTER < $RELAYOUT > $LDIFFLT 350echo "Comparing filter output..." 351$CMP $SEARCHFLT $LDIFFLT > $CMPOUT 352 353if test $? != 0 ; then 354 echo "comparison failed - relay search/modification didn't succeed" 355 test $KILLSERVERS != no && kill -HUP $KILLPIDS 356 exit 1 357fi 358 359BASEDN="o=Example,c=US" 360echo "Changing password to database \"$BASEDN\"..." 361$LDAPPASSWD -h $LOCALHOST -p $PORT1 -D "cn=Manager,$BASEDN" -w $PASSWD \ 362 -s $PASSWD "cn=Added User,ou=Alumni Association,ou=People,$BASEDN" \ 363 >> $TESTOUT 2>&1 364RC=$? 365if test $RC != 0 ; then 366 echo "Passwd ExOp failed ($RC)!" 367 test $KILLSERVERS != no && kill -HUP $KILLPIDS 368 exit $RC 369fi 370 371BASEDN="o=Beispiel,c=DE" 372echo "Binding with newly changed password to database \"$BASEDN\"..." 373$LDAPWHOAMI -h $LOCALHOST -p $PORT1 \ 374 -D "cn=Added User,ou=Alumni Association,ou=People,$BASEDN" \ 375 -w $PASSWD >> $TESTOUT 2>&1 376RC=$? 377if test $RC != 0 ; then 378 echo "WhoAmI failed ($RC)!" 379 test $KILLSERVERS != no && kill -HUP $KILLPIDS 380 exit $RC 381fi 382 383BASEDN="o=Esempio,c=IT" 384echo "Comparing to database \"$BASEDN\"..." 385$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \ 386 "cn=Added User,ou=Alumni Association,ou=People,$BASEDN" \ 387 "seeAlso:cn=All Staff,ou=Groups,$BASEDN" >> $TESTOUT 2>&1 388RC=$? 389if test $RC != 6 && test $RC,$BACKEND != 5,null ; then 390 echo "Compare failed ($RC)!" 391 test $KILLSERVERS != no && kill -HUP $KILLPIDS 392 exit 1 393fi 394 395test $KILLSERVERS != no && kill -HUP $KILLPIDS 396