Home | History | Annotate | Line # | Download | only in scripts
      1 #! /bin/sh
      2 # $OpenLDAP$
      3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
      4 ##
      5 ## Copyright 2004-2024 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 PERSONAL="(objectClass=inetOrgPerson)"
     20 NOWHERE="/dev/null"
     21 FAILURE="additional info:"
     22 
     23 if test $TRANSLUCENT = translucentno ; then 
     24 	echo "Translucent Proxy overlay not available, test skipped"
     25 	exit 0
     26 fi 
     27 
     28 if test $AC_ldap = ldapno ; then
     29 	echo "Translucent Proxy overlay requires back-ldap backend, test skipped"
     30 	exit 0
     31 fi
     32 
     33 # configure backside
     34 mkdir -p $TESTDIR $DBDIR1
     35 
     36 $SLAPPASSWD -g -n >$CONFIGPWF
     37 echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
     38 
     39 DBIX=2
     40 
     41 . $CONFFILTER $BACKEND < $TRANSLUCENTREMOTECONF > $CONF1
     42 echo "Running slapadd to build remote slapd database..."
     43 $SLAPADD -f $CONF1 -l $LDIFTRANSLUCENTCONFIG
     44 RC=$?
     45 if test $RC != 0 ; then
     46 	echo "slapadd failed ($RC)!"
     47 	exit $RC
     48 fi
     49 
     50 echo "Starting remote slapd on TCP/IP port $PORT1..."
     51 $SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 &
     52 PID=$!
     53 if test $WAIT != 0 ; then
     54     echo PID $PID
     55     read foo
     56 fi
     57 REMOTEPID="$PID"
     58 KILLPIDS="$PID"
     59 
     60 sleep 1
     61 
     62 for i in 0 1 2 3 4 5; do
     63 	$LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
     64 		'objectclass=*' > /dev/null 2>&1
     65 	RC=$?
     66 	if test $RC = 0 ; then
     67 		break
     68 	fi
     69 	echo "Waiting 5 seconds for remote slapd to start..."
     70 	sleep 5
     71 done
     72 
     73 if test $RC != 0 ; then
     74 	echo "ldapsearch failed ($RC)!"
     75 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     76 	exit $RC
     77 fi
     78 
     79 # configure frontside
     80 mkdir -p $DBDIR2
     81 
     82 . $CONFFILTER $BACKEND < $TRANSLUCENTLOCALCONF > $CONF2
     83 
     84 echo "Starting local slapd on TCP/IP port $PORT2..."
     85 $SLAPD -f $CONF2 -h $URI2 -d $LVL > $LOG2 2>&1 &
     86 PID=$!
     87 if test $WAIT != 0 ; then
     88     echo PID $PID
     89     read foo
     90 fi
     91 LOCALPID="$PID"
     92 KILLPIDS="$LOCALPID $REMOTEPID"
     93 
     94 sleep 1
     95 
     96 for i in 0 1 2 3 4 5; do
     97 	$LDAPSEARCH -s base -b "$MONITOR" -H $URI2 \
     98 		'objectclass=*' > /dev/null 2>&1
     99 	RC=$?
    100 	if test $RC = 0 ; then
    101 		break
    102 	fi
    103 	echo "Waiting 5 seconds for local slapd to start..."
    104 	sleep 5
    105 done
    106 
    107 if test $RC != 0 ; then
    108 	echo "ldapsearch failed ($RC)!"
    109 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    110 	exit $RC
    111 fi
    112 
    113 echo "Testing slapd Translucent Proxy operations..."
    114 
    115 echo "Testing search: no remote data defined..."
    116 
    117 $LDAPSEARCH -H $URI2 -b "$TRANSLUCENTUSER" "$PERSONAL" >$SEARCHOUT 2>&1
    118 
    119 RC=$?
    120 if test $RC != 0 ; then
    121 	echo "ldapsearch failed ($RC)!"
    122 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    123 	exit $RC
    124 fi
    125 
    126 if test -s $SEARCHOUT; then
    127 	echo "ldapsearch should have returned no records!"
    128 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    129 	exit 1
    130 fi
    131 
    132 echo "Populating remote database..."
    133 
    134 $LDAPADD -D "$TRANSLUCENTROOT" -H $URI1 \
    135 	-w $PASSWD < $LDIFTRANSLUCENTDATA > $NOWHERE 2>&1
    136 
    137 RC=$?
    138 if test $RC != 0 ; then
    139 	echo "ldapadd failed ($RC)!"
    140 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    141 	exit $RC
    142 fi
    143 
    144 echo "Testing search: remote database via local slapd..."
    145 
    146 $LDAPSEARCH -H $URI2 -b "$TRANSLUCENTUSER" "$PERSONAL" > $SEARCHOUT 2>&1
    147 
    148 RC=$?
    149 if test $RC != 0 ; then
    150 	echo "ldapsearch failed ($RC)!"
    151 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    152 	exit $RC
    153 fi
    154 
    155 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
    156 $LDIFFILTER < $LDIFTRANSLUCENTDATA > $LDIFFLT
    157 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
    158 
    159 if test $? != 0 ; then
    160 	echo "Comparison failed -- corruption from remote to local!"
    161 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    162 	exit 1
    163 fi
    164 
    165 echo "Testing add: prohibited local record..."
    166 
    167 $LDAPADD -D "$TRANSLUCENTDN" -H $URI2 \
    168 	-w $TRANSLUCENTPASSWD < $LDIFTRANSLUCENTADD > $TESTOUT 2>&1
    169 
    170 RC=$?
    171 if test $RC != 50 ; then
    172 	echo "ldapadd failed ($RC), expected INSUFFICIENT ACCESS!"
    173 	grep "$FAILURE" $TESTOUT
    174 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    175 	exit 1
    176 fi
    177 
    178 echo "Testing add: valid local record, no_glue..."
    179 
    180 $LDAPADD -v -v -v -D "$TRANSLUCENTROOT" -H $URI2 \
    181 	-w $PASSWD < $LDIFTRANSLUCENTADD > $TESTOUT 2>&1
    182 
    183 RC=$?
    184 if test $RC != 32 && test $RC,$BACKEND != 0,null ; then
    185 	echo "ldapadd failed ($RC), expected NO SUCH OBJECT!"
    186 	grep "$FAILURE" $TESTOUT
    187 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    188 	exit 1
    189 fi
    190 
    191 echo "Testing modrdn: valid local record, no_glue..."
    192 
    193 $LDAPMODRDN -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \
    194 	$TESTOUT 2>&1 'uid=fred,ou=users,o=translucent' 'uid=someguy'
    195 
    196 RC=$?
    197 if test $RC != 32 && test $RC,$BACKEND != 0,null ; then
    198 	echo "ldapmodrdn failed ($RC), expected NO SUCH OBJECT!"
    199 	grep "$FAILURE" $TESTOUT
    200 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    201 	exit 1
    202 fi
    203 
    204 echo "Dynamically configuring local slapd without translucent_no_glue..."
    205 
    206 $LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF
    207 dn: olcOverlay={0}translucent,olcDatabase={$DBIX}$BACKEND,cn=config
    208 changetype: modify
    209 replace: olcTranslucentNoGlue
    210 olcTranslucentNoGlue: FALSE
    211 EOF
    212 RC=$?
    213 if test $RC != 0 ; then
    214     echo "ldapmodify of dynamic config failed ($RC)"
    215     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    216     exit 1
    217 fi
    218 
    219 echo "Testing add: valid local record..."
    220 
    221 $LDAPADD -D "$TRANSLUCENTROOT" -H $URI2 \
    222 	-w $PASSWD < $LDIFTRANSLUCENTADD > $TESTOUT 2>&1
    223 
    224 RC=$?
    225 if test $RC != 0 ; then
    226 	echo "ldapadd failed ($RC)!"
    227 	grep "$FAILURE" $TESTOUT
    228 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    229 	exit $RC
    230 fi
    231 
    232 echo "Testing search: data merging..."
    233 
    234 $LDAPSEARCH -H $URI2 -b "$TRANSLUCENTUSER" "$PERSONAL" > $SEARCHOUT 2>&1
    235 
    236 RC=$?
    237 if test $RC != 0 ; then
    238 	echo "ldapsearch failed ($RC)!"
    239 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    240 	exit $RC
    241 fi
    242 
    243 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
    244 $LDIFFILTER < $LDIFTRANSLUCENTMERGED > $LDIFFLT
    245 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
    246 
    247 if test $? != 0 ; then
    248 	echo "Comparison failed -- local data failed to merge with remote!"
    249 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    250 	exit 1
    251 fi
    252 
    253 echo "Testing compare: valid local..."
    254 
    255 $LDAPCOMPARE -z -H $URI2 -w $TRANSLUCENTPASSWD -D $TRANSLUCENTDN \
    256 	"uid=danger,ou=users,o=translucent" "carLicense:LIVID"
    257 
    258 RC=$?
    259 if test $RC != 6 ; then
    260 	echo "ldapcompare failed ($RC), expected TRUE!"
    261 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    262 	exit 1
    263 fi
    264 
    265 echo "Testing compare: valid remote..."
    266 
    267 $LDAPCOMPARE -z -x -H $URI2 -w $TRANSLUCENTPASSWD -D $TRANSLUCENTDN \
    268 	"uid=binder,o=translucent" "businessCategory:binder-test-user"
    269 
    270 RC=$?
    271 if test $RC != 6 ; then
    272 	echo "ldapcompare failed ($RC), expected TRUE!"
    273 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    274 	exit 1
    275 fi
    276 
    277 echo "Testing compare: bogus local..."
    278 
    279 $LDAPCOMPARE -z -x -H $URI2 -w $TRANSLUCENTPASSWD -D $TRANSLUCENTDN \
    280 	"uid=danger,ou=users,o=translucent" "businessCategory:invalid-test-value"
    281 
    282 RC=$?
    283 if test $RC != 5 ; then
    284 	echo "ldapcompare failed ($RC), expected FALSE!"
    285 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    286 	exit 1
    287 fi
    288 
    289 echo "Testing compare: bogus remote..."
    290 
    291 $LDAPCOMPARE -z -x -H $URI2 -w $TRANSLUCENTPASSWD -D $TRANSLUCENTDN \
    292 	"uid=binder,o=translucent" "businessCategory:invalid-test-value"
    293 
    294 RC=$?
    295 if test $RC != 5 ; then
    296 	echo "ldapcompare failed ($RC), expected FALSE!"
    297 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    298 	exit 1
    299 fi
    300 
    301 echo "Testing modify: nonexistent record..."
    302 
    303 $LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \
    304         $TESTOUT 2>&1 << EOF_MOD
    305 version: 1
    306 dn: uid=bogus,ou=users,o=translucent
    307 changetype: modify
    308 replace: roomNumber
    309 roomNumber: 31J-2112
    310 EOF_MOD
    311 
    312 RC=$?
    313 if test $RC != 32 ; then
    314 	echo "ldapmodify failed ($RC), expected NO SUCH OBJECT!"
    315 	grep "$FAILURE" $TESTOUT
    316 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    317 	exit 1
    318 fi
    319 
    320 echo "Testing modify: valid local record, nonexistent attribute..."
    321 
    322 $LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \
    323         $TESTOUT 2>&1 << EOF_MOD1
    324 version: 1
    325 dn: uid=danger,ou=users,o=translucent
    326 changetype: modify
    327 replace: roomNumber
    328 roomNumber: 9N-21
    329 EOF_MOD1
    330 
    331 RC=$?
    332 if test $RC != 0 ; then
    333 	echo "ldapmodify failed ($RC)!"
    334 	grep "$FAILURE" $TESTOUT
    335 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    336 	exit $RC
    337 fi
    338 
    339 $LDAPSEARCH -H $URI2 -b "uid=danger,ou=users,o=translucent" > $SEARCHOUT 2>&1
    340 
    341 RC=$?
    342 if test $RC != 0 ; then
    343 	echo "ldapsearch failed ($RC)!"
    344 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    345 	exit $RC
    346 fi
    347 
    348 ATTR=`grep roomNumber $SEARCHOUT` > $NOWHERE 2>&1
    349 if test "$ATTR" != "roomNumber: 9N-21" ; then
    350 	echo "modification failed!"
    351 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    352 	exit 1
    353 fi
    354 
    355 echo "Testing search: specific nonexistent remote attribute..."
    356 
    357 $LDAPSEARCH -H $URI2 -b "uid=danger,ou=users,o=translucent" roomNumber > $SEARCHOUT 2>&1
    358 
    359 RC=$?
    360 if test $RC != 0 ; then
    361 	echo "ldapsearch failed ($RC)!"
    362 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    363 	exit $RC
    364 fi
    365 
    366 echo "Testing modify: nonexistent local record, nonexistent attribute..."
    367 
    368 $LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \
    369         $TESTOUT 2>&1 << EOF_MOD2
    370 version: 1
    371 dn: uid=fred,ou=users,o=translucent
    372 changetype: modify
    373 replace: roomNumber
    374 roomNumber: 31J-2112
    375 EOF_MOD2
    376 
    377 RC=$?
    378 if test $RC != 0 ; then
    379 	echo "ldapmodify failed ($RC)!"
    380 	grep "$FAILURE" $TESTOUT
    381 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    382 	exit $RC
    383 fi
    384 
    385 $LDAPSEARCH -H $URI2 -b "uid=fred,ou=users,o=translucent" > $SEARCHOUT 2>&1
    386 
    387 RC=$?
    388 if test $RC != 0 ; then
    389 	echo "ldapsearch failed ($RC)!"
    390 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    391 	exit $RC
    392 fi
    393 
    394 ATTR=`grep roomNumber $SEARCHOUT` > $NOWHERE 2>&1
    395 if test "$ATTR" != "roomNumber: 31J-2112" ; then
    396 	echo "modification failed!"
    397 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    398 	exit 1
    399 fi
    400 
    401 echo "Testing modify: valid remote record, nonexistent attribute..."
    402 
    403 $LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \
    404         $TESTOUT 2>&1 << EOF_MOD9
    405 version: 1
    406 dn: uid=fred,ou=users,o=translucent
    407 changetype: modify
    408 delete: preferredLanguage
    409 EOF_MOD9
    410 
    411 RC=$?
    412 if test $RC != 16 ; then
    413 	echo "ldapmodify failed ($RC), expected NO SUCH ATTRIBUTE!"
    414 	grep "$FAILURE" $TESTOUT
    415 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    416 	exit 1
    417 fi
    418 
    419 echo "Testing delete: valid local record, nonexistent attribute..."
    420 
    421 $LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \
    422         $TESTOUT 2>&1 << EOF_MOD4
    423 version: 1
    424 dn: uid=fred,ou=users,o=translucent
    425 changetype: modify
    426 delete: roomNumber
    427 EOF_MOD4
    428 
    429 RC=$?
    430 if test $RC != 0 ; then
    431 	echo "ldapmodify failed ($RC)!"
    432 	grep "$FAILURE" $TESTOUT
    433 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    434 	exit $RC
    435 fi
    436 
    437 echo "Testing modrdn: prohibited local record..."
    438 
    439 $LDAPMODRDN -D "$TRANSLUCENTDN" -H $URI2 -w $TRANSLUCENTPASSWD > \
    440 	$TESTOUT 2>&1 'uid=fred,ou=users,o=translucent' 'uid=someguy'
    441 
    442 RC=$?
    443 if test $RC != 50 ; then
    444 	echo "ldapmodrdn failed ($RC), expected INSUFFICIENT ACCESS!"
    445 	grep "$FAILURE" $TESTOUT
    446 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    447 	exit 1
    448 fi
    449 
    450 echo "Testing modrdn: valid local record..."
    451 
    452 $LDAPMODRDN -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \
    453 	$TESTOUT 2>&1 'uid=fred,ou=users,o=translucent' 'uid=someguy'
    454 
    455 RC=$?
    456 if test $RC != 0 ; then
    457 	echo "ldapmodrdn failed ($RC)!"
    458 	grep "$FAILURE" $TESTOUT
    459 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    460 	exit $RC
    461 fi
    462 
    463 echo "Testing delete: prohibited local record..."
    464 
    465 $LDAPMODIFY -v -D "$TRANSLUCENTDN" -H $URI2 -w $TRANSLUCENTPASSWD > \
    466         $TESTOUT 2>&1 << EOF_DEL2
    467 version: 1
    468 dn: uid=someguy,ou=users,o=translucent
    469 changetype: delete
    470 EOF_DEL2
    471 
    472 RC=$?
    473 if test $RC != 50 ; then
    474 	echo "ldapadd failed ($RC), expected INSUFFICIENT ACCESS!"
    475 	grep "$FAILURE" $TESTOUT
    476 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    477 	exit 1
    478 fi
    479 
    480 echo "Testing delete: valid local record..."
    481 
    482 $LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \
    483         $TESTOUT 2>&1 << EOF_DEL3
    484 version: 1
    485 dn: uid=someguy,ou=users,o=translucent
    486 changetype: delete
    487 EOF_DEL3
    488 
    489 RC=$?
    490 if test $RC != 0 ; then
    491 	echo "ldapmodify failed ($RC)!"
    492 	grep "$FAILURE" $TESTOUT
    493 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    494 	exit $RC
    495 fi
    496 
    497 echo "Testing delete: valid remote record..."
    498 
    499 $LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \
    500         $TESTOUT 2>&1 << EOF_DEL8
    501 version: 1
    502 dn: uid=fred,ou=users,o=translucent
    503 changetype: delete
    504 EOF_DEL8
    505 
    506 RC=$?
    507 if test $RC != 32 ; then
    508 	echo "ldapmodify failed ($RC), expected NO SUCH OBJECT!"
    509 	grep "$FAILURE" $TESTOUT
    510 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    511 	exit 1
    512 fi
    513 
    514 echo "Testing delete: nonexistent local record, nonexistent attribute..."
    515 
    516 $LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \
    517         $TESTOUT 2>&1 << EOF_DEL1
    518 version: 1
    519 dn: uid=fred,ou=users,o=translucent
    520 changetype: modify
    521 delete: roomNumber
    522 EOF_DEL1
    523 
    524 RC=$?
    525 if test $RC != 0 ; then
    526 	echo "ldapmodify failed ($RC)!"
    527 	grep "$FAILURE" $TESTOUT
    528 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    529 	exit $RC
    530 fi
    531 
    532 $LDAPSEARCH -H $URI2 -b "uid=fred,ou=users,o=translucent" > $SEARCHOUT 2>&1
    533 
    534 RC=$?
    535 if test $RC != 0 ; then
    536 	echo "ldapsearch failed ($RC)!"
    537 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    538 	exit $RC
    539 fi
    540 
    541 echo "Testing delete: valid local record, nonexistent attribute..."
    542 
    543 $LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \
    544         $TESTOUT 2>&1 << EOF_MOD8
    545 version: 1
    546 dn: uid=danger,ou=users,o=translucent
    547 changetype: modify
    548 delete: preferredLanguage
    549 EOF_MOD8
    550 
    551 RC=$?
    552 if test $RC != 16 ; then
    553 	echo "ldapmodify failed ($RC), expected NO SUCH ATTRIBUTE!"
    554 	grep "$FAILURE" $TESTOUT
    555 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    556 	exit 1
    557 fi
    558 
    559 echo "Testing delete: valid local record, remote attribute..."
    560 
    561 $LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \
    562         $TESTOUT 2>&1 << EOF_MOD8
    563 version: 1
    564 dn: uid=danger,ou=users,o=translucent
    565 changetype: modify
    566 delete: initials
    567 EOF_MOD8
    568 
    569 RC=$?
    570 if test $RC != 0 ; then
    571 	echo "ldapmodify failed ($RC)"
    572 	grep "$FAILURE" $TESTOUT
    573 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    574 	exit 1
    575 fi
    576 
    577 echo "Testing modify: valid remote record, combination add-modify-delete..."
    578 
    579 $LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \
    580         $TESTOUT 2>&1 << EOF_MOD6
    581 version: 1
    582 dn: uid=fred,ou=users,o=translucent
    583 changetype: modify
    584 delete: carLicense
    585 -
    586 add: preferredLanguage
    587 preferredLanguage: ISO8859-1
    588 -
    589 replace: employeeType
    590 employeeType: consultant
    591 EOF_MOD6
    592 
    593 RC=$?
    594 if test $RC != 0 ; then
    595 	echo "ldapmodify failed ($RC)!"
    596 	grep "$FAILURE" $TESTOUT
    597 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    598 	exit $RC
    599 fi
    600 
    601 $LDAPSEARCH -H $URI2 -b "uid=fred,ou=users,o=translucent" > $SEARCHOUT 2>&1
    602 
    603 RC=$?
    604 if test $RC != 0 ; then
    605 	echo "ldapsearch failed ($RC)!"
    606 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    607 	exit $RC
    608 fi
    609 
    610 ATTR=`grep employeeType $SEARCHOUT` > $NOWHERE 2>&1
    611 if test "$ATTR" != "employeeType: consultant" ; then
    612 	echo "modification failed!"
    613 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    614 	exit 1
    615 fi
    616 
    617 ATTR=`grep preferredLanguage $SEARCHOUT` > $NOWHERE 2>&1
    618 if test "$ATTR" != "preferredLanguage: ISO8859-1" ; then
    619 	echo "modification failed!"
    620 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    621 	exit 1
    622 fi
    623 
    624 echo "Dynamically configuring local slapd with translucent_no_glue and translucent_strict..."
    625 
    626 $LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF
    627 dn: olcOverlay={0}translucent,olcDatabase={$DBIX}$BACKEND,cn=config
    628 changetype: modify
    629 replace: olcTranslucentNoGlue
    630 olcTranslucentNoGlue: TRUE
    631 -
    632 replace: olcTranslucentStrict
    633 olcTranslucentStrict: TRUE
    634 EOF
    635 RC=$?
    636 if test $RC != 0 ; then
    637     echo "ldapmodify of dynamic config failed ($RC)"
    638     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    639     exit 1
    640 fi
    641 
    642 echo "Testing strict mode delete: nonexistent local attribute..."
    643 
    644 $LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \
    645         $TESTOUT 2>&1 << EOF_MOD5
    646 version: 1
    647 dn: uid=example,ou=users,o=translucent
    648 changetype: modify
    649 delete: preferredLanguage
    650 EOF_MOD5
    651 
    652 RC=$?
    653 if test $RC != 19 ; then
    654 	echo "ldapmodify failed ($RC), expected CONSTRAINT VIOLATION!"
    655 	grep "$FAILURE" $TESTOUT
    656 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    657 	exit 1
    658 fi
    659 
    660 echo "Testing strict mode delete: nonexistent remote attribute..."
    661 
    662 $LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \
    663         $TESTOUT 2>&1 << EOF_MOD3
    664 version: 1
    665 dn: uid=danger,ou=users,o=translucent
    666 changetype: modify
    667 delete: displayName
    668 EOF_MOD3
    669 
    670 RC=$?
    671 if test $RC != 19 ; then
    672 	echo "ldapmodify failed ($RC), expected CONSTRAINT VIOLATION!"
    673 	grep "$FAILURE" $TESTOUT
    674 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    675 	exit 1
    676 fi
    677 
    678 echo "Testing strict mode modify: combination add-modify-delete..."
    679 
    680 $LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \
    681         $TESTOUT 2>&1 << EOF_MOD6
    682 version: 1
    683 dn: uid=example,ou=users,o=translucent
    684 changetype: modify
    685 delete: carLicense
    686 -
    687 add: preferredLanguage
    688 preferredLanguage: ISO8859-1
    689 -
    690 replace: employeeType
    691 employeeType: consultant
    692 EOF_MOD6
    693 
    694 RC=$?
    695 if test $RC != 19 ; then
    696 	echo "ldapmodify failed ($RC), expected CONSTRAINT VIOLATION!"
    697 	grep "$FAILURE" $TESTOUT
    698 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    699 	exit 1
    700 fi
    701 
    702 echo "Testing invalid Bind request..."
    703 $LDAPWHOAMI -D "$TRANSLUCENTDN" -H $URI2 -w Wrong"$TRANSLUCENTPASSWD" > \
    704 	$TESTOUT 2>&1
    705 RC=$?
    706 if test $RC != 49 ; then
    707 	echo "ldapwhoami failed ($RC), expected INVALID CREDENTIALS!"
    708 	grep "$FAILURE" $TESTOUT
    709 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    710 	exit 1
    711 fi
    712 
    713 $LDAPWHOAMI -D "$TRANSLUCENTDN" -H $URI2 -w "$TRANSLUCENTPASSWD" > \
    714 	$TESTOUT 2>&1
    715 RC=$?
    716 if test $RC != 0 ; then
    717 	echo "ldapwhoami failed ($RC), expected SUCCESS!"
    718 	grep "$FAILURE" $TESTOUT
    719 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    720 	exit 1
    721 fi
    722 
    723 echo "Testing search: unconfigured local filter..."
    724 $LDAPSEARCH -H $URI2 -b "o=translucent" "(employeeType=consultant)" > $SEARCHOUT 2>&1
    725 
    726 ATTR=`grep dn: $SEARCHOUT` > $NOWHERE 2>&1
    727 if test -n "$ATTR" ; then
    728 	echo "got result $ATTR, should have been no result"
    729 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    730 	exit 1
    731 fi
    732 
    733 echo "Dynamically configuring local slapd with translucent_local..."
    734 
    735 $LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF
    736 dn: olcOverlay={0}translucent,olcDatabase={$DBIX}$BACKEND,cn=config
    737 changetype: modify
    738 add: olcTranslucentLocal
    739 olcTranslucentLocal: employeeType
    740 EOF
    741 RC=$?
    742 if test $RC != 0 ; then
    743     echo "ldapmodify of dynamic config failed ($RC)"
    744     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    745     exit 1
    746 fi
    747 
    748 echo "Testing search: configured local filter..."
    749 $LDAPSEARCH -H $URI2 -b "o=translucent" "(employeeType=consultant)" > $SEARCHOUT 2>&1
    750 
    751 ATTR=`grep dn: $SEARCHOUT` > $NOWHERE 2>&1
    752 if test -z "$ATTR" ; then
    753 	echo "got no result, should have found entry"
    754 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    755 	exit 1
    756 fi
    757 
    758 $LDAPSEARCH -H $URI2 -b "o=translucent" "(employeeType=consult*)" > $SEARCHOUT 2>&1
    759 ATTR=`grep dn: $SEARCHOUT` > $NOWHERE 2>&1
    760 if test -z "$ATTR" ; then
    761 	echo "got no result, should have found entry"
    762 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    763 	exit 1
    764 fi
    765 
    766 echo "Testing search: unconfigured remote filter..."
    767 $LDAPSEARCH -H $URI2 -b "o=translucent" "(|(employeeType=foo)(carlicense=right))" > $SEARCHOUT 2>&1
    768 
    769 ATTR=`grep dn: $SEARCHOUT` > $NOWHERE 2>&1
    770 if test -n "$ATTR" ; then
    771 	echo "got result $ATTR, should have been no result"
    772 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    773 	exit 1
    774 fi
    775 
    776 echo "Dynamically configuring local slapd with translucent_remote..."
    777 
    778 $LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF
    779 dn: olcOverlay={0}translucent,olcDatabase={$DBIX}$BACKEND,cn=config
    780 changetype: modify
    781 add: olcTranslucentRemote
    782 olcTranslucentRemote: carLicense
    783 EOF
    784 RC=$?
    785 if test $RC != 0 ; then
    786     echo "ldapmodify of dynamic config failed ($RC)"
    787     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    788     exit 1
    789 fi
    790 
    791 echo "Testing search: configured remote filter..."
    792 $LDAPSEARCH -H $URI2 -b "o=translucent" "(|(employeeType=foo)(carlicense=right))" > $SEARCHOUT 2>&1
    793 
    794 ATTR=`grep dn: $SEARCHOUT` > $NOWHERE 2>&1
    795 if test -z "$ATTR" ; then
    796 	echo "got no result, should have found entry"
    797 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    798 	exit 1
    799 fi
    800 
    801 echo "Testing search: configured remote filter not requesting filtered attrs..."
    802 $LDAPSEARCH -H $URI2 -b "o=translucent" "(|(employeeType=foo)(carlicense=right))" cn > $SEARCHOUT 2>&1
    803 
    804 ATTR=`grep dn: $SEARCHOUT` > $NOWHERE 2>&1
    805 if test -z "$ATTR" ; then
    806 	echo "got no result, should have found entry"
    807 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    808 	exit 1
    809 fi
    810 
    811 test $KILLSERVERS != no && kill -HUP $KILLPIDS
    812 
    813 echo ">>>>> Test succeeded"
    814 
    815 test $KILLSERVERS != no && wait
    816 
    817 exit 0
    818