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