xref: /netbsd-src/external/bsd/openldap/dist/tests/scripts/test052-memberof (revision e670fd5c413e99c2f6a37901bb21c537fcd322d2)
12de962bdSlukem#! /bin/sh
2d11b170bStron# $OpenLDAP$
32de962bdSlukem## This work is part of OpenLDAP Software <http://www.openldap.org/>.
42de962bdSlukem##
5*e670fd5cSchristos## Copyright 1998-2021 The OpenLDAP Foundation.
62de962bdSlukem## All rights reserved.
72de962bdSlukem##
82de962bdSlukem## Redistribution and use in source and binary forms, with or without
92de962bdSlukem## modification, are permitted only as authorized by the OpenLDAP
102de962bdSlukem## Public License.
112de962bdSlukem##
122de962bdSlukem## A copy of this license is available in the file LICENSE in the
132de962bdSlukem## top-level directory of the distribution or, alternatively, at
142de962bdSlukem## <http://www.OpenLDAP.org/license.html>.
152de962bdSlukem
162de962bdSlukemecho "running defines.sh"
172de962bdSlukem. $SRCDIR/scripts/defines.sh
182de962bdSlukem
192de962bdSlukemif test $MEMBEROF = memberofno; then
202de962bdSlukem	echo "Memberof overlay not available, test skipped"
212de962bdSlukem	exit 0
222de962bdSlukemfi
232de962bdSlukem
242de962bdSlukemmkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir
252de962bdSlukem
262de962bdSlukem$SLAPPASSWD -g -n >$CONFIGPWF
272de962bdSlukemecho "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
282de962bdSlukem
292de962bdSlukemecho "Starting slapd on TCP/IP port $PORT1..."
30*e670fd5cSchristos. $CONFFILTER $BACKEND < $NAKEDCONF > $CONF1
31*e670fd5cSchristos$SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL > $LOG1 2>&1 &
322de962bdSlukemPID=$!
332de962bdSlukemif test $WAIT != 0 ; then
342de962bdSlukem    echo PID $PID
352de962bdSlukem    read foo
362de962bdSlukemfi
372de962bdSlukemKILLPIDS="$PID"
382de962bdSlukem
392de962bdSlukemsleep 1
402de962bdSlukemfor i in 0 1 2 3 4 5; do
41*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
422de962bdSlukem		'objectclass=*' > /dev/null 2>&1
432de962bdSlukem	RC=$?
442de962bdSlukem	if test $RC = 0 ; then
452de962bdSlukem		break
462de962bdSlukem	fi
472de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
482de962bdSlukem	sleep 5
492de962bdSlukemdone
502de962bdSlukemif test $RC != 0 ; then
512de962bdSlukem	echo "ldapsearch failed ($RC)!"
522de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
532de962bdSlukem	exit $RC
542de962bdSlukemfi
552de962bdSlukem
562de962bdSlukemcat /dev/null > $TESTOUT
572de962bdSlukem
582de962bdSlukemif [ "$MEMBEROF" = memberofmod ]; then
59d11b170bStron	echo "Inserting memberof overlay on provider..."
602de962bdSlukem	$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
612de962bdSlukemdn: cn=module,cn=config
622de962bdSlukemobjectClass: olcModuleList
632de962bdSlukemcn: module
642de962bdSlukemolcModulePath: ../servers/slapd/overlays
652de962bdSlukemolcModuleLoad: memberof.la
662de962bdSlukemEOF
672de962bdSlukem	RC=$?
682de962bdSlukem	if test $RC != 0 ; then
692de962bdSlukem		echo "ldapadd failed for moduleLoad ($RC)!"
702de962bdSlukem		test $KILLSERVERS != no && kill -HUP $KILLPIDS
712de962bdSlukem		exit $RC
722de962bdSlukem	fi
732de962bdSlukemfi
742de962bdSlukem
75*e670fd5cSchristosindexInclude="" mainInclude="" nullExclude=""
76d11b170bStrontest $INDEXDB = indexdb	|| indexInclude="# "
77d11b170bStrontest $MAINDB  = maindb	|| mainInclude="# "
78ef2f90d3Sadamcase $BACKEND in
79ef2f90d3Sadamnull) nullExclude="# " ;;
80ef2f90d3Sadamesac
81ef2f90d3Sadam
822de962bdSlukemecho "Running ldapadd to build slapd config database..."
83*e670fd5cSchristos$LDAPADD -H $URI1 -D 'cn=config' -w `cat $CONFIGPWF` \
842de962bdSlukem	>> $TESTOUT 2>&1 <<EOF
854e6df137Slukemdn: cn=symas group example,cn=schema,cn=config
864e6df137SlukemobjectClass: olcSchemaConfig
874e6df137Slukemcn: symas group example
884e6df137SlukemolcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.1 
894e6df137Slukem NAME 'memberA' SUP distinguishedName )
904e6df137SlukemolcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.2
914e6df137Slukem NAME 'memberOfA' SUP distinguishedName )
924e6df137SlukemolcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.3 
934e6df137Slukem NAME 'memberB' SUP distinguishedName )
944e6df137SlukemolcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.4 
954e6df137Slukem NAME 'memberOfB' SUP distinguishedName )
964e27b3e8SchristosolcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.5
974e27b3e8Schristos NAME 'memberOfC' SUP distinguishedName )
984e6df137SlukemolcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.1 
994e6df137Slukem NAME 'groupA' SUP top STRUCTURAL MUST cn MAY memberA )
1004e6df137SlukemolcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.2 
1014e27b3e8Schristos NAME 'groupMemberA' SUP top AUXILIARY MAY ( memberOfA $ memberOfC ) )
1024e6df137SlukemolcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.3 
1034e6df137Slukem NAME 'groupB' SUP top STRUCTURAL MUST cn MAY memberB )
1044e6df137SlukemolcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.4 
1054e6df137Slukem NAME 'groupMemberB' SUP top AUXILIARY MAY memberOfB )
1064e6df137Slukem
1072de962bdSlukemdn: olcDatabase={1}$BACKEND,cn=config
1082de962bdSlukemobjectClass: olcDatabaseConfig
109ef2f90d3Sadam${nullExclude}objectClass: olc${BACKEND}Config
1102de962bdSlukemolcDatabase: {1}$BACKEND
1112de962bdSlukemolcSuffix: $BASEDN
1122de962bdSlukemolcRootDN: cn=Manager,$BASEDN
1132de962bdSlukemolcRootPW:: c2VjcmV0
1142de962bdSlukemolcMonitoring: TRUE
115ef2f90d3Sadam${nullExclude}olcDbDirectory: $TESTDIR/db.1.a/
116d11b170bStron${indexInclude}olcDbIndex: objectClass eq
117d11b170bStron${indexInclude}olcDbIndex: cn pres,eq,sub
118d11b170bStron${indexInclude}olcDbIndex: uid pres,eq,sub
119d11b170bStron${indexInclude}olcDbIndex: sn pres,eq,sub
120d11b170bStron${mainInclude}olcDbMode: 384"
1212de962bdSlukem
1222de962bdSlukemdn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config
1232de962bdSlukemobjectClass: olcOverlayConfig
124*e670fd5cSchristosobjectClass: olcMemberOfConfig
1252de962bdSlukemolcOverlay: {0}memberof
1262de962bdSlukemolcMemberOfRefInt: TRUE
1272de962bdSlukemolcMemberOfGroupOC: groupOfNames
1282de962bdSlukemolcMemberOfMemberAD: member
1292de962bdSlukemolcMemberOfMemberOfAD: memberOf
1304e6df137Slukem
1314e6df137Slukemdn: olcOverlay={1}memberof,olcDatabase={1}$BACKEND,cn=config
1324e6df137SlukemobjectClass: olcOverlayConfig
133*e670fd5cSchristosobjectClass: olcMemberOfConfig
1344e6df137SlukemolcOverlay: {1}memberof
1354e6df137SlukemolcMemberOfRefInt: TRUE
1364e6df137SlukemolcMemberOfGroupOC: groupA
1374e6df137SlukemolcMemberOfMemberAD: memberA
1384e6df137SlukemolcMemberOfMemberOfAD: memberOfA
1394e6df137Slukem
1404e6df137Slukemdn: olcOverlay={2}memberof,olcDatabase={1}$BACKEND,cn=config
1414e6df137SlukemobjectClass: olcOverlayConfig
142*e670fd5cSchristosobjectClass: olcMemberOfConfig
1434e6df137SlukemolcOverlay: {2}memberof
1444e6df137SlukemolcMemberOfRefInt: TRUE
1454e6df137SlukemolcMemberOfGroupOC: groupB
1464e6df137SlukemolcMemberOfMemberAD: memberB
1474e6df137SlukemolcMemberOfMemberOfAD: memberOfB
1484e6df137Slukem
1492de962bdSlukemEOF
1502de962bdSlukemRC=$?
1512de962bdSlukemif test $RC != 0 ; then
1522de962bdSlukem	echo "ldapadd failed ($RC)!"
1532de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1542de962bdSlukem	exit $RC
1552de962bdSlukemfi
1562de962bdSlukem
1572de962bdSlukemecho "Running ldapadd to build slapd database..."
158*e670fd5cSchristos$LDAPADD -H $URI1 \
1592de962bdSlukem	-D "cn=Manager,$BASEDN" -w secret \
1602de962bdSlukem	>> $TESTOUT 2>&1 << EOF
1612de962bdSlukemdn: $BASEDN
1622de962bdSlukemobjectClass: organization
1632de962bdSlukemobjectClass: dcObject
1642de962bdSlukemo: Example, Inc.
1652de962bdSlukemdc: example
1662de962bdSlukem
1672de962bdSlukemdn: ou=People,$BASEDN
1682de962bdSlukemobjectClass: organizationalUnit
1692de962bdSlukemou: People
1702de962bdSlukem
1712de962bdSlukemdn: ou=Groups,$BASEDN
1722de962bdSlukemobjectClass: organizationalUnit
1732de962bdSlukemou: Groups
1742de962bdSlukem
1752de962bdSlukemdn: cn=Roger Rabbit,ou=People,$BASEDN
1762de962bdSlukemobjectClass: inetOrgPerson
1772de962bdSlukemcn: Roger Rabbit
1782de962bdSlukemsn: Rabbit
1792de962bdSlukem
1802de962bdSlukemdn: cn=Baby Herman,ou=People,$BASEDN
1812de962bdSlukemobjectClass: inetOrgPerson
1822de962bdSlukemcn: Baby Herman
1832de962bdSlukemsn: Herman
1842de962bdSlukem
1852de962bdSlukemdn: cn=Cartoonia,ou=Groups,$BASEDN
1862de962bdSlukemobjectClass: groupOfNames
1872de962bdSlukemcn: Cartoonia
1882de962bdSlukemmember: cn=Roger Rabbit,ou=People,$BASEDN
1892de962bdSlukemmember: cn=Baby Herman,ou=People,$BASEDN
1902de962bdSlukemEOF
1912de962bdSlukemRC=$?
1922de962bdSlukemif test $RC != 0 ; then
1932de962bdSlukem	echo "ldapadd failed ($RC)!"
1942de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1952de962bdSlukem	exit $RC
1962de962bdSlukemfi
1972de962bdSlukem
1982de962bdSlukemecho "Search the entire database..."
1992de962bdSlukemecho "# Search the entire database..." >> $SEARCHOUT
200*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
2012de962bdSlukem	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
2022de962bdSlukemRC=$?
2032de962bdSlukemif test $RC != 0 ; then
2042de962bdSlukem	echo "ldapsearch failed ($RC)!"
2052de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2062de962bdSlukem	exit $RC
2072de962bdSlukemfi
2082de962bdSlukem
2092de962bdSlukemecho "Running ldapmodify to add a member..."
210*e670fd5cSchristos$LDAPMODIFY -H $URI1 \
2112de962bdSlukem	-D "cn=Manager,$BASEDN" -w secret \
2122de962bdSlukem	>> $TESTOUT 2>&1 << EOF
2132de962bdSlukemdn: cn=Jessica Rabbit,ou=People,$BASEDN
2142de962bdSlukemchangetype: add
2152de962bdSlukemobjectClass: inetOrgPerson
2162de962bdSlukemcn: Jessica Rabbit
2172de962bdSlukemsn: Rabbit
2182de962bdSlukem
2192de962bdSlukemdn: cn=Cartoonia,ou=Groups,$BASEDN
2202de962bdSlukemchangetype: modify
2212de962bdSlukemadd: member
2222de962bdSlukemmember: cn=Jessica Rabbit,ou=People,$BASEDN
2232de962bdSlukemEOF
2242de962bdSlukem
2252de962bdSlukemecho "Re-search the entire database..."
226d11b170bStronecho "# Re-search the entire database after adding Jessica Rabbit and Cartoonia..." >> $SEARCHOUT
227*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
228d11b170bStron	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
229d11b170bStronRC=$?
230d11b170bStronif test $RC != 0 ; then
231d11b170bStron	echo "ldapsearch failed ($RC)!"
232d11b170bStron	test $KILLSERVERS != no && kill -HUP $KILLPIDS
233d11b170bStron	exit $RC
234d11b170bStronfi
235d11b170bStron
236d11b170bStronecho "Running ldapmodify to rename a member..."
237*e670fd5cSchristos$LDAPMODIFY -H $URI1 \
238d11b170bStron	-D "cn=Manager,$BASEDN" -w secret \
239d11b170bStron	>> $TESTOUT 2>&1 << EOF
240d11b170bStrondn: cn=Baby Herman,ou=People,$BASEDN
241d11b170bStronchangetype: modrdn
242d11b170bStronnewrdn: cn=Baby Herman Jr
243d11b170bStrondeleteoldrdn: 1
244d11b170bStronEOF
245d11b170bStron
246d11b170bStronecho "Re-search the entire database..."
247d11b170bStronecho "# Re-search the entire database after renaming Baby Herman..." >> $SEARCHOUT
248*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
249d11b170bStron	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
250d11b170bStronRC=$?
251d11b170bStronif test $RC != 0 ; then
252d11b170bStron	echo "ldapsearch failed ($RC)!"
253d11b170bStron	test $KILLSERVERS != no && kill -HUP $KILLPIDS
254d11b170bStron	exit $RC
255d11b170bStronfi
256d11b170bStron
257d11b170bStronecho "Running ldapmodify to rename a group..."
258*e670fd5cSchristos$LDAPMODIFY -H $URI1 \
259d11b170bStron	-D "cn=Manager,$BASEDN" -w secret \
260d11b170bStron	>> $TESTOUT 2>&1 << EOF
261d11b170bStrondn: cn=Cartoonia,ou=Groups,$BASEDN
262d11b170bStronchangetype: modrdn
2634e27b3e8Schristosnewrdn: cn=Toon town
2644e27b3e8Schristosdeleteoldrdn: 1
2654e27b3e8Schristos
2664e27b3e8Schristosdn: cn=Toon town,ou=Groups,$BASEDN
2674e27b3e8Schristoschangetype: modrdn
268d11b170bStronnewrdn: cn=Toon Town
269d11b170bStrondeleteoldrdn: 1
270d11b170bStronEOF
271d11b170bStron
272d11b170bStronecho "Re-search the entire database..."
273d11b170bStronecho "# Re-search the entire database after renaming Cartoonia..." >> $SEARCHOUT
274*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
2752de962bdSlukem	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
2762de962bdSlukemRC=$?
2772de962bdSlukemif test $RC != 0 ; then
2782de962bdSlukem	echo "ldapsearch failed ($RC)!"
2792de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2802de962bdSlukem	exit $RC
2812de962bdSlukemfi
2822de962bdSlukem
2832de962bdSlukemecho "Running ldapmodify to add self..."
284*e670fd5cSchristos$LDAPMODIFY -H $URI1 \
2852de962bdSlukem	-D "cn=Manager,$BASEDN" -w secret \
2862de962bdSlukem	>> $TESTOUT 2>&1 << EOF
287d11b170bStrondn: cn=Toon Town,ou=Groups,$BASEDN
2882de962bdSlukemchangetype: modify
2892de962bdSlukemadd: member
290d11b170bStronmember: cn=Toon Town,ou=Groups,$BASEDN
2912de962bdSlukemEOF
2922de962bdSlukem
2932de962bdSlukemecho "Re-search the entire database..."
294d11b170bStronecho "# Re-search the entire database after adding Toon Town to self..." >> $SEARCHOUT
295*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
2962de962bdSlukem	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
2972de962bdSlukemRC=$?
2982de962bdSlukemif test $RC != 0 ; then
2992de962bdSlukem	echo "ldapsearch failed ($RC)!"
3002de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3012de962bdSlukem	exit $RC
3022de962bdSlukemfi
3032de962bdSlukem
3042de962bdSlukemecho "Running ldapdelete to remove a member..."
305*e670fd5cSchristos$LDAPMODIFY -H $URI1 \
3062de962bdSlukem	-D "cn=Manager,$BASEDN" -w secret \
3072de962bdSlukem	>> $TESTOUT 2>&1 << EOF
308d11b170bStrondn: cn=Baby Herman Jr,ou=People,$BASEDN
3092de962bdSlukemchangetype: delete
3102de962bdSlukemEOF
3112de962bdSlukem
3122de962bdSlukemecho "Re-search the entire database..."
313d11b170bStronecho "# Re-search the entire database after deleting Baby Herman..." >> $SEARCHOUT
314*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
315d11b170bStron	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
316d11b170bStronRC=$?
317d11b170bStronif test $RC != 0 ; then
318d11b170bStron	echo "ldapsearch failed ($RC)!"
319d11b170bStron	test $KILLSERVERS != no && kill -HUP $KILLPIDS
320d11b170bStron	exit $RC
321d11b170bStronfi
322d11b170bStron
323d11b170bStronecho "Running ldapdelete to remove a group..."
324*e670fd5cSchristos$LDAPMODIFY -H $URI1 \
325d11b170bStron	-D "cn=Manager,$BASEDN" -w secret \
326d11b170bStron	>> $TESTOUT 2>&1 << EOF
327d11b170bStrondn: cn=Toon Town,ou=Groups,$BASEDN
328d11b170bStronchangetype: delete
329d11b170bStronEOF
330d11b170bStron
331d11b170bStronecho "Re-search the entire database..."
332d11b170bStronecho "# Re-search the entire database after deleting Toon Town..." >> $SEARCHOUT
333*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
3342de962bdSlukem	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
3352de962bdSlukemRC=$?
3362de962bdSlukemif test $RC != 0 ; then
3372de962bdSlukem	echo "ldapsearch failed ($RC)!"
3382de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3392de962bdSlukem	exit $RC
3402de962bdSlukemfi
3412de962bdSlukem
3424e6df137Slukemecho "Adding groups with MAY member type schemas..."
343*e670fd5cSchristos$LDAPMODIFY -H $URI1 \
3444e6df137Slukem	-D "cn=Manager,$BASEDN" -w secret \
3454e6df137Slukem	>> $TESTOUT 2>&1 <<EOF
3464e6df137Slukemdn: cn=Roger Rabbit,ou=People,$BASEDN
3474e6df137Slukemchangetype: delete
3484e6df137Slukem
3494e6df137Slukemdn: cn=Jessica Rabbit,ou=People,$BASEDN
3504e6df137Slukemchangetype: delete
3514e6df137Slukem
3524e6df137Slukemdn: cn=person1,ou=People,$BASEDN
3534e6df137Slukemchangetype: add
3544e6df137SlukemobjectClass: person
3554e6df137SlukemobjectClass: groupMemberA
3564e6df137SlukemobjectClass: groupMemberB
3574e6df137Slukemcn: person1
3584e6df137Slukemsn: person1
3594e6df137Slukem
3604e6df137Slukemdn: cn=person2,ou=People,$BASEDN
3614e6df137Slukemchangetype: add
3624e6df137SlukemobjectClass: person
3634e6df137SlukemobjectClass: groupMemberA
3644e6df137SlukemobjectClass: groupMemberB
3654e6df137Slukemcn: person2
3664e6df137Slukemsn: person2
3674e6df137Slukem
3684e6df137Slukemdn: cn=group1,ou=Groups,$BASEDN
3694e6df137Slukemchangetype: add
3704e6df137Slukemobjectclass: groupA
3714e6df137Slukemcn: group1
3724e6df137SlukemmemberA: cn=person1,ou=People,$BASEDN
3734e6df137SlukemmemberA: cn=person2,ou=People,$BASEDN
3744e6df137Slukem
3754e6df137Slukemdn: cn=group2,ou=Groups,$BASEDN
3764e6df137Slukemchangetype: add
3774e6df137Slukemobjectclass: groupB
3784e6df137Slukemcn: group2
3794e6df137SlukemmemberB: cn=person1,ou=People,$BASEDN
3804e6df137SlukemmemberB: cn=person2,ou=People,$BASEDN
3814e6df137Slukem
3824e6df137Slukemdn: cn=group1,ou=Groups,$BASEDN
3834e6df137Slukemchangetype: modify
3844e6df137Slukemdelete: memberA
3854e6df137Slukem
3864e6df137SlukemEOF
3874e6df137Slukem
3884e6df137Slukemecho "Re-search the entire database..."
389d11b170bStronecho "# Re-search the entire database after adding groups with MAY member type schemas..." >> $SEARCHOUT
390*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
3914e6df137Slukem	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
3924e6df137SlukemRC=$?
3934e6df137Slukemif test $RC != 0 ; then
3944e6df137Slukem	echo "ldapsearch failed ($RC)!"
3954e6df137Slukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3964e6df137Slukem	exit $RC
3974e6df137Slukemfi
3984e6df137Slukem
3994e27b3e8Schristosecho "Running ldapmodify to reconfigure the schema used..."
400*e670fd5cSchristos$LDAPADD -H $URI1 -D 'cn=config' -w `cat $CONFIGPWF` \
4014e27b3e8Schristos	>> $TESTOUT 2>&1 <<EOF
4024e27b3e8Schristosdn: olcOverlay={1}memberof,olcDatabase={1}$BACKEND,cn=config
4034e27b3e8Schristoschangetype: modify
4044e27b3e8Schristosreplace: olcMemberOfMemberOfAD
4054e27b3e8SchristosolcMemberOfMemberOfAD: memberOfC
4064e27b3e8Schristos
4074e27b3e8SchristosEOF
4084e27b3e8SchristosRC=$?
4094e27b3e8Schristosif test $RC != 0 ; then
4104e27b3e8Schristos	echo "ldapadd failed ($RC)!"
4114e27b3e8Schristos	test $KILLSERVERS != no && kill -HUP $KILLPIDS
4124e27b3e8Schristos	exit $RC
4134e27b3e8Schristosfi
4144e27b3e8Schristos
4154e27b3e8Schristosecho "Updating groups to expose the new setting..."
416*e670fd5cSchristos$LDAPMODIFY -H $URI1 \
4174e27b3e8Schristos	-D "cn=Manager,$BASEDN" -w secret \
4184e27b3e8Schristos	>> $TESTOUT 2>&1 <<EOF
4194e27b3e8Schristosdn: cn=group1,ou=Groups,$BASEDN
4204e27b3e8Schristoschangetype: modify
4214e27b3e8Schristosadd: memberA
4224e27b3e8SchristosmemberA: cn=person1,ou=People,$BASEDN
4234e27b3e8SchristosmemberA: cn=person2,ou=People,$BASEDN
4244e27b3e8Schristos
4254e27b3e8SchristosEOF
4264e27b3e8SchristosRC=$?
4274e27b3e8Schristosif test $RC != 0 ; then
4284e27b3e8Schristos	echo "ldapmodify failed ($RC)!"
4294e27b3e8Schristos	test $KILLSERVERS != no && kill -HUP $KILLPIDS
4304e27b3e8Schristos	exit $RC
4314e27b3e8Schristosfi
4324e27b3e8Schristos
4334e27b3e8Schristosecho "Re-search the entire database..."
4344e27b3e8Schristosecho "# Re-search the entire database after updating memberof configuration..." >> $SEARCHOUT
435*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
4364e27b3e8Schristos	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
4374e27b3e8SchristosRC=$?
4384e27b3e8Schristosif test $RC != 0 ; then
4394e27b3e8Schristos	echo "ldapsearch failed ($RC)!"
4404e27b3e8Schristos	test $KILLSERVERS != no && kill -HUP $KILLPIDS
4414e27b3e8Schristos	exit $RC
4424e27b3e8Schristosfi
4434e27b3e8Schristos
4442de962bdSlukemtest $KILLSERVERS != no && kill -HUP $KILLPIDS
4452de962bdSlukem
4462de962bdSlukemLDIF=$MEMBEROFOUT
4472de962bdSlukem
4482de962bdSlukemecho "Filtering ldapsearch results..."
449ef2f90d3Sadam$LDIFFILTER < $SEARCHOUT > $SEARCHFLT
4502de962bdSlukemecho "Filtering original ldif used to create database..."
451ef2f90d3Sadam$LDIFFILTER < $LDIF > $LDIFFLT
4522de962bdSlukemecho "Comparing filter output..."
4532de962bdSlukem$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
4542de962bdSlukem
4552de962bdSlukemif test $? != 0 ; then
4562de962bdSlukem	echo "Comparison failed"
4572de962bdSlukem	exit 1
4582de962bdSlukemfi
4592de962bdSlukem
4602de962bdSlukemecho ">>>>> Test succeeded"
4612de962bdSlukem
4622de962bdSlukemtest $KILLSERVERS != no && wait
4632de962bdSlukem
4642de962bdSlukemexit 0
465