test089-nestgroup revision 1.1 1 1.1 christos #! /bin/sh
2 1.1 christos # $OpenLDAP$
3 1.1 christos ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 1.1 christos ##
5 1.1 christos ## Copyright 1998-2024 The OpenLDAP Foundation.
6 1.1 christos ## All rights reserved.
7 1.1 christos ##
8 1.1 christos ## Redistribution and use in source and binary forms, with or without
9 1.1 christos ## modification, are permitted only as authorized by the OpenLDAP
10 1.1 christos ## Public License.
11 1.1 christos ##
12 1.1 christos ## A copy of this license is available in the file LICENSE in the
13 1.1 christos ## top-level directory of the distribution or, alternatively, at
14 1.1 christos ## <http://www.OpenLDAP.org/license.html>.
15 1.1 christos
16 1.1 christos echo "running defines.sh"
17 1.1 christos . $SRCDIR/scripts/defines.sh
18 1.1 christos
19 1.1 christos if test $NESTGROUP = nestgroupno; then
20 1.1 christos echo "Nestgroup overlay not available, test skipped"
21 1.1 christos exit 0
22 1.1 christos fi
23 1.1 christos if test $MEMBEROF = memberofno; then
24 1.1 christos echo "Memberof overlay not available, memberof testing disabled"
25 1.1 christos fi
26 1.1 christos
27 1.1 christos mkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir
28 1.1 christos
29 1.1 christos $SLAPPASSWD -g -n >$CONFIGPWF
30 1.1 christos echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
31 1.1 christos
32 1.1 christos echo "Starting slapd on TCP/IP port $PORT1..."
33 1.1 christos . $CONFFILTER $BACKEND < $NAKEDCONF > $CONF1
34 1.1 christos $SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL > $LOG1 2>&1 &
35 1.1 christos PID=$!
36 1.1 christos if test $WAIT != 0 ; then
37 1.1 christos echo PID $PID
38 1.1 christos read foo
39 1.1 christos fi
40 1.1 christos KILLPIDS="$PID"
41 1.1 christos
42 1.1 christos sleep 1
43 1.1 christos for i in 0 1 2 3 4 5; do
44 1.1 christos $LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
45 1.1 christos 'objectclass=*' > /dev/null 2>&1
46 1.1 christos RC=$?
47 1.1 christos if test $RC = 0 ; then
48 1.1 christos break
49 1.1 christos fi
50 1.1 christos echo "Waiting 5 seconds for slapd to start..."
51 1.1 christos sleep 5
52 1.1 christos done
53 1.1 christos if test $RC != 0 ; then
54 1.1 christos echo "ldapsearch failed ($RC)!"
55 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
56 1.1 christos exit $RC
57 1.1 christos fi
58 1.1 christos
59 1.1 christos cat /dev/null > $TESTOUT
60 1.1 christos
61 1.1 christos if [ "$NESTGROUP" = nestgroupmod ]; then
62 1.1 christos echo "Inserting nestgroup overlay on provider..."
63 1.1 christos $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
64 1.1 christos dn: cn=module,cn=config
65 1.1 christos objectClass: olcModuleList
66 1.1 christos cn: module
67 1.1 christos olcModulePath: ../servers/slapd/overlays
68 1.1 christos olcModuleLoad: nestgroup.la
69 1.1 christos EOF
70 1.1 christos RC=$?
71 1.1 christos if test $RC != 0 ; then
72 1.1 christos echo "ldapadd failed for moduleLoad ($RC)!"
73 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
74 1.1 christos exit $RC
75 1.1 christos fi
76 1.1 christos fi
77 1.1 christos
78 1.1 christos indexInclude="" mainInclude="" nullExclude=""
79 1.1 christos test $INDEXDB = indexdb || indexInclude="# "
80 1.1 christos test $MAINDB = maindb || mainInclude="# "
81 1.1 christos case $BACKEND in
82 1.1 christos null) nullExclude="# " ;;
83 1.1 christos esac
84 1.1 christos
85 1.1 christos echo "Running ldapadd to build slapd config database..."
86 1.1 christos $LDAPADD -H $URI1 -D 'cn=config' -w `cat $CONFIGPWF` \
87 1.1 christos >> $TESTOUT 2>&1 <<EOF
88 1.1 christos dn: olcDatabase={1}$BACKEND,cn=config
89 1.1 christos objectClass: olcDatabaseConfig
90 1.1 christos ${nullExclude}objectClass: olc${BACKEND}Config
91 1.1 christos olcDatabase: {1}$BACKEND
92 1.1 christos olcSuffix: $BASEDN
93 1.1 christos olcRootDN: cn=Manager,$BASEDN
94 1.1 christos olcRootPW:: c2VjcmV0
95 1.1 christos olcMonitoring: TRUE
96 1.1 christos ${nullExclude}olcDbDirectory: $TESTDIR/db.1.a/
97 1.1 christos ${indexInclude}olcDbIndex: objectClass eq
98 1.1 christos ${indexInclude}olcDbIndex: cn pres,eq,sub
99 1.1 christos ${indexInclude}olcDbIndex: uid pres,eq,sub
100 1.1 christos ${indexInclude}olcDbIndex: sn pres,eq,sub
101 1.1 christos ${indexInclude}olcDbIndex: member,memberOf eq
102 1.1 christos ${mainInclude}olcDbMode: 384"
103 1.1 christos
104 1.1 christos dn: olcOverlay={0}nestgroup,olcDatabase={1}$BACKEND,cn=config
105 1.1 christos objectClass: olcOverlayConfig
106 1.1 christos objectClass: olcNestGroupConfig
107 1.1 christos olcOverlay: {0}nestgroup
108 1.1 christos olcNestgroupMember: member
109 1.1 christos olcNestgroupMemberOf: memberOf
110 1.1 christos olcNestgroupBase: ou=Groups,$BASEDN
111 1.1 christos
112 1.1 christos EOF
113 1.1 christos RC=$?
114 1.1 christos if test $RC != 0 ; then
115 1.1 christos echo "ldapadd failed ($RC)!"
116 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
117 1.1 christos exit $RC
118 1.1 christos fi
119 1.1 christos
120 1.1 christos echo "Running ldapadd to build slapd database..."
121 1.1 christos $LDAPADD -H $URI1 \
122 1.1 christos -D "cn=Manager,$BASEDN" -w secret \
123 1.1 christos >> $TESTOUT 2>&1 << EOF
124 1.1 christos dn: $BASEDN
125 1.1 christos objectClass: organization
126 1.1 christos objectClass: dcObject
127 1.1 christos o: Example, Inc.
128 1.1 christos dc: example
129 1.1 christos
130 1.1 christos dn: ou=People,$BASEDN
131 1.1 christos objectClass: organizationalUnit
132 1.1 christos ou: People
133 1.1 christos
134 1.1 christos dn: ou=Groups,$BASEDN
135 1.1 christos objectClass: organizationalUnit
136 1.1 christos ou: Groups
137 1.1 christos
138 1.1 christos dn: cn=Roger Rabbit,ou=People,$BASEDN
139 1.1 christos objectClass: inetOrgPerson
140 1.1 christos cn: Roger Rabbit
141 1.1 christos sn: Rabbit
142 1.1 christos
143 1.1 christos dn: cn=Baby Herman,ou=People,$BASEDN
144 1.1 christos objectClass: inetOrgPerson
145 1.1 christos cn: Baby Herman
146 1.1 christos sn: Herman
147 1.1 christos
148 1.1 christos dn: cn=Jessica Rabbit,ou=People,$BASEDN
149 1.1 christos objectClass: inetOrgPerson
150 1.1 christos cn: Jessica Rabbit
151 1.1 christos sn: Rabbit
152 1.1 christos
153 1.1 christos dn: cn=Bugs Bunny,ou=People,$BASEDN
154 1.1 christos objectClass: inetOrgPerson
155 1.1 christos cn: Bugs Bunny
156 1.1 christos sn: Bunny
157 1.1 christos
158 1.1 christos dn: cn=Daffy Duck,ou=People,$BASEDN
159 1.1 christos objectClass: inetOrgPerson
160 1.1 christos cn: Daffy Duck
161 1.1 christos sn: Duck
162 1.1 christos
163 1.1 christos dn: cn=Elmer Fudd,ou=People,$BASEDN
164 1.1 christos objectClass: inetOrgPerson
165 1.1 christos cn: Elmer Fudd
166 1.1 christos sn: Fudd
167 1.1 christos
168 1.1 christos dn: cn=Yosemite Sam,ou=People,$BASEDN
169 1.1 christos objectClass: inetOrgPerson
170 1.1 christos cn: Yosemite Sam
171 1.1 christos sn: Sam
172 1.1 christos
173 1.1 christos dn: cn=Foghorn Leghorn,ou=People,$BASEDN
174 1.1 christos objectClass: inetOrgPerson
175 1.1 christos cn: Foghorn Leghorn
176 1.1 christos sn: Leghorn
177 1.1 christos
178 1.1 christos dn: cn=Wile E. Coyote,ou=People,$BASEDN
179 1.1 christos objectClass: inetOrgPerson
180 1.1 christos cn: Wile E. Coyote
181 1.1 christos sn: Coyote
182 1.1 christos
183 1.1 christos dn: cn=Road Runner,ou=People,$BASEDN
184 1.1 christos objectClass: inetOrgPerson
185 1.1 christos cn: Road Runner
186 1.1 christos sn: Runner
187 1.1 christos
188 1.1 christos dn: cn=Tweety Bird,ou=People,$BASEDN
189 1.1 christos objectClass: inetOrgPerson
190 1.1 christos cn: Tweety Bird
191 1.1 christos sn: Bird
192 1.1 christos
193 1.1 christos dn: cn=Porky Pig,ou=People,$BASEDN
194 1.1 christos objectClass: inetOrgPerson
195 1.1 christos cn: Porky Pig
196 1.1 christos sn: Pig
197 1.1 christos
198 1.1 christos dn: cn=Tom Riddle,ou=People,$BASEDN
199 1.1 christos objectClass: inetOrgPerson
200 1.1 christos cn: Tom Riddle
201 1.1 christos sn: Riddle
202 1.1 christos
203 1.1 christos dn: cn=Rabbits,ou=Groups,$BASEDN
204 1.1 christos objectClass: groupOfNames
205 1.1 christos cn: Rabbits
206 1.1 christos member: cn=Roger Rabbit,ou=People,$BASEDN
207 1.1 christos member: cn=Jessica Rabbit,ou=People,$BASEDN
208 1.1 christos
209 1.1 christos dn: cn=Leporidae,ou=Groups,$BASEDN
210 1.1 christos objectClass: groupOfNames
211 1.1 christos cn: Leporidae
212 1.1 christos member: cn=Bugs Bunny,ou=People,$BASEDN
213 1.1 christos member: cn=Rabbits,ou=Groups,$BASEDN
214 1.1 christos
215 1.1 christos dn: cn=A-M,ou=Groups,$BASEDN
216 1.1 christos objectClass: groupOfNames
217 1.1 christos cn: A-M
218 1.1 christos member: cn=Baby Herman,ou=People,$BASEDN
219 1.1 christos member: cn=Bugs Bunny,ou=People,$BASEDN
220 1.1 christos member: cn=Daffy Duck,ou=People,$BASEDN
221 1.1 christos member: cn=Elmer Fudd,ou=People,$BASEDN
222 1.1 christos member: cn=Foghorn Leghorn,ou=People,$BASEDN
223 1.1 christos member: cn=Jessica Rabbit,ou=People,$BASEDN
224 1.1 christos
225 1.1 christos dn: cn=N-Z,ou=Groups,$BASEDN
226 1.1 christos objectClass: groupOfNames
227 1.1 christos cn: N-Z
228 1.1 christos member: cn=Porky Pig,ou=People,$BASEDN
229 1.1 christos member: cn=Road Runner,ou=People,$BASEDN
230 1.1 christos member: cn=Roger Rabbit,ou=People,$BASEDN
231 1.1 christos member: cn=Tweety Bird,ou=People,$BASEDN
232 1.1 christos member: cn=Wile E. Coyote,ou=People,$BASEDN
233 1.1 christos member: cn=Yosemite Sam,ou=People,$BASEDN
234 1.1 christos
235 1.1 christos dn: cn=Humans,ou=Groups,$BASEDN
236 1.1 christos objectClass: groupOfNames
237 1.1 christos cn: Humans
238 1.1 christos member: cn=Elmer Fudd,ou=People,$BASEDN
239 1.1 christos member: cn=Yosemite Sam,ou=People,$BASEDN
240 1.1 christos
241 1.1 christos dn: cn=Looney Tunes,ou=Groups,$BASEDN
242 1.1 christos objectClass: groupOfNames
243 1.1 christos cn: Looney Tunes
244 1.1 christos member: cn=Porky Pig,ou=People,$BASEDN
245 1.1 christos member: cn=Daffy Duck,ou=People,$BASEDN
246 1.1 christos member: cn=Elmer Fudd,ou=People,$BASEDN
247 1.1 christos member: cn=Bugs Bunny,ou=People,$BASEDN
248 1.1 christos member: cn=Tweety Bird,ou=People,$BASEDN
249 1.1 christos
250 1.1 christos dn: cn=Desert Foes,ou=Groups,$BASEDN
251 1.1 christos objectClass: groupOfNames
252 1.1 christos cn: Desert Foes
253 1.1 christos member: cn=Road Runner,ou=People,$BASEDN
254 1.1 christos member: cn=Wile E. Coyote,ou=People,$BASEDN
255 1.1 christos
256 1.1 christos dn: cn=Mixer1,ou=Groups,$BASEDN
257 1.1 christos objectClass: groupOfNames
258 1.1 christos cn: Mixer1
259 1.1 christos member: cn=Leporidae,ou=Groups,$BASEDN
260 1.1 christos member: cn=Desert Foes,ou=Groups,$BASEDN
261 1.1 christos member: cn=Foghorn Leghorn,ou=People,$BASEDN
262 1.1 christos
263 1.1 christos dn: cn=Mixer2,ou=Groups,$BASEDN
264 1.1 christos objectClass: groupOfNames
265 1.1 christos cn: Mixer2
266 1.1 christos member: cn=Humans,ou=Groups,$BASEDN
267 1.1 christos member: cn=Baby Herman,ou=People,$BASEDN
268 1.1 christos
269 1.1 christos dn: cn=Mixer3,ou=Groups,$BASEDN
270 1.1 christos objectClass: groupOfNames
271 1.1 christos cn: Mixer3
272 1.1 christos member: cn=Desert Foes,ou=Groups,$BASEDN
273 1.1 christos member: cn=Porky Pig,ou=People,$BASEDN
274 1.1 christos
275 1.1 christos dn: cn=Mixer4,ou=Groups,$BASEDN
276 1.1 christos objectClass: groupOfNames
277 1.1 christos cn: Mixer4
278 1.1 christos member: cn=Mixer1,ou=Groups,$BASEDN
279 1.1 christos member: cn=Mixer2,ou=Groups,$BASEDN
280 1.1 christos member: cn=Foghorn Leghorn,ou=People,$BASEDN
281 1.1 christos
282 1.1 christos dn: cn=Mixer5,ou=Groups,$BASEDN
283 1.1 christos objectClass: groupOfNames
284 1.1 christos cn: Mixer5
285 1.1 christos member: cn=Mixer2,ou=Groups,$BASEDN
286 1.1 christos member: cn=Mixer3,ou=Groups,$BASEDN
287 1.1 christos member: cn=A-M,ou=Groups,$BASEDN
288 1.1 christos
289 1.1 christos dn: cn=Endless Loop,ou=Groups,$BASEDN
290 1.1 christos objectClass: groupOfNames
291 1.1 christos cn: Endless Loop
292 1.1 christos member: cn=Road Runner,ou=People,$BASEDN
293 1.1 christos member: cn=Loop\, Endless,ou=Groups,$BASEDN
294 1.1 christos
295 1.1 christos dn: cn=Loop\, Endless,ou=Groups,$BASEDN
296 1.1 christos objectClass: groupOfNames
297 1.1 christos cn: Loop, Endless
298 1.1 christos member: cn=Wile E. Coyote,ou=People,$BASEDN
299 1.1 christos member: cn=Endless Loop,ou=Groups,$BASEDN
300 1.1 christos
301 1.1 christos dn: cn=Strays,ou=Groups,$BASEDN
302 1.1 christos objectClass: groupOfNames
303 1.1 christos cn: Strays
304 1.1 christos member: cn=Tom Riddle,ou=People,$BASEDN
305 1.1 christos
306 1.1 christos EOF
307 1.1 christos RC=$?
308 1.1 christos if test $RC != 0 ; then
309 1.1 christos echo "ldapadd failed ($RC)!"
310 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
311 1.1 christos exit $RC
312 1.1 christos fi
313 1.1 christos
314 1.1 christos echo "Search the entire database..."
315 1.1 christos echo "# Search the entire database..." > $SEARCHOUT
316 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
317 1.1 christos '(objectClass=*)' '*' >> $SEARCHOUT 2>&1
318 1.1 christos RC=$?
319 1.1 christos if test $RC != 0 ; then
320 1.1 christos echo "ldapsearch failed ($RC)!"
321 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
322 1.1 christos exit $RC
323 1.1 christos fi
324 1.1 christos
325 1.1 christos echo "Search for member=cn=Bugs Bunny..."
326 1.1 christos echo "# Search for member=cn=Bugs Bunny..." >> $SEARCHOUT
327 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
328 1.1 christos "(member=cn=Bugs Bunny,ou=People,$BASEDN)" '*' memberof >> $SEARCHOUT 2>&1
329 1.1 christos RC=$?
330 1.1 christos if test $RC != 0 ; then
331 1.1 christos echo "ldapsearch failed ($RC)!"
332 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
333 1.1 christos exit $RC
334 1.1 christos fi
335 1.1 christos
336 1.1 christos echo "Search for non-nested member=cn=Tom Riddle..."
337 1.1 christos echo "# Search for non-nested member=cn=Tom Riddle..." >> $SEARCHOUT
338 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
339 1.1 christos "(member=cn=Tom Riddle,ou=People,$BASEDN)" '*' memberof >> $SEARCHOUT 2>&1
340 1.1 christos RC=$?
341 1.1 christos if test $RC != 0 ; then
342 1.1 christos echo "ldapsearch failed ($RC)!"
343 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
344 1.1 christos exit $RC
345 1.1 christos fi
346 1.1 christos
347 1.1 christos echo "Running ldapmodify to enable nested member filter..."
348 1.1 christos $LDAPMODIFY -H $URI1 -D 'cn=config' -w `cat $CONFIGPWF` \
349 1.1 christos >> $TESTOUT 2>&1 <<EOF
350 1.1 christos dn: olcOverlay={0}nestgroup,olcDatabase={1}$BACKEND,cn=config
351 1.1 christos changetype: modify
352 1.1 christos replace: olcNestgroupFlags
353 1.1 christos olcNestgroupFlags: member-filter
354 1.1 christos
355 1.1 christos EOF
356 1.1 christos RC=$?
357 1.1 christos if test $RC != 0 ; then
358 1.1 christos echo "ldapmodify failed ($RC)!"
359 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
360 1.1 christos exit $RC
361 1.1 christos fi
362 1.1 christos
363 1.1 christos echo "Re-search for nested member=cn=Bugs Bunny..."
364 1.1 christos echo "# Re-search for nested member=cn=Bugs Bunny..." >> $SEARCHOUT
365 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
366 1.1 christos "(member=cn=Bugs Bunny,ou=People,$BASEDN)" '*' memberof >> $SEARCHOUT 2>&1
367 1.1 christos RC=$?
368 1.1 christos if test $RC != 0 ; then
369 1.1 christos echo "ldapsearch failed ($RC)!"
370 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
371 1.1 christos exit $RC
372 1.1 christos fi
373 1.1 christos
374 1.1 christos echo "Re-search for non-nested member=cn=Tom Riddle..."
375 1.1 christos echo "# Re-search for non-nested member=cn=Tom Riddle..." >> $SEARCHOUT
376 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
377 1.1 christos "(member=cn=Tom Riddle,ou=People,$BASEDN)" '*' memberof >> $SEARCHOUT 2>&1
378 1.1 christos RC=$?
379 1.1 christos if test $RC != 0 ; then
380 1.1 christos echo "ldapsearch failed ($RC)!"
381 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
382 1.1 christos exit $RC
383 1.1 christos fi
384 1.1 christos
385 1.1 christos echo "Running ldapmodify to enable nested member values..."
386 1.1 christos $LDAPMODIFY -H $URI1 -D 'cn=config' -w `cat $CONFIGPWF` \
387 1.1 christos >> $TESTOUT 2>&1 <<EOF
388 1.1 christos dn: olcOverlay={0}nestgroup,olcDatabase={1}$BACKEND,cn=config
389 1.1 christos changetype: modify
390 1.1 christos replace: olcNestgroupFlags
391 1.1 christos olcNestgroupFlags: member-values
392 1.1 christos
393 1.1 christos EOF
394 1.1 christos RC=$?
395 1.1 christos if test $RC != 0 ; then
396 1.1 christos echo "ldapmodify failed ($RC)!"
397 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
398 1.1 christos exit $RC
399 1.1 christos fi
400 1.1 christos
401 1.1 christos echo "Search the expanded groups..."
402 1.1 christos echo "# Search the expanded groups..." >> $SEARCHOUT
403 1.1 christos $LDAPSEARCH -S "" -b "ou=Groups,$BASEDN" -H $URI1 \
404 1.1 christos '(objectClass=*)' '*' memberof >> $SEARCHOUT 2>&1
405 1.1 christos RC=$?
406 1.1 christos if test $RC != 0 ; then
407 1.1 christos echo "ldapsearch failed ($RC)!"
408 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
409 1.1 christos exit $RC
410 1.1 christos fi
411 1.1 christos
412 1.1 christos LDIF=$NESTGROUPOUT1
413 1.1 christos
414 1.1 christos echo "Filtering ldapsearch results..."
415 1.1 christos $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
416 1.1 christos echo "Filtering original ldif used to create database..."
417 1.1 christos $LDIFFILTER < $LDIF > $LDIFFLT
418 1.1 christos echo "Comparing filter output..."
419 1.1 christos $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
420 1.1 christos
421 1.1 christos if test $? != 0 ; then
422 1.1 christos echo "Comparison failed"
423 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
424 1.1 christos exit 1
425 1.1 christos fi
426 1.1 christos
427 1.1 christos echo ">>>>> Test succeeded (first half)"
428 1.1 christos
429 1.1 christos if [ "$MEMBEROF" = memberofno ]; then
430 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
431 1.1 christos
432 1.1 christos test $KILLSERVERS != no && wait
433 1.1 christos
434 1.1 christos exit 0
435 1.1 christos fi
436 1.1 christos
437 1.1 christos echo "Adding memberof overlay to database configuration..."
438 1.1 christos
439 1.1 christos if [ "$MEMBEROF" = memberofmod ]; then
440 1.1 christos echo "Inserting memberof module on provider..."
441 1.1 christos $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
442 1.1 christos dn: cn=module,cn=config
443 1.1 christos objectClass: olcModuleList
444 1.1 christos cn: module
445 1.1 christos olcModulePath: ../servers/slapd/overlays
446 1.1 christos olcModuleLoad: memberof.la
447 1.1 christos EOF
448 1.1 christos RC=$?
449 1.1 christos if test $RC != 0 ; then
450 1.1 christos echo "ldapadd failed for moduleLoad ($RC)!"
451 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
452 1.1 christos exit $RC
453 1.1 christos fi
454 1.1 christos fi
455 1.1 christos
456 1.1 christos $LDAPADD -H $URI1 -D 'cn=config' -w `cat $CONFIGPWF` \
457 1.1 christos >> $TESTOUT 2>&1 <<EOF
458 1.1 christos dn: olcOverlay={1}memberof,olcDatabase={1}$BACKEND,cn=config
459 1.1 christos objectClass: olcOverlayConfig
460 1.1 christos objectClass: olcMemberofConfig
461 1.1 christos olcOverlay: {1}memberof
462 1.1 christos olcMemberOfGroupOC: groupOfNames
463 1.1 christos olcMemberOfMemberAD: member
464 1.1 christos olcMemberOfMemberOfAD: memberOf
465 1.1 christos
466 1.1 christos EOF
467 1.1 christos RC=$?
468 1.1 christos if test $RC != 0 ; then
469 1.1 christos echo "ldapadd failed ($RC)!"
470 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
471 1.1 christos exit $RC
472 1.1 christos fi
473 1.1 christos
474 1.1 christos echo "Recreating group entries to set memberof values..."
475 1.1 christos $LDAPMODIFY -H $URI1 \
476 1.1 christos -D "cn=Manager,$BASEDN" -w secret \
477 1.1 christos >> $TESTOUT 2>&1 <<EOF
478 1.1 christos dn: cn=Rabbits,ou=Groups,$BASEDN
479 1.1 christos changetype: modify
480 1.1 christos replace: member
481 1.1 christos member: cn=Roger Rabbit,ou=People,$BASEDN
482 1.1 christos member: cn=Jessica Rabbit,ou=People,$BASEDN
483 1.1 christos
484 1.1 christos dn: cn=Leporidae,ou=Groups,$BASEDN
485 1.1 christos changetype: modify
486 1.1 christos replace: member
487 1.1 christos member: cn=Bugs Bunny,ou=People,$BASEDN
488 1.1 christos member: cn=Rabbits,ou=Groups,$BASEDN
489 1.1 christos
490 1.1 christos dn: cn=A-M,ou=Groups,$BASEDN
491 1.1 christos changetype: modify
492 1.1 christos replace: member
493 1.1 christos member: cn=Baby Herman,ou=People,$BASEDN
494 1.1 christos member: cn=Bugs Bunny,ou=People,$BASEDN
495 1.1 christos member: cn=Daffy Duck,ou=People,$BASEDN
496 1.1 christos member: cn=Elmer Fudd,ou=People,$BASEDN
497 1.1 christos member: cn=Foghorn Leghorn,ou=People,$BASEDN
498 1.1 christos member: cn=Jessica Rabbit,ou=People,$BASEDN
499 1.1 christos
500 1.1 christos dn: cn=N-Z,ou=Groups,$BASEDN
501 1.1 christos changetype: modify
502 1.1 christos replace: member
503 1.1 christos member: cn=Porky Pig,ou=People,$BASEDN
504 1.1 christos member: cn=Road Runner,ou=People,$BASEDN
505 1.1 christos member: cn=Roger Rabbit,ou=People,$BASEDN
506 1.1 christos member: cn=Tweety Bird,ou=People,$BASEDN
507 1.1 christos member: cn=Wile E. Coyote,ou=People,$BASEDN
508 1.1 christos member: cn=Yosemite Sam,ou=People,$BASEDN
509 1.1 christos
510 1.1 christos dn: cn=Humans,ou=Groups,$BASEDN
511 1.1 christos changetype: modify
512 1.1 christos replace: member
513 1.1 christos member: cn=Elmer Fudd,ou=People,$BASEDN
514 1.1 christos member: cn=Yosemite Sam,ou=People,$BASEDN
515 1.1 christos
516 1.1 christos dn: cn=Looney Tunes,ou=Groups,$BASEDN
517 1.1 christos changetype: modify
518 1.1 christos replace: member
519 1.1 christos member: cn=Porky Pig,ou=People,$BASEDN
520 1.1 christos member: cn=Daffy Duck,ou=People,$BASEDN
521 1.1 christos member: cn=Elmer Fudd,ou=People,$BASEDN
522 1.1 christos member: cn=Bugs Bunny,ou=People,$BASEDN
523 1.1 christos member: cn=Tweety Bird,ou=People,$BASEDN
524 1.1 christos
525 1.1 christos dn: cn=Desert Foes,ou=Groups,$BASEDN
526 1.1 christos changetype: modify
527 1.1 christos replace: member
528 1.1 christos member: cn=Road Runner,ou=People,$BASEDN
529 1.1 christos member: cn=Wile E. Coyote,ou=People,$BASEDN
530 1.1 christos
531 1.1 christos dn: cn=Mixer1,ou=Groups,$BASEDN
532 1.1 christos changetype: modify
533 1.1 christos replace: member
534 1.1 christos member: cn=Leporidae,ou=Groups,$BASEDN
535 1.1 christos member: cn=Desert Foes,ou=Groups,$BASEDN
536 1.1 christos member: cn=Foghorn Leghorn,ou=People,$BASEDN
537 1.1 christos
538 1.1 christos dn: cn=Mixer2,ou=Groups,$BASEDN
539 1.1 christos changetype: modify
540 1.1 christos replace: member
541 1.1 christos member: cn=Humans,ou=Groups,$BASEDN
542 1.1 christos member: cn=Baby Herman,ou=People,$BASEDN
543 1.1 christos
544 1.1 christos dn: cn=Mixer3,ou=Groups,$BASEDN
545 1.1 christos changetype: modify
546 1.1 christos replace: member
547 1.1 christos member: cn=Desert Foes,ou=Groups,$BASEDN
548 1.1 christos member: cn=Porky Pig,ou=People,$BASEDN
549 1.1 christos
550 1.1 christos dn: cn=Mixer4,ou=Groups,$BASEDN
551 1.1 christos changetype: modify
552 1.1 christos replace: member
553 1.1 christos member: cn=Mixer1,ou=Groups,$BASEDN
554 1.1 christos member: cn=Mixer2,ou=Groups,$BASEDN
555 1.1 christos member: cn=Foghorn Leghorn,ou=People,$BASEDN
556 1.1 christos
557 1.1 christos dn: cn=Mixer5,ou=Groups,$BASEDN
558 1.1 christos changetype: modify
559 1.1 christos replace: member
560 1.1 christos member: cn=Mixer2,ou=Groups,$BASEDN
561 1.1 christos member: cn=Mixer3,ou=Groups,$BASEDN
562 1.1 christos member: cn=A-M,ou=Groups,$BASEDN
563 1.1 christos
564 1.1 christos dn: cn=Endless Loop,ou=Groups,$BASEDN
565 1.1 christos changetype: modify
566 1.1 christos replace: member
567 1.1 christos member: cn=Road Runner,ou=People,$BASEDN
568 1.1 christos member: cn=Loop\, Endless,ou=Groups,$BASEDN
569 1.1 christos
570 1.1 christos dn: cn=Loop\, Endless,ou=Groups,$BASEDN
571 1.1 christos changetype: modify
572 1.1 christos replace: member
573 1.1 christos member: cn=Wile E. Coyote,ou=People,$BASEDN
574 1.1 christos member: cn=Endless Loop,ou=Groups,$BASEDN
575 1.1 christos
576 1.1 christos dn: cn=Strays,ou=Groups,$BASEDN
577 1.1 christos changetype: modify
578 1.1 christos replace: member
579 1.1 christos member: cn=Tom Riddle,ou=People,$BASEDN
580 1.1 christos
581 1.1 christos EOF
582 1.1 christos RC=$?
583 1.1 christos if test $RC != 0 ; then
584 1.1 christos echo "ldapmodify failed ($RC)!"
585 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
586 1.1 christos exit $RC
587 1.1 christos fi
588 1.1 christos
589 1.1 christos echo "Moving previous results to $SEARCHOUT.0"
590 1.1 christos mv $SEARCHOUT $SEARCHOUT.0
591 1.1 christos
592 1.1 christos echo "Re-search the entire database..."
593 1.1 christos echo "# Re-search the entire database after adding memberof configuration..." >> $SEARCHOUT
594 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
595 1.1 christos '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
596 1.1 christos RC=$?
597 1.1 christos if test $RC != 0 ; then
598 1.1 christos echo "ldapsearch failed ($RC)!"
599 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
600 1.1 christos exit $RC
601 1.1 christos fi
602 1.1 christos
603 1.1 christos echo "Search for memberOf=cn=Mixer3..."
604 1.1 christos echo "# Search for memberOf=cn=Mixer3..." >> $SEARCHOUT
605 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
606 1.1 christos "(memberOf=cn=Mixer3,ou=Groups,$BASEDN)" '*' memberof >> $SEARCHOUT 2>&1
607 1.1 christos RC=$?
608 1.1 christos if test $RC != 0 ; then
609 1.1 christos echo "ldapsearch failed ($RC)!"
610 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
611 1.1 christos exit $RC
612 1.1 christos fi
613 1.1 christos
614 1.1 christos echo "Running ldapmodify to enable nested memberOf filter..."
615 1.1 christos $LDAPMODIFY -H $URI1 -D 'cn=config' -w `cat $CONFIGPWF` \
616 1.1 christos >> $TESTOUT 2>&1 <<EOF
617 1.1 christos dn: olcOverlay={0}nestgroup,olcDatabase={1}$BACKEND,cn=config
618 1.1 christos changetype: modify
619 1.1 christos replace: olcNestgroupFlags
620 1.1 christos olcNestgroupFlags: memberof-filter
621 1.1 christos
622 1.1 christos EOF
623 1.1 christos RC=$?
624 1.1 christos if test $RC != 0 ; then
625 1.1 christos echo "ldapmodify failed ($RC)!"
626 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
627 1.1 christos exit $RC
628 1.1 christos fi
629 1.1 christos
630 1.1 christos echo "Re-search for memberOf=cn=Mixer3 with filter nesting..."
631 1.1 christos echo "# Re-search for memberOf=cn=Mixer3 with filter nesting..." >> $SEARCHOUT
632 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
633 1.1 christos "(memberOf=cn=Mixer3,ou=Groups,$BASEDN)" '*' memberof >> $SEARCHOUT 2>&1
634 1.1 christos RC=$?
635 1.1 christos if test $RC != 0 ; then
636 1.1 christos echo "ldapsearch failed ($RC)!"
637 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
638 1.1 christos exit $RC
639 1.1 christos fi
640 1.1 christos
641 1.1 christos echo "Running ldapmodify to also enable nested memberOf values..."
642 1.1 christos $LDAPMODIFY -H $URI1 -D 'cn=config' -w `cat $CONFIGPWF` \
643 1.1 christos >> $TESTOUT 2>&1 <<EOF
644 1.1 christos dn: olcOverlay={0}nestgroup,olcDatabase={1}$BACKEND,cn=config
645 1.1 christos changetype: modify
646 1.1 christos add: olcNestgroupFlags
647 1.1 christos olcNestgroupFlags: memberof-values
648 1.1 christos
649 1.1 christos EOF
650 1.1 christos RC=$?
651 1.1 christos if test $RC != 0 ; then
652 1.1 christos echo "ldapmodify failed ($RC)!"
653 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
654 1.1 christos exit $RC
655 1.1 christos fi
656 1.1 christos
657 1.1 christos echo "Re-search for memberOf=cn=Mixer3 with filter and value nesting..."
658 1.1 christos echo "# Re-search for memberOf=cn=Mixer3 with filter and value nesting..." >> $SEARCHOUT
659 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
660 1.1 christos "(memberOf=cn=Mixer3,ou=Groups,$BASEDN)" '*' memberof >> $SEARCHOUT 2>&1
661 1.1 christos RC=$?
662 1.1 christos if test $RC != 0 ; then
663 1.1 christos echo "ldapsearch failed ($RC)!"
664 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
665 1.1 christos exit $RC
666 1.1 christos fi
667 1.1 christos
668 1.1 christos echo "Re-search the entire database with memberof value nesting..."
669 1.1 christos echo "# Re-search the entire database with memberof value nesting..." >> $SEARCHOUT
670 1.1 christos $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
671 1.1 christos '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
672 1.1 christos RC=$?
673 1.1 christos if test $RC != 0 ; then
674 1.1 christos echo "ldapsearch failed ($RC)!"
675 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
676 1.1 christos exit $RC
677 1.1 christos fi
678 1.1 christos
679 1.1 christos test $KILLSERVERS != no && kill -HUP $KILLPIDS
680 1.1 christos
681 1.1 christos LDIF=$NESTGROUPOUT2
682 1.1 christos
683 1.1 christos echo "Filtering ldapsearch results..."
684 1.1 christos $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
685 1.1 christos echo "Filtering original ldif used to create database..."
686 1.1 christos $LDIFFILTER < $LDIF > $LDIFFLT
687 1.1 christos echo "Comparing filter output..."
688 1.1 christos $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
689 1.1 christos
690 1.1 christos if test $? != 0 ; then
691 1.1 christos echo "Comparison failed"
692 1.1 christos exit 1
693 1.1 christos fi
694 1.1 christos
695 1.1 christos echo ">>>>> Test succeeded"
696 1.1 christos
697 1.1 christos test $KILLSERVERS != no && wait
698 1.1 christos
699 1.1 christos exit 0
700