]> git.sur5r.net Git - openldap/blob - tests/scripts/test052-memberof
888c65e5a4cc6f444517f3ef27021db95cf3579b
[openldap] / tests / scripts / test052-memberof
1 #! /bin/sh
2 # $OpenLDAP$
3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 ##
5 ## Copyright 1998-2015 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 $MEMBEROF = memberofno; then 
20         echo "Memberof overlay not available, test skipped"
21         exit 0
22 fi 
23
24 mkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir
25
26 $SLAPPASSWD -g -n >$CONFIGPWF
27 echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
28
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 &
32 PID=$!
33 if test $WAIT != 0 ; then
34     echo PID $PID
35     read foo
36 fi
37 KILLPIDS="$PID"
38
39 sleep 1
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
43         RC=$?
44         if test $RC = 0 ; then
45                 break
46         fi
47         echo "Waiting 5 seconds for slapd to start..."
48         sleep 5
49 done
50 if test $RC != 0 ; then
51         echo "ldapsearch failed ($RC)!"
52         test $KILLSERVERS != no && kill -HUP $KILLPIDS
53         exit $RC
54 fi
55
56 cat /dev/null > $TESTOUT
57
58 if [ "$MEMBEROF" = memberofmod ]; then
59         echo "Inserting memberof overlay on provider..."
60         $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
61 dn: cn=module,cn=config
62 objectClass: olcModuleList
63 cn: module
64 olcModulePath: ../servers/slapd/overlays
65 olcModuleLoad: memberof.la
66 EOF
67         RC=$?
68         if test $RC != 0 ; then
69                 echo "ldapadd failed for moduleLoad ($RC)!"
70                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
71                 exit $RC
72         fi
73 fi
74
75 indexInclude="" mainInclude="" bdbInclude="# " nullExclude=""
76 test $INDEXDB = indexdb || indexInclude="# "
77 test $MAINDB  = maindb  || mainInclude="# "
78 case $BACKEND in
79 bdb | hdb) bdbInclude="" ;;
80 null) nullExclude="# " ;;
81 esac
82
83 echo "Running ldapadd to build slapd config database..."
84 $LDAPADD -h $LOCALHOST -p $PORT1 -D 'cn=config' -w `cat $CONFIGPWF` \
85         >> $TESTOUT 2>&1 <<EOF
86 dn: cn=symas group example,cn=schema,cn=config
87 objectClass: olcSchemaConfig
88 cn: symas group example
89 olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.1 
90  NAME 'memberA' SUP distinguishedName )
91 olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.2
92  NAME 'memberOfA' SUP distinguishedName )
93 olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.3 
94  NAME 'memberB' SUP distinguishedName )
95 olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.4 
96  NAME 'memberOfB' SUP distinguishedName )
97 olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.1 
98  NAME 'groupA' SUP top STRUCTURAL MUST cn MAY memberA )
99 olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.2 
100  NAME 'groupMemberA' SUP top AUXILIARY MAY memberOfA )
101 olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.3 
102  NAME 'groupB' SUP top STRUCTURAL MUST cn MAY memberB )
103 olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.4 
104  NAME 'groupMemberB' SUP top AUXILIARY MAY memberOfB )
105
106 dn: olcDatabase={1}$BACKEND,cn=config
107 objectClass: olcDatabaseConfig
108 ${nullExclude}objectClass: olc${BACKEND}Config
109 olcDatabase: {1}$BACKEND
110 olcSuffix: $BASEDN
111 olcRootDN: cn=Manager,$BASEDN
112 olcRootPW:: c2VjcmV0
113 olcMonitoring: TRUE
114 ${nullExclude}olcDbDirectory: $TESTDIR/db.1.a/
115 ${bdbInclude}olcDbCacheSize: 1000
116 ${indexInclude}olcDbIndex: objectClass eq
117 ${indexInclude}olcDbIndex: cn pres,eq,sub
118 ${indexInclude}olcDbIndex: uid pres,eq,sub
119 ${indexInclude}olcDbIndex: sn pres,eq,sub
120 ${mainInclude}olcDbMode: 384"
121
122 dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config
123 objectClass: olcOverlayConfig
124 objectClass: olcMemberOf
125 olcOverlay: {0}memberof
126 olcMemberOfRefInt: TRUE
127 olcMemberOfGroupOC: groupOfNames
128 olcMemberOfMemberAD: member
129 olcMemberOfMemberOfAD: memberOf
130
131 dn: olcOverlay={1}memberof,olcDatabase={1}$BACKEND,cn=config
132 objectClass: olcOverlayConfig
133 objectClass: olcMemberOf
134 olcOverlay: {1}memberof
135 olcMemberOfRefInt: TRUE
136 olcMemberOfGroupOC: groupA
137 olcMemberOfMemberAD: memberA
138 olcMemberOfMemberOfAD: memberOfA
139
140 dn: olcOverlay={2}memberof,olcDatabase={1}$BACKEND,cn=config
141 objectClass: olcOverlayConfig
142 objectClass: olcMemberOf
143 olcOverlay: {2}memberof
144 olcMemberOfRefInt: TRUE
145 olcMemberOfGroupOC: groupB
146 olcMemberOfMemberAD: memberB
147 olcMemberOfMemberOfAD: memberOfB
148
149 EOF
150 RC=$?
151 if test $RC != 0 ; then
152         echo "ldapadd failed ($RC)!"
153         test $KILLSERVERS != no && kill -HUP $KILLPIDS
154         exit $RC
155 fi
156
157 echo "Running ldapadd to build slapd database..."
158 $LDAPADD -h $LOCALHOST -p $PORT1 \
159         -D "cn=Manager,$BASEDN" -w secret \
160         >> $TESTOUT 2>&1 << EOF
161 dn: $BASEDN
162 objectClass: organization
163 objectClass: dcObject
164 o: Example, Inc.
165 dc: example
166
167 dn: ou=People,$BASEDN
168 objectClass: organizationalUnit
169 ou: People
170
171 dn: ou=Groups,$BASEDN
172 objectClass: organizationalUnit
173 ou: Groups
174
175 dn: cn=Roger Rabbit,ou=People,$BASEDN
176 objectClass: inetOrgPerson
177 cn: Roger Rabbit
178 sn: Rabbit
179
180 dn: cn=Baby Herman,ou=People,$BASEDN
181 objectClass: inetOrgPerson
182 cn: Baby Herman
183 sn: Herman
184
185 dn: cn=Cartoonia,ou=Groups,$BASEDN
186 objectClass: groupOfNames
187 cn: Cartoonia
188 member: cn=Roger Rabbit,ou=People,$BASEDN
189 member: cn=Baby Herman,ou=People,$BASEDN
190 EOF
191 RC=$?
192 if test $RC != 0 ; then
193         echo "ldapadd failed ($RC)!"
194         test $KILLSERVERS != no && kill -HUP $KILLPIDS
195         exit $RC
196 fi
197
198 echo "Search the entire database..."
199 echo "# Search the entire database..." >> $SEARCHOUT
200 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
201         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
202 RC=$?
203 if test $RC != 0 ; then
204         echo "ldapsearch failed ($RC)!"
205         test $KILLSERVERS != no && kill -HUP $KILLPIDS
206         exit $RC
207 fi
208
209 echo "Running ldapmodify to add a member..."
210 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
211         -D "cn=Manager,$BASEDN" -w secret \
212         >> $TESTOUT 2>&1 << EOF
213 dn: cn=Jessica Rabbit,ou=People,$BASEDN
214 changetype: add
215 objectClass: inetOrgPerson
216 cn: Jessica Rabbit
217 sn: Rabbit
218
219 dn: cn=Cartoonia,ou=Groups,$BASEDN
220 changetype: modify
221 add: member
222 member: cn=Jessica Rabbit,ou=People,$BASEDN
223 EOF
224
225 echo "Re-search the entire database..."
226 echo "# Re-search the entire database after adding Jessica Rabbit and Cartoonia..." >> $SEARCHOUT
227 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
228         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
229 RC=$?
230 if test $RC != 0 ; then
231         echo "ldapsearch failed ($RC)!"
232         test $KILLSERVERS != no && kill -HUP $KILLPIDS
233         exit $RC
234 fi
235
236 echo "Running ldapmodify to rename a member..."
237 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
238         -D "cn=Manager,$BASEDN" -w secret \
239         >> $TESTOUT 2>&1 << EOF
240 dn: cn=Baby Herman,ou=People,$BASEDN
241 changetype: modrdn
242 newrdn: cn=Baby Herman Jr
243 deleteoldrdn: 1
244 EOF
245
246 echo "Re-search the entire database..."
247 echo "# Re-search the entire database after renaming Baby Herman..." >> $SEARCHOUT
248 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
249         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
250 RC=$?
251 if test $RC != 0 ; then
252         echo "ldapsearch failed ($RC)!"
253         test $KILLSERVERS != no && kill -HUP $KILLPIDS
254         exit $RC
255 fi
256
257 echo "Running ldapmodify to rename a group..."
258 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
259         -D "cn=Manager,$BASEDN" -w secret \
260         >> $TESTOUT 2>&1 << EOF
261 dn: cn=Cartoonia,ou=Groups,$BASEDN
262 changetype: modrdn
263 newrdn: cn=Toon Town
264 deleteoldrdn: 1
265 EOF
266
267 echo "Re-search the entire database..."
268 echo "# Re-search the entire database after renaming Cartoonia..." >> $SEARCHOUT
269 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
270         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
271 RC=$?
272 if test $RC != 0 ; then
273         echo "ldapsearch failed ($RC)!"
274         test $KILLSERVERS != no && kill -HUP $KILLPIDS
275         exit $RC
276 fi
277
278 echo "Running ldapmodify to add self..."
279 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
280         -D "cn=Manager,$BASEDN" -w secret \
281         >> $TESTOUT 2>&1 << EOF
282 dn: cn=Toon Town,ou=Groups,$BASEDN
283 changetype: modify
284 add: member
285 member: cn=Toon Town,ou=Groups,$BASEDN
286 EOF
287
288 echo "Re-search the entire database..."
289 echo "# Re-search the entire database after adding Toon Town to self..." >> $SEARCHOUT
290 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
291         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
292 RC=$?
293 if test $RC != 0 ; then
294         echo "ldapsearch failed ($RC)!"
295         test $KILLSERVERS != no && kill -HUP $KILLPIDS
296         exit $RC
297 fi
298
299 echo "Running ldapdelete to remove a member..."
300 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
301         -D "cn=Manager,$BASEDN" -w secret \
302         >> $TESTOUT 2>&1 << EOF
303 dn: cn=Baby Herman Jr,ou=People,$BASEDN
304 changetype: delete
305 EOF
306
307 echo "Re-search the entire database..."
308 echo "# Re-search the entire database after deleting Baby Herman..." >> $SEARCHOUT
309 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
310         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
311 RC=$?
312 if test $RC != 0 ; then
313         echo "ldapsearch failed ($RC)!"
314         test $KILLSERVERS != no && kill -HUP $KILLPIDS
315         exit $RC
316 fi
317
318 echo "Running ldapdelete to remove a group..."
319 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
320         -D "cn=Manager,$BASEDN" -w secret \
321         >> $TESTOUT 2>&1 << EOF
322 dn: cn=Toon Town,ou=Groups,$BASEDN
323 changetype: delete
324 EOF
325
326 echo "Re-search the entire database..."
327 echo "# Re-search the entire database after deleting Toon Town..." >> $SEARCHOUT
328 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
329         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
330 RC=$?
331 if test $RC != 0 ; then
332         echo "ldapsearch failed ($RC)!"
333         test $KILLSERVERS != no && kill -HUP $KILLPIDS
334         exit $RC
335 fi
336
337 echo "Adding groups with MAY member type schemas..."
338 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
339         -D "cn=Manager,$BASEDN" -w secret \
340         >> $TESTOUT 2>&1 <<EOF
341 dn: cn=Roger Rabbit,ou=People,$BASEDN
342 changetype: delete
343
344 dn: cn=Jessica Rabbit,ou=People,$BASEDN
345 changetype: delete
346
347 dn: cn=person1,ou=People,$BASEDN
348 changetype: add
349 objectClass: person
350 objectClass: groupMemberA
351 objectClass: groupMemberB
352 cn: person1
353 sn: person1
354
355 dn: cn=person2,ou=People,$BASEDN
356 changetype: add
357 objectClass: person
358 objectClass: groupMemberA
359 objectClass: groupMemberB
360 cn: person2
361 sn: person2
362
363 dn: cn=group1,ou=Groups,$BASEDN
364 changetype: add
365 objectclass: groupA
366 cn: group1
367 memberA: cn=person1,ou=People,$BASEDN
368 memberA: cn=person2,ou=People,$BASEDN
369
370 dn: cn=group2,ou=Groups,$BASEDN
371 changetype: add
372 objectclass: groupB
373 cn: group2
374 memberB: cn=person1,ou=People,$BASEDN
375 memberB: cn=person2,ou=People,$BASEDN
376
377 dn: cn=group1,ou=Groups,$BASEDN
378 changetype: modify
379 delete: memberA
380
381 EOF
382
383 echo "Re-search the entire database..."
384 echo "# Re-search the entire database after adding groups with MAY member type schemas..." >> $SEARCHOUT
385 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
386         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
387 RC=$?
388 if test $RC != 0 ; then
389         echo "ldapsearch failed ($RC)!"
390         test $KILLSERVERS != no && kill -HUP $KILLPIDS
391         exit $RC
392 fi
393
394 test $KILLSERVERS != no && kill -HUP $KILLPIDS
395
396 LDIF=$MEMBEROFOUT
397
398 echo "Filtering ldapsearch results..."
399 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
400 echo "Filtering original ldif used to create database..."
401 $LDIFFILTER < $LDIF > $LDIFFLT
402 echo "Comparing filter output..."
403 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
404
405 if test $? != 0 ; then
406         echo "Comparison failed"
407         exit 1
408 fi
409
410 echo ">>>>> Test succeeded"
411
412 test $KILLSERVERS != no && wait
413
414 exit 0