mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-06-08 16:22:09 -04:00
ITS#5395 add test from abartlet@samba.org
This commit is contained in:
parent
168fa346cc
commit
09fe2887d1
3 changed files with 387 additions and 0 deletions
125
tests/data/memberof-refint.out
Normal file
125
tests/data/memberof-refint.out
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
# Search the entire database...
|
||||
dn: cn=Baby Herman,ou=People,dc=example,dc=com
|
||||
objectClass: inetOrgPerson
|
||||
cn: Baby Herman
|
||||
sn: Herman
|
||||
memberOf: cn=Cartoonia,ou=Groups,dc=example,dc=com
|
||||
|
||||
dn: cn=Cartoonia,ou=Groups,dc=example,dc=com
|
||||
objectClass: groupOfNames
|
||||
cn: Cartoonia
|
||||
member: cn=Roger Rabbit,ou=People,dc=example,dc=com
|
||||
member: cn=Baby Herman,ou=People,dc=example,dc=com
|
||||
|
||||
dn: dc=example,dc=com
|
||||
objectClass: organization
|
||||
objectClass: dcObject
|
||||
o: Example, Inc.
|
||||
dc: example
|
||||
|
||||
dn: ou=Groups,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Groups
|
||||
|
||||
dn: ou=People,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: People
|
||||
|
||||
dn: cn=Roger Rabbit,ou=People,dc=example,dc=com
|
||||
objectClass: inetOrgPerson
|
||||
cn: Roger Rabbit
|
||||
sn: Rabbit
|
||||
memberOf: cn=Cartoonia,ou=Groups,dc=example,dc=com
|
||||
|
||||
# Re-search the entire database...
|
||||
dn: cn=Baby Herman,ou=Toons,dc=example,dc=com
|
||||
objectClass: inetOrgPerson
|
||||
cn: Baby Herman
|
||||
sn: Herman
|
||||
memberOf: cn=Cartoonia,ou=Groups,dc=example,dc=com
|
||||
|
||||
dn: cn=Cartoonia,ou=Groups,dc=example,dc=com
|
||||
objectClass: groupOfNames
|
||||
cn: Cartoonia
|
||||
member: cn=Roger Rabbit,ou=Toons,dc=example,dc=com
|
||||
member: cn=Baby Herman,ou=Toons,dc=example,dc=com
|
||||
|
||||
dn: dc=example,dc=com
|
||||
objectClass: organization
|
||||
objectClass: dcObject
|
||||
o: Example, Inc.
|
||||
dc: example
|
||||
|
||||
dn: ou=Groups,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Groups
|
||||
|
||||
dn: cn=Roger Rabbit,ou=Toons,dc=example,dc=com
|
||||
objectClass: inetOrgPerson
|
||||
cn: Roger Rabbit
|
||||
sn: Rabbit
|
||||
memberOf: cn=Cartoonia,ou=Groups,dc=example,dc=com
|
||||
|
||||
dn: ou=Toons,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Toons
|
||||
|
||||
# Re-search the entire database...
|
||||
dn: cn=Baby Herman,ou=Toons,dc=example,dc=com
|
||||
objectClass: inetOrgPerson
|
||||
cn: Baby Herman
|
||||
sn: Herman
|
||||
memberOf: cn=Cartoonia,ou=Studios,dc=example,dc=com
|
||||
|
||||
dn: cn=Cartoonia,ou=Studios,dc=example,dc=com
|
||||
objectClass: groupOfNames
|
||||
cn: Cartoonia
|
||||
member: cn=Roger Rabbit,ou=Toons,dc=example,dc=com
|
||||
member: cn=Baby Herman,ou=Toons,dc=example,dc=com
|
||||
|
||||
dn: dc=example,dc=com
|
||||
objectClass: organization
|
||||
objectClass: dcObject
|
||||
o: Example, Inc.
|
||||
dc: example
|
||||
|
||||
dn: cn=Roger Rabbit,ou=Toons,dc=example,dc=com
|
||||
objectClass: inetOrgPerson
|
||||
cn: Roger Rabbit
|
||||
sn: Rabbit
|
||||
memberOf: cn=Cartoonia,ou=Studios,dc=example,dc=com
|
||||
|
||||
dn: ou=Studios,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Studios
|
||||
|
||||
dn: ou=Toons,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Toons
|
||||
|
||||
# Re-search the entire database...
|
||||
dn: cn=Cartoonia,ou=Studios,dc=example,dc=com
|
||||
objectClass: groupOfNames
|
||||
cn: Cartoonia
|
||||
member: cn=Roger Rabbit,ou=Toons,dc=example,dc=com
|
||||
|
||||
dn: dc=example,dc=com
|
||||
objectClass: organization
|
||||
objectClass: dcObject
|
||||
o: Example, Inc.
|
||||
dc: example
|
||||
|
||||
dn: cn=Roger Rabbit,ou=Toons,dc=example,dc=com
|
||||
objectClass: inetOrgPerson
|
||||
cn: Roger Rabbit
|
||||
sn: Rabbit
|
||||
memberOf: cn=Cartoonia,ou=Studios,dc=example,dc=com
|
||||
|
||||
dn: ou=Studios,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Studios
|
||||
|
||||
dn: ou=Toons,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Toons
|
||||
|
||||
|
|
@ -350,5 +350,6 @@ ACIOUT=$DATADIR/aci.out
|
|||
DYNLISTOUT=$DATADIR/dynlist.out
|
||||
DDSOUT=$DATADIR/dds.out
|
||||
MEMBEROFOUT=$DATADIR/memberof.out
|
||||
MEMBEROFREFINTOUT=$DATADIR/memberof-refint.out
|
||||
SHTOOL="$SRCDIR/../build/shtool"
|
||||
|
||||
|
|
|
|||
261
tests/scripts/test057-memberof-refint
Executable file
261
tests/scripts/test057-memberof-refint
Executable file
|
|
@ -0,0 +1,261 @@
|
|||
#! /bin/sh
|
||||
# $OpenLDAP$
|
||||
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
##
|
||||
## Copyright 1998-2008 The OpenLDAP Foundation.
|
||||
## Copyright 2008 Red Hat, Inc.
|
||||
## All rights reserved.
|
||||
##
|
||||
## Redistribution and use in source and binary forms, with or without
|
||||
## modification, are permitted only as authorized by the OpenLDAP
|
||||
## Public License.
|
||||
##
|
||||
## A copy of this license is available in the file LICENSE in the
|
||||
## top-level directory of the distribution or, alternatively, at
|
||||
## <http://www.OpenLDAP.org/license.html>.
|
||||
|
||||
echo "running defines.sh"
|
||||
. $SRCDIR/scripts/defines.sh
|
||||
|
||||
if test $MEMBEROF = memberofno; then
|
||||
echo "Memberof overlay not available, test skipped"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if test "$BACKEND" != "hdb" ; then
|
||||
echo "Test does not support $BACKEND"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
mkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir
|
||||
|
||||
$SLAPPASSWD -g -n >$CONFIGPWF
|
||||
echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
|
||||
|
||||
echo "Starting slapd on TCP/IP port $PORT1..."
|
||||
. $CONFFILTER $BACKEND $MONITORDB < $NAKEDCONF > $CONF1
|
||||
$SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
|
||||
PID=$!
|
||||
if test $WAIT != 0 ; then
|
||||
echo PID $PID
|
||||
read foo
|
||||
fi
|
||||
KILLPIDS="$PID"
|
||||
|
||||
sleep 1
|
||||
for i in 0 1 2 3 4 5; do
|
||||
$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
|
||||
'objectclass=*' > /dev/null 2>&1
|
||||
RC=$?
|
||||
if test $RC = 0 ; then
|
||||
break
|
||||
fi
|
||||
echo "Waiting 5 seconds for slapd to start..."
|
||||
sleep 5
|
||||
done
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
cat /dev/null > $TESTOUT
|
||||
|
||||
if [ "$MEMBEROF" = memberofmod ]; then
|
||||
echo "Inserting memberof overlay on producer..."
|
||||
$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
|
||||
dn: cn=module,cn=config
|
||||
objectClass: olcModuleList
|
||||
cn: module
|
||||
olcModulePath: ../servers/slapd/overlays
|
||||
olcModuleLoad: memberof.la
|
||||
olcModuleLoad: refint.la
|
||||
EOF
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapadd failed for moduleLoad ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Running ldapadd to build slapd config database..."
|
||||
$LDAPADD -h $LOCALHOST -p $PORT1 -D 'cn=config' -w `cat $CONFIGPWF` \
|
||||
>> $TESTOUT 2>&1 <<EOF
|
||||
dn: olcDatabase={1}$BACKEND,cn=config
|
||||
objectClass: olcDatabaseConfig
|
||||
objectClass: olc${BACKEND}Config
|
||||
olcDatabase: {1}$BACKEND
|
||||
olcSuffix: $BASEDN
|
||||
olcRootDN: cn=Manager,$BASEDN
|
||||
olcRootPW:: c2VjcmV0
|
||||
olcMonitoring: TRUE
|
||||
olcDbDirectory: $TESTDIR/db.1.a/
|
||||
olcDbCacheSize: 1000
|
||||
olcDbIndex: objectClass eq
|
||||
olcDbIndex: cn pres,eq,sub
|
||||
olcDbIndex: uid pres,eq,sub
|
||||
olcDbIndex: sn pres,eq,sub
|
||||
olcDbMode: 384
|
||||
|
||||
# {0}memberof, {1}$BACKEND, config
|
||||
dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config
|
||||
objectClass: olcOverlayConfig
|
||||
objectClass: olcMemberOf
|
||||
olcOverlay: {0}memberof
|
||||
olcMemberOfRefInt: TRUE
|
||||
olcMemberOfGroupOC: groupOfNames
|
||||
olcMemberOfMemberAD: member
|
||||
olcMemberOfMemberOfAD: memberOf
|
||||
|
||||
# {1}refint, {1}$BACKEND, config
|
||||
dn: olcOverlay={1}refint,olcDatabase={1}$BACKEND,cn=config
|
||||
objectClass: olcOverlayConfig
|
||||
objectClass: olcRefintConfig
|
||||
olcOverlay: {1}refint
|
||||
olcRefintAttribute: member
|
||||
olcRefintAttribute: memberOf
|
||||
EOF
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapadd failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Running ldapadd to build slapd database..."
|
||||
$LDAPADD -h $LOCALHOST -p $PORT1 \
|
||||
-D "cn=Manager,$BASEDN" -w secret \
|
||||
>> $TESTOUT 2>&1 << EOF
|
||||
dn: $BASEDN
|
||||
objectClass: organization
|
||||
objectClass: dcObject
|
||||
o: Example, Inc.
|
||||
dc: example
|
||||
|
||||
dn: ou=People,$BASEDN
|
||||
objectClass: organizationalUnit
|
||||
ou: People
|
||||
|
||||
dn: ou=Groups,$BASEDN
|
||||
objectClass: organizationalUnit
|
||||
ou: Groups
|
||||
|
||||
dn: cn=Roger Rabbit,ou=People,$BASEDN
|
||||
objectClass: inetOrgPerson
|
||||
cn: Roger Rabbit
|
||||
sn: Rabbit
|
||||
|
||||
dn: cn=Baby Herman,ou=People,$BASEDN
|
||||
objectClass: inetOrgPerson
|
||||
cn: Baby Herman
|
||||
sn: Herman
|
||||
|
||||
dn: cn=Cartoonia,ou=Groups,$BASEDN
|
||||
objectClass: groupOfNames
|
||||
cn: Cartoonia
|
||||
member: cn=Roger Rabbit,ou=People,$BASEDN
|
||||
member: cn=Baby Herman,ou=People,$BASEDN
|
||||
EOF
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapadd failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Search the entire database..."
|
||||
echo "# Search the entire database..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
|
||||
'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Running ldapmodify to rename subtree..."
|
||||
$LDAPMODIFY -h $LOCALHOST -p $PORT1 \
|
||||
-D "cn=Manager,$BASEDN" -w secret \
|
||||
>> $TESTOUT 2>&1 << EOF
|
||||
dn: ou=People,$BASEDN
|
||||
changetype: modrdn
|
||||
newrdn: ou=Toons
|
||||
deleteoldrdn:1
|
||||
newsuperior: $BASEDN
|
||||
EOF
|
||||
|
||||
echo "Re-search the entire database..."
|
||||
echo "# Re-search the entire database..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
|
||||
'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Running ldapmodify to rename subtree..."
|
||||
$LDAPMODIFY -h $LOCALHOST -p $PORT1 \
|
||||
-D "cn=Manager,$BASEDN" -w secret \
|
||||
>> $TESTOUT 2>&1 << EOF
|
||||
dn: ou=Groups,$BASEDN
|
||||
changetype: modrdn
|
||||
newrdn: ou=Studios
|
||||
deleteoldrdn:1
|
||||
newsuperior: $BASEDN
|
||||
EOF
|
||||
|
||||
echo "Re-search the entire database..."
|
||||
echo "# Re-search the entire database..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
|
||||
'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Running ldapdelete to remove a member..."
|
||||
$LDAPMODIFY -h $LOCALHOST -p $PORT1 \
|
||||
-D "cn=Manager,$BASEDN" -w secret \
|
||||
>> $TESTOUT 2>&1 << EOF
|
||||
dn: cn=Baby Herman,ou=Toons,$BASEDN
|
||||
changetype: delete
|
||||
EOF
|
||||
|
||||
echo "Re-search the entire database..."
|
||||
echo "# Re-search the entire database..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
|
||||
'(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
|
||||
LDIF=$MEMBEROFREFINTOUT
|
||||
|
||||
echo "Filtering ldapsearch results..."
|
||||
. $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
|
||||
echo "Filtering original ldif used to create database..."
|
||||
. $LDIFFILTER < $LDIF > $LDIFFLT
|
||||
echo "Comparing filter output..."
|
||||
$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
|
||||
|
||||
if test $? != 0 ; then
|
||||
echo "Comparison failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ">>>>> Test succeeded"
|
||||
|
||||
test $KILLSERVERS != no && wait
|
||||
|
||||
exit 0
|
||||
Loading…
Reference in a new issue