test052-memberof revision 1.1.1.3 1 1.1 lukem #! /bin/sh
2 1.1.1.3 adam # OpenLDAP: pkg/ldap/tests/scripts/test052-memberof,v 1.4.2.6 2010/04/19 19:14:36 quanah Exp
3 1.1 lukem ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 1.1 lukem ##
5 1.1.1.3 adam ## Copyright 1998-2010 The OpenLDAP Foundation.
6 1.1 lukem ## All rights reserved.
7 1.1 lukem ##
8 1.1 lukem ## Redistribution and use in source and binary forms, with or without
9 1.1 lukem ## modification, are permitted only as authorized by the OpenLDAP
10 1.1 lukem ## Public License.
11 1.1 lukem ##
12 1.1 lukem ## A copy of this license is available in the file LICENSE in the
13 1.1 lukem ## top-level directory of the distribution or, alternatively, at
14 1.1 lukem ## <http://www.OpenLDAP.org/license.html>.
15 1.1 lukem
16 1.1 lukem echo "running defines.sh"
17 1.1 lukem . $SRCDIR/scripts/defines.sh
18 1.1 lukem
19 1.1 lukem if test $MEMBEROF = memberofno; then
20 1.1 lukem echo "Memberof overlay not available, test skipped"
21 1.1 lukem exit 0
22 1.1 lukem fi
23 1.1 lukem
24 1.1 lukem mkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir
25 1.1 lukem
26 1.1 lukem $SLAPPASSWD -g -n >$CONFIGPWF
27 1.1 lukem echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
28 1.1 lukem
29 1.1 lukem echo "Starting slapd on TCP/IP port $PORT1..."
30 1.1 lukem . $CONFFILTER $BACKEND $MONITORDB < $NAKEDCONF > $CONF1
31 1.1 lukem $SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
32 1.1 lukem PID=$!
33 1.1 lukem if test $WAIT != 0 ; then
34 1.1 lukem echo PID $PID
35 1.1 lukem read foo
36 1.1 lukem fi
37 1.1 lukem KILLPIDS="$PID"
38 1.1 lukem
39 1.1 lukem sleep 1
40 1.1 lukem for i in 0 1 2 3 4 5; do
41 1.1 lukem $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
42 1.1 lukem 'objectclass=*' > /dev/null 2>&1
43 1.1 lukem RC=$?
44 1.1 lukem if test $RC = 0 ; then
45 1.1 lukem break
46 1.1 lukem fi
47 1.1 lukem echo "Waiting 5 seconds for slapd to start..."
48 1.1 lukem sleep 5
49 1.1 lukem done
50 1.1 lukem if test $RC != 0 ; then
51 1.1 lukem echo "ldapsearch failed ($RC)!"
52 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
53 1.1 lukem exit $RC
54 1.1 lukem fi
55 1.1 lukem
56 1.1 lukem cat /dev/null > $TESTOUT
57 1.1 lukem
58 1.1 lukem if [ "$MEMBEROF" = memberofmod ]; then
59 1.1 lukem echo "Inserting memberof overlay on producer..."
60 1.1 lukem $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
61 1.1 lukem dn: cn=module,cn=config
62 1.1 lukem objectClass: olcModuleList
63 1.1 lukem cn: module
64 1.1 lukem olcModulePath: ../servers/slapd/overlays
65 1.1 lukem olcModuleLoad: memberof.la
66 1.1 lukem EOF
67 1.1 lukem RC=$?
68 1.1 lukem if test $RC != 0 ; then
69 1.1 lukem echo "ldapadd failed for moduleLoad ($RC)!"
70 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
71 1.1 lukem exit $RC
72 1.1 lukem fi
73 1.1 lukem fi
74 1.1 lukem
75 1.1.1.3 adam bdbInclude="# " nullExclude=""
76 1.1.1.3 adam case $BACKEND in
77 1.1.1.3 adam bdb | hdb) bdbInclude="" ;;
78 1.1.1.3 adam null) nullExclude="# " ;;
79 1.1.1.3 adam esac
80 1.1.1.3 adam
81 1.1 lukem echo "Running ldapadd to build slapd config database..."
82 1.1 lukem $LDAPADD -h $LOCALHOST -p $PORT1 -D 'cn=config' -w `cat $CONFIGPWF` \
83 1.1 lukem >> $TESTOUT 2>&1 <<EOF
84 1.1.1.2 lukem dn: cn=symas group example,cn=schema,cn=config
85 1.1.1.2 lukem objectClass: olcSchemaConfig
86 1.1.1.2 lukem cn: symas group example
87 1.1.1.2 lukem olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.1
88 1.1.1.2 lukem NAME 'memberA' SUP distinguishedName )
89 1.1.1.2 lukem olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.2
90 1.1.1.2 lukem NAME 'memberOfA' SUP distinguishedName )
91 1.1.1.2 lukem olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.3
92 1.1.1.2 lukem NAME 'memberB' SUP distinguishedName )
93 1.1.1.2 lukem olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.4
94 1.1.1.2 lukem NAME 'memberOfB' SUP distinguishedName )
95 1.1.1.2 lukem olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.1
96 1.1.1.2 lukem NAME 'groupA' SUP top STRUCTURAL MUST cn MAY memberA )
97 1.1.1.2 lukem olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.2
98 1.1.1.2 lukem NAME 'groupMemberA' SUP top AUXILIARY MAY memberOfA )
99 1.1.1.2 lukem olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.3
100 1.1.1.2 lukem NAME 'groupB' SUP top STRUCTURAL MUST cn MAY memberB )
101 1.1.1.2 lukem olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.4
102 1.1.1.2 lukem NAME 'groupMemberB' SUP top AUXILIARY MAY memberOfB )
103 1.1.1.2 lukem
104 1.1 lukem dn: olcDatabase={1}$BACKEND,cn=config
105 1.1 lukem objectClass: olcDatabaseConfig
106 1.1.1.3 adam ${nullExclude}objectClass: olc${BACKEND}Config
107 1.1 lukem olcDatabase: {1}$BACKEND
108 1.1 lukem olcSuffix: $BASEDN
109 1.1 lukem olcRootDN: cn=Manager,$BASEDN
110 1.1 lukem olcRootPW:: c2VjcmV0
111 1.1 lukem olcMonitoring: TRUE
112 1.1.1.3 adam ${nullExclude}olcDbDirectory: $TESTDIR/db.1.a/
113 1.1.1.3 adam ${bdbInclude}olcDbCacheSize: 1000
114 1.1.1.3 adam ${bdbInclude}olcDbIndex: objectClass eq
115 1.1.1.3 adam ${bdbInclude}olcDbIndex: cn pres,eq,sub
116 1.1.1.3 adam ${bdbInclude}olcDbIndex: uid pres,eq,sub
117 1.1.1.3 adam ${bdbInclude}olcDbIndex: sn pres,eq,sub
118 1.1.1.3 adam ${bdbInclude}olcDbMode: 384"
119 1.1 lukem
120 1.1 lukem dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config
121 1.1 lukem objectClass: olcOverlayConfig
122 1.1 lukem objectClass: olcMemberOf
123 1.1 lukem olcOverlay: {0}memberof
124 1.1 lukem olcMemberOfRefInt: TRUE
125 1.1 lukem olcMemberOfGroupOC: groupOfNames
126 1.1 lukem olcMemberOfMemberAD: member
127 1.1 lukem olcMemberOfMemberOfAD: memberOf
128 1.1.1.2 lukem
129 1.1.1.2 lukem dn: olcOverlay={1}memberof,olcDatabase={1}$BACKEND,cn=config
130 1.1.1.2 lukem objectClass: olcOverlayConfig
131 1.1.1.2 lukem objectClass: olcMemberOf
132 1.1.1.2 lukem olcOverlay: {1}memberof
133 1.1.1.2 lukem olcMemberOfRefInt: TRUE
134 1.1.1.2 lukem olcMemberOfGroupOC: groupA
135 1.1.1.2 lukem olcMemberOfMemberAD: memberA
136 1.1.1.2 lukem olcMemberOfMemberOfAD: memberOfA
137 1.1.1.2 lukem
138 1.1.1.2 lukem dn: olcOverlay={2}memberof,olcDatabase={1}$BACKEND,cn=config
139 1.1.1.2 lukem objectClass: olcOverlayConfig
140 1.1.1.2 lukem objectClass: olcMemberOf
141 1.1.1.2 lukem olcOverlay: {2}memberof
142 1.1.1.2 lukem olcMemberOfRefInt: TRUE
143 1.1.1.2 lukem olcMemberOfGroupOC: groupB
144 1.1.1.2 lukem olcMemberOfMemberAD: memberB
145 1.1.1.2 lukem olcMemberOfMemberOfAD: memberOfB
146 1.1.1.2 lukem
147 1.1 lukem EOF
148 1.1 lukem RC=$?
149 1.1 lukem if test $RC != 0 ; then
150 1.1 lukem echo "ldapadd failed ($RC)!"
151 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
152 1.1 lukem exit $RC
153 1.1 lukem fi
154 1.1 lukem
155 1.1 lukem echo "Running ldapadd to build slapd database..."
156 1.1 lukem $LDAPADD -h $LOCALHOST -p $PORT1 \
157 1.1 lukem -D "cn=Manager,$BASEDN" -w secret \
158 1.1 lukem >> $TESTOUT 2>&1 << EOF
159 1.1 lukem dn: $BASEDN
160 1.1 lukem objectClass: organization
161 1.1 lukem objectClass: dcObject
162 1.1 lukem o: Example, Inc.
163 1.1 lukem dc: example
164 1.1 lukem
165 1.1 lukem dn: ou=People,$BASEDN
166 1.1 lukem objectClass: organizationalUnit
167 1.1 lukem ou: People
168 1.1 lukem
169 1.1 lukem dn: ou=Groups,$BASEDN
170 1.1 lukem objectClass: organizationalUnit
171 1.1 lukem ou: Groups
172 1.1 lukem
173 1.1 lukem dn: cn=Roger Rabbit,ou=People,$BASEDN
174 1.1 lukem objectClass: inetOrgPerson
175 1.1 lukem cn: Roger Rabbit
176 1.1 lukem sn: Rabbit
177 1.1 lukem
178 1.1 lukem dn: cn=Baby Herman,ou=People,$BASEDN
179 1.1 lukem objectClass: inetOrgPerson
180 1.1 lukem cn: Baby Herman
181 1.1 lukem sn: Herman
182 1.1 lukem
183 1.1 lukem dn: cn=Cartoonia,ou=Groups,$BASEDN
184 1.1 lukem objectClass: groupOfNames
185 1.1 lukem cn: Cartoonia
186 1.1 lukem member: cn=Roger Rabbit,ou=People,$BASEDN
187 1.1 lukem member: cn=Baby Herman,ou=People,$BASEDN
188 1.1 lukem EOF
189 1.1 lukem RC=$?
190 1.1 lukem if test $RC != 0 ; then
191 1.1 lukem echo "ldapadd failed ($RC)!"
192 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
193 1.1 lukem exit $RC
194 1.1 lukem fi
195 1.1 lukem
196 1.1 lukem echo "Search the entire database..."
197 1.1 lukem echo "# Search the entire database..." >> $SEARCHOUT
198 1.1 lukem $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
199 1.1 lukem '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
200 1.1 lukem RC=$?
201 1.1 lukem if test $RC != 0 ; then
202 1.1 lukem echo "ldapsearch failed ($RC)!"
203 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
204 1.1 lukem exit $RC
205 1.1 lukem fi
206 1.1 lukem
207 1.1 lukem echo "Running ldapmodify to add a member..."
208 1.1 lukem $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
209 1.1 lukem -D "cn=Manager,$BASEDN" -w secret \
210 1.1 lukem >> $TESTOUT 2>&1 << EOF
211 1.1 lukem dn: cn=Jessica Rabbit,ou=People,$BASEDN
212 1.1 lukem changetype: add
213 1.1 lukem objectClass: inetOrgPerson
214 1.1 lukem cn: Jessica Rabbit
215 1.1 lukem sn: Rabbit
216 1.1 lukem
217 1.1 lukem dn: cn=Cartoonia,ou=Groups,$BASEDN
218 1.1 lukem changetype: modify
219 1.1 lukem add: member
220 1.1 lukem member: cn=Jessica Rabbit,ou=People,$BASEDN
221 1.1 lukem EOF
222 1.1 lukem
223 1.1 lukem echo "Re-search the entire database..."
224 1.1 lukem echo "# Re-search the entire database..." >> $SEARCHOUT
225 1.1 lukem $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
226 1.1 lukem '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
227 1.1 lukem RC=$?
228 1.1 lukem if test $RC != 0 ; then
229 1.1 lukem echo "ldapsearch failed ($RC)!"
230 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
231 1.1 lukem exit $RC
232 1.1 lukem fi
233 1.1 lukem
234 1.1 lukem echo "Running ldapmodify to add self..."
235 1.1 lukem $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
236 1.1 lukem -D "cn=Manager,$BASEDN" -w secret \
237 1.1 lukem >> $TESTOUT 2>&1 << EOF
238 1.1 lukem dn: cn=Cartoonia,ou=Groups,$BASEDN
239 1.1 lukem changetype: modify
240 1.1 lukem add: member
241 1.1 lukem member: cn=Cartoonia,ou=Groups,$BASEDN
242 1.1 lukem EOF
243 1.1 lukem
244 1.1 lukem echo "Re-search the entire database..."
245 1.1 lukem echo "# Re-search the entire database..." >> $SEARCHOUT
246 1.1 lukem $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
247 1.1 lukem '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
248 1.1 lukem RC=$?
249 1.1 lukem if test $RC != 0 ; then
250 1.1 lukem echo "ldapsearch failed ($RC)!"
251 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
252 1.1 lukem exit $RC
253 1.1 lukem fi
254 1.1 lukem
255 1.1 lukem echo "Running ldapdelete to remove a member..."
256 1.1 lukem $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
257 1.1 lukem -D "cn=Manager,$BASEDN" -w secret \
258 1.1 lukem >> $TESTOUT 2>&1 << EOF
259 1.1 lukem dn: cn=Baby Herman,ou=People,$BASEDN
260 1.1 lukem changetype: delete
261 1.1 lukem EOF
262 1.1 lukem
263 1.1 lukem echo "Re-search the entire database..."
264 1.1 lukem echo "# Re-search the entire database..." >> $SEARCHOUT
265 1.1 lukem $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
266 1.1 lukem '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
267 1.1 lukem RC=$?
268 1.1 lukem if test $RC != 0 ; then
269 1.1 lukem echo "ldapsearch failed ($RC)!"
270 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
271 1.1 lukem exit $RC
272 1.1 lukem fi
273 1.1 lukem
274 1.1.1.2 lukem echo "Adding groups with MAY member type schemas..."
275 1.1.1.2 lukem $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
276 1.1.1.2 lukem -D "cn=Manager,$BASEDN" -w secret \
277 1.1.1.2 lukem >> $TESTOUT 2>&1 <<EOF
278 1.1.1.2 lukem dn: cn=Roger Rabbit,ou=People,$BASEDN
279 1.1.1.2 lukem changetype: delete
280 1.1.1.2 lukem
281 1.1.1.2 lukem dn: cn=Jessica Rabbit,ou=People,$BASEDN
282 1.1.1.2 lukem changetype: delete
283 1.1.1.2 lukem
284 1.1.1.2 lukem dn: cn=Cartoonia,ou=Groups,$BASEDN
285 1.1.1.2 lukem changetype: delete
286 1.1.1.2 lukem
287 1.1.1.2 lukem dn: cn=person1,ou=People,$BASEDN
288 1.1.1.2 lukem changetype: add
289 1.1.1.2 lukem objectClass: person
290 1.1.1.2 lukem objectClass: groupMemberA
291 1.1.1.2 lukem objectClass: groupMemberB
292 1.1.1.2 lukem cn: person1
293 1.1.1.2 lukem sn: person1
294 1.1.1.2 lukem
295 1.1.1.2 lukem dn: cn=person2,ou=People,$BASEDN
296 1.1.1.2 lukem changetype: add
297 1.1.1.2 lukem objectClass: person
298 1.1.1.2 lukem objectClass: groupMemberA
299 1.1.1.2 lukem objectClass: groupMemberB
300 1.1.1.2 lukem cn: person2
301 1.1.1.2 lukem sn: person2
302 1.1.1.2 lukem
303 1.1.1.2 lukem dn: cn=group1,ou=Groups,$BASEDN
304 1.1.1.2 lukem changetype: add
305 1.1.1.2 lukem objectclass: groupA
306 1.1.1.2 lukem cn: group1
307 1.1.1.2 lukem memberA: cn=person1,ou=People,$BASEDN
308 1.1.1.2 lukem memberA: cn=person2,ou=People,$BASEDN
309 1.1.1.2 lukem
310 1.1.1.2 lukem dn: cn=group2,ou=Groups,$BASEDN
311 1.1.1.2 lukem changetype: add
312 1.1.1.2 lukem objectclass: groupB
313 1.1.1.2 lukem cn: group2
314 1.1.1.2 lukem memberB: cn=person1,ou=People,$BASEDN
315 1.1.1.2 lukem memberB: cn=person2,ou=People,$BASEDN
316 1.1.1.2 lukem
317 1.1.1.2 lukem dn: cn=group1,ou=Groups,$BASEDN
318 1.1.1.2 lukem changetype: modify
319 1.1.1.2 lukem delete: memberA
320 1.1.1.2 lukem
321 1.1.1.2 lukem EOF
322 1.1.1.2 lukem
323 1.1.1.2 lukem echo "Re-search the entire database..."
324 1.1.1.2 lukem echo "# Re-search the entire database..." >> $SEARCHOUT
325 1.1.1.2 lukem $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
326 1.1.1.2 lukem '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
327 1.1.1.2 lukem RC=$?
328 1.1.1.2 lukem if test $RC != 0 ; then
329 1.1.1.2 lukem echo "ldapsearch failed ($RC)!"
330 1.1.1.2 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
331 1.1.1.2 lukem exit $RC
332 1.1.1.2 lukem fi
333 1.1.1.2 lukem
334 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
335 1.1 lukem
336 1.1 lukem LDIF=$MEMBEROFOUT
337 1.1 lukem
338 1.1 lukem echo "Filtering ldapsearch results..."
339 1.1.1.3 adam $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
340 1.1 lukem echo "Filtering original ldif used to create database..."
341 1.1.1.3 adam $LDIFFILTER < $LDIF > $LDIFFLT
342 1.1 lukem echo "Comparing filter output..."
343 1.1 lukem $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
344 1.1 lukem
345 1.1 lukem if test $? != 0 ; then
346 1.1 lukem echo "Comparison failed"
347 1.1 lukem exit 1
348 1.1 lukem fi
349 1.1 lukem
350 1.1 lukem echo ">>>>> Test succeeded"
351 1.1 lukem
352 1.1 lukem test $KILLSERVERS != no && wait
353 1.1 lukem
354 1.1 lukem exit 0
355