Home | History | Annotate | Line # | Download | only in scripts
test024-unique revision 1.1.1.1.2.2
      1  1.1.1.1.2.2  yamt #! /bin/sh
      2  1.1.1.1.2.2  yamt # $OpenLDAP: pkg/ldap/tests/scripts/test024-unique,v 1.8.2.5 2008/02/11 23:26:51 kurt Exp $
      3  1.1.1.1.2.2  yamt ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
      4  1.1.1.1.2.2  yamt ##
      5  1.1.1.1.2.2  yamt ## Copyright 2004-2008 The OpenLDAP Foundation.
      6  1.1.1.1.2.2  yamt ## All rights reserved.
      7  1.1.1.1.2.2  yamt ##
      8  1.1.1.1.2.2  yamt ## Redistribution and use in source and binary forms, with or without
      9  1.1.1.1.2.2  yamt ## modification, are permitted only as authorized by the OpenLDAP
     10  1.1.1.1.2.2  yamt ## Public License.
     11  1.1.1.1.2.2  yamt ##
     12  1.1.1.1.2.2  yamt ## A copy of this license is available in the file LICENSE in the
     13  1.1.1.1.2.2  yamt ## top-level directory of the distribution or, alternatively, at
     14  1.1.1.1.2.2  yamt ## <http://www.OpenLDAP.org/license.html>.
     15  1.1.1.1.2.2  yamt 
     16  1.1.1.1.2.2  yamt echo "running defines.sh"
     17  1.1.1.1.2.2  yamt . $SRCDIR/scripts/defines.sh
     18  1.1.1.1.2.2  yamt 
     19  1.1.1.1.2.2  yamt if test $UNIQUE = uniqueno; then
     20  1.1.1.1.2.2  yamt 	echo "Attribute Uniqueness overlay not available, test skipped"
     21  1.1.1.1.2.2  yamt 	exit 0
     22  1.1.1.1.2.2  yamt fi
     23  1.1.1.1.2.2  yamt 
     24  1.1.1.1.2.2  yamt mkdir -p $TESTDIR $DBDIR1
     25  1.1.1.1.2.2  yamt 
     26  1.1.1.1.2.2  yamt $SLAPPASSWD -g -n >$CONFIGPWF
     27  1.1.1.1.2.2  yamt echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
     28  1.1.1.1.2.2  yamt 
     29  1.1.1.1.2.2  yamt echo "Running slapadd to build slapd database..."
     30  1.1.1.1.2.2  yamt . $CONFFILTER $BACKEND $MONITORDB < $UNIQUECONF > $CONF1
     31  1.1.1.1.2.2  yamt $SLAPADD -f $CONF1 -l $LDIFUNIQUE
     32  1.1.1.1.2.2  yamt RC=$?
     33  1.1.1.1.2.2  yamt if test $RC != 0 ; then
     34  1.1.1.1.2.2  yamt 	echo "slapadd failed ($RC)!"
     35  1.1.1.1.2.2  yamt 	exit $RC
     36  1.1.1.1.2.2  yamt fi
     37  1.1.1.1.2.2  yamt 
     38  1.1.1.1.2.2  yamt echo "Starting slapd on TCP/IP port $PORT1..."
     39  1.1.1.1.2.2  yamt mkdir $TESTDIR/confdir
     40  1.1.1.1.2.2  yamt $SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
     41  1.1.1.1.2.2  yamt PID=$!
     42  1.1.1.1.2.2  yamt if test $WAIT != 0 ; then
     43  1.1.1.1.2.2  yamt     echo PID $PID
     44  1.1.1.1.2.2  yamt     read foo
     45  1.1.1.1.2.2  yamt fi
     46  1.1.1.1.2.2  yamt KILLPIDS="$PID"
     47  1.1.1.1.2.2  yamt 
     48  1.1.1.1.2.2  yamt sleep 1
     49  1.1.1.1.2.2  yamt 
     50  1.1.1.1.2.2  yamt echo "Testing slapd attribute uniqueness operations..."
     51  1.1.1.1.2.2  yamt for i in 0 1 2 3 4 5; do
     52  1.1.1.1.2.2  yamt 	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
     53  1.1.1.1.2.2  yamt 		'objectclass=*' > /dev/null 2>&1
     54  1.1.1.1.2.2  yamt 	RC=$?
     55  1.1.1.1.2.2  yamt 	if test $RC = 0 ; then
     56  1.1.1.1.2.2  yamt 		break
     57  1.1.1.1.2.2  yamt 	fi
     58  1.1.1.1.2.2  yamt 	echo "Waiting 5 seconds for slapd to start..."
     59  1.1.1.1.2.2  yamt 	sleep 5
     60  1.1.1.1.2.2  yamt done
     61  1.1.1.1.2.2  yamt 
     62  1.1.1.1.2.2  yamt if test $RC != 0 ; then
     63  1.1.1.1.2.2  yamt 	echo "ldapsearch failed ($RC)!"
     64  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     65  1.1.1.1.2.2  yamt 	exit $RC
     66  1.1.1.1.2.2  yamt fi
     67  1.1.1.1.2.2  yamt 
     68  1.1.1.1.2.2  yamt echo "Adding a unique record..."
     69  1.1.1.1.2.2  yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
     70  1.1.1.1.2.2  yamt 	> /dev/null << EOTUNIQ1
     71  1.1.1.1.2.2  yamt dn: uid=dave,ou=users,o=unique
     72  1.1.1.1.2.2  yamt objectClass: inetOrgPerson
     73  1.1.1.1.2.2  yamt uid: dave
     74  1.1.1.1.2.2  yamt sn: nothere
     75  1.1.1.1.2.2  yamt cn: dave
     76  1.1.1.1.2.2  yamt businessCategory: otest
     77  1.1.1.1.2.2  yamt carLicense: TEST
     78  1.1.1.1.2.2  yamt departmentNumber: 42
     79  1.1.1.1.2.2  yamt # NOTE: use special chars in attr value to be used
     80  1.1.1.1.2.2  yamt # in internal searches ITS#4212
     81  1.1.1.1.2.2  yamt displayName: Dave (ITS#4212)
     82  1.1.1.1.2.2  yamt employeeNumber: 69
     83  1.1.1.1.2.2  yamt employeeType: contractor
     84  1.1.1.1.2.2  yamt givenName: Dave
     85  1.1.1.1.2.2  yamt EOTUNIQ1
     86  1.1.1.1.2.2  yamt RC=$?
     87  1.1.1.1.2.2  yamt if test $RC != 0 ; then
     88  1.1.1.1.2.2  yamt 	echo "ldapadd failed ($RC)!"
     89  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     90  1.1.1.1.2.2  yamt 	exit $RC
     91  1.1.1.1.2.2  yamt fi
     92  1.1.1.1.2.2  yamt 
     93  1.1.1.1.2.2  yamt echo "Adding a non-unique record..."
     94  1.1.1.1.2.2  yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
     95  1.1.1.1.2.2  yamt 	 $TESTOUT 2>&1 << EOTUNIQ2
     96  1.1.1.1.2.2  yamt dn: uid=bill,ou=users,o=unique
     97  1.1.1.1.2.2  yamt objectClass: inetOrgPerson
     98  1.1.1.1.2.2  yamt uid: bill
     99  1.1.1.1.2.2  yamt sn: johnson
    100  1.1.1.1.2.2  yamt cn: bill
    101  1.1.1.1.2.2  yamt businessCategory: rtest
    102  1.1.1.1.2.2  yamt carLicense: ABC123
    103  1.1.1.1.2.2  yamt departmentNumber: 42
    104  1.1.1.1.2.2  yamt displayName: Bill
    105  1.1.1.1.2.2  yamt employeeNumber: 5150
    106  1.1.1.1.2.2  yamt employeeType: contractor
    107  1.1.1.1.2.2  yamt givenName: Bill
    108  1.1.1.1.2.2  yamt EOTUNIQ2
    109  1.1.1.1.2.2  yamt RC=$?
    110  1.1.1.1.2.2  yamt if test $RC != 19 ; then
    111  1.1.1.1.2.2  yamt 	echo "unique check failed ($RC)!"
    112  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    113  1.1.1.1.2.2  yamt 	exit -1
    114  1.1.1.1.2.2  yamt fi
    115  1.1.1.1.2.2  yamt 
    116  1.1.1.1.2.2  yamt echo Dynamically retrieving initial configuration...
    117  1.1.1.1.2.2  yamt $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/initial-config.ldif
    118  1.1.1.1.2.2  yamt cat <<EOF >$TESTDIR/initial-reference.ldif
    119  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    120  1.1.1.1.2.2  yamt objectClass: olcOverlayConfig
    121  1.1.1.1.2.2  yamt objectClass: olcUniqueConfig
    122  1.1.1.1.2.2  yamt olcOverlay: {0}unique
    123  1.1.1.1.2.2  yamt olcUniqueBase: o=unique
    124  1.1.1.1.2.2  yamt olcUniqueAttribute: employeeNumber
    125  1.1.1.1.2.2  yamt olcUniqueAttribute: displayName
    126  1.1.1.1.2.2  yamt 
    127  1.1.1.1.2.2  yamt EOF
    128  1.1.1.1.2.2  yamt diff $TESTDIR/initial-config.ldif $TESTDIR/initial-reference.ldif > /dev/null 2>&1
    129  1.1.1.1.2.2  yamt RC=$?
    130  1.1.1.1.2.2  yamt if test $RC != 0 ; then
    131  1.1.1.1.2.2  yamt     echo "Initial configuration is not reported correctly."
    132  1.1.1.1.2.2  yamt     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    133  1.1.1.1.2.2  yamt     exit -1
    134  1.1.1.1.2.2  yamt fi
    135  1.1.1.1.2.2  yamt 
    136  1.1.1.1.2.2  yamt echo Dynamically trying to add a URI with legacy attrs present...
    137  1.1.1.1.2.2  yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
    138  1.1.1.1.2.2  yamt     > $TESTOUT 2>&1 <<EOF
    139  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    140  1.1.1.1.2.2  yamt changetype: modify
    141  1.1.1.1.2.2  yamt add: olcUniqueURI
    142  1.1.1.1.2.2  yamt olcUniqueURI: ldap:///?employeeNumber,displayName?sub
    143  1.1.1.1.2.2  yamt EOF
    144  1.1.1.1.2.2  yamt RC=$?
    145  1.1.1.1.2.2  yamt if test $RC != 80 ; then
    146  1.1.1.1.2.2  yamt 	echo "legacy and unique_uri allowed together"
    147  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    148  1.1.1.1.2.2  yamt 	exit -1
    149  1.1.1.1.2.2  yamt fi
    150  1.1.1.1.2.2  yamt 
    151  1.1.1.1.2.2  yamt echo Dynamically trying to add legacy ignored attrs with legacy attrs present...
    152  1.1.1.1.2.2  yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
    153  1.1.1.1.2.2  yamt     > $TESTOUT 2>&1 <<EOF
    154  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    155  1.1.1.1.2.2  yamt changetype: modify
    156  1.1.1.1.2.2  yamt add: olcUniqueIgnore
    157  1.1.1.1.2.2  yamt olcUniqueIgnore: objectClass
    158  1.1.1.1.2.2  yamt EOF
    159  1.1.1.1.2.2  yamt RC=$?
    160  1.1.1.1.2.2  yamt if test $RC != 80 ; then
    161  1.1.1.1.2.2  yamt 	echo "legacy attrs and legacy ignore attrs allowed together"
    162  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    163  1.1.1.1.2.2  yamt 	exit -1
    164  1.1.1.1.2.2  yamt fi
    165  1.1.1.1.2.2  yamt 
    166  1.1.1.1.2.2  yamt echo Verifying initial configuration intact...
    167  1.1.1.1.2.2  yamt $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/initial-config-recheck.ldif
    168  1.1.1.1.2.2  yamt diff $TESTDIR/initial-config-recheck.ldif $TESTDIR/initial-reference.ldif > /dev/null 2>&1
    169  1.1.1.1.2.2  yamt RC=$?
    170  1.1.1.1.2.2  yamt if test $RC != 0 ; then
    171  1.1.1.1.2.2  yamt     echo "Initial configuration damaged by unsuccessful modifies."
    172  1.1.1.1.2.2  yamt     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    173  1.1.1.1.2.2  yamt     exit -1
    174  1.1.1.1.2.2  yamt fi
    175  1.1.1.1.2.2  yamt 
    176  1.1.1.1.2.2  yamt echo Dynamically removing legacy base...
    177  1.1.1.1.2.2  yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
    178  1.1.1.1.2.2  yamt     > $TESTOUT 2>&1 <<EOF
    179  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    180  1.1.1.1.2.2  yamt changetype: modify
    181  1.1.1.1.2.2  yamt delete: olcUniqueBase
    182  1.1.1.1.2.2  yamt EOF
    183  1.1.1.1.2.2  yamt RC=$?
    184  1.1.1.1.2.2  yamt if test $RC != 0 ; then
    185  1.1.1.1.2.2  yamt 	echo "base removal failed"
    186  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    187  1.1.1.1.2.2  yamt 	exit -1
    188  1.1.1.1.2.2  yamt fi
    189  1.1.1.1.2.2  yamt 
    190  1.1.1.1.2.2  yamt echo Verifying base removal...
    191  1.1.1.1.2.2  yamt $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/baseremoval-config.ldif
    192  1.1.1.1.2.2  yamt cat >$TESTDIR/baseremoval-reference.ldif <<EOF
    193  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    194  1.1.1.1.2.2  yamt objectClass: olcOverlayConfig
    195  1.1.1.1.2.2  yamt objectClass: olcUniqueConfig
    196  1.1.1.1.2.2  yamt olcOverlay: {0}unique
    197  1.1.1.1.2.2  yamt olcUniqueAttribute: employeeNumber
    198  1.1.1.1.2.2  yamt olcUniqueAttribute: displayName
    199  1.1.1.1.2.2  yamt 
    200  1.1.1.1.2.2  yamt EOF
    201  1.1.1.1.2.2  yamt diff $TESTDIR/baseremoval-config.ldif $TESTDIR/baseremoval-reference.ldif > /dev/null 2>&1
    202  1.1.1.1.2.2  yamt RC=$?
    203  1.1.1.1.2.2  yamt if test $RC != 0 ; then
    204  1.1.1.1.2.2  yamt     echo "Configuration damaged by base removal"
    205  1.1.1.1.2.2  yamt     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    206  1.1.1.1.2.2  yamt     exit -1
    207  1.1.1.1.2.2  yamt fi
    208  1.1.1.1.2.2  yamt 
    209  1.1.1.1.2.2  yamt echo "Adding a non-unique record..."
    210  1.1.1.1.2.2  yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
    211  1.1.1.1.2.2  yamt 	 $TESTOUT 2>&1 << EOTUNIQ2
    212  1.1.1.1.2.2  yamt dn: uid=bill,ou=users,o=unique
    213  1.1.1.1.2.2  yamt objectClass: inetOrgPerson
    214  1.1.1.1.2.2  yamt uid: bill
    215  1.1.1.1.2.2  yamt sn: johnson
    216  1.1.1.1.2.2  yamt cn: bill
    217  1.1.1.1.2.2  yamt businessCategory: rtest
    218  1.1.1.1.2.2  yamt carLicense: ABC123
    219  1.1.1.1.2.2  yamt departmentNumber: 42
    220  1.1.1.1.2.2  yamt displayName: Bill
    221  1.1.1.1.2.2  yamt employeeNumber: 5150
    222  1.1.1.1.2.2  yamt employeeType: contractor
    223  1.1.1.1.2.2  yamt givenName: Bill
    224  1.1.1.1.2.2  yamt EOTUNIQ2
    225  1.1.1.1.2.2  yamt RC=$?
    226  1.1.1.1.2.2  yamt if test $RC != 19 ; then
    227  1.1.1.1.2.2  yamt 	echo "unique check failed ($RC)!"
    228  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    229  1.1.1.1.2.2  yamt 	exit -1
    230  1.1.1.1.2.2  yamt fi
    231  1.1.1.1.2.2  yamt 
    232  1.1.1.1.2.2  yamt echo Trying a legacy base outside of the backend...
    233  1.1.1.1.2.2  yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
    234  1.1.1.1.2.2  yamt     > $TESTOUT 2>&1 <<EOF
    235  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    236  1.1.1.1.2.2  yamt changetype: modify
    237  1.1.1.1.2.2  yamt add: olcUniqueBase
    238  1.1.1.1.2.2  yamt olcUniqueBase: cn=config
    239  1.1.1.1.2.2  yamt EOF
    240  1.1.1.1.2.2  yamt RC=$?
    241  1.1.1.1.2.2  yamt if test $RC != 80 ; then
    242  1.1.1.1.2.2  yamt 	echo "out of backend scope base allowed"
    243  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    244  1.1.1.1.2.2  yamt 	exit -1
    245  1.1.1.1.2.2  yamt fi
    246  1.1.1.1.2.2  yamt 
    247  1.1.1.1.2.2  yamt echo "Adding and removing attrs..."
    248  1.1.1.1.2.2  yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
    249  1.1.1.1.2.2  yamt     > $TESTOUT 2>&1 <<EOF
    250  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    251  1.1.1.1.2.2  yamt changetype: modify
    252  1.1.1.1.2.2  yamt add: olcUniqueAttribute
    253  1.1.1.1.2.2  yamt olcUniqueAttribute: description
    254  1.1.1.1.2.2  yamt olcUniqueAttribute: telephoneNumber
    255  1.1.1.1.2.2  yamt -
    256  1.1.1.1.2.2  yamt delete: olcUniqueAttribute
    257  1.1.1.1.2.2  yamt olcUniqueAttribute: displayName
    258  1.1.1.1.2.2  yamt EOF
    259  1.1.1.1.2.2  yamt RC=$?
    260  1.1.1.1.2.2  yamt if test $RC != 0 ; then
    261  1.1.1.1.2.2  yamt 	echo "Unable to remove an attribute"
    262  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    263  1.1.1.1.2.2  yamt 	exit -1
    264  1.1.1.1.2.2  yamt fi
    265  1.1.1.1.2.2  yamt 
    266  1.1.1.1.2.2  yamt echo "Verifying we removed the right attr..."
    267  1.1.1.1.2.2  yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
    268  1.1.1.1.2.2  yamt 	 $TESTOUT 2>&1 << EOTUNIQ2
    269  1.1.1.1.2.2  yamt dn: uid=bill,ou=users,o=unique
    270  1.1.1.1.2.2  yamt objectClass: inetOrgPerson
    271  1.1.1.1.2.2  yamt uid: bill
    272  1.1.1.1.2.2  yamt sn: johnson
    273  1.1.1.1.2.2  yamt cn: bill
    274  1.1.1.1.2.2  yamt businessCategory: rtest
    275  1.1.1.1.2.2  yamt carLicense: ABC123
    276  1.1.1.1.2.2  yamt departmentNumber: 42
    277  1.1.1.1.2.2  yamt displayName: Bill
    278  1.1.1.1.2.2  yamt employeeNumber: 5150
    279  1.1.1.1.2.2  yamt employeeType: contractor
    280  1.1.1.1.2.2  yamt givenName: Bill
    281  1.1.1.1.2.2  yamt EOTUNIQ2
    282  1.1.1.1.2.2  yamt RC=$?
    283  1.1.1.1.2.2  yamt if test $RC != 19 ; then
    284  1.1.1.1.2.2  yamt 	echo "olcUniqueAttribtue single deletion hit the wrong value"
    285  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    286  1.1.1.1.2.2  yamt 	exit -1
    287  1.1.1.1.2.2  yamt fi
    288  1.1.1.1.2.2  yamt 
    289  1.1.1.1.2.2  yamt echo Removing legacy config and adding URIs...
    290  1.1.1.1.2.2  yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
    291  1.1.1.1.2.2  yamt     > $TESTOUT 2>&1 <<EOF
    292  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    293  1.1.1.1.2.2  yamt changetype: modify
    294  1.1.1.1.2.2  yamt delete: olcUniqueAttribute
    295  1.1.1.1.2.2  yamt -
    296  1.1.1.1.2.2  yamt add: olcUniqueURI
    297  1.1.1.1.2.2  yamt olcUniqueURI: ldap:///?employeeNumber,displayName?sub
    298  1.1.1.1.2.2  yamt olcUniqueURI: ldap:///?description?one
    299  1.1.1.1.2.2  yamt EOF
    300  1.1.1.1.2.2  yamt RC=$?
    301  1.1.1.1.2.2  yamt if test $RC != 0 ; then
    302  1.1.1.1.2.2  yamt 	echo "Reconfiguration to URIs failed"
    303  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    304  1.1.1.1.2.2  yamt 	exit -1
    305  1.1.1.1.2.2  yamt fi
    306  1.1.1.1.2.2  yamt 
    307  1.1.1.1.2.2  yamt echo Dynamically retrieving second configuration...
    308  1.1.1.1.2.2  yamt $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/second-config.ldif
    309  1.1.1.1.2.2  yamt cat >$TESTDIR/second-reference.ldif <<EOF
    310  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    311  1.1.1.1.2.2  yamt objectClass: olcOverlayConfig
    312  1.1.1.1.2.2  yamt objectClass: olcUniqueConfig
    313  1.1.1.1.2.2  yamt olcOverlay: {0}unique
    314  1.1.1.1.2.2  yamt olcUniqueURI: ldap:///?employeeNumber,displayName?sub
    315  1.1.1.1.2.2  yamt olcUniqueURI: ldap:///?description?one
    316  1.1.1.1.2.2  yamt 
    317  1.1.1.1.2.2  yamt EOF
    318  1.1.1.1.2.2  yamt diff $TESTDIR/second-config.ldif $TESTDIR/second-reference.ldif > /dev/null 2>&1
    319  1.1.1.1.2.2  yamt RC=$?
    320  1.1.1.1.2.2  yamt if test $RC != 0 ; then
    321  1.1.1.1.2.2  yamt     echo "Second configuration is not reported correctly."
    322  1.1.1.1.2.2  yamt     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    323  1.1.1.1.2.2  yamt     exit -1
    324  1.1.1.1.2.2  yamt fi
    325  1.1.1.1.2.2  yamt 
    326  1.1.1.1.2.2  yamt echo "Adding a non-unique record..."
    327  1.1.1.1.2.2  yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
    328  1.1.1.1.2.2  yamt 	 $TESTOUT 2>&1 << EOTUNIQ2
    329  1.1.1.1.2.2  yamt dn: uid=bill,ou=users,o=unique
    330  1.1.1.1.2.2  yamt objectClass: inetOrgPerson
    331  1.1.1.1.2.2  yamt uid: bill
    332  1.1.1.1.2.2  yamt sn: johnson
    333  1.1.1.1.2.2  yamt cn: bill
    334  1.1.1.1.2.2  yamt businessCategory: rtest
    335  1.1.1.1.2.2  yamt carLicense: ABC123
    336  1.1.1.1.2.2  yamt departmentNumber: 42
    337  1.1.1.1.2.2  yamt displayName: Bill
    338  1.1.1.1.2.2  yamt employeeNumber: 5150
    339  1.1.1.1.2.2  yamt employeeType: contractor
    340  1.1.1.1.2.2  yamt givenName: Bill
    341  1.1.1.1.2.2  yamt EOTUNIQ2
    342  1.1.1.1.2.2  yamt RC=$?
    343  1.1.1.1.2.2  yamt if test $RC != 19 ; then
    344  1.1.1.1.2.2  yamt 	echo "unique check failed ($RC)!"
    345  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    346  1.1.1.1.2.2  yamt 	exit -1
    347  1.1.1.1.2.2  yamt fi
    348  1.1.1.1.2.2  yamt 
    349  1.1.1.1.2.2  yamt echo Dynamically trying to add legacy base
    350  1.1.1.1.2.2  yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
    351  1.1.1.1.2.2  yamt     > $TESTOUT 2>&1 <<EOF
    352  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    353  1.1.1.1.2.2  yamt changetype: modify
    354  1.1.1.1.2.2  yamt add: olcUniqueBase
    355  1.1.1.1.2.2  yamt olcUniqueBase: o=unique
    356  1.1.1.1.2.2  yamt EOF
    357  1.1.1.1.2.2  yamt RC=$?
    358  1.1.1.1.2.2  yamt if test $RC != 80 ; then
    359  1.1.1.1.2.2  yamt 	echo "legacy base allowed with URIs"
    360  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    361  1.1.1.1.2.2  yamt 	exit -1
    362  1.1.1.1.2.2  yamt fi
    363  1.1.1.1.2.2  yamt 
    364  1.1.1.1.2.2  yamt echo Dynamically trying to add legacy attrs
    365  1.1.1.1.2.2  yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
    366  1.1.1.1.2.2  yamt     > $TESTOUT 2>&1 <<EOF
    367  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    368  1.1.1.1.2.2  yamt changetype: modify
    369  1.1.1.1.2.2  yamt add: olcUniqueAttribute
    370  1.1.1.1.2.2  yamt olcUniqueAttribute: description
    371  1.1.1.1.2.2  yamt EOF
    372  1.1.1.1.2.2  yamt RC=$?
    373  1.1.1.1.2.2  yamt if test $RC != 80 ; then
    374  1.1.1.1.2.2  yamt 	echo "legacy attributes allowed with URIs"
    375  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    376  1.1.1.1.2.2  yamt 	exit -1
    377  1.1.1.1.2.2  yamt fi
    378  1.1.1.1.2.2  yamt 
    379  1.1.1.1.2.2  yamt echo Dynamically trying to add legacy strictness
    380  1.1.1.1.2.2  yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
    381  1.1.1.1.2.2  yamt     > $TESTOUT 2>&1 <<EOF
    382  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    383  1.1.1.1.2.2  yamt changetype: modify
    384  1.1.1.1.2.2  yamt add: olcUniqueStrict
    385  1.1.1.1.2.2  yamt olcUniqueStrict: TRUE
    386  1.1.1.1.2.2  yamt EOF
    387  1.1.1.1.2.2  yamt RC=$?
    388  1.1.1.1.2.2  yamt if test $RC != 80 ; then
    389  1.1.1.1.2.2  yamt 	echo "legacy strictness allowed with URIs"
    390  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    391  1.1.1.1.2.2  yamt 	exit -1
    392  1.1.1.1.2.2  yamt fi
    393  1.1.1.1.2.2  yamt 
    394  1.1.1.1.2.2  yamt #echo ----------------------
    395  1.1.1.1.2.2  yamt echo Dynamically trying a bad filter...
    396  1.1.1.1.2.2  yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
    397  1.1.1.1.2.2  yamt     > $TESTOUT 2>&1 <<EOF
    398  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    399  1.1.1.1.2.2  yamt changetype: modify
    400  1.1.1.1.2.2  yamt replace: olcUniqueURI
    401  1.1.1.1.2.2  yamt olcUniqueURI: ldap:///?sn?sub?((cn=e*))
    402  1.1.1.1.2.2  yamt EOF
    403  1.1.1.1.2.2  yamt RC=$?
    404  1.1.1.1.2.2  yamt if test $RC != 80 ; then
    405  1.1.1.1.2.2  yamt 	echo "bad filter allowed"
    406  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    407  1.1.1.1.2.2  yamt 	exit -1
    408  1.1.1.1.2.2  yamt fi
    409  1.1.1.1.2.2  yamt 
    410  1.1.1.1.2.2  yamt echo Verifying second configuration intact...
    411  1.1.1.1.2.2  yamt $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/second-config-recheck.ldif
    412  1.1.1.1.2.2  yamt diff $TESTDIR/second-config-recheck.ldif $TESTDIR/second-reference.ldif > /dev/null 2>&1
    413  1.1.1.1.2.2  yamt RC=$?
    414  1.1.1.1.2.2  yamt if test $RC != 0 ; then
    415  1.1.1.1.2.2  yamt     echo "Second configuration damaged by rejected modifies."
    416  1.1.1.1.2.2  yamt     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    417  1.1.1.1.2.2  yamt     exit -1
    418  1.1.1.1.2.2  yamt fi
    419  1.1.1.1.2.2  yamt 
    420  1.1.1.1.2.2  yamt #echo ----------------------
    421  1.1.1.1.2.2  yamt echo Dynamically reconfiguring to use different URIs...
    422  1.1.1.1.2.2  yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
    423  1.1.1.1.2.2  yamt     > $TESTOUT 2>&1 <<EOF
    424  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    425  1.1.1.1.2.2  yamt changetype: modify
    426  1.1.1.1.2.2  yamt add: olcUniqueURI
    427  1.1.1.1.2.2  yamt olcUniqueURI: ldap:///?sn?sub?(cn=e*)
    428  1.1.1.1.2.2  yamt -
    429  1.1.1.1.2.2  yamt delete: olcUniqueURI
    430  1.1.1.1.2.2  yamt olcUniqueURI: ldap:///?description?one
    431  1.1.1.1.2.2  yamt EOF
    432  1.1.1.1.2.2  yamt RC=$?
    433  1.1.1.1.2.2  yamt if test $RC != 0 ; then
    434  1.1.1.1.2.2  yamt 	echo "unable to reconfigure"
    435  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    436  1.1.1.1.2.2  yamt 	exit -1
    437  1.1.1.1.2.2  yamt fi
    438  1.1.1.1.2.2  yamt 
    439  1.1.1.1.2.2  yamt echo Dynamically retrieving third configuration...
    440  1.1.1.1.2.2  yamt $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/third-config.ldif
    441  1.1.1.1.2.2  yamt cat >$TESTDIR/third-reference.ldif <<EOF
    442  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    443  1.1.1.1.2.2  yamt objectClass: olcOverlayConfig
    444  1.1.1.1.2.2  yamt objectClass: olcUniqueConfig
    445  1.1.1.1.2.2  yamt olcOverlay: {0}unique
    446  1.1.1.1.2.2  yamt olcUniqueURI: ldap:///?employeeNumber,displayName?sub
    447  1.1.1.1.2.2  yamt olcUniqueURI: ldap:///?sn?sub?(cn=e*)
    448  1.1.1.1.2.2  yamt 
    449  1.1.1.1.2.2  yamt EOF
    450  1.1.1.1.2.2  yamt diff $TESTDIR/third-config.ldif $TESTDIR/third-reference.ldif > /dev/null 2>&1
    451  1.1.1.1.2.2  yamt RC=$?
    452  1.1.1.1.2.2  yamt if test $RC != 0 ; then
    453  1.1.1.1.2.2  yamt     echo "Third configuration is not reported correctly."
    454  1.1.1.1.2.2  yamt     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    455  1.1.1.1.2.2  yamt     exit -1
    456  1.1.1.1.2.2  yamt fi
    457  1.1.1.1.2.2  yamt 
    458  1.1.1.1.2.2  yamt echo "Adding a record unique in both domains if filtered..."
    459  1.1.1.1.2.2  yamt 
    460  1.1.1.1.2.2  yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
    461  1.1.1.1.2.2  yamt 	 $TESTOUT 2>&1 << EOF
    462  1.1.1.1.2.2  yamt dn: uid=edgar,ou=users,o=unique
    463  1.1.1.1.2.2  yamt objectClass: inetOrgPerson
    464  1.1.1.1.2.2  yamt uid: edgar
    465  1.1.1.1.2.2  yamt sn: johnson
    466  1.1.1.1.2.2  yamt cn: edgar
    467  1.1.1.1.2.2  yamt EOF
    468  1.1.1.1.2.2  yamt 
    469  1.1.1.1.2.2  yamt RC=$?
    470  1.1.1.1.2.2  yamt if test $RC != 0 ; then
    471  1.1.1.1.2.2  yamt 	echo "unique check failed ($RC)!"
    472  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    473  1.1.1.1.2.2  yamt 	exit -1
    474  1.1.1.1.2.2  yamt fi
    475  1.1.1.1.2.2  yamt 
    476  1.1.1.1.2.2  yamt echo "Adding a record unique in one domain, non-unique in the filtered domain..."
    477  1.1.1.1.2.2  yamt 
    478  1.1.1.1.2.2  yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
    479  1.1.1.1.2.2  yamt 	 $TESTOUT 2>&1 << EOF
    480  1.1.1.1.2.2  yamt dn: uid=elvis,ou=users,o=unique
    481  1.1.1.1.2.2  yamt objectClass: inetOrgPerson
    482  1.1.1.1.2.2  yamt uid: elvis
    483  1.1.1.1.2.2  yamt sn: johnson
    484  1.1.1.1.2.2  yamt cn: elvis
    485  1.1.1.1.2.2  yamt EOF
    486  1.1.1.1.2.2  yamt 
    487  1.1.1.1.2.2  yamt RC=$?
    488  1.1.1.1.2.2  yamt if test $RC != 19 ; then
    489  1.1.1.1.2.2  yamt 	echo "unique check failed ($RC)!"
    490  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    491  1.1.1.1.2.2  yamt 	exit -1
    492  1.1.1.1.2.2  yamt fi
    493  1.1.1.1.2.2  yamt 
    494  1.1.1.1.2.2  yamt #echo ----------------------
    495  1.1.1.1.2.2  yamt echo Dynamically reconfiguring to use attribute-ignore URIs...
    496  1.1.1.1.2.2  yamt $LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \
    497  1.1.1.1.2.2  yamt     > $TESTOUT 2>&1 <<EOF
    498  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    499  1.1.1.1.2.2  yamt changetype: modify
    500  1.1.1.1.2.2  yamt replace: olcUniqueURI
    501  1.1.1.1.2.2  yamt olcUniqueURI: ignore ldap:///?objectClass,uid,cn,sn?sub
    502  1.1.1.1.2.2  yamt EOF
    503  1.1.1.1.2.2  yamt RC=$?
    504  1.1.1.1.2.2  yamt if test $RC != 0 ; then
    505  1.1.1.1.2.2  yamt 	echo "unable to reconfigure"
    506  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    507  1.1.1.1.2.2  yamt 	exit -1
    508  1.1.1.1.2.2  yamt fi
    509  1.1.1.1.2.2  yamt 
    510  1.1.1.1.2.2  yamt echo Dynamically retrieving fourth configuration...
    511  1.1.1.1.2.2  yamt $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/fourth-config.ldif
    512  1.1.1.1.2.2  yamt cat >$TESTDIR/fourth-reference.ldif <<EOF
    513  1.1.1.1.2.2  yamt dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    514  1.1.1.1.2.2  yamt objectClass: olcOverlayConfig
    515  1.1.1.1.2.2  yamt objectClass: olcUniqueConfig
    516  1.1.1.1.2.2  yamt olcOverlay: {0}unique
    517  1.1.1.1.2.2  yamt olcUniqueURI: ignore ldap:///?objectClass,uid,cn,sn?sub
    518  1.1.1.1.2.2  yamt 
    519  1.1.1.1.2.2  yamt EOF
    520  1.1.1.1.2.2  yamt diff $TESTDIR/fourth-config.ldif $TESTDIR/fourth-reference.ldif > /dev/null 2>&1
    521  1.1.1.1.2.2  yamt RC=$?
    522  1.1.1.1.2.2  yamt if test $RC != 0 ; then
    523  1.1.1.1.2.2  yamt     echo "Fourth configuration is not reported correctly."
    524  1.1.1.1.2.2  yamt     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    525  1.1.1.1.2.2  yamt     exit -1
    526  1.1.1.1.2.2  yamt fi
    527  1.1.1.1.2.2  yamt 
    528  1.1.1.1.2.2  yamt echo "Adding a record unique in the ignore-domain..."
    529  1.1.1.1.2.2  yamt 
    530  1.1.1.1.2.2  yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
    531  1.1.1.1.2.2  yamt 	 $TESTOUT 2>&1 << EOF
    532  1.1.1.1.2.2  yamt dn: uid=elvis,ou=users,o=unique
    533  1.1.1.1.2.2  yamt objectClass: inetOrgPerson
    534  1.1.1.1.2.2  yamt uid: elvis
    535  1.1.1.1.2.2  yamt sn: johnson
    536  1.1.1.1.2.2  yamt cn: elvis
    537  1.1.1.1.2.2  yamt description: left the building
    538  1.1.1.1.2.2  yamt EOF
    539  1.1.1.1.2.2  yamt 
    540  1.1.1.1.2.2  yamt RC=$?
    541  1.1.1.1.2.2  yamt if test $RC != 0 ; then
    542  1.1.1.1.2.2  yamt 	echo "unique check failed ($RC)!"
    543  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    544  1.1.1.1.2.2  yamt 	exit -1
    545  1.1.1.1.2.2  yamt fi
    546  1.1.1.1.2.2  yamt 
    547  1.1.1.1.2.2  yamt echo "Adding a record non-unique in the ignore-domain..."
    548  1.1.1.1.2.2  yamt 
    549  1.1.1.1.2.2  yamt $LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
    550  1.1.1.1.2.2  yamt 	 $TESTOUT 2>&1 << EOF
    551  1.1.1.1.2.2  yamt dn: uid=harry,ou=users,o=unique
    552  1.1.1.1.2.2  yamt objectClass: inetOrgPerson
    553  1.1.1.1.2.2  yamt uid: harry
    554  1.1.1.1.2.2  yamt sn: johnson
    555  1.1.1.1.2.2  yamt cn: harry
    556  1.1.1.1.2.2  yamt description: left the building
    557  1.1.1.1.2.2  yamt EOF
    558  1.1.1.1.2.2  yamt 
    559  1.1.1.1.2.2  yamt RC=$?
    560  1.1.1.1.2.2  yamt if test $RC != 19 ; then
    561  1.1.1.1.2.2  yamt 	echo "unique check failed ($RC)!"
    562  1.1.1.1.2.2  yamt 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    563  1.1.1.1.2.2  yamt 	exit -1
    564  1.1.1.1.2.2  yamt fi
    565  1.1.1.1.2.2  yamt 
    566  1.1.1.1.2.2  yamt test $KILLSERVERS != no && kill -HUP $KILLPIDS
    567  1.1.1.1.2.2  yamt 
    568  1.1.1.1.2.2  yamt echo ">>>>> Test succeeded"
    569  1.1.1.1.2.2  yamt 
    570  1.1.1.1.2.2  yamt test $KILLSERVERS != no && wait
    571  1.1.1.1.2.2  yamt 
    572  1.1.1.1.2.2  yamt exit 0
    573