1 1.1 christos #! /bin/sh 2 1.1 christos # $OpenLDAP$ 3 1.1 christos ## This work is part of OpenLDAP Software <http://www.openldap.org/>. 4 1.1 christos ## 5 1.1 christos ## Copyright 1998-2024 The OpenLDAP Foundation. 6 1.1 christos ## All rights reserved. 7 1.1 christos ## 8 1.1 christos ## Redistribution and use in source and binary forms, with or without 9 1.1 christos ## modification, are permitted only as authorized by the OpenLDAP 10 1.1 christos ## Public License. 11 1.1 christos ## 12 1.1 christos ## A copy of this license is available in the file LICENSE in the 13 1.1 christos ## top-level directory of the distribution or, alternatively, at 14 1.1 christos ## <http://www.OpenLDAP.org/license.html>. 15 1.1 christos 16 1.1 christos echo "running defines.sh" 17 1.1 christos . $SRCDIR/scripts/defines.sh 18 1.1 christos 19 1.1 christos if test $NESTGROUP = nestgroupno; then 20 1.1 christos echo "Nestgroup overlay not available, test skipped" 21 1.1 christos exit 0 22 1.1 christos fi 23 1.1 christos if test $MEMBEROF = memberofno; then 24 1.1 christos echo "Memberof overlay not available, memberof testing disabled" 25 1.1 christos fi 26 1.1 christos 27 1.1 christos mkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir 28 1.1 christos 29 1.1 christos $SLAPPASSWD -g -n >$CONFIGPWF 30 1.1 christos echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf 31 1.1 christos 32 1.1 christos echo "Starting slapd on TCP/IP port $PORT1..." 33 1.1 christos . $CONFFILTER $BACKEND < $NAKEDCONF > $CONF1 34 1.1 christos $SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL > $LOG1 2>&1 & 35 1.1 christos PID=$! 36 1.1 christos if test $WAIT != 0 ; then 37 1.1 christos echo PID $PID 38 1.1 christos read foo 39 1.1 christos fi 40 1.1 christos KILLPIDS="$PID" 41 1.1 christos 42 1.1 christos sleep 1 43 1.1 christos for i in 0 1 2 3 4 5; do 44 1.1 christos $LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \ 45 1.1 christos 'objectclass=*' > /dev/null 2>&1 46 1.1 christos RC=$? 47 1.1 christos if test $RC = 0 ; then 48 1.1 christos break 49 1.1 christos fi 50 1.1 christos echo "Waiting 5 seconds for slapd to start..." 51 1.1 christos sleep 5 52 1.1 christos done 53 1.1 christos if test $RC != 0 ; then 54 1.1 christos echo "ldapsearch failed ($RC)!" 55 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 56 1.1 christos exit $RC 57 1.1 christos fi 58 1.1 christos 59 1.1 christos cat /dev/null > $TESTOUT 60 1.1 christos 61 1.1 christos if [ "$NESTGROUP" = nestgroupmod ]; then 62 1.1 christos echo "Inserting nestgroup overlay on provider..." 63 1.1 christos $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1 64 1.1 christos dn: cn=module,cn=config 65 1.1 christos objectClass: olcModuleList 66 1.1 christos cn: module 67 1.1 christos olcModulePath: ../servers/slapd/overlays 68 1.1 christos olcModuleLoad: nestgroup.la 69 1.1 christos EOF 70 1.1 christos RC=$? 71 1.1 christos if test $RC != 0 ; then 72 1.1 christos echo "ldapadd failed for moduleLoad ($RC)!" 73 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 74 1.1 christos exit $RC 75 1.1 christos fi 76 1.1 christos fi 77 1.1 christos 78 1.1 christos indexInclude="" mainInclude="" nullExclude="" 79 1.1 christos test $INDEXDB = indexdb || indexInclude="# " 80 1.1 christos test $MAINDB = maindb || mainInclude="# " 81 1.1 christos case $BACKEND in 82 1.1 christos null) nullExclude="# " ;; 83 1.1 christos esac 84 1.1 christos 85 1.1 christos echo "Running ldapadd to build slapd config database..." 86 1.1 christos $LDAPADD -H $URI1 -D 'cn=config' -w `cat $CONFIGPWF` \ 87 1.1 christos >> $TESTOUT 2>&1 <<EOF 88 1.1 christos dn: olcDatabase={1}$BACKEND,cn=config 89 1.1 christos objectClass: olcDatabaseConfig 90 1.1 christos ${nullExclude}objectClass: olc${BACKEND}Config 91 1.1 christos olcDatabase: {1}$BACKEND 92 1.1 christos olcSuffix: $BASEDN 93 1.1 christos olcRootDN: cn=Manager,$BASEDN 94 1.1 christos olcRootPW:: c2VjcmV0 95 1.1 christos olcMonitoring: TRUE 96 1.1 christos ${nullExclude}olcDbDirectory: $TESTDIR/db.1.a/ 97 1.1 christos ${indexInclude}olcDbIndex: objectClass eq 98 1.1 christos ${indexInclude}olcDbIndex: cn pres,eq,sub 99 1.1 christos ${indexInclude}olcDbIndex: uid pres,eq,sub 100 1.1 christos ${indexInclude}olcDbIndex: sn pres,eq,sub 101 1.1 christos ${indexInclude}olcDbIndex: member,memberOf eq 102 1.1 christos ${mainInclude}olcDbMode: 384" 103 1.1 christos 104 1.1 christos dn: olcOverlay={0}nestgroup,olcDatabase={1}$BACKEND,cn=config 105 1.1 christos objectClass: olcOverlayConfig 106 1.1 christos objectClass: olcNestGroupConfig 107 1.1 christos olcOverlay: {0}nestgroup 108 1.1 christos olcNestgroupMember: member 109 1.1 christos olcNestgroupMemberOf: memberOf 110 1.1 christos olcNestgroupBase: ou=Groups,$BASEDN 111 1.1 christos 112 1.1 christos EOF 113 1.1 christos RC=$? 114 1.1 christos if test $RC != 0 ; then 115 1.1 christos echo "ldapadd failed ($RC)!" 116 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 117 1.1 christos exit $RC 118 1.1 christos fi 119 1.1 christos 120 1.1 christos echo "Running ldapadd to build slapd database..." 121 1.1 christos $LDAPADD -H $URI1 \ 122 1.1 christos -D "cn=Manager,$BASEDN" -w secret \ 123 1.1 christos >> $TESTOUT 2>&1 << EOF 124 1.1 christos dn: $BASEDN 125 1.1 christos objectClass: organization 126 1.1 christos objectClass: dcObject 127 1.1 christos o: Example, Inc. 128 1.1 christos dc: example 129 1.1 christos 130 1.1 christos dn: ou=People,$BASEDN 131 1.1 christos objectClass: organizationalUnit 132 1.1 christos ou: People 133 1.1 christos 134 1.1 christos dn: ou=Groups,$BASEDN 135 1.1 christos objectClass: organizationalUnit 136 1.1 christos ou: Groups 137 1.1 christos 138 1.1 christos dn: cn=Roger Rabbit,ou=People,$BASEDN 139 1.1 christos objectClass: inetOrgPerson 140 1.1 christos cn: Roger Rabbit 141 1.1 christos sn: Rabbit 142 1.1 christos 143 1.1 christos dn: cn=Baby Herman,ou=People,$BASEDN 144 1.1 christos objectClass: inetOrgPerson 145 1.1 christos cn: Baby Herman 146 1.1 christos sn: Herman 147 1.1 christos 148 1.1 christos dn: cn=Jessica Rabbit,ou=People,$BASEDN 149 1.1 christos objectClass: inetOrgPerson 150 1.1 christos cn: Jessica Rabbit 151 1.1 christos sn: Rabbit 152 1.1 christos 153 1.1 christos dn: cn=Bugs Bunny,ou=People,$BASEDN 154 1.1 christos objectClass: inetOrgPerson 155 1.1 christos cn: Bugs Bunny 156 1.1 christos sn: Bunny 157 1.1 christos 158 1.1 christos dn: cn=Daffy Duck,ou=People,$BASEDN 159 1.1 christos objectClass: inetOrgPerson 160 1.1 christos cn: Daffy Duck 161 1.1 christos sn: Duck 162 1.1 christos 163 1.1 christos dn: cn=Elmer Fudd,ou=People,$BASEDN 164 1.1 christos objectClass: inetOrgPerson 165 1.1 christos cn: Elmer Fudd 166 1.1 christos sn: Fudd 167 1.1 christos 168 1.1 christos dn: cn=Yosemite Sam,ou=People,$BASEDN 169 1.1 christos objectClass: inetOrgPerson 170 1.1 christos cn: Yosemite Sam 171 1.1 christos sn: Sam 172 1.1 christos 173 1.1 christos dn: cn=Foghorn Leghorn,ou=People,$BASEDN 174 1.1 christos objectClass: inetOrgPerson 175 1.1 christos cn: Foghorn Leghorn 176 1.1 christos sn: Leghorn 177 1.1 christos 178 1.1 christos dn: cn=Wile E. Coyote,ou=People,$BASEDN 179 1.1 christos objectClass: inetOrgPerson 180 1.1 christos cn: Wile E. Coyote 181 1.1 christos sn: Coyote 182 1.1 christos 183 1.1 christos dn: cn=Road Runner,ou=People,$BASEDN 184 1.1 christos objectClass: inetOrgPerson 185 1.1 christos cn: Road Runner 186 1.1 christos sn: Runner 187 1.1 christos 188 1.1 christos dn: cn=Tweety Bird,ou=People,$BASEDN 189 1.1 christos objectClass: inetOrgPerson 190 1.1 christos cn: Tweety Bird 191 1.1 christos sn: Bird 192 1.1 christos 193 1.1 christos dn: cn=Porky Pig,ou=People,$BASEDN 194 1.1 christos objectClass: inetOrgPerson 195 1.1 christos cn: Porky Pig 196 1.1 christos sn: Pig 197 1.1 christos 198 1.1 christos dn: cn=Tom Riddle,ou=People,$BASEDN 199 1.1 christos objectClass: inetOrgPerson 200 1.1 christos cn: Tom Riddle 201 1.1 christos sn: Riddle 202 1.1 christos 203 1.1 christos dn: cn=Rabbits,ou=Groups,$BASEDN 204 1.1 christos objectClass: groupOfNames 205 1.1 christos cn: Rabbits 206 1.1 christos member: cn=Roger Rabbit,ou=People,$BASEDN 207 1.1 christos member: cn=Jessica Rabbit,ou=People,$BASEDN 208 1.1 christos 209 1.1 christos dn: cn=Leporidae,ou=Groups,$BASEDN 210 1.1 christos objectClass: groupOfNames 211 1.1 christos cn: Leporidae 212 1.1 christos member: cn=Bugs Bunny,ou=People,$BASEDN 213 1.1 christos member: cn=Rabbits,ou=Groups,$BASEDN 214 1.1 christos 215 1.1 christos dn: cn=A-M,ou=Groups,$BASEDN 216 1.1 christos objectClass: groupOfNames 217 1.1 christos cn: A-M 218 1.1 christos member: cn=Baby Herman,ou=People,$BASEDN 219 1.1 christos member: cn=Bugs Bunny,ou=People,$BASEDN 220 1.1 christos member: cn=Daffy Duck,ou=People,$BASEDN 221 1.1 christos member: cn=Elmer Fudd,ou=People,$BASEDN 222 1.1 christos member: cn=Foghorn Leghorn,ou=People,$BASEDN 223 1.1 christos member: cn=Jessica Rabbit,ou=People,$BASEDN 224 1.1 christos 225 1.1 christos dn: cn=N-Z,ou=Groups,$BASEDN 226 1.1 christos objectClass: groupOfNames 227 1.1 christos cn: N-Z 228 1.1 christos member: cn=Porky Pig,ou=People,$BASEDN 229 1.1 christos member: cn=Road Runner,ou=People,$BASEDN 230 1.1 christos member: cn=Roger Rabbit,ou=People,$BASEDN 231 1.1 christos member: cn=Tweety Bird,ou=People,$BASEDN 232 1.1 christos member: cn=Wile E. Coyote,ou=People,$BASEDN 233 1.1 christos member: cn=Yosemite Sam,ou=People,$BASEDN 234 1.1 christos 235 1.1 christos dn: cn=Humans,ou=Groups,$BASEDN 236 1.1 christos objectClass: groupOfNames 237 1.1 christos cn: Humans 238 1.1 christos member: cn=Elmer Fudd,ou=People,$BASEDN 239 1.1 christos member: cn=Yosemite Sam,ou=People,$BASEDN 240 1.1 christos 241 1.1 christos dn: cn=Looney Tunes,ou=Groups,$BASEDN 242 1.1 christos objectClass: groupOfNames 243 1.1 christos cn: Looney Tunes 244 1.1 christos member: cn=Porky Pig,ou=People,$BASEDN 245 1.1 christos member: cn=Daffy Duck,ou=People,$BASEDN 246 1.1 christos member: cn=Elmer Fudd,ou=People,$BASEDN 247 1.1 christos member: cn=Bugs Bunny,ou=People,$BASEDN 248 1.1 christos member: cn=Tweety Bird,ou=People,$BASEDN 249 1.1 christos 250 1.1 christos dn: cn=Desert Foes,ou=Groups,$BASEDN 251 1.1 christos objectClass: groupOfNames 252 1.1 christos cn: Desert Foes 253 1.1 christos member: cn=Road Runner,ou=People,$BASEDN 254 1.1 christos member: cn=Wile E. Coyote,ou=People,$BASEDN 255 1.1 christos 256 1.1 christos dn: cn=Mixer1,ou=Groups,$BASEDN 257 1.1 christos objectClass: groupOfNames 258 1.1 christos cn: Mixer1 259 1.1 christos member: cn=Leporidae,ou=Groups,$BASEDN 260 1.1 christos member: cn=Desert Foes,ou=Groups,$BASEDN 261 1.1 christos member: cn=Foghorn Leghorn,ou=People,$BASEDN 262 1.1 christos 263 1.1 christos dn: cn=Mixer2,ou=Groups,$BASEDN 264 1.1 christos objectClass: groupOfNames 265 1.1 christos cn: Mixer2 266 1.1 christos member: cn=Humans,ou=Groups,$BASEDN 267 1.1 christos member: cn=Baby Herman,ou=People,$BASEDN 268 1.1 christos 269 1.1 christos dn: cn=Mixer3,ou=Groups,$BASEDN 270 1.1 christos objectClass: groupOfNames 271 1.1 christos cn: Mixer3 272 1.1 christos member: cn=Desert Foes,ou=Groups,$BASEDN 273 1.1 christos member: cn=Porky Pig,ou=People,$BASEDN 274 1.1 christos 275 1.1 christos dn: cn=Mixer4,ou=Groups,$BASEDN 276 1.1 christos objectClass: groupOfNames 277 1.1 christos cn: Mixer4 278 1.1 christos member: cn=Mixer1,ou=Groups,$BASEDN 279 1.1 christos member: cn=Mixer2,ou=Groups,$BASEDN 280 1.1 christos member: cn=Foghorn Leghorn,ou=People,$BASEDN 281 1.1 christos 282 1.1 christos dn: cn=Mixer5,ou=Groups,$BASEDN 283 1.1 christos objectClass: groupOfNames 284 1.1 christos cn: Mixer5 285 1.1 christos member: cn=Mixer2,ou=Groups,$BASEDN 286 1.1 christos member: cn=Mixer3,ou=Groups,$BASEDN 287 1.1 christos member: cn=A-M,ou=Groups,$BASEDN 288 1.1 christos 289 1.1 christos dn: cn=Endless Loop,ou=Groups,$BASEDN 290 1.1 christos objectClass: groupOfNames 291 1.1 christos cn: Endless Loop 292 1.1 christos member: cn=Road Runner,ou=People,$BASEDN 293 1.1 christos member: cn=Loop\, Endless,ou=Groups,$BASEDN 294 1.1 christos 295 1.1 christos dn: cn=Loop\, Endless,ou=Groups,$BASEDN 296 1.1 christos objectClass: groupOfNames 297 1.1 christos cn: Loop, Endless 298 1.1 christos member: cn=Wile E. Coyote,ou=People,$BASEDN 299 1.1 christos member: cn=Endless Loop,ou=Groups,$BASEDN 300 1.1 christos 301 1.1 christos dn: cn=Strays,ou=Groups,$BASEDN 302 1.1 christos objectClass: groupOfNames 303 1.1 christos cn: Strays 304 1.1 christos member: cn=Tom Riddle,ou=People,$BASEDN 305 1.1 christos 306 1.1 christos EOF 307 1.1 christos RC=$? 308 1.1 christos if test $RC != 0 ; then 309 1.1 christos echo "ldapadd failed ($RC)!" 310 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 311 1.1 christos exit $RC 312 1.1 christos fi 313 1.1 christos 314 1.1 christos echo "Search the entire database..." 315 1.1 christos echo "# Search the entire database..." > $SEARCHOUT 316 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \ 317 1.1 christos '(objectClass=*)' '*' >> $SEARCHOUT 2>&1 318 1.1 christos RC=$? 319 1.1 christos if test $RC != 0 ; then 320 1.1 christos echo "ldapsearch failed ($RC)!" 321 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 322 1.1 christos exit $RC 323 1.1 christos fi 324 1.1 christos 325 1.1 christos echo "Search for member=cn=Bugs Bunny..." 326 1.1 christos echo "# Search for member=cn=Bugs Bunny..." >> $SEARCHOUT 327 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \ 328 1.1 christos "(member=cn=Bugs Bunny,ou=People,$BASEDN)" '*' memberof >> $SEARCHOUT 2>&1 329 1.1 christos RC=$? 330 1.1 christos if test $RC != 0 ; then 331 1.1 christos echo "ldapsearch failed ($RC)!" 332 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 333 1.1 christos exit $RC 334 1.1 christos fi 335 1.1 christos 336 1.1 christos echo "Search for non-nested member=cn=Tom Riddle..." 337 1.1 christos echo "# Search for non-nested member=cn=Tom Riddle..." >> $SEARCHOUT 338 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \ 339 1.1 christos "(member=cn=Tom Riddle,ou=People,$BASEDN)" '*' memberof >> $SEARCHOUT 2>&1 340 1.1 christos RC=$? 341 1.1 christos if test $RC != 0 ; then 342 1.1 christos echo "ldapsearch failed ($RC)!" 343 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 344 1.1 christos exit $RC 345 1.1 christos fi 346 1.1 christos 347 1.1 christos echo "Running ldapmodify to enable nested member filter..." 348 1.1 christos $LDAPMODIFY -H $URI1 -D 'cn=config' -w `cat $CONFIGPWF` \ 349 1.1 christos >> $TESTOUT 2>&1 <<EOF 350 1.1 christos dn: olcOverlay={0}nestgroup,olcDatabase={1}$BACKEND,cn=config 351 1.1 christos changetype: modify 352 1.1 christos replace: olcNestgroupFlags 353 1.1 christos olcNestgroupFlags: member-filter 354 1.1 christos 355 1.1 christos EOF 356 1.1 christos RC=$? 357 1.1 christos if test $RC != 0 ; then 358 1.1 christos echo "ldapmodify failed ($RC)!" 359 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 360 1.1 christos exit $RC 361 1.1 christos fi 362 1.1 christos 363 1.1 christos echo "Re-search for nested member=cn=Bugs Bunny..." 364 1.1 christos echo "# Re-search for nested member=cn=Bugs Bunny..." >> $SEARCHOUT 365 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \ 366 1.1 christos "(member=cn=Bugs Bunny,ou=People,$BASEDN)" '*' memberof >> $SEARCHOUT 2>&1 367 1.1 christos RC=$? 368 1.1 christos if test $RC != 0 ; then 369 1.1 christos echo "ldapsearch failed ($RC)!" 370 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 371 1.1 christos exit $RC 372 1.1 christos fi 373 1.1 christos 374 1.1 christos echo "Re-search for non-nested member=cn=Tom Riddle..." 375 1.1 christos echo "# Re-search for non-nested member=cn=Tom Riddle..." >> $SEARCHOUT 376 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \ 377 1.1 christos "(member=cn=Tom Riddle,ou=People,$BASEDN)" '*' memberof >> $SEARCHOUT 2>&1 378 1.1 christos RC=$? 379 1.1 christos if test $RC != 0 ; then 380 1.1 christos echo "ldapsearch failed ($RC)!" 381 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 382 1.1 christos exit $RC 383 1.1 christos fi 384 1.1 christos 385 1.1 christos echo "Running ldapmodify to enable nested member values..." 386 1.1 christos $LDAPMODIFY -H $URI1 -D 'cn=config' -w `cat $CONFIGPWF` \ 387 1.1 christos >> $TESTOUT 2>&1 <<EOF 388 1.1 christos dn: olcOverlay={0}nestgroup,olcDatabase={1}$BACKEND,cn=config 389 1.1 christos changetype: modify 390 1.1 christos replace: olcNestgroupFlags 391 1.1 christos olcNestgroupFlags: member-values 392 1.1 christos 393 1.1 christos EOF 394 1.1 christos RC=$? 395 1.1 christos if test $RC != 0 ; then 396 1.1 christos echo "ldapmodify failed ($RC)!" 397 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 398 1.1 christos exit $RC 399 1.1 christos fi 400 1.1 christos 401 1.1 christos echo "Search the expanded groups..." 402 1.1 christos echo "# Search the expanded groups..." >> $SEARCHOUT 403 1.1 christos $LDAPSEARCH -S "" -b "ou=Groups,$BASEDN" -H $URI1 \ 404 1.1 christos '(objectClass=*)' '*' memberof >> $SEARCHOUT 2>&1 405 1.1 christos RC=$? 406 1.1 christos if test $RC != 0 ; then 407 1.1 christos echo "ldapsearch failed ($RC)!" 408 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 409 1.1 christos exit $RC 410 1.1 christos fi 411 1.1 christos 412 1.1 christos LDIF=$NESTGROUPOUT1 413 1.1 christos 414 1.1 christos echo "Filtering ldapsearch results..." 415 1.1 christos $LDIFFILTER < $SEARCHOUT > $SEARCHFLT 416 1.1 christos echo "Filtering original ldif used to create database..." 417 1.1 christos $LDIFFILTER < $LDIF > $LDIFFLT 418 1.1 christos echo "Comparing filter output..." 419 1.1 christos $CMP $SEARCHFLT $LDIFFLT > $CMPOUT 420 1.1 christos 421 1.1 christos if test $? != 0 ; then 422 1.1 christos echo "Comparison failed" 423 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 424 1.1 christos exit 1 425 1.1 christos fi 426 1.1 christos 427 1.1 christos echo ">>>>> Test succeeded (first half)" 428 1.1 christos 429 1.1 christos if [ "$MEMBEROF" = memberofno ]; then 430 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 431 1.1 christos 432 1.1 christos test $KILLSERVERS != no && wait 433 1.1 christos 434 1.1 christos exit 0 435 1.1 christos fi 436 1.1 christos 437 1.1 christos echo "Adding memberof overlay to database configuration..." 438 1.1 christos 439 1.1 christos if [ "$MEMBEROF" = memberofmod ]; then 440 1.1 christos echo "Inserting memberof module on provider..." 441 1.1 christos $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1 442 1.1 christos dn: cn=module,cn=config 443 1.1 christos objectClass: olcModuleList 444 1.1 christos cn: module 445 1.1 christos olcModulePath: ../servers/slapd/overlays 446 1.1 christos olcModuleLoad: memberof.la 447 1.1 christos EOF 448 1.1 christos RC=$? 449 1.1 christos if test $RC != 0 ; then 450 1.1 christos echo "ldapadd failed for moduleLoad ($RC)!" 451 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 452 1.1 christos exit $RC 453 1.1 christos fi 454 1.1 christos fi 455 1.1 christos 456 1.1 christos $LDAPADD -H $URI1 -D 'cn=config' -w `cat $CONFIGPWF` \ 457 1.1 christos >> $TESTOUT 2>&1 <<EOF 458 1.1 christos dn: olcOverlay={1}memberof,olcDatabase={1}$BACKEND,cn=config 459 1.1 christos objectClass: olcOverlayConfig 460 1.1 christos objectClass: olcMemberofConfig 461 1.1 christos olcOverlay: {1}memberof 462 1.1 christos olcMemberOfGroupOC: groupOfNames 463 1.1 christos olcMemberOfMemberAD: member 464 1.1 christos olcMemberOfMemberOfAD: memberOf 465 1.1 christos 466 1.1 christos EOF 467 1.1 christos RC=$? 468 1.1 christos if test $RC != 0 ; then 469 1.1 christos echo "ldapadd failed ($RC)!" 470 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 471 1.1 christos exit $RC 472 1.1 christos fi 473 1.1 christos 474 1.1 christos echo "Recreating group entries to set memberof values..." 475 1.1 christos $LDAPMODIFY -H $URI1 \ 476 1.1 christos -D "cn=Manager,$BASEDN" -w secret \ 477 1.1 christos >> $TESTOUT 2>&1 <<EOF 478 1.1 christos dn: cn=Rabbits,ou=Groups,$BASEDN 479 1.1 christos changetype: modify 480 1.1 christos replace: member 481 1.1 christos member: cn=Roger Rabbit,ou=People,$BASEDN 482 1.1 christos member: cn=Jessica Rabbit,ou=People,$BASEDN 483 1.1 christos 484 1.1 christos dn: cn=Leporidae,ou=Groups,$BASEDN 485 1.1 christos changetype: modify 486 1.1 christos replace: member 487 1.1 christos member: cn=Bugs Bunny,ou=People,$BASEDN 488 1.1 christos member: cn=Rabbits,ou=Groups,$BASEDN 489 1.1 christos 490 1.1 christos dn: cn=A-M,ou=Groups,$BASEDN 491 1.1 christos changetype: modify 492 1.1 christos replace: member 493 1.1 christos member: cn=Baby Herman,ou=People,$BASEDN 494 1.1 christos member: cn=Bugs Bunny,ou=People,$BASEDN 495 1.1 christos member: cn=Daffy Duck,ou=People,$BASEDN 496 1.1 christos member: cn=Elmer Fudd,ou=People,$BASEDN 497 1.1 christos member: cn=Foghorn Leghorn,ou=People,$BASEDN 498 1.1 christos member: cn=Jessica Rabbit,ou=People,$BASEDN 499 1.1 christos 500 1.1 christos dn: cn=N-Z,ou=Groups,$BASEDN 501 1.1 christos changetype: modify 502 1.1 christos replace: member 503 1.1 christos member: cn=Porky Pig,ou=People,$BASEDN 504 1.1 christos member: cn=Road Runner,ou=People,$BASEDN 505 1.1 christos member: cn=Roger Rabbit,ou=People,$BASEDN 506 1.1 christos member: cn=Tweety Bird,ou=People,$BASEDN 507 1.1 christos member: cn=Wile E. Coyote,ou=People,$BASEDN 508 1.1 christos member: cn=Yosemite Sam,ou=People,$BASEDN 509 1.1 christos 510 1.1 christos dn: cn=Humans,ou=Groups,$BASEDN 511 1.1 christos changetype: modify 512 1.1 christos replace: member 513 1.1 christos member: cn=Elmer Fudd,ou=People,$BASEDN 514 1.1 christos member: cn=Yosemite Sam,ou=People,$BASEDN 515 1.1 christos 516 1.1 christos dn: cn=Looney Tunes,ou=Groups,$BASEDN 517 1.1 christos changetype: modify 518 1.1 christos replace: member 519 1.1 christos member: cn=Porky Pig,ou=People,$BASEDN 520 1.1 christos member: cn=Daffy Duck,ou=People,$BASEDN 521 1.1 christos member: cn=Elmer Fudd,ou=People,$BASEDN 522 1.1 christos member: cn=Bugs Bunny,ou=People,$BASEDN 523 1.1 christos member: cn=Tweety Bird,ou=People,$BASEDN 524 1.1 christos 525 1.1 christos dn: cn=Desert Foes,ou=Groups,$BASEDN 526 1.1 christos changetype: modify 527 1.1 christos replace: member 528 1.1 christos member: cn=Road Runner,ou=People,$BASEDN 529 1.1 christos member: cn=Wile E. Coyote,ou=People,$BASEDN 530 1.1 christos 531 1.1 christos dn: cn=Mixer1,ou=Groups,$BASEDN 532 1.1 christos changetype: modify 533 1.1 christos replace: member 534 1.1 christos member: cn=Leporidae,ou=Groups,$BASEDN 535 1.1 christos member: cn=Desert Foes,ou=Groups,$BASEDN 536 1.1 christos member: cn=Foghorn Leghorn,ou=People,$BASEDN 537 1.1 christos 538 1.1 christos dn: cn=Mixer2,ou=Groups,$BASEDN 539 1.1 christos changetype: modify 540 1.1 christos replace: member 541 1.1 christos member: cn=Humans,ou=Groups,$BASEDN 542 1.1 christos member: cn=Baby Herman,ou=People,$BASEDN 543 1.1 christos 544 1.1 christos dn: cn=Mixer3,ou=Groups,$BASEDN 545 1.1 christos changetype: modify 546 1.1 christos replace: member 547 1.1 christos member: cn=Desert Foes,ou=Groups,$BASEDN 548 1.1 christos member: cn=Porky Pig,ou=People,$BASEDN 549 1.1 christos 550 1.1 christos dn: cn=Mixer4,ou=Groups,$BASEDN 551 1.1 christos changetype: modify 552 1.1 christos replace: member 553 1.1 christos member: cn=Mixer1,ou=Groups,$BASEDN 554 1.1 christos member: cn=Mixer2,ou=Groups,$BASEDN 555 1.1 christos member: cn=Foghorn Leghorn,ou=People,$BASEDN 556 1.1 christos 557 1.1 christos dn: cn=Mixer5,ou=Groups,$BASEDN 558 1.1 christos changetype: modify 559 1.1 christos replace: member 560 1.1 christos member: cn=Mixer2,ou=Groups,$BASEDN 561 1.1 christos member: cn=Mixer3,ou=Groups,$BASEDN 562 1.1 christos member: cn=A-M,ou=Groups,$BASEDN 563 1.1 christos 564 1.1 christos dn: cn=Endless Loop,ou=Groups,$BASEDN 565 1.1 christos changetype: modify 566 1.1 christos replace: member 567 1.1 christos member: cn=Road Runner,ou=People,$BASEDN 568 1.1 christos member: cn=Loop\, Endless,ou=Groups,$BASEDN 569 1.1 christos 570 1.1 christos dn: cn=Loop\, Endless,ou=Groups,$BASEDN 571 1.1 christos changetype: modify 572 1.1 christos replace: member 573 1.1 christos member: cn=Wile E. Coyote,ou=People,$BASEDN 574 1.1 christos member: cn=Endless Loop,ou=Groups,$BASEDN 575 1.1 christos 576 1.1 christos dn: cn=Strays,ou=Groups,$BASEDN 577 1.1 christos changetype: modify 578 1.1 christos replace: member 579 1.1 christos member: cn=Tom Riddle,ou=People,$BASEDN 580 1.1 christos 581 1.1 christos EOF 582 1.1 christos RC=$? 583 1.1 christos if test $RC != 0 ; then 584 1.1 christos echo "ldapmodify failed ($RC)!" 585 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 586 1.1 christos exit $RC 587 1.1 christos fi 588 1.1 christos 589 1.1 christos echo "Moving previous results to $SEARCHOUT.0" 590 1.1 christos mv $SEARCHOUT $SEARCHOUT.0 591 1.1 christos 592 1.1 christos echo "Re-search the entire database..." 593 1.1 christos echo "# Re-search the entire database after adding memberof configuration..." >> $SEARCHOUT 594 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \ 595 1.1 christos '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1 596 1.1 christos RC=$? 597 1.1 christos if test $RC != 0 ; then 598 1.1 christos echo "ldapsearch failed ($RC)!" 599 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 600 1.1 christos exit $RC 601 1.1 christos fi 602 1.1 christos 603 1.1 christos echo "Search for memberOf=cn=Mixer3..." 604 1.1 christos echo "# Search for memberOf=cn=Mixer3..." >> $SEARCHOUT 605 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \ 606 1.1 christos "(memberOf=cn=Mixer3,ou=Groups,$BASEDN)" '*' memberof >> $SEARCHOUT 2>&1 607 1.1 christos RC=$? 608 1.1 christos if test $RC != 0 ; then 609 1.1 christos echo "ldapsearch failed ($RC)!" 610 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 611 1.1 christos exit $RC 612 1.1 christos fi 613 1.1 christos 614 1.1 christos echo "Running ldapmodify to enable nested memberOf filter..." 615 1.1 christos $LDAPMODIFY -H $URI1 -D 'cn=config' -w `cat $CONFIGPWF` \ 616 1.1 christos >> $TESTOUT 2>&1 <<EOF 617 1.1 christos dn: olcOverlay={0}nestgroup,olcDatabase={1}$BACKEND,cn=config 618 1.1 christos changetype: modify 619 1.1 christos replace: olcNestgroupFlags 620 1.1 christos olcNestgroupFlags: memberof-filter 621 1.1 christos 622 1.1 christos EOF 623 1.1 christos RC=$? 624 1.1 christos if test $RC != 0 ; then 625 1.1 christos echo "ldapmodify failed ($RC)!" 626 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 627 1.1 christos exit $RC 628 1.1 christos fi 629 1.1 christos 630 1.1 christos echo "Re-search for memberOf=cn=Mixer3 with filter nesting..." 631 1.1 christos echo "# Re-search for memberOf=cn=Mixer3 with filter nesting..." >> $SEARCHOUT 632 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \ 633 1.1 christos "(memberOf=cn=Mixer3,ou=Groups,$BASEDN)" '*' memberof >> $SEARCHOUT 2>&1 634 1.1 christos RC=$? 635 1.1 christos if test $RC != 0 ; then 636 1.1 christos echo "ldapsearch failed ($RC)!" 637 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 638 1.1 christos exit $RC 639 1.1 christos fi 640 1.1 christos 641 1.1 christos echo "Running ldapmodify to also enable nested memberOf values..." 642 1.1 christos $LDAPMODIFY -H $URI1 -D 'cn=config' -w `cat $CONFIGPWF` \ 643 1.1 christos >> $TESTOUT 2>&1 <<EOF 644 1.1 christos dn: olcOverlay={0}nestgroup,olcDatabase={1}$BACKEND,cn=config 645 1.1 christos changetype: modify 646 1.1 christos add: olcNestgroupFlags 647 1.1 christos olcNestgroupFlags: memberof-values 648 1.1 christos 649 1.1 christos EOF 650 1.1 christos RC=$? 651 1.1 christos if test $RC != 0 ; then 652 1.1 christos echo "ldapmodify failed ($RC)!" 653 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 654 1.1 christos exit $RC 655 1.1 christos fi 656 1.1 christos 657 1.1 christos echo "Re-search for memberOf=cn=Mixer3 with filter and value nesting..." 658 1.1 christos echo "# Re-search for memberOf=cn=Mixer3 with filter and value nesting..." >> $SEARCHOUT 659 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \ 660 1.1 christos "(memberOf=cn=Mixer3,ou=Groups,$BASEDN)" '*' memberof >> $SEARCHOUT 2>&1 661 1.1 christos RC=$? 662 1.1 christos if test $RC != 0 ; then 663 1.1 christos echo "ldapsearch failed ($RC)!" 664 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 665 1.1 christos exit $RC 666 1.1 christos fi 667 1.1 christos 668 1.1 christos echo "Re-search the entire database with memberof value nesting..." 669 1.1 christos echo "# Re-search the entire database with memberof value nesting..." >> $SEARCHOUT 670 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \ 671 1.1 christos '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1 672 1.1 christos RC=$? 673 1.1 christos if test $RC != 0 ; then 674 1.1 christos echo "ldapsearch failed ($RC)!" 675 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 676 1.1 christos exit $RC 677 1.1 christos fi 678 1.1 christos 679 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS 680 1.1 christos 681 1.1 christos LDIF=$NESTGROUPOUT2 682 1.1 christos 683 1.1 christos echo "Filtering ldapsearch results..." 684 1.1 christos $LDIFFILTER < $SEARCHOUT > $SEARCHFLT 685 1.1 christos echo "Filtering original ldif used to create database..." 686 1.1 christos $LDIFFILTER < $LDIF > $LDIFFLT 687 1.1 christos echo "Comparing filter output..." 688 1.1 christos $CMP $SEARCHFLT $LDIFFLT > $CMPOUT 689 1.1 christos 690 1.1 christos if test $? != 0 ; then 691 1.1 christos echo "Comparison failed" 692 1.1 christos exit 1 693 1.1 christos fi 694 1.1 christos 695 1.1 christos echo ">>>>> Test succeeded" 696 1.1 christos 697 1.1 christos test $KILLSERVERS != no && wait 698 1.1 christos 699 1.1 christos exit 0 700