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 ## Copyright 2022 Symas Corp.
      7 ##
      8 ## All rights reserved.
      9 ##
     10 ## Redistribution and use in source and binary forms, with or without
     11 ## modification, are permitted only as authorized by the OpenLDAP
     12 ## Public License.
     13 ##
     14 ## A copy of this license is available in the file LICENSE in the
     15 ## top-level directory of the distribution or, alternatively, at
     16 ## <http://www.OpenLDAP.org/license.html>.
     17 ##
     18 ## ACKNOWLEDGEMENTS:
     19 ## This work was developed in 2022 by Nadezhda Ivanova for Symas Corp.
     20 echo "running defines.sh"
     21 . $SRCDIR/scripts/defines.sh
     22 
     23 echo ""
     24 
     25 rm -rf $TESTDIR
     26 
     27 mkdir -p $TESTDIR $DBDIR1
     28 
     29 echo "Starting slapd on TCP/IP port $PORT1..."
     30 . $CONFFILTER $BACKEND < data/slapd.conf > $CONF1
     31 $SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 &
     32 PID=$!
     33 if test $WAIT != 0 ; then
     34     echo PID $PID
     35     read foo
     36 fi
     37 KILLPIDS="$PID"
     38 
     39 sleep 1
     40 
     41 echo "Using ldapsearch to check that slapd is running..."
     42 for i in 0 1 2 3 4 5; do
     43 	$LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
     44 		'objectclass=*' > /dev/null 2>&1
     45 	RC=$?
     46 	if test $RC = 0 ; then
     47 		break
     48 	fi
     49 	echo "Waiting 5 seconds for slapd to start..."
     50 	sleep 5
     51 done
     52 if test $RC != 0 ; then
     53 	echo "ldapsearch failed ($RC)!"
     54 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     55 	exit $RC
     56 fi
     57 
     58 echo "Using ldapadd to populate the database..."
     59 $LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD < \
     60 	data/test001-add.ldif > $TESTOUT 2>&1
     61 RC=$?
     62 if test $RC != 0 ; then
     63 	echo "ldapadd failed ($RC)!"
     64 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     65 	exit $RC
     66 fi
     67 
     68 cat /dev/null > $SEARCHOUT
     69 
     70 echo "Searching base=\"$BASEDN\"..."
     71 echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT
     72 $LDAPSEARCH -S "" -H $URI1 -b "$BASEDN" >> $SEARCHOUT 2>&1
     73 RC=$?
     74 
     75 if test $RC != 0 ; then
     76 	echo "Search failed ($RC)!"
     77 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     78 	exit $RC
     79 fi
     80 
     81 echo "Filtering ldapsearch results..."
     82 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
     83 echo "Filtering original ldif used to create database..."
     84 $LDIFFILTER < data/test001-add.ldif > $LDIFFLT
     85 echo "Comparing filter output..."
     86 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
     87 
     88 if test $? != 0 ; then
     89 	echo "comparison failed - database population didn't succeed"
     90 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     91 	exit 1
     92 fi
     93 
     94 #
     95 # Do some modifications
     96 #
     97 
     98 echo "Modifying database \"$BASEDN\" with TRUE..."
     99 $LDAPMODIFY -v -D "cn=Manager,$BASEDN" -H $URI1 -w $PASSWD \
    100 	-M >> $TESTOUT 2>&1 << EOMODS
    101 dn: cn=user01,ou=people,$BASEDN
    102 changetype: modify
    103 replace: IsBusy
    104 IsBusy: TRUE
    105 EOMODS
    106 
    107 RC=$?
    108 if test $RC != 0 ; then
    109 	echo "Modify failed ($RC)!"
    110 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    111 	exit $RC
    112 fi
    113 
    114 echo "Modifying database \"$BASEDN\" with false..."
    115 $LDAPMODIFY -v -D "cn=Manager,$BASEDN" -H $URI1 -w $PASSWD \
    116 	-M >> $TESTOUT 2>&1 << EOMODS
    117 dn: cn=user06,ou=people,$BASEDN
    118 changetype: modify
    119 replace: IsBusy
    120 IsBusy: false
    121 EOMODS
    122 
    123 RC=$?
    124 if test $RC != 0 ; then
    125 	echo "Modify failed ($RC)!"
    126 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    127 	exit $RC
    128 fi
    129 
    130 echo "Modifying database \"$BASEDN\"with TRUA..."
    131 $LDAPMODIFY -v -D "cn=Manager,$BASEDN" -H $URI1 -w $PASSWD \
    132 	-M >> $TESTOUT 2>&1 << EOMODS
    133 dn: cn=user02,ou=people,$BASEDN
    134 changetype: modify
    135 replace: IsBusy
    136 IsBusy: TRUA
    137 
    138 EOMODS
    139 
    140 RC=$?
    141 if test $RC != 21 ; then
    142 	echo "Modify with an incorrect value failed ($RC)!"
    143 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    144 	exit $RC
    145 fi
    146 
    147 cat /dev/null > $SEARCHOUT
    148 
    149 echo "	base=\"$BASEDN\"..."
    150 echo "# 	base=\"$BASEDN\"..." >> $SEARCHOUT
    151 $LDAPSEARCH -S "" -H $URI1 -b "$BASEDN" -M "(IsBusy=false)" '*' ref \
    152 			>> $SEARCHOUT 2>&1
    153 
    154 RC=$?
    155 if test $RC != 0 ; then
    156 	echo "Search failed ($RC)!"
    157 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    158 	exit $RC
    159 fi
    160 
    161 
    162 echo "Filtering ldapsearch results..."
    163 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
    164 echo "Filtering partial ldif used to create database..."
    165 $LDIFFILTER < data/test001-search_1.ldif > $LDIFFLT
    166 echo "Comparing filter output..."
    167 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
    168 
    169 if test $? != 0 ; then
    170 	echo "comparison failed - search for (IsBusy=false) didn't succeed"
    171 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    172 	exit 1
    173 fi
    174 
    175 cat /dev/null > $SEARCHOUT
    176 
    177 echo "	base=\"$BASEDN\"..."
    178 echo "# 	base=\"$BASEDN\"..." >> $SEARCHOUT
    179 $LDAPSEARCH -S "" -H $URI1 -b "$BASEDN" -M "(IsBusy=TRUE)" '*' ref \
    180 	>> $SEARCHOUT 2>&1
    181 RC=$?
    182 if test $RC != 0 ; then
    183 	echo "Search failed ($RC)!"
    184 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    185 	exit $RC
    186 fi
    187 
    188 
    189 echo "Filtering ldapsearch results..."
    190 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
    191 echo "Filtering partial ldif used to create database..."
    192 $LDIFFILTER < data/test001-search_2.ldif > $LDIFFLT
    193 echo "Comparing filter output..."
    194 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
    195 
    196 if test $? != 0 ; then
    197 	echo "comparison failed - search for (IsBusy=TRUE) didn't succeed"
    198 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    199 	exit 1
    200 fi
    201 
    202 echo "Modifying cn=config, setting olcReadOnly to True"
    203 $LDAPMODIFY -v -D "cn=manager,cn=config" -H $URI1 -w $PASSWD \
    204 	-M >> $TESTOUT 2>&1 << EOMODS
    205 dn: olcDatabase={1}mdb,cn=config
    206 changetype: modify
    207 replace: olcReadOnly
    208 olcReadOnly: True
    209 EOMODS
    210 
    211 RC=$?
    212 if test $RC != 0 ; then
    213 	echo "Modify failed ($RC)!"
    214 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    215 	exit $RC
    216 fi
    217 
    218 echo "Modifying database \"$BASEDN\" to verify olcReadOnly value"
    219 $LDAPMODIFY -v -D "cn=Manager,$BASEDN" -H $URI1 -w $PASSWD \
    220 	-M >> $TESTOUT 2>&1 << EOMODS
    221 dn: cn=user06,ou=people,$BASEDN
    222 changetype: modify
    223 replace: IsBusy
    224 IsBusy: false
    225 EOMODS
    226 
    227 RC=$?
    228 if test $RC != 53 ; then
    229 	echo "Modify failed ($RC)!"
    230 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    231 	exit $RC
    232 fi
    233 
    234 test $KILLSERVERS != no && kill -HUP $KILLPIDS
    235 
    236 echo ">>>>> Test succeeded"
    237 
    238 test $KILLSERVERS != no && wait
    239 
    240 exit 0
    241