1#! /bin/sh 2# OpenLDAP: pkg/ldap/tests/scripts/test052-memberof,v 1.4.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## All rights reserved. 7## 8## Redistribution and use in source and binary forms, with or without 9## modification, are permitted only as authorized by the OpenLDAP 10## Public License. 11## 12## A copy of this license is available in the file LICENSE in the 13## top-level directory of the distribution or, alternatively, at 14## <http://www.OpenLDAP.org/license.html>. 15 16echo "running defines.sh" 17. $SRCDIR/scripts/defines.sh 18 19if test $MEMBEROF = memberofno; then 20 echo "Memberof overlay not available, test skipped" 21 exit 0 22fi 23 24mkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir 25 26$SLAPPASSWD -g -n >$CONFIGPWF 27echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf 28 29echo "Starting slapd on TCP/IP port $PORT1..." 30. $CONFFILTER $BACKEND $MONITORDB < $NAKEDCONF > $CONF1 31$SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & 32PID=$! 33if test $WAIT != 0 ; then 34 echo PID $PID 35 read foo 36fi 37KILLPIDS="$PID" 38 39sleep 1 40for i in 0 1 2 3 4 5; do 41 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \ 42 'objectclass=*' > /dev/null 2>&1 43 RC=$? 44 if test $RC = 0 ; then 45 break 46 fi 47 echo "Waiting 5 seconds for slapd to start..." 48 sleep 5 49done 50if test $RC != 0 ; then 51 echo "ldapsearch failed ($RC)!" 52 test $KILLSERVERS != no && kill -HUP $KILLPIDS 53 exit $RC 54fi 55 56cat /dev/null > $TESTOUT 57 58if [ "$MEMBEROF" = memberofmod ]; then 59 echo "Inserting memberof overlay on producer..." 60 $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1 61dn: cn=module,cn=config 62objectClass: olcModuleList 63cn: module 64olcModulePath: ../servers/slapd/overlays 65olcModuleLoad: memberof.la 66EOF 67 RC=$? 68 if test $RC != 0 ; then 69 echo "ldapadd failed for moduleLoad ($RC)!" 70 test $KILLSERVERS != no && kill -HUP $KILLPIDS 71 exit $RC 72 fi 73fi 74 75bdbInclude="# " nullExclude="" 76case $BACKEND in 77bdb | hdb) bdbInclude="" ;; 78null) nullExclude="# " ;; 79esac 80 81echo "Running ldapadd to build slapd config database..." 82$LDAPADD -h $LOCALHOST -p $PORT1 -D 'cn=config' -w `cat $CONFIGPWF` \ 83 >> $TESTOUT 2>&1 <<EOF 84dn: cn=symas group example,cn=schema,cn=config 85objectClass: olcSchemaConfig 86cn: symas group example 87olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.1 88 NAME 'memberA' SUP distinguishedName ) 89olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.2 90 NAME 'memberOfA' SUP distinguishedName ) 91olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.3 92 NAME 'memberB' SUP distinguishedName ) 93olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.4 94 NAME 'memberOfB' SUP distinguishedName ) 95olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.1 96 NAME 'groupA' SUP top STRUCTURAL MUST cn MAY memberA ) 97olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.2 98 NAME 'groupMemberA' SUP top AUXILIARY MAY memberOfA ) 99olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.3 100 NAME 'groupB' SUP top STRUCTURAL MUST cn MAY memberB ) 101olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.4 102 NAME 'groupMemberB' SUP top AUXILIARY MAY memberOfB ) 103 104dn: olcDatabase={1}$BACKEND,cn=config 105objectClass: olcDatabaseConfig 106${nullExclude}objectClass: olc${BACKEND}Config 107olcDatabase: {1}$BACKEND 108olcSuffix: $BASEDN 109olcRootDN: cn=Manager,$BASEDN 110olcRootPW:: c2VjcmV0 111olcMonitoring: TRUE 112${nullExclude}olcDbDirectory: $TESTDIR/db.1.a/ 113${bdbInclude}olcDbCacheSize: 1000 114${bdbInclude}olcDbIndex: objectClass eq 115${bdbInclude}olcDbIndex: cn pres,eq,sub 116${bdbInclude}olcDbIndex: uid pres,eq,sub 117${bdbInclude}olcDbIndex: sn pres,eq,sub 118${bdbInclude}olcDbMode: 384" 119 120dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config 121objectClass: olcOverlayConfig 122objectClass: olcMemberOf 123olcOverlay: {0}memberof 124olcMemberOfRefInt: TRUE 125olcMemberOfGroupOC: groupOfNames 126olcMemberOfMemberAD: member 127olcMemberOfMemberOfAD: memberOf 128 129dn: olcOverlay={1}memberof,olcDatabase={1}$BACKEND,cn=config 130objectClass: olcOverlayConfig 131objectClass: olcMemberOf 132olcOverlay: {1}memberof 133olcMemberOfRefInt: TRUE 134olcMemberOfGroupOC: groupA 135olcMemberOfMemberAD: memberA 136olcMemberOfMemberOfAD: memberOfA 137 138dn: olcOverlay={2}memberof,olcDatabase={1}$BACKEND,cn=config 139objectClass: olcOverlayConfig 140objectClass: olcMemberOf 141olcOverlay: {2}memberof 142olcMemberOfRefInt: TRUE 143olcMemberOfGroupOC: groupB 144olcMemberOfMemberAD: memberB 145olcMemberOfMemberOfAD: memberOfB 146 147EOF 148RC=$? 149if test $RC != 0 ; then 150 echo "ldapadd failed ($RC)!" 151 test $KILLSERVERS != no && kill -HUP $KILLPIDS 152 exit $RC 153fi 154 155echo "Running ldapadd to build slapd database..." 156$LDAPADD -h $LOCALHOST -p $PORT1 \ 157 -D "cn=Manager,$BASEDN" -w secret \ 158 >> $TESTOUT 2>&1 << EOF 159dn: $BASEDN 160objectClass: organization 161objectClass: dcObject 162o: Example, Inc. 163dc: example 164 165dn: ou=People,$BASEDN 166objectClass: organizationalUnit 167ou: People 168 169dn: ou=Groups,$BASEDN 170objectClass: organizationalUnit 171ou: Groups 172 173dn: cn=Roger Rabbit,ou=People,$BASEDN 174objectClass: inetOrgPerson 175cn: Roger Rabbit 176sn: Rabbit 177 178dn: cn=Baby Herman,ou=People,$BASEDN 179objectClass: inetOrgPerson 180cn: Baby Herman 181sn: Herman 182 183dn: cn=Cartoonia,ou=Groups,$BASEDN 184objectClass: groupOfNames 185cn: Cartoonia 186member: cn=Roger Rabbit,ou=People,$BASEDN 187member: cn=Baby Herman,ou=People,$BASEDN 188EOF 189RC=$? 190if test $RC != 0 ; then 191 echo "ldapadd failed ($RC)!" 192 test $KILLSERVERS != no && kill -HUP $KILLPIDS 193 exit $RC 194fi 195 196echo "Search the entire database..." 197echo "# Search the entire database..." >> $SEARCHOUT 198$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ 199 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1 200RC=$? 201if test $RC != 0 ; then 202 echo "ldapsearch failed ($RC)!" 203 test $KILLSERVERS != no && kill -HUP $KILLPIDS 204 exit $RC 205fi 206 207echo "Running ldapmodify to add a member..." 208$LDAPMODIFY -h $LOCALHOST -p $PORT1 \ 209 -D "cn=Manager,$BASEDN" -w secret \ 210 >> $TESTOUT 2>&1 << EOF 211dn: cn=Jessica Rabbit,ou=People,$BASEDN 212changetype: add 213objectClass: inetOrgPerson 214cn: Jessica Rabbit 215sn: Rabbit 216 217dn: cn=Cartoonia,ou=Groups,$BASEDN 218changetype: modify 219add: member 220member: cn=Jessica Rabbit,ou=People,$BASEDN 221EOF 222 223echo "Re-search the entire database..." 224echo "# Re-search the entire database..." >> $SEARCHOUT 225$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ 226 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1 227RC=$? 228if test $RC != 0 ; then 229 echo "ldapsearch failed ($RC)!" 230 test $KILLSERVERS != no && kill -HUP $KILLPIDS 231 exit $RC 232fi 233 234echo "Running ldapmodify to add self..." 235$LDAPMODIFY -h $LOCALHOST -p $PORT1 \ 236 -D "cn=Manager,$BASEDN" -w secret \ 237 >> $TESTOUT 2>&1 << EOF 238dn: cn=Cartoonia,ou=Groups,$BASEDN 239changetype: modify 240add: member 241member: cn=Cartoonia,ou=Groups,$BASEDN 242EOF 243 244echo "Re-search the entire database..." 245echo "# Re-search the entire database..." >> $SEARCHOUT 246$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ 247 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1 248RC=$? 249if test $RC != 0 ; then 250 echo "ldapsearch failed ($RC)!" 251 test $KILLSERVERS != no && kill -HUP $KILLPIDS 252 exit $RC 253fi 254 255echo "Running ldapdelete to remove a member..." 256$LDAPMODIFY -h $LOCALHOST -p $PORT1 \ 257 -D "cn=Manager,$BASEDN" -w secret \ 258 >> $TESTOUT 2>&1 << EOF 259dn: cn=Baby Herman,ou=People,$BASEDN 260changetype: delete 261EOF 262 263echo "Re-search the entire database..." 264echo "# Re-search the entire database..." >> $SEARCHOUT 265$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ 266 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1 267RC=$? 268if test $RC != 0 ; then 269 echo "ldapsearch failed ($RC)!" 270 test $KILLSERVERS != no && kill -HUP $KILLPIDS 271 exit $RC 272fi 273 274echo "Adding groups with MAY member type schemas..." 275$LDAPMODIFY -h $LOCALHOST -p $PORT1 \ 276 -D "cn=Manager,$BASEDN" -w secret \ 277 >> $TESTOUT 2>&1 <<EOF 278dn: cn=Roger Rabbit,ou=People,$BASEDN 279changetype: delete 280 281dn: cn=Jessica Rabbit,ou=People,$BASEDN 282changetype: delete 283 284dn: cn=Cartoonia,ou=Groups,$BASEDN 285changetype: delete 286 287dn: cn=person1,ou=People,$BASEDN 288changetype: add 289objectClass: person 290objectClass: groupMemberA 291objectClass: groupMemberB 292cn: person1 293sn: person1 294 295dn: cn=person2,ou=People,$BASEDN 296changetype: add 297objectClass: person 298objectClass: groupMemberA 299objectClass: groupMemberB 300cn: person2 301sn: person2 302 303dn: cn=group1,ou=Groups,$BASEDN 304changetype: add 305objectclass: groupA 306cn: group1 307memberA: cn=person1,ou=People,$BASEDN 308memberA: cn=person2,ou=People,$BASEDN 309 310dn: cn=group2,ou=Groups,$BASEDN 311changetype: add 312objectclass: groupB 313cn: group2 314memberB: cn=person1,ou=People,$BASEDN 315memberB: cn=person2,ou=People,$BASEDN 316 317dn: cn=group1,ou=Groups,$BASEDN 318changetype: modify 319delete: memberA 320 321EOF 322 323echo "Re-search the entire database..." 324echo "# Re-search the entire database..." >> $SEARCHOUT 325$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ 326 '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1 327RC=$? 328if test $RC != 0 ; then 329 echo "ldapsearch failed ($RC)!" 330 test $KILLSERVERS != no && kill -HUP $KILLPIDS 331 exit $RC 332fi 333 334test $KILLSERVERS != no && kill -HUP $KILLPIDS 335 336LDIF=$MEMBEROFOUT 337 338echo "Filtering ldapsearch results..." 339$LDIFFILTER < $SEARCHOUT > $SEARCHFLT 340echo "Filtering original ldif used to create database..." 341$LDIFFILTER < $LDIF > $LDIFFLT 342echo "Comparing filter output..." 343$CMP $SEARCHFLT $LDIFFLT > $CMPOUT 344 345if test $? != 0 ; then 346 echo "Comparison failed" 347 exit 1 348fi 349 350echo ">>>>> Test succeeded" 351 352test $KILLSERVERS != no && wait 353 354exit 0 355