mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-20 22:59:34 -05:00
The libtool wrapper scripts lose argv[0] when exec'ing the real binary. In the CI Docker container, where the build runs as root, this was actually starting a real slapd on the default port. Outside Docker, running as a non-root user, this slapd would just fail to start, and wouldn't convert the config either. Using "slapd -Tt" fixes the issue but also prints a warning from slaptest since the database hasn't been initialized yet. Dynamic config isn't actually used in this test script, so let's just run slapd off the config file directly.
229 lines
5.5 KiB
Bash
Executable file
229 lines
5.5 KiB
Bash
Executable file
#! /bin/sh
|
|
# $OpenLDAP$
|
|
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
|
##
|
|
## Copyright 1998-2020 The OpenLDAP Foundation.
|
|
## All rights reserved.
|
|
##
|
|
## Redistribution and use in source and binary forms, with or without
|
|
## modification, are permitted only as authorized by the OpenLDAP
|
|
## Public License.
|
|
##
|
|
## A copy of this license is available in the file LICENSE in the
|
|
## top-level directory of the distribution or, alternatively, at
|
|
## <http://www.OpenLDAP.org/license.html>.
|
|
|
|
echo "running defines.sh"
|
|
. $SRCDIR/scripts/defines.sh
|
|
|
|
if test $WITH_SASL = no ; then
|
|
echo "SASL support not available, test skipped"
|
|
exit 0
|
|
fi
|
|
|
|
mkdir -p $TESTDIR $DBDIR1 $CONFDIR
|
|
cp -r $DATADIR/tls $TESTDIR
|
|
|
|
echo "Starting KDC for SASL/GSSAPI tests..."
|
|
. $SRCDIR/scripts/setup_kdc.sh
|
|
|
|
echo "Running slapadd to build slapd database..."
|
|
. $CONFFILTER $BACKEND $MONITORDB < $SASLGSSAPICONF > $CONF1
|
|
$SLAPADD -f $CONF1 -l $LDIFORDERED
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "slapadd failed ($RC)!"
|
|
kill $KDCPROC
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Starting ldap:/// slapd on TCP/IP port $PORT1 and ldaps:/// slapd on $PORT2..."
|
|
$SLAPD -f $CONF1 -h "$URI1 $SURI2" -d $LVL $TIMING > $LOG1 2>&1 &
|
|
PID=$!
|
|
if test $WAIT != 0 ; then
|
|
echo PID $PID
|
|
read foo
|
|
fi
|
|
KILLPIDS="$PID"
|
|
|
|
sleep 1
|
|
|
|
for i in 0 1 2 3 4 5; do
|
|
$LDAPSEARCH -s base -b "" -H $URI1 \
|
|
'objectclass=*' > /dev/null 2>&1
|
|
RC=$?
|
|
if test $RC = 0 ; then
|
|
break
|
|
fi
|
|
echo "Waiting 5 seconds for slapd to start..."
|
|
sleep 5
|
|
done
|
|
|
|
if test $RC != 0 ; then
|
|
echo "ldapsearch failed ($RC)!"
|
|
kill $KDCPROC
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
$LDAPSEARCH -x -H $URI1 -s "base" -b "" supportedSASLMechanisms > $TESTOUT 2>&1
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapsearch failed ($RC)!"
|
|
kill $KDCPROC
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
grep GSSAPI $TESTOUT
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "failed: GSSAPI mechanism not in supportedSASLMechanisms."
|
|
kill $KDCPROC
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo -n "Using ldapwhoami with SASL/GSSAPI: "
|
|
$LDAPSASLWHOAMI -N -Y GSSAPI -H $URI1 > $TESTOUT 2>&1
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapwhoami failed ($RC)!"
|
|
kill $KDCPROC
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
else
|
|
echo "success"
|
|
fi
|
|
|
|
echo -n "Validating mapped SASL/GSSAPI ID: "
|
|
echo "dn:uid=$KUSER,cn=$KRB5REALM,cn=gssapi,cn=auth" > $TESTDIR/dn.out
|
|
$CMP $TESTDIR/dn.out $TESTOUT > $CMPOUT
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "Comparison failed"
|
|
kill $KDCPROC
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
else
|
|
echo "success"
|
|
fi
|
|
|
|
if test $WITH_TLS = no ; then
|
|
echo "SASL/GSSAPI: TLS support not available, skipping TLS part."
|
|
else
|
|
echo -n "Using ldapwhoami with SASL/GSSAPI with start-tls: "
|
|
$LDAPSASLWHOAMI -N -Y GSSAPI -H $URI1 -ZZ -o tls_reqcert=allow \
|
|
-o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt \
|
|
> $TESTOUT 2>&1
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapwhoami failed ($RC)!"
|
|
kill $KDCPROC
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
else
|
|
echo "success"
|
|
fi
|
|
|
|
echo -n "Using ldapwhoami with SASL/GSSAPI with ldaps: "
|
|
$LDAPSASLWHOAMI -N -Y GSSAPI -H $SURI2 -o tls_reqcert=allow \
|
|
-o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt \
|
|
> $TESTOUT 2>&1
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapwhoami failed ($RC)!"
|
|
kill $KDCPROC
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
else
|
|
echo "success"
|
|
fi
|
|
fi
|
|
|
|
if test $WITH_TLS = no ; then
|
|
echo "TLS support not available, skipping channe-binding test"
|
|
elif test $HAVE_SASL_GSS_CBIND = no ; then
|
|
echo "SASL has no channel-binding support in GSSAPI, test skipped"
|
|
else
|
|
echo "Testing SASL/GSSAPI with SASL_CBINDING..."
|
|
|
|
for acb in "none" "tls-unique" "tls-endpoint" ; do
|
|
|
|
echo "Modifying slapd's olcSaslCBinding to ${acb} ..."
|
|
$LDAPMODIFY -D cn=config -H $URI1 -w secret <<EOF > $TESTOUT 2>&1
|
|
dn: cn=config
|
|
changetype: modify
|
|
replace: olcSaslCBinding
|
|
olcSaslCBinding: ${acb}
|
|
EOF
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapmodify failed ($RC)!"
|
|
kill $KDCPROC
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
for icb in "none" "tls-unique" "tls-endpoint" ; do
|
|
|
|
# The gnutls implemantation of "tls-unique" seems broken
|
|
if test $icb = "tls-unique" -o $acb = "tls-unique" ; then
|
|
if test $WITH_TLS_TYPE == gnutls ; then
|
|
continue
|
|
fi
|
|
fi
|
|
|
|
fail="no"
|
|
if test $icb != $acb -a $acb != "none" ; then
|
|
# This currently fails in MIT, but it is planned to be
|
|
# fixed not to fail like in heimdal - avoid testing.
|
|
if test $icb = "none" ; then
|
|
continue
|
|
fi
|
|
# Otherwise unmatching bindings are expected to fail.
|
|
fail="yes"
|
|
fi
|
|
|
|
echo -n "Using ldapwhoami with SASL/GSSAPI and SASL_CBINDING "
|
|
echo -ne "(client: ${icb},\tserver: ${acb}): "
|
|
|
|
$LDAPSASLWHOAMI -N -Y GSSAPI -H $URI1 -ZZ -o tls_reqcert=allow \
|
|
-o tls_cacert=$TESTDIR/tls/ca/certs/testsuiteCA.crt \
|
|
-o SASL_CBINDING=$icb > $TESTOUT 2>&1
|
|
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
if test $fail = "no" ; then
|
|
echo "test failed ($RC)!"
|
|
kill $KDCPROC
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
elif test $fail = "yes" ; then
|
|
echo "failed: command succeeded unexpectedly."
|
|
kill $KDCPROC
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit 1
|
|
fi
|
|
|
|
echo "success"
|
|
RC=0
|
|
done
|
|
done
|
|
fi
|
|
|
|
|
|
kill $KDCPROC
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
|
|
if test $RC != 0 ; then
|
|
echo ">>>>> Test failed"
|
|
else
|
|
echo ">>>>> Test succeeded"
|
|
RC=0
|
|
fi
|
|
|
|
test $KILLSERVERS != no && wait
|
|
|
|
exit $RC
|