3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
5 ## Copyright 1998-2009 The OpenLDAP Foundation.
6 ## All rights reserved.
8 ## Redistribution and use in source and binary forms, with or without
9 ## modification, are permitted only as authorized by the OpenLDAP
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>.
16 echo "running defines.sh"
17 . $SRCDIR/scripts/defines.sh
19 if test $MEMBEROF = memberofno; then
20 echo "Memberof overlay not available, test skipped"
24 mkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir
26 $SLAPPASSWD -g -n >$CONFIGPWF
27 echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
29 echo "Starting slapd on TCP/IP port $PORT1..."
30 . $CONFFILTER $BACKEND $MONITORDB < $NAKEDCONF > $CONF1
31 $SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
33 if test $WAIT != 0 ; then
40 for i in 0 1 2 3 4 5; do
41 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
42 'objectclass=*' > /dev/null 2>&1
44 if test $RC = 0 ; then
47 echo "Waiting 5 seconds for slapd to start..."
50 if test $RC != 0 ; then
51 echo "ldapsearch failed ($RC)!"
52 test $KILLSERVERS != no && kill -HUP $KILLPIDS
56 cat /dev/null > $TESTOUT
58 if [ "$MEMBEROF" = memberofmod ]; then
59 echo "Inserting memberof overlay on producer..."
60 $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
61 dn: cn=module,cn=config
62 objectClass: olcModuleList
64 olcModulePath: ../servers/slapd/overlays
65 olcModuleLoad: memberof.la
68 if test $RC != 0 ; then
69 echo "ldapadd failed for moduleLoad ($RC)!"
70 test $KILLSERVERS != no && kill -HUP $KILLPIDS
76 case $BACKEND in bdb | hdb)
77 bdb_conf="olcDbCacheSize: 1000
78 olcDbIndex: objectClass eq
79 olcDbIndex: cn pres,eq,sub
80 olcDbIndex: uid pres,eq,sub
81 olcDbIndex: sn pres,eq,sub
85 echo "Running ldapadd to build slapd config database..."
86 $LDAPADD -h $LOCALHOST -p $PORT1 -D 'cn=config' -w `cat $CONFIGPWF` \
87 >> $TESTOUT 2>&1 <<EOF
88 dn: cn=symas group example,cn=schema,cn=config
89 objectClass: olcSchemaConfig
90 cn: symas group example
91 olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.1
92 NAME 'memberA' SUP distinguishedName )
93 olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.2
94 NAME 'memberOfA' SUP distinguishedName )
95 olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.3
96 NAME 'memberB' SUP distinguishedName )
97 olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.4
98 NAME 'memberOfB' SUP distinguishedName )
99 olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.1
100 NAME 'groupA' SUP top STRUCTURAL MUST cn MAY memberA )
101 olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.2
102 NAME 'groupMemberA' SUP top AUXILIARY MAY memberOfA )
103 olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.3
104 NAME 'groupB' SUP top STRUCTURAL MUST cn MAY memberB )
105 olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.4
106 NAME 'groupMemberB' SUP top AUXILIARY MAY memberOfB )
108 dn: olcDatabase={1}$BACKEND,cn=config
109 objectClass: olcDatabaseConfig
110 objectClass: olc${BACKEND}Config
111 olcDatabase: {1}$BACKEND
113 olcRootDN: cn=Manager,$BASEDN
116 olcDbDirectory: $TESTDIR/db.1.a/
119 dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config
120 objectClass: olcOverlayConfig
121 objectClass: olcMemberOf
122 olcOverlay: {0}memberof
123 olcMemberOfRefInt: TRUE
124 olcMemberOfGroupOC: groupOfNames
125 olcMemberOfMemberAD: member
126 olcMemberOfMemberOfAD: memberOf
128 dn: olcOverlay={1}memberof,olcDatabase={1}$BACKEND,cn=config
129 objectClass: olcOverlayConfig
130 objectClass: olcMemberOf
131 olcOverlay: {1}memberof
132 olcMemberOfRefInt: TRUE
133 olcMemberOfGroupOC: groupA
134 olcMemberOfMemberAD: memberA
135 olcMemberOfMemberOfAD: memberOfA
137 dn: olcOverlay={2}memberof,olcDatabase={1}$BACKEND,cn=config
138 objectClass: olcOverlayConfig
139 objectClass: olcMemberOf
140 olcOverlay: {2}memberof
141 olcMemberOfRefInt: TRUE
142 olcMemberOfGroupOC: groupB
143 olcMemberOfMemberAD: memberB
144 olcMemberOfMemberOfAD: memberOfB
148 if test $RC != 0 ; then
149 echo "ldapadd failed ($RC)!"
150 test $KILLSERVERS != no && kill -HUP $KILLPIDS
154 echo "Running ldapadd to build slapd database..."
155 $LDAPADD -h $LOCALHOST -p $PORT1 \
156 -D "cn=Manager,$BASEDN" -w secret \
157 >> $TESTOUT 2>&1 << EOF
159 objectClass: organization
160 objectClass: dcObject
164 dn: ou=People,$BASEDN
165 objectClass: organizationalUnit
168 dn: ou=Groups,$BASEDN
169 objectClass: organizationalUnit
172 dn: cn=Roger Rabbit,ou=People,$BASEDN
173 objectClass: inetOrgPerson
177 dn: cn=Baby Herman,ou=People,$BASEDN
178 objectClass: inetOrgPerson
182 dn: cn=Cartoonia,ou=Groups,$BASEDN
183 objectClass: groupOfNames
185 member: cn=Roger Rabbit,ou=People,$BASEDN
186 member: cn=Baby Herman,ou=People,$BASEDN
189 if test $RC != 0 ; then
190 echo "ldapadd failed ($RC)!"
191 test $KILLSERVERS != no && kill -HUP $KILLPIDS
195 echo "Search the entire database..."
196 echo "# Search the entire database..." >> $SEARCHOUT
197 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
198 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
200 if test $RC != 0 ; then
201 echo "ldapsearch failed ($RC)!"
202 test $KILLSERVERS != no && kill -HUP $KILLPIDS
206 echo "Running ldapmodify to add a member..."
207 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
208 -D "cn=Manager,$BASEDN" -w secret \
209 >> $TESTOUT 2>&1 << EOF
210 dn: cn=Jessica Rabbit,ou=People,$BASEDN
212 objectClass: inetOrgPerson
216 dn: cn=Cartoonia,ou=Groups,$BASEDN
219 member: cn=Jessica Rabbit,ou=People,$BASEDN
222 echo "Re-search the entire database..."
223 echo "# Re-search the entire database..." >> $SEARCHOUT
224 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
225 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
227 if test $RC != 0 ; then
228 echo "ldapsearch failed ($RC)!"
229 test $KILLSERVERS != no && kill -HUP $KILLPIDS
233 echo "Running ldapmodify to add self..."
234 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
235 -D "cn=Manager,$BASEDN" -w secret \
236 >> $TESTOUT 2>&1 << EOF
237 dn: cn=Cartoonia,ou=Groups,$BASEDN
240 member: cn=Cartoonia,ou=Groups,$BASEDN
243 echo "Re-search the entire database..."
244 echo "# Re-search the entire database..." >> $SEARCHOUT
245 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
246 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
248 if test $RC != 0 ; then
249 echo "ldapsearch failed ($RC)!"
250 test $KILLSERVERS != no && kill -HUP $KILLPIDS
254 echo "Running ldapdelete to remove a member..."
255 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
256 -D "cn=Manager,$BASEDN" -w secret \
257 >> $TESTOUT 2>&1 << EOF
258 dn: cn=Baby Herman,ou=People,$BASEDN
262 echo "Re-search the entire database..."
263 echo "# Re-search the entire database..." >> $SEARCHOUT
264 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
265 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
267 if test $RC != 0 ; then
268 echo "ldapsearch failed ($RC)!"
269 test $KILLSERVERS != no && kill -HUP $KILLPIDS
273 echo "Adding groups with MAY member type schemas..."
274 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
275 -D "cn=Manager,$BASEDN" -w secret \
276 >> $TESTOUT 2>&1 <<EOF
277 dn: cn=Roger Rabbit,ou=People,$BASEDN
280 dn: cn=Jessica Rabbit,ou=People,$BASEDN
283 dn: cn=Cartoonia,ou=Groups,$BASEDN
286 dn: cn=person1,ou=People,$BASEDN
289 objectClass: groupMemberA
290 objectClass: groupMemberB
294 dn: cn=person2,ou=People,$BASEDN
297 objectClass: groupMemberA
298 objectClass: groupMemberB
302 dn: cn=group1,ou=Groups,$BASEDN
306 memberA: cn=person1,ou=People,$BASEDN
307 memberA: cn=person2,ou=People,$BASEDN
309 dn: cn=group2,ou=Groups,$BASEDN
313 memberB: cn=person1,ou=People,$BASEDN
314 memberB: cn=person2,ou=People,$BASEDN
316 dn: cn=group1,ou=Groups,$BASEDN
322 echo "Re-search the entire database..."
323 echo "# Re-search the entire database..." >> $SEARCHOUT
324 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
325 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
327 if test $RC != 0 ; then
328 echo "ldapsearch failed ($RC)!"
329 test $KILLSERVERS != no && kill -HUP $KILLPIDS
333 test $KILLSERVERS != no && kill -HUP $KILLPIDS
337 echo "Filtering ldapsearch results..."
338 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
339 echo "Filtering original ldif used to create database..."
340 $LDIFFILTER < $LDIF > $LDIFFLT
341 echo "Comparing filter output..."
342 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
344 if test $? != 0 ; then
345 echo "Comparison failed"
349 echo ">>>>> Test succeeded"
351 test $KILLSERVERS != no && wait