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 1998-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 echo "### This test requires the ldap backend and glue overlay."
     20 echo "### If available, and explicitly requested, it can use SASL bind;"
     21 echo "### note that SASL must be properly set up, and the requested"
     22 echo "### mechanism must be available.  Define SLAPD_USE_SASL={yes|<mech>},"
     23 echo "### with \"yes\" defaulting to SCRAM-SHA-256 to enable SASL authc[/authz]."
     24 
     25 if test $BACKLDAP = "ldapno" ; then 
     26 	echo "LDAP backend not available, test skipped"
     27 	exit 0
     28 fi 
     29 
     30 if test $WITH_SASL = "yes" ; then
     31 	if test $USE_SASL != "no" ; then
     32 		if test $USE_SASL = "yes" ; then
     33 			MECH="SCRAM-SHA-256"
     34 		else
     35 			MECH="$USE_SASL"
     36 		fi
     37 		echo "Using SASL authc[/authz] with mech=$MECH; unset SLAPD_USE_SASL to disable"
     38 	else
     39 		echo "Using proxyAuthz with simple authc..."
     40 	fi
     41 else
     42 	echo "SASL not available; using proxyAuthz with simple authc..."
     43 fi
     44 
     45 mkdir -p $TESTDIR $DBDIR1 $DBDIR2 $DBDIR3
     46 
     47 echo "Running slapadd to build slapd database..."
     48 . $CONFFILTER $BACKEND < $LDAPGLUECONF1 > $ADDCONF
     49 $SLAPADD -f $ADDCONF -l $LDIFLDAPGLUE1
     50 RC=$?
     51 if test $RC != 0 ; then
     52 	echo "slapadd 1 failed ($RC)!"
     53 	exit $RC
     54 fi
     55 
     56 . $CONFFILTER $BACKEND < $LDAPGLUECONF2 > $ADDCONF
     57 $SLAPADD -f $ADDCONF -l $LDIFLDAPGLUE2
     58 RC=$?
     59 if test $RC != 0 ; then
     60 	echo "slapadd 2 failed ($RC)!"
     61 	exit $RC
     62 fi
     63 
     64 . $CONFFILTER $BACKEND < $LDAPGLUECONF3 > $ADDCONF
     65 $SLAPADD -f $ADDCONF -l $LDIFLDAPGLUE3
     66 RC=$?
     67 if test $RC != 0 ; then
     68 	echo "slapadd 3 failed ($RC)!"
     69 	exit $RC
     70 fi
     71 
     72 echo "Starting local slapd on TCP/IP port $PORT1..."
     73 . $CONFFILTER $BACKEND < $LDAPGLUECONF1 > $CONF1
     74 $SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 &
     75 PID1=$!
     76 if test $WAIT != 0 ; then
     77     echo PID $PID1
     78     read foo
     79 fi
     80 
     81 echo "Starting remote slapd 1 on TCP/IP port $PORT2..."
     82 . $CONFFILTER $BACKEND < $LDAPGLUECONF2 > $CONF2
     83 $SLAPD -f $CONF2 -h $URI2 -d $LVL > $LOG2 2>&1 &
     84 PID2=$!
     85 if test $WAIT != 0 ; then
     86     echo PID $PID2
     87     read foo
     88 fi
     89 
     90 echo "Starting remote slapd 2 on TCP/IP port $PORT3..."
     91 . $CONFFILTER $BACKEND < $LDAPGLUECONF3 > $CONF3
     92 $SLAPD -f $CONF3 -h $URI3 -d $LVL > $LOG3 2>&1 &
     93 PID3=$!
     94 if test $WAIT != 0 ; then
     95     echo PID $PID3
     96     read foo
     97 fi
     98 KILLPIDS="$PID1 $PID2 $PID3"
     99 
    100 sleep 1
    101 
    102 echo "Using ldapsearch to check that slapd is running..."
    103 for i in 0 1 2 3 4 5; do
    104 	$LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
    105 		'objectclass=*' > /dev/null 2>&1
    106 	RC=$?
    107 	if test $RC = 0 ; then
    108 		break
    109 	fi
    110 	echo "Waiting 5 seconds for slapd to start..."
    111 	sleep 5
    112 done
    113 
    114 echo "Using ldapsearch to check that slapd is running..."
    115 for i in 0 1 2 3 4 5; do
    116 	$LDAPSEARCH -s base -b "$MONITOR" -H $URI2 \
    117 		'objectclass=*' > /dev/null 2>&1
    118 	RC=$?
    119 	if test $RC = 0 ; then
    120 		break
    121 	fi
    122 	echo "Waiting 5 seconds for slapd to start..."
    123 	sleep 5
    124 done
    125 
    126 echo "Using ldapsearch to check that slapd is running..."
    127 for i in 0 1 2 3 4 5; do
    128 	$LDAPSEARCH -s base -b "$MONITOR" -H $URI3 \
    129 		'objectclass=*' > /dev/null 2>&1
    130 	RC=$?
    131 	if test $RC = 0 ; then
    132 		break
    133 	fi
    134 	echo "Waiting 5 seconds for slapd to start..."
    135 	sleep 5
    136 done
    137 
    138 ID="uid=bjorn,ou=People,dc=example,dc=com"
    139 BASE="dc=example,dc=com"
    140 echo "Testing ldapsearch as $ID for \"$BASE\"..."
    141 $LDAPSEARCH -H $URI1 -b "$BASE" \
    142 	-D "$ID" -w bjorn > $SEARCHOUT 2>&1
    143 
    144 RC=$?
    145 if test $RC != 0 ; then
    146 	echo "ldapsearch failed ($RC)!"
    147 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    148 	exit $RC
    149 fi
    150 
    151 echo "Filtering ldapsearch results..."
    152 $LDIFFILTER -s ldif=e < $SEARCHOUT > $SEARCHFLT
    153 echo "Filtering original ldif used to create database..."
    154 $LDIFFILTER -s ldif=e < $LDAPGLUEOUT > $LDIFFLT
    155 echo "Comparing filter output..."
    156 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
    157 	
    158 if test $? != 0 ; then
    159 	echo "comparison failed - glued search with identity assertion didn't succeed"
    160 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    161 	exit 1
    162 fi
    163 
    164 BASE="dc=example,dc=com"
    165 echo "Testing ldapsearch as anonymous for \"$BASE\"..."
    166 $LDAPSEARCH -H $URI1 -b "$BASE" \
    167 	 > $SEARCHOUT 2>&1
    168 
    169 RC=$?
    170 if test $RC != 0 ; then
    171 	echo "ldapsearch failed ($RC)!"
    172 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    173 	exit $RC
    174 fi
    175 
    176 echo "Filtering ldapsearch results..."
    177 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
    178 echo "Filtering original ldif used to create database..."
    179 $LDIFFILTER < $LDAPGLUEANONYMOUSOUT > $LDIFFLT
    180 echo "Comparing filter output..."
    181 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
    182 	
    183 if test $? != 0 ; then
    184 	echo "comparison failed - anonymous glued search with identity assertion didn't succeed"
    185 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    186 	exit 1
    187 fi
    188 
    189 # FIXME: this cannot work as is, because SASL bind cannot be proxied!
    190 if test $USE_SASL != "no" ; then
    191 	ID="bjorn"
    192 	BASE="dc=example,dc=com"
    193 	echo "Testing ldapsearch as $ID for \"$BASE\" with SASL bind and identity assertion..."
    194 	$LDAPSASLSEARCH -H $URI1 -b "$BASE" \
    195 		-Q -U "$ID" -w bjorn -Y $MECH > $SEARCHOUT 2>&1
    196 
    197 	RC=$?
    198 	if test $RC != 0 ; then
    199 		echo "ldapsearch failed ($RC)!"
    200 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    201 		exit $RC
    202 	fi
    203 
    204 	echo "Filtering ldapsearch results..."
    205 	$LDIFFILTER < $SEARCHOUT > $SEARCHFLT
    206 	echo "Filtering original ldif used to create database..."
    207 	$LDIFFILTER < $LDAPGLUEOUT > $LDIFFLT
    208 	echo "Comparing filter output..."
    209 	$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
    210 	
    211 	if test $? != 0 ; then
    212 		echo "comparison failed - glued search with SASL bind and identity assertion didn't succeed"
    213 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    214 		exit 1
    215 	fi
    216 fi
    217 
    218 test $KILLSERVERS != no && kill -HUP $KILLPIDS
    219 
    220 echo ">>>>> Test succeeded"
    221 
    222 test $KILLSERVERS != no && wait
    223 
    224 exit 0
    225