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