xref: /netbsd-src/external/bsd/openldap/dist/tests/scripts/test005-modrdn (revision e670fd5c413e99c2f6a37901bb21c537fcd322d2)
12de962bdSlukem#! /bin/sh
2d11b170bStron# $OpenLDAP$
32de962bdSlukem## This work is part of OpenLDAP Software <http://www.openldap.org/>.
42de962bdSlukem##
5*e670fd5cSchristos## Copyright 1998-2021 The OpenLDAP Foundation.
62de962bdSlukem## All rights reserved.
72de962bdSlukem##
82de962bdSlukem## Redistribution and use in source and binary forms, with or without
92de962bdSlukem## modification, are permitted only as authorized by the OpenLDAP
102de962bdSlukem## Public License.
112de962bdSlukem##
122de962bdSlukem## A copy of this license is available in the file LICENSE in the
132de962bdSlukem## top-level directory of the distribution or, alternatively, at
142de962bdSlukem## <http://www.OpenLDAP.org/license.html>.
152de962bdSlukem
162de962bdSlukemecho "running defines.sh"
172de962bdSlukem. $SRCDIR/scripts/defines.sh
182de962bdSlukem
192de962bdSlukemmkdir -p $TESTDIR $DBDIR1A $DBDIR1B
202de962bdSlukem
212de962bdSlukemecho "Running slapadd to build slapd database..."
22*e670fd5cSchristos. $CONFFILTER $BACKEND < $CONF2DB > $CONF1
232de962bdSlukem$SLAPADD -f $CONF1 -b "$BASEDN" -l $LDIFORDERED
242de962bdSlukemRC=$?
252de962bdSlukemif test $RC != 0 ; then
262de962bdSlukem	echo "slapadd failed ($RC)!"
272de962bdSlukem	exit $RC
282de962bdSlukemfi
292de962bdSlukem
302de962bdSlukemecho "Starting slapd on TCP/IP port $PORT1..."
31*e670fd5cSchristos$SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 &
322de962bdSlukemPID=$!
332de962bdSlukemif test $WAIT != 0 ; then
342de962bdSlukem    echo PID $PID
352de962bdSlukem    read foo
362de962bdSlukemfi
372de962bdSlukemKILLPIDS="$PID"
382de962bdSlukem
392de962bdSlukemsleep 1
402de962bdSlukem
412de962bdSlukemecho "Testing slapd modrdn operations..."
422de962bdSlukem
432de962bdSlukem# Make sure we can search the database
442de962bdSlukemfor i in 0 1 2 3 4 5; do
45*e670fd5cSchristos	$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
462de962bdSlukem	    'objectClass=*' > $INITOUT 2>&1
472de962bdSlukem	RC=$?
482de962bdSlukem	if test $RC = 0 ; then
492de962bdSlukem		break
502de962bdSlukem	fi
512de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
522de962bdSlukem	sleep 5
532de962bdSlukemdone
542de962bdSlukem
552de962bdSlukemif test $RC != 0 ; then
562de962bdSlukem	echo "ldapsearch failed ($RC)!"
572de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
582de962bdSlukem	exit $RC
592de962bdSlukemfi
602de962bdSlukem
612de962bdSlukem# -r used to do remove of old rdn
622de962bdSlukem
632de962bdSlukemecho "Testing modrdn(deleteoldrdn=0)..."
64*e670fd5cSchristos$LDAPMODRDN -D "$MANAGERDN" -H $URI1 -w $PASSWD > \
652de962bdSlukem	$TESTOUT 2>&1 'cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com' 'cn=James A Jones III'
662de962bdSlukem
672de962bdSlukemRC=$?
682de962bdSlukemif test $RC != 0 ; then
692de962bdSlukem	echo "ldapmodrdn failed ($RC)!"
702de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
712de962bdSlukem	exit $RC
722de962bdSlukemfi
732de962bdSlukem
742de962bdSlukemecho "Testing modrdn(deleteoldrdn=1)..."
75*e670fd5cSchristos$LDAPMODRDN -D "$MANAGERDN" -r -H $URI1 -w $PASSWD >> \
762de962bdSlukem	$TESTOUT 2>&1 'cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example, dc=com' 'cn=James A Jones II'
772de962bdSlukem
782de962bdSlukemRC=$?
792de962bdSlukemif test $RC != 0 ; then
802de962bdSlukem	echo "ldapmodrdn failed ($RC)!"
812de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
822de962bdSlukem	exit $RC
832de962bdSlukemfi
842de962bdSlukem
852de962bdSlukem# Ensure the new rdn's can be found
862de962bdSlukem
872de962bdSlukemecho "Using ldapsearch to retrieve entries using new rdn (cn=James A Jones III)..."
88*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
892de962bdSlukem	    'cn=James A Jones III' > $SEARCHOUT 2>&1
902de962bdSlukemRC=$?
912de962bdSlukemif test $RC != 0 ; then
922de962bdSlukem	echo "ldapsearch failed ($RC)!"
932de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
942de962bdSlukem	exit $RC
952de962bdSlukemfi
962de962bdSlukem
972de962bdSlukem
98*e670fd5cSchristosLDIF=$MODRDNOUTPROVIDER1
992de962bdSlukem
1002de962bdSlukemecho "Filtering ldapsearch results..."
101ef2f90d3Sadam$LDIFFILTER < $SEARCHOUT > $SEARCHFLT
1022de962bdSlukemecho "Filtering original ldif used to create database..."
103ef2f90d3Sadam$LDIFFILTER < $LDIF > $LDIFFLT
1042de962bdSlukemecho "Comparing filter output..."
1052de962bdSlukem$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
1062de962bdSlukem
1072de962bdSlukemif test $? != 0 ; then
1082de962bdSlukem	echo "comparison failed - modrdn operations did not complete correctly"
1092de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1102de962bdSlukem	exit -1
1112de962bdSlukemfi
1122de962bdSlukem
1132de962bdSlukem
1142de962bdSlukemecho "Using ldapsearch to retrieve entries using new rdn (cn=James A Jones II)..."
115*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
1162de962bdSlukem	    'cn=James A Jones II' > $SEARCHOUT 2>&1
1172de962bdSlukemRC=$?
1182de962bdSlukemif test $RC != 0 ; then
1192de962bdSlukem	echo "ldapsearch failed ($RC)!"
1202de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1212de962bdSlukem	exit $RC
1222de962bdSlukemfi
1232de962bdSlukem
1242de962bdSlukem
125*e670fd5cSchristosLDIF=$MODRDNOUTPROVIDER2
1262de962bdSlukem
1272de962bdSlukemecho "Filtering ldapsearch results..."
128ef2f90d3Sadam$LDIFFILTER < $SEARCHOUT > $SEARCHFLT
1292de962bdSlukemecho "Filtering original ldif used to create database..."
130ef2f90d3Sadam$LDIFFILTER < $LDIF > $LDIFFLT
1312de962bdSlukemecho "Comparing filter output..."
1322de962bdSlukem$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
1332de962bdSlukem
1342de962bdSlukemif test $? != 0 ; then
1352de962bdSlukem	echo "comparison failed - modrdn operations did not complete correctly"
1362de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1372de962bdSlukem	exit -1
1382de962bdSlukemfi
1392de962bdSlukem
1402de962bdSlukem# Ensure that you cannot find the entry for which the rdn was deleted as
1412de962bdSlukem# an attribute.
1422de962bdSlukem
1432de962bdSlukemecho "Using ldapsearch to retrieve entries using removed rdn (cn=James A Jones 2)..."
144*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
1452de962bdSlukem	    'cn=James A Jones 2' > $SEARCHOUT 2>&1
1462de962bdSlukemRC=$?
1472de962bdSlukemif test $RC != 0 ; then
1482de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1492de962bdSlukem	echo "ldapsearch failed ($RC)!"
1502de962bdSlukem	exit $RC
1512de962bdSlukemfi
1522de962bdSlukem$CMP $SEARCHOUT - < /dev/null > $CMPOUT
1532de962bdSlukemif test $? != 0 ; then
1542de962bdSlukem	echo "failure: ldapsearch found attribute that was to be removed!"
1552de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1562de962bdSlukem	exit -1
1572de962bdSlukemfi
1582de962bdSlukem
1592de962bdSlukemecho "Using ldapsearch to retrieve all the entries..."
160*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
1612de962bdSlukem	    'objectClass=*' > $SEARCHOUT 2>&1
1622de962bdSlukemRC=$?
1632de962bdSlukemif test $RC != 0 ; then
1642de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1652de962bdSlukem	echo "ldapsearch failed ($RC)!"
1662de962bdSlukem	exit $RC
1672de962bdSlukemfi
1682de962bdSlukem
169*e670fd5cSchristosLDIF=$MODRDNOUTPROVIDER0
1702de962bdSlukem
1712de962bdSlukemecho "Filtering ldapsearch results..."
172ef2f90d3Sadam$LDIFFILTER < $SEARCHOUT > $SEARCHFLT
1732de962bdSlukemecho "Filtering original ldif used to create database..."
174ef2f90d3Sadam$LDIFFILTER < $LDIF > $LDIFFLT
1752de962bdSlukemecho "Comparing filter output..."
1762de962bdSlukem$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
1772de962bdSlukem
1782de962bdSlukemif test $? != 0 ; then
1792de962bdSlukem	echo "comparison failed - modrdn operations did not complete correctly"
1802de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1812de962bdSlukem	exit -1
1822de962bdSlukemfi
1832de962bdSlukem
1842de962bdSlukem# Test that you can use modrdn with an attribute value which was previously
1852de962bdSlukem# present
1862de962bdSlukem
1872de962bdSlukemecho "Testing modrdn(deleteoldrdn=1), modrdn with new rdn already an att val..."
188*e670fd5cSchristos$LDAPMODRDN -D "$MANAGERDN" -r -H $URI1 -w $PASSWD > \
1892de962bdSlukem	/dev/null 2>&1 'cn=James A Jones III, ou=Alumni Association, ou=People, dc=example, dc=com' 'cn=James A Jones 1'
1902de962bdSlukem
1912de962bdSlukemRC=$?
1922de962bdSlukemif test $RC != 0 ; then
1932de962bdSlukem	echo "ldapmodrdn failed ($RC)!"
1942de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1952de962bdSlukem	exit $RC
1962de962bdSlukemfi
1972de962bdSlukem
1982de962bdSlukemecho "Using ldapsearch to retrieve entries using new rdn (cn=James A Jones 1)..."
199*e670fd5cSchristos$LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
2002de962bdSlukem	    'cn=James A Jones 1' > $SEARCHOUT 2>&1
2012de962bdSlukemRC=$?
2022de962bdSlukem
2032de962bdSlukemif test $RC != 0 ; then
2042de962bdSlukem	echo "ldapsearch failed ($RC)!"
2052de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2062de962bdSlukem	exit $RC
2072de962bdSlukemfi
2082de962bdSlukem
209*e670fd5cSchristosLDIF=$MODRDNOUTPROVIDER3
2102de962bdSlukem
2112de962bdSlukemecho "Filtering ldapsearch results..."
212ef2f90d3Sadam$LDIFFILTER < $SEARCHOUT > $SEARCHFLT
2132de962bdSlukemecho "Filtering original ldif used to create database..."
214ef2f90d3Sadam$LDIFFILTER < $LDIF > $LDIFFLT
2152de962bdSlukemecho "Comparing filter output..."
2162de962bdSlukem$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
2172de962bdSlukem
2182de962bdSlukemif test $? != 0 ; then
2192de962bdSlukem	echo "comparison failed - modrdn operations did not complete correctly"
2202de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2212de962bdSlukem	exit -1
2222de962bdSlukemfi
2232de962bdSlukem
2242de962bdSlukemecho "Testing modrdn to another database (should fail with affectsMultipleDSAs)"
225*e670fd5cSchristos$LDAPMODRDN -D "$MANAGERDN" -H $URI1 -w $PASSWD > \
2262de962bdSlukem	$TESTOUT 2>&1 'cn=All Staff,ou=Groups,dc=example,dc=com' 'cn=Everyone'
2272de962bdSlukemRC=$?
2282de962bdSlukemcase $RC in
2292de962bdSlukem0)
2302de962bdSlukem	echo "ldapmodrdn succeeded, should have failed!"
2312de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2322de962bdSlukem	exit -1
2332de962bdSlukem	;;
2342de962bdSlukem71)
2352de962bdSlukem	;;
2362de962bdSlukem*)
2372de962bdSlukem	echo "ldapmodrdn failed ($RC)!"
2382de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2392de962bdSlukem	exit $RC
2402de962bdSlukem	;;
2412de962bdSlukemesac
2422de962bdSlukem
2432de962bdSlukemecho "Testing modrdn with newSuperior = target (should fail with unwillingToPerform)"
244*e670fd5cSchristos$LDAPMODRDN -D "$MANAGERDN" -H $URI1 -w $PASSWD > \
2452de962bdSlukem	$TESTOUT 2>&1  -s 'cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com' \
2462de962bdSlukem	'cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com' 'cn=James A Jones 1'
2472de962bdSlukem
2482de962bdSlukemRC=$?
2492de962bdSlukemcase $RC in
2502de962bdSlukem0)
2512de962bdSlukem	echo "ldapmodrdn succeeded, should have failed!"
2522de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2532de962bdSlukem	exit -1
2542de962bdSlukem	;;
2552de962bdSlukem53)
2562de962bdSlukem	;;
2572de962bdSlukem*)
2582de962bdSlukem	echo "ldapmodrdn failed ($RC)!"
2592de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2602de962bdSlukem	exit $RC
2612de962bdSlukem	;;
2622de962bdSlukemesac
2632de962bdSlukem
2642de962bdSlukemecho "Testing modrdn with newRdn exact same as target..."
265*e670fd5cSchristos$LDAPMODRDN -D "$MANAGERDN" -H $URI1 -w $PASSWD > \
2662de962bdSlukem	$TESTOUT 2>&1 'cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com' 'cn=James A Jones 1'
2672de962bdSlukem
2682de962bdSlukemRC=$?
2692de962bdSlukemcase $RC in
2702de962bdSlukem0)
2712de962bdSlukem	;;
2722de962bdSlukem*)
2732de962bdSlukem	echo "ldapmodrdn failed ($RC)!"
2742de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2752de962bdSlukem	exit $RC
2762de962bdSlukem	;;
2772de962bdSlukemesac
2782de962bdSlukem
2792de962bdSlukemecho "Testing modrdn with newRdn same as target, changed case..."
280*e670fd5cSchristos$LDAPMODRDN -D "$MANAGERDN" -H $URI1 -w $PASSWD > \
2812de962bdSlukem	$TESTOUT 2>&1 'cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com' 'cn=James A JONES 1'
2822de962bdSlukem
2832de962bdSlukemRC=$?
2842de962bdSlukemcase $RC in
2852de962bdSlukem0)
2862de962bdSlukem	;;
2872de962bdSlukem*)
2882de962bdSlukem	echo "ldapmodrdn failed ($RC)!"
2892de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2902de962bdSlukem	exit $RC
2912de962bdSlukem	;;
2922de962bdSlukemesac
2932de962bdSlukem
2942de962bdSlukemtest $KILLSERVERS != no && kill -HUP $KILLPIDS
2952de962bdSlukem
2962de962bdSlukemecho ">>>>> Test succeeded"
2972de962bdSlukem
2982de962bdSlukemtest $KILLSERVERS != no && wait
2992de962bdSlukem
3002de962bdSlukemexit 0
301