From a38a5836d6441fbfa7f7adf79db7ebab50881d1a Mon Sep 17 00:00:00 2001 From: Quanah Gibson-Mount Date: Wed, 17 Oct 2007 01:43:09 +0000 Subject: [PATCH] Memberof pieces --- configure.in | 2 + tests/data/memberof.out | 150 +++++++++++++++++ tests/data/slapd-config-naked.conf | 14 ++ tests/run.in | 7 +- tests/scripts/defines.sh | 19 ++- tests/scripts/test052-memberof | 250 +++++++++++++++++++++++++++++ 6 files changed, 431 insertions(+), 11 deletions(-) create mode 100644 tests/data/memberof.out create mode 100644 tests/data/slapd-config-naked.conf create mode 100755 tests/scripts/test052-memberof diff --git a/configure.in b/configure.in index cad9a70bbb..795e02e8a3 100644 --- a/configure.in +++ b/configure.in @@ -529,6 +529,7 @@ BUILD_DENYOP=no BUILD_DYNGROUP=no BUILD_DYNLIST=no BUILD_LASTMOD=no +BUILD_MEMBEROF=no BUILD_PPOLICY=no BUILD_PROXYCACHE=no BUILD_REFINT=no @@ -2912,6 +2913,7 @@ dnl overlays AC_SUBST(BUILD_DYNGROUP) AC_SUBST(BUILD_DYNLIST) AC_SUBST(BUILD_LASTMOD) + AC_SUBST(BUILD_MEMBEROF) AC_SUBST(BUILD_PPOLICY) AC_SUBST(BUILD_PROXYCACHE) AC_SUBST(BUILD_REFINT) diff --git a/tests/data/memberof.out b/tests/data/memberof.out new file mode 100644 index 0000000000..ff6e7e3a63 --- /dev/null +++ b/tests/data/memberof.out @@ -0,0 +1,150 @@ +# 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=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 +member: cn=Jessica Rabbit,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: cn=Jessica Rabbit,ou=People,dc=example,dc=com +objectClass: inetOrgPerson +cn: Jessica Rabbit +sn: Rabbit +memberOf: cn=Cartoonia,ou=Groups,dc=example,dc=com + +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=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 +member: cn=Jessica Rabbit,ou=People,dc=example,dc=com +member: cn=Cartoonia,ou=Groups,dc=example,dc=com +memberOf: cn=Cartoonia,ou=Groups,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=Jessica Rabbit,ou=People,dc=example,dc=com +objectClass: inetOrgPerson +cn: Jessica Rabbit +sn: Rabbit +memberOf: cn=Cartoonia,ou=Groups,dc=example,dc=com + +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=Cartoonia,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Cartoonia +member: cn=Roger Rabbit,ou=People,dc=example,dc=com +member: cn=Jessica Rabbit,ou=People,dc=example,dc=com +member: cn=Cartoonia,ou=Groups,dc=example,dc=com +memberOf: cn=Cartoonia,ou=Groups,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=Jessica Rabbit,ou=People,dc=example,dc=com +objectClass: inetOrgPerson +cn: Jessica Rabbit +sn: Rabbit +memberOf: cn=Cartoonia,ou=Groups,dc=example,dc=com + +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 + diff --git a/tests/data/slapd-config-naked.conf b/tests/data/slapd-config-naked.conf new file mode 100644 index 0000000000..ad7b2e7e89 --- /dev/null +++ b/tests/data/slapd-config-naked.conf @@ -0,0 +1,14 @@ +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +#monitor#database monitor + +database config +include @TESTDIR@/configpw.conf diff --git a/tests/run.in b/tests/run.in index 24133fbcb5..d00d212f24 100644 --- a/tests/run.in +++ b/tests/run.in @@ -36,6 +36,7 @@ AC_sql=sql@BUILD_SQL@ AC_accesslog=accesslog@BUILD_ACCESSLOG@ AC_dds=dds@BUILD_DDS@ AC_dynlist=dynlist@BUILD_DYNLIST@ +AC_memberof=memberof@BUILD_MEMBEROF@ AC_pcache=pcache@BUILD_PROXYCACHE@ AC_ppolicy=ppolicy@BUILD_PPOLICY@ AC_refint=refint@BUILD_REFINT@ @@ -63,9 +64,9 @@ if test "${AC_meta}" = "metamod" && test "${AC_LIBS_DYNAMIC}" = "static" ; then fi export AC_bdb AC_hdb AC_ldap AC_meta AC_monitor AC_relay AC_sql \ - AC_accesslog AC_dynlist AC_pcache AC_ppolicy AC_refint AC_retcode \ - AC_rwm AC_unique AC_syncprov AC_translucent AC_valsort \ - AC_dds \ + AC_accesslog AC_dds AC_dynlist AC_memberof AC_pcache AC_ppolicy \ + AC_refint AC_retcode AC_rwm AC_unique AC_syncprov AC_translucent \ + AC_valsort \ AC_WITH_SASL AC_WITH_TLS AC_WITH_MODULES_ENABLED AC_ACI_ENABLED \ AC_THREADS AC_LIBS_DYNAMIC diff --git a/tests/scripts/defines.sh b/tests/scripts/defines.sh index a3168c00ed..ce0fd87a48 100755 --- a/tests/scripts/defines.sh +++ b/tests/scripts/defines.sh @@ -30,6 +30,7 @@ BACKSQL=${AC_sql-sqlno} ACCESSLOG=${AC_accesslog-accesslogno} DDS=${AC_dds-ddsno} DYNLIST=${AC_dynlist-dynlistno} +MEMBEROF=${AC_memberof-memberofno} PROXYCACHE=${AC_pcache-pcacheno} PPOLICY=${AC_ppolicy-ppolicyno} REFINT=${AC_refint-refintno} @@ -124,6 +125,7 @@ PLSRMASTERCONF=$DATADIR/slapd-syncrepl-multiproxy.conf DDSCONF=$DATADIR/slapd-dds.conf PASSWDCONF=$DATADIR/slapd-passwd.conf UNDOCONF=$DATADIR/slapd-config-undo.conf +NAKEDCONF=$DATADIR/slapd-config-naked.conf DYNAMICCONF=$DATADIR/slapd-dynamic.ldif @@ -236,14 +238,14 @@ SQLADD=$DATADIR/sql-add.ldif MONITOR="" REFDN="c=US" BASEDN="dc=example,dc=com" -MANAGERDN="cn=Manager,dc=example,dc=com" -UPDATEDN="cn=Replica,dc=example,dc=com" +MANAGERDN="cn=Manager,$BASEDN" +UPDATEDN="cn=Replica,$BASEDN" PASSWD=secret -BABSDN="cn=Barbara Jensen,ou=Information Technology DivisioN,OU=People,dc=example,dc=com" -BJORNSDN="cn=Bjorn Jensen,ou=Information Technology DivisioN,OU=People,dc=example,dc=com" -JAJDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com" -JOHNDDN="cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com" -MELLIOTDN="cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com" +BABSDN="cn=Barbara Jensen,ou=Information Technology DivisioN,OU=People,$BASEDN" +BJORNSDN="cn=Bjorn Jensen,ou=Information Technology DivisioN,OU=People,$BASEDN" +JAJDN="cn=James A Jones 1,ou=Alumni Association,ou=People,$BASEDN" +JOHNDDN="cn=John Doe,ou=Information Technology Division,ou=People,$BASEDN" +MELLIOTDN="cn=Mark Elliot,ou=Alumni Association,ou=People,$BASEDN" REFINTDN="cn=Manager,o=refint" RETCODEDN="ou=RetCodes,$BASEDN" UNIQUEDN="cn=Manager,o=unique" @@ -252,7 +254,7 @@ TRANSLUCENTROOT="o=translucent" TRANSLUCENTUSER="ou=users,o=translucent" TRANSLUCENTDN="uid=binder,o=translucent" TRANSLUCENTPASSWD="bindtest" -METABASEDN="ou=Meta,dc=example,dc=com" +METABASEDN="ou=Meta,$BASEDN" METAMANAGERDN="cn=Manager,$METABASEDN" VALSORTDN="cn=Manager,o=valsort" VALSORTBASEDN="o=valsort" @@ -325,6 +327,7 @@ SUBTREERENAMEOUT=$DATADIR/subtree-rename.out ACIOUT=$DATADIR/aci.out DYNLISTOUT=$DATADIR/dynlist.out DDSOUT=$DATADIR/dds.out +MEMBEROFOUT=$DATADIR/memberof.out SHTOOL="$SRCDIR/../build/shtool" # Just in case we linked the binaries dynamically diff --git a/tests/scripts/test052-memberof b/tests/scripts/test052-memberof new file mode 100755 index 0000000000..d6deba66f1 --- /dev/null +++ b/tests/scripts/test052-memberof @@ -0,0 +1,250 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software . +## +## Copyright 1998-2007 The OpenLDAP Foundation. +## 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 +## . + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $MEMBEROF = memberofno; then + echo "Memberof overlay not available, test skipped" + 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 < $TESTOUT 2>&1 +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModulePath: ../servers/slapd/overlays +olcModuleLoad: memberof.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 <> $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 add a member..." +$LDAPMODIFY -h $LOCALHOST -p $PORT1 \ + -D "cn=Manager,$BASEDN" -w secret \ + >> $TESTOUT 2>&1 << EOF +dn: cn=Jessica Rabbit,ou=People,$BASEDN +changetype: add +objectClass: inetOrgPerson +cn: Jessica Rabbit +sn: Rabbit + +dn: cn=Cartoonia,ou=Groups,$BASEDN +changetype: modify +add: member +member: cn=Jessica Rabbit,ou=People,$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 add self..." +$LDAPMODIFY -h $LOCALHOST -p $PORT1 \ + -D "cn=Manager,$BASEDN" -w secret \ + >> $TESTOUT 2>&1 << EOF +dn: cn=Cartoonia,ou=Groups,$BASEDN +changetype: modify +add: member +member: cn=Cartoonia,ou=Groups,$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=People,$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=$MEMBEROFOUT + +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 -- 2.39.2