1#! /bin/sh
2# $OpenLDAP$ */
3## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4##
5## Copyright 1998-2011 The OpenLDAP Foundation.
6## All rights reserved.
7##
8## Redistribution and use in source and binary forms, with or without
9## modification, are permitted only as authorized by the OpenLDAP
10## Public License.
11##
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>.
15
16echo "running defines.sh"
17. $SRCDIR/scripts/defines.sh
18
19if test $BACKEND = bdb ; then
20	echo "subtree rename not supported by back-$BACKEND"
21	exit 0
22fi
23
24mkdir -p $TESTDIR $DBDIR1
25
26echo "Starting slapd on TCP/IP port $PORT1..."
27. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1
28$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
29PID=$!
30if test $WAIT != 0 ; then
31    echo PID $PID
32    read foo
33fi
34KILLPIDS="$PID"
35
36sleep 1
37
38echo "Testing slapd searching..."
39for i in 0 1 2 3 4 5; do
40	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
41		'(objectclass=*)' > /dev/null 2>&1
42	RC=$?
43	if test $RC = 0 ; then
44		break
45	fi
46	echo "Waiting 5 seconds for slapd to start..."
47	sleep 5
48done
49
50if test $RC != 0 ; then
51	echo "ldapsearch failed ($RC)!"
52	test $KILLSERVERS != no && kill -HUP $KILLPIDS
53	exit $RC
54fi
55
56cat /dev/null > $TESTOUT
57cat /dev/null > $SEARCHOUT
58
59# Add
60echo "Populating the database..."
61echo "# Populating the database..." >> $TESTOUT
62$LDAPADD -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
63	>> $TESTOUT 2>&1 << EOMODS0
64dn: dc=example,dc=com
65objectClass: organization
66objectClass: dcObject
67o: Example, Inc.
68dc: example
69
70dn: ou=Parent,dc=example,dc=com
71objectClass: organizationalUnit
72ou: Parent
73
74dn: ou=Another parent,dc=example,dc=com
75objectClass: organizationalUnit
76ou: Another parent
77
78dn: ou=Child,ou=Parent,dc=example,dc=com
79objectClass: organizationalUnit
80ou: Child
81
82dn: ou=Grandchild,ou=Child,ou=Parent,dc=example,dc=com
83objectClass: organizationalUnit
84ou: Grandchild
85EOMODS0
86RC=$?
87if test $RC != 0 ; then
88	echo "ldapadd failed ($RC)!"
89	test $KILLSERVERS != no && kill -HUP $KILLPIDS
90	exit $RC
91fi
92
93echo "Searching all database..."
94echo "# Searching all database (after add)..." >> $SEARCHOUT
95$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
96	'(objectClass=*)' >> $SEARCHOUT 2>&1
97RC=$?
98if test $RC != 0 ; then
99	echo "ldapsearch failed ($RC)!"
100	test $KILLSERVERS != no && kill -HUP $KILLPIDS
101	exit $RC
102fi
103
104# Rename (PASS1)
105echo "Renaming (PASS1)..."
106echo "# Renaming (PASS1)..." >> $TESTOUT
107$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
108	>> $TESTOUT 2>&1 << EOMODS1
109dn: ou=Child,ou=Parent,dc=example,dc=com
110changetype: modrdn
111newrdn: ou=Renamed child
112deleteoldrdn: 0
113EOMODS1
114RC=$?
115if test $RC != 0 ; then
116	echo "ldapadd failed ($RC)!"
117	test $KILLSERVERS != no && kill -HUP $KILLPIDS
118	exit $RC
119fi
120
121echo "Searching all database..."
122echo "# Searching all database (after PASS1)..." >> $SEARCHOUT
123$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
124	'(objectClass=*)' >> $SEARCHOUT 2>&1
125RC=$?
126if test $RC != 0 ; then
127	echo "ldapsearch failed ($RC)!"
128	test $KILLSERVERS != no && kill -HUP $KILLPIDS
129	exit $RC
130fi
131
132# Rename (PASS2)
133echo "Renaming (PASS2)..."
134echo "# Renaming (PASS2)..." >> $TESTOUT
135$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
136	>> $TESTOUT 2>&1 << EOMODS2
137dn: ou=Parent,dc=example,dc=com
138changetype: modrdn
139newrdn: ou=Renamed parent
140deleteoldrdn: 0
141EOMODS2
142RC=$?
143if test $RC != 0 ; then
144	echo "ldapadd failed ($RC)!"
145	test $KILLSERVERS != no && kill -HUP $KILLPIDS
146	exit $RC
147fi
148
149echo "Searching all database..."
150echo "# Searching all database (after PASS2)..." >> $SEARCHOUT
151$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
152	'(objectClass=*)' >> $SEARCHOUT 2>&1
153RC=$?
154if test $RC != 0 ; then
155	echo "ldapsearch failed ($RC)!"
156	test $KILLSERVERS != no && kill -HUP $KILLPIDS
157	exit $RC
158fi
159
160# Rename (PASS3)
161echo "Renaming (PASS3)..."
162echo "# Renaming (PASS3)..." >> $TESTOUT
163$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
164	>> $TESTOUT 2>&1 << EOMODS3
165dn: ou=Renamed child,ou=Renamed parent,dc=example,dc=com
166changetype: modrdn
167newrdn: ou=Renamed child
168deleteoldrdn: 0
169newsuperior: ou=Another parent,dc=example,dc=com
170EOMODS3
171RC=$?
172if test $RC != 0 ; then
173	echo "ldapadd failed ($RC)!"
174	test $KILLSERVERS != no && kill -HUP $KILLPIDS
175	exit $RC
176fi
177
178echo "Searching all database..."
179echo "# Searching all database (after PASS3)..." >> $SEARCHOUT
180$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
181	'(objectClass=*)' >> $SEARCHOUT 2>&1
182RC=$?
183if test $RC != 0 ; then
184	echo "ldapsearch failed ($RC)!"
185	test $KILLSERVERS != no && kill -HUP $KILLPIDS
186	exit $RC
187fi
188
189test $KILLSERVERS != no && kill -HUP $KILLPIDS
190
191LDIF=$SUBTREERENAMEOUT
192
193echo "Filtering ldapsearch results..."
194$LDIFFILTER < $SEARCHOUT > $SEARCHFLT
195echo "Filtering original ldif used to create database..."
196$LDIFFILTER < $LDIF > $LDIFFLT
197echo "Comparing filter output..."
198$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
199
200if test $? != 0 ; then
201	echo "Comparison failed"
202	exit 1
203fi
204
205echo ">>>>> Test succeeded"
206
207test $KILLSERVERS != no && wait
208
209exit 0
210