]> git.sur5r.net Git - openldap/blob - tests/scripts/test057-memberof-refint
ITS#5395 add test from abartlet@samba.org
[openldap] / tests / scripts / test057-memberof-refint
1 #! /bin/sh
2 # $OpenLDAP$
3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 ##
5 ## Copyright 1998-2008 The OpenLDAP Foundation.
6 ## Copyright 2008 Red Hat, Inc. 
7 ## All rights reserved.
8 ##
9 ## Redistribution and use in source and binary forms, with or without
10 ## modification, are permitted only as authorized by the OpenLDAP
11 ## Public License.
12 ##
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>.
16
17 echo "running defines.sh"
18 . $SRCDIR/scripts/defines.sh
19
20 if test $MEMBEROF = memberofno; then 
21         echo "Memberof overlay not available, test skipped"
22         exit 0
23 fi 
24
25 if test "$BACKEND" != "hdb" ; then
26         echo "Test does not support $BACKEND"
27         exit 0
28 fi
29
30 mkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir
31
32 $SLAPPASSWD -g -n >$CONFIGPWF
33 echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
34
35 echo "Starting slapd on TCP/IP port $PORT1..."
36 . $CONFFILTER $BACKEND $MONITORDB < $NAKEDCONF > $CONF1
37 $SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
38 PID=$!
39 if test $WAIT != 0 ; then
40     echo PID $PID
41     read foo
42 fi
43 KILLPIDS="$PID"
44
45 sleep 1
46 for i in 0 1 2 3 4 5; do
47         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
48                 'objectclass=*' > /dev/null 2>&1
49         RC=$?
50         if test $RC = 0 ; then
51                 break
52         fi
53         echo "Waiting 5 seconds for slapd to start..."
54         sleep 5
55 done
56 if test $RC != 0 ; then
57         echo "ldapsearch failed ($RC)!"
58         test $KILLSERVERS != no && kill -HUP $KILLPIDS
59         exit $RC
60 fi
61
62 cat /dev/null > $TESTOUT
63
64 if [ "$MEMBEROF" = memberofmod ]; then
65         echo "Inserting memberof overlay on producer..."
66         $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
67 dn: cn=module,cn=config
68 objectClass: olcModuleList
69 cn: module
70 olcModulePath: ../servers/slapd/overlays
71 olcModuleLoad: memberof.la
72 olcModuleLoad: refint.la
73 EOF
74         RC=$?
75         if test $RC != 0 ; then
76                 echo "ldapadd failed for moduleLoad ($RC)!"
77                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
78                 exit $RC
79         fi
80 fi
81
82 echo "Running ldapadd to build slapd config database..."
83 $LDAPADD -h $LOCALHOST -p $PORT1 -D 'cn=config' -w `cat $CONFIGPWF` \
84         >> $TESTOUT 2>&1 <<EOF
85 dn: olcDatabase={1}$BACKEND,cn=config
86 objectClass: olcDatabaseConfig
87 objectClass: olc${BACKEND}Config
88 olcDatabase: {1}$BACKEND
89 olcSuffix: $BASEDN
90 olcRootDN: cn=Manager,$BASEDN
91 olcRootPW:: c2VjcmV0
92 olcMonitoring: TRUE
93 olcDbDirectory: $TESTDIR/db.1.a/
94 olcDbCacheSize: 1000
95 olcDbIndex: objectClass eq
96 olcDbIndex: cn pres,eq,sub
97 olcDbIndex: uid pres,eq,sub
98 olcDbIndex: sn pres,eq,sub
99 olcDbMode: 384
100
101 # {0}memberof, {1}$BACKEND, config
102 dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config
103 objectClass: olcOverlayConfig
104 objectClass: olcMemberOf
105 olcOverlay: {0}memberof
106 olcMemberOfRefInt: TRUE
107 olcMemberOfGroupOC: groupOfNames
108 olcMemberOfMemberAD: member
109 olcMemberOfMemberOfAD: memberOf
110
111 # {1}refint, {1}$BACKEND, config
112 dn: olcOverlay={1}refint,olcDatabase={1}$BACKEND,cn=config
113 objectClass: olcOverlayConfig
114 objectClass: olcRefintConfig
115 olcOverlay: {1}refint
116 olcRefintAttribute: member
117 olcRefintAttribute: memberOf
118 EOF
119 RC=$?
120 if test $RC != 0 ; then
121         echo "ldapadd failed ($RC)!"
122         test $KILLSERVERS != no && kill -HUP $KILLPIDS
123         exit $RC
124 fi
125
126 echo "Running ldapadd to build slapd database..."
127 $LDAPADD -h $LOCALHOST -p $PORT1 \
128         -D "cn=Manager,$BASEDN" -w secret \
129         >> $TESTOUT 2>&1 << EOF
130 dn: $BASEDN
131 objectClass: organization
132 objectClass: dcObject
133 o: Example, Inc.
134 dc: example
135
136 dn: ou=People,$BASEDN
137 objectClass: organizationalUnit
138 ou: People
139
140 dn: ou=Groups,$BASEDN
141 objectClass: organizationalUnit
142 ou: Groups
143
144 dn: cn=Roger Rabbit,ou=People,$BASEDN
145 objectClass: inetOrgPerson
146 cn: Roger Rabbit
147 sn: Rabbit
148
149 dn: cn=Baby Herman,ou=People,$BASEDN
150 objectClass: inetOrgPerson
151 cn: Baby Herman
152 sn: Herman
153
154 dn: cn=Cartoonia,ou=Groups,$BASEDN
155 objectClass: groupOfNames
156 cn: Cartoonia
157 member: cn=Roger Rabbit,ou=People,$BASEDN
158 member: cn=Baby Herman,ou=People,$BASEDN
159 EOF
160 RC=$?
161 if test $RC != 0 ; then
162         echo "ldapadd failed ($RC)!"
163         test $KILLSERVERS != no && kill -HUP $KILLPIDS
164         exit $RC
165 fi
166
167 echo "Search the entire database..."
168 echo "# Search the entire database..." >> $SEARCHOUT
169 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
170         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
171 RC=$?
172 if test $RC != 0 ; then
173         echo "ldapsearch failed ($RC)!"
174         test $KILLSERVERS != no && kill -HUP $KILLPIDS
175         exit $RC
176 fi
177
178 echo "Running ldapmodify to rename subtree..."
179 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
180         -D "cn=Manager,$BASEDN" -w secret \
181         >> $TESTOUT 2>&1 << EOF
182 dn: ou=People,$BASEDN
183 changetype: modrdn
184 newrdn: ou=Toons
185 deleteoldrdn:1
186 newsuperior: $BASEDN
187 EOF
188
189 echo "Re-search the entire database..."
190 echo "# Re-search the entire database..." >> $SEARCHOUT
191 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
192         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
193 RC=$?
194 if test $RC != 0 ; then
195         echo "ldapsearch failed ($RC)!"
196         test $KILLSERVERS != no && kill -HUP $KILLPIDS
197         exit $RC
198 fi
199
200 echo "Running ldapmodify to rename subtree..."
201 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
202         -D "cn=Manager,$BASEDN" -w secret \
203         >> $TESTOUT 2>&1 << EOF
204 dn: ou=Groups,$BASEDN
205 changetype: modrdn
206 newrdn: ou=Studios
207 deleteoldrdn:1
208 newsuperior: $BASEDN
209 EOF
210
211 echo "Re-search the entire database..."
212 echo "# Re-search the entire database..." >> $SEARCHOUT
213 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
214         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
215 RC=$?
216 if test $RC != 0 ; then
217         echo "ldapsearch failed ($RC)!"
218         test $KILLSERVERS != no && kill -HUP $KILLPIDS
219         exit $RC
220 fi
221
222 echo "Running ldapdelete to remove a member..."
223 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
224         -D "cn=Manager,$BASEDN" -w secret \
225         >> $TESTOUT 2>&1 << EOF
226 dn: cn=Baby Herman,ou=Toons,$BASEDN
227 changetype: delete
228 EOF
229
230 echo "Re-search the entire database..."
231 echo "# Re-search the entire database..." >> $SEARCHOUT
232 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
233         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
234 RC=$?
235 if test $RC != 0 ; then
236         echo "ldapsearch failed ($RC)!"
237         test $KILLSERVERS != no && kill -HUP $KILLPIDS
238         exit $RC
239 fi
240
241 test $KILLSERVERS != no && kill -HUP $KILLPIDS
242
243 LDIF=$MEMBEROFREFINTOUT
244
245 echo "Filtering ldapsearch results..."
246 . $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
247 echo "Filtering original ldif used to create database..."
248 . $LDIFFILTER < $LDIF > $LDIFFLT
249 echo "Comparing filter output..."
250 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
251
252 if test $? != 0 ; then
253         echo "Comparison failed"
254         exit 1
255 fi
256
257 echo ">>>>> Test succeeded"
258
259 test $KILLSERVERS != no && wait
260
261 exit 0