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