3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
5 ## Copyright 1998-2009 The OpenLDAP Foundation.
6 ## Portions Copyright 2008 Red Hat, Inc.
7 ## All rights reserved.
9 ## Redistribution and use in source and binary forms, with or without
10 ## modification, are permitted only as authorized by the OpenLDAP
13 ## A copy of this license is available in the file LICENSE in the
14 ## top-level directory of the distribution or, alternatively, at
15 ## <http://www.OpenLDAP.org/license.html>.
17 echo "running defines.sh"
18 . $SRCDIR/scripts/defines.sh
20 if test $MEMBEROF = memberofno; then
21 echo "Memberof overlay not available, test skipped"
25 if test $REFINT = refintno; then
26 echo "Referential Integrity overlay not available, test skipped"
30 case $BACKEND in bdb | null)
31 echo "Test does not support $BACKEND, test skipped"
35 mkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir
37 $SLAPPASSWD -g -n >$CONFIGPWF
38 echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
40 echo "Starting slapd on TCP/IP port $PORT1..."
41 . $CONFFILTER $BACKEND $MONITORDB < $NAKEDCONF > $CONF1
42 $SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
44 if test $WAIT != 0 ; then
51 for i in 0 1 2 3 4 5; do
52 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
53 'objectclass=*' > /dev/null 2>&1
55 if test $RC = 0 ; then
58 echo "Waiting 5 seconds for slapd to start..."
61 if test $RC != 0 ; then
62 echo "ldapsearch failed ($RC)!"
63 test $KILLSERVERS != no && kill -HUP $KILLPIDS
67 cat /dev/null > $TESTOUT
69 if [ "$MEMBEROF" = memberofmod ]; then
70 echo "Inserting memberof overlay on producer..."
71 $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
72 dn: cn=module,cn=config
73 objectClass: olcModuleList
75 olcModulePath: ../servers/slapd/overlays
76 olcModuleLoad: memberof.la
77 olcModuleLoad: refint.la
80 if test $RC != 0 ; then
81 echo "ldapadd failed for moduleLoad ($RC)!"
82 test $KILLSERVERS != no && kill -HUP $KILLPIDS
88 case $BACKEND in bdb | hdb)
89 bdb_conf="olcDbCacheSize: 1000
90 olcDbIndex: objectClass eq
91 olcDbIndex: cn pres,eq,sub
92 olcDbIndex: uid pres,eq,sub
93 olcDbIndex: sn pres,eq,sub
97 echo "Running ldapadd to build slapd config database..."
98 $LDAPADD -h $LOCALHOST -p $PORT1 -D 'cn=config' -w `cat $CONFIGPWF` \
99 >> $TESTOUT 2>&1 <<EOF
100 dn: olcDatabase={1}$BACKEND,cn=config
101 objectClass: olcDatabaseConfig
102 objectClass: olc${BACKEND}Config
103 olcDatabase: {1}$BACKEND
105 olcRootDN: cn=Manager,$BASEDN
108 olcDbDirectory: $TESTDIR/db.1.a/
111 # {0}memberof, {1}$BACKEND, config
112 dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config
113 objectClass: olcOverlayConfig
114 objectClass: olcMemberOf
115 olcOverlay: {0}memberof
116 olcMemberOfRefInt: TRUE
117 olcMemberOfGroupOC: groupOfNames
118 olcMemberOfMemberAD: member
119 olcMemberOfMemberOfAD: memberOf
121 # {1}refint, {1}$BACKEND, config
122 dn: olcOverlay={1}refint,olcDatabase={1}$BACKEND,cn=config
123 objectClass: olcOverlayConfig
124 objectClass: olcRefintConfig
125 olcOverlay: {1}refint
126 olcRefintAttribute: member
127 olcRefintAttribute: memberOf
130 if test $RC != 0 ; then
131 echo "ldapadd failed ($RC)!"
132 test $KILLSERVERS != no && kill -HUP $KILLPIDS
136 echo "Running ldapadd to build slapd database..."
137 $LDAPADD -h $LOCALHOST -p $PORT1 \
138 -D "cn=Manager,$BASEDN" -w secret \
139 >> $TESTOUT 2>&1 << EOF
141 objectClass: organization
142 objectClass: dcObject
146 dn: ou=People,$BASEDN
147 objectClass: organizationalUnit
150 dn: ou=Groups,$BASEDN
151 objectClass: organizationalUnit
154 dn: cn=Roger Rabbit,ou=People,$BASEDN
155 objectClass: inetOrgPerson
159 dn: cn=Baby Herman,ou=People,$BASEDN
160 objectClass: inetOrgPerson
164 dn: cn=Cartoonia,ou=Groups,$BASEDN
165 objectClass: groupOfNames
167 member: cn=Roger Rabbit,ou=People,$BASEDN
168 member: cn=Baby Herman,ou=People,$BASEDN
171 if test $RC != 0 ; then
172 echo "ldapadd failed ($RC)!"
173 test $KILLSERVERS != no && kill -HUP $KILLPIDS
177 echo "Search the entire database..."
178 echo "# Search the entire database..." >> $SEARCHOUT
179 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
180 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
182 if test $RC != 0 ; then
183 echo "ldapsearch failed ($RC)!"
184 test $KILLSERVERS != no && kill -HUP $KILLPIDS
188 echo "Running ldapmodify to rename subtree..."
189 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
190 -D "cn=Manager,$BASEDN" -w secret \
191 >> $TESTOUT 2>&1 << EOF
192 dn: ou=People,$BASEDN
199 # refint runs in a background thread, so it most likely won't complete
200 # before the modify returns. Give it some time to execute.
203 echo "Re-search the entire database..."
204 echo "# Re-search the entire database..." >> $SEARCHOUT
205 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
206 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
208 if test $RC != 0 ; then
209 echo "ldapsearch failed ($RC)!"
210 test $KILLSERVERS != no && kill -HUP $KILLPIDS
214 echo "Running ldapmodify to rename subtree..."
215 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
216 -D "cn=Manager,$BASEDN" -w secret \
217 >> $TESTOUT 2>&1 << EOF
218 dn: ou=Groups,$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 ldapdelete to remove a member..."
239 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
240 -D "cn=Manager,$BASEDN" -w secret \
241 >> $TESTOUT 2>&1 << EOF
242 dn: cn=Baby Herman,ou=Toons,$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 test $KILLSERVERS != no && kill -HUP $KILLPIDS
261 LDIF=$MEMBEROFREFINTOUT
263 echo "Filtering ldapsearch results..."
264 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
265 echo "Filtering original ldif used to create database..."
266 $LDIFFILTER < $LDIF > $LDIFFLT
267 echo "Comparing filter output..."
268 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
270 if test $? != 0 ; then
271 echo "Comparison failed"
275 echo ">>>>> Test succeeded"
277 test $KILLSERVERS != no && wait