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 ## Portions Copyright 2008 Red Hat, Inc. 
      7 ## All rights reserved.
      8 ##
      9 ## Redistribution and use in source and binary forms, with or without
     10 ## modification, are permitted only as authorized by the OpenLDAP
     11 ## Public License.
     12 ##
     13 ## A copy of this license is available in the file LICENSE in the
     14 ## top-level directory of the distribution or, alternatively, at
     15 ## <http://www.OpenLDAP.org/license.html>.
     16 
     17 echo "running defines.sh"
     18 . $SRCDIR/scripts/defines.sh
     19 
     20 if test $MEMBEROF = memberofno; then 
     21 	echo "Memberof overlay not available, test skipped"
     22 	exit 0
     23 fi
     24 
     25 if test $REFINT = refintno; then 
     26 	echo "Referential Integrity overlay not available, test skipped"
     27 	exit 0
     28 fi
     29 
     30 if test $BACKEND = wt ; then
     31 	echo "back-wt does not support subtree rename"
     32 	exit 0
     33 fi
     34 
     35 mkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir
     36 
     37 $SLAPPASSWD -g -n >$CONFIGPWF
     38 echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
     39 
     40 echo "Starting slapd on TCP/IP port $PORT1..."
     41 . $CONFFILTER $BACKEND < $NAKEDCONF > $CONF1
     42 $SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL > $LOG1 2>&1 &
     43 PID=$!
     44 if test $WAIT != 0 ; then
     45     echo PID $PID
     46     read foo
     47 fi
     48 KILLPIDS="$PID"
     49 
     50 sleep 1
     51 for i in 0 1 2 3 4 5; do
     52 	$LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
     53 		'objectclass=*' > /dev/null 2>&1
     54 	RC=$?
     55 	if test $RC = 0 ; then
     56 		break
     57 	fi
     58 	echo "Waiting 5 seconds for slapd to start..."
     59 	sleep 5
     60 done
     61 if test $RC != 0 ; then
     62 	echo "ldapsearch failed ($RC)!"
     63 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     64 	exit $RC
     65 fi
     66 
     67 cat /dev/null > $TESTOUT
     68 
     69 indexInclude="" mainInclude="" nullExclude=""
     70 test $INDEXDB = indexdb	|| indexInclude="# "
     71 test $MAINDB  = maindb	|| mainInclude="# "
     72 case $BACKEND in
     73 null) nullExclude="# " ;;
     74 esac
     75 
     76 if [ "$MEMBEROF" = memberofmod ]; then
     77 	echo "Inserting memberof overlay on provider..."
     78 	$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
     79 dn: cn=module,cn=config
     80 objectClass: olcModuleList
     81 cn: module
     82 olcModulePath: ../servers/slapd/overlays
     83 olcModuleLoad: memberof.la
     84 olcModuleLoad: refint.la
     85 EOF
     86 	RC=$?
     87 	if test $RC != 0 ; then
     88 		echo "ldapadd failed for moduleLoad ($RC)!"
     89 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
     90 		exit $RC
     91 	fi
     92 fi
     93 
     94 echo "Running ldapadd to build slapd config database..."
     95 $LDAPADD -H $URI1 -D 'cn=config' -w `cat $CONFIGPWF` \
     96 	>> $TESTOUT 2>&1 <<EOF
     97 dn: olcDatabase={1}$BACKEND,cn=config
     98 objectClass: olcDatabaseConfig
     99 ${nullExclude}objectClass: olc${BACKEND}Config
    100 olcDatabase: {1}$BACKEND
    101 olcSuffix: $BASEDN
    102 olcRootDN: cn=Manager,$BASEDN
    103 olcRootPW:: c2VjcmV0
    104 olcMonitoring: TRUE
    105 ${nullExclude}olcDbDirectory: $TESTDIR/db.1.a/
    106 ${indexInclude}olcDbIndex: objectClass eq
    107 ${indexInclude}olcDbIndex: cn pres,eq,sub
    108 ${indexInclude}olcDbIndex: uid pres,eq,sub
    109 ${indexInclude}olcDbIndex: sn pres,eq,sub
    110 ${mainInclude}olcDbMode: 384
    111 
    112 # {0}memberof, {1}$BACKEND, config
    113 dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config
    114 objectClass: olcOverlayConfig
    115 objectClass: olcMemberOfConfig
    116 olcOverlay: {0}memberof
    117 olcMemberOfRefInt: TRUE
    118 olcMemberOfGroupOC: groupOfNames
    119 olcMemberOfMemberAD: member
    120 olcMemberOfMemberOfAD: memberOf
    121 
    122 # {1}refint, {1}$BACKEND, config
    123 dn: olcOverlay={1}refint,olcDatabase={1}$BACKEND,cn=config
    124 objectClass: olcOverlayConfig
    125 objectClass: olcRefintConfig
    126 olcOverlay: {1}refint
    127 olcRefintAttribute: member
    128 olcRefintAttribute: memberOf
    129 EOF
    130 RC=$?
    131 if test $RC != 0 ; then
    132 	echo "ldapadd failed ($RC)!"
    133 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    134 	exit $RC
    135 fi
    136 
    137 echo "Running ldapadd to build slapd database..."
    138 $LDAPADD -H $URI1 \
    139 	-D "cn=Manager,$BASEDN" -w secret \
    140 	>> $TESTOUT 2>&1 << EOF
    141 dn: $BASEDN
    142 objectClass: organization
    143 objectClass: dcObject
    144 o: Example, Inc.
    145 dc: example
    146 
    147 dn: ou=People,$BASEDN
    148 objectClass: organizationalUnit
    149 ou: People
    150 
    151 dn: ou=Groups,$BASEDN
    152 objectClass: organizationalUnit
    153 ou: Groups
    154 
    155 dn: cn=Roger Rabbit,ou=People,$BASEDN
    156 objectClass: inetOrgPerson
    157 cn: Roger Rabbit
    158 sn: Rabbit
    159 
    160 dn: cn=Baby Herman,ou=People,$BASEDN
    161 objectClass: inetOrgPerson
    162 cn: Baby Herman
    163 sn: Herman
    164 
    165 dn: cn=Cartoonia,ou=Groups,$BASEDN
    166 objectClass: groupOfNames
    167 cn: Cartoonia
    168 member: cn=Roger Rabbit,ou=People,$BASEDN
    169 member: cn=Baby Herman,ou=People,$BASEDN
    170 EOF
    171 RC=$?
    172 if test $RC != 0 ; then
    173 	echo "ldapadd failed ($RC)!"
    174 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    175 	exit $RC
    176 fi
    177 
    178 echo "Search the entire database..."
    179 echo "# Search the entire database..." >> $SEARCHOUT
    180 $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
    181 	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
    182 RC=$?
    183 if test $RC != 0 ; then
    184 	echo "ldapsearch failed ($RC)!"
    185 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    186 	exit $RC
    187 fi
    188 
    189 echo "Running ldapmodify to rename subtree..."
    190 $LDAPMODIFY -H $URI1 \
    191 	-D "cn=Manager,$BASEDN" -w secret \
    192 	>> $TESTOUT 2>&1 << EOF
    193 dn: ou=People,$BASEDN
    194 changetype: modrdn
    195 newrdn: ou=Toons
    196 deleteoldrdn:1
    197 newsuperior: $BASEDN
    198 EOF
    199 
    200 # refint runs in a background thread, so it most likely won't complete
    201 # before the modify returns. Give it some time to execute.
    202 sleep $SLEEP0
    203 
    204 echo "Re-search the entire database..."
    205 echo "# Re-search the entire database..." >> $SEARCHOUT
    206 $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
    207 	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
    208 RC=$?
    209 if test $RC != 0 ; then
    210 	echo "ldapsearch failed ($RC)!"
    211 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    212 	exit $RC
    213 fi
    214 
    215 echo "Running ldapmodify to rename subtree..."
    216 $LDAPMODIFY -H $URI1 \
    217 	-D "cn=Manager,$BASEDN" -w secret \
    218 	>> $TESTOUT 2>&1 << EOF
    219 dn: ou=Groups,$BASEDN
    220 changetype: modrdn
    221 newrdn: ou=Studios
    222 deleteoldrdn:1
    223 newsuperior: $BASEDN
    224 EOF
    225 
    226 sleep $SLEEP0
    227 
    228 echo "Re-search the entire database..."
    229 echo "# Re-search the entire database..." >> $SEARCHOUT
    230 $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
    231 	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
    232 RC=$?
    233 if test $RC != 0 ; then
    234 	echo "ldapsearch failed ($RC)!"
    235 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    236 	exit $RC
    237 fi
    238 
    239 echo "Running ldapdelete to remove a member..."
    240 $LDAPMODIFY -H $URI1 \
    241 	-D "cn=Manager,$BASEDN" -w secret \
    242 	>> $TESTOUT 2>&1 << EOF
    243 dn: cn=Baby Herman,ou=Toons,$BASEDN
    244 changetype: delete
    245 EOF
    246 
    247 sleep $SLEEP0
    248 
    249 echo "Re-search the entire database..."
    250 echo "# Re-search the entire database..." >> $SEARCHOUT
    251 $LDAPSEARCH -S "" -b "$BASEDN" -H $URI1 \
    252 	'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
    253 RC=$?
    254 if test $RC != 0 ; then
    255 	echo "ldapsearch failed ($RC)!"
    256 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    257 	exit $RC
    258 fi
    259 
    260 test $KILLSERVERS != no && kill -HUP $KILLPIDS
    261 
    262 LDIF=$MEMBEROFREFINTOUT
    263 
    264 echo "Filtering ldapsearch results..."
    265 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
    266 echo "Filtering original ldif used to create database..."
    267 $LDIFFILTER < $LDIF > $LDIFFLT
    268 echo "Comparing filter output..."
    269 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
    270 
    271 if test $? != 0 ; then
    272 	echo "Comparison failed"
    273 	exit 1
    274 fi
    275 
    276 echo ">>>>> Test succeeded"
    277 
    278 test $KILLSERVERS != no && wait
    279 
    280 exit 0
    281