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