#! /bin/sh # $OpenLDAP$ ## This work is part of OpenLDAP Software . ## ## 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 ## . echo "running defines.sh" . $SRCDIR/scripts/defines.sh if test $BACKSQL = "sqlno" ; then echo "SQL backend not available, test skipped" exit 0 fi if test $RDBMS = "rdbmsno" ; then echo "SQL test not requested, test skipped" exit 0 fi mkdir -p $TESTDIR echo "Starting slapd on TCP/IP port $PORT1..." . $CONFFILTER $BACKEND < $SQLCONF > $CONF1 $SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 & PID=$! if test $WAIT != 0 ; then echo PID $PID read foo fi KILLPIDS="$PID" echo "Testing SQL backend read operations..." for i in 0 1 2 3 4 5; do $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \ '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)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi BASEDN="dc=example,dc=com" BINDDN="cn=Mitya Kovalev,${BASEDN}" BINDPW="mit" echo -n "Testing correct bind... " $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW RC=$? if test $RC != 0 ; then echo "ldapwhoami failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo -n "Testing incorrect bind (should fail)... " $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w "XXX" RC=$? if test $RC = 0 ; then echo "ldapwhoami should have failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit 1 fi echo "Testing baseobject search..." echo "# Testing baseobject search..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -s base -S "" \ >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing onelevel search..." echo "# Testing onelevel search..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -s one -S "" \ >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing subtree search..." echo "# Testing subtree search..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing subtree search with manageDSAit..." echo "# Testing subtree search with manageDSAit..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -M -S "" '*' ref \ >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing invalid filter..." echo "# Testing invalid filter..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(foo=)" \ >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing exact search..." echo "# Testing exact search..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(sn=Kovalev)" \ >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing substrings initial search..." echo "# Testing substrings initial search..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(cn=m*)" \ >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing substrings any search..." echo "# Testing substrings any search..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(cn=*m*)" \ >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing substrings final search..." echo "# Testing substrings final search..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(cn=*v)" \ >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing approx search..." echo "# Testing approx search..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(sn~=kovalev)" \ >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing extensible filter search..." echo "# Testing extensible filter search..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ "(sn:caseExactMatch:=Kovalev)" >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing search for telephoneNumber..." echo "# Testing search for telephoneNumber..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ "(telephoneNumber=3322334)" >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing AND search..." echo "# Testing AND search..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ "(&(sn=kovalev)(givenName=mitya))" >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing AND search on objectClass..." echo "# Testing AND search on objectClass..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ "(&(objectClass=organization)(objectClass=dcObject))" >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing OR search..." echo "# Testing OR search..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ "(|(sn=kovalev)(givenName=mitya))" >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing OR search on objectClass..." echo "# Testing OR search on objectClass..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ "(|(objectClass=document)(objectClass=organization))" \ >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing NOT search..." echo "# Testing NOT search..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ '(!(sn=kovalev))' >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing NOT search on objectClass..." echo "# Testing NOT search on objectClass..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ '(!(objectClass=inetOrgPerson))' >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing NOT search on \"auxiliary\" objectClass..." echo "# Testing NOT search on \"auxiliary\" objectClass..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ '(!(objectClass=dcObject))' >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi #### Needs work... echo "Testing NOT presence search... (disabled)" ###echo "# Testing NOT presence search..." >> $SEARCHOUT ###$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ ### '(!(sn=*))' >> $SEARCHOUT 2>&1 ### ###RC=$? ###if test $RC != 0 ; then ### echo "ldapsearch failed ($RC)!" ### test $KILLSERVERS != no && kill -HUP $KILLPIDS ### exit $RC ###fi echo "Testing attribute inheritance in filter..." echo "# Testing attribute inheritance in filter..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ "(name=example)" >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi # ITS#4604 echo "Testing undefined attribute in filter..." echo "# Testing undefined attribute in filter..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ "(|(o=example)(foobar=x))" >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing objectClass inheritance in filter..." echo "# Testing objectClass inheritance in filter..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ "(objectClass=person)" >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing \"auxiliary\" objectClass in filter..." echo "# Testing \"auxiliary\" objectClass in filter..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ "(objectClass=dcObject)" >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing hasSubordinates in filter..." echo "# Testing hasSubordinates in filter..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ "(hasSubordinates=TRUE)" >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing entryUUID in filter..." echo "# Testing entryUUID in filter..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ "(entryUUID=00000001-0000-0001-0000-000000000000)" >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing attribute inheritance in requested attributes..." echo "# Testing attribute inheritance in requested attributes..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ "(sn=kovalev)" name >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing objectClass in requested attributes..." echo "# Testing objectClass in requested attributes..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ objectClass >> $SEARCHOUT 2>&1 RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi echo "Testing operational attributes in request..." echo "# Testing operational attributes in request..." >> $SEARCHOUT $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ '+' 2>&1 > $SEARCHFLT RC=$? if test $RC != 0 ; then echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi grep -v '^entryCSN:' $SEARCHFLT >> $SEARCHOUT SIZELIMIT=4 echo "Testing size limit..." $LDAPRSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" \ -z $SIZELIMIT -S "" '(objectClass=*)' >$SEARCHFLT 2>&1 RC=$? COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHFLT` case $RC in 0) if test x"$COUNT" != x ; then if test "$COUNT" -gt "$SIZELIMIT" ; then echo "...error: got $COUNT entries instead of the requested $SIZELIMIT" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit 1 fi echo "...didn't bump into the requested size limit ($SIZELIMIT; got $COUNT entries)" else echo "...error: did not expect ldapsearch success ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit 1 fi ;; 4) if test x"$COUNT" != x ; then if test "$COUNT" = "$SIZELIMIT" ; then echo "...bumped into requested size limit ($SIZELIMIT)" else echo "...error: got $COUNT entries with a requested sizelimit of $SIZELIMIT" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi else echo "...error: bumped into server-side size limit, but got no entries!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC fi ;; *) echo "ldapsearch failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC ;; esac echo -n "Testing compare (should be TRUE)... " $LDAPCOMPARE -h $LOCALHOST -p $PORT1 "$BINDDN" \ "sn:kovalev" >> $TESTOUT 2>&1 RC=$? case $RC in 6) echo "TRUE" ;; 5) echo "FALSE!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC ;; *) echo "failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit 1 ;; esac echo -n "Testing compare (should be FALSE)... " $LDAPCOMPARE -h $LOCALHOST -p $PORT1 "$BINDDN" \ "cn:foobar" >> $TESTOUT 2>&1 RC=$? case $RC in 6) echo "TRUE!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC ;; 5) echo "FALSE" ;; *) echo "failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit 1 ;; esac echo -n "Testing compare (should be UNDEFINED)... " $LDAPCOMPARE -h $LOCALHOST -p $PORT1 "$BINDDN" \ "o:example" >> $TESTOUT 2>&1 RC=$? case $RC in 6) echo "TRUE!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC ;; 5) echo "FALSE!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC ;; *) echo "failed ($RC)" ;; esac echo -n "Testing compare on hasSubordinates (should be TRUE)... " $LDAPCOMPARE -h $LOCALHOST -p $PORT1 "$BASEDN" \ "hasSubordinates:TRUE" >> $TESTOUT 2>&1 RC=$? case $RC in 6) echo "TRUE" ;; 5) echo "FALSE!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit $RC ;; *) echo "failed ($RC)!" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit 1 ;; esac echo "Filtering ldapsearch results..." $LDIFFILTER < $SEARCHOUT > $SEARCHFLT echo "Filtering original ldif..." $LDIFFILTER < $SQLREAD > $LDIFFLT echo "Comparing filter output..." $CMP $SEARCHFLT $LDIFFLT > $CMPOUT if test $? != 0 ; then echo "comparison failed - SQL search didn't succeed" test $KILLSERVERS != no && kill -HUP $KILLPIDS exit 1 fi test $KILLSERVERS != no && kill -HUP $KILLPIDS echo ">>>>> Test succeeded" exit 0