Home | History | Annotate | Line # | Download | only in scripts
test028-idassert revision 1.1.1.7
      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.7  christos ## Copyright 1998-2019 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 echo "### This test requires the LDAP backend and the rwm overlay."
     20      1.1     lukem echo "### If available, and explicitly requested, it can use SASL bind;"
     21      1.1     lukem echo "### note that SASL must be properly set up, and the requested"
     22      1.1     lukem echo "### mechanism must be available.  Define SLAPD_USE_SASL={yes|<mech>},"
     23      1.1     lukem echo "### with \"yes\" defaulting to DIGEST-MD5 to enable SASL authc[/authz]."
     24      1.1     lukem 
     25      1.1     lukem if test $BACKLDAP = "ldapno" ; then 
     26      1.1     lukem 	echo "LDAP backend not available, test skipped"
     27      1.1     lukem 	exit 0
     28      1.1     lukem fi 
     29      1.1     lukem 
     30      1.1     lukem if test $RWM = "rwmno" ; then 
     31      1.1     lukem 	echo "Rewrite/remap overlay not available, test skipped"
     32      1.1     lukem 	exit 0
     33      1.1     lukem fi 
     34      1.1     lukem 
     35      1.1     lukem if test $THREADS = "threadsno" ; then
     36      1.1     lukem 	echo "Need threads support, test skipped"
     37      1.1     lukem 	exit 0
     38      1.1     lukem fi 
     39      1.1     lukem 
     40      1.1     lukem if test $WITH_SASL = "yes" ; then
     41      1.1     lukem 	if test $USE_SASL != "no" ; then
     42      1.1     lukem 		if test $USE_SASL = "yes" ; then
     43      1.1     lukem 			MECH="DIGEST-MD5"
     44      1.1     lukem 		else
     45      1.1     lukem 			MECH="$USE_SASL"
     46      1.1     lukem 		fi
     47      1.1     lukem 		echo "Using SASL authc[/authz] with mech=$MECH; unset SLAPD_USE_SASL to disable"
     48      1.1     lukem 	else
     49      1.1     lukem 		echo "Using proxyAuthz with simple authc..."
     50      1.1     lukem 	fi
     51      1.1     lukem else
     52      1.1     lukem 	echo "SASL not available; using proxyAuthz with simple authc..."
     53      1.1     lukem fi
     54      1.1     lukem 
     55      1.1     lukem mkdir -p $TESTDIR $DBDIR1 $DBDIR2
     56      1.1     lukem 
     57      1.1     lukem echo "Running slapadd to build slapd database..."
     58      1.1     lukem . $CONFFILTER $BACKEND $MONITORDB < $IDASSERTCONF > $ADDCONF
     59      1.1     lukem $SLAPADD -f $ADDCONF -l $LDIFIDASSERT1 -n 1
     60      1.1     lukem RC=$?
     61      1.1     lukem if test $RC != 0 ; then
     62      1.1     lukem 	echo "slapadd -n 1 failed ($RC)!"
     63      1.1     lukem 	exit $RC
     64      1.1     lukem fi
     65      1.1     lukem $SLAPADD -f $ADDCONF -l $LDIFIDASSERT2 -n 2
     66      1.1     lukem RC=$?
     67      1.1     lukem if test $RC != 0 ; then
     68      1.1     lukem 	echo "slapadd -n 2 failed ($RC)!"
     69      1.1     lukem 	exit $RC
     70      1.1     lukem fi
     71      1.1     lukem 
     72      1.1     lukem echo "Starting slapd on TCP/IP port $PORT..."
     73      1.1     lukem . $CONFFILTER $BACKEND $MONITORDB < $IDASSERTCONF > $CONF1
     74      1.1     lukem $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
     75      1.1     lukem PID=$!
     76      1.1     lukem if test $WAIT != 0 ; then
     77      1.1     lukem     echo PID $PID
     78      1.1     lukem     read foo
     79      1.1     lukem fi
     80      1.1     lukem KILLPIDS="$PID"
     81      1.1     lukem 
     82      1.1     lukem sleep 1
     83      1.1     lukem 
     84      1.1     lukem echo "Using ldapsearch to check that slapd is running..."
     85      1.1     lukem for i in 0 1 2 3 4 5; do
     86      1.1     lukem 	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
     87      1.1     lukem 		'objectclass=*' > /dev/null 2>&1
     88      1.1     lukem 	RC=$?
     89      1.1     lukem 	if test $RC = 0 ; then
     90      1.1     lukem 		break
     91      1.1     lukem 	fi
     92      1.1     lukem 	echo "Waiting 5 seconds for slapd to start..."
     93      1.1     lukem 	sleep 5
     94      1.1     lukem done
     95      1.1     lukem 
     96      1.1     lukem echo "Testing ldapwhoami as proxy US..."
     97      1.1     lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy US,ou=Admin,dc=example,dc=com" -w proxy
     98      1.1     lukem RC=$?
     99      1.1     lukem if test $RC != 0 ; then
    100      1.1     lukem 	echo "ldapwhoami failed ($RC)!"
    101      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    102      1.1     lukem 	exit $RC
    103      1.1     lukem fi
    104      1.1     lukem 
    105      1.1     lukem AUTHZID="u:it/jaj"
    106      1.1     lukem echo "Testing ldapwhoami as proxy US, $AUTHZID..."
    107      1.1     lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy US,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID"
    108      1.1     lukem RC=$?
    109  1.1.1.3      adam if test $RC != 0 && test $BACKEND != null ; then
    110      1.1     lukem 	echo "ldapwhoami failed ($RC)!"
    111      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    112      1.1     lukem 	exit $RC
    113      1.1     lukem fi
    114      1.1     lukem 
    115      1.1     lukem AUTHZID="u:bjorn"
    116      1.1     lukem echo "Testing ldapwhoami as proxy US, $AUTHZID... (should fail)"
    117      1.1     lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy US,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID"
    118      1.1     lukem RC=$?
    119      1.1     lukem if test $RC != 1 ; then
    120      1.1     lukem 	echo "ldapwhoami should have failed ($RC)!"
    121      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    122  1.1.1.3      adam 	exit 1
    123      1.1     lukem fi
    124      1.1     lukem 
    125      1.1     lukem AUTHZID="u:bjensen"
    126      1.1     lukem echo "Testing ldapwhoami as proxy US, $AUTHZID... (should fail)"
    127      1.1     lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy US,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID"
    128      1.1     lukem RC=$?
    129      1.1     lukem if test $RC != 1 ; then
    130      1.1     lukem 	echo "ldapwhoami should have failed ($RC)!"
    131      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    132  1.1.1.3      adam 	exit 1
    133      1.1     lukem fi
    134      1.1     lukem 
    135      1.1     lukem echo "Testing ldapwhoami as proxy IT..."
    136      1.1     lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy IT,ou=Admin,dc=example,dc=com" -w proxy
    137      1.1     lukem RC=$?
    138      1.1     lukem if test $RC != 0 ; then
    139      1.1     lukem 	echo "ldapwhoami failed ($RC)!"
    140      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    141      1.1     lukem 	exit $RC
    142      1.1     lukem fi
    143      1.1     lukem 
    144      1.1     lukem AUTHZID="u:it/jaj"
    145      1.1     lukem echo "Testing ldapwhoami as proxy IT, $AUTHZID... (should fail)"
    146      1.1     lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy IT,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID"
    147      1.1     lukem RC=$?
    148      1.1     lukem if test $RC != 1 ; then
    149      1.1     lukem 	echo "ldapwhoami should have failed ($RC)!"
    150      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    151  1.1.1.3      adam 	exit 1
    152      1.1     lukem fi
    153      1.1     lukem 
    154      1.1     lukem AUTHZID="u:bjorn"
    155      1.1     lukem echo "Testing ldapwhoami as proxy IT, $AUTHZID... (should fail)"
    156      1.1     lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy IT,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID"
    157      1.1     lukem RC=$?
    158      1.1     lukem if test $RC != 1 ; then
    159      1.1     lukem 	echo "ldapwhoami should have failed ($RC)!"
    160      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    161  1.1.1.3      adam 	exit 1
    162      1.1     lukem fi
    163      1.1     lukem 
    164      1.1     lukem AUTHZID="dn:cn=Sandbox,ou=Admin,dc=example,dc=com"
    165      1.1     lukem echo "Testing ldapwhoami as proxy IT, $AUTHZID..."
    166      1.1     lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy IT,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID"
    167      1.1     lukem RC=$?
    168  1.1.1.3      adam if test $RC != 0 && test $BACKEND != null ; then
    169      1.1     lukem 	echo "ldapwhoami failed ($RC)!"
    170      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    171      1.1     lukem 	exit $RC
    172      1.1     lukem fi
    173      1.1     lukem 
    174      1.1     lukem AUTHZID="dn:uid=bjorn,ou=People,o=Example,c=US"
    175      1.1     lukem echo "Testing ldapwhoami as bjorn, $AUTHZID..."
    176      1.1     lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "uid=bjorn,ou=people,dc=example,dc=com" -w bjorn -e\!"authzid=$AUTHZID"
    177      1.1     lukem RC=$?
    178      1.1     lukem if test $RC != 0 ; then
    179      1.1     lukem 	echo "ldapwhoami failed ($RC)!"
    180      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    181      1.1     lukem 	exit $RC
    182      1.1     lukem fi
    183      1.1     lukem 
    184      1.1     lukem AUTHZID="dn:uid=bjorn,ou=People,o=Esempio,c=IT"
    185      1.1     lukem echo "Testing ldapwhoami as bjorn, $AUTHZID..."
    186      1.1     lukem $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "uid=bjorn,ou=people,dc=example,dc=com" -w bjorn -e\!"authzid=$AUTHZID"
    187      1.1     lukem RC=$?
    188      1.1     lukem if test $RC != 0 ; then
    189      1.1     lukem 	echo "ldapwhoami failed ($RC)!"
    190      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    191      1.1     lukem 	exit $RC
    192      1.1     lukem fi
    193      1.1     lukem 
    194  1.1.1.7  christos AUTHZID="u:it/jaj"
    195  1.1.1.7  christos echo "Checking another DB's rootdn can't assert identity from another DB..."
    196  1.1.1.7  christos $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$MANAGERDN" -w $PASSWD -e\!"authzid=$AUTHZID"
    197  1.1.1.7  christos 
    198  1.1.1.7  christos RC=$?
    199  1.1.1.7  christos if test $RC != 1 ; then
    200  1.1.1.7  christos     echo "ldapwhoami should have failed ($RC)!"
    201  1.1.1.7  christos     test $KILLSERVERS != no && kill -HUP $KILLPIDS
    202  1.1.1.7  christos     exit 1
    203  1.1.1.7  christos fi
    204  1.1.1.7  christos 
    205      1.1     lukem ID="uid=jaj,ou=People,dc=example,dc=it"
    206      1.1     lukem BASE="o=Example,c=US"
    207      1.1     lukem echo "Testing ldapsearch as $ID for \"$BASE\"..."
    208      1.1     lukem $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASE" \
    209      1.1     lukem 	-D "$ID" -w jaj > $SEARCHOUT 2>&1
    210      1.1     lukem 
    211      1.1     lukem RC=$?
    212  1.1.1.3      adam if test $RC != 0 && test $BACKEND != null ; then
    213      1.1     lukem 	echo "ldapsearch failed ($RC)!"
    214      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    215      1.1     lukem 	exit $RC
    216      1.1     lukem fi
    217      1.1     lukem 
    218      1.1     lukem echo "Filtering ldapsearch results..."
    219  1.1.1.3      adam $LDIFFILTER -s ldif=e < $SEARCHOUT > $SEARCHFLT
    220      1.1     lukem echo "Filtering original ldif used to create database..."
    221  1.1.1.3      adam $LDIFFILTER -s ldif=e < $IDASSERTOUT > $LDIFFLT
    222      1.1     lukem echo "Comparing filter output..."
    223      1.1     lukem $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
    224  1.1.1.3      adam 
    225      1.1     lukem if test $? != 0 ; then
    226      1.1     lukem 	echo "comparison failed - search with identity assertion didn't succeed"
    227      1.1     lukem 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    228      1.1     lukem 	exit 1
    229      1.1     lukem fi
    230      1.1     lukem 
    231      1.1     lukem if test $USE_SASL != "no" ; then
    232      1.1     lukem 	ID="it/jaj"
    233      1.1     lukem 	BASE="o=Example,c=US"
    234      1.1     lukem 	echo "Testing ldapsearch as $ID for \"$BASE\" with SASL bind and identity assertion..."
    235      1.1     lukem 	$LDAPSASLSEARCH -h $LOCALHOST -p $PORT1 -b "$BASE" \
    236      1.1     lukem 		-Q -U "$ID" -w jaj -Y $MECH > $SEARCHOUT 2>&1
    237      1.1     lukem 
    238      1.1     lukem 	RC=$?
    239      1.1     lukem 	if test $RC != 0 ; then
    240      1.1     lukem 		echo "ldapsearch failed ($RC)!"
    241      1.1     lukem 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    242      1.1     lukem 		exit $RC
    243      1.1     lukem 	fi
    244      1.1     lukem 
    245  1.1.1.7  christos 	ID="manager"
    246  1.1.1.7  christos 	AUTHZID="u:it/jaj"
    247  1.1.1.7  christos 	echo "Checking another DB's rootdn can't assert in another (with SASL bind this time)..."
    248  1.1.1.7  christos 	$LDAPSASLWHOAMI -h $LOCALHOST -p $PORT1 \
    249  1.1.1.7  christos 		-Q -U "$ID" -w $PASSWD -Y $MECH -X $AUTHZID
    250  1.1.1.7  christos 
    251  1.1.1.7  christos 	RC=$?
    252  1.1.1.7  christos 	if test $RC != 50 ; then
    253  1.1.1.7  christos 		echo "ldapwhoami should have failed ($RC)!"
    254  1.1.1.7  christos 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    255  1.1.1.7  christos 		exit 1
    256  1.1.1.7  christos 	fi
    257  1.1.1.7  christos 
    258      1.1     lukem 	echo "Filtering ldapsearch results..."
    259  1.1.1.3      adam 	$LDIFFILTER < $SEARCHOUT > $SEARCHFLT
    260      1.1     lukem 	echo "Filtering original ldif used to create database..."
    261  1.1.1.3      adam 	$LDIFFILTER < $IDASSERTOUT > $LDIFFLT
    262      1.1     lukem 	echo "Comparing filter output..."
    263      1.1     lukem 	$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
    264      1.1     lukem 	
    265      1.1     lukem 	if test $? != 0 ; then
    266      1.1     lukem 		echo "comparison failed - search with SASL bind and identity assertion didn't succeed"
    267      1.1     lukem 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    268      1.1     lukem 		exit 1
    269      1.1     lukem 	fi
    270      1.1     lukem fi
    271      1.1     lukem 
    272      1.1     lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
    273      1.1     lukem 
    274      1.1     lukem echo ">>>>> Test succeeded"
    275      1.1     lukem 
    276      1.1     lukem test $KILLSERVERS != no && wait
    277      1.1     lukem 
    278      1.1     lukem exit 0
    279