]> git.sur5r.net Git - openldap/blob - tests/scripts/test052-memberof
16a6ef1fd684190ac64031de6ffd3a22f8c283b4
[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 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 producer..."
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 bdb_conf=""
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
82 olcDbMode: 384"
83 esac
84
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 )
107
108 dn: olcDatabase={1}$BACKEND,cn=config
109 objectClass: olcDatabaseConfig
110 objectClass: olc${BACKEND}Config
111 olcDatabase: {1}$BACKEND
112 olcSuffix: $BASEDN
113 olcRootDN: cn=Manager,$BASEDN
114 olcRootPW:: c2VjcmV0
115 olcMonitoring: TRUE
116 olcDbDirectory: $TESTDIR/db.1.a/
117 $bdb_conf
118
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
127
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
136
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
145
146 EOF
147 RC=$?
148 if test $RC != 0 ; then
149         echo "ldapadd failed ($RC)!"
150         test $KILLSERVERS != no && kill -HUP $KILLPIDS
151         exit $RC
152 fi
153
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
158 dn: $BASEDN
159 objectClass: organization
160 objectClass: dcObject
161 o: Example, Inc.
162 dc: example
163
164 dn: ou=People,$BASEDN
165 objectClass: organizationalUnit
166 ou: People
167
168 dn: ou=Groups,$BASEDN
169 objectClass: organizationalUnit
170 ou: Groups
171
172 dn: cn=Roger Rabbit,ou=People,$BASEDN
173 objectClass: inetOrgPerson
174 cn: Roger Rabbit
175 sn: Rabbit
176
177 dn: cn=Baby Herman,ou=People,$BASEDN
178 objectClass: inetOrgPerson
179 cn: Baby Herman
180 sn: Herman
181
182 dn: cn=Cartoonia,ou=Groups,$BASEDN
183 objectClass: groupOfNames
184 cn: Cartoonia
185 member: cn=Roger Rabbit,ou=People,$BASEDN
186 member: cn=Baby Herman,ou=People,$BASEDN
187 EOF
188 RC=$?
189 if test $RC != 0 ; then
190         echo "ldapadd failed ($RC)!"
191         test $KILLSERVERS != no && kill -HUP $KILLPIDS
192         exit $RC
193 fi
194
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
199 RC=$?
200 if test $RC != 0 ; then
201         echo "ldapsearch failed ($RC)!"
202         test $KILLSERVERS != no && kill -HUP $KILLPIDS
203         exit $RC
204 fi
205
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
211 changetype: add
212 objectClass: inetOrgPerson
213 cn: Jessica Rabbit
214 sn: Rabbit
215
216 dn: cn=Cartoonia,ou=Groups,$BASEDN
217 changetype: modify
218 add: member
219 member: cn=Jessica Rabbit,ou=People,$BASEDN
220 EOF
221
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
226 RC=$?
227 if test $RC != 0 ; then
228         echo "ldapsearch failed ($RC)!"
229         test $KILLSERVERS != no && kill -HUP $KILLPIDS
230         exit $RC
231 fi
232
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
238 changetype: modify
239 add: member
240 member: cn=Cartoonia,ou=Groups,$BASEDN
241 EOF
242
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
247 RC=$?
248 if test $RC != 0 ; then
249         echo "ldapsearch failed ($RC)!"
250         test $KILLSERVERS != no && kill -HUP $KILLPIDS
251         exit $RC
252 fi
253
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
259 changetype: delete
260 EOF
261
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
266 RC=$?
267 if test $RC != 0 ; then
268         echo "ldapsearch failed ($RC)!"
269         test $KILLSERVERS != no && kill -HUP $KILLPIDS
270         exit $RC
271 fi
272
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
278 changetype: delete
279
280 dn: cn=Jessica Rabbit,ou=People,$BASEDN
281 changetype: delete
282
283 dn: cn=Cartoonia,ou=Groups,$BASEDN
284 changetype: delete
285
286 dn: cn=person1,ou=People,$BASEDN
287 changetype: add
288 objectClass: person
289 objectClass: groupMemberA
290 objectClass: groupMemberB
291 cn: person1
292 sn: person1
293
294 dn: cn=person2,ou=People,$BASEDN
295 changetype: add
296 objectClass: person
297 objectClass: groupMemberA
298 objectClass: groupMemberB
299 cn: person2
300 sn: person2
301
302 dn: cn=group1,ou=Groups,$BASEDN
303 changetype: add
304 objectclass: groupA
305 cn: group1
306 memberA: cn=person1,ou=People,$BASEDN
307 memberA: cn=person2,ou=People,$BASEDN
308
309 dn: cn=group2,ou=Groups,$BASEDN
310 changetype: add
311 objectclass: groupB
312 cn: group2
313 memberB: cn=person1,ou=People,$BASEDN
314 memberB: cn=person2,ou=People,$BASEDN
315
316 dn: cn=group1,ou=Groups,$BASEDN
317 changetype: modify
318 delete: memberA
319
320 EOF
321
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
326 RC=$?
327 if test $RC != 0 ; then
328         echo "ldapsearch failed ($RC)!"
329         test $KILLSERVERS != no && kill -HUP $KILLPIDS
330         exit $RC
331 fi
332
333 test $KILLSERVERS != no && kill -HUP $KILLPIDS
334
335 LDIF=$MEMBEROFOUT
336
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
343
344 if test $? != 0 ; then
345         echo "Comparison failed"
346         exit 1
347 fi
348
349 echo ">>>>> Test succeeded"
350
351 test $KILLSERVERS != no && wait
352
353 exit 0