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
75 echo "Running ldapadd to build slapd config database..."
76 $LDAPADD -h $LOCALHOST -p $PORT1 -D 'cn=config' -w `cat $CONFIGPWF` \
77 >> $TESTOUT 2>&1 <<EOF
78 dn: cn=symas group example,cn=schema,cn=config
79 objectClass: olcSchemaConfig
80 cn: symas group example
81 olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.1
82 NAME 'memberA' SUP distinguishedName )
83 olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.2
84 NAME 'memberOfA' SUP distinguishedName )
85 olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.3
86 NAME 'memberB' SUP distinguishedName )
87 olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.4
88 NAME 'memberOfB' SUP distinguishedName )
89 olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.1
90 NAME 'groupA' SUP top STRUCTURAL MUST cn MAY memberA )
91 olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.2
92 NAME 'groupMemberA' SUP top AUXILIARY MAY memberOfA )
93 olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.3
94 NAME 'groupB' SUP top STRUCTURAL MUST cn MAY memberB )
95 olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.4
96 NAME 'groupMemberB' SUP top AUXILIARY MAY memberOfB )
98 dn: olcDatabase={1}$BACKEND,cn=config
99 objectClass: olcDatabaseConfig
100 objectClass: olc${BACKEND}Config
101 olcDatabase: {1}$BACKEND
103 olcRootDN: cn=Manager,$BASEDN
106 olcDbDirectory: $TESTDIR/db.1.a/
108 olcDbIndex: objectClass eq
109 olcDbIndex: cn pres,eq,sub
110 olcDbIndex: uid pres,eq,sub
111 olcDbIndex: sn pres,eq,sub
114 dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config
115 objectClass: olcOverlayConfig
116 objectClass: olcMemberOf
117 olcOverlay: {0}memberof
118 olcMemberOfRefInt: TRUE
119 olcMemberOfGroupOC: groupOfNames
120 olcMemberOfMemberAD: member
121 olcMemberOfMemberOfAD: memberOf
123 dn: olcOverlay={1}memberof,olcDatabase={1}$BACKEND,cn=config
124 objectClass: olcOverlayConfig
125 objectClass: olcMemberOf
126 olcOverlay: {1}memberof
127 olcMemberOfRefInt: TRUE
128 olcMemberOfGroupOC: groupA
129 olcMemberOfMemberAD: memberA
130 olcMemberOfMemberOfAD: memberOfA
132 dn: olcOverlay={2}memberof,olcDatabase={1}$BACKEND,cn=config
133 objectClass: olcOverlayConfig
134 objectClass: olcMemberOf
135 olcOverlay: {2}memberof
136 olcMemberOfRefInt: TRUE
137 olcMemberOfGroupOC: groupB
138 olcMemberOfMemberAD: memberB
139 olcMemberOfMemberOfAD: memberOfB
143 if test $RC != 0 ; then
144 echo "ldapadd failed ($RC)!"
145 test $KILLSERVERS != no && kill -HUP $KILLPIDS
149 echo "Running ldapadd to build slapd database..."
150 $LDAPADD -h $LOCALHOST -p $PORT1 \
151 -D "cn=Manager,$BASEDN" -w secret \
152 >> $TESTOUT 2>&1 << EOF
154 objectClass: organization
155 objectClass: dcObject
159 dn: ou=People,$BASEDN
160 objectClass: organizationalUnit
163 dn: ou=Groups,$BASEDN
164 objectClass: organizationalUnit
167 dn: cn=Roger Rabbit,ou=People,$BASEDN
168 objectClass: inetOrgPerson
172 dn: cn=Baby Herman,ou=People,$BASEDN
173 objectClass: inetOrgPerson
177 dn: cn=Cartoonia,ou=Groups,$BASEDN
178 objectClass: groupOfNames
180 member: cn=Roger Rabbit,ou=People,$BASEDN
181 member: cn=Baby Herman,ou=People,$BASEDN
184 if test $RC != 0 ; then
185 echo "ldapadd failed ($RC)!"
186 test $KILLSERVERS != no && kill -HUP $KILLPIDS
190 echo "Search the entire database..."
191 echo "# Search the entire database..." >> $SEARCHOUT
192 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
193 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
195 if test $RC != 0 ; then
196 echo "ldapsearch failed ($RC)!"
197 test $KILLSERVERS != no && kill -HUP $KILLPIDS
201 echo "Running ldapmodify to add a member..."
202 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
203 -D "cn=Manager,$BASEDN" -w secret \
204 >> $TESTOUT 2>&1 << EOF
205 dn: cn=Jessica Rabbit,ou=People,$BASEDN
207 objectClass: inetOrgPerson
211 dn: cn=Cartoonia,ou=Groups,$BASEDN
214 member: cn=Jessica Rabbit,ou=People,$BASEDN
217 echo "Re-search the entire database..."
218 echo "# Re-search the entire database..." >> $SEARCHOUT
219 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
220 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
222 if test $RC != 0 ; then
223 echo "ldapsearch failed ($RC)!"
224 test $KILLSERVERS != no && kill -HUP $KILLPIDS
228 echo "Running ldapmodify to add self..."
229 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
230 -D "cn=Manager,$BASEDN" -w secret \
231 >> $TESTOUT 2>&1 << EOF
232 dn: cn=Cartoonia,ou=Groups,$BASEDN
235 member: cn=Cartoonia,ou=Groups,$BASEDN
238 echo "Re-search the entire database..."
239 echo "# Re-search the entire database..." >> $SEARCHOUT
240 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
241 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
243 if test $RC != 0 ; then
244 echo "ldapsearch failed ($RC)!"
245 test $KILLSERVERS != no && kill -HUP $KILLPIDS
249 echo "Running ldapdelete to remove a member..."
250 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
251 -D "cn=Manager,$BASEDN" -w secret \
252 >> $TESTOUT 2>&1 << EOF
253 dn: cn=Baby Herman,ou=People,$BASEDN
257 echo "Re-search the entire database..."
258 echo "# Re-search the entire database..." >> $SEARCHOUT
259 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
260 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
262 if test $RC != 0 ; then
263 echo "ldapsearch failed ($RC)!"
264 test $KILLSERVERS != no && kill -HUP $KILLPIDS
268 echo "Adding groups with MAY member type schemas..."
269 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
270 -D "cn=Manager,$BASEDN" -w secret \
271 >> $TESTOUT 2>&1 <<EOF
272 dn: cn=Roger Rabbit,ou=People,$BASEDN
275 dn: cn=Jessica Rabbit,ou=People,$BASEDN
278 dn: cn=Cartoonia,ou=Groups,$BASEDN
281 dn: cn=person1,ou=People,$BASEDN
284 objectClass: groupMemberA
285 objectClass: groupMemberB
289 dn: cn=person2,ou=People,$BASEDN
292 objectClass: groupMemberA
293 objectClass: groupMemberB
297 dn: cn=group1,ou=Groups,$BASEDN
301 memberA: cn=person1,ou=People,$BASEDN
302 memberA: cn=person2,ou=People,$BASEDN
304 dn: cn=group2,ou=Groups,$BASEDN
308 memberB: cn=person1,ou=People,$BASEDN
309 memberB: cn=person2,ou=People,$BASEDN
311 dn: cn=group1,ou=Groups,$BASEDN
317 echo "Re-search the entire database..."
318 echo "# Re-search the entire database..." >> $SEARCHOUT
319 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
320 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
322 if test $RC != 0 ; then
323 echo "ldapsearch failed ($RC)!"
324 test $KILLSERVERS != no && kill -HUP $KILLPIDS
328 test $KILLSERVERS != no && kill -HUP $KILLPIDS
332 echo "Filtering ldapsearch results..."
333 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
334 echo "Filtering original ldif used to create database..."
335 $LDIFFILTER < $LDIF > $LDIFFLT
336 echo "Comparing filter output..."
337 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
339 if test $? != 0 ; then
340 echo "Comparison failed"
344 echo ">>>>> Test succeeded"
346 test $KILLSERVERS != no && wait