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 mkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir
26 $SLAPPASSWD -g -n >$CONFIGPWF
27 echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
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 &
33 if test $WAIT != 0 ; then
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
44 if test $RC = 0 ; then
47 echo "Waiting 5 seconds for slapd to start..."
50 if test $RC != 0 ; then
51 echo "ldapsearch failed ($RC)!"
52 test $KILLSERVERS != no && kill -HUP $KILLPIDS
56 cat /dev/null > $TESTOUT
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
64 olcModulePath: ../servers/slapd/overlays
65 olcModuleLoad: memberof.la
68 if test $RC != 0 ; then
69 echo "ldapadd failed for moduleLoad ($RC)!"
70 test $KILLSERVERS != no && kill -HUP $KILLPIDS
75 bdbInclude="# " nullExclude=""
77 bdb | hdb) bdbInclude="" ;;
78 null) nullExclude="# " ;;
81 echo "Running ldapadd to build slapd config database..."
82 $LDAPADD -h $LOCALHOST -p $PORT1 -D 'cn=config' -w `cat $CONFIGPWF` \
83 >> $TESTOUT 2>&1 <<EOF
84 dn: cn=symas group example,cn=schema,cn=config
85 objectClass: olcSchemaConfig
86 cn: symas group example
87 olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.1
88 NAME 'memberA' SUP distinguishedName )
89 olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.2
90 NAME 'memberOfA' SUP distinguishedName )
91 olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.3
92 NAME 'memberB' SUP distinguishedName )
93 olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.4
94 NAME 'memberOfB' SUP distinguishedName )
95 olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.1
96 NAME 'groupA' SUP top STRUCTURAL MUST cn MAY memberA )
97 olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.2
98 NAME 'groupMemberA' SUP top AUXILIARY MAY memberOfA )
99 olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.3
100 NAME 'groupB' SUP top STRUCTURAL MUST cn MAY memberB )
101 olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.4
102 NAME 'groupMemberB' SUP top AUXILIARY MAY memberOfB )
104 dn: olcDatabase={1}$BACKEND,cn=config
105 objectClass: olcDatabaseConfig
106 ${nullExclude}objectClass: olc${BACKEND}Config
107 olcDatabase: {1}$BACKEND
109 olcRootDN: cn=Manager,$BASEDN
112 ${nullExclude}olcDbDirectory: $TESTDIR/db.1.a/
113 ${bdbInclude}olcDbCacheSize: 1000
114 ${bdbInclude}olcDbIndex: objectClass eq
115 ${bdbInclude}olcDbIndex: cn pres,eq,sub
116 ${bdbInclude}olcDbIndex: uid pres,eq,sub
117 ${bdbInclude}olcDbIndex: sn pres,eq,sub
118 ${bdbInclude}olcDbMode: 384"
120 dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config
121 objectClass: olcOverlayConfig
122 objectClass: olcMemberOf
123 olcOverlay: {0}memberof
124 olcMemberOfRefInt: TRUE
125 olcMemberOfGroupOC: groupOfNames
126 olcMemberOfMemberAD: member
127 olcMemberOfMemberOfAD: memberOf
129 dn: olcOverlay={1}memberof,olcDatabase={1}$BACKEND,cn=config
130 objectClass: olcOverlayConfig
131 objectClass: olcMemberOf
132 olcOverlay: {1}memberof
133 olcMemberOfRefInt: TRUE
134 olcMemberOfGroupOC: groupA
135 olcMemberOfMemberAD: memberA
136 olcMemberOfMemberOfAD: memberOfA
138 dn: olcOverlay={2}memberof,olcDatabase={1}$BACKEND,cn=config
139 objectClass: olcOverlayConfig
140 objectClass: olcMemberOf
141 olcOverlay: {2}memberof
142 olcMemberOfRefInt: TRUE
143 olcMemberOfGroupOC: groupB
144 olcMemberOfMemberAD: memberB
145 olcMemberOfMemberOfAD: memberOfB
149 if test $RC != 0 ; then
150 echo "ldapadd failed ($RC)!"
151 test $KILLSERVERS != no && kill -HUP $KILLPIDS
155 echo "Running ldapadd to build slapd database..."
156 $LDAPADD -h $LOCALHOST -p $PORT1 \
157 -D "cn=Manager,$BASEDN" -w secret \
158 >> $TESTOUT 2>&1 << EOF
160 objectClass: organization
161 objectClass: dcObject
165 dn: ou=People,$BASEDN
166 objectClass: organizationalUnit
169 dn: ou=Groups,$BASEDN
170 objectClass: organizationalUnit
173 dn: cn=Roger Rabbit,ou=People,$BASEDN
174 objectClass: inetOrgPerson
178 dn: cn=Baby Herman,ou=People,$BASEDN
179 objectClass: inetOrgPerson
183 dn: cn=Cartoonia,ou=Groups,$BASEDN
184 objectClass: groupOfNames
186 member: cn=Roger Rabbit,ou=People,$BASEDN
187 member: cn=Baby Herman,ou=People,$BASEDN
190 if test $RC != 0 ; then
191 echo "ldapadd failed ($RC)!"
192 test $KILLSERVERS != no && kill -HUP $KILLPIDS
196 echo "Search the entire database..."
197 echo "# Search the entire database..." >> $SEARCHOUT
198 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
199 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
201 if test $RC != 0 ; then
202 echo "ldapsearch failed ($RC)!"
203 test $KILLSERVERS != no && kill -HUP $KILLPIDS
207 echo "Running ldapmodify to add a member..."
208 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
209 -D "cn=Manager,$BASEDN" -w secret \
210 >> $TESTOUT 2>&1 << EOF
211 dn: cn=Jessica Rabbit,ou=People,$BASEDN
213 objectClass: inetOrgPerson
217 dn: cn=Cartoonia,ou=Groups,$BASEDN
220 member: cn=Jessica Rabbit,ou=People,$BASEDN
223 echo "Re-search the entire database..."
224 echo "# Re-search the entire database..." >> $SEARCHOUT
225 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
226 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
228 if test $RC != 0 ; then
229 echo "ldapsearch failed ($RC)!"
230 test $KILLSERVERS != no && kill -HUP $KILLPIDS
234 echo "Running ldapmodify to add self..."
235 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
236 -D "cn=Manager,$BASEDN" -w secret \
237 >> $TESTOUT 2>&1 << EOF
238 dn: cn=Cartoonia,ou=Groups,$BASEDN
241 member: cn=Cartoonia,ou=Groups,$BASEDN
244 echo "Re-search the entire database..."
245 echo "# Re-search the entire database..." >> $SEARCHOUT
246 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
247 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
249 if test $RC != 0 ; then
250 echo "ldapsearch failed ($RC)!"
251 test $KILLSERVERS != no && kill -HUP $KILLPIDS
255 echo "Running ldapdelete to remove a member..."
256 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
257 -D "cn=Manager,$BASEDN" -w secret \
258 >> $TESTOUT 2>&1 << EOF
259 dn: cn=Baby Herman,ou=People,$BASEDN
263 echo "Re-search the entire database..."
264 echo "# Re-search the entire database..." >> $SEARCHOUT
265 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
266 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
268 if test $RC != 0 ; then
269 echo "ldapsearch failed ($RC)!"
270 test $KILLSERVERS != no && kill -HUP $KILLPIDS
274 echo "Adding groups with MAY member type schemas..."
275 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
276 -D "cn=Manager,$BASEDN" -w secret \
277 >> $TESTOUT 2>&1 <<EOF
278 dn: cn=Roger Rabbit,ou=People,$BASEDN
281 dn: cn=Jessica Rabbit,ou=People,$BASEDN
284 dn: cn=Cartoonia,ou=Groups,$BASEDN
287 dn: cn=person1,ou=People,$BASEDN
290 objectClass: groupMemberA
291 objectClass: groupMemberB
295 dn: cn=person2,ou=People,$BASEDN
298 objectClass: groupMemberA
299 objectClass: groupMemberB
303 dn: cn=group1,ou=Groups,$BASEDN
307 memberA: cn=person1,ou=People,$BASEDN
308 memberA: cn=person2,ou=People,$BASEDN
310 dn: cn=group2,ou=Groups,$BASEDN
314 memberB: cn=person1,ou=People,$BASEDN
315 memberB: cn=person2,ou=People,$BASEDN
317 dn: cn=group1,ou=Groups,$BASEDN
323 echo "Re-search the entire database..."
324 echo "# Re-search the entire database..." >> $SEARCHOUT
325 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
326 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
328 if test $RC != 0 ; then
329 echo "ldapsearch failed ($RC)!"
330 test $KILLSERVERS != no && kill -HUP $KILLPIDS
334 test $KILLSERVERS != no && kill -HUP $KILLPIDS
338 echo "Filtering ldapsearch results..."
339 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
340 echo "Filtering original ldif used to create database..."
341 $LDIFFILTER < $LDIF > $LDIFFLT
342 echo "Comparing filter output..."
343 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
345 if test $? != 0 ; then
346 echo "Comparison failed"
350 echo ">>>>> Test succeeded"
352 test $KILLSERVERS != no && wait