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