3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
5 ## Copyright 1998-2004 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 $BACKSQL = "sqlno" ; then
20 echo "SQL backend not available, test skipped"
24 if test $RDBMS = "rdbmsno" ; then
25 echo "SQL test not requested, test skipped"
29 if test "${RDBMSWRITE}" != "yes"; then
30 echo "write test disabled for ${RDBMS}; set SLAPD_USE_SQLWRITE=yes to enable"
36 echo "Starting slapd on TCP/IP port $PORT1..."
37 . $CONFFILTER $BACKEND $MONITORDB < $SQLCONF > $CONF1
38 $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
40 if test $WAIT != 0 ; then
46 echo "Testing SQL backend write operations..."
47 for i in 0 1 2 3 4 5; do
48 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
49 'objectclass=*' > /dev/null 2>&1
51 if test $RC = 0 ; then
54 echo "Waiting 5 seconds for slapd to start..."
58 if test $RC != 0 ; then
59 echo "ldapsearch failed ($RC)!"
60 test $KILLSERVERS != no && kill -HUP $KILLPIDS
64 BASEDN="dc=example,dc=com"
66 # list here the RDBMSes whose mapping allows writes
68 MANAGERDN="cn=Manager,${BASEDN}"
70 $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
71 -h $LOCALHOST -p $PORT1 > \
72 $TESTOUT 2>&1 << EOMODS
75 # Adding an organization...
76 dn: o=An Org,${BASEDN}
78 objectClass: organization
81 # Adding an organization with an "auxiliary" objectClass..
82 dn: dc=subnet,${BASEDN}
84 objectClass: organization
90 dn: cn=Lev Tolstoij,${BASEDN}
92 objectClass: inetOrgPerson
96 telephoneNumber: +39 02 XXXX YYYY
97 telephoneNumber: +39 02 XXXX ZZZZ
100 # Adding a person with an "auxiliary" objectClass...
101 dn: cn=Some One,${BASEDN}
103 objectClass: inetOrgPerson
104 objectClass: simpleSecurityObject
108 telephoneNumber: +1 800 900 1234
109 telephoneNumber: +1 800 900 1235
110 userPassword: someone
112 # Adding a person in another subtree...
113 dn: cn=SubNet User,dc=subnet,${BASEDN}
115 objectClass: inetOrgPerson
120 # Adding a document...
121 dn: documentTitle=War and Peace,${BASEDN}
123 objectClass: document
124 description: Historical novel
125 documentTitle: War and Peace
126 documentAuthor: cn=Lev Tolstoij,dc=example,dc=com
127 documentIdentifier: document 3
132 if test $RC != 0 ; then
133 echo "ldapmodify failed ($RC)!"
134 test $KILLSERVERS != no && kill -HUP $KILLPIDS
138 echo "Testing modify..."
139 $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
140 -h $LOCALHOST -p $PORT1 > \
141 $TESTOUT 2>&1 << EOMODS
144 # Deleting all telephone numbers...
145 dn: cn=Some One,${BASEDN}
147 delete: telephoneNumber
150 # Adding a telephone number...
151 dn: cn=Mitya Kovalev,${BASEDN}
154 telephoneNumber: +1 800 123 4567
157 # Deleting a specific telephone number and adding a new one...
158 dn: cn=Lev Tolstoij,${BASEDN}
160 delete: telephoneNumber
161 telephoneNumber: +39 02 XXXX YYYY
164 telephoneNumber: +39 333 ZZZ 1234
167 # Adding an author to a document...
168 dn: documentTitle=book1,${BASEDN}
171 documentAuthor: cn=Lev Tolstoij,${BASEDN}
174 # Adding an author to another document...
175 dn: documentTitle=book2,${BASEDN}
178 documentAuthor: cn=Lev Tolstoij,${BASEDN}
181 # Adding an "auxiliary" objectClass...
182 dn: cn=Mitya Kovalev,${BASEDN}
185 objectClass: simpleSecurityObject
188 # Deleting an "auxiliary" objectClass...
189 dn: cn=Some One,${BASEDN}
192 objectClass: simpleSecurityObject
195 # Deleting userPasswords
196 dn: cn=Lev Tolstoij,${BASEDN}
204 if test $RC != 0 ; then
205 echo "ldapmodify failed ($RC)!"
206 test $KILLSERVERS != no && kill -HUP $KILLPIDS
210 echo "Testing delete..."
211 $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
212 -h $LOCALHOST -p $PORT1 > \
213 $TESTOUT 2>&1 << EOMODS
216 # Deleting a person...
217 dn: cn=Torvlobnor Puzdoy,${BASEDN}
220 # Deleting a document...
221 dn: documentTitle=book1,dc=example,dc=com
224 # Deleting a person with an "auxiliary" objectClass...
225 dn: cn=Akakiy Zinberstein,dc=example,dc=com
231 if test $RC != 0 ; then
232 echo "ldapmodify failed ($RC)!"
233 test $KILLSERVERS != no && kill -HUP $KILLPIDS
237 echo "Testing rename..."
238 $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
239 -h $LOCALHOST -p $PORT1 > \
240 $TESTOUT 2>&1 << EOMODS
243 # Renaming an organization
244 dn: o=An Org,${BASEDN}
246 newrdn: o=Renamed Org
250 dn: cn=Lev Tolstoij,${BASEDN}
252 newrdn: cn=Lev Tolstoij
254 newsuperior: dc=subnet,${BASEDN}
257 dn: documentTitle=book2,${BASEDN}
259 newrdn: documentTitle=Renamed Book
265 if test $RC != 0 ; then
266 echo "ldapmodify failed ($RC)!"
267 test $KILLSERVERS != no && kill -HUP $KILLPIDS
271 BINDDN="cn=Mitya Kovalev,${BASEDN}"
274 echo "Testing passwd change..."
275 $LDAPPASSWD -h $LOCALHOST -p $PORT1 \
276 -D "${BINDDN}" -w ${BINDPW} -s ${NEWPW} \
277 "$BINDDN" >> $TESTOUT 2>&1
280 if test $RC != 0 ; then
281 echo "ldappasswd failed ($RC)!"
282 test $KILLSERVERS != no && kill -HUP $KILLPIDS
286 echo -n "Testing bind with new secret... "
287 $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $NEWPW
289 if test $RC != 0 ; then
290 echo "ldapwhoami failed ($RC)!"
291 test $KILLSERVERS != no && kill -HUP $KILLPIDS
295 BINDDN="cn=Some One,${BASEDN}"
297 echo -n "Testing bind with newly added user... "
298 $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW
300 if test $RC != 0 ; then
301 echo "ldapwhoami failed ($RC)!"
302 test $KILLSERVERS != no && kill -HUP $KILLPIDS
306 echo "Using ldapsearch to retrieve all the entries..."
307 $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \
308 "objectClass=*" > $SEARCHOUT 2>&1
311 if test $RC != 0 ; then
312 echo "ldapsearch failed ($RC)!"
313 test $KILLSERVERS != no && kill -HUP $KILLPIDS
317 echo "Filtering ldapsearch results..."
318 . $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
319 echo "Filtering modified ldif..."
320 . $LDIFFILTER < $SQLWRITE > $LDIFFLT
321 echo "Comparing filter output..."
322 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
324 if test $? != 0 ; then
325 echo "comparison failed - SQL mods search didn't succeed"
326 test $KILLSERVERS != no && kill -HUP $KILLPIDS
332 echo "apparently ${RDBMS} does not support writes; skipping..."
336 test $KILLSERVERS != no && kill -HUP $KILLPIDS
338 echo ">>>>> Test succeeded"