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