Home | History | Annotate | Line # | Download | only in scripts
      1       1.1     lukem #! /bin/sh
      2   1.1.1.4      tron # $OpenLDAP$
      3       1.1     lukem ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
      4       1.1     lukem ##
      5  1.1.1.10  christos ## Copyright 2004-2024 The OpenLDAP Foundation.
      6       1.1     lukem ## All rights reserved.
      7       1.1     lukem ##
      8       1.1     lukem ## Redistribution and use in source and binary forms, with or without
      9       1.1     lukem ## modification, are permitted only as authorized by the OpenLDAP
     10       1.1     lukem ## Public License.
     11       1.1     lukem ##
     12       1.1     lukem ## A copy of this license is available in the file LICENSE in the
     13       1.1     lukem ## top-level directory of the distribution or, alternatively, at
     14       1.1     lukem ## <http://www.OpenLDAP.org/license.html>.
     15       1.1     lukem 
     16       1.1     lukem echo "running defines.sh"
     17       1.1     lukem . $SRCDIR/scripts/defines.sh
     18       1.1     lukem 
     19       1.1     lukem if test $UNIQUE = uniqueno; then
     20       1.1     lukem 	echo "Attribute Uniqueness overlay not available, test skipped"
     21       1.1     lukem 	exit 0
     22       1.1     lukem fi
     23       1.1     lukem 
     24   1.1.1.3      adam RCODEconstraint=19
     25   1.1.1.9  christos RCODEnorelax=50
     26   1.1.1.3      adam test $BACKEND = null && RCODEconstraint=0
     27   1.1.1.3      adam 
     28       1.1     lukem mkdir -p $TESTDIR $DBDIR1
     29       1.1     lukem 
     30       1.1     lukem $SLAPPASSWD -g -n >$CONFIGPWF
     31       1.1     lukem echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
     32       1.1     lukem 
     33       1.1     lukem echo "Running slapadd to build slapd database..."
     34   1.1.1.9  christos . $CONFFILTER $BACKEND < $UNIQUECONF > $CONF1
     35       1.1     lukem $SLAPADD -f $CONF1 -l $LDIFUNIQUE
     36       1.1     lukem RC=$?
     37       1.1     lukem if test $RC != 0 ; then
     38       1.1     lukem 	echo "slapadd failed ($RC)!"
     39       1.1     lukem 	exit $RC
     40       1.1     lukem fi
     41       1.1     lukem 
     42       1.1     lukem echo "Starting slapd on TCP/IP port $PORT1..."
     43       1.1     lukem mkdir $TESTDIR/confdir
     44   1.1.1.9  christos $SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL > $LOG1 2>&1 &
     45       1.1     lukem PID=$!
     46       1.1     lukem if test $WAIT != 0 ; then
     47       1.1     lukem     echo PID $PID
     48       1.1     lukem     read foo
     49       1.1     lukem fi
     50       1.1     lukem KILLPIDS="$PID"
     51       1.1     lukem 
     52       1.1     lukem sleep 1
     53       1.1     lukem 
     54       1.1     lukem echo "Testing slapd attribute uniqueness operations..."
     55       1.1     lukem for i in 0 1 2 3 4 5; do
     56   1.1.1.9  christos 	$LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
     57       1.1     lukem 		'objectclass=*' > /dev/null 2>&1
     58       1.1     lukem 	RC=$?
     59       1.1     lukem 	if test $RC = 0 ; then
     60       1.1     lukem 		break
     61       1.1     lukem 	fi
     62       1.1     lukem 	echo "Waiting 5 seconds for slapd to start..."
     63       1.1     lukem 	sleep 5
     64       1.1     lukem done
     65       1.1     lukem 
     66       1.1     lukem if test $RC != 0 ; then
     67       1.1     lukem 	echo "ldapsearch failed ($RC)!"
     68       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     69       1.1     lukem 	exit $RC
     70       1.1     lukem fi
     71       1.1     lukem 
     72       1.1     lukem echo "Adding a unique record..."
     73   1.1.1.9  christos $LDAPADD -D "$UNIQUEDN" -H $URI1 -w $PASSWD \
     74       1.1     lukem 	> /dev/null << EOTUNIQ1
     75       1.1     lukem dn: uid=dave,ou=users,o=unique
     76       1.1     lukem objectClass: inetOrgPerson
     77   1.1.1.5  christos objectClass: simpleSecurityObject
     78       1.1     lukem uid: dave
     79       1.1     lukem sn: nothere
     80       1.1     lukem cn: dave
     81       1.1     lukem businessCategory: otest
     82       1.1     lukem carLicense: TEST
     83       1.1     lukem departmentNumber: 42
     84       1.1     lukem # NOTE: use special chars in attr value to be used
     85       1.1     lukem # in internal searches ITS#4212
     86       1.1     lukem displayName: Dave (ITS#4212)
     87       1.1     lukem employeeNumber: 69
     88       1.1     lukem employeeType: contractor
     89       1.1     lukem givenName: Dave
     90   1.1.1.5  christos userpassword: $PASSWD
     91       1.1     lukem EOTUNIQ1
     92       1.1     lukem RC=$?
     93       1.1     lukem if test $RC != 0 ; then
     94       1.1     lukem 	echo "ldapadd failed ($RC)!"
     95       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     96       1.1     lukem 	exit $RC
     97       1.1     lukem fi
     98       1.1     lukem 
     99       1.1     lukem echo "Adding a non-unique record..."
    100   1.1.1.9  christos $LDAPADD -D "uid=dave,ou=users,o=unique" -H $URI1 -w $PASSWD > \
    101       1.1     lukem 	 $TESTOUT 2>&1 << EOTUNIQ2
    102       1.1     lukem dn: uid=bill,ou=users,o=unique
    103       1.1     lukem objectClass: inetOrgPerson
    104       1.1     lukem uid: bill
    105       1.1     lukem sn: johnson
    106       1.1     lukem cn: bill
    107       1.1     lukem businessCategory: rtest
    108       1.1     lukem carLicense: ABC123
    109       1.1     lukem departmentNumber: 42
    110       1.1     lukem displayName: Bill
    111       1.1     lukem employeeNumber: 5150
    112       1.1     lukem employeeType: contractor
    113       1.1     lukem givenName: Bill
    114       1.1     lukem EOTUNIQ2
    115       1.1     lukem RC=$?
    116   1.1.1.3      adam if test $RC != $RCODEconstraint ; then
    117       1.1     lukem 	echo "unique check failed ($RC)!"
    118       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    119  1.1.1.10  christos 	exit 1
    120       1.1     lukem fi
    121       1.1     lukem 
    122   1.1.1.9  christos # ITS#6641/8057/8245
    123   1.1.1.5  christos echo "Trying to bypass uniqueness as a normal user..."
    124   1.1.1.9  christos $LDAPADD -e \!relax -D "uid=dave,ou=users,o=unique" -H $URI1 -w $PASSWD > \
    125   1.1.1.9  christos 	 $TESTOUT 2>&1 << EOTUNIQ2
    126   1.1.1.9  christos dn: uid=bill,ou=users,o=unique
    127   1.1.1.9  christos objectClass: inetOrgPerson
    128   1.1.1.9  christos uid: bill
    129   1.1.1.9  christos sn: johnson
    130   1.1.1.9  christos cn: bill
    131   1.1.1.9  christos businessCategory: rtest
    132   1.1.1.9  christos carLicense: ABC123
    133   1.1.1.9  christos departmentNumber: 42
    134   1.1.1.9  christos displayName: Bill
    135   1.1.1.9  christos employeeNumber: 5150
    136   1.1.1.9  christos employeeType: contractor
    137   1.1.1.9  christos givenName: Bill
    138   1.1.1.9  christos EOTUNIQ2
    139   1.1.1.9  christos RC=$?
    140   1.1.1.9  christos if test $RC != $RCODEnorelax && test $RC != $RCODEconstraint ; then
    141   1.1.1.9  christos 	echo "unique check failed ($RC)!"
    142   1.1.1.9  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    143  1.1.1.10  christos 	exit 1
    144   1.1.1.9  christos fi
    145   1.1.1.9  christos 
    146   1.1.1.9  christos echo "Trying to bypass uniqueness as a normal user with ManageDSAIt..."
    147   1.1.1.9  christos $LDAPADD -M -D "uid=dave,ou=users,o=unique" -H $URI1 -w $PASSWD > \
    148   1.1.1.5  christos 	 $TESTOUT 2>&1 << EOTUNIQ2
    149   1.1.1.5  christos dn: uid=bill,ou=users,o=unique
    150   1.1.1.5  christos objectClass: inetOrgPerson
    151   1.1.1.5  christos uid: bill
    152   1.1.1.5  christos sn: johnson
    153   1.1.1.5  christos cn: bill
    154   1.1.1.5  christos businessCategory: rtest
    155   1.1.1.5  christos carLicense: ABC123
    156   1.1.1.5  christos departmentNumber: 42
    157   1.1.1.5  christos displayName: Bill
    158   1.1.1.5  christos employeeNumber: 5150
    159   1.1.1.5  christos employeeType: contractor
    160   1.1.1.5  christos givenName: Bill
    161   1.1.1.5  christos EOTUNIQ2
    162   1.1.1.5  christos RC=$?
    163   1.1.1.5  christos if test $RC != $RCODEconstraint ; then
    164   1.1.1.5  christos 	echo "unique check failed ($RC)!"
    165   1.1.1.5  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    166  1.1.1.10  christos 	exit 1
    167   1.1.1.5  christos fi
    168   1.1.1.5  christos 
    169   1.1.1.5  christos echo "Bypassing uniqueness as an admin user..."
    170   1.1.1.9  christos $LDAPADD -e \!relax -D "$UNIQUEDN" -H $URI1 -w $PASSWD > \
    171   1.1.1.5  christos 	 $TESTOUT 2>&1 << EOTUNIQ2
    172   1.1.1.5  christos dn: uid=bill,ou=users,o=unique
    173   1.1.1.5  christos objectClass: inetOrgPerson
    174   1.1.1.5  christos uid: bill
    175   1.1.1.5  christos sn: johnson
    176   1.1.1.5  christos cn: bill
    177   1.1.1.5  christos businessCategory: rtest
    178   1.1.1.5  christos carLicense: ABC123
    179   1.1.1.5  christos departmentNumber: 42
    180   1.1.1.5  christos displayName: Bill
    181   1.1.1.5  christos employeeNumber: 5150
    182   1.1.1.5  christos employeeType: contractor
    183   1.1.1.5  christos givenName: Bill
    184   1.1.1.5  christos EOTUNIQ2
    185   1.1.1.5  christos RC=$?
    186   1.1.1.5  christos if test $RC != 0 ; then
    187   1.1.1.5  christos 	echo "spurious unique error ($RC)!"
    188   1.1.1.5  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    189   1.1.1.5  christos 	exit $RC
    190   1.1.1.5  christos fi
    191   1.1.1.5  christos 
    192   1.1.1.5  christos echo "Cleaning up"
    193   1.1.1.9  christos $LDAPDELETE -D "$UNIQUEDN" -H $URI1 -w $PASSWD \
    194   1.1.1.5  christos     "uid=bill,ou=users,o=unique" > $TESTOUT 2>&1
    195   1.1.1.5  christos RC=$?
    196   1.1.1.5  christos if test $RC != 0; then
    197   1.1.1.5  christos 	echo "ldapdelete failed ($RC)!"
    198   1.1.1.5  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    199   1.1.1.5  christos 	exit $RC
    200   1.1.1.5  christos fi
    201   1.1.1.5  christos 
    202       1.1     lukem echo Dynamically retrieving initial configuration...
    203   1.1.1.9  christos $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -H $URI1 -LLL | tr -d \\r >$TESTDIR/initial-config.ldif
    204       1.1     lukem cat <<EOF >$TESTDIR/initial-reference.ldif
    205       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    206       1.1     lukem objectClass: olcOverlayConfig
    207       1.1     lukem objectClass: olcUniqueConfig
    208       1.1     lukem olcOverlay: {0}unique
    209       1.1     lukem olcUniqueBase: o=unique
    210       1.1     lukem olcUniqueAttribute: employeeNumber
    211       1.1     lukem olcUniqueAttribute: displayName
    212       1.1     lukem 
    213       1.1     lukem EOF
    214       1.1     lukem diff $TESTDIR/initial-config.ldif $TESTDIR/initial-reference.ldif > /dev/null 2>&1
    215       1.1     lukem RC=$?
    216       1.1     lukem if test $RC != 0 ; then
    217       1.1     lukem     echo "Initial configuration is not reported correctly."
    218       1.1     lukem     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    219  1.1.1.10  christos     exit 1
    220       1.1     lukem fi
    221       1.1     lukem 
    222       1.1     lukem echo Dynamically trying to add a URI with legacy attrs present...
    223   1.1.1.9  christos $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF \
    224       1.1     lukem     > $TESTOUT 2>&1 <<EOF
    225       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    226       1.1     lukem changetype: modify
    227       1.1     lukem add: olcUniqueURI
    228       1.1     lukem olcUniqueURI: ldap:///?employeeNumber,displayName?sub
    229       1.1     lukem EOF
    230       1.1     lukem RC=$?
    231       1.1     lukem if test $RC != 80 ; then
    232       1.1     lukem 	echo "legacy and unique_uri allowed together"
    233       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    234  1.1.1.10  christos 	exit 1
    235       1.1     lukem fi
    236       1.1     lukem 
    237       1.1     lukem echo Dynamically trying to add legacy ignored attrs with legacy attrs present...
    238   1.1.1.9  christos $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF \
    239       1.1     lukem     > $TESTOUT 2>&1 <<EOF
    240       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    241       1.1     lukem changetype: modify
    242       1.1     lukem add: olcUniqueIgnore
    243       1.1     lukem olcUniqueIgnore: objectClass
    244       1.1     lukem EOF
    245       1.1     lukem RC=$?
    246       1.1     lukem if test $RC != 80 ; then
    247       1.1     lukem 	echo "legacy attrs and legacy ignore attrs allowed together"
    248       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    249  1.1.1.10  christos 	exit 1
    250       1.1     lukem fi
    251       1.1     lukem 
    252       1.1     lukem echo Verifying initial configuration intact...
    253   1.1.1.9  christos $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -H $URI1 -LLL | tr -d \\r >$TESTDIR/initial-config-recheck.ldif
    254       1.1     lukem diff $TESTDIR/initial-config-recheck.ldif $TESTDIR/initial-reference.ldif > /dev/null 2>&1
    255       1.1     lukem RC=$?
    256       1.1     lukem if test $RC != 0 ; then
    257       1.1     lukem     echo "Initial configuration damaged by unsuccessful modifies."
    258       1.1     lukem     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    259  1.1.1.10  christos     exit 1
    260       1.1     lukem fi
    261       1.1     lukem 
    262       1.1     lukem echo Dynamically removing legacy base...
    263   1.1.1.9  christos $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF \
    264       1.1     lukem     > $TESTOUT 2>&1 <<EOF
    265       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    266       1.1     lukem changetype: modify
    267       1.1     lukem delete: olcUniqueBase
    268       1.1     lukem EOF
    269       1.1     lukem RC=$?
    270       1.1     lukem if test $RC != 0 ; then
    271       1.1     lukem 	echo "base removal failed"
    272       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    273  1.1.1.10  christos 	exit 1
    274       1.1     lukem fi
    275       1.1     lukem 
    276       1.1     lukem echo Verifying base removal...
    277   1.1.1.9  christos $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -H $URI1 -LLL | tr -d \\r >$TESTDIR/baseremoval-config.ldif
    278       1.1     lukem cat >$TESTDIR/baseremoval-reference.ldif <<EOF
    279       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    280       1.1     lukem objectClass: olcOverlayConfig
    281       1.1     lukem objectClass: olcUniqueConfig
    282       1.1     lukem olcOverlay: {0}unique
    283       1.1     lukem olcUniqueAttribute: employeeNumber
    284       1.1     lukem olcUniqueAttribute: displayName
    285       1.1     lukem 
    286       1.1     lukem EOF
    287       1.1     lukem diff $TESTDIR/baseremoval-config.ldif $TESTDIR/baseremoval-reference.ldif > /dev/null 2>&1
    288       1.1     lukem RC=$?
    289       1.1     lukem if test $RC != 0 ; then
    290       1.1     lukem     echo "Configuration damaged by base removal"
    291       1.1     lukem     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    292  1.1.1.10  christos     exit 1
    293       1.1     lukem fi
    294       1.1     lukem 
    295       1.1     lukem echo "Adding a non-unique record..."
    296   1.1.1.9  christos $LDAPADD -D "uid=dave,ou=users,o=unique" -H $URI1 -w $PASSWD > \
    297       1.1     lukem 	 $TESTOUT 2>&1 << EOTUNIQ2
    298       1.1     lukem dn: uid=bill,ou=users,o=unique
    299       1.1     lukem objectClass: inetOrgPerson
    300       1.1     lukem uid: bill
    301       1.1     lukem sn: johnson
    302       1.1     lukem cn: bill
    303       1.1     lukem businessCategory: rtest
    304       1.1     lukem carLicense: ABC123
    305       1.1     lukem departmentNumber: 42
    306       1.1     lukem displayName: Bill
    307       1.1     lukem employeeNumber: 5150
    308       1.1     lukem employeeType: contractor
    309       1.1     lukem givenName: Bill
    310       1.1     lukem EOTUNIQ2
    311       1.1     lukem RC=$?
    312   1.1.1.3      adam if test $RC != $RCODEconstraint ; then
    313       1.1     lukem 	echo "unique check failed ($RC)!"
    314       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    315  1.1.1.10  christos 	exit 1
    316       1.1     lukem fi
    317       1.1     lukem 
    318       1.1     lukem echo Trying a legacy base outside of the backend...
    319   1.1.1.9  christos $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF \
    320       1.1     lukem     > $TESTOUT 2>&1 <<EOF
    321       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    322       1.1     lukem changetype: modify
    323       1.1     lukem add: olcUniqueBase
    324       1.1     lukem olcUniqueBase: cn=config
    325       1.1     lukem EOF
    326       1.1     lukem RC=$?
    327       1.1     lukem if test $RC != 80 ; then
    328       1.1     lukem 	echo "out of backend scope base allowed"
    329       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    330  1.1.1.10  christos 	exit 1
    331       1.1     lukem fi
    332       1.1     lukem 
    333       1.1     lukem echo "Adding and removing attrs..."
    334   1.1.1.9  christos $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF \
    335       1.1     lukem     > $TESTOUT 2>&1 <<EOF
    336       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    337       1.1     lukem changetype: modify
    338       1.1     lukem add: olcUniqueAttribute
    339       1.1     lukem olcUniqueAttribute: description
    340       1.1     lukem olcUniqueAttribute: telephoneNumber
    341       1.1     lukem -
    342       1.1     lukem delete: olcUniqueAttribute
    343       1.1     lukem olcUniqueAttribute: displayName
    344       1.1     lukem EOF
    345       1.1     lukem RC=$?
    346       1.1     lukem if test $RC != 0 ; then
    347       1.1     lukem 	echo "Unable to remove an attribute"
    348       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    349  1.1.1.10  christos 	exit 1
    350       1.1     lukem fi
    351       1.1     lukem 
    352       1.1     lukem echo "Verifying we removed the right attr..."
    353   1.1.1.9  christos $LDAPADD -D "uid=dave,ou=users,o=unique" -H $URI1 -w $PASSWD > \
    354       1.1     lukem 	 $TESTOUT 2>&1 << EOTUNIQ2
    355       1.1     lukem dn: uid=bill,ou=users,o=unique
    356       1.1     lukem objectClass: inetOrgPerson
    357       1.1     lukem uid: bill
    358       1.1     lukem sn: johnson
    359       1.1     lukem cn: bill
    360       1.1     lukem businessCategory: rtest
    361       1.1     lukem carLicense: ABC123
    362       1.1     lukem departmentNumber: 42
    363       1.1     lukem displayName: Bill
    364       1.1     lukem employeeNumber: 5150
    365       1.1     lukem employeeType: contractor
    366       1.1     lukem givenName: Bill
    367       1.1     lukem EOTUNIQ2
    368       1.1     lukem RC=$?
    369   1.1.1.3      adam if test $RC != $RCODEconstraint ; then
    370   1.1.1.9  christos 	echo "olcUniqueAttribute single deletion hit the wrong value"
    371       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    372  1.1.1.10  christos 	exit 1
    373       1.1     lukem fi
    374       1.1     lukem 
    375       1.1     lukem echo Removing legacy config and adding URIs...
    376   1.1.1.9  christos $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF \
    377       1.1     lukem     > $TESTOUT 2>&1 <<EOF
    378       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    379       1.1     lukem changetype: modify
    380       1.1     lukem delete: olcUniqueAttribute
    381       1.1     lukem -
    382       1.1     lukem add: olcUniqueURI
    383       1.1     lukem olcUniqueURI: ldap:///?employeeNumber,displayName?sub
    384       1.1     lukem olcUniqueURI: ldap:///?description?one
    385       1.1     lukem EOF
    386       1.1     lukem RC=$?
    387       1.1     lukem if test $RC != 0 ; then
    388       1.1     lukem 	echo "Reconfiguration to URIs failed"
    389       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    390  1.1.1.10  christos 	exit 1
    391       1.1     lukem fi
    392       1.1     lukem 
    393       1.1     lukem echo Dynamically retrieving second configuration...
    394   1.1.1.9  christos $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -H $URI1 -LLL | tr -d \\r >$TESTDIR/second-config.ldif
    395       1.1     lukem cat >$TESTDIR/second-reference.ldif <<EOF
    396       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    397       1.1     lukem objectClass: olcOverlayConfig
    398       1.1     lukem objectClass: olcUniqueConfig
    399       1.1     lukem olcOverlay: {0}unique
    400       1.1     lukem olcUniqueURI: ldap:///?employeeNumber,displayName?sub
    401       1.1     lukem olcUniqueURI: ldap:///?description?one
    402       1.1     lukem 
    403       1.1     lukem EOF
    404       1.1     lukem diff $TESTDIR/second-config.ldif $TESTDIR/second-reference.ldif > /dev/null 2>&1
    405       1.1     lukem RC=$?
    406       1.1     lukem if test $RC != 0 ; then
    407       1.1     lukem     echo "Second configuration is not reported correctly."
    408       1.1     lukem     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    409  1.1.1.10  christos     exit 1
    410       1.1     lukem fi
    411       1.1     lukem 
    412       1.1     lukem echo "Adding a non-unique record..."
    413   1.1.1.9  christos $LDAPADD -D "uid=dave,ou=users,o=unique" -H $URI1 -w $PASSWD > \
    414       1.1     lukem 	 $TESTOUT 2>&1 << EOTUNIQ2
    415       1.1     lukem dn: uid=bill,ou=users,o=unique
    416       1.1     lukem objectClass: inetOrgPerson
    417       1.1     lukem uid: bill
    418       1.1     lukem sn: johnson
    419       1.1     lukem cn: bill
    420       1.1     lukem businessCategory: rtest
    421       1.1     lukem carLicense: ABC123
    422       1.1     lukem departmentNumber: 42
    423       1.1     lukem displayName: Bill
    424       1.1     lukem employeeNumber: 5150
    425       1.1     lukem employeeType: contractor
    426       1.1     lukem givenName: Bill
    427       1.1     lukem EOTUNIQ2
    428       1.1     lukem RC=$?
    429   1.1.1.3      adam if test $RC != $RCODEconstraint ; then
    430       1.1     lukem 	echo "unique check failed ($RC)!"
    431       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    432  1.1.1.10  christos 	exit 1
    433       1.1     lukem fi
    434       1.1     lukem 
    435       1.1     lukem echo Dynamically trying to add legacy base
    436   1.1.1.9  christos $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF \
    437       1.1     lukem     > $TESTOUT 2>&1 <<EOF
    438       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    439       1.1     lukem changetype: modify
    440       1.1     lukem add: olcUniqueBase
    441       1.1     lukem olcUniqueBase: o=unique
    442       1.1     lukem EOF
    443       1.1     lukem RC=$?
    444       1.1     lukem if test $RC != 80 ; then
    445       1.1     lukem 	echo "legacy base allowed with URIs"
    446       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    447  1.1.1.10  christos 	exit 1
    448       1.1     lukem fi
    449       1.1     lukem 
    450       1.1     lukem echo Dynamically trying to add legacy attrs
    451   1.1.1.9  christos $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF \
    452       1.1     lukem     > $TESTOUT 2>&1 <<EOF
    453       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    454       1.1     lukem changetype: modify
    455       1.1     lukem add: olcUniqueAttribute
    456       1.1     lukem olcUniqueAttribute: description
    457       1.1     lukem EOF
    458       1.1     lukem RC=$?
    459       1.1     lukem if test $RC != 80 ; then
    460       1.1     lukem 	echo "legacy attributes allowed with URIs"
    461       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    462  1.1.1.10  christos 	exit 1
    463       1.1     lukem fi
    464       1.1     lukem 
    465       1.1     lukem echo Dynamically trying to add legacy strictness
    466   1.1.1.9  christos $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF \
    467       1.1     lukem     > $TESTOUT 2>&1 <<EOF
    468       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    469       1.1     lukem changetype: modify
    470       1.1     lukem add: olcUniqueStrict
    471       1.1     lukem olcUniqueStrict: TRUE
    472       1.1     lukem EOF
    473       1.1     lukem RC=$?
    474       1.1     lukem if test $RC != 80 ; then
    475       1.1     lukem 	echo "legacy strictness allowed with URIs"
    476       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    477  1.1.1.10  christos 	exit 1
    478       1.1     lukem fi
    479       1.1     lukem 
    480       1.1     lukem #echo ----------------------
    481       1.1     lukem echo Dynamically trying a bad filter...
    482   1.1.1.9  christos $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF \
    483       1.1     lukem     > $TESTOUT 2>&1 <<EOF
    484       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    485       1.1     lukem changetype: modify
    486       1.1     lukem replace: olcUniqueURI
    487       1.1     lukem olcUniqueURI: ldap:///?sn?sub?((cn=e*))
    488       1.1     lukem EOF
    489       1.1     lukem RC=$?
    490       1.1     lukem if test $RC != 80 ; then
    491       1.1     lukem 	echo "bad filter allowed"
    492       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    493  1.1.1.10  christos 	exit 1
    494       1.1     lukem fi
    495       1.1     lukem 
    496       1.1     lukem echo Verifying second configuration intact...
    497   1.1.1.9  christos $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -H $URI1 -LLL | tr -d \\r >$TESTDIR/second-config-recheck.ldif
    498       1.1     lukem diff $TESTDIR/second-config-recheck.ldif $TESTDIR/second-reference.ldif > /dev/null 2>&1
    499       1.1     lukem RC=$?
    500       1.1     lukem if test $RC != 0 ; then
    501       1.1     lukem     echo "Second configuration damaged by rejected modifies."
    502       1.1     lukem     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    503  1.1.1.10  christos     exit 1
    504       1.1     lukem fi
    505       1.1     lukem 
    506       1.1     lukem #echo ----------------------
    507       1.1     lukem echo Dynamically reconfiguring to use different URIs...
    508   1.1.1.9  christos $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF \
    509       1.1     lukem     > $TESTOUT 2>&1 <<EOF
    510       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    511       1.1     lukem changetype: modify
    512       1.1     lukem add: olcUniqueURI
    513       1.1     lukem olcUniqueURI: ldap:///?sn?sub?(cn=e*)
    514   1.1.1.2     lukem olcUniqueURI: ldap:///?uid?sub?(cn=edgar)
    515       1.1     lukem -
    516       1.1     lukem delete: olcUniqueURI
    517       1.1     lukem olcUniqueURI: ldap:///?description?one
    518       1.1     lukem EOF
    519       1.1     lukem RC=$?
    520       1.1     lukem if test $RC != 0 ; then
    521       1.1     lukem 	echo "unable to reconfigure"
    522       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    523  1.1.1.10  christos 	exit 1
    524       1.1     lukem fi
    525       1.1     lukem 
    526       1.1     lukem echo Dynamically retrieving third configuration...
    527   1.1.1.9  christos $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -H $URI1 -LLL | tr -d \\r >$TESTDIR/third-config.ldif
    528       1.1     lukem cat >$TESTDIR/third-reference.ldif <<EOF
    529       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    530       1.1     lukem objectClass: olcOverlayConfig
    531       1.1     lukem objectClass: olcUniqueConfig
    532       1.1     lukem olcOverlay: {0}unique
    533       1.1     lukem olcUniqueURI: ldap:///?employeeNumber,displayName?sub
    534       1.1     lukem olcUniqueURI: ldap:///?sn?sub?(cn=e*)
    535   1.1.1.2     lukem olcUniqueURI: ldap:///?uid?sub?(cn=edgar)
    536       1.1     lukem 
    537       1.1     lukem EOF
    538       1.1     lukem diff $TESTDIR/third-config.ldif $TESTDIR/third-reference.ldif > /dev/null 2>&1
    539       1.1     lukem RC=$?
    540       1.1     lukem if test $RC != 0 ; then
    541       1.1     lukem     echo "Third configuration is not reported correctly."
    542       1.1     lukem     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    543  1.1.1.10  christos     exit 1
    544       1.1     lukem fi
    545       1.1     lukem 
    546       1.1     lukem echo "Adding a record unique in both domains if filtered..."
    547       1.1     lukem 
    548   1.1.1.9  christos $LDAPADD -D "$UNIQUEDN" -H $URI1 -w $PASSWD > \
    549       1.1     lukem 	 $TESTOUT 2>&1 << EOF
    550       1.1     lukem dn: uid=edgar,ou=users,o=unique
    551       1.1     lukem objectClass: inetOrgPerson
    552       1.1     lukem uid: edgar
    553       1.1     lukem sn: johnson
    554       1.1     lukem cn: edgar
    555       1.1     lukem EOF
    556       1.1     lukem 
    557       1.1     lukem RC=$?
    558       1.1     lukem if test $RC != 0 ; then
    559       1.1     lukem 	echo "unique check failed ($RC)!"
    560       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    561  1.1.1.10  christos 	exit 1
    562       1.1     lukem fi
    563       1.1     lukem 
    564   1.1.1.2     lukem echo "Adding a record unique in all domains because of filter conditions "
    565   1.1.1.9  christos $LDAPADD -D "$UNIQUEDN" -H $URI1 -w $PASSWD > \
    566   1.1.1.2     lukem 	 $TESTOUT 2>&1 << EOF
    567   1.1.1.2     lukem dn: uid=empty,ou=users,o=unique
    568   1.1.1.2     lukem objectClass: inetOrgPerson
    569   1.1.1.2     lukem uid: edgar
    570   1.1.1.2     lukem cn: empty
    571   1.1.1.2     lukem sn: empty
    572   1.1.1.2     lukem EOF
    573   1.1.1.2     lukem 
    574   1.1.1.2     lukem RC=$?
    575   1.1.1.2     lukem if test $RC != 0 ; then
    576   1.1.1.2     lukem 	echo "spurious unique error ($RC)!"
    577   1.1.1.2     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    578  1.1.1.10  christos 	exit 1
    579   1.1.1.2     lukem fi
    580   1.1.1.2     lukem 
    581   1.1.1.6  christos echo "Sending an empty modification"
    582   1.1.1.6  christos 
    583   1.1.1.9  christos $LDAPMODIFY -D "$UNIQUEDN" -H $URI1 -w $PASSWD > \
    584   1.1.1.6  christos 	 $TESTOUT 2>&1 << EOF
    585   1.1.1.6  christos dn: uid=empty,ou=users,o=unique
    586   1.1.1.6  christos changetype: modify
    587   1.1.1.6  christos EOF
    588   1.1.1.6  christos 
    589   1.1.1.6  christos RC=$?
    590   1.1.1.6  christos if test $RC != 0 ; then
    591   1.1.1.6  christos 	echo "spurious unique error ($RC)!"
    592   1.1.1.6  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    593  1.1.1.10  christos 	exit 1
    594   1.1.1.6  christos fi
    595   1.1.1.6  christos 
    596   1.1.1.5  christos echo "Making a record non-unique"
    597   1.1.1.9  christos $LDAPMODIFY -D "uid=dave,ou=users,o=unique" -H $URI1 -w $PASSWD > \
    598   1.1.1.5  christos     $TESTOUT 2>&1 << EOF
    599   1.1.1.5  christos dn: uid=empty,ou=users,o=unique
    600   1.1.1.5  christos changetype: modify
    601   1.1.1.5  christos replace: sn
    602   1.1.1.5  christos sn: johnson
    603   1.1.1.5  christos EOF
    604   1.1.1.2     lukem 
    605   1.1.1.5  christos RC=$?
    606   1.1.1.5  christos if test $RC != $RCODEconstraint ; then
    607   1.1.1.5  christos 	echo "unique check failed ($RC)!"
    608   1.1.1.5  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    609  1.1.1.10  christos 	exit 1
    610   1.1.1.5  christos fi
    611       1.1     lukem 
    612   1.1.1.9  christos # ITS#6641/8057/8245
    613   1.1.1.5  christos echo "Trying to bypass uniqueness as a normal user..."
    614   1.1.1.9  christos $LDAPMODIFY -e \!relax -D "uid=dave,ou=users,o=unique" -H $URI1 -w $PASSWD > \
    615   1.1.1.9  christos     $TESTOUT 2>&1 << EOF
    616   1.1.1.9  christos dn: uid=empty,ou=users,o=unique
    617   1.1.1.9  christos changetype: modify
    618   1.1.1.9  christos replace: sn
    619   1.1.1.9  christos sn: johnson
    620   1.1.1.9  christos EOF
    621   1.1.1.9  christos 
    622   1.1.1.9  christos RC=$?
    623   1.1.1.9  christos if test $RC != $RCODEnorelax && test $RC != $RCODEconstraint ; then
    624   1.1.1.9  christos 	echo "unique check failed ($RC)!"
    625   1.1.1.9  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    626  1.1.1.10  christos 	exit 1
    627   1.1.1.9  christos fi
    628   1.1.1.9  christos 
    629   1.1.1.9  christos echo "Trying to bypass uniqueness as a normal user with ManageDSAIt..."
    630   1.1.1.9  christos $LDAPMODIFY -M -D "uid=dave,ou=users,o=unique" -H $URI1 -w $PASSWD > \
    631   1.1.1.5  christos     $TESTOUT 2>&1 << EOF
    632   1.1.1.5  christos dn: uid=empty,ou=users,o=unique
    633   1.1.1.5  christos changetype: modify
    634   1.1.1.5  christos replace: sn
    635   1.1.1.5  christos sn: johnson
    636   1.1.1.5  christos EOF
    637   1.1.1.5  christos 
    638   1.1.1.5  christos RC=$?
    639   1.1.1.5  christos if test $RC != $RCODEconstraint ; then
    640   1.1.1.5  christos 	echo "unique check failed ($RC)!"
    641   1.1.1.5  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    642  1.1.1.10  christos 	exit 1
    643   1.1.1.5  christos fi
    644   1.1.1.5  christos 
    645   1.1.1.5  christos echo "Bypassing uniqueness as an admin user..."
    646   1.1.1.9  christos $LDAPMODIFY -e \!relax -D "$UNIQUEDN" -H $URI1 -w $PASSWD > \
    647   1.1.1.5  christos     $TESTOUT 2>&1 << EOF
    648   1.1.1.5  christos dn: uid=empty,ou=users,o=unique
    649   1.1.1.5  christos changetype: modify
    650   1.1.1.5  christos replace: sn
    651   1.1.1.5  christos sn: johnson
    652   1.1.1.5  christos EOF
    653   1.1.1.5  christos 
    654   1.1.1.5  christos RC=$?
    655   1.1.1.5  christos if test $RC != 0 ; then
    656   1.1.1.5  christos 	echo "spurious unique error ($RC)!"
    657   1.1.1.5  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    658   1.1.1.5  christos 	exit $RC
    659   1.1.1.5  christos fi
    660   1.1.1.5  christos 
    661   1.1.1.5  christos echo "Cleaning up"
    662   1.1.1.9  christos $LDAPMODIFY -D "$UNIQUEDN" -H $URI1 -w $PASSWD > \
    663   1.1.1.5  christos     $TESTOUT 2>&1 << EOF
    664   1.1.1.5  christos dn: uid=empty,ou=users,o=unique
    665   1.1.1.5  christos changetype: modify
    666   1.1.1.5  christos replace: sn
    667   1.1.1.5  christos sn: empty
    668   1.1.1.5  christos EOF
    669   1.1.1.5  christos 
    670   1.1.1.5  christos RC=$?
    671   1.1.1.5  christos if test $RC != 0; then
    672   1.1.1.5  christos 	echo "ldapmodify failed ($RC)!"
    673   1.1.1.5  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    674   1.1.1.5  christos 	exit $RC
    675   1.1.1.5  christos fi
    676   1.1.1.5  christos 
    677   1.1.1.5  christos echo "Adding another unique record..."
    678   1.1.1.9  christos $LDAPADD -D "$UNIQUEDN" -H $URI1 -w $PASSWD > \
    679       1.1     lukem 	 $TESTOUT 2>&1 << EOF
    680   1.1.1.5  christos dn: uid=not edgar,uid=edgar,ou=users,o=unique
    681   1.1.1.5  christos objectClass: inetOrgPerson
    682   1.1.1.5  christos uid: not edgar
    683   1.1.1.5  christos sn: Alan
    684   1.1.1.5  christos cn: not edgar
    685   1.1.1.5  christos EOF
    686   1.1.1.5  christos 
    687   1.1.1.5  christos RC=$?
    688   1.1.1.5  christos if test $RC != 0 ; then
    689   1.1.1.5  christos 	echo "unique check failed ($RC)!"
    690   1.1.1.5  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    691  1.1.1.10  christos 	exit 1
    692   1.1.1.5  christos fi
    693   1.1.1.5  christos 
    694   1.1.1.5  christos echo "Making the record non-unique with modrdn..."
    695   1.1.1.9  christos $LDAPMODRDN -D "uid=dave,ou=users,o=unique" -H $URI1 -w $PASSWD \
    696   1.1.1.5  christos 	"uid=not edgar,uid=edgar,ou=users,o=unique" "uid=edgar" > $TESTOUT 2>&1
    697   1.1.1.5  christos 
    698   1.1.1.5  christos RC=$?
    699   1.1.1.5  christos if test $RC != $RCODEconstraint ; then
    700   1.1.1.5  christos 	echo "unique check failed ($RC)!"
    701   1.1.1.5  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    702  1.1.1.10  christos 	exit 1
    703   1.1.1.5  christos fi
    704   1.1.1.5  christos 
    705   1.1.1.9  christos # ITS#6641/8057/8245
    706   1.1.1.5  christos echo "Trying to bypass uniqueness as a normal user..."
    707   1.1.1.9  christos $LDAPMODRDN -e \!relax -D "uid=dave,ou=users,o=unique" -H $URI1 -w $PASSWD \
    708   1.1.1.9  christos 	"uid=not edgar,uid=edgar,ou=users,o=unique" "uid=edgar" > $TESTOUT 2>&1
    709   1.1.1.9  christos 
    710   1.1.1.9  christos RC=$?
    711   1.1.1.9  christos if test $RC != $RCODEnorelax && test $RC != $RCODEconstraint ; then
    712   1.1.1.9  christos 	echo "unique check failed ($RC)!"
    713   1.1.1.9  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    714  1.1.1.10  christos 	exit 1
    715   1.1.1.9  christos fi
    716   1.1.1.9  christos 
    717   1.1.1.9  christos echo "Trying to bypass uniqueness as a normal user with a ManageDSAIt control..."
    718   1.1.1.9  christos $LDAPMODRDN -M -D "uid=dave,ou=users,o=unique" -H $URI1 -w $PASSWD \
    719   1.1.1.5  christos 	"uid=not edgar,uid=edgar,ou=users,o=unique" "uid=edgar" > $TESTOUT 2>&1
    720   1.1.1.5  christos 
    721   1.1.1.5  christos RC=$?
    722   1.1.1.5  christos if test $RC != $RCODEconstraint ; then
    723   1.1.1.5  christos 	echo "unique check failed ($RC)!"
    724   1.1.1.5  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    725  1.1.1.10  christos 	exit 1
    726   1.1.1.5  christos fi
    727   1.1.1.5  christos 
    728   1.1.1.5  christos echo "Bypassing uniqueness as an admin user..."
    729   1.1.1.9  christos $LDAPMODRDN -e \!relax -D "$UNIQUEDN" -H $URI1 -w $PASSWD \
    730   1.1.1.5  christos 	"uid=not edgar,uid=edgar,ou=users,o=unique" "uid=edgar" > $TESTOUT 2>&1
    731   1.1.1.5  christos 
    732   1.1.1.5  christos RC=$?
    733   1.1.1.5  christos if test $RC != 0 ; then
    734   1.1.1.5  christos 	echo "spurious unique error ($RC)!"
    735   1.1.1.5  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    736   1.1.1.5  christos 	exit $RC
    737   1.1.1.5  christos fi
    738   1.1.1.5  christos 
    739   1.1.1.5  christos echo "Cleaning up"
    740   1.1.1.9  christos $LDAPDELETE -D "$UNIQUEDN" -H $URI1 -w $PASSWD \
    741   1.1.1.5  christos     "uid=edgar,uid=edgar,ou=users,o=unique" > $TESTOUT 2>&1
    742   1.1.1.5  christos RC=$?
    743   1.1.1.5  christos if test $RC != 0; then
    744   1.1.1.5  christos 	echo "ldapdelete failed ($RC)!"
    745   1.1.1.5  christos 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    746   1.1.1.5  christos 	exit $RC
    747   1.1.1.5  christos fi
    748   1.1.1.5  christos 
    749   1.1.1.5  christos echo "Adding a record unique in one domain, non-unique in the filtered domain..."
    750   1.1.1.5  christos 
    751   1.1.1.9  christos $LDAPADD -D "uid=dave,ou=users,o=unique" -H $URI1 -w $PASSWD > \
    752   1.1.1.5  christos 	 $TESTOUT 2>&1 << EOF
    753       1.1     lukem dn: uid=elvis,ou=users,o=unique
    754       1.1     lukem objectClass: inetOrgPerson
    755       1.1     lukem uid: elvis
    756       1.1     lukem sn: johnson
    757       1.1     lukem cn: elvis
    758       1.1     lukem EOF
    759       1.1     lukem 
    760       1.1     lukem RC=$?
    761   1.1.1.3      adam if test $RC != $RCODEconstraint ; then
    762       1.1     lukem 	echo "unique check failed ($RC)!"
    763       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    764  1.1.1.10  christos 	exit 1
    765       1.1     lukem fi
    766       1.1     lukem 
    767       1.1     lukem #echo ----------------------
    768       1.1     lukem echo Dynamically reconfiguring to use attribute-ignore URIs...
    769   1.1.1.9  christos $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF \
    770       1.1     lukem     > $TESTOUT 2>&1 <<EOF
    771       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    772       1.1     lukem changetype: modify
    773       1.1     lukem replace: olcUniqueURI
    774       1.1     lukem olcUniqueURI: ignore ldap:///?objectClass,uid,cn,sn?sub
    775       1.1     lukem EOF
    776       1.1     lukem RC=$?
    777       1.1     lukem if test $RC != 0 ; then
    778       1.1     lukem 	echo "unable to reconfigure"
    779       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    780  1.1.1.10  christos 	exit 1
    781       1.1     lukem fi
    782       1.1     lukem 
    783       1.1     lukem echo Dynamically retrieving fourth configuration...
    784   1.1.1.9  christos $LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -H $URI1 -LLL | tr -d \\r >$TESTDIR/fourth-config.ldif
    785       1.1     lukem cat >$TESTDIR/fourth-reference.ldif <<EOF
    786       1.1     lukem dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config
    787       1.1     lukem objectClass: olcOverlayConfig
    788       1.1     lukem objectClass: olcUniqueConfig
    789       1.1     lukem olcOverlay: {0}unique
    790       1.1     lukem olcUniqueURI: ignore ldap:///?objectClass,uid,cn,sn?sub
    791       1.1     lukem 
    792       1.1     lukem EOF
    793       1.1     lukem diff $TESTDIR/fourth-config.ldif $TESTDIR/fourth-reference.ldif > /dev/null 2>&1
    794       1.1     lukem RC=$?
    795       1.1     lukem if test $RC != 0 ; then
    796       1.1     lukem     echo "Fourth configuration is not reported correctly."
    797       1.1     lukem     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    798  1.1.1.10  christos     exit 1
    799       1.1     lukem fi
    800       1.1     lukem 
    801       1.1     lukem echo "Adding a record unique in the ignore-domain..."
    802       1.1     lukem 
    803   1.1.1.9  christos $LDAPADD -D "$UNIQUEDN" -H $URI1 -w $PASSWD > \
    804       1.1     lukem 	 $TESTOUT 2>&1 << EOF
    805       1.1     lukem dn: uid=elvis,ou=users,o=unique
    806       1.1     lukem objectClass: inetOrgPerson
    807       1.1     lukem uid: elvis
    808       1.1     lukem sn: johnson
    809       1.1     lukem cn: elvis
    810       1.1     lukem description: left the building
    811       1.1     lukem EOF
    812       1.1     lukem 
    813       1.1     lukem RC=$?
    814       1.1     lukem if test $RC != 0 ; then
    815       1.1     lukem 	echo "unique check failed ($RC)!"
    816       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    817  1.1.1.10  christos 	exit 1
    818       1.1     lukem fi
    819       1.1     lukem 
    820       1.1     lukem echo "Adding a record non-unique in the ignore-domain..."
    821       1.1     lukem 
    822   1.1.1.9  christos $LDAPADD -D "uid=dave,ou=users,o=unique" -H $URI1 -w $PASSWD > \
    823       1.1     lukem 	 $TESTOUT 2>&1 << EOF
    824       1.1     lukem dn: uid=harry,ou=users,o=unique
    825       1.1     lukem objectClass: inetOrgPerson
    826       1.1     lukem uid: harry
    827       1.1     lukem sn: johnson
    828       1.1     lukem cn: harry
    829       1.1     lukem description: left the building
    830       1.1     lukem EOF
    831       1.1     lukem 
    832       1.1     lukem RC=$?
    833   1.1.1.3      adam if test $RC != $RCODEconstraint ; then
    834       1.1     lukem 	echo "unique check failed ($RC)!"
    835       1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    836  1.1.1.10  christos 	exit 1
    837       1.1     lukem fi
    838       1.1     lukem 
    839       1.1     lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
    840       1.1     lukem 
    841       1.1     lukem echo ">>>>> Test succeeded"
    842       1.1     lukem 
    843       1.1     lukem test $KILLSERVERS != no && wait
    844       1.1     lukem 
    845       1.1     lukem exit 0
    846