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