3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
5 ## Copyright 1998-2009 The OpenLDAP Foundation.
6 ## All rights reserved.
8 ## Redistribution and use in source and binary forms, with or without
9 ## modification, are permitted only as authorized by the OpenLDAP
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>.
16 echo "running defines.sh"
17 . $SRCDIR/scripts/defines.sh
19 if test $MEMBEROF = memberofno; then
20 echo "Memberof overlay not available, test skipped"
24 if test $BACKEND = null; then
25 echo "$BACKEND backend does not support cn=config, test skipped"
29 mkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir
31 $SLAPPASSWD -g -n >$CONFIGPWF
32 echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
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 &
38 if test $WAIT != 0 ; then
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
49 if test $RC = 0 ; then
52 echo "Waiting 5 seconds for slapd to start..."
55 if test $RC != 0 ; then
56 echo "ldapsearch failed ($RC)!"
57 test $KILLSERVERS != no && kill -HUP $KILLPIDS
61 cat /dev/null > $TESTOUT
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
69 olcModulePath: ../servers/slapd/overlays
70 olcModuleLoad: memberof.la
73 if test $RC != 0 ; then
74 echo "ldapadd failed for moduleLoad ($RC)!"
75 test $KILLSERVERS != no && kill -HUP $KILLPIDS
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
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 )
113 dn: olcDatabase={1}$BACKEND,cn=config
114 objectClass: olcDatabaseConfig
115 objectClass: olc${BACKEND}Config
116 olcDatabase: {1}$BACKEND
118 olcRootDN: cn=Manager,$BASEDN
121 olcDbDirectory: $TESTDIR/db.1.a/
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
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
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
153 if test $RC != 0 ; then
154 echo "ldapadd failed ($RC)!"
155 test $KILLSERVERS != no && kill -HUP $KILLPIDS
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
164 objectClass: organization
165 objectClass: dcObject
169 dn: ou=People,$BASEDN
170 objectClass: organizationalUnit
173 dn: ou=Groups,$BASEDN
174 objectClass: organizationalUnit
177 dn: cn=Roger Rabbit,ou=People,$BASEDN
178 objectClass: inetOrgPerson
182 dn: cn=Baby Herman,ou=People,$BASEDN
183 objectClass: inetOrgPerson
187 dn: cn=Cartoonia,ou=Groups,$BASEDN
188 objectClass: groupOfNames
190 member: cn=Roger Rabbit,ou=People,$BASEDN
191 member: cn=Baby Herman,ou=People,$BASEDN
194 if test $RC != 0 ; then
195 echo "ldapadd failed ($RC)!"
196 test $KILLSERVERS != no && kill -HUP $KILLPIDS
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
205 if test $RC != 0 ; then
206 echo "ldapsearch failed ($RC)!"
207 test $KILLSERVERS != no && kill -HUP $KILLPIDS
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
217 objectClass: inetOrgPerson
221 dn: cn=Cartoonia,ou=Groups,$BASEDN
224 member: cn=Jessica Rabbit,ou=People,$BASEDN
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
232 if test $RC != 0 ; then
233 echo "ldapsearch failed ($RC)!"
234 test $KILLSERVERS != no && kill -HUP $KILLPIDS
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
245 member: cn=Cartoonia,ou=Groups,$BASEDN
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
253 if test $RC != 0 ; then
254 echo "ldapsearch failed ($RC)!"
255 test $KILLSERVERS != no && kill -HUP $KILLPIDS
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
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
272 if test $RC != 0 ; then
273 echo "ldapsearch failed ($RC)!"
274 test $KILLSERVERS != no && kill -HUP $KILLPIDS
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
285 dn: cn=Jessica Rabbit,ou=People,$BASEDN
288 dn: cn=Cartoonia,ou=Groups,$BASEDN
291 dn: cn=person1,ou=People,$BASEDN
294 objectClass: groupMemberA
295 objectClass: groupMemberB
299 dn: cn=person2,ou=People,$BASEDN
302 objectClass: groupMemberA
303 objectClass: groupMemberB
307 dn: cn=group1,ou=Groups,$BASEDN
311 memberA: cn=person1,ou=People,$BASEDN
312 memberA: cn=person2,ou=People,$BASEDN
314 dn: cn=group2,ou=Groups,$BASEDN
318 memberB: cn=person1,ou=People,$BASEDN
319 memberB: cn=person2,ou=People,$BASEDN
321 dn: cn=group1,ou=Groups,$BASEDN
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
332 if test $RC != 0 ; then
333 echo "ldapsearch failed ($RC)!"
334 test $KILLSERVERS != no && kill -HUP $KILLPIDS
338 test $KILLSERVERS != no && kill -HUP $KILLPIDS
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
349 if test $? != 0 ; then
350 echo "Comparison failed"
354 echo ">>>>> Test succeeded"
356 test $KILLSERVERS != no && wait