]> git.sur5r.net Git - openldap/blob - tests/scripts/test052-memberof
22a45d2686504902491e736aae2242b67eb29ee9
[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 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 )
97
98 dn: olcDatabase={1}$BACKEND,cn=config
99 objectClass: olcDatabaseConfig
100 objectClass: olc${BACKEND}Config
101 olcDatabase: {1}$BACKEND
102 olcSuffix: $BASEDN
103 olcRootDN: cn=Manager,$BASEDN
104 olcRootPW:: c2VjcmV0
105 olcMonitoring: TRUE
106 olcDbDirectory: $TESTDIR/db.1.a/
107 olcDbCacheSize: 1000
108 olcDbIndex: objectClass eq
109 olcDbIndex: cn pres,eq,sub
110 olcDbIndex: uid pres,eq,sub
111 olcDbIndex: sn pres,eq,sub
112 olcDbMode: 384
113
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
122
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
131
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
140
141 EOF
142 RC=$?
143 if test $RC != 0 ; then
144         echo "ldapadd failed ($RC)!"
145         test $KILLSERVERS != no && kill -HUP $KILLPIDS
146         exit $RC
147 fi
148
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
153 dn: $BASEDN
154 objectClass: organization
155 objectClass: dcObject
156 o: Example, Inc.
157 dc: example
158
159 dn: ou=People,$BASEDN
160 objectClass: organizationalUnit
161 ou: People
162
163 dn: ou=Groups,$BASEDN
164 objectClass: organizationalUnit
165 ou: Groups
166
167 dn: cn=Roger Rabbit,ou=People,$BASEDN
168 objectClass: inetOrgPerson
169 cn: Roger Rabbit
170 sn: Rabbit
171
172 dn: cn=Baby Herman,ou=People,$BASEDN
173 objectClass: inetOrgPerson
174 cn: Baby Herman
175 sn: Herman
176
177 dn: cn=Cartoonia,ou=Groups,$BASEDN
178 objectClass: groupOfNames
179 cn: Cartoonia
180 member: cn=Roger Rabbit,ou=People,$BASEDN
181 member: cn=Baby Herman,ou=People,$BASEDN
182 EOF
183 RC=$?
184 if test $RC != 0 ; then
185         echo "ldapadd failed ($RC)!"
186         test $KILLSERVERS != no && kill -HUP $KILLPIDS
187         exit $RC
188 fi
189
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
194 RC=$?
195 if test $RC != 0 ; then
196         echo "ldapsearch failed ($RC)!"
197         test $KILLSERVERS != no && kill -HUP $KILLPIDS
198         exit $RC
199 fi
200
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
206 changetype: add
207 objectClass: inetOrgPerson
208 cn: Jessica Rabbit
209 sn: Rabbit
210
211 dn: cn=Cartoonia,ou=Groups,$BASEDN
212 changetype: modify
213 add: member
214 member: cn=Jessica Rabbit,ou=People,$BASEDN
215 EOF
216
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
221 RC=$?
222 if test $RC != 0 ; then
223         echo "ldapsearch failed ($RC)!"
224         test $KILLSERVERS != no && kill -HUP $KILLPIDS
225         exit $RC
226 fi
227
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
233 changetype: modify
234 add: member
235 member: cn=Cartoonia,ou=Groups,$BASEDN
236 EOF
237
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
242 RC=$?
243 if test $RC != 0 ; then
244         echo "ldapsearch failed ($RC)!"
245         test $KILLSERVERS != no && kill -HUP $KILLPIDS
246         exit $RC
247 fi
248
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
254 changetype: delete
255 EOF
256
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
261 RC=$?
262 if test $RC != 0 ; then
263         echo "ldapsearch failed ($RC)!"
264         test $KILLSERVERS != no && kill -HUP $KILLPIDS
265         exit $RC
266 fi
267
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
273 changetype: delete
274
275 dn: cn=Jessica Rabbit,ou=People,$BASEDN
276 changetype: delete
277
278 dn: cn=Cartoonia,ou=Groups,$BASEDN
279 changetype: delete
280
281 dn: cn=person1,ou=People,$BASEDN
282 changetype: add
283 objectClass: person
284 objectClass: groupMemberA
285 objectClass: groupMemberB
286 cn: person1
287 sn: person1
288
289 dn: cn=person2,ou=People,$BASEDN
290 changetype: add
291 objectClass: person
292 objectClass: groupMemberA
293 objectClass: groupMemberB
294 cn: person2
295 sn: person2
296
297 dn: cn=group1,ou=Groups,$BASEDN
298 changetype: add
299 objectclass: groupA
300 cn: group1
301 memberA: cn=person1,ou=People,$BASEDN
302 memberA: cn=person2,ou=People,$BASEDN
303
304 dn: cn=group2,ou=Groups,$BASEDN
305 changetype: add
306 objectclass: groupB
307 cn: group2
308 memberB: cn=person1,ou=People,$BASEDN
309 memberB: cn=person2,ou=People,$BASEDN
310
311 dn: cn=group1,ou=Groups,$BASEDN
312 changetype: modify
313 delete: memberA
314
315 EOF
316
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
321 RC=$?
322 if test $RC != 0 ; then
323         echo "ldapsearch failed ($RC)!"
324         test $KILLSERVERS != no && kill -HUP $KILLPIDS
325         exit $RC
326 fi
327
328 test $KILLSERVERS != no && kill -HUP $KILLPIDS
329
330 LDIF=$MEMBEROFOUT
331
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
338
339 if test $? != 0 ; then
340         echo "Comparison failed"
341         exit 1
342 fi
343
344 echo ">>>>> Test succeeded"
345
346 test $KILLSERVERS != no && wait
347
348 exit 0