diff options
Diffstat (limited to 'tests')
332 files changed, 77908 insertions, 0 deletions
diff --git a/tests/Makefile.in b/tests/Makefile.in new file mode 100644 index 0000000..4235487 --- /dev/null +++ b/tests/Makefile.in @@ -0,0 +1,105 @@ +# Makefile.in for tests +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +RUN=./run +SUBDIRS= progs + +BUILD_BDB=@BUILD_BDB@ +BUILD_HDB=@BUILD_HDB@ +BUILD_MDB=@BUILD_MDB@ +BUILD_SQL=@BUILD_SQL@ + +# test primary backends (default) +test tests: + @$(MAKE) bdb + @$(MAKE) hdb + @$(MAKE) mdb + +# test all backends +alltests: tests + @$(MAKE) sql + @$(MAKE) ldif + +bdb test-bdb: bdb-$(BUILD_BDB) +bdb-no: + @echo "run configure with --enable-bdb to run BDB tests" + +bdb-yes bdb-mod: FORCE + @echo "Initiating LDAP tests for BDB..." + @$(RUN) -b bdb all + +hdb test-hdb: hdb-$(BUILD_HDB) +hdb-no: + @echo "run configure with --enable-hdb to run HDB tests" + +hdb-yes hdb-mod: FORCE + @echo "Initiating LDAP tests for HDB..." + @$(RUN) -b hdb all + +mdb test-mdb: mdb-$(BUILD_MDB) +mdb-no: + @echo "run configure with --enable-mdb to run MDB tests" + +mdb-yes mdb-mod: FORCE + @echo "Initiating LDAP tests for MDB..." + @$(RUN) -b mdb all + +sql test-sql: sql-$(BUILD_SQL) +sql-no: + @echo "run configure with --enable-sql to run SQL tests" + +sql-yes sql-mod: FORCE + @echo "Initiating LDAP tests for SQL..." + @$(RUN) -b sql sql-all + +ldif test-ldif: FORCE + @echo "Initiating LDAP tests for LDIF..." + @$(RUN) -b ldif all + +regressions: FORCE + @echo "Testing (available) ITS regressions" + @$(MAKE) bdb-its + @$(MAKE) hdb-its + @$(MAKE) mdb-its + +its: regressions + +bdb-its: bdb-its-$(BUILD_BDB) +bdb-its-no: + @echo "run configure with --enable-bdb to run BDB ITS regressions" + +bdb-its-yes bdb-its-mod: FORCE + @$(RUN) -b bdb its-all + +hdb-its: hdb-its-$(BUILD_HDB) +hdb-its-no: + @echo "run configure with --enable-hdb to run HDB ITS regressions" + +hdb-its-yes hdb-its-mod: FORCE + @$(RUN) -b hdb its-all + +mdb-its: mdb-its-$(BUILD_MDB) +mdb-its-no: + @echo "run configure with --enable-mdb to run MDB ITS regressions" + +mdb-its-yes mdb-its-mod: FORCE + @$(RUN) -b mdb its-all + +clean-local: FORCE + -$(RM) -r testrun configpw configpw.conf *leak *gmon *core + +veryclean-local: FORCE + @-$(RM) run testdata schema ucdata + diff --git a/tests/README b/tests/README new file mode 100644 index 0000000..1a25df8 --- /dev/null +++ b/tests/README @@ -0,0 +1,24 @@ +This directory contains a series of test scripts which are used to +verify basic functionality of the LDAP libraries and slapd. + + To run all of the tests, type "make test". + To run BDB tests, type "make bdb". + To run HDB tests, type "make hdb". + To run MDB tests, type "make mdb". + To run SQL tests, define SLAPD_USE_SQL=<rdbms> and type + "make sql"; define SLAPD_USE_SQLWRITE=yes + to enable write tests as well. + To run regression tests, type "make regressions" + +The test scripts depends on a number of tools commonly available on +Unix (and Unix-like) systems. While attempts have been made to make +these scripts reasonably portable, they may not run properly on your +system. You may have to adjust your path so that compatible versions +of tools used are available to the scripts and/or you may have to +install replacement tools. Platform specific hints may be found at: + http://www.openldap.org/faq/index.cgi?file=9 + +To modify the debug level the tests run slapd with, set the SLAPD_DEBUG +environment variable. + env SLAPD_DEBUG=1 make test + diff --git a/tests/data/aci.out b/tests/data/aci.out new file mode 100644 index 0000000..dd550ef --- /dev/null +++ b/tests/data/aci.out @@ -0,0 +1,68 @@ +# Searching "dc=example,dc=com" (should fail)... +# Searching "dc=example,dc=com" (should succeed with no results)... +# Searching "dc=example,dc=com" as "cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" (should succeed)... +dn: dc=example,dc=com +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +# Searching "ou=Groups,dc=example,dc=com" as "cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com" (should succeed)... +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +# Searching "ou=Groups,dc=example,dc=com" as "cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" (should succeed with no results)... diff --git a/tests/data/acl.out.master b/tests/data/acl.out.master new file mode 100644 index 0000000..8fd99a6 --- /dev/null +++ b/tests/data/acl.out.master @@ -0,0 +1,367 @@ +# Try to read an entry inside the Alumni Association container. +# It should give us noSuchObject if we're not bound... +# ... and should return all attributes if we're bound as anyone +# under Example. +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +# Checking exact/regex attrval clause +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +cn: Mark A Elliot + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +cn: Mark Elliot + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +cn: John Doe + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +cn: Jonathon Doe + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +cn: Bjorn Jensen +cn: Biiff Jensen + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +cn: Barbara Jensen +cn: Babs Jensen + +# Using ldapsearch to retrieve all the entries... +dn: ou=Add & Delete,dc=example,dc=com +objectClass: organizationalUnit +ou: Add & Delete + +dn: cn=Added by Bjorn (must succeed),ou=Add & Delete,dc=example,dc=com +objectClass: inetOrgPerson +cn: Added by Bjorn (must succeed) +sn: None +description: this attribute value has been added __after__entry creation +description: Bjorn will try to delete this attribute value (should fail) + +dn: cn=Added by Bjorn (renamed by Jaj),ou=Add & Delete,dc=example,dc=com +objectClass: inetOrgPerson +sn: None +cn: Added by Bjorn (renamed by Jaj) + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +description: added by jaj (should succeed) +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +homePhone: +1 313 555 5444 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectClass: OpenLDAPperson +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: dc=example,dc=com +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +uniqueMember: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc + =com +ou: Groups + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,dc=example,dc=com +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + diff --git a/tests/data/certificate.out b/tests/data/certificate.out new file mode 100644 index 0000000..d30c778 --- /dev/null +++ b/tests/data/certificate.out @@ -0,0 +1,103 @@ +# (userCertificate;binary=*) +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: strongAuthenticationUser +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 +userCertificate;binary:: MIIDjDCCAvWgAwIBAgIBAzANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzNTM1WhcNMDQxMDE2MTYzNTM1WjCBnjELMAkGA1UEBhMCVVMxETAPBgNVBAgTCE1p + Y2hpZ2FuMR8wHQYDVQQKExZPcGVuTERBUCBFeGFtcGxlLCBMdGQuMRswGQYDVQQLExJBbHVtbmkgQ + XNzb2ljYXRpb24xEjAQBgNVBAMTCUplbiBTbWl0aDEqMCgGCSqGSIb3DQEJARYbamVuQG1haWwuYW + x1bW5pLmV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDpnXWAL0VkROGO1Rg + 8J3u6F4F7yMqQCbUMsV9rxQisYj45+pmqiHV5urogvT4MGD6eLNFZKBn+0KRni++uu7gbartzpmBa + HOlzRII9ZdVMFfrT2xYNgAlkne6pb6IZIN9UONuH/httENCDJ5WEpjZ48D1Lrml/HYO/W+SAMkpEq + QIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIE + NlcnRpZmljYXRlMB0GA1UdDgQWBBTB2saht/od/nis76b9m+pjxfhSPjCBoQYDVR0jBIGZMIGWgBR + LbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3Ju + aWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExH + TAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAMA0GCSqGSIb3DQEBBAUAA4GBAIoGPc/AS0 + cNkMRDNoMIzcFdF9lONMduKBiSuFvv+x8nCek+LUdXxF59V2NPKh2V5gFh5xbAchyv6FVBnpVtPdB + 5akCr5tdFQhuBLUXXDk/tTHGpIWt7OAjEmpuMzsz3GUB8Zf9rioHOs1DMw+GpzWdnFITxXhAqEDc3 + quqPrpxZ + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: strongAuthenticationUser +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 +userCertificate;binary:: MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs + aWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhI + EhhbXBzdGVyMR8wHQYJKoZIhvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQ + UAA4GNADCBiQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJh+q + nsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYmJ0erS3aoimOHLEFi + mmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4Q + gENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUO + iC37EK0Uf0XjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1U + EBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0 + ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAM + A0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESuxLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP + 05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5j + ds/HnaJsGcHI5JRG7CBJbW+wrwge3trJ1xHJI8prN + +# (cAcertificate=*) +dn: dc=example,dc=com +dc: example +objectClass: organization +objectClass: domainRelatedObject +objectclass: dcobject +objectClass: extensibleObject +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com +cACertificate;binary:: MIIDVDCCAr2gAwIBAgIBADANBgkqhkiG9w0BAQQFADB3MQswCQYDVQQ + GEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRk + LjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhcNM + DMxMDE3MTYzMDQxWhcNMDQxMDE2MTYzMDQxWjB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaW + Zvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjETMBEGA1UEAxMKRXhhbXBsZSB + DQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ + AoGBANljUGxiisAzEiALukzt3Gj/24MRw1J0AZx6GncXLhpNJsAFyA0bYZdAzgvydKeq/uX0i5o/4 + Byc3G71XAAcbJZxDPtrLwpDAdMNOBvKV2r67yTgnpatFLfGRt/FWazj5EbFYkorWWTe+4eEBd9VPz + ebHdIm+DPHipUfIAzRoNejAgMBAAGjge8wgewwHQYDVR0OBBYEFEtvIRo2JNKQ+UOwU0ctfeHA5pg + jMIGhBgNVHSMEgZkwgZaAFEtvIRo2JNKQ+UOwU0ctfeHA5pgjoXukeTB3MQswCQYDVQQGEwJVUzET + MBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjETMBEGA + 1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb22CAQAwDAYDVR0TBA + UwAwEB/zAZBgNVHREEEjAQgQ5jYUBleGFtcGxlLmNvbTANBgkqhkiG9w0BAQQFAAOBgQCgXD/+28E + l3GXi/uxMNEKqtnIhQdTnNU4il0fZ6pcmHPFC+61Bddow90ZZZh5Gbg5ZBxFRhDXN8K/fix3ewRSj + ASt40dGlEODkE+FsLMt04sYl6kX7RGKg9a46DkeG+uzZnN/3252uCgh+rjNMFAglueUTERv3EtUB1 + iXEoU3GyA== + +# (userCertificate=2$EMAIL=ca@example.com,CN=Example CA,O=Openldap Example\5C, + Ltd.,ST=California,C=US) diff --git a/tests/data/certificate.tls b/tests/data/certificate.tls new file mode 100644 index 0000000..8404943 --- /dev/null +++ b/tests/data/certificate.tls @@ -0,0 +1,240 @@ +# (userCertificate;binary=*) +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: strongAuthenticationUser +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 +userCertificate;binary:: MIIDjDCCAvWgAwIBAgIBAzANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzNTM1WhcNMDQxMDE2MTYzNTM1WjCBnjELMAkGA1UEBhMCVVMxETAPBgNVBAgTCE1p + Y2hpZ2FuMR8wHQYDVQQKExZPcGVuTERBUCBFeGFtcGxlLCBMdGQuMRswGQYDVQQLExJBbHVtbmkgQ + XNzb2ljYXRpb24xEjAQBgNVBAMTCUplbiBTbWl0aDEqMCgGCSqGSIb3DQEJARYbamVuQG1haWwuYW + x1bW5pLmV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDpnXWAL0VkROGO1Rg + 8J3u6F4F7yMqQCbUMsV9rxQisYj45+pmqiHV5urogvT4MGD6eLNFZKBn+0KRni++uu7gbartzpmBa + HOlzRII9ZdVMFfrT2xYNgAlkne6pb6IZIN9UONuH/httENCDJ5WEpjZ48D1Lrml/HYO/W+SAMkpEq + QIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIE + NlcnRpZmljYXRlMB0GA1UdDgQWBBTB2saht/od/nis76b9m+pjxfhSPjCBoQYDVR0jBIGZMIGWgBR + LbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3Ju + aWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExH + TAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAMA0GCSqGSIb3DQEBBAUAA4GBAIoGPc/AS0 + cNkMRDNoMIzcFdF9lONMduKBiSuFvv+x8nCek+LUdXxF59V2NPKh2V5gFh5xbAchyv6FVBnpVtPdB + 5akCr5tdFQhuBLUXXDk/tTHGpIWt7OAjEmpuMzsz3GUB8Zf9rioHOs1DMw+GpzWdnFITxXhAqEDc3 + quqPrpxZ + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: strongAuthenticationUser +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 +userCertificate;binary:: MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs + aWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhI + EhhbXBzdGVyMR8wHQYJKoZIhvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQ + UAA4GNADCBiQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJh+q + nsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYmJ0erS3aoimOHLEFi + mmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4Q + gENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUO + iC37EK0Uf0XjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1U + EBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0 + ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAM + A0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESuxLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP + 05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5j + ds/HnaJsGcHI5JRG7CBJbW+wrwge3trJ1xHJI8prN + +# (cAcertificate=*) +dn: dc=example,dc=com +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +objectClass: extensibleObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com +cACertificate;binary:: MIIDVDCCAr2gAwIBAgIBADANBgkqhkiG9w0BAQQFADB3MQswCQYDVQQ + GEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRk + LjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhcNM + DMxMDE3MTYzMDQxWhcNMDQxMDE2MTYzMDQxWjB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaW + Zvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjETMBEGA1UEAxMKRXhhbXBsZSB + DQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ + AoGBANljUGxiisAzEiALukzt3Gj/24MRw1J0AZx6GncXLhpNJsAFyA0bYZdAzgvydKeq/uX0i5o/4 + Byc3G71XAAcbJZxDPtrLwpDAdMNOBvKV2r67yTgnpatFLfGRt/FWazj5EbFYkorWWTe+4eEBd9VPz + ebHdIm+DPHipUfIAzRoNejAgMBAAGjge8wgewwHQYDVR0OBBYEFEtvIRo2JNKQ+UOwU0ctfeHA5pg + jMIGhBgNVHSMEgZkwgZaAFEtvIRo2JNKQ+UOwU0ctfeHA5pgjoXukeTB3MQswCQYDVQQGEwJVUzET + MBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjETMBEGA + 1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb22CAQAwDAYDVR0TBA + UwAwEB/zAZBgNVHREEEjAQgQ5jYUBleGFtcGxlLmNvbTANBgkqhkiG9w0BAQQFAAOBgQCgXD/+28E + l3GXi/uxMNEKqtnIhQdTnNU4il0fZ6pcmHPFC+61Bddow90ZZZh5Gbg5ZBxFRhDXN8K/fix3ewRSj + ASt40dGlEODkE+FsLMt04sYl6kX7RGKg9a46DkeG+uzZnN/3252uCgh+rjNMFAglueUTERv3EtUB1 + iXEoU3GyA== + +# (userCertificate=2$EMAIL=ca@example.com,CN=Example CA,O=Openldap Example\5C, Ltd.,ST=California,C=US) +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: strongAuthenticationUser +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 +userCertificate;binary:: MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs + aWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhI + EhhbXBzdGVyMR8wHQYJKoZIhvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQ + UAA4GNADCBiQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJh+q + nsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYmJ0erS3aoimOHLEFi + mmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4Q + gENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUO + iC37EK0Uf0XjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1U + EBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0 + ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAM + A0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESuxLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP + 05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5j + ds/HnaJsGcHI5JRG7CBJbW+wrwge3trJ1xHJI8prN + +# (userCertificate={ serialNumber 2, issuer "EMAIL=ca@example.com,CN=Example CA,O=Openldap Example\5C, Ltd.,ST=California,C=US" }) +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: strongAuthenticationUser +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 +userCertificate;binary:: MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs + aWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhI + EhhbXBzdGVyMR8wHQYJKoZIhvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQ + UAA4GNADCBiQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJh+q + nsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYmJ0erS3aoimOHLEFi + mmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4Q + gENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUO + iC37EK0Uf0XjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1U + EBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0 + ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAM + A0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESuxLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP + 05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5j + ds/HnaJsGcHI5JRG7CBJbW+wrwge3trJ1xHJI8prN + +# (userCertificate:certificateExactMatch:=3$EMAIL=ca@example.com,CN=Example CA,O=Openldap Example\5C, Ltd.,ST=California,C=US) +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: strongAuthenticationUser +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 +userCertificate;binary:: MIIDjDCCAvWgAwIBAgIBAzANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzNTM1WhcNMDQxMDE2MTYzNTM1WjCBnjELMAkGA1UEBhMCVVMxETAPBgNVBAgTCE1p + Y2hpZ2FuMR8wHQYDVQQKExZPcGVuTERBUCBFeGFtcGxlLCBMdGQuMRswGQYDVQQLExJBbHVtbmkgQ + XNzb2ljYXRpb24xEjAQBgNVBAMTCUplbiBTbWl0aDEqMCgGCSqGSIb3DQEJARYbamVuQG1haWwuYW + x1bW5pLmV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDpnXWAL0VkROGO1Rg + 8J3u6F4F7yMqQCbUMsV9rxQisYj45+pmqiHV5urogvT4MGD6eLNFZKBn+0KRni++uu7gbartzpmBa + HOlzRII9ZdVMFfrT2xYNgAlkne6pb6IZIN9UONuH/httENCDJ5WEpjZ48D1Lrml/HYO/W+SAMkpEq + QIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIE + NlcnRpZmljYXRlMB0GA1UdDgQWBBTB2saht/od/nis76b9m+pjxfhSPjCBoQYDVR0jBIGZMIGWgBR + LbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3Ju + aWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExH + TAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAMA0GCSqGSIb3DQEBBAUAA4GBAIoGPc/AS0 + cNkMRDNoMIzcFdF9lONMduKBiSuFvv+x8nCek+LUdXxF59V2NPKh2V5gFh5xbAchyv6FVBnpVtPdB + 5akCr5tdFQhuBLUXXDk/tTHGpIWt7OAjEmpuMzsz3GUB8Zf9rioHOs1DMw+GpzWdnFITxXhAqEDc3 + quqPrpxZ + +# (userCertificate:certificateExactMatch:={ issuer "EMAIL=ca@example.com,CN=Example CA,O=Openldap Example\5C, Ltd.,ST=California,C=US", serialNumber 3 }) +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: strongAuthenticationUser +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 +userCertificate;binary:: MIIDjDCCAvWgAwIBAgIBAzANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzNTM1WhcNMDQxMDE2MTYzNTM1WjCBnjELMAkGA1UEBhMCVVMxETAPBgNVBAgTCE1p + Y2hpZ2FuMR8wHQYDVQQKExZPcGVuTERBUCBFeGFtcGxlLCBMdGQuMRswGQYDVQQLExJBbHVtbmkgQ + XNzb2ljYXRpb24xEjAQBgNVBAMTCUplbiBTbWl0aDEqMCgGCSqGSIb3DQEJARYbamVuQG1haWwuYW + x1bW5pLmV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDpnXWAL0VkROGO1Rg + 8J3u6F4F7yMqQCbUMsV9rxQisYj45+pmqiHV5urogvT4MGD6eLNFZKBn+0KRni++uu7gbartzpmBa + HOlzRII9ZdVMFfrT2xYNgAlkne6pb6IZIN9UONuH/httENCDJ5WEpjZ48D1Lrml/HYO/W+SAMkpEq + QIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIE + NlcnRpZmljYXRlMB0GA1UdDgQWBBTB2saht/od/nis76b9m+pjxfhSPjCBoQYDVR0jBIGZMIGWgBR + LbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3Ju + aWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExH + TAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAMA0GCSqGSIb3DQEBBAUAA4GBAIoGPc/AS0 + cNkMRDNoMIzcFdF9lONMduKBiSuFvv+x8nCek+LUdXxF59V2NPKh2V5gFh5xbAchyv6FVBnpVtPdB + 5akCr5tdFQhuBLUXXDk/tTHGpIWt7OAjEmpuMzsz3GUB8Zf9rioHOs1DMw+GpzWdnFITxXhAqEDc3 + quqPrpxZ + diff --git a/tests/data/chain.out b/tests/data/chain.out new file mode 100644 index 0000000..985f5dd --- /dev/null +++ b/tests/data/chain.out @@ -0,0 +1,414 @@ +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: dc=example,dc=com +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,dc=example,dc=com +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 + +dn: ou=Other,dc=example,dc=com +objectClass: organizationalUnit +ou: Other + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 + diff --git a/tests/data/chainmod.out b/tests/data/chainmod.out new file mode 100644 index 0000000..67970af --- /dev/null +++ b/tests/data/chainmod.out @@ -0,0 +1,393 @@ +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: dc=example,dc=com +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,dc=example,dc=com +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 + +dn: ou=Other,dc=example,dc=com +objectClass: organizationalUnit +ou: Other + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: cn=Renamed Group,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +description: testing chain overlay writes... +member: cn=New Group,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +cn: Renamed Group + +dn: cn=Renamed User,ou=People,dc=example,dc=com +objectClass: person +sn: User +description: testing chain overlay writes... +seeAlso: cn=Renamed Group,ou=Groups,dc=example,dc=com +cn: Renamed User + diff --git a/tests/data/chainref.out b/tests/data/chainref.out new file mode 100644 index 0000000..bec3250 --- /dev/null +++ b/tests/data/chainref.out @@ -0,0 +1,4 @@ +dn: ou=Other,dc=example,dc=com +objectClass: organizationalUnit +ou: Other + diff --git a/tests/data/compsearch.out b/tests/data/compsearch.out new file mode 100644 index 0000000..e07c9d4 --- /dev/null +++ b/tests/data/compsearch.out @@ -0,0 +1,1558 @@ +dn: cn=beta,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: beta +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= +certificateRevocationList;binary:: MIIP0TCCDrkCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzA + JBgNVBAYTAkFVMSswKQYDVQQKEyJDZXJ0aWZpY2F0ZXMgQXVzdHJhbGlhIFB0eSBMaW1pdGVkMSUw + IwYDVQQDExxDQVBMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTAwLgYKCZImiZPyLGQBAxQgY2FAY + 2VydGlmaWNhdGVzLWF1c3RyYWxpYS5jb20uYXUXDTAzMDcyMjAxMzAyMFoXDTAzMTEwMzAxMzUyMF + owgg27MCMCBDi/biUXDTAwMDMwNjA2MjEzM1owDDAKBgNVHRUEAwoBBDAjAgQ5Il0KFw0wMDA1MjM + wODAwNDNaMAwwCgYDVR0VBAMKAQQwIwIEOSo6ZxcNMDAwNTI5MDIyNTQzWjAMMAoGA1UdFQQDCgEE + MCMCBDkx1QAXDTAwMDUyOTAzMzYwMVowDDAKBgNVHRUEAwoBBDAjAgQ5Pd7GFw0wMDA2MDcwNTM3M + jRaMAwwCgYDVR0VBAMKAQQwIwIEOUcavBcNMDAwNjE0MDc0MjExWjAMMAoGA1UdFQQDCgEEMCMCBD + lIlLYXDTAwMDYxNTA4MzY1NlowDDAKBgNVHRUEAwoBBDAjAgQ5SeOkFw0wMDA2MTYwODIzMDVaMAw + wCgYDVR0VBAMKAQQwIwIEOUiGjRcNMDAwNjE2MDgyMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ30oX + DTAwMDYyOTA4MDQyM1owDDAKBgNVHRUEAwoBBDAjAgQ5SdUjFw0wMDA2MjkwODA1NDVaMAwwCgYDV + R0VBAMKAQQwIwIEOTHlfRcNMDAwNjMwMDYwNjA1WjAMMAoGA1UdFQQDCgEEMCMCBDkzV6EXDTAwMD + YzMDA2MDYxMVowDDAKBgNVHRUEAwoBBDAjAgQ5SIFOFw0wMDA2MzAwNjA2MjFaMAwwCgYDVR0VBAM + KAQQwIwIEOUiCbBcNMDAwNjMwMDYwNjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlIgzkXDTAwMDYzMDA2 + MDYzNlowDDAKBgNVHRUEAwoBBDAjAgQ5SIQEFw0wMDA2MzAwNjA2NDFaMAwwCgYDVR0VBAMKAQQwI + wIEOUiFBBcNMDAwNjMwMDYwNjQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlIhfQXDTAwMDYzMDA2MDY1NV + owDDAKBgNVHRUEAwoBBDAjAgQ5SIcmFw0wMDA2MzAwNjA3MDJaMAwwCgYDVR0VBAMKAQQwIwIEOUi + H4hcNMDAwNjMwMDYwNzA4WjAMMAoGA1UdFQQDCgEEMCMCBDlIiGUXDTAwMDYzMDA2MDcxNFowDDAK + BgNVHRUEAwoBBDAjAgQ5SIjaFw0wMDA2MzAwNjA3NDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiJhRcNM + DAwNjMwMDYwNzU3WjAMMAoGA1UdFQQDCgEEMCMCBDlIjoIXDTAwMDYzMDA2MDgwNFowDDAKBgNVHR + UEAwoBBDAjAgQ5SI89Fw0wMDA2MzAwNjA4MTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiP1RcNMDAwNjM + wMDYwODE1WjAMMAoGA1UdFQQDCgEEMCMCBDlIkEoXDTAwMDYzMDA2MDg0NVowDDAKBgNVHRUEAwoB + BDAjAgQ5SJC7Fw0wMDA2MzAwNjA4NTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiReRcNMDAwNjMwMDYwO + DU2WjAMMAoGA1UdFQQDCgEEMCMCBDlIkgMXDTAwMDYzMDA2MDkwNFowDDAKBgNVHRUEAwoBBDAjAg + Q5SJKqFw0wMDA2MzAwNjA5MDlaMAwwCgYDVR0VBAMKAQQwIwIEOUiTJhcNMDAwNjMwMDYwOTE2WjA + MMAoGA1UdFQQDCgEEMCMCBDlIk5AXDTAwMDYzMDA2MDkyMVowDDAKBgNVHRUEAwoBBDAjAgQ5SJQ3 + Fw0wMDA2MzAwNjA5MjZaMAwwCgYDVR0VBAMKAQQwIwIEOUiVXhcNMDAwNjMwMDYwOTMyWjAMMAoGA + 1UdFQQDCgEEMCMCBDlIlgcXDTAwMDYzMDA2MDkzOFowDDAKBgNVHRUEAwoBBDAjAgQ5SJazFw0wMD + A2MzAwNjA5NDZaMAwwCgYDVR0VBAMKAQQwIwIEOUiXPxcNMDAwNjMwMDYwOTUxWjAMMAoGA1UdFQQ + DCgEEMCMCBDlIl7IXDTAwMDYzMDA2MDk1OFowDDAKBgNVHRUEAwoBBDAjAgQ5SJg0Fw0wMDA2MzAw + NjEwMDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiZBBcNMDAwNjMwMDYxMDA5WjAMMAoGA1UdFQQDCgEEM + CMCBDlJzksXDTAwMDYzMDA2MTAxNVowDDAKBgNVHRUEAwoBBDAjAgQ5Sc64Fw0wMDA2MzAwNjEwMj + FaMAwwCgYDVR0VBAMKAQQwIwIEOUnPVxcNMDAwNjMwMDYxMDI3WjAMMAoGA1UdFQQDCgEEMCMCBDl + J0BAXDTAwMDYzMDA2MTAzNVowDDAKBgNVHRUEAwoBBDAjAgQ5SdDKFw0wMDA2MzAwNjEwNDNaMAww + CgYDVR0VBAMKAQQwIwIEOUnRZRcNMDAwNjMwMDYxMDQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ0d0XD + TAwMDYzMDA2MTA1N1owDDAKBgNVHRUEAwoBBDAjAgQ5SdJ4Fw0wMDA2MzAwNjExMTVaMAwwCgYDVR + 0VBAMKAQQwIwIEOUnTDBcNMDAwNjMwMDYxMTIxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ04oXDTAwMDY + zMDA2MTEyN1owDDAKBgNVHRUEAwoBBDAjAgQ5SdQSFw0wMDA2MzAwNjExMzNaMAwwCgYDVR0VBAMK + AQQwIwIEOUnUoBcNMDAwNjMwMDYxMTM5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ2SQXDTAwMDYzMDA2M + TE1M1owDDAKBgNVHRUEAwoBBDAjAgQ5SdmwFw0wMDA2MzAwNjEyMDVaMAwwCgYDVR0VBAMKAQQwIw + IEOUnaTBcNMDAwNjMwMDYxMjExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ2vYXDTAwMDYzMDA2MTIxN1o + wDDAKBgNVHRUEAwoBBDAjAgQ5SducFw0wMDA2MzAwNjEyMjNaMAwwCgYDVR0VBAMKAQQwIwIEOUnc + IRcNMDAwNjMwMDYxMjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3KQXDTAwMDYzMDA2MTIzM1owDDAKB + gNVHRUEAwoBBDAjAgQ5Sd2xFw0wMDA2MzAwNjEyNDBaMAwwCgYDVR0VBAMKAQQwIwIEOUneRBcNMD + AwNjMwMDYxMjQ1WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3skXDTAwMDYzMDA2MTI1MVowDDAKBgNVHRU + EAwoBBDAjAgQ5Sd/IFw0wMDA2MzAwNjEzMDJaMAwwCgYDVR0VBAMKAQQwIwIEOUngPRcNMDAwNjMw + MDYxMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4M8XDTAwMDYzMDA2MTMyMFowDDAKBgNVHRUEAwoBB + DAjAgQ5SeE/Fw0wMDA2MzAwNjEzMjVaMAwwCgYDVR0VBAMKAQQwIwIEOUnh2BcNMDAwNjMwMDYxMz + MxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4mgXDTAwMDYzMDA2MTMzOVowDDAKBgNVHRUEAwoBBDAjAgQ + 5SeQvFw0wMDA2MzAwNjEzNDRaMAwwCgYDVR0VBAMKAQQwIwIEOVsGJRcNMDAwNjMwMDYxMzUwWjAM + MAoGA1UdFQQDCgEEMCMCBDlbBusXDTAwMDYzMDA2MTM1NlowDDAKBgNVHRUEAwoBBDAjAgQ5XEKPF + w0wMDA3MTMwOTAwMzhaMAwwCgYDVR0VBAMKAQQwIwIEOVxEKRcNMDAwNzEzMDkwMDQ1WjAMMAoGA1 + UdFQQDCgEEMCMCBDlcRukXDTAwMDcyNjA2MjkyN1owDDAKBgNVHRUEAwoBBDAjAgQ5fohgFw0wMDA + 3MjYwNjQ2NTFaMAwwCgYDVR0VBAMKAQQwIwIEOaNqPBcNMDAwODIzMDYwOTQxWjAMMAoGA1UdFQQD + CgEFMCMCBDlcX2QXDTAwMDgzMTA3MTM1OFowDDAKBgNVHRUEAwoBBDAjAgQ5YsflFw0wMDA5MDEwM + TQwMjRaMAwwCgYDVR0VBAMKAQQwIwIEOWGHDRcNMDAwOTA2MDcwMTE2WjAMMAoGA1UdFQQDCgEEMC + MCBDliz/4XDTAwMDkwNjA3MDcwNVowDDAKBgNVHRUEAwoBBDAjAgQ5m3S6Fw0wMDA5MjAwNzA2NTd + aMAwwCgYDVR0VBAMKAQQwIwIEOy6/hhcNMDEwNzAzMDYxMDQyWjAMMAoGA1UdFQQDCgEEMCMCBDtB + Yw4XDTAxMDcwMzA2MTkxNlowDDAKBgNVHRUEAwoBBDAjAgQ7MEG6Fw0wMTA3MTAwODA5NTNaMAwwC + gYDVR0VBAMKAQQwIwIEOy68CxcNMDEwNzExMDYxMzI5WjAMMAoGA1UdFQQDCgEEMCMCBDswSOsXDT + AxMDgwMTA0MTkyM1owDDAKBgNVHRUEAwoBBTAjAgQ7MYgeFw0wMTA4MDEwNDIwMDJaMAwwCgYDVR0 + VBAMKAQQwIwIEOzGHeBcNMDEwODAyMDI0NTM4WjAMMAoGA1UdFQQDCgEEMCMCBDsuveEXDTAxMDgz + MDA2MjIwOFowDDAKBgNVHRUEAwoBBDAjAgQ7jdxLFw0wMTA4MzAwNjQzMjRaMAwwCgYDVR0VBAMKA + QQwIwIEOy67QxcNMDExMTIxMDYyMDUzWjAMMAoGA1UdFQQDCgEEMCMCBDsDNXcXDTAyMDUxNzA4ND + Y0MlowDDAKBgNVHRUEAwoBBDAjAgQ7AzXMFw0wMjA1MTcwODQ2NTdaMAwwCgYDVR0VBAMKAQSgMjA + wMAsGA1UdFAQEAgIQoDATBgNVHSMEDDAKgAhISAKVrWisNzAMBgNVHRwBAf8EAjAAMA0GCSqGSIb3 + DQEBBQUAA4IBAQA1xNXgyrtVB5LSOc76JF+aJzf8IfJGqF04CMzbo4lDpec/LgOrTSFV223ccJzuq + cnxGUfDbXFfSWDHGnj9HLLTCkrS3clL1TPVjGXg5mFu1l6DCfcP2v4i4dlradNYDQg/AVBoJsYa3l + efSFHw8RFXNHJWwIjJA6J0CBJ/8Uq2ywr8umdndb10RLtPWp66A7wxu7OvTjt68d3LgSniQ0mIJCn + 4ooE30oF/ew0EznbxlSCNRPpB8jYYJTibGrTUVU43lr8h3URIgBkA4InOhuDv0ePMSCDSxBUhY0+G + eKo+YiXHy4SGUGLakahuq/hlGTRJJUddqFA1dNZdOUl23nVE + +dn: cn=charlie,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: charlie +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= + +dn: cn=beta,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: beta +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= +certificateRevocationList;binary:: MIIP0TCCDrkCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzA + JBgNVBAYTAkFVMSswKQYDVQQKEyJDZXJ0aWZpY2F0ZXMgQXVzdHJhbGlhIFB0eSBMaW1pdGVkMSUw + IwYDVQQDExxDQVBMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTAwLgYKCZImiZPyLGQBAxQgY2FAY + 2VydGlmaWNhdGVzLWF1c3RyYWxpYS5jb20uYXUXDTAzMDcyMjAxMzAyMFoXDTAzMTEwMzAxMzUyMF + owgg27MCMCBDi/biUXDTAwMDMwNjA2MjEzM1owDDAKBgNVHRUEAwoBBDAjAgQ5Il0KFw0wMDA1MjM + wODAwNDNaMAwwCgYDVR0VBAMKAQQwIwIEOSo6ZxcNMDAwNTI5MDIyNTQzWjAMMAoGA1UdFQQDCgEE + MCMCBDkx1QAXDTAwMDUyOTAzMzYwMVowDDAKBgNVHRUEAwoBBDAjAgQ5Pd7GFw0wMDA2MDcwNTM3M + jRaMAwwCgYDVR0VBAMKAQQwIwIEOUcavBcNMDAwNjE0MDc0MjExWjAMMAoGA1UdFQQDCgEEMCMCBD + lIlLYXDTAwMDYxNTA4MzY1NlowDDAKBgNVHRUEAwoBBDAjAgQ5SeOkFw0wMDA2MTYwODIzMDVaMAw + wCgYDVR0VBAMKAQQwIwIEOUiGjRcNMDAwNjE2MDgyMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ30oX + DTAwMDYyOTA4MDQyM1owDDAKBgNVHRUEAwoBBDAjAgQ5SdUjFw0wMDA2MjkwODA1NDVaMAwwCgYDV + R0VBAMKAQQwIwIEOTHlfRcNMDAwNjMwMDYwNjA1WjAMMAoGA1UdFQQDCgEEMCMCBDkzV6EXDTAwMD + YzMDA2MDYxMVowDDAKBgNVHRUEAwoBBDAjAgQ5SIFOFw0wMDA2MzAwNjA2MjFaMAwwCgYDVR0VBAM + KAQQwIwIEOUiCbBcNMDAwNjMwMDYwNjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlIgzkXDTAwMDYzMDA2 + MDYzNlowDDAKBgNVHRUEAwoBBDAjAgQ5SIQEFw0wMDA2MzAwNjA2NDFaMAwwCgYDVR0VBAMKAQQwI + wIEOUiFBBcNMDAwNjMwMDYwNjQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlIhfQXDTAwMDYzMDA2MDY1NV + owDDAKBgNVHRUEAwoBBDAjAgQ5SIcmFw0wMDA2MzAwNjA3MDJaMAwwCgYDVR0VBAMKAQQwIwIEOUi + H4hcNMDAwNjMwMDYwNzA4WjAMMAoGA1UdFQQDCgEEMCMCBDlIiGUXDTAwMDYzMDA2MDcxNFowDDAK + BgNVHRUEAwoBBDAjAgQ5SIjaFw0wMDA2MzAwNjA3NDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiJhRcNM + DAwNjMwMDYwNzU3WjAMMAoGA1UdFQQDCgEEMCMCBDlIjoIXDTAwMDYzMDA2MDgwNFowDDAKBgNVHR + UEAwoBBDAjAgQ5SI89Fw0wMDA2MzAwNjA4MTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiP1RcNMDAwNjM + wMDYwODE1WjAMMAoGA1UdFQQDCgEEMCMCBDlIkEoXDTAwMDYzMDA2MDg0NVowDDAKBgNVHRUEAwoB + BDAjAgQ5SJC7Fw0wMDA2MzAwNjA4NTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiReRcNMDAwNjMwMDYwO + DU2WjAMMAoGA1UdFQQDCgEEMCMCBDlIkgMXDTAwMDYzMDA2MDkwNFowDDAKBgNVHRUEAwoBBDAjAg + Q5SJKqFw0wMDA2MzAwNjA5MDlaMAwwCgYDVR0VBAMKAQQwIwIEOUiTJhcNMDAwNjMwMDYwOTE2WjA + MMAoGA1UdFQQDCgEEMCMCBDlIk5AXDTAwMDYzMDA2MDkyMVowDDAKBgNVHRUEAwoBBDAjAgQ5SJQ3 + Fw0wMDA2MzAwNjA5MjZaMAwwCgYDVR0VBAMKAQQwIwIEOUiVXhcNMDAwNjMwMDYwOTMyWjAMMAoGA + 1UdFQQDCgEEMCMCBDlIlgcXDTAwMDYzMDA2MDkzOFowDDAKBgNVHRUEAwoBBDAjAgQ5SJazFw0wMD + A2MzAwNjA5NDZaMAwwCgYDVR0VBAMKAQQwIwIEOUiXPxcNMDAwNjMwMDYwOTUxWjAMMAoGA1UdFQQ + DCgEEMCMCBDlIl7IXDTAwMDYzMDA2MDk1OFowDDAKBgNVHRUEAwoBBDAjAgQ5SJg0Fw0wMDA2MzAw + NjEwMDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiZBBcNMDAwNjMwMDYxMDA5WjAMMAoGA1UdFQQDCgEEM + CMCBDlJzksXDTAwMDYzMDA2MTAxNVowDDAKBgNVHRUEAwoBBDAjAgQ5Sc64Fw0wMDA2MzAwNjEwMj + FaMAwwCgYDVR0VBAMKAQQwIwIEOUnPVxcNMDAwNjMwMDYxMDI3WjAMMAoGA1UdFQQDCgEEMCMCBDl + J0BAXDTAwMDYzMDA2MTAzNVowDDAKBgNVHRUEAwoBBDAjAgQ5SdDKFw0wMDA2MzAwNjEwNDNaMAww + CgYDVR0VBAMKAQQwIwIEOUnRZRcNMDAwNjMwMDYxMDQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ0d0XD + TAwMDYzMDA2MTA1N1owDDAKBgNVHRUEAwoBBDAjAgQ5SdJ4Fw0wMDA2MzAwNjExMTVaMAwwCgYDVR + 0VBAMKAQQwIwIEOUnTDBcNMDAwNjMwMDYxMTIxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ04oXDTAwMDY + zMDA2MTEyN1owDDAKBgNVHRUEAwoBBDAjAgQ5SdQSFw0wMDA2MzAwNjExMzNaMAwwCgYDVR0VBAMK + AQQwIwIEOUnUoBcNMDAwNjMwMDYxMTM5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ2SQXDTAwMDYzMDA2M + TE1M1owDDAKBgNVHRUEAwoBBDAjAgQ5SdmwFw0wMDA2MzAwNjEyMDVaMAwwCgYDVR0VBAMKAQQwIw + IEOUnaTBcNMDAwNjMwMDYxMjExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ2vYXDTAwMDYzMDA2MTIxN1o + wDDAKBgNVHRUEAwoBBDAjAgQ5SducFw0wMDA2MzAwNjEyMjNaMAwwCgYDVR0VBAMKAQQwIwIEOUnc + IRcNMDAwNjMwMDYxMjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3KQXDTAwMDYzMDA2MTIzM1owDDAKB + gNVHRUEAwoBBDAjAgQ5Sd2xFw0wMDA2MzAwNjEyNDBaMAwwCgYDVR0VBAMKAQQwIwIEOUneRBcNMD + AwNjMwMDYxMjQ1WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3skXDTAwMDYzMDA2MTI1MVowDDAKBgNVHRU + EAwoBBDAjAgQ5Sd/IFw0wMDA2MzAwNjEzMDJaMAwwCgYDVR0VBAMKAQQwIwIEOUngPRcNMDAwNjMw + MDYxMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4M8XDTAwMDYzMDA2MTMyMFowDDAKBgNVHRUEAwoBB + DAjAgQ5SeE/Fw0wMDA2MzAwNjEzMjVaMAwwCgYDVR0VBAMKAQQwIwIEOUnh2BcNMDAwNjMwMDYxMz + MxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4mgXDTAwMDYzMDA2MTMzOVowDDAKBgNVHRUEAwoBBDAjAgQ + 5SeQvFw0wMDA2MzAwNjEzNDRaMAwwCgYDVR0VBAMKAQQwIwIEOVsGJRcNMDAwNjMwMDYxMzUwWjAM + MAoGA1UdFQQDCgEEMCMCBDlbBusXDTAwMDYzMDA2MTM1NlowDDAKBgNVHRUEAwoBBDAjAgQ5XEKPF + w0wMDA3MTMwOTAwMzhaMAwwCgYDVR0VBAMKAQQwIwIEOVxEKRcNMDAwNzEzMDkwMDQ1WjAMMAoGA1 + UdFQQDCgEEMCMCBDlcRukXDTAwMDcyNjA2MjkyN1owDDAKBgNVHRUEAwoBBDAjAgQ5fohgFw0wMDA + 3MjYwNjQ2NTFaMAwwCgYDVR0VBAMKAQQwIwIEOaNqPBcNMDAwODIzMDYwOTQxWjAMMAoGA1UdFQQD + CgEFMCMCBDlcX2QXDTAwMDgzMTA3MTM1OFowDDAKBgNVHRUEAwoBBDAjAgQ5YsflFw0wMDA5MDEwM + TQwMjRaMAwwCgYDVR0VBAMKAQQwIwIEOWGHDRcNMDAwOTA2MDcwMTE2WjAMMAoGA1UdFQQDCgEEMC + MCBDliz/4XDTAwMDkwNjA3MDcwNVowDDAKBgNVHRUEAwoBBDAjAgQ5m3S6Fw0wMDA5MjAwNzA2NTd + aMAwwCgYDVR0VBAMKAQQwIwIEOy6/hhcNMDEwNzAzMDYxMDQyWjAMMAoGA1UdFQQDCgEEMCMCBDtB + Yw4XDTAxMDcwMzA2MTkxNlowDDAKBgNVHRUEAwoBBDAjAgQ7MEG6Fw0wMTA3MTAwODA5NTNaMAwwC + gYDVR0VBAMKAQQwIwIEOy68CxcNMDEwNzExMDYxMzI5WjAMMAoGA1UdFQQDCgEEMCMCBDswSOsXDT + AxMDgwMTA0MTkyM1owDDAKBgNVHRUEAwoBBTAjAgQ7MYgeFw0wMTA4MDEwNDIwMDJaMAwwCgYDVR0 + VBAMKAQQwIwIEOzGHeBcNMDEwODAyMDI0NTM4WjAMMAoGA1UdFQQDCgEEMCMCBDsuveEXDTAxMDgz + MDA2MjIwOFowDDAKBgNVHRUEAwoBBDAjAgQ7jdxLFw0wMTA4MzAwNjQzMjRaMAwwCgYDVR0VBAMKA + QQwIwIEOy67QxcNMDExMTIxMDYyMDUzWjAMMAoGA1UdFQQDCgEEMCMCBDsDNXcXDTAyMDUxNzA4ND + Y0MlowDDAKBgNVHRUEAwoBBDAjAgQ7AzXMFw0wMjA1MTcwODQ2NTdaMAwwCgYDVR0VBAMKAQSgMjA + wMAsGA1UdFAQEAgIQoDATBgNVHSMEDDAKgAhISAKVrWisNzAMBgNVHRwBAf8EAjAAMA0GCSqGSIb3 + DQEBBQUAA4IBAQA1xNXgyrtVB5LSOc76JF+aJzf8IfJGqF04CMzbo4lDpec/LgOrTSFV223ccJzuq + cnxGUfDbXFfSWDHGnj9HLLTCkrS3clL1TPVjGXg5mFu1l6DCfcP2v4i4dlradNYDQg/AVBoJsYa3l + efSFHw8RFXNHJWwIjJA6J0CBJ/8Uq2ywr8umdndb10RLtPWp66A7wxu7OvTjt68d3LgSniQ0mIJCn + 4ooE30oF/ew0EznbxlSCNRPpB8jYYJTibGrTUVU43lr8h3URIgBkA4InOhuDv0ePMSCDSxBUhY0+G + eKo+YiXHy4SGUGLakahuq/hlGTRJJUddqFA1dNZdOUl23nVE + +dn: cn=charlie,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: charlie +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= + +dn: cn=beta,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: beta +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= +certificateRevocationList;binary:: MIIP0TCCDrkCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzA + JBgNVBAYTAkFVMSswKQYDVQQKEyJDZXJ0aWZpY2F0ZXMgQXVzdHJhbGlhIFB0eSBMaW1pdGVkMSUw + IwYDVQQDExxDQVBMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTAwLgYKCZImiZPyLGQBAxQgY2FAY + 2VydGlmaWNhdGVzLWF1c3RyYWxpYS5jb20uYXUXDTAzMDcyMjAxMzAyMFoXDTAzMTEwMzAxMzUyMF + owgg27MCMCBDi/biUXDTAwMDMwNjA2MjEzM1owDDAKBgNVHRUEAwoBBDAjAgQ5Il0KFw0wMDA1MjM + wODAwNDNaMAwwCgYDVR0VBAMKAQQwIwIEOSo6ZxcNMDAwNTI5MDIyNTQzWjAMMAoGA1UdFQQDCgEE + MCMCBDkx1QAXDTAwMDUyOTAzMzYwMVowDDAKBgNVHRUEAwoBBDAjAgQ5Pd7GFw0wMDA2MDcwNTM3M + jRaMAwwCgYDVR0VBAMKAQQwIwIEOUcavBcNMDAwNjE0MDc0MjExWjAMMAoGA1UdFQQDCgEEMCMCBD + lIlLYXDTAwMDYxNTA4MzY1NlowDDAKBgNVHRUEAwoBBDAjAgQ5SeOkFw0wMDA2MTYwODIzMDVaMAw + wCgYDVR0VBAMKAQQwIwIEOUiGjRcNMDAwNjE2MDgyMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ30oX + DTAwMDYyOTA4MDQyM1owDDAKBgNVHRUEAwoBBDAjAgQ5SdUjFw0wMDA2MjkwODA1NDVaMAwwCgYDV + R0VBAMKAQQwIwIEOTHlfRcNMDAwNjMwMDYwNjA1WjAMMAoGA1UdFQQDCgEEMCMCBDkzV6EXDTAwMD + YzMDA2MDYxMVowDDAKBgNVHRUEAwoBBDAjAgQ5SIFOFw0wMDA2MzAwNjA2MjFaMAwwCgYDVR0VBAM + KAQQwIwIEOUiCbBcNMDAwNjMwMDYwNjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlIgzkXDTAwMDYzMDA2 + MDYzNlowDDAKBgNVHRUEAwoBBDAjAgQ5SIQEFw0wMDA2MzAwNjA2NDFaMAwwCgYDVR0VBAMKAQQwI + wIEOUiFBBcNMDAwNjMwMDYwNjQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlIhfQXDTAwMDYzMDA2MDY1NV + owDDAKBgNVHRUEAwoBBDAjAgQ5SIcmFw0wMDA2MzAwNjA3MDJaMAwwCgYDVR0VBAMKAQQwIwIEOUi + H4hcNMDAwNjMwMDYwNzA4WjAMMAoGA1UdFQQDCgEEMCMCBDlIiGUXDTAwMDYzMDA2MDcxNFowDDAK + BgNVHRUEAwoBBDAjAgQ5SIjaFw0wMDA2MzAwNjA3NDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiJhRcNM + DAwNjMwMDYwNzU3WjAMMAoGA1UdFQQDCgEEMCMCBDlIjoIXDTAwMDYzMDA2MDgwNFowDDAKBgNVHR + UEAwoBBDAjAgQ5SI89Fw0wMDA2MzAwNjA4MTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiP1RcNMDAwNjM + wMDYwODE1WjAMMAoGA1UdFQQDCgEEMCMCBDlIkEoXDTAwMDYzMDA2MDg0NVowDDAKBgNVHRUEAwoB + BDAjAgQ5SJC7Fw0wMDA2MzAwNjA4NTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiReRcNMDAwNjMwMDYwO + DU2WjAMMAoGA1UdFQQDCgEEMCMCBDlIkgMXDTAwMDYzMDA2MDkwNFowDDAKBgNVHRUEAwoBBDAjAg + Q5SJKqFw0wMDA2MzAwNjA5MDlaMAwwCgYDVR0VBAMKAQQwIwIEOUiTJhcNMDAwNjMwMDYwOTE2WjA + MMAoGA1UdFQQDCgEEMCMCBDlIk5AXDTAwMDYzMDA2MDkyMVowDDAKBgNVHRUEAwoBBDAjAgQ5SJQ3 + Fw0wMDA2MzAwNjA5MjZaMAwwCgYDVR0VBAMKAQQwIwIEOUiVXhcNMDAwNjMwMDYwOTMyWjAMMAoGA + 1UdFQQDCgEEMCMCBDlIlgcXDTAwMDYzMDA2MDkzOFowDDAKBgNVHRUEAwoBBDAjAgQ5SJazFw0wMD + A2MzAwNjA5NDZaMAwwCgYDVR0VBAMKAQQwIwIEOUiXPxcNMDAwNjMwMDYwOTUxWjAMMAoGA1UdFQQ + DCgEEMCMCBDlIl7IXDTAwMDYzMDA2MDk1OFowDDAKBgNVHRUEAwoBBDAjAgQ5SJg0Fw0wMDA2MzAw + NjEwMDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiZBBcNMDAwNjMwMDYxMDA5WjAMMAoGA1UdFQQDCgEEM + CMCBDlJzksXDTAwMDYzMDA2MTAxNVowDDAKBgNVHRUEAwoBBDAjAgQ5Sc64Fw0wMDA2MzAwNjEwMj + FaMAwwCgYDVR0VBAMKAQQwIwIEOUnPVxcNMDAwNjMwMDYxMDI3WjAMMAoGA1UdFQQDCgEEMCMCBDl + J0BAXDTAwMDYzMDA2MTAzNVowDDAKBgNVHRUEAwoBBDAjAgQ5SdDKFw0wMDA2MzAwNjEwNDNaMAww + CgYDVR0VBAMKAQQwIwIEOUnRZRcNMDAwNjMwMDYxMDQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ0d0XD + TAwMDYzMDA2MTA1N1owDDAKBgNVHRUEAwoBBDAjAgQ5SdJ4Fw0wMDA2MzAwNjExMTVaMAwwCgYDVR + 0VBAMKAQQwIwIEOUnTDBcNMDAwNjMwMDYxMTIxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ04oXDTAwMDY + zMDA2MTEyN1owDDAKBgNVHRUEAwoBBDAjAgQ5SdQSFw0wMDA2MzAwNjExMzNaMAwwCgYDVR0VBAMK + AQQwIwIEOUnUoBcNMDAwNjMwMDYxMTM5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ2SQXDTAwMDYzMDA2M + TE1M1owDDAKBgNVHRUEAwoBBDAjAgQ5SdmwFw0wMDA2MzAwNjEyMDVaMAwwCgYDVR0VBAMKAQQwIw + IEOUnaTBcNMDAwNjMwMDYxMjExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ2vYXDTAwMDYzMDA2MTIxN1o + wDDAKBgNVHRUEAwoBBDAjAgQ5SducFw0wMDA2MzAwNjEyMjNaMAwwCgYDVR0VBAMKAQQwIwIEOUnc + IRcNMDAwNjMwMDYxMjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3KQXDTAwMDYzMDA2MTIzM1owDDAKB + gNVHRUEAwoBBDAjAgQ5Sd2xFw0wMDA2MzAwNjEyNDBaMAwwCgYDVR0VBAMKAQQwIwIEOUneRBcNMD + AwNjMwMDYxMjQ1WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3skXDTAwMDYzMDA2MTI1MVowDDAKBgNVHRU + EAwoBBDAjAgQ5Sd/IFw0wMDA2MzAwNjEzMDJaMAwwCgYDVR0VBAMKAQQwIwIEOUngPRcNMDAwNjMw + MDYxMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4M8XDTAwMDYzMDA2MTMyMFowDDAKBgNVHRUEAwoBB + DAjAgQ5SeE/Fw0wMDA2MzAwNjEzMjVaMAwwCgYDVR0VBAMKAQQwIwIEOUnh2BcNMDAwNjMwMDYxMz + MxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4mgXDTAwMDYzMDA2MTMzOVowDDAKBgNVHRUEAwoBBDAjAgQ + 5SeQvFw0wMDA2MzAwNjEzNDRaMAwwCgYDVR0VBAMKAQQwIwIEOVsGJRcNMDAwNjMwMDYxMzUwWjAM + MAoGA1UdFQQDCgEEMCMCBDlbBusXDTAwMDYzMDA2MTM1NlowDDAKBgNVHRUEAwoBBDAjAgQ5XEKPF + w0wMDA3MTMwOTAwMzhaMAwwCgYDVR0VBAMKAQQwIwIEOVxEKRcNMDAwNzEzMDkwMDQ1WjAMMAoGA1 + UdFQQDCgEEMCMCBDlcRukXDTAwMDcyNjA2MjkyN1owDDAKBgNVHRUEAwoBBDAjAgQ5fohgFw0wMDA + 3MjYwNjQ2NTFaMAwwCgYDVR0VBAMKAQQwIwIEOaNqPBcNMDAwODIzMDYwOTQxWjAMMAoGA1UdFQQD + CgEFMCMCBDlcX2QXDTAwMDgzMTA3MTM1OFowDDAKBgNVHRUEAwoBBDAjAgQ5YsflFw0wMDA5MDEwM + TQwMjRaMAwwCgYDVR0VBAMKAQQwIwIEOWGHDRcNMDAwOTA2MDcwMTE2WjAMMAoGA1UdFQQDCgEEMC + MCBDliz/4XDTAwMDkwNjA3MDcwNVowDDAKBgNVHRUEAwoBBDAjAgQ5m3S6Fw0wMDA5MjAwNzA2NTd + aMAwwCgYDVR0VBAMKAQQwIwIEOy6/hhcNMDEwNzAzMDYxMDQyWjAMMAoGA1UdFQQDCgEEMCMCBDtB + Yw4XDTAxMDcwMzA2MTkxNlowDDAKBgNVHRUEAwoBBDAjAgQ7MEG6Fw0wMTA3MTAwODA5NTNaMAwwC + gYDVR0VBAMKAQQwIwIEOy68CxcNMDEwNzExMDYxMzI5WjAMMAoGA1UdFQQDCgEEMCMCBDswSOsXDT + AxMDgwMTA0MTkyM1owDDAKBgNVHRUEAwoBBTAjAgQ7MYgeFw0wMTA4MDEwNDIwMDJaMAwwCgYDVR0 + VBAMKAQQwIwIEOzGHeBcNMDEwODAyMDI0NTM4WjAMMAoGA1UdFQQDCgEEMCMCBDsuveEXDTAxMDgz + MDA2MjIwOFowDDAKBgNVHRUEAwoBBDAjAgQ7jdxLFw0wMTA4MzAwNjQzMjRaMAwwCgYDVR0VBAMKA + QQwIwIEOy67QxcNMDExMTIxMDYyMDUzWjAMMAoGA1UdFQQDCgEEMCMCBDsDNXcXDTAyMDUxNzA4ND + Y0MlowDDAKBgNVHRUEAwoBBDAjAgQ7AzXMFw0wMjA1MTcwODQ2NTdaMAwwCgYDVR0VBAMKAQSgMjA + wMAsGA1UdFAQEAgIQoDATBgNVHSMEDDAKgAhISAKVrWisNzAMBgNVHRwBAf8EAjAAMA0GCSqGSIb3 + DQEBBQUAA4IBAQA1xNXgyrtVB5LSOc76JF+aJzf8IfJGqF04CMzbo4lDpec/LgOrTSFV223ccJzuq + cnxGUfDbXFfSWDHGnj9HLLTCkrS3clL1TPVjGXg5mFu1l6DCfcP2v4i4dlradNYDQg/AVBoJsYa3l + efSFHw8RFXNHJWwIjJA6J0CBJ/8Uq2ywr8umdndb10RLtPWp66A7wxu7OvTjt68d3LgSniQ0mIJCn + 4ooE30oF/ew0EznbxlSCNRPpB8jYYJTibGrTUVU43lr8h3URIgBkA4InOhuDv0ePMSCDSxBUhY0+G + eKo+YiXHy4SGUGLakahuq/hlGTRJJUddqFA1dNZdOUl23nVE + +dn: cn=charlie,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: charlie +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= + +dn: cn=beta,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: beta +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= +certificateRevocationList;binary:: MIIP0TCCDrkCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzA + JBgNVBAYTAkFVMSswKQYDVQQKEyJDZXJ0aWZpY2F0ZXMgQXVzdHJhbGlhIFB0eSBMaW1pdGVkMSUw + IwYDVQQDExxDQVBMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTAwLgYKCZImiZPyLGQBAxQgY2FAY + 2VydGlmaWNhdGVzLWF1c3RyYWxpYS5jb20uYXUXDTAzMDcyMjAxMzAyMFoXDTAzMTEwMzAxMzUyMF + owgg27MCMCBDi/biUXDTAwMDMwNjA2MjEzM1owDDAKBgNVHRUEAwoBBDAjAgQ5Il0KFw0wMDA1MjM + wODAwNDNaMAwwCgYDVR0VBAMKAQQwIwIEOSo6ZxcNMDAwNTI5MDIyNTQzWjAMMAoGA1UdFQQDCgEE + MCMCBDkx1QAXDTAwMDUyOTAzMzYwMVowDDAKBgNVHRUEAwoBBDAjAgQ5Pd7GFw0wMDA2MDcwNTM3M + jRaMAwwCgYDVR0VBAMKAQQwIwIEOUcavBcNMDAwNjE0MDc0MjExWjAMMAoGA1UdFQQDCgEEMCMCBD + lIlLYXDTAwMDYxNTA4MzY1NlowDDAKBgNVHRUEAwoBBDAjAgQ5SeOkFw0wMDA2MTYwODIzMDVaMAw + wCgYDVR0VBAMKAQQwIwIEOUiGjRcNMDAwNjE2MDgyMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ30oX + DTAwMDYyOTA4MDQyM1owDDAKBgNVHRUEAwoBBDAjAgQ5SdUjFw0wMDA2MjkwODA1NDVaMAwwCgYDV + R0VBAMKAQQwIwIEOTHlfRcNMDAwNjMwMDYwNjA1WjAMMAoGA1UdFQQDCgEEMCMCBDkzV6EXDTAwMD + YzMDA2MDYxMVowDDAKBgNVHRUEAwoBBDAjAgQ5SIFOFw0wMDA2MzAwNjA2MjFaMAwwCgYDVR0VBAM + KAQQwIwIEOUiCbBcNMDAwNjMwMDYwNjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlIgzkXDTAwMDYzMDA2 + MDYzNlowDDAKBgNVHRUEAwoBBDAjAgQ5SIQEFw0wMDA2MzAwNjA2NDFaMAwwCgYDVR0VBAMKAQQwI + wIEOUiFBBcNMDAwNjMwMDYwNjQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlIhfQXDTAwMDYzMDA2MDY1NV + owDDAKBgNVHRUEAwoBBDAjAgQ5SIcmFw0wMDA2MzAwNjA3MDJaMAwwCgYDVR0VBAMKAQQwIwIEOUi + H4hcNMDAwNjMwMDYwNzA4WjAMMAoGA1UdFQQDCgEEMCMCBDlIiGUXDTAwMDYzMDA2MDcxNFowDDAK + BgNVHRUEAwoBBDAjAgQ5SIjaFw0wMDA2MzAwNjA3NDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiJhRcNM + DAwNjMwMDYwNzU3WjAMMAoGA1UdFQQDCgEEMCMCBDlIjoIXDTAwMDYzMDA2MDgwNFowDDAKBgNVHR + UEAwoBBDAjAgQ5SI89Fw0wMDA2MzAwNjA4MTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiP1RcNMDAwNjM + wMDYwODE1WjAMMAoGA1UdFQQDCgEEMCMCBDlIkEoXDTAwMDYzMDA2MDg0NVowDDAKBgNVHRUEAwoB + BDAjAgQ5SJC7Fw0wMDA2MzAwNjA4NTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiReRcNMDAwNjMwMDYwO + DU2WjAMMAoGA1UdFQQDCgEEMCMCBDlIkgMXDTAwMDYzMDA2MDkwNFowDDAKBgNVHRUEAwoBBDAjAg + Q5SJKqFw0wMDA2MzAwNjA5MDlaMAwwCgYDVR0VBAMKAQQwIwIEOUiTJhcNMDAwNjMwMDYwOTE2WjA + MMAoGA1UdFQQDCgEEMCMCBDlIk5AXDTAwMDYzMDA2MDkyMVowDDAKBgNVHRUEAwoBBDAjAgQ5SJQ3 + Fw0wMDA2MzAwNjA5MjZaMAwwCgYDVR0VBAMKAQQwIwIEOUiVXhcNMDAwNjMwMDYwOTMyWjAMMAoGA + 1UdFQQDCgEEMCMCBDlIlgcXDTAwMDYzMDA2MDkzOFowDDAKBgNVHRUEAwoBBDAjAgQ5SJazFw0wMD + A2MzAwNjA5NDZaMAwwCgYDVR0VBAMKAQQwIwIEOUiXPxcNMDAwNjMwMDYwOTUxWjAMMAoGA1UdFQQ + DCgEEMCMCBDlIl7IXDTAwMDYzMDA2MDk1OFowDDAKBgNVHRUEAwoBBDAjAgQ5SJg0Fw0wMDA2MzAw + NjEwMDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiZBBcNMDAwNjMwMDYxMDA5WjAMMAoGA1UdFQQDCgEEM + CMCBDlJzksXDTAwMDYzMDA2MTAxNVowDDAKBgNVHRUEAwoBBDAjAgQ5Sc64Fw0wMDA2MzAwNjEwMj + FaMAwwCgYDVR0VBAMKAQQwIwIEOUnPVxcNMDAwNjMwMDYxMDI3WjAMMAoGA1UdFQQDCgEEMCMCBDl + J0BAXDTAwMDYzMDA2MTAzNVowDDAKBgNVHRUEAwoBBDAjAgQ5SdDKFw0wMDA2MzAwNjEwNDNaMAww + CgYDVR0VBAMKAQQwIwIEOUnRZRcNMDAwNjMwMDYxMDQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ0d0XD + TAwMDYzMDA2MTA1N1owDDAKBgNVHRUEAwoBBDAjAgQ5SdJ4Fw0wMDA2MzAwNjExMTVaMAwwCgYDVR + 0VBAMKAQQwIwIEOUnTDBcNMDAwNjMwMDYxMTIxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ04oXDTAwMDY + zMDA2MTEyN1owDDAKBgNVHRUEAwoBBDAjAgQ5SdQSFw0wMDA2MzAwNjExMzNaMAwwCgYDVR0VBAMK + AQQwIwIEOUnUoBcNMDAwNjMwMDYxMTM5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ2SQXDTAwMDYzMDA2M + TE1M1owDDAKBgNVHRUEAwoBBDAjAgQ5SdmwFw0wMDA2MzAwNjEyMDVaMAwwCgYDVR0VBAMKAQQwIw + IEOUnaTBcNMDAwNjMwMDYxMjExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ2vYXDTAwMDYzMDA2MTIxN1o + wDDAKBgNVHRUEAwoBBDAjAgQ5SducFw0wMDA2MzAwNjEyMjNaMAwwCgYDVR0VBAMKAQQwIwIEOUnc + IRcNMDAwNjMwMDYxMjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3KQXDTAwMDYzMDA2MTIzM1owDDAKB + gNVHRUEAwoBBDAjAgQ5Sd2xFw0wMDA2MzAwNjEyNDBaMAwwCgYDVR0VBAMKAQQwIwIEOUneRBcNMD + AwNjMwMDYxMjQ1WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3skXDTAwMDYzMDA2MTI1MVowDDAKBgNVHRU + EAwoBBDAjAgQ5Sd/IFw0wMDA2MzAwNjEzMDJaMAwwCgYDVR0VBAMKAQQwIwIEOUngPRcNMDAwNjMw + MDYxMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4M8XDTAwMDYzMDA2MTMyMFowDDAKBgNVHRUEAwoBB + DAjAgQ5SeE/Fw0wMDA2MzAwNjEzMjVaMAwwCgYDVR0VBAMKAQQwIwIEOUnh2BcNMDAwNjMwMDYxMz + MxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4mgXDTAwMDYzMDA2MTMzOVowDDAKBgNVHRUEAwoBBDAjAgQ + 5SeQvFw0wMDA2MzAwNjEzNDRaMAwwCgYDVR0VBAMKAQQwIwIEOVsGJRcNMDAwNjMwMDYxMzUwWjAM + MAoGA1UdFQQDCgEEMCMCBDlbBusXDTAwMDYzMDA2MTM1NlowDDAKBgNVHRUEAwoBBDAjAgQ5XEKPF + w0wMDA3MTMwOTAwMzhaMAwwCgYDVR0VBAMKAQQwIwIEOVxEKRcNMDAwNzEzMDkwMDQ1WjAMMAoGA1 + UdFQQDCgEEMCMCBDlcRukXDTAwMDcyNjA2MjkyN1owDDAKBgNVHRUEAwoBBDAjAgQ5fohgFw0wMDA + 3MjYwNjQ2NTFaMAwwCgYDVR0VBAMKAQQwIwIEOaNqPBcNMDAwODIzMDYwOTQxWjAMMAoGA1UdFQQD + CgEFMCMCBDlcX2QXDTAwMDgzMTA3MTM1OFowDDAKBgNVHRUEAwoBBDAjAgQ5YsflFw0wMDA5MDEwM + TQwMjRaMAwwCgYDVR0VBAMKAQQwIwIEOWGHDRcNMDAwOTA2MDcwMTE2WjAMMAoGA1UdFQQDCgEEMC + MCBDliz/4XDTAwMDkwNjA3MDcwNVowDDAKBgNVHRUEAwoBBDAjAgQ5m3S6Fw0wMDA5MjAwNzA2NTd + aMAwwCgYDVR0VBAMKAQQwIwIEOy6/hhcNMDEwNzAzMDYxMDQyWjAMMAoGA1UdFQQDCgEEMCMCBDtB + Yw4XDTAxMDcwMzA2MTkxNlowDDAKBgNVHRUEAwoBBDAjAgQ7MEG6Fw0wMTA3MTAwODA5NTNaMAwwC + gYDVR0VBAMKAQQwIwIEOy68CxcNMDEwNzExMDYxMzI5WjAMMAoGA1UdFQQDCgEEMCMCBDswSOsXDT + AxMDgwMTA0MTkyM1owDDAKBgNVHRUEAwoBBTAjAgQ7MYgeFw0wMTA4MDEwNDIwMDJaMAwwCgYDVR0 + VBAMKAQQwIwIEOzGHeBcNMDEwODAyMDI0NTM4WjAMMAoGA1UdFQQDCgEEMCMCBDsuveEXDTAxMDgz + MDA2MjIwOFowDDAKBgNVHRUEAwoBBDAjAgQ7jdxLFw0wMTA4MzAwNjQzMjRaMAwwCgYDVR0VBAMKA + QQwIwIEOy67QxcNMDExMTIxMDYyMDUzWjAMMAoGA1UdFQQDCgEEMCMCBDsDNXcXDTAyMDUxNzA4ND + Y0MlowDDAKBgNVHRUEAwoBBDAjAgQ7AzXMFw0wMjA1MTcwODQ2NTdaMAwwCgYDVR0VBAMKAQSgMjA + wMAsGA1UdFAQEAgIQoDATBgNVHSMEDDAKgAhISAKVrWisNzAMBgNVHRwBAf8EAjAAMA0GCSqGSIb3 + DQEBBQUAA4IBAQA1xNXgyrtVB5LSOc76JF+aJzf8IfJGqF04CMzbo4lDpec/LgOrTSFV223ccJzuq + cnxGUfDbXFfSWDHGnj9HLLTCkrS3clL1TPVjGXg5mFu1l6DCfcP2v4i4dlradNYDQg/AVBoJsYa3l + efSFHw8RFXNHJWwIjJA6J0CBJ/8Uq2ywr8umdndb10RLtPWp66A7wxu7OvTjt68d3LgSniQ0mIJCn + 4ooE30oF/ew0EznbxlSCNRPpB8jYYJTibGrTUVU43lr8h3URIgBkA4InOhuDv0ePMSCDSxBUhY0+G + eKo+YiXHy4SGUGLakahuq/hlGTRJJUddqFA1dNZdOUl23nVE + +dn: cn=charlie,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: charlie +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= + +dn: cn=beta,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: beta +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= +certificateRevocationList;binary:: MIIP0TCCDrkCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzA + JBgNVBAYTAkFVMSswKQYDVQQKEyJDZXJ0aWZpY2F0ZXMgQXVzdHJhbGlhIFB0eSBMaW1pdGVkMSUw + IwYDVQQDExxDQVBMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTAwLgYKCZImiZPyLGQBAxQgY2FAY + 2VydGlmaWNhdGVzLWF1c3RyYWxpYS5jb20uYXUXDTAzMDcyMjAxMzAyMFoXDTAzMTEwMzAxMzUyMF + owgg27MCMCBDi/biUXDTAwMDMwNjA2MjEzM1owDDAKBgNVHRUEAwoBBDAjAgQ5Il0KFw0wMDA1MjM + wODAwNDNaMAwwCgYDVR0VBAMKAQQwIwIEOSo6ZxcNMDAwNTI5MDIyNTQzWjAMMAoGA1UdFQQDCgEE + MCMCBDkx1QAXDTAwMDUyOTAzMzYwMVowDDAKBgNVHRUEAwoBBDAjAgQ5Pd7GFw0wMDA2MDcwNTM3M + jRaMAwwCgYDVR0VBAMKAQQwIwIEOUcavBcNMDAwNjE0MDc0MjExWjAMMAoGA1UdFQQDCgEEMCMCBD + lIlLYXDTAwMDYxNTA4MzY1NlowDDAKBgNVHRUEAwoBBDAjAgQ5SeOkFw0wMDA2MTYwODIzMDVaMAw + wCgYDVR0VBAMKAQQwIwIEOUiGjRcNMDAwNjE2MDgyMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ30oX + DTAwMDYyOTA4MDQyM1owDDAKBgNVHRUEAwoBBDAjAgQ5SdUjFw0wMDA2MjkwODA1NDVaMAwwCgYDV + R0VBAMKAQQwIwIEOTHlfRcNMDAwNjMwMDYwNjA1WjAMMAoGA1UdFQQDCgEEMCMCBDkzV6EXDTAwMD + YzMDA2MDYxMVowDDAKBgNVHRUEAwoBBDAjAgQ5SIFOFw0wMDA2MzAwNjA2MjFaMAwwCgYDVR0VBAM + KAQQwIwIEOUiCbBcNMDAwNjMwMDYwNjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlIgzkXDTAwMDYzMDA2 + MDYzNlowDDAKBgNVHRUEAwoBBDAjAgQ5SIQEFw0wMDA2MzAwNjA2NDFaMAwwCgYDVR0VBAMKAQQwI + wIEOUiFBBcNMDAwNjMwMDYwNjQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlIhfQXDTAwMDYzMDA2MDY1NV + owDDAKBgNVHRUEAwoBBDAjAgQ5SIcmFw0wMDA2MzAwNjA3MDJaMAwwCgYDVR0VBAMKAQQwIwIEOUi + H4hcNMDAwNjMwMDYwNzA4WjAMMAoGA1UdFQQDCgEEMCMCBDlIiGUXDTAwMDYzMDA2MDcxNFowDDAK + BgNVHRUEAwoBBDAjAgQ5SIjaFw0wMDA2MzAwNjA3NDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiJhRcNM + DAwNjMwMDYwNzU3WjAMMAoGA1UdFQQDCgEEMCMCBDlIjoIXDTAwMDYzMDA2MDgwNFowDDAKBgNVHR + UEAwoBBDAjAgQ5SI89Fw0wMDA2MzAwNjA4MTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiP1RcNMDAwNjM + wMDYwODE1WjAMMAoGA1UdFQQDCgEEMCMCBDlIkEoXDTAwMDYzMDA2MDg0NVowDDAKBgNVHRUEAwoB + BDAjAgQ5SJC7Fw0wMDA2MzAwNjA4NTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiReRcNMDAwNjMwMDYwO + DU2WjAMMAoGA1UdFQQDCgEEMCMCBDlIkgMXDTAwMDYzMDA2MDkwNFowDDAKBgNVHRUEAwoBBDAjAg + Q5SJKqFw0wMDA2MzAwNjA5MDlaMAwwCgYDVR0VBAMKAQQwIwIEOUiTJhcNMDAwNjMwMDYwOTE2WjA + MMAoGA1UdFQQDCgEEMCMCBDlIk5AXDTAwMDYzMDA2MDkyMVowDDAKBgNVHRUEAwoBBDAjAgQ5SJQ3 + Fw0wMDA2MzAwNjA5MjZaMAwwCgYDVR0VBAMKAQQwIwIEOUiVXhcNMDAwNjMwMDYwOTMyWjAMMAoGA + 1UdFQQDCgEEMCMCBDlIlgcXDTAwMDYzMDA2MDkzOFowDDAKBgNVHRUEAwoBBDAjAgQ5SJazFw0wMD + A2MzAwNjA5NDZaMAwwCgYDVR0VBAMKAQQwIwIEOUiXPxcNMDAwNjMwMDYwOTUxWjAMMAoGA1UdFQQ + DCgEEMCMCBDlIl7IXDTAwMDYzMDA2MDk1OFowDDAKBgNVHRUEAwoBBDAjAgQ5SJg0Fw0wMDA2MzAw + NjEwMDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiZBBcNMDAwNjMwMDYxMDA5WjAMMAoGA1UdFQQDCgEEM + CMCBDlJzksXDTAwMDYzMDA2MTAxNVowDDAKBgNVHRUEAwoBBDAjAgQ5Sc64Fw0wMDA2MzAwNjEwMj + FaMAwwCgYDVR0VBAMKAQQwIwIEOUnPVxcNMDAwNjMwMDYxMDI3WjAMMAoGA1UdFQQDCgEEMCMCBDl + J0BAXDTAwMDYzMDA2MTAzNVowDDAKBgNVHRUEAwoBBDAjAgQ5SdDKFw0wMDA2MzAwNjEwNDNaMAww + CgYDVR0VBAMKAQQwIwIEOUnRZRcNMDAwNjMwMDYxMDQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ0d0XD + TAwMDYzMDA2MTA1N1owDDAKBgNVHRUEAwoBBDAjAgQ5SdJ4Fw0wMDA2MzAwNjExMTVaMAwwCgYDVR + 0VBAMKAQQwIwIEOUnTDBcNMDAwNjMwMDYxMTIxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ04oXDTAwMDY + zMDA2MTEyN1owDDAKBgNVHRUEAwoBBDAjAgQ5SdQSFw0wMDA2MzAwNjExMzNaMAwwCgYDVR0VBAMK + AQQwIwIEOUnUoBcNMDAwNjMwMDYxMTM5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ2SQXDTAwMDYzMDA2M + TE1M1owDDAKBgNVHRUEAwoBBDAjAgQ5SdmwFw0wMDA2MzAwNjEyMDVaMAwwCgYDVR0VBAMKAQQwIw + IEOUnaTBcNMDAwNjMwMDYxMjExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ2vYXDTAwMDYzMDA2MTIxN1o + wDDAKBgNVHRUEAwoBBDAjAgQ5SducFw0wMDA2MzAwNjEyMjNaMAwwCgYDVR0VBAMKAQQwIwIEOUnc + IRcNMDAwNjMwMDYxMjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3KQXDTAwMDYzMDA2MTIzM1owDDAKB + gNVHRUEAwoBBDAjAgQ5Sd2xFw0wMDA2MzAwNjEyNDBaMAwwCgYDVR0VBAMKAQQwIwIEOUneRBcNMD + AwNjMwMDYxMjQ1WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3skXDTAwMDYzMDA2MTI1MVowDDAKBgNVHRU + EAwoBBDAjAgQ5Sd/IFw0wMDA2MzAwNjEzMDJaMAwwCgYDVR0VBAMKAQQwIwIEOUngPRcNMDAwNjMw + MDYxMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4M8XDTAwMDYzMDA2MTMyMFowDDAKBgNVHRUEAwoBB + DAjAgQ5SeE/Fw0wMDA2MzAwNjEzMjVaMAwwCgYDVR0VBAMKAQQwIwIEOUnh2BcNMDAwNjMwMDYxMz + MxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4mgXDTAwMDYzMDA2MTMzOVowDDAKBgNVHRUEAwoBBDAjAgQ + 5SeQvFw0wMDA2MzAwNjEzNDRaMAwwCgYDVR0VBAMKAQQwIwIEOVsGJRcNMDAwNjMwMDYxMzUwWjAM + MAoGA1UdFQQDCgEEMCMCBDlbBusXDTAwMDYzMDA2MTM1NlowDDAKBgNVHRUEAwoBBDAjAgQ5XEKPF + w0wMDA3MTMwOTAwMzhaMAwwCgYDVR0VBAMKAQQwIwIEOVxEKRcNMDAwNzEzMDkwMDQ1WjAMMAoGA1 + UdFQQDCgEEMCMCBDlcRukXDTAwMDcyNjA2MjkyN1owDDAKBgNVHRUEAwoBBDAjAgQ5fohgFw0wMDA + 3MjYwNjQ2NTFaMAwwCgYDVR0VBAMKAQQwIwIEOaNqPBcNMDAwODIzMDYwOTQxWjAMMAoGA1UdFQQD + CgEFMCMCBDlcX2QXDTAwMDgzMTA3MTM1OFowDDAKBgNVHRUEAwoBBDAjAgQ5YsflFw0wMDA5MDEwM + TQwMjRaMAwwCgYDVR0VBAMKAQQwIwIEOWGHDRcNMDAwOTA2MDcwMTE2WjAMMAoGA1UdFQQDCgEEMC + MCBDliz/4XDTAwMDkwNjA3MDcwNVowDDAKBgNVHRUEAwoBBDAjAgQ5m3S6Fw0wMDA5MjAwNzA2NTd + aMAwwCgYDVR0VBAMKAQQwIwIEOy6/hhcNMDEwNzAzMDYxMDQyWjAMMAoGA1UdFQQDCgEEMCMCBDtB + Yw4XDTAxMDcwMzA2MTkxNlowDDAKBgNVHRUEAwoBBDAjAgQ7MEG6Fw0wMTA3MTAwODA5NTNaMAwwC + gYDVR0VBAMKAQQwIwIEOy68CxcNMDEwNzExMDYxMzI5WjAMMAoGA1UdFQQDCgEEMCMCBDswSOsXDT + AxMDgwMTA0MTkyM1owDDAKBgNVHRUEAwoBBTAjAgQ7MYgeFw0wMTA4MDEwNDIwMDJaMAwwCgYDVR0 + VBAMKAQQwIwIEOzGHeBcNMDEwODAyMDI0NTM4WjAMMAoGA1UdFQQDCgEEMCMCBDsuveEXDTAxMDgz + MDA2MjIwOFowDDAKBgNVHRUEAwoBBDAjAgQ7jdxLFw0wMTA4MzAwNjQzMjRaMAwwCgYDVR0VBAMKA + QQwIwIEOy67QxcNMDExMTIxMDYyMDUzWjAMMAoGA1UdFQQDCgEEMCMCBDsDNXcXDTAyMDUxNzA4ND + Y0MlowDDAKBgNVHRUEAwoBBDAjAgQ7AzXMFw0wMjA1MTcwODQ2NTdaMAwwCgYDVR0VBAMKAQSgMjA + wMAsGA1UdFAQEAgIQoDATBgNVHSMEDDAKgAhISAKVrWisNzAMBgNVHRwBAf8EAjAAMA0GCSqGSIb3 + DQEBBQUAA4IBAQA1xNXgyrtVB5LSOc76JF+aJzf8IfJGqF04CMzbo4lDpec/LgOrTSFV223ccJzuq + cnxGUfDbXFfSWDHGnj9HLLTCkrS3clL1TPVjGXg5mFu1l6DCfcP2v4i4dlradNYDQg/AVBoJsYa3l + efSFHw8RFXNHJWwIjJA6J0CBJ/8Uq2ywr8umdndb10RLtPWp66A7wxu7OvTjt68d3LgSniQ0mIJCn + 4ooE30oF/ew0EznbxlSCNRPpB8jYYJTibGrTUVU43lr8h3URIgBkA4InOhuDv0ePMSCDSxBUhY0+G + eKo+YiXHy4SGUGLakahuq/hlGTRJJUddqFA1dNZdOUl23nVE + +dn: cn=charlie,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: charlie +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= + +dn: cn=beta,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: beta +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= +certificateRevocationList;binary:: MIIP0TCCDrkCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzA + JBgNVBAYTAkFVMSswKQYDVQQKEyJDZXJ0aWZpY2F0ZXMgQXVzdHJhbGlhIFB0eSBMaW1pdGVkMSUw + IwYDVQQDExxDQVBMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTAwLgYKCZImiZPyLGQBAxQgY2FAY + 2VydGlmaWNhdGVzLWF1c3RyYWxpYS5jb20uYXUXDTAzMDcyMjAxMzAyMFoXDTAzMTEwMzAxMzUyMF + owgg27MCMCBDi/biUXDTAwMDMwNjA2MjEzM1owDDAKBgNVHRUEAwoBBDAjAgQ5Il0KFw0wMDA1MjM + wODAwNDNaMAwwCgYDVR0VBAMKAQQwIwIEOSo6ZxcNMDAwNTI5MDIyNTQzWjAMMAoGA1UdFQQDCgEE + MCMCBDkx1QAXDTAwMDUyOTAzMzYwMVowDDAKBgNVHRUEAwoBBDAjAgQ5Pd7GFw0wMDA2MDcwNTM3M + jRaMAwwCgYDVR0VBAMKAQQwIwIEOUcavBcNMDAwNjE0MDc0MjExWjAMMAoGA1UdFQQDCgEEMCMCBD + lIlLYXDTAwMDYxNTA4MzY1NlowDDAKBgNVHRUEAwoBBDAjAgQ5SeOkFw0wMDA2MTYwODIzMDVaMAw + wCgYDVR0VBAMKAQQwIwIEOUiGjRcNMDAwNjE2MDgyMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ30oX + DTAwMDYyOTA4MDQyM1owDDAKBgNVHRUEAwoBBDAjAgQ5SdUjFw0wMDA2MjkwODA1NDVaMAwwCgYDV + R0VBAMKAQQwIwIEOTHlfRcNMDAwNjMwMDYwNjA1WjAMMAoGA1UdFQQDCgEEMCMCBDkzV6EXDTAwMD + YzMDA2MDYxMVowDDAKBgNVHRUEAwoBBDAjAgQ5SIFOFw0wMDA2MzAwNjA2MjFaMAwwCgYDVR0VBAM + KAQQwIwIEOUiCbBcNMDAwNjMwMDYwNjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlIgzkXDTAwMDYzMDA2 + MDYzNlowDDAKBgNVHRUEAwoBBDAjAgQ5SIQEFw0wMDA2MzAwNjA2NDFaMAwwCgYDVR0VBAMKAQQwI + wIEOUiFBBcNMDAwNjMwMDYwNjQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlIhfQXDTAwMDYzMDA2MDY1NV + owDDAKBgNVHRUEAwoBBDAjAgQ5SIcmFw0wMDA2MzAwNjA3MDJaMAwwCgYDVR0VBAMKAQQwIwIEOUi + H4hcNMDAwNjMwMDYwNzA4WjAMMAoGA1UdFQQDCgEEMCMCBDlIiGUXDTAwMDYzMDA2MDcxNFowDDAK + BgNVHRUEAwoBBDAjAgQ5SIjaFw0wMDA2MzAwNjA3NDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiJhRcNM + DAwNjMwMDYwNzU3WjAMMAoGA1UdFQQDCgEEMCMCBDlIjoIXDTAwMDYzMDA2MDgwNFowDDAKBgNVHR + UEAwoBBDAjAgQ5SI89Fw0wMDA2MzAwNjA4MTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiP1RcNMDAwNjM + wMDYwODE1WjAMMAoGA1UdFQQDCgEEMCMCBDlIkEoXDTAwMDYzMDA2MDg0NVowDDAKBgNVHRUEAwoB + BDAjAgQ5SJC7Fw0wMDA2MzAwNjA4NTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiReRcNMDAwNjMwMDYwO + DU2WjAMMAoGA1UdFQQDCgEEMCMCBDlIkgMXDTAwMDYzMDA2MDkwNFowDDAKBgNVHRUEAwoBBDAjAg + Q5SJKqFw0wMDA2MzAwNjA5MDlaMAwwCgYDVR0VBAMKAQQwIwIEOUiTJhcNMDAwNjMwMDYwOTE2WjA + MMAoGA1UdFQQDCgEEMCMCBDlIk5AXDTAwMDYzMDA2MDkyMVowDDAKBgNVHRUEAwoBBDAjAgQ5SJQ3 + Fw0wMDA2MzAwNjA5MjZaMAwwCgYDVR0VBAMKAQQwIwIEOUiVXhcNMDAwNjMwMDYwOTMyWjAMMAoGA + 1UdFQQDCgEEMCMCBDlIlgcXDTAwMDYzMDA2MDkzOFowDDAKBgNVHRUEAwoBBDAjAgQ5SJazFw0wMD + A2MzAwNjA5NDZaMAwwCgYDVR0VBAMKAQQwIwIEOUiXPxcNMDAwNjMwMDYwOTUxWjAMMAoGA1UdFQQ + DCgEEMCMCBDlIl7IXDTAwMDYzMDA2MDk1OFowDDAKBgNVHRUEAwoBBDAjAgQ5SJg0Fw0wMDA2MzAw + NjEwMDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiZBBcNMDAwNjMwMDYxMDA5WjAMMAoGA1UdFQQDCgEEM + CMCBDlJzksXDTAwMDYzMDA2MTAxNVowDDAKBgNVHRUEAwoBBDAjAgQ5Sc64Fw0wMDA2MzAwNjEwMj + FaMAwwCgYDVR0VBAMKAQQwIwIEOUnPVxcNMDAwNjMwMDYxMDI3WjAMMAoGA1UdFQQDCgEEMCMCBDl + J0BAXDTAwMDYzMDA2MTAzNVowDDAKBgNVHRUEAwoBBDAjAgQ5SdDKFw0wMDA2MzAwNjEwNDNaMAww + CgYDVR0VBAMKAQQwIwIEOUnRZRcNMDAwNjMwMDYxMDQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ0d0XD + TAwMDYzMDA2MTA1N1owDDAKBgNVHRUEAwoBBDAjAgQ5SdJ4Fw0wMDA2MzAwNjExMTVaMAwwCgYDVR + 0VBAMKAQQwIwIEOUnTDBcNMDAwNjMwMDYxMTIxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ04oXDTAwMDY + zMDA2MTEyN1owDDAKBgNVHRUEAwoBBDAjAgQ5SdQSFw0wMDA2MzAwNjExMzNaMAwwCgYDVR0VBAMK + AQQwIwIEOUnUoBcNMDAwNjMwMDYxMTM5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ2SQXDTAwMDYzMDA2M + TE1M1owDDAKBgNVHRUEAwoBBDAjAgQ5SdmwFw0wMDA2MzAwNjEyMDVaMAwwCgYDVR0VBAMKAQQwIw + IEOUnaTBcNMDAwNjMwMDYxMjExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ2vYXDTAwMDYzMDA2MTIxN1o + wDDAKBgNVHRUEAwoBBDAjAgQ5SducFw0wMDA2MzAwNjEyMjNaMAwwCgYDVR0VBAMKAQQwIwIEOUnc + IRcNMDAwNjMwMDYxMjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3KQXDTAwMDYzMDA2MTIzM1owDDAKB + gNVHRUEAwoBBDAjAgQ5Sd2xFw0wMDA2MzAwNjEyNDBaMAwwCgYDVR0VBAMKAQQwIwIEOUneRBcNMD + AwNjMwMDYxMjQ1WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3skXDTAwMDYzMDA2MTI1MVowDDAKBgNVHRU + EAwoBBDAjAgQ5Sd/IFw0wMDA2MzAwNjEzMDJaMAwwCgYDVR0VBAMKAQQwIwIEOUngPRcNMDAwNjMw + MDYxMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4M8XDTAwMDYzMDA2MTMyMFowDDAKBgNVHRUEAwoBB + DAjAgQ5SeE/Fw0wMDA2MzAwNjEzMjVaMAwwCgYDVR0VBAMKAQQwIwIEOUnh2BcNMDAwNjMwMDYxMz + MxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4mgXDTAwMDYzMDA2MTMzOVowDDAKBgNVHRUEAwoBBDAjAgQ + 5SeQvFw0wMDA2MzAwNjEzNDRaMAwwCgYDVR0VBAMKAQQwIwIEOVsGJRcNMDAwNjMwMDYxMzUwWjAM + MAoGA1UdFQQDCgEEMCMCBDlbBusXDTAwMDYzMDA2MTM1NlowDDAKBgNVHRUEAwoBBDAjAgQ5XEKPF + w0wMDA3MTMwOTAwMzhaMAwwCgYDVR0VBAMKAQQwIwIEOVxEKRcNMDAwNzEzMDkwMDQ1WjAMMAoGA1 + UdFQQDCgEEMCMCBDlcRukXDTAwMDcyNjA2MjkyN1owDDAKBgNVHRUEAwoBBDAjAgQ5fohgFw0wMDA + 3MjYwNjQ2NTFaMAwwCgYDVR0VBAMKAQQwIwIEOaNqPBcNMDAwODIzMDYwOTQxWjAMMAoGA1UdFQQD + CgEFMCMCBDlcX2QXDTAwMDgzMTA3MTM1OFowDDAKBgNVHRUEAwoBBDAjAgQ5YsflFw0wMDA5MDEwM + TQwMjRaMAwwCgYDVR0VBAMKAQQwIwIEOWGHDRcNMDAwOTA2MDcwMTE2WjAMMAoGA1UdFQQDCgEEMC + MCBDliz/4XDTAwMDkwNjA3MDcwNVowDDAKBgNVHRUEAwoBBDAjAgQ5m3S6Fw0wMDA5MjAwNzA2NTd + aMAwwCgYDVR0VBAMKAQQwIwIEOy6/hhcNMDEwNzAzMDYxMDQyWjAMMAoGA1UdFQQDCgEEMCMCBDtB + Yw4XDTAxMDcwMzA2MTkxNlowDDAKBgNVHRUEAwoBBDAjAgQ7MEG6Fw0wMTA3MTAwODA5NTNaMAwwC + gYDVR0VBAMKAQQwIwIEOy68CxcNMDEwNzExMDYxMzI5WjAMMAoGA1UdFQQDCgEEMCMCBDswSOsXDT + AxMDgwMTA0MTkyM1owDDAKBgNVHRUEAwoBBTAjAgQ7MYgeFw0wMTA4MDEwNDIwMDJaMAwwCgYDVR0 + VBAMKAQQwIwIEOzGHeBcNMDEwODAyMDI0NTM4WjAMMAoGA1UdFQQDCgEEMCMCBDsuveEXDTAxMDgz + MDA2MjIwOFowDDAKBgNVHRUEAwoBBDAjAgQ7jdxLFw0wMTA4MzAwNjQzMjRaMAwwCgYDVR0VBAMKA + QQwIwIEOy67QxcNMDExMTIxMDYyMDUzWjAMMAoGA1UdFQQDCgEEMCMCBDsDNXcXDTAyMDUxNzA4ND + Y0MlowDDAKBgNVHRUEAwoBBDAjAgQ7AzXMFw0wMjA1MTcwODQ2NTdaMAwwCgYDVR0VBAMKAQSgMjA + wMAsGA1UdFAQEAgIQoDATBgNVHSMEDDAKgAhISAKVrWisNzAMBgNVHRwBAf8EAjAAMA0GCSqGSIb3 + DQEBBQUAA4IBAQA1xNXgyrtVB5LSOc76JF+aJzf8IfJGqF04CMzbo4lDpec/LgOrTSFV223ccJzuq + cnxGUfDbXFfSWDHGnj9HLLTCkrS3clL1TPVjGXg5mFu1l6DCfcP2v4i4dlradNYDQg/AVBoJsYa3l + efSFHw8RFXNHJWwIjJA6J0CBJ/8Uq2ywr8umdndb10RLtPWp66A7wxu7OvTjt68d3LgSniQ0mIJCn + 4ooE30oF/ew0EznbxlSCNRPpB8jYYJTibGrTUVU43lr8h3URIgBkA4InOhuDv0ePMSCDSxBUhY0+G + eKo+YiXHy4SGUGLakahuq/hlGTRJJUddqFA1dNZdOUl23nVE + +dn: cn=charlie,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: charlie +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= + +dn: cn=beta,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: beta +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= +certificateRevocationList;binary:: MIIP0TCCDrkCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzA + JBgNVBAYTAkFVMSswKQYDVQQKEyJDZXJ0aWZpY2F0ZXMgQXVzdHJhbGlhIFB0eSBMaW1pdGVkMSUw + IwYDVQQDExxDQVBMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTAwLgYKCZImiZPyLGQBAxQgY2FAY + 2VydGlmaWNhdGVzLWF1c3RyYWxpYS5jb20uYXUXDTAzMDcyMjAxMzAyMFoXDTAzMTEwMzAxMzUyMF + owgg27MCMCBDi/biUXDTAwMDMwNjA2MjEzM1owDDAKBgNVHRUEAwoBBDAjAgQ5Il0KFw0wMDA1MjM + wODAwNDNaMAwwCgYDVR0VBAMKAQQwIwIEOSo6ZxcNMDAwNTI5MDIyNTQzWjAMMAoGA1UdFQQDCgEE + MCMCBDkx1QAXDTAwMDUyOTAzMzYwMVowDDAKBgNVHRUEAwoBBDAjAgQ5Pd7GFw0wMDA2MDcwNTM3M + jRaMAwwCgYDVR0VBAMKAQQwIwIEOUcavBcNMDAwNjE0MDc0MjExWjAMMAoGA1UdFQQDCgEEMCMCBD + lIlLYXDTAwMDYxNTA4MzY1NlowDDAKBgNVHRUEAwoBBDAjAgQ5SeOkFw0wMDA2MTYwODIzMDVaMAw + wCgYDVR0VBAMKAQQwIwIEOUiGjRcNMDAwNjE2MDgyMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ30oX + DTAwMDYyOTA4MDQyM1owDDAKBgNVHRUEAwoBBDAjAgQ5SdUjFw0wMDA2MjkwODA1NDVaMAwwCgYDV + R0VBAMKAQQwIwIEOTHlfRcNMDAwNjMwMDYwNjA1WjAMMAoGA1UdFQQDCgEEMCMCBDkzV6EXDTAwMD + YzMDA2MDYxMVowDDAKBgNVHRUEAwoBBDAjAgQ5SIFOFw0wMDA2MzAwNjA2MjFaMAwwCgYDVR0VBAM + KAQQwIwIEOUiCbBcNMDAwNjMwMDYwNjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlIgzkXDTAwMDYzMDA2 + MDYzNlowDDAKBgNVHRUEAwoBBDAjAgQ5SIQEFw0wMDA2MzAwNjA2NDFaMAwwCgYDVR0VBAMKAQQwI + wIEOUiFBBcNMDAwNjMwMDYwNjQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlIhfQXDTAwMDYzMDA2MDY1NV + owDDAKBgNVHRUEAwoBBDAjAgQ5SIcmFw0wMDA2MzAwNjA3MDJaMAwwCgYDVR0VBAMKAQQwIwIEOUi + H4hcNMDAwNjMwMDYwNzA4WjAMMAoGA1UdFQQDCgEEMCMCBDlIiGUXDTAwMDYzMDA2MDcxNFowDDAK + BgNVHRUEAwoBBDAjAgQ5SIjaFw0wMDA2MzAwNjA3NDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiJhRcNM + DAwNjMwMDYwNzU3WjAMMAoGA1UdFQQDCgEEMCMCBDlIjoIXDTAwMDYzMDA2MDgwNFowDDAKBgNVHR + UEAwoBBDAjAgQ5SI89Fw0wMDA2MzAwNjA4MTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiP1RcNMDAwNjM + wMDYwODE1WjAMMAoGA1UdFQQDCgEEMCMCBDlIkEoXDTAwMDYzMDA2MDg0NVowDDAKBgNVHRUEAwoB + BDAjAgQ5SJC7Fw0wMDA2MzAwNjA4NTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiReRcNMDAwNjMwMDYwO + DU2WjAMMAoGA1UdFQQDCgEEMCMCBDlIkgMXDTAwMDYzMDA2MDkwNFowDDAKBgNVHRUEAwoBBDAjAg + Q5SJKqFw0wMDA2MzAwNjA5MDlaMAwwCgYDVR0VBAMKAQQwIwIEOUiTJhcNMDAwNjMwMDYwOTE2WjA + MMAoGA1UdFQQDCgEEMCMCBDlIk5AXDTAwMDYzMDA2MDkyMVowDDAKBgNVHRUEAwoBBDAjAgQ5SJQ3 + Fw0wMDA2MzAwNjA5MjZaMAwwCgYDVR0VBAMKAQQwIwIEOUiVXhcNMDAwNjMwMDYwOTMyWjAMMAoGA + 1UdFQQDCgEEMCMCBDlIlgcXDTAwMDYzMDA2MDkzOFowDDAKBgNVHRUEAwoBBDAjAgQ5SJazFw0wMD + A2MzAwNjA5NDZaMAwwCgYDVR0VBAMKAQQwIwIEOUiXPxcNMDAwNjMwMDYwOTUxWjAMMAoGA1UdFQQ + DCgEEMCMCBDlIl7IXDTAwMDYzMDA2MDk1OFowDDAKBgNVHRUEAwoBBDAjAgQ5SJg0Fw0wMDA2MzAw + NjEwMDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiZBBcNMDAwNjMwMDYxMDA5WjAMMAoGA1UdFQQDCgEEM + CMCBDlJzksXDTAwMDYzMDA2MTAxNVowDDAKBgNVHRUEAwoBBDAjAgQ5Sc64Fw0wMDA2MzAwNjEwMj + FaMAwwCgYDVR0VBAMKAQQwIwIEOUnPVxcNMDAwNjMwMDYxMDI3WjAMMAoGA1UdFQQDCgEEMCMCBDl + J0BAXDTAwMDYzMDA2MTAzNVowDDAKBgNVHRUEAwoBBDAjAgQ5SdDKFw0wMDA2MzAwNjEwNDNaMAww + CgYDVR0VBAMKAQQwIwIEOUnRZRcNMDAwNjMwMDYxMDQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ0d0XD + TAwMDYzMDA2MTA1N1owDDAKBgNVHRUEAwoBBDAjAgQ5SdJ4Fw0wMDA2MzAwNjExMTVaMAwwCgYDVR + 0VBAMKAQQwIwIEOUnTDBcNMDAwNjMwMDYxMTIxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ04oXDTAwMDY + zMDA2MTEyN1owDDAKBgNVHRUEAwoBBDAjAgQ5SdQSFw0wMDA2MzAwNjExMzNaMAwwCgYDVR0VBAMK + AQQwIwIEOUnUoBcNMDAwNjMwMDYxMTM5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ2SQXDTAwMDYzMDA2M + TE1M1owDDAKBgNVHRUEAwoBBDAjAgQ5SdmwFw0wMDA2MzAwNjEyMDVaMAwwCgYDVR0VBAMKAQQwIw + IEOUnaTBcNMDAwNjMwMDYxMjExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ2vYXDTAwMDYzMDA2MTIxN1o + wDDAKBgNVHRUEAwoBBDAjAgQ5SducFw0wMDA2MzAwNjEyMjNaMAwwCgYDVR0VBAMKAQQwIwIEOUnc + IRcNMDAwNjMwMDYxMjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3KQXDTAwMDYzMDA2MTIzM1owDDAKB + gNVHRUEAwoBBDAjAgQ5Sd2xFw0wMDA2MzAwNjEyNDBaMAwwCgYDVR0VBAMKAQQwIwIEOUneRBcNMD + AwNjMwMDYxMjQ1WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3skXDTAwMDYzMDA2MTI1MVowDDAKBgNVHRU + EAwoBBDAjAgQ5Sd/IFw0wMDA2MzAwNjEzMDJaMAwwCgYDVR0VBAMKAQQwIwIEOUngPRcNMDAwNjMw + MDYxMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4M8XDTAwMDYzMDA2MTMyMFowDDAKBgNVHRUEAwoBB + DAjAgQ5SeE/Fw0wMDA2MzAwNjEzMjVaMAwwCgYDVR0VBAMKAQQwIwIEOUnh2BcNMDAwNjMwMDYxMz + MxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4mgXDTAwMDYzMDA2MTMzOVowDDAKBgNVHRUEAwoBBDAjAgQ + 5SeQvFw0wMDA2MzAwNjEzNDRaMAwwCgYDVR0VBAMKAQQwIwIEOVsGJRcNMDAwNjMwMDYxMzUwWjAM + MAoGA1UdFQQDCgEEMCMCBDlbBusXDTAwMDYzMDA2MTM1NlowDDAKBgNVHRUEAwoBBDAjAgQ5XEKPF + w0wMDA3MTMwOTAwMzhaMAwwCgYDVR0VBAMKAQQwIwIEOVxEKRcNMDAwNzEzMDkwMDQ1WjAMMAoGA1 + UdFQQDCgEEMCMCBDlcRukXDTAwMDcyNjA2MjkyN1owDDAKBgNVHRUEAwoBBDAjAgQ5fohgFw0wMDA + 3MjYwNjQ2NTFaMAwwCgYDVR0VBAMKAQQwIwIEOaNqPBcNMDAwODIzMDYwOTQxWjAMMAoGA1UdFQQD + CgEFMCMCBDlcX2QXDTAwMDgzMTA3MTM1OFowDDAKBgNVHRUEAwoBBDAjAgQ5YsflFw0wMDA5MDEwM + TQwMjRaMAwwCgYDVR0VBAMKAQQwIwIEOWGHDRcNMDAwOTA2MDcwMTE2WjAMMAoGA1UdFQQDCgEEMC + MCBDliz/4XDTAwMDkwNjA3MDcwNVowDDAKBgNVHRUEAwoBBDAjAgQ5m3S6Fw0wMDA5MjAwNzA2NTd + aMAwwCgYDVR0VBAMKAQQwIwIEOy6/hhcNMDEwNzAzMDYxMDQyWjAMMAoGA1UdFQQDCgEEMCMCBDtB + Yw4XDTAxMDcwMzA2MTkxNlowDDAKBgNVHRUEAwoBBDAjAgQ7MEG6Fw0wMTA3MTAwODA5NTNaMAwwC + gYDVR0VBAMKAQQwIwIEOy68CxcNMDEwNzExMDYxMzI5WjAMMAoGA1UdFQQDCgEEMCMCBDswSOsXDT + AxMDgwMTA0MTkyM1owDDAKBgNVHRUEAwoBBTAjAgQ7MYgeFw0wMTA4MDEwNDIwMDJaMAwwCgYDVR0 + VBAMKAQQwIwIEOzGHeBcNMDEwODAyMDI0NTM4WjAMMAoGA1UdFQQDCgEEMCMCBDsuveEXDTAxMDgz + MDA2MjIwOFowDDAKBgNVHRUEAwoBBDAjAgQ7jdxLFw0wMTA4MzAwNjQzMjRaMAwwCgYDVR0VBAMKA + QQwIwIEOy67QxcNMDExMTIxMDYyMDUzWjAMMAoGA1UdFQQDCgEEMCMCBDsDNXcXDTAyMDUxNzA4ND + Y0MlowDDAKBgNVHRUEAwoBBDAjAgQ7AzXMFw0wMjA1MTcwODQ2NTdaMAwwCgYDVR0VBAMKAQSgMjA + wMAsGA1UdFAQEAgIQoDATBgNVHSMEDDAKgAhISAKVrWisNzAMBgNVHRwBAf8EAjAAMA0GCSqGSIb3 + DQEBBQUAA4IBAQA1xNXgyrtVB5LSOc76JF+aJzf8IfJGqF04CMzbo4lDpec/LgOrTSFV223ccJzuq + cnxGUfDbXFfSWDHGnj9HLLTCkrS3clL1TPVjGXg5mFu1l6DCfcP2v4i4dlradNYDQg/AVBoJsYa3l + efSFHw8RFXNHJWwIjJA6J0CBJ/8Uq2ywr8umdndb10RLtPWp66A7wxu7OvTjt68d3LgSniQ0mIJCn + 4ooE30oF/ew0EznbxlSCNRPpB8jYYJTibGrTUVU43lr8h3URIgBkA4InOhuDv0ePMSCDSxBUhY0+G + eKo+YiXHy4SGUGLakahuq/hlGTRJJUddqFA1dNZdOUl23nVE + +dn: cn=charlie,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: charlie +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= + +dn: cn=beta,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: beta +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= +certificateRevocationList;binary:: MIIP0TCCDrkCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzA + JBgNVBAYTAkFVMSswKQYDVQQKEyJDZXJ0aWZpY2F0ZXMgQXVzdHJhbGlhIFB0eSBMaW1pdGVkMSUw + IwYDVQQDExxDQVBMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTAwLgYKCZImiZPyLGQBAxQgY2FAY + 2VydGlmaWNhdGVzLWF1c3RyYWxpYS5jb20uYXUXDTAzMDcyMjAxMzAyMFoXDTAzMTEwMzAxMzUyMF + owgg27MCMCBDi/biUXDTAwMDMwNjA2MjEzM1owDDAKBgNVHRUEAwoBBDAjAgQ5Il0KFw0wMDA1MjM + wODAwNDNaMAwwCgYDVR0VBAMKAQQwIwIEOSo6ZxcNMDAwNTI5MDIyNTQzWjAMMAoGA1UdFQQDCgEE + MCMCBDkx1QAXDTAwMDUyOTAzMzYwMVowDDAKBgNVHRUEAwoBBDAjAgQ5Pd7GFw0wMDA2MDcwNTM3M + jRaMAwwCgYDVR0VBAMKAQQwIwIEOUcavBcNMDAwNjE0MDc0MjExWjAMMAoGA1UdFQQDCgEEMCMCBD + lIlLYXDTAwMDYxNTA4MzY1NlowDDAKBgNVHRUEAwoBBDAjAgQ5SeOkFw0wMDA2MTYwODIzMDVaMAw + wCgYDVR0VBAMKAQQwIwIEOUiGjRcNMDAwNjE2MDgyMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ30oX + DTAwMDYyOTA4MDQyM1owDDAKBgNVHRUEAwoBBDAjAgQ5SdUjFw0wMDA2MjkwODA1NDVaMAwwCgYDV + R0VBAMKAQQwIwIEOTHlfRcNMDAwNjMwMDYwNjA1WjAMMAoGA1UdFQQDCgEEMCMCBDkzV6EXDTAwMD + YzMDA2MDYxMVowDDAKBgNVHRUEAwoBBDAjAgQ5SIFOFw0wMDA2MzAwNjA2MjFaMAwwCgYDVR0VBAM + KAQQwIwIEOUiCbBcNMDAwNjMwMDYwNjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlIgzkXDTAwMDYzMDA2 + MDYzNlowDDAKBgNVHRUEAwoBBDAjAgQ5SIQEFw0wMDA2MzAwNjA2NDFaMAwwCgYDVR0VBAMKAQQwI + wIEOUiFBBcNMDAwNjMwMDYwNjQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlIhfQXDTAwMDYzMDA2MDY1NV + owDDAKBgNVHRUEAwoBBDAjAgQ5SIcmFw0wMDA2MzAwNjA3MDJaMAwwCgYDVR0VBAMKAQQwIwIEOUi + H4hcNMDAwNjMwMDYwNzA4WjAMMAoGA1UdFQQDCgEEMCMCBDlIiGUXDTAwMDYzMDA2MDcxNFowDDAK + BgNVHRUEAwoBBDAjAgQ5SIjaFw0wMDA2MzAwNjA3NDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiJhRcNM + DAwNjMwMDYwNzU3WjAMMAoGA1UdFQQDCgEEMCMCBDlIjoIXDTAwMDYzMDA2MDgwNFowDDAKBgNVHR + UEAwoBBDAjAgQ5SI89Fw0wMDA2MzAwNjA4MTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiP1RcNMDAwNjM + wMDYwODE1WjAMMAoGA1UdFQQDCgEEMCMCBDlIkEoXDTAwMDYzMDA2MDg0NVowDDAKBgNVHRUEAwoB + BDAjAgQ5SJC7Fw0wMDA2MzAwNjA4NTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiReRcNMDAwNjMwMDYwO + DU2WjAMMAoGA1UdFQQDCgEEMCMCBDlIkgMXDTAwMDYzMDA2MDkwNFowDDAKBgNVHRUEAwoBBDAjAg + Q5SJKqFw0wMDA2MzAwNjA5MDlaMAwwCgYDVR0VBAMKAQQwIwIEOUiTJhcNMDAwNjMwMDYwOTE2WjA + MMAoGA1UdFQQDCgEEMCMCBDlIk5AXDTAwMDYzMDA2MDkyMVowDDAKBgNVHRUEAwoBBDAjAgQ5SJQ3 + Fw0wMDA2MzAwNjA5MjZaMAwwCgYDVR0VBAMKAQQwIwIEOUiVXhcNMDAwNjMwMDYwOTMyWjAMMAoGA + 1UdFQQDCgEEMCMCBDlIlgcXDTAwMDYzMDA2MDkzOFowDDAKBgNVHRUEAwoBBDAjAgQ5SJazFw0wMD + A2MzAwNjA5NDZaMAwwCgYDVR0VBAMKAQQwIwIEOUiXPxcNMDAwNjMwMDYwOTUxWjAMMAoGA1UdFQQ + DCgEEMCMCBDlIl7IXDTAwMDYzMDA2MDk1OFowDDAKBgNVHRUEAwoBBDAjAgQ5SJg0Fw0wMDA2MzAw + NjEwMDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiZBBcNMDAwNjMwMDYxMDA5WjAMMAoGA1UdFQQDCgEEM + CMCBDlJzksXDTAwMDYzMDA2MTAxNVowDDAKBgNVHRUEAwoBBDAjAgQ5Sc64Fw0wMDA2MzAwNjEwMj + FaMAwwCgYDVR0VBAMKAQQwIwIEOUnPVxcNMDAwNjMwMDYxMDI3WjAMMAoGA1UdFQQDCgEEMCMCBDl + J0BAXDTAwMDYzMDA2MTAzNVowDDAKBgNVHRUEAwoBBDAjAgQ5SdDKFw0wMDA2MzAwNjEwNDNaMAww + CgYDVR0VBAMKAQQwIwIEOUnRZRcNMDAwNjMwMDYxMDQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ0d0XD + TAwMDYzMDA2MTA1N1owDDAKBgNVHRUEAwoBBDAjAgQ5SdJ4Fw0wMDA2MzAwNjExMTVaMAwwCgYDVR + 0VBAMKAQQwIwIEOUnTDBcNMDAwNjMwMDYxMTIxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ04oXDTAwMDY + zMDA2MTEyN1owDDAKBgNVHRUEAwoBBDAjAgQ5SdQSFw0wMDA2MzAwNjExMzNaMAwwCgYDVR0VBAMK + AQQwIwIEOUnUoBcNMDAwNjMwMDYxMTM5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ2SQXDTAwMDYzMDA2M + TE1M1owDDAKBgNVHRUEAwoBBDAjAgQ5SdmwFw0wMDA2MzAwNjEyMDVaMAwwCgYDVR0VBAMKAQQwIw + IEOUnaTBcNMDAwNjMwMDYxMjExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ2vYXDTAwMDYzMDA2MTIxN1o + wDDAKBgNVHRUEAwoBBDAjAgQ5SducFw0wMDA2MzAwNjEyMjNaMAwwCgYDVR0VBAMKAQQwIwIEOUnc + IRcNMDAwNjMwMDYxMjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3KQXDTAwMDYzMDA2MTIzM1owDDAKB + gNVHRUEAwoBBDAjAgQ5Sd2xFw0wMDA2MzAwNjEyNDBaMAwwCgYDVR0VBAMKAQQwIwIEOUneRBcNMD + AwNjMwMDYxMjQ1WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3skXDTAwMDYzMDA2MTI1MVowDDAKBgNVHRU + EAwoBBDAjAgQ5Sd/IFw0wMDA2MzAwNjEzMDJaMAwwCgYDVR0VBAMKAQQwIwIEOUngPRcNMDAwNjMw + MDYxMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4M8XDTAwMDYzMDA2MTMyMFowDDAKBgNVHRUEAwoBB + DAjAgQ5SeE/Fw0wMDA2MzAwNjEzMjVaMAwwCgYDVR0VBAMKAQQwIwIEOUnh2BcNMDAwNjMwMDYxMz + MxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4mgXDTAwMDYzMDA2MTMzOVowDDAKBgNVHRUEAwoBBDAjAgQ + 5SeQvFw0wMDA2MzAwNjEzNDRaMAwwCgYDVR0VBAMKAQQwIwIEOVsGJRcNMDAwNjMwMDYxMzUwWjAM + MAoGA1UdFQQDCgEEMCMCBDlbBusXDTAwMDYzMDA2MTM1NlowDDAKBgNVHRUEAwoBBDAjAgQ5XEKPF + w0wMDA3MTMwOTAwMzhaMAwwCgYDVR0VBAMKAQQwIwIEOVxEKRcNMDAwNzEzMDkwMDQ1WjAMMAoGA1 + UdFQQDCgEEMCMCBDlcRukXDTAwMDcyNjA2MjkyN1owDDAKBgNVHRUEAwoBBDAjAgQ5fohgFw0wMDA + 3MjYwNjQ2NTFaMAwwCgYDVR0VBAMKAQQwIwIEOaNqPBcNMDAwODIzMDYwOTQxWjAMMAoGA1UdFQQD + CgEFMCMCBDlcX2QXDTAwMDgzMTA3MTM1OFowDDAKBgNVHRUEAwoBBDAjAgQ5YsflFw0wMDA5MDEwM + TQwMjRaMAwwCgYDVR0VBAMKAQQwIwIEOWGHDRcNMDAwOTA2MDcwMTE2WjAMMAoGA1UdFQQDCgEEMC + MCBDliz/4XDTAwMDkwNjA3MDcwNVowDDAKBgNVHRUEAwoBBDAjAgQ5m3S6Fw0wMDA5MjAwNzA2NTd + aMAwwCgYDVR0VBAMKAQQwIwIEOy6/hhcNMDEwNzAzMDYxMDQyWjAMMAoGA1UdFQQDCgEEMCMCBDtB + Yw4XDTAxMDcwMzA2MTkxNlowDDAKBgNVHRUEAwoBBDAjAgQ7MEG6Fw0wMTA3MTAwODA5NTNaMAwwC + gYDVR0VBAMKAQQwIwIEOy68CxcNMDEwNzExMDYxMzI5WjAMMAoGA1UdFQQDCgEEMCMCBDswSOsXDT + AxMDgwMTA0MTkyM1owDDAKBgNVHRUEAwoBBTAjAgQ7MYgeFw0wMTA4MDEwNDIwMDJaMAwwCgYDVR0 + VBAMKAQQwIwIEOzGHeBcNMDEwODAyMDI0NTM4WjAMMAoGA1UdFQQDCgEEMCMCBDsuveEXDTAxMDgz + MDA2MjIwOFowDDAKBgNVHRUEAwoBBDAjAgQ7jdxLFw0wMTA4MzAwNjQzMjRaMAwwCgYDVR0VBAMKA + QQwIwIEOy67QxcNMDExMTIxMDYyMDUzWjAMMAoGA1UdFQQDCgEEMCMCBDsDNXcXDTAyMDUxNzA4ND + Y0MlowDDAKBgNVHRUEAwoBBDAjAgQ7AzXMFw0wMjA1MTcwODQ2NTdaMAwwCgYDVR0VBAMKAQSgMjA + wMAsGA1UdFAQEAgIQoDATBgNVHSMEDDAKgAhISAKVrWisNzAMBgNVHRwBAf8EAjAAMA0GCSqGSIb3 + DQEBBQUAA4IBAQA1xNXgyrtVB5LSOc76JF+aJzf8IfJGqF04CMzbo4lDpec/LgOrTSFV223ccJzuq + cnxGUfDbXFfSWDHGnj9HLLTCkrS3clL1TPVjGXg5mFu1l6DCfcP2v4i4dlradNYDQg/AVBoJsYa3l + efSFHw8RFXNHJWwIjJA6J0CBJ/8Uq2ywr8umdndb10RLtPWp66A7wxu7OvTjt68d3LgSniQ0mIJCn + 4ooE30oF/ew0EznbxlSCNRPpB8jYYJTibGrTUVU43lr8h3URIgBkA4InOhuDv0ePMSCDSxBUhY0+G + eKo+YiXHy4SGUGLakahuq/hlGTRJJUddqFA1dNZdOUl23nVE + +dn: cn=charlie,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: charlie +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= + +dn: cn=beta,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: beta +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= +certificateRevocationList;binary:: MIIP0TCCDrkCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzA + JBgNVBAYTAkFVMSswKQYDVQQKEyJDZXJ0aWZpY2F0ZXMgQXVzdHJhbGlhIFB0eSBMaW1pdGVkMSUw + IwYDVQQDExxDQVBMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTAwLgYKCZImiZPyLGQBAxQgY2FAY + 2VydGlmaWNhdGVzLWF1c3RyYWxpYS5jb20uYXUXDTAzMDcyMjAxMzAyMFoXDTAzMTEwMzAxMzUyMF + owgg27MCMCBDi/biUXDTAwMDMwNjA2MjEzM1owDDAKBgNVHRUEAwoBBDAjAgQ5Il0KFw0wMDA1MjM + wODAwNDNaMAwwCgYDVR0VBAMKAQQwIwIEOSo6ZxcNMDAwNTI5MDIyNTQzWjAMMAoGA1UdFQQDCgEE + MCMCBDkx1QAXDTAwMDUyOTAzMzYwMVowDDAKBgNVHRUEAwoBBDAjAgQ5Pd7GFw0wMDA2MDcwNTM3M + jRaMAwwCgYDVR0VBAMKAQQwIwIEOUcavBcNMDAwNjE0MDc0MjExWjAMMAoGA1UdFQQDCgEEMCMCBD + lIlLYXDTAwMDYxNTA4MzY1NlowDDAKBgNVHRUEAwoBBDAjAgQ5SeOkFw0wMDA2MTYwODIzMDVaMAw + wCgYDVR0VBAMKAQQwIwIEOUiGjRcNMDAwNjE2MDgyMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ30oX + DTAwMDYyOTA4MDQyM1owDDAKBgNVHRUEAwoBBDAjAgQ5SdUjFw0wMDA2MjkwODA1NDVaMAwwCgYDV + R0VBAMKAQQwIwIEOTHlfRcNMDAwNjMwMDYwNjA1WjAMMAoGA1UdFQQDCgEEMCMCBDkzV6EXDTAwMD + YzMDA2MDYxMVowDDAKBgNVHRUEAwoBBDAjAgQ5SIFOFw0wMDA2MzAwNjA2MjFaMAwwCgYDVR0VBAM + KAQQwIwIEOUiCbBcNMDAwNjMwMDYwNjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlIgzkXDTAwMDYzMDA2 + MDYzNlowDDAKBgNVHRUEAwoBBDAjAgQ5SIQEFw0wMDA2MzAwNjA2NDFaMAwwCgYDVR0VBAMKAQQwI + wIEOUiFBBcNMDAwNjMwMDYwNjQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlIhfQXDTAwMDYzMDA2MDY1NV + owDDAKBgNVHRUEAwoBBDAjAgQ5SIcmFw0wMDA2MzAwNjA3MDJaMAwwCgYDVR0VBAMKAQQwIwIEOUi + H4hcNMDAwNjMwMDYwNzA4WjAMMAoGA1UdFQQDCgEEMCMCBDlIiGUXDTAwMDYzMDA2MDcxNFowDDAK + BgNVHRUEAwoBBDAjAgQ5SIjaFw0wMDA2MzAwNjA3NDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiJhRcNM + DAwNjMwMDYwNzU3WjAMMAoGA1UdFQQDCgEEMCMCBDlIjoIXDTAwMDYzMDA2MDgwNFowDDAKBgNVHR + UEAwoBBDAjAgQ5SI89Fw0wMDA2MzAwNjA4MTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiP1RcNMDAwNjM + wMDYwODE1WjAMMAoGA1UdFQQDCgEEMCMCBDlIkEoXDTAwMDYzMDA2MDg0NVowDDAKBgNVHRUEAwoB + BDAjAgQ5SJC7Fw0wMDA2MzAwNjA4NTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiReRcNMDAwNjMwMDYwO + DU2WjAMMAoGA1UdFQQDCgEEMCMCBDlIkgMXDTAwMDYzMDA2MDkwNFowDDAKBgNVHRUEAwoBBDAjAg + Q5SJKqFw0wMDA2MzAwNjA5MDlaMAwwCgYDVR0VBAMKAQQwIwIEOUiTJhcNMDAwNjMwMDYwOTE2WjA + MMAoGA1UdFQQDCgEEMCMCBDlIk5AXDTAwMDYzMDA2MDkyMVowDDAKBgNVHRUEAwoBBDAjAgQ5SJQ3 + Fw0wMDA2MzAwNjA5MjZaMAwwCgYDVR0VBAMKAQQwIwIEOUiVXhcNMDAwNjMwMDYwOTMyWjAMMAoGA + 1UdFQQDCgEEMCMCBDlIlgcXDTAwMDYzMDA2MDkzOFowDDAKBgNVHRUEAwoBBDAjAgQ5SJazFw0wMD + A2MzAwNjA5NDZaMAwwCgYDVR0VBAMKAQQwIwIEOUiXPxcNMDAwNjMwMDYwOTUxWjAMMAoGA1UdFQQ + DCgEEMCMCBDlIl7IXDTAwMDYzMDA2MDk1OFowDDAKBgNVHRUEAwoBBDAjAgQ5SJg0Fw0wMDA2MzAw + NjEwMDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiZBBcNMDAwNjMwMDYxMDA5WjAMMAoGA1UdFQQDCgEEM + CMCBDlJzksXDTAwMDYzMDA2MTAxNVowDDAKBgNVHRUEAwoBBDAjAgQ5Sc64Fw0wMDA2MzAwNjEwMj + FaMAwwCgYDVR0VBAMKAQQwIwIEOUnPVxcNMDAwNjMwMDYxMDI3WjAMMAoGA1UdFQQDCgEEMCMCBDl + J0BAXDTAwMDYzMDA2MTAzNVowDDAKBgNVHRUEAwoBBDAjAgQ5SdDKFw0wMDA2MzAwNjEwNDNaMAww + CgYDVR0VBAMKAQQwIwIEOUnRZRcNMDAwNjMwMDYxMDQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ0d0XD + TAwMDYzMDA2MTA1N1owDDAKBgNVHRUEAwoBBDAjAgQ5SdJ4Fw0wMDA2MzAwNjExMTVaMAwwCgYDVR + 0VBAMKAQQwIwIEOUnTDBcNMDAwNjMwMDYxMTIxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ04oXDTAwMDY + zMDA2MTEyN1owDDAKBgNVHRUEAwoBBDAjAgQ5SdQSFw0wMDA2MzAwNjExMzNaMAwwCgYDVR0VBAMK + AQQwIwIEOUnUoBcNMDAwNjMwMDYxMTM5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ2SQXDTAwMDYzMDA2M + TE1M1owDDAKBgNVHRUEAwoBBDAjAgQ5SdmwFw0wMDA2MzAwNjEyMDVaMAwwCgYDVR0VBAMKAQQwIw + IEOUnaTBcNMDAwNjMwMDYxMjExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ2vYXDTAwMDYzMDA2MTIxN1o + wDDAKBgNVHRUEAwoBBDAjAgQ5SducFw0wMDA2MzAwNjEyMjNaMAwwCgYDVR0VBAMKAQQwIwIEOUnc + IRcNMDAwNjMwMDYxMjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3KQXDTAwMDYzMDA2MTIzM1owDDAKB + gNVHRUEAwoBBDAjAgQ5Sd2xFw0wMDA2MzAwNjEyNDBaMAwwCgYDVR0VBAMKAQQwIwIEOUneRBcNMD + AwNjMwMDYxMjQ1WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3skXDTAwMDYzMDA2MTI1MVowDDAKBgNVHRU + EAwoBBDAjAgQ5Sd/IFw0wMDA2MzAwNjEzMDJaMAwwCgYDVR0VBAMKAQQwIwIEOUngPRcNMDAwNjMw + MDYxMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4M8XDTAwMDYzMDA2MTMyMFowDDAKBgNVHRUEAwoBB + DAjAgQ5SeE/Fw0wMDA2MzAwNjEzMjVaMAwwCgYDVR0VBAMKAQQwIwIEOUnh2BcNMDAwNjMwMDYxMz + MxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4mgXDTAwMDYzMDA2MTMzOVowDDAKBgNVHRUEAwoBBDAjAgQ + 5SeQvFw0wMDA2MzAwNjEzNDRaMAwwCgYDVR0VBAMKAQQwIwIEOVsGJRcNMDAwNjMwMDYxMzUwWjAM + MAoGA1UdFQQDCgEEMCMCBDlbBusXDTAwMDYzMDA2MTM1NlowDDAKBgNVHRUEAwoBBDAjAgQ5XEKPF + w0wMDA3MTMwOTAwMzhaMAwwCgYDVR0VBAMKAQQwIwIEOVxEKRcNMDAwNzEzMDkwMDQ1WjAMMAoGA1 + UdFQQDCgEEMCMCBDlcRukXDTAwMDcyNjA2MjkyN1owDDAKBgNVHRUEAwoBBDAjAgQ5fohgFw0wMDA + 3MjYwNjQ2NTFaMAwwCgYDVR0VBAMKAQQwIwIEOaNqPBcNMDAwODIzMDYwOTQxWjAMMAoGA1UdFQQD + CgEFMCMCBDlcX2QXDTAwMDgzMTA3MTM1OFowDDAKBgNVHRUEAwoBBDAjAgQ5YsflFw0wMDA5MDEwM + TQwMjRaMAwwCgYDVR0VBAMKAQQwIwIEOWGHDRcNMDAwOTA2MDcwMTE2WjAMMAoGA1UdFQQDCgEEMC + MCBDliz/4XDTAwMDkwNjA3MDcwNVowDDAKBgNVHRUEAwoBBDAjAgQ5m3S6Fw0wMDA5MjAwNzA2NTd + aMAwwCgYDVR0VBAMKAQQwIwIEOy6/hhcNMDEwNzAzMDYxMDQyWjAMMAoGA1UdFQQDCgEEMCMCBDtB + Yw4XDTAxMDcwMzA2MTkxNlowDDAKBgNVHRUEAwoBBDAjAgQ7MEG6Fw0wMTA3MTAwODA5NTNaMAwwC + gYDVR0VBAMKAQQwIwIEOy68CxcNMDEwNzExMDYxMzI5WjAMMAoGA1UdFQQDCgEEMCMCBDswSOsXDT + AxMDgwMTA0MTkyM1owDDAKBgNVHRUEAwoBBTAjAgQ7MYgeFw0wMTA4MDEwNDIwMDJaMAwwCgYDVR0 + VBAMKAQQwIwIEOzGHeBcNMDEwODAyMDI0NTM4WjAMMAoGA1UdFQQDCgEEMCMCBDsuveEXDTAxMDgz + MDA2MjIwOFowDDAKBgNVHRUEAwoBBDAjAgQ7jdxLFw0wMTA4MzAwNjQzMjRaMAwwCgYDVR0VBAMKA + QQwIwIEOy67QxcNMDExMTIxMDYyMDUzWjAMMAoGA1UdFQQDCgEEMCMCBDsDNXcXDTAyMDUxNzA4ND + Y0MlowDDAKBgNVHRUEAwoBBDAjAgQ7AzXMFw0wMjA1MTcwODQ2NTdaMAwwCgYDVR0VBAMKAQSgMjA + wMAsGA1UdFAQEAgIQoDATBgNVHSMEDDAKgAhISAKVrWisNzAMBgNVHRwBAf8EAjAAMA0GCSqGSIb3 + DQEBBQUAA4IBAQA1xNXgyrtVB5LSOc76JF+aJzf8IfJGqF04CMzbo4lDpec/LgOrTSFV223ccJzuq + cnxGUfDbXFfSWDHGnj9HLLTCkrS3clL1TPVjGXg5mFu1l6DCfcP2v4i4dlradNYDQg/AVBoJsYa3l + efSFHw8RFXNHJWwIjJA6J0CBJ/8Uq2ywr8umdndb10RLtPWp66A7wxu7OvTjt68d3LgSniQ0mIJCn + 4ooE30oF/ew0EznbxlSCNRPpB8jYYJTibGrTUVU43lr8h3URIgBkA4InOhuDv0ePMSCDSxBUhY0+G + eKo+YiXHy4SGUGLakahuq/hlGTRJJUddqFA1dNZdOUl23nVE + +dn: cn=charlie,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: charlie +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= + +dn: cn=beta,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: beta +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= +certificateRevocationList;binary:: MIIP0TCCDrkCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzA + JBgNVBAYTAkFVMSswKQYDVQQKEyJDZXJ0aWZpY2F0ZXMgQXVzdHJhbGlhIFB0eSBMaW1pdGVkMSUw + IwYDVQQDExxDQVBMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTAwLgYKCZImiZPyLGQBAxQgY2FAY + 2VydGlmaWNhdGVzLWF1c3RyYWxpYS5jb20uYXUXDTAzMDcyMjAxMzAyMFoXDTAzMTEwMzAxMzUyMF + owgg27MCMCBDi/biUXDTAwMDMwNjA2MjEzM1owDDAKBgNVHRUEAwoBBDAjAgQ5Il0KFw0wMDA1MjM + wODAwNDNaMAwwCgYDVR0VBAMKAQQwIwIEOSo6ZxcNMDAwNTI5MDIyNTQzWjAMMAoGA1UdFQQDCgEE + MCMCBDkx1QAXDTAwMDUyOTAzMzYwMVowDDAKBgNVHRUEAwoBBDAjAgQ5Pd7GFw0wMDA2MDcwNTM3M + jRaMAwwCgYDVR0VBAMKAQQwIwIEOUcavBcNMDAwNjE0MDc0MjExWjAMMAoGA1UdFQQDCgEEMCMCBD + lIlLYXDTAwMDYxNTA4MzY1NlowDDAKBgNVHRUEAwoBBDAjAgQ5SeOkFw0wMDA2MTYwODIzMDVaMAw + wCgYDVR0VBAMKAQQwIwIEOUiGjRcNMDAwNjE2MDgyMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ30oX + DTAwMDYyOTA4MDQyM1owDDAKBgNVHRUEAwoBBDAjAgQ5SdUjFw0wMDA2MjkwODA1NDVaMAwwCgYDV + R0VBAMKAQQwIwIEOTHlfRcNMDAwNjMwMDYwNjA1WjAMMAoGA1UdFQQDCgEEMCMCBDkzV6EXDTAwMD + YzMDA2MDYxMVowDDAKBgNVHRUEAwoBBDAjAgQ5SIFOFw0wMDA2MzAwNjA2MjFaMAwwCgYDVR0VBAM + KAQQwIwIEOUiCbBcNMDAwNjMwMDYwNjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlIgzkXDTAwMDYzMDA2 + MDYzNlowDDAKBgNVHRUEAwoBBDAjAgQ5SIQEFw0wMDA2MzAwNjA2NDFaMAwwCgYDVR0VBAMKAQQwI + wIEOUiFBBcNMDAwNjMwMDYwNjQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlIhfQXDTAwMDYzMDA2MDY1NV + owDDAKBgNVHRUEAwoBBDAjAgQ5SIcmFw0wMDA2MzAwNjA3MDJaMAwwCgYDVR0VBAMKAQQwIwIEOUi + H4hcNMDAwNjMwMDYwNzA4WjAMMAoGA1UdFQQDCgEEMCMCBDlIiGUXDTAwMDYzMDA2MDcxNFowDDAK + BgNVHRUEAwoBBDAjAgQ5SIjaFw0wMDA2MzAwNjA3NDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiJhRcNM + DAwNjMwMDYwNzU3WjAMMAoGA1UdFQQDCgEEMCMCBDlIjoIXDTAwMDYzMDA2MDgwNFowDDAKBgNVHR + UEAwoBBDAjAgQ5SI89Fw0wMDA2MzAwNjA4MTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiP1RcNMDAwNjM + wMDYwODE1WjAMMAoGA1UdFQQDCgEEMCMCBDlIkEoXDTAwMDYzMDA2MDg0NVowDDAKBgNVHRUEAwoB + BDAjAgQ5SJC7Fw0wMDA2MzAwNjA4NTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiReRcNMDAwNjMwMDYwO + DU2WjAMMAoGA1UdFQQDCgEEMCMCBDlIkgMXDTAwMDYzMDA2MDkwNFowDDAKBgNVHRUEAwoBBDAjAg + Q5SJKqFw0wMDA2MzAwNjA5MDlaMAwwCgYDVR0VBAMKAQQwIwIEOUiTJhcNMDAwNjMwMDYwOTE2WjA + MMAoGA1UdFQQDCgEEMCMCBDlIk5AXDTAwMDYzMDA2MDkyMVowDDAKBgNVHRUEAwoBBDAjAgQ5SJQ3 + Fw0wMDA2MzAwNjA5MjZaMAwwCgYDVR0VBAMKAQQwIwIEOUiVXhcNMDAwNjMwMDYwOTMyWjAMMAoGA + 1UdFQQDCgEEMCMCBDlIlgcXDTAwMDYzMDA2MDkzOFowDDAKBgNVHRUEAwoBBDAjAgQ5SJazFw0wMD + A2MzAwNjA5NDZaMAwwCgYDVR0VBAMKAQQwIwIEOUiXPxcNMDAwNjMwMDYwOTUxWjAMMAoGA1UdFQQ + DCgEEMCMCBDlIl7IXDTAwMDYzMDA2MDk1OFowDDAKBgNVHRUEAwoBBDAjAgQ5SJg0Fw0wMDA2MzAw + NjEwMDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiZBBcNMDAwNjMwMDYxMDA5WjAMMAoGA1UdFQQDCgEEM + CMCBDlJzksXDTAwMDYzMDA2MTAxNVowDDAKBgNVHRUEAwoBBDAjAgQ5Sc64Fw0wMDA2MzAwNjEwMj + FaMAwwCgYDVR0VBAMKAQQwIwIEOUnPVxcNMDAwNjMwMDYxMDI3WjAMMAoGA1UdFQQDCgEEMCMCBDl + J0BAXDTAwMDYzMDA2MTAzNVowDDAKBgNVHRUEAwoBBDAjAgQ5SdDKFw0wMDA2MzAwNjEwNDNaMAww + CgYDVR0VBAMKAQQwIwIEOUnRZRcNMDAwNjMwMDYxMDQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ0d0XD + TAwMDYzMDA2MTA1N1owDDAKBgNVHRUEAwoBBDAjAgQ5SdJ4Fw0wMDA2MzAwNjExMTVaMAwwCgYDVR + 0VBAMKAQQwIwIEOUnTDBcNMDAwNjMwMDYxMTIxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ04oXDTAwMDY + zMDA2MTEyN1owDDAKBgNVHRUEAwoBBDAjAgQ5SdQSFw0wMDA2MzAwNjExMzNaMAwwCgYDVR0VBAMK + AQQwIwIEOUnUoBcNMDAwNjMwMDYxMTM5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ2SQXDTAwMDYzMDA2M + TE1M1owDDAKBgNVHRUEAwoBBDAjAgQ5SdmwFw0wMDA2MzAwNjEyMDVaMAwwCgYDVR0VBAMKAQQwIw + IEOUnaTBcNMDAwNjMwMDYxMjExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ2vYXDTAwMDYzMDA2MTIxN1o + wDDAKBgNVHRUEAwoBBDAjAgQ5SducFw0wMDA2MzAwNjEyMjNaMAwwCgYDVR0VBAMKAQQwIwIEOUnc + IRcNMDAwNjMwMDYxMjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3KQXDTAwMDYzMDA2MTIzM1owDDAKB + gNVHRUEAwoBBDAjAgQ5Sd2xFw0wMDA2MzAwNjEyNDBaMAwwCgYDVR0VBAMKAQQwIwIEOUneRBcNMD + AwNjMwMDYxMjQ1WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3skXDTAwMDYzMDA2MTI1MVowDDAKBgNVHRU + EAwoBBDAjAgQ5Sd/IFw0wMDA2MzAwNjEzMDJaMAwwCgYDVR0VBAMKAQQwIwIEOUngPRcNMDAwNjMw + MDYxMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4M8XDTAwMDYzMDA2MTMyMFowDDAKBgNVHRUEAwoBB + DAjAgQ5SeE/Fw0wMDA2MzAwNjEzMjVaMAwwCgYDVR0VBAMKAQQwIwIEOUnh2BcNMDAwNjMwMDYxMz + MxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4mgXDTAwMDYzMDA2MTMzOVowDDAKBgNVHRUEAwoBBDAjAgQ + 5SeQvFw0wMDA2MzAwNjEzNDRaMAwwCgYDVR0VBAMKAQQwIwIEOVsGJRcNMDAwNjMwMDYxMzUwWjAM + MAoGA1UdFQQDCgEEMCMCBDlbBusXDTAwMDYzMDA2MTM1NlowDDAKBgNVHRUEAwoBBDAjAgQ5XEKPF + w0wMDA3MTMwOTAwMzhaMAwwCgYDVR0VBAMKAQQwIwIEOVxEKRcNMDAwNzEzMDkwMDQ1WjAMMAoGA1 + UdFQQDCgEEMCMCBDlcRukXDTAwMDcyNjA2MjkyN1owDDAKBgNVHRUEAwoBBDAjAgQ5fohgFw0wMDA + 3MjYwNjQ2NTFaMAwwCgYDVR0VBAMKAQQwIwIEOaNqPBcNMDAwODIzMDYwOTQxWjAMMAoGA1UdFQQD + CgEFMCMCBDlcX2QXDTAwMDgzMTA3MTM1OFowDDAKBgNVHRUEAwoBBDAjAgQ5YsflFw0wMDA5MDEwM + TQwMjRaMAwwCgYDVR0VBAMKAQQwIwIEOWGHDRcNMDAwOTA2MDcwMTE2WjAMMAoGA1UdFQQDCgEEMC + MCBDliz/4XDTAwMDkwNjA3MDcwNVowDDAKBgNVHRUEAwoBBDAjAgQ5m3S6Fw0wMDA5MjAwNzA2NTd + aMAwwCgYDVR0VBAMKAQQwIwIEOy6/hhcNMDEwNzAzMDYxMDQyWjAMMAoGA1UdFQQDCgEEMCMCBDtB + Yw4XDTAxMDcwMzA2MTkxNlowDDAKBgNVHRUEAwoBBDAjAgQ7MEG6Fw0wMTA3MTAwODA5NTNaMAwwC + gYDVR0VBAMKAQQwIwIEOy68CxcNMDEwNzExMDYxMzI5WjAMMAoGA1UdFQQDCgEEMCMCBDswSOsXDT + AxMDgwMTA0MTkyM1owDDAKBgNVHRUEAwoBBTAjAgQ7MYgeFw0wMTA4MDEwNDIwMDJaMAwwCgYDVR0 + VBAMKAQQwIwIEOzGHeBcNMDEwODAyMDI0NTM4WjAMMAoGA1UdFQQDCgEEMCMCBDsuveEXDTAxMDgz + MDA2MjIwOFowDDAKBgNVHRUEAwoBBDAjAgQ7jdxLFw0wMTA4MzAwNjQzMjRaMAwwCgYDVR0VBAMKA + QQwIwIEOy67QxcNMDExMTIxMDYyMDUzWjAMMAoGA1UdFQQDCgEEMCMCBDsDNXcXDTAyMDUxNzA4ND + Y0MlowDDAKBgNVHRUEAwoBBDAjAgQ7AzXMFw0wMjA1MTcwODQ2NTdaMAwwCgYDVR0VBAMKAQSgMjA + wMAsGA1UdFAQEAgIQoDATBgNVHSMEDDAKgAhISAKVrWisNzAMBgNVHRwBAf8EAjAAMA0GCSqGSIb3 + DQEBBQUAA4IBAQA1xNXgyrtVB5LSOc76JF+aJzf8IfJGqF04CMzbo4lDpec/LgOrTSFV223ccJzuq + cnxGUfDbXFfSWDHGnj9HLLTCkrS3clL1TPVjGXg5mFu1l6DCfcP2v4i4dlradNYDQg/AVBoJsYa3l + efSFHw8RFXNHJWwIjJA6J0CBJ/8Uq2ywr8umdndb10RLtPWp66A7wxu7OvTjt68d3LgSniQ0mIJCn + 4ooE30oF/ew0EznbxlSCNRPpB8jYYJTibGrTUVU43lr8h3URIgBkA4InOhuDv0ePMSCDSxBUhY0+G + eKo+YiXHy4SGUGLakahuq/hlGTRJJUddqFA1dNZdOUl23nVE + +dn: cn=charlie,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: charlie +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= + +dn: cn=beta,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: beta +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= +certificateRevocationList;binary:: MIIP0TCCDrkCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzA + JBgNVBAYTAkFVMSswKQYDVQQKEyJDZXJ0aWZpY2F0ZXMgQXVzdHJhbGlhIFB0eSBMaW1pdGVkMSUw + IwYDVQQDExxDQVBMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTAwLgYKCZImiZPyLGQBAxQgY2FAY + 2VydGlmaWNhdGVzLWF1c3RyYWxpYS5jb20uYXUXDTAzMDcyMjAxMzAyMFoXDTAzMTEwMzAxMzUyMF + owgg27MCMCBDi/biUXDTAwMDMwNjA2MjEzM1owDDAKBgNVHRUEAwoBBDAjAgQ5Il0KFw0wMDA1MjM + wODAwNDNaMAwwCgYDVR0VBAMKAQQwIwIEOSo6ZxcNMDAwNTI5MDIyNTQzWjAMMAoGA1UdFQQDCgEE + MCMCBDkx1QAXDTAwMDUyOTAzMzYwMVowDDAKBgNVHRUEAwoBBDAjAgQ5Pd7GFw0wMDA2MDcwNTM3M + jRaMAwwCgYDVR0VBAMKAQQwIwIEOUcavBcNMDAwNjE0MDc0MjExWjAMMAoGA1UdFQQDCgEEMCMCBD + lIlLYXDTAwMDYxNTA4MzY1NlowDDAKBgNVHRUEAwoBBDAjAgQ5SeOkFw0wMDA2MTYwODIzMDVaMAw + wCgYDVR0VBAMKAQQwIwIEOUiGjRcNMDAwNjE2MDgyMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ30oX + DTAwMDYyOTA4MDQyM1owDDAKBgNVHRUEAwoBBDAjAgQ5SdUjFw0wMDA2MjkwODA1NDVaMAwwCgYDV + R0VBAMKAQQwIwIEOTHlfRcNMDAwNjMwMDYwNjA1WjAMMAoGA1UdFQQDCgEEMCMCBDkzV6EXDTAwMD + YzMDA2MDYxMVowDDAKBgNVHRUEAwoBBDAjAgQ5SIFOFw0wMDA2MzAwNjA2MjFaMAwwCgYDVR0VBAM + KAQQwIwIEOUiCbBcNMDAwNjMwMDYwNjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlIgzkXDTAwMDYzMDA2 + MDYzNlowDDAKBgNVHRUEAwoBBDAjAgQ5SIQEFw0wMDA2MzAwNjA2NDFaMAwwCgYDVR0VBAMKAQQwI + wIEOUiFBBcNMDAwNjMwMDYwNjQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlIhfQXDTAwMDYzMDA2MDY1NV + owDDAKBgNVHRUEAwoBBDAjAgQ5SIcmFw0wMDA2MzAwNjA3MDJaMAwwCgYDVR0VBAMKAQQwIwIEOUi + H4hcNMDAwNjMwMDYwNzA4WjAMMAoGA1UdFQQDCgEEMCMCBDlIiGUXDTAwMDYzMDA2MDcxNFowDDAK + BgNVHRUEAwoBBDAjAgQ5SIjaFw0wMDA2MzAwNjA3NDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiJhRcNM + DAwNjMwMDYwNzU3WjAMMAoGA1UdFQQDCgEEMCMCBDlIjoIXDTAwMDYzMDA2MDgwNFowDDAKBgNVHR + UEAwoBBDAjAgQ5SI89Fw0wMDA2MzAwNjA4MTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiP1RcNMDAwNjM + wMDYwODE1WjAMMAoGA1UdFQQDCgEEMCMCBDlIkEoXDTAwMDYzMDA2MDg0NVowDDAKBgNVHRUEAwoB + BDAjAgQ5SJC7Fw0wMDA2MzAwNjA4NTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiReRcNMDAwNjMwMDYwO + DU2WjAMMAoGA1UdFQQDCgEEMCMCBDlIkgMXDTAwMDYzMDA2MDkwNFowDDAKBgNVHRUEAwoBBDAjAg + Q5SJKqFw0wMDA2MzAwNjA5MDlaMAwwCgYDVR0VBAMKAQQwIwIEOUiTJhcNMDAwNjMwMDYwOTE2WjA + MMAoGA1UdFQQDCgEEMCMCBDlIk5AXDTAwMDYzMDA2MDkyMVowDDAKBgNVHRUEAwoBBDAjAgQ5SJQ3 + Fw0wMDA2MzAwNjA5MjZaMAwwCgYDVR0VBAMKAQQwIwIEOUiVXhcNMDAwNjMwMDYwOTMyWjAMMAoGA + 1UdFQQDCgEEMCMCBDlIlgcXDTAwMDYzMDA2MDkzOFowDDAKBgNVHRUEAwoBBDAjAgQ5SJazFw0wMD + A2MzAwNjA5NDZaMAwwCgYDVR0VBAMKAQQwIwIEOUiXPxcNMDAwNjMwMDYwOTUxWjAMMAoGA1UdFQQ + DCgEEMCMCBDlIl7IXDTAwMDYzMDA2MDk1OFowDDAKBgNVHRUEAwoBBDAjAgQ5SJg0Fw0wMDA2MzAw + NjEwMDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiZBBcNMDAwNjMwMDYxMDA5WjAMMAoGA1UdFQQDCgEEM + CMCBDlJzksXDTAwMDYzMDA2MTAxNVowDDAKBgNVHRUEAwoBBDAjAgQ5Sc64Fw0wMDA2MzAwNjEwMj + FaMAwwCgYDVR0VBAMKAQQwIwIEOUnPVxcNMDAwNjMwMDYxMDI3WjAMMAoGA1UdFQQDCgEEMCMCBDl + J0BAXDTAwMDYzMDA2MTAzNVowDDAKBgNVHRUEAwoBBDAjAgQ5SdDKFw0wMDA2MzAwNjEwNDNaMAww + CgYDVR0VBAMKAQQwIwIEOUnRZRcNMDAwNjMwMDYxMDQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ0d0XD + TAwMDYzMDA2MTA1N1owDDAKBgNVHRUEAwoBBDAjAgQ5SdJ4Fw0wMDA2MzAwNjExMTVaMAwwCgYDVR + 0VBAMKAQQwIwIEOUnTDBcNMDAwNjMwMDYxMTIxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ04oXDTAwMDY + zMDA2MTEyN1owDDAKBgNVHRUEAwoBBDAjAgQ5SdQSFw0wMDA2MzAwNjExMzNaMAwwCgYDVR0VBAMK + AQQwIwIEOUnUoBcNMDAwNjMwMDYxMTM5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ2SQXDTAwMDYzMDA2M + TE1M1owDDAKBgNVHRUEAwoBBDAjAgQ5SdmwFw0wMDA2MzAwNjEyMDVaMAwwCgYDVR0VBAMKAQQwIw + IEOUnaTBcNMDAwNjMwMDYxMjExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ2vYXDTAwMDYzMDA2MTIxN1o + wDDAKBgNVHRUEAwoBBDAjAgQ5SducFw0wMDA2MzAwNjEyMjNaMAwwCgYDVR0VBAMKAQQwIwIEOUnc + IRcNMDAwNjMwMDYxMjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3KQXDTAwMDYzMDA2MTIzM1owDDAKB + gNVHRUEAwoBBDAjAgQ5Sd2xFw0wMDA2MzAwNjEyNDBaMAwwCgYDVR0VBAMKAQQwIwIEOUneRBcNMD + AwNjMwMDYxMjQ1WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3skXDTAwMDYzMDA2MTI1MVowDDAKBgNVHRU + EAwoBBDAjAgQ5Sd/IFw0wMDA2MzAwNjEzMDJaMAwwCgYDVR0VBAMKAQQwIwIEOUngPRcNMDAwNjMw + MDYxMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4M8XDTAwMDYzMDA2MTMyMFowDDAKBgNVHRUEAwoBB + DAjAgQ5SeE/Fw0wMDA2MzAwNjEzMjVaMAwwCgYDVR0VBAMKAQQwIwIEOUnh2BcNMDAwNjMwMDYxMz + MxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4mgXDTAwMDYzMDA2MTMzOVowDDAKBgNVHRUEAwoBBDAjAgQ + 5SeQvFw0wMDA2MzAwNjEzNDRaMAwwCgYDVR0VBAMKAQQwIwIEOVsGJRcNMDAwNjMwMDYxMzUwWjAM + MAoGA1UdFQQDCgEEMCMCBDlbBusXDTAwMDYzMDA2MTM1NlowDDAKBgNVHRUEAwoBBDAjAgQ5XEKPF + w0wMDA3MTMwOTAwMzhaMAwwCgYDVR0VBAMKAQQwIwIEOVxEKRcNMDAwNzEzMDkwMDQ1WjAMMAoGA1 + UdFQQDCgEEMCMCBDlcRukXDTAwMDcyNjA2MjkyN1owDDAKBgNVHRUEAwoBBDAjAgQ5fohgFw0wMDA + 3MjYwNjQ2NTFaMAwwCgYDVR0VBAMKAQQwIwIEOaNqPBcNMDAwODIzMDYwOTQxWjAMMAoGA1UdFQQD + CgEFMCMCBDlcX2QXDTAwMDgzMTA3MTM1OFowDDAKBgNVHRUEAwoBBDAjAgQ5YsflFw0wMDA5MDEwM + TQwMjRaMAwwCgYDVR0VBAMKAQQwIwIEOWGHDRcNMDAwOTA2MDcwMTE2WjAMMAoGA1UdFQQDCgEEMC + MCBDliz/4XDTAwMDkwNjA3MDcwNVowDDAKBgNVHRUEAwoBBDAjAgQ5m3S6Fw0wMDA5MjAwNzA2NTd + aMAwwCgYDVR0VBAMKAQQwIwIEOy6/hhcNMDEwNzAzMDYxMDQyWjAMMAoGA1UdFQQDCgEEMCMCBDtB + Yw4XDTAxMDcwMzA2MTkxNlowDDAKBgNVHRUEAwoBBDAjAgQ7MEG6Fw0wMTA3MTAwODA5NTNaMAwwC + gYDVR0VBAMKAQQwIwIEOy68CxcNMDEwNzExMDYxMzI5WjAMMAoGA1UdFQQDCgEEMCMCBDswSOsXDT + AxMDgwMTA0MTkyM1owDDAKBgNVHRUEAwoBBTAjAgQ7MYgeFw0wMTA4MDEwNDIwMDJaMAwwCgYDVR0 + VBAMKAQQwIwIEOzGHeBcNMDEwODAyMDI0NTM4WjAMMAoGA1UdFQQDCgEEMCMCBDsuveEXDTAxMDgz + MDA2MjIwOFowDDAKBgNVHRUEAwoBBDAjAgQ7jdxLFw0wMTA4MzAwNjQzMjRaMAwwCgYDVR0VBAMKA + QQwIwIEOy67QxcNMDExMTIxMDYyMDUzWjAMMAoGA1UdFQQDCgEEMCMCBDsDNXcXDTAyMDUxNzA4ND + Y0MlowDDAKBgNVHRUEAwoBBDAjAgQ7AzXMFw0wMjA1MTcwODQ2NTdaMAwwCgYDVR0VBAMKAQSgMjA + wMAsGA1UdFAQEAgIQoDATBgNVHSMEDDAKgAhISAKVrWisNzAMBgNVHRwBAf8EAjAAMA0GCSqGSIb3 + DQEBBQUAA4IBAQA1xNXgyrtVB5LSOc76JF+aJzf8IfJGqF04CMzbo4lDpec/LgOrTSFV223ccJzuq + cnxGUfDbXFfSWDHGnj9HLLTCkrS3clL1TPVjGXg5mFu1l6DCfcP2v4i4dlradNYDQg/AVBoJsYa3l + efSFHw8RFXNHJWwIjJA6J0CBJ/8Uq2ywr8umdndb10RLtPWp66A7wxu7OvTjt68d3LgSniQ0mIJCn + 4ooE30oF/ew0EznbxlSCNRPpB8jYYJTibGrTUVU43lr8h3URIgBkA4InOhuDv0ePMSCDSxBUhY0+G + eKo+YiXHy4SGUGLakahuq/hlGTRJJUddqFA1dNZdOUl23nVE + +dn: cn=charlie,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: charlie +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= + +dn: cn=beta,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: beta +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= +certificateRevocationList;binary:: MIIP0TCCDrkCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzA + JBgNVBAYTAkFVMSswKQYDVQQKEyJDZXJ0aWZpY2F0ZXMgQXVzdHJhbGlhIFB0eSBMaW1pdGVkMSUw + IwYDVQQDExxDQVBMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTAwLgYKCZImiZPyLGQBAxQgY2FAY + 2VydGlmaWNhdGVzLWF1c3RyYWxpYS5jb20uYXUXDTAzMDcyMjAxMzAyMFoXDTAzMTEwMzAxMzUyMF + owgg27MCMCBDi/biUXDTAwMDMwNjA2MjEzM1owDDAKBgNVHRUEAwoBBDAjAgQ5Il0KFw0wMDA1MjM + wODAwNDNaMAwwCgYDVR0VBAMKAQQwIwIEOSo6ZxcNMDAwNTI5MDIyNTQzWjAMMAoGA1UdFQQDCgEE + MCMCBDkx1QAXDTAwMDUyOTAzMzYwMVowDDAKBgNVHRUEAwoBBDAjAgQ5Pd7GFw0wMDA2MDcwNTM3M + jRaMAwwCgYDVR0VBAMKAQQwIwIEOUcavBcNMDAwNjE0MDc0MjExWjAMMAoGA1UdFQQDCgEEMCMCBD + lIlLYXDTAwMDYxNTA4MzY1NlowDDAKBgNVHRUEAwoBBDAjAgQ5SeOkFw0wMDA2MTYwODIzMDVaMAw + wCgYDVR0VBAMKAQQwIwIEOUiGjRcNMDAwNjE2MDgyMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ30oX + DTAwMDYyOTA4MDQyM1owDDAKBgNVHRUEAwoBBDAjAgQ5SdUjFw0wMDA2MjkwODA1NDVaMAwwCgYDV + R0VBAMKAQQwIwIEOTHlfRcNMDAwNjMwMDYwNjA1WjAMMAoGA1UdFQQDCgEEMCMCBDkzV6EXDTAwMD + YzMDA2MDYxMVowDDAKBgNVHRUEAwoBBDAjAgQ5SIFOFw0wMDA2MzAwNjA2MjFaMAwwCgYDVR0VBAM + KAQQwIwIEOUiCbBcNMDAwNjMwMDYwNjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlIgzkXDTAwMDYzMDA2 + MDYzNlowDDAKBgNVHRUEAwoBBDAjAgQ5SIQEFw0wMDA2MzAwNjA2NDFaMAwwCgYDVR0VBAMKAQQwI + wIEOUiFBBcNMDAwNjMwMDYwNjQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlIhfQXDTAwMDYzMDA2MDY1NV + owDDAKBgNVHRUEAwoBBDAjAgQ5SIcmFw0wMDA2MzAwNjA3MDJaMAwwCgYDVR0VBAMKAQQwIwIEOUi + H4hcNMDAwNjMwMDYwNzA4WjAMMAoGA1UdFQQDCgEEMCMCBDlIiGUXDTAwMDYzMDA2MDcxNFowDDAK + BgNVHRUEAwoBBDAjAgQ5SIjaFw0wMDA2MzAwNjA3NDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiJhRcNM + DAwNjMwMDYwNzU3WjAMMAoGA1UdFQQDCgEEMCMCBDlIjoIXDTAwMDYzMDA2MDgwNFowDDAKBgNVHR + UEAwoBBDAjAgQ5SI89Fw0wMDA2MzAwNjA4MTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiP1RcNMDAwNjM + wMDYwODE1WjAMMAoGA1UdFQQDCgEEMCMCBDlIkEoXDTAwMDYzMDA2MDg0NVowDDAKBgNVHRUEAwoB + BDAjAgQ5SJC7Fw0wMDA2MzAwNjA4NTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiReRcNMDAwNjMwMDYwO + DU2WjAMMAoGA1UdFQQDCgEEMCMCBDlIkgMXDTAwMDYzMDA2MDkwNFowDDAKBgNVHRUEAwoBBDAjAg + Q5SJKqFw0wMDA2MzAwNjA5MDlaMAwwCgYDVR0VBAMKAQQwIwIEOUiTJhcNMDAwNjMwMDYwOTE2WjA + MMAoGA1UdFQQDCgEEMCMCBDlIk5AXDTAwMDYzMDA2MDkyMVowDDAKBgNVHRUEAwoBBDAjAgQ5SJQ3 + Fw0wMDA2MzAwNjA5MjZaMAwwCgYDVR0VBAMKAQQwIwIEOUiVXhcNMDAwNjMwMDYwOTMyWjAMMAoGA + 1UdFQQDCgEEMCMCBDlIlgcXDTAwMDYzMDA2MDkzOFowDDAKBgNVHRUEAwoBBDAjAgQ5SJazFw0wMD + A2MzAwNjA5NDZaMAwwCgYDVR0VBAMKAQQwIwIEOUiXPxcNMDAwNjMwMDYwOTUxWjAMMAoGA1UdFQQ + DCgEEMCMCBDlIl7IXDTAwMDYzMDA2MDk1OFowDDAKBgNVHRUEAwoBBDAjAgQ5SJg0Fw0wMDA2MzAw + NjEwMDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiZBBcNMDAwNjMwMDYxMDA5WjAMMAoGA1UdFQQDCgEEM + CMCBDlJzksXDTAwMDYzMDA2MTAxNVowDDAKBgNVHRUEAwoBBDAjAgQ5Sc64Fw0wMDA2MzAwNjEwMj + FaMAwwCgYDVR0VBAMKAQQwIwIEOUnPVxcNMDAwNjMwMDYxMDI3WjAMMAoGA1UdFQQDCgEEMCMCBDl + J0BAXDTAwMDYzMDA2MTAzNVowDDAKBgNVHRUEAwoBBDAjAgQ5SdDKFw0wMDA2MzAwNjEwNDNaMAww + CgYDVR0VBAMKAQQwIwIEOUnRZRcNMDAwNjMwMDYxMDQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ0d0XD + TAwMDYzMDA2MTA1N1owDDAKBgNVHRUEAwoBBDAjAgQ5SdJ4Fw0wMDA2MzAwNjExMTVaMAwwCgYDVR + 0VBAMKAQQwIwIEOUnTDBcNMDAwNjMwMDYxMTIxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ04oXDTAwMDY + zMDA2MTEyN1owDDAKBgNVHRUEAwoBBDAjAgQ5SdQSFw0wMDA2MzAwNjExMzNaMAwwCgYDVR0VBAMK + AQQwIwIEOUnUoBcNMDAwNjMwMDYxMTM5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ2SQXDTAwMDYzMDA2M + TE1M1owDDAKBgNVHRUEAwoBBDAjAgQ5SdmwFw0wMDA2MzAwNjEyMDVaMAwwCgYDVR0VBAMKAQQwIw + IEOUnaTBcNMDAwNjMwMDYxMjExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ2vYXDTAwMDYzMDA2MTIxN1o + wDDAKBgNVHRUEAwoBBDAjAgQ5SducFw0wMDA2MzAwNjEyMjNaMAwwCgYDVR0VBAMKAQQwIwIEOUnc + IRcNMDAwNjMwMDYxMjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3KQXDTAwMDYzMDA2MTIzM1owDDAKB + gNVHRUEAwoBBDAjAgQ5Sd2xFw0wMDA2MzAwNjEyNDBaMAwwCgYDVR0VBAMKAQQwIwIEOUneRBcNMD + AwNjMwMDYxMjQ1WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3skXDTAwMDYzMDA2MTI1MVowDDAKBgNVHRU + EAwoBBDAjAgQ5Sd/IFw0wMDA2MzAwNjEzMDJaMAwwCgYDVR0VBAMKAQQwIwIEOUngPRcNMDAwNjMw + MDYxMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4M8XDTAwMDYzMDA2MTMyMFowDDAKBgNVHRUEAwoBB + DAjAgQ5SeE/Fw0wMDA2MzAwNjEzMjVaMAwwCgYDVR0VBAMKAQQwIwIEOUnh2BcNMDAwNjMwMDYxMz + MxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4mgXDTAwMDYzMDA2MTMzOVowDDAKBgNVHRUEAwoBBDAjAgQ + 5SeQvFw0wMDA2MzAwNjEzNDRaMAwwCgYDVR0VBAMKAQQwIwIEOVsGJRcNMDAwNjMwMDYxMzUwWjAM + MAoGA1UdFQQDCgEEMCMCBDlbBusXDTAwMDYzMDA2MTM1NlowDDAKBgNVHRUEAwoBBDAjAgQ5XEKPF + w0wMDA3MTMwOTAwMzhaMAwwCgYDVR0VBAMKAQQwIwIEOVxEKRcNMDAwNzEzMDkwMDQ1WjAMMAoGA1 + UdFQQDCgEEMCMCBDlcRukXDTAwMDcyNjA2MjkyN1owDDAKBgNVHRUEAwoBBDAjAgQ5fohgFw0wMDA + 3MjYwNjQ2NTFaMAwwCgYDVR0VBAMKAQQwIwIEOaNqPBcNMDAwODIzMDYwOTQxWjAMMAoGA1UdFQQD + CgEFMCMCBDlcX2QXDTAwMDgzMTA3MTM1OFowDDAKBgNVHRUEAwoBBDAjAgQ5YsflFw0wMDA5MDEwM + TQwMjRaMAwwCgYDVR0VBAMKAQQwIwIEOWGHDRcNMDAwOTA2MDcwMTE2WjAMMAoGA1UdFQQDCgEEMC + MCBDliz/4XDTAwMDkwNjA3MDcwNVowDDAKBgNVHRUEAwoBBDAjAgQ5m3S6Fw0wMDA5MjAwNzA2NTd + aMAwwCgYDVR0VBAMKAQQwIwIEOy6/hhcNMDEwNzAzMDYxMDQyWjAMMAoGA1UdFQQDCgEEMCMCBDtB + Yw4XDTAxMDcwMzA2MTkxNlowDDAKBgNVHRUEAwoBBDAjAgQ7MEG6Fw0wMTA3MTAwODA5NTNaMAwwC + gYDVR0VBAMKAQQwIwIEOy68CxcNMDEwNzExMDYxMzI5WjAMMAoGA1UdFQQDCgEEMCMCBDswSOsXDT + AxMDgwMTA0MTkyM1owDDAKBgNVHRUEAwoBBTAjAgQ7MYgeFw0wMTA4MDEwNDIwMDJaMAwwCgYDVR0 + VBAMKAQQwIwIEOzGHeBcNMDEwODAyMDI0NTM4WjAMMAoGA1UdFQQDCgEEMCMCBDsuveEXDTAxMDgz + MDA2MjIwOFowDDAKBgNVHRUEAwoBBDAjAgQ7jdxLFw0wMTA4MzAwNjQzMjRaMAwwCgYDVR0VBAMKA + QQwIwIEOy67QxcNMDExMTIxMDYyMDUzWjAMMAoGA1UdFQQDCgEEMCMCBDsDNXcXDTAyMDUxNzA4ND + Y0MlowDDAKBgNVHRUEAwoBBDAjAgQ7AzXMFw0wMjA1MTcwODQ2NTdaMAwwCgYDVR0VBAMKAQSgMjA + wMAsGA1UdFAQEAgIQoDATBgNVHSMEDDAKgAhISAKVrWisNzAMBgNVHRwBAf8EAjAAMA0GCSqGSIb3 + DQEBBQUAA4IBAQA1xNXgyrtVB5LSOc76JF+aJzf8IfJGqF04CMzbo4lDpec/LgOrTSFV223ccJzuq + cnxGUfDbXFfSWDHGnj9HLLTCkrS3clL1TPVjGXg5mFu1l6DCfcP2v4i4dlradNYDQg/AVBoJsYa3l + efSFHw8RFXNHJWwIjJA6J0CBJ/8Uq2ywr8umdndb10RLtPWp66A7wxu7OvTjt68d3LgSniQ0mIJCn + 4ooE30oF/ew0EznbxlSCNRPpB8jYYJTibGrTUVU43lr8h3URIgBkA4InOhuDv0ePMSCDSxBUhY0+G + eKo+YiXHy4SGUGLakahuq/hlGTRJJUddqFA1dNZdOUl23nVE + +dn: cn=charlie,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: charlie +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= + +dn: cn=beta,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: beta +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= +certificateRevocationList;binary:: MIIP0TCCDrkCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzA + JBgNVBAYTAkFVMSswKQYDVQQKEyJDZXJ0aWZpY2F0ZXMgQXVzdHJhbGlhIFB0eSBMaW1pdGVkMSUw + IwYDVQQDExxDQVBMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTAwLgYKCZImiZPyLGQBAxQgY2FAY + 2VydGlmaWNhdGVzLWF1c3RyYWxpYS5jb20uYXUXDTAzMDcyMjAxMzAyMFoXDTAzMTEwMzAxMzUyMF + owgg27MCMCBDi/biUXDTAwMDMwNjA2MjEzM1owDDAKBgNVHRUEAwoBBDAjAgQ5Il0KFw0wMDA1MjM + wODAwNDNaMAwwCgYDVR0VBAMKAQQwIwIEOSo6ZxcNMDAwNTI5MDIyNTQzWjAMMAoGA1UdFQQDCgEE + MCMCBDkx1QAXDTAwMDUyOTAzMzYwMVowDDAKBgNVHRUEAwoBBDAjAgQ5Pd7GFw0wMDA2MDcwNTM3M + jRaMAwwCgYDVR0VBAMKAQQwIwIEOUcavBcNMDAwNjE0MDc0MjExWjAMMAoGA1UdFQQDCgEEMCMCBD + lIlLYXDTAwMDYxNTA4MzY1NlowDDAKBgNVHRUEAwoBBDAjAgQ5SeOkFw0wMDA2MTYwODIzMDVaMAw + wCgYDVR0VBAMKAQQwIwIEOUiGjRcNMDAwNjE2MDgyMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ30oX + DTAwMDYyOTA4MDQyM1owDDAKBgNVHRUEAwoBBDAjAgQ5SdUjFw0wMDA2MjkwODA1NDVaMAwwCgYDV + R0VBAMKAQQwIwIEOTHlfRcNMDAwNjMwMDYwNjA1WjAMMAoGA1UdFQQDCgEEMCMCBDkzV6EXDTAwMD + YzMDA2MDYxMVowDDAKBgNVHRUEAwoBBDAjAgQ5SIFOFw0wMDA2MzAwNjA2MjFaMAwwCgYDVR0VBAM + KAQQwIwIEOUiCbBcNMDAwNjMwMDYwNjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlIgzkXDTAwMDYzMDA2 + MDYzNlowDDAKBgNVHRUEAwoBBDAjAgQ5SIQEFw0wMDA2MzAwNjA2NDFaMAwwCgYDVR0VBAMKAQQwI + wIEOUiFBBcNMDAwNjMwMDYwNjQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlIhfQXDTAwMDYzMDA2MDY1NV + owDDAKBgNVHRUEAwoBBDAjAgQ5SIcmFw0wMDA2MzAwNjA3MDJaMAwwCgYDVR0VBAMKAQQwIwIEOUi + H4hcNMDAwNjMwMDYwNzA4WjAMMAoGA1UdFQQDCgEEMCMCBDlIiGUXDTAwMDYzMDA2MDcxNFowDDAK + BgNVHRUEAwoBBDAjAgQ5SIjaFw0wMDA2MzAwNjA3NDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiJhRcNM + DAwNjMwMDYwNzU3WjAMMAoGA1UdFQQDCgEEMCMCBDlIjoIXDTAwMDYzMDA2MDgwNFowDDAKBgNVHR + UEAwoBBDAjAgQ5SI89Fw0wMDA2MzAwNjA4MTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiP1RcNMDAwNjM + wMDYwODE1WjAMMAoGA1UdFQQDCgEEMCMCBDlIkEoXDTAwMDYzMDA2MDg0NVowDDAKBgNVHRUEAwoB + BDAjAgQ5SJC7Fw0wMDA2MzAwNjA4NTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiReRcNMDAwNjMwMDYwO + DU2WjAMMAoGA1UdFQQDCgEEMCMCBDlIkgMXDTAwMDYzMDA2MDkwNFowDDAKBgNVHRUEAwoBBDAjAg + Q5SJKqFw0wMDA2MzAwNjA5MDlaMAwwCgYDVR0VBAMKAQQwIwIEOUiTJhcNMDAwNjMwMDYwOTE2WjA + MMAoGA1UdFQQDCgEEMCMCBDlIk5AXDTAwMDYzMDA2MDkyMVowDDAKBgNVHRUEAwoBBDAjAgQ5SJQ3 + Fw0wMDA2MzAwNjA5MjZaMAwwCgYDVR0VBAMKAQQwIwIEOUiVXhcNMDAwNjMwMDYwOTMyWjAMMAoGA + 1UdFQQDCgEEMCMCBDlIlgcXDTAwMDYzMDA2MDkzOFowDDAKBgNVHRUEAwoBBDAjAgQ5SJazFw0wMD + A2MzAwNjA5NDZaMAwwCgYDVR0VBAMKAQQwIwIEOUiXPxcNMDAwNjMwMDYwOTUxWjAMMAoGA1UdFQQ + DCgEEMCMCBDlIl7IXDTAwMDYzMDA2MDk1OFowDDAKBgNVHRUEAwoBBDAjAgQ5SJg0Fw0wMDA2MzAw + NjEwMDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiZBBcNMDAwNjMwMDYxMDA5WjAMMAoGA1UdFQQDCgEEM + CMCBDlJzksXDTAwMDYzMDA2MTAxNVowDDAKBgNVHRUEAwoBBDAjAgQ5Sc64Fw0wMDA2MzAwNjEwMj + FaMAwwCgYDVR0VBAMKAQQwIwIEOUnPVxcNMDAwNjMwMDYxMDI3WjAMMAoGA1UdFQQDCgEEMCMCBDl + J0BAXDTAwMDYzMDA2MTAzNVowDDAKBgNVHRUEAwoBBDAjAgQ5SdDKFw0wMDA2MzAwNjEwNDNaMAww + CgYDVR0VBAMKAQQwIwIEOUnRZRcNMDAwNjMwMDYxMDQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ0d0XD + TAwMDYzMDA2MTA1N1owDDAKBgNVHRUEAwoBBDAjAgQ5SdJ4Fw0wMDA2MzAwNjExMTVaMAwwCgYDVR + 0VBAMKAQQwIwIEOUnTDBcNMDAwNjMwMDYxMTIxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ04oXDTAwMDY + zMDA2MTEyN1owDDAKBgNVHRUEAwoBBDAjAgQ5SdQSFw0wMDA2MzAwNjExMzNaMAwwCgYDVR0VBAMK + AQQwIwIEOUnUoBcNMDAwNjMwMDYxMTM5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ2SQXDTAwMDYzMDA2M + TE1M1owDDAKBgNVHRUEAwoBBDAjAgQ5SdmwFw0wMDA2MzAwNjEyMDVaMAwwCgYDVR0VBAMKAQQwIw + IEOUnaTBcNMDAwNjMwMDYxMjExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ2vYXDTAwMDYzMDA2MTIxN1o + wDDAKBgNVHRUEAwoBBDAjAgQ5SducFw0wMDA2MzAwNjEyMjNaMAwwCgYDVR0VBAMKAQQwIwIEOUnc + IRcNMDAwNjMwMDYxMjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3KQXDTAwMDYzMDA2MTIzM1owDDAKB + gNVHRUEAwoBBDAjAgQ5Sd2xFw0wMDA2MzAwNjEyNDBaMAwwCgYDVR0VBAMKAQQwIwIEOUneRBcNMD + AwNjMwMDYxMjQ1WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3skXDTAwMDYzMDA2MTI1MVowDDAKBgNVHRU + EAwoBBDAjAgQ5Sd/IFw0wMDA2MzAwNjEzMDJaMAwwCgYDVR0VBAMKAQQwIwIEOUngPRcNMDAwNjMw + MDYxMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4M8XDTAwMDYzMDA2MTMyMFowDDAKBgNVHRUEAwoBB + DAjAgQ5SeE/Fw0wMDA2MzAwNjEzMjVaMAwwCgYDVR0VBAMKAQQwIwIEOUnh2BcNMDAwNjMwMDYxMz + MxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4mgXDTAwMDYzMDA2MTMzOVowDDAKBgNVHRUEAwoBBDAjAgQ + 5SeQvFw0wMDA2MzAwNjEzNDRaMAwwCgYDVR0VBAMKAQQwIwIEOVsGJRcNMDAwNjMwMDYxMzUwWjAM + MAoGA1UdFQQDCgEEMCMCBDlbBusXDTAwMDYzMDA2MTM1NlowDDAKBgNVHRUEAwoBBDAjAgQ5XEKPF + w0wMDA3MTMwOTAwMzhaMAwwCgYDVR0VBAMKAQQwIwIEOVxEKRcNMDAwNzEzMDkwMDQ1WjAMMAoGA1 + UdFQQDCgEEMCMCBDlcRukXDTAwMDcyNjA2MjkyN1owDDAKBgNVHRUEAwoBBDAjAgQ5fohgFw0wMDA + 3MjYwNjQ2NTFaMAwwCgYDVR0VBAMKAQQwIwIEOaNqPBcNMDAwODIzMDYwOTQxWjAMMAoGA1UdFQQD + CgEFMCMCBDlcX2QXDTAwMDgzMTA3MTM1OFowDDAKBgNVHRUEAwoBBDAjAgQ5YsflFw0wMDA5MDEwM + TQwMjRaMAwwCgYDVR0VBAMKAQQwIwIEOWGHDRcNMDAwOTA2MDcwMTE2WjAMMAoGA1UdFQQDCgEEMC + MCBDliz/4XDTAwMDkwNjA3MDcwNVowDDAKBgNVHRUEAwoBBDAjAgQ5m3S6Fw0wMDA5MjAwNzA2NTd + aMAwwCgYDVR0VBAMKAQQwIwIEOy6/hhcNMDEwNzAzMDYxMDQyWjAMMAoGA1UdFQQDCgEEMCMCBDtB + Yw4XDTAxMDcwMzA2MTkxNlowDDAKBgNVHRUEAwoBBDAjAgQ7MEG6Fw0wMTA3MTAwODA5NTNaMAwwC + gYDVR0VBAMKAQQwIwIEOy68CxcNMDEwNzExMDYxMzI5WjAMMAoGA1UdFQQDCgEEMCMCBDswSOsXDT + AxMDgwMTA0MTkyM1owDDAKBgNVHRUEAwoBBTAjAgQ7MYgeFw0wMTA4MDEwNDIwMDJaMAwwCgYDVR0 + VBAMKAQQwIwIEOzGHeBcNMDEwODAyMDI0NTM4WjAMMAoGA1UdFQQDCgEEMCMCBDsuveEXDTAxMDgz + MDA2MjIwOFowDDAKBgNVHRUEAwoBBDAjAgQ7jdxLFw0wMTA4MzAwNjQzMjRaMAwwCgYDVR0VBAMKA + QQwIwIEOy67QxcNMDExMTIxMDYyMDUzWjAMMAoGA1UdFQQDCgEEMCMCBDsDNXcXDTAyMDUxNzA4ND + Y0MlowDDAKBgNVHRUEAwoBBDAjAgQ7AzXMFw0wMjA1MTcwODQ2NTdaMAwwCgYDVR0VBAMKAQSgMjA + wMAsGA1UdFAQEAgIQoDATBgNVHSMEDDAKgAhISAKVrWisNzAMBgNVHRwBAf8EAjAAMA0GCSqGSIb3 + DQEBBQUAA4IBAQA1xNXgyrtVB5LSOc76JF+aJzf8IfJGqF04CMzbo4lDpec/LgOrTSFV223ccJzuq + cnxGUfDbXFfSWDHGnj9HLLTCkrS3clL1TPVjGXg5mFu1l6DCfcP2v4i4dlradNYDQg/AVBoJsYa3l + efSFHw8RFXNHJWwIjJA6J0CBJ/8Uq2ywr8umdndb10RLtPWp66A7wxu7OvTjt68d3LgSniQ0mIJCn + 4ooE30oF/ew0EznbxlSCNRPpB8jYYJTibGrTUVU43lr8h3URIgBkA4InOhuDv0ePMSCDSxBUhY0+G + eKo+YiXHy4SGUGLakahuq/hlGTRJJUddqFA1dNZdOUl23nVE + +dn: cn=charlie,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: charlie +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= + +dn: cn=beta,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: beta +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= +certificateRevocationList;binary:: MIIP0TCCDrkCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzA + JBgNVBAYTAkFVMSswKQYDVQQKEyJDZXJ0aWZpY2F0ZXMgQXVzdHJhbGlhIFB0eSBMaW1pdGVkMSUw + IwYDVQQDExxDQVBMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTAwLgYKCZImiZPyLGQBAxQgY2FAY + 2VydGlmaWNhdGVzLWF1c3RyYWxpYS5jb20uYXUXDTAzMDcyMjAxMzAyMFoXDTAzMTEwMzAxMzUyMF + owgg27MCMCBDi/biUXDTAwMDMwNjA2MjEzM1owDDAKBgNVHRUEAwoBBDAjAgQ5Il0KFw0wMDA1MjM + wODAwNDNaMAwwCgYDVR0VBAMKAQQwIwIEOSo6ZxcNMDAwNTI5MDIyNTQzWjAMMAoGA1UdFQQDCgEE + MCMCBDkx1QAXDTAwMDUyOTAzMzYwMVowDDAKBgNVHRUEAwoBBDAjAgQ5Pd7GFw0wMDA2MDcwNTM3M + jRaMAwwCgYDVR0VBAMKAQQwIwIEOUcavBcNMDAwNjE0MDc0MjExWjAMMAoGA1UdFQQDCgEEMCMCBD + lIlLYXDTAwMDYxNTA4MzY1NlowDDAKBgNVHRUEAwoBBDAjAgQ5SeOkFw0wMDA2MTYwODIzMDVaMAw + wCgYDVR0VBAMKAQQwIwIEOUiGjRcNMDAwNjE2MDgyMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ30oX + DTAwMDYyOTA4MDQyM1owDDAKBgNVHRUEAwoBBDAjAgQ5SdUjFw0wMDA2MjkwODA1NDVaMAwwCgYDV + R0VBAMKAQQwIwIEOTHlfRcNMDAwNjMwMDYwNjA1WjAMMAoGA1UdFQQDCgEEMCMCBDkzV6EXDTAwMD + YzMDA2MDYxMVowDDAKBgNVHRUEAwoBBDAjAgQ5SIFOFw0wMDA2MzAwNjA2MjFaMAwwCgYDVR0VBAM + KAQQwIwIEOUiCbBcNMDAwNjMwMDYwNjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlIgzkXDTAwMDYzMDA2 + MDYzNlowDDAKBgNVHRUEAwoBBDAjAgQ5SIQEFw0wMDA2MzAwNjA2NDFaMAwwCgYDVR0VBAMKAQQwI + wIEOUiFBBcNMDAwNjMwMDYwNjQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlIhfQXDTAwMDYzMDA2MDY1NV + owDDAKBgNVHRUEAwoBBDAjAgQ5SIcmFw0wMDA2MzAwNjA3MDJaMAwwCgYDVR0VBAMKAQQwIwIEOUi + H4hcNMDAwNjMwMDYwNzA4WjAMMAoGA1UdFQQDCgEEMCMCBDlIiGUXDTAwMDYzMDA2MDcxNFowDDAK + BgNVHRUEAwoBBDAjAgQ5SIjaFw0wMDA2MzAwNjA3NDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiJhRcNM + DAwNjMwMDYwNzU3WjAMMAoGA1UdFQQDCgEEMCMCBDlIjoIXDTAwMDYzMDA2MDgwNFowDDAKBgNVHR + UEAwoBBDAjAgQ5SI89Fw0wMDA2MzAwNjA4MTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiP1RcNMDAwNjM + wMDYwODE1WjAMMAoGA1UdFQQDCgEEMCMCBDlIkEoXDTAwMDYzMDA2MDg0NVowDDAKBgNVHRUEAwoB + BDAjAgQ5SJC7Fw0wMDA2MzAwNjA4NTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiReRcNMDAwNjMwMDYwO + DU2WjAMMAoGA1UdFQQDCgEEMCMCBDlIkgMXDTAwMDYzMDA2MDkwNFowDDAKBgNVHRUEAwoBBDAjAg + Q5SJKqFw0wMDA2MzAwNjA5MDlaMAwwCgYDVR0VBAMKAQQwIwIEOUiTJhcNMDAwNjMwMDYwOTE2WjA + MMAoGA1UdFQQDCgEEMCMCBDlIk5AXDTAwMDYzMDA2MDkyMVowDDAKBgNVHRUEAwoBBDAjAgQ5SJQ3 + Fw0wMDA2MzAwNjA5MjZaMAwwCgYDVR0VBAMKAQQwIwIEOUiVXhcNMDAwNjMwMDYwOTMyWjAMMAoGA + 1UdFQQDCgEEMCMCBDlIlgcXDTAwMDYzMDA2MDkzOFowDDAKBgNVHRUEAwoBBDAjAgQ5SJazFw0wMD + A2MzAwNjA5NDZaMAwwCgYDVR0VBAMKAQQwIwIEOUiXPxcNMDAwNjMwMDYwOTUxWjAMMAoGA1UdFQQ + DCgEEMCMCBDlIl7IXDTAwMDYzMDA2MDk1OFowDDAKBgNVHRUEAwoBBDAjAgQ5SJg0Fw0wMDA2MzAw + NjEwMDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiZBBcNMDAwNjMwMDYxMDA5WjAMMAoGA1UdFQQDCgEEM + CMCBDlJzksXDTAwMDYzMDA2MTAxNVowDDAKBgNVHRUEAwoBBDAjAgQ5Sc64Fw0wMDA2MzAwNjEwMj + FaMAwwCgYDVR0VBAMKAQQwIwIEOUnPVxcNMDAwNjMwMDYxMDI3WjAMMAoGA1UdFQQDCgEEMCMCBDl + J0BAXDTAwMDYzMDA2MTAzNVowDDAKBgNVHRUEAwoBBDAjAgQ5SdDKFw0wMDA2MzAwNjEwNDNaMAww + CgYDVR0VBAMKAQQwIwIEOUnRZRcNMDAwNjMwMDYxMDQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ0d0XD + TAwMDYzMDA2MTA1N1owDDAKBgNVHRUEAwoBBDAjAgQ5SdJ4Fw0wMDA2MzAwNjExMTVaMAwwCgYDVR + 0VBAMKAQQwIwIEOUnTDBcNMDAwNjMwMDYxMTIxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ04oXDTAwMDY + zMDA2MTEyN1owDDAKBgNVHRUEAwoBBDAjAgQ5SdQSFw0wMDA2MzAwNjExMzNaMAwwCgYDVR0VBAMK + AQQwIwIEOUnUoBcNMDAwNjMwMDYxMTM5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ2SQXDTAwMDYzMDA2M + TE1M1owDDAKBgNVHRUEAwoBBDAjAgQ5SdmwFw0wMDA2MzAwNjEyMDVaMAwwCgYDVR0VBAMKAQQwIw + IEOUnaTBcNMDAwNjMwMDYxMjExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ2vYXDTAwMDYzMDA2MTIxN1o + wDDAKBgNVHRUEAwoBBDAjAgQ5SducFw0wMDA2MzAwNjEyMjNaMAwwCgYDVR0VBAMKAQQwIwIEOUnc + IRcNMDAwNjMwMDYxMjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3KQXDTAwMDYzMDA2MTIzM1owDDAKB + gNVHRUEAwoBBDAjAgQ5Sd2xFw0wMDA2MzAwNjEyNDBaMAwwCgYDVR0VBAMKAQQwIwIEOUneRBcNMD + AwNjMwMDYxMjQ1WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3skXDTAwMDYzMDA2MTI1MVowDDAKBgNVHRU + EAwoBBDAjAgQ5Sd/IFw0wMDA2MzAwNjEzMDJaMAwwCgYDVR0VBAMKAQQwIwIEOUngPRcNMDAwNjMw + MDYxMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4M8XDTAwMDYzMDA2MTMyMFowDDAKBgNVHRUEAwoBB + DAjAgQ5SeE/Fw0wMDA2MzAwNjEzMjVaMAwwCgYDVR0VBAMKAQQwIwIEOUnh2BcNMDAwNjMwMDYxMz + MxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4mgXDTAwMDYzMDA2MTMzOVowDDAKBgNVHRUEAwoBBDAjAgQ + 5SeQvFw0wMDA2MzAwNjEzNDRaMAwwCgYDVR0VBAMKAQQwIwIEOVsGJRcNMDAwNjMwMDYxMzUwWjAM + MAoGA1UdFQQDCgEEMCMCBDlbBusXDTAwMDYzMDA2MTM1NlowDDAKBgNVHRUEAwoBBDAjAgQ5XEKPF + w0wMDA3MTMwOTAwMzhaMAwwCgYDVR0VBAMKAQQwIwIEOVxEKRcNMDAwNzEzMDkwMDQ1WjAMMAoGA1 + UdFQQDCgEEMCMCBDlcRukXDTAwMDcyNjA2MjkyN1owDDAKBgNVHRUEAwoBBDAjAgQ5fohgFw0wMDA + 3MjYwNjQ2NTFaMAwwCgYDVR0VBAMKAQQwIwIEOaNqPBcNMDAwODIzMDYwOTQxWjAMMAoGA1UdFQQD + CgEFMCMCBDlcX2QXDTAwMDgzMTA3MTM1OFowDDAKBgNVHRUEAwoBBDAjAgQ5YsflFw0wMDA5MDEwM + TQwMjRaMAwwCgYDVR0VBAMKAQQwIwIEOWGHDRcNMDAwOTA2MDcwMTE2WjAMMAoGA1UdFQQDCgEEMC + MCBDliz/4XDTAwMDkwNjA3MDcwNVowDDAKBgNVHRUEAwoBBDAjAgQ5m3S6Fw0wMDA5MjAwNzA2NTd + aMAwwCgYDVR0VBAMKAQQwIwIEOy6/hhcNMDEwNzAzMDYxMDQyWjAMMAoGA1UdFQQDCgEEMCMCBDtB + Yw4XDTAxMDcwMzA2MTkxNlowDDAKBgNVHRUEAwoBBDAjAgQ7MEG6Fw0wMTA3MTAwODA5NTNaMAwwC + gYDVR0VBAMKAQQwIwIEOy68CxcNMDEwNzExMDYxMzI5WjAMMAoGA1UdFQQDCgEEMCMCBDswSOsXDT + AxMDgwMTA0MTkyM1owDDAKBgNVHRUEAwoBBTAjAgQ7MYgeFw0wMTA4MDEwNDIwMDJaMAwwCgYDVR0 + VBAMKAQQwIwIEOzGHeBcNMDEwODAyMDI0NTM4WjAMMAoGA1UdFQQDCgEEMCMCBDsuveEXDTAxMDgz + MDA2MjIwOFowDDAKBgNVHRUEAwoBBDAjAgQ7jdxLFw0wMTA4MzAwNjQzMjRaMAwwCgYDVR0VBAMKA + QQwIwIEOy67QxcNMDExMTIxMDYyMDUzWjAMMAoGA1UdFQQDCgEEMCMCBDsDNXcXDTAyMDUxNzA4ND + Y0MlowDDAKBgNVHRUEAwoBBDAjAgQ7AzXMFw0wMjA1MTcwODQ2NTdaMAwwCgYDVR0VBAMKAQSgMjA + wMAsGA1UdFAQEAgIQoDATBgNVHSMEDDAKgAhISAKVrWisNzAMBgNVHRwBAf8EAjAAMA0GCSqGSIb3 + DQEBBQUAA4IBAQA1xNXgyrtVB5LSOc76JF+aJzf8IfJGqF04CMzbo4lDpec/LgOrTSFV223ccJzuq + cnxGUfDbXFfSWDHGnj9HLLTCkrS3clL1TPVjGXg5mFu1l6DCfcP2v4i4dlradNYDQg/AVBoJsYa3l + efSFHw8RFXNHJWwIjJA6J0CBJ/8Uq2ywr8umdndb10RLtPWp66A7wxu7OvTjt68d3LgSniQ0mIJCn + 4ooE30oF/ew0EznbxlSCNRPpB8jYYJTibGrTUVU43lr8h3URIgBkA4InOhuDv0ePMSCDSxBUhY0+G + eKo+YiXHy4SGUGLakahuq/hlGTRJJUddqFA1dNZdOUl23nVE + +dn: cn=charlie,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: charlie +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= + +dn: cn=beta,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: extensibleObject +uid:: Y2hhcmxpZSA= +cn: beta +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDV + QQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA + 0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MO + NBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnA + KUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUA + zNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA + 0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTyS + uz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5Ue + dAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4Xr + EkBJ/Q= +certificateRevocationList;binary:: MIIP0TCCDrkCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzA + JBgNVBAYTAkFVMSswKQYDVQQKEyJDZXJ0aWZpY2F0ZXMgQXVzdHJhbGlhIFB0eSBMaW1pdGVkMSUw + IwYDVQQDExxDQVBMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTAwLgYKCZImiZPyLGQBAxQgY2FAY + 2VydGlmaWNhdGVzLWF1c3RyYWxpYS5jb20uYXUXDTAzMDcyMjAxMzAyMFoXDTAzMTEwMzAxMzUyMF + owgg27MCMCBDi/biUXDTAwMDMwNjA2MjEzM1owDDAKBgNVHRUEAwoBBDAjAgQ5Il0KFw0wMDA1MjM + wODAwNDNaMAwwCgYDVR0VBAMKAQQwIwIEOSo6ZxcNMDAwNTI5MDIyNTQzWjAMMAoGA1UdFQQDCgEE + MCMCBDkx1QAXDTAwMDUyOTAzMzYwMVowDDAKBgNVHRUEAwoBBDAjAgQ5Pd7GFw0wMDA2MDcwNTM3M + jRaMAwwCgYDVR0VBAMKAQQwIwIEOUcavBcNMDAwNjE0MDc0MjExWjAMMAoGA1UdFQQDCgEEMCMCBD + lIlLYXDTAwMDYxNTA4MzY1NlowDDAKBgNVHRUEAwoBBDAjAgQ5SeOkFw0wMDA2MTYwODIzMDVaMAw + wCgYDVR0VBAMKAQQwIwIEOUiGjRcNMDAwNjE2MDgyMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ30oX + DTAwMDYyOTA4MDQyM1owDDAKBgNVHRUEAwoBBDAjAgQ5SdUjFw0wMDA2MjkwODA1NDVaMAwwCgYDV + R0VBAMKAQQwIwIEOTHlfRcNMDAwNjMwMDYwNjA1WjAMMAoGA1UdFQQDCgEEMCMCBDkzV6EXDTAwMD + YzMDA2MDYxMVowDDAKBgNVHRUEAwoBBDAjAgQ5SIFOFw0wMDA2MzAwNjA2MjFaMAwwCgYDVR0VBAM + KAQQwIwIEOUiCbBcNMDAwNjMwMDYwNjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlIgzkXDTAwMDYzMDA2 + MDYzNlowDDAKBgNVHRUEAwoBBDAjAgQ5SIQEFw0wMDA2MzAwNjA2NDFaMAwwCgYDVR0VBAMKAQQwI + wIEOUiFBBcNMDAwNjMwMDYwNjQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlIhfQXDTAwMDYzMDA2MDY1NV + owDDAKBgNVHRUEAwoBBDAjAgQ5SIcmFw0wMDA2MzAwNjA3MDJaMAwwCgYDVR0VBAMKAQQwIwIEOUi + H4hcNMDAwNjMwMDYwNzA4WjAMMAoGA1UdFQQDCgEEMCMCBDlIiGUXDTAwMDYzMDA2MDcxNFowDDAK + BgNVHRUEAwoBBDAjAgQ5SIjaFw0wMDA2MzAwNjA3NDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiJhRcNM + DAwNjMwMDYwNzU3WjAMMAoGA1UdFQQDCgEEMCMCBDlIjoIXDTAwMDYzMDA2MDgwNFowDDAKBgNVHR + UEAwoBBDAjAgQ5SI89Fw0wMDA2MzAwNjA4MTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiP1RcNMDAwNjM + wMDYwODE1WjAMMAoGA1UdFQQDCgEEMCMCBDlIkEoXDTAwMDYzMDA2MDg0NVowDDAKBgNVHRUEAwoB + BDAjAgQ5SJC7Fw0wMDA2MzAwNjA4NTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiReRcNMDAwNjMwMDYwO + DU2WjAMMAoGA1UdFQQDCgEEMCMCBDlIkgMXDTAwMDYzMDA2MDkwNFowDDAKBgNVHRUEAwoBBDAjAg + Q5SJKqFw0wMDA2MzAwNjA5MDlaMAwwCgYDVR0VBAMKAQQwIwIEOUiTJhcNMDAwNjMwMDYwOTE2WjA + MMAoGA1UdFQQDCgEEMCMCBDlIk5AXDTAwMDYzMDA2MDkyMVowDDAKBgNVHRUEAwoBBDAjAgQ5SJQ3 + Fw0wMDA2MzAwNjA5MjZaMAwwCgYDVR0VBAMKAQQwIwIEOUiVXhcNMDAwNjMwMDYwOTMyWjAMMAoGA + 1UdFQQDCgEEMCMCBDlIlgcXDTAwMDYzMDA2MDkzOFowDDAKBgNVHRUEAwoBBDAjAgQ5SJazFw0wMD + A2MzAwNjA5NDZaMAwwCgYDVR0VBAMKAQQwIwIEOUiXPxcNMDAwNjMwMDYwOTUxWjAMMAoGA1UdFQQ + DCgEEMCMCBDlIl7IXDTAwMDYzMDA2MDk1OFowDDAKBgNVHRUEAwoBBDAjAgQ5SJg0Fw0wMDA2MzAw + NjEwMDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiZBBcNMDAwNjMwMDYxMDA5WjAMMAoGA1UdFQQDCgEEM + CMCBDlJzksXDTAwMDYzMDA2MTAxNVowDDAKBgNVHRUEAwoBBDAjAgQ5Sc64Fw0wMDA2MzAwNjEwMj + FaMAwwCgYDVR0VBAMKAQQwIwIEOUnPVxcNMDAwNjMwMDYxMDI3WjAMMAoGA1UdFQQDCgEEMCMCBDl + J0BAXDTAwMDYzMDA2MTAzNVowDDAKBgNVHRUEAwoBBDAjAgQ5SdDKFw0wMDA2MzAwNjEwNDNaMAww + CgYDVR0VBAMKAQQwIwIEOUnRZRcNMDAwNjMwMDYxMDQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ0d0XD + TAwMDYzMDA2MTA1N1owDDAKBgNVHRUEAwoBBDAjAgQ5SdJ4Fw0wMDA2MzAwNjExMTVaMAwwCgYDVR + 0VBAMKAQQwIwIEOUnTDBcNMDAwNjMwMDYxMTIxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ04oXDTAwMDY + zMDA2MTEyN1owDDAKBgNVHRUEAwoBBDAjAgQ5SdQSFw0wMDA2MzAwNjExMzNaMAwwCgYDVR0VBAMK + AQQwIwIEOUnUoBcNMDAwNjMwMDYxMTM5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ2SQXDTAwMDYzMDA2M + TE1M1owDDAKBgNVHRUEAwoBBDAjAgQ5SdmwFw0wMDA2MzAwNjEyMDVaMAwwCgYDVR0VBAMKAQQwIw + IEOUnaTBcNMDAwNjMwMDYxMjExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ2vYXDTAwMDYzMDA2MTIxN1o + wDDAKBgNVHRUEAwoBBDAjAgQ5SducFw0wMDA2MzAwNjEyMjNaMAwwCgYDVR0VBAMKAQQwIwIEOUnc + IRcNMDAwNjMwMDYxMjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3KQXDTAwMDYzMDA2MTIzM1owDDAKB + gNVHRUEAwoBBDAjAgQ5Sd2xFw0wMDA2MzAwNjEyNDBaMAwwCgYDVR0VBAMKAQQwIwIEOUneRBcNMD + AwNjMwMDYxMjQ1WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3skXDTAwMDYzMDA2MTI1MVowDDAKBgNVHRU + EAwoBBDAjAgQ5Sd/IFw0wMDA2MzAwNjEzMDJaMAwwCgYDVR0VBAMKAQQwIwIEOUngPRcNMDAwNjMw + MDYxMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4M8XDTAwMDYzMDA2MTMyMFowDDAKBgNVHRUEAwoBB + DAjAgQ5SeE/Fw0wMDA2MzAwNjEzMjVaMAwwCgYDVR0VBAMKAQQwIwIEOUnh2BcNMDAwNjMwMDYxMz + MxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4mgXDTAwMDYzMDA2MTMzOVowDDAKBgNVHRUEAwoBBDAjAgQ + 5SeQvFw0wMDA2MzAwNjEzNDRaMAwwCgYDVR0VBAMKAQQwIwIEOVsGJRcNMDAwNjMwMDYxMzUwWjAM + MAoGA1UdFQQDCgEEMCMCBDlbBusXDTAwMDYzMDA2MTM1NlowDDAKBgNVHRUEAwoBBDAjAgQ5XEKPF + w0wMDA3MTMwOTAwMzhaMAwwCgYDVR0VBAMKAQQwIwIEOVxEKRcNMDAwNzEzMDkwMDQ1WjAMMAoGA1 + UdFQQDCgEEMCMCBDlcRukXDTAwMDcyNjA2MjkyN1owDDAKBgNVHRUEAwoBBDAjAgQ5fohgFw0wMDA + 3MjYwNjQ2NTFaMAwwCgYDVR0VBAMKAQQwIwIEOaNqPBcNMDAwODIzMDYwOTQxWjAMMAoGA1UdFQQD + CgEFMCMCBDlcX2QXDTAwMDgzMTA3MTM1OFowDDAKBgNVHRUEAwoBBDAjAgQ5YsflFw0wMDA5MDEwM + TQwMjRaMAwwCgYDVR0VBAMKAQQwIwIEOWGHDRcNMDAwOTA2MDcwMTE2WjAMMAoGA1UdFQQDCgEEMC + MCBDliz/4XDTAwMDkwNjA3MDcwNVowDDAKBgNVHRUEAwoBBDAjAgQ5m3S6Fw0wMDA5MjAwNzA2NTd + aMAwwCgYDVR0VBAMKAQQwIwIEOy6/hhcNMDEwNzAzMDYxMDQyWjAMMAoGA1UdFQQDCgEEMCMCBDtB + Yw4XDTAxMDcwMzA2MTkxNlowDDAKBgNVHRUEAwoBBDAjAgQ7MEG6Fw0wMTA3MTAwODA5NTNaMAwwC + gYDVR0VBAMKAQQwIwIEOy68CxcNMDEwNzExMDYxMzI5WjAMMAoGA1UdFQQDCgEEMCMCBDswSOsXDT + AxMDgwMTA0MTkyM1owDDAKBgNVHRUEAwoBBTAjAgQ7MYgeFw0wMTA4MDEwNDIwMDJaMAwwCgYDVR0 + VBAMKAQQwIwIEOzGHeBcNMDEwODAyMDI0NTM4WjAMMAoGA1UdFQQDCgEEMCMCBDsuveEXDTAxMDgz + MDA2MjIwOFowDDAKBgNVHRUEAwoBBDAjAgQ7jdxLFw0wMTA4MzAwNjQzMjRaMAwwCgYDVR0VBAMKA + QQwIwIEOy67QxcNMDExMTIxMDYyMDUzWjAMMAoGA1UdFQQDCgEEMCMCBDsDNXcXDTAyMDUxNzA4ND + Y0MlowDDAKBgNVHRUEAwoBBDAjAgQ7AzXMFw0wMjA1MTcwODQ2NTdaMAwwCgYDVR0VBAMKAQSgMjA + wMAsGA1UdFAQEAgIQoDATBgNVHSMEDDAKgAhISAKVrWisNzAMBgNVHRwBAf8EAjAAMA0GCSqGSIb3 + DQEBBQUAA4IBAQA1xNXgyrtVB5LSOc76JF+aJzf8IfJGqF04CMzbo4lDpec/LgOrTSFV223ccJzuq + cnxGUfDbXFfSWDHGnj9HLLTCkrS3clL1TPVjGXg5mFu1l6DCfcP2v4i4dlradNYDQg/AVBoJsYa3l + efSFHw8RFXNHJWwIjJA6J0CBJ/8Uq2ywr8umdndb10RLtPWp66A7wxu7OvTjt68d3LgSniQ0mIJCn + 4ooE30oF/ew0EznbxlSCNRPpB8jYYJTibGrTUVU43lr8h3URIgBkA4InOhuDv0ePMSCDSxBUhY0+G + eKo+YiXHy4SGUGLakahuq/hlGTRJJUddqFA1dNZdOUl23nVE + diff --git a/tests/data/constraint/constraint.out b/tests/data/constraint/constraint.out new file mode 100644 index 0000000..d7bcca4 --- /dev/null +++ b/tests/data/constraint/constraint.out @@ -0,0 +1,31 @@ +OK +OK +OK +OK +OK +OK +OK +OK +OK +OK +OK +OK +OK +OK +OK +FAIL +FAIL +FAIL +FAIL +FAIL +FAIL +FAIL +FAIL +FAIL +FAIL +FAIL +FAIL +FAIL +FAIL +FAIL +FAIL diff --git a/tests/data/constraint/root.ldif b/tests/data/constraint/root.ldif new file mode 100644 index 0000000..6c29690 --- /dev/null +++ b/tests/data/constraint/root.ldif @@ -0,0 +1,25 @@ +dn: dc=example,dc=com +objectclass: dcObject +objectclass: organization +dc: example +o: My Domain corp. + +dn: ou=users,dc=example,dc=com +ou: users +objectclass: organizationalUnit + +dn: ou=groups,dc=example,dc=com +ou: groups +objectclass: organizationalUnit + +dn: uid=1,ou=groups,dc=example,dc=com +objectclass: inetOrgPerson +cn: test 1 +sn: test1 +uid: 1 + +dn: uid=2,ou=groups,dc=example,dc=com +objectclass: inetOrgPerson +cn: test 2 +sn: test2 +uid: 2 diff --git a/tests/data/constraint/t_fail_01.ldif b/tests/data/constraint/t_fail_01.ldif new file mode 100644 index 0000000..e0c82e2 --- /dev/null +++ b/tests/data/constraint/t_fail_01.ldif @@ -0,0 +1,6 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +add: mail +mail: b@example.com +mail: c@example.com +mail: d@example.com diff --git a/tests/data/constraint/t_fail_02.ldif b/tests/data/constraint/t_fail_02.ldif new file mode 100644 index 0000000..462a174 --- /dev/null +++ b/tests/data/constraint/t_fail_02.ldif @@ -0,0 +1,8 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +add: mail +mail: b@example.com +mail: c@example.com +mail: d@example.com +mail: e@example.com +mail: f@example.com diff --git a/tests/data/constraint/t_fail_03.ldif b/tests/data/constraint/t_fail_03.ldif new file mode 100644 index 0000000..471a332 --- /dev/null +++ b/tests/data/constraint/t_fail_03.ldif @@ -0,0 +1,8 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +add: mail +mail: b@example.com +mail: c@example.com +- +add: mail +mail: d@example.com diff --git a/tests/data/constraint/t_fail_04.ldif b/tests/data/constraint/t_fail_04.ldif new file mode 100644 index 0000000..747357c --- /dev/null +++ b/tests/data/constraint/t_fail_04.ldif @@ -0,0 +1,10 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +add: mail +mail: b@example.com +- +add: mail +mail: c@example.com +- +add: mail +mail: d@example.com diff --git a/tests/data/constraint/t_fail_05.ldif b/tests/data/constraint/t_fail_05.ldif new file mode 100644 index 0000000..da48748 --- /dev/null +++ b/tests/data/constraint/t_fail_05.ldif @@ -0,0 +1,13 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +add: mail +mail: b@example.com +- +add: mail +mail: c@example.com +- +add: mail +mail: d@example.com +- +add: mail +mail: e@example.com diff --git a/tests/data/constraint/t_fail_06.ldif b/tests/data/constraint/t_fail_06.ldif new file mode 100644 index 0000000..950cf5b --- /dev/null +++ b/tests/data/constraint/t_fail_06.ldif @@ -0,0 +1,7 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +replace: mail +mail: a@example.com +mail: b@example.com +mail: c@example.com +mail: d@example.com diff --git a/tests/data/constraint/t_fail_07.ldif b/tests/data/constraint/t_fail_07.ldif new file mode 100644 index 0000000..85c8c63 --- /dev/null +++ b/tests/data/constraint/t_fail_07.ldif @@ -0,0 +1,15 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +replace: mail +mail: a@example.com +mail: b@example.com +mail: c@example.com +mail: d@example.com +- +delete: mail +- +add: mail +mail: w@example.com +mail: x@example.com +mail: y@example.com +mail: z@example.com diff --git a/tests/data/constraint/t_fail_08.ldif b/tests/data/constraint/t_fail_08.ldif new file mode 100644 index 0000000..7dc94ac --- /dev/null +++ b/tests/data/constraint/t_fail_08.ldif @@ -0,0 +1,12 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +add: mail +mail: b@example.com +mail: c@example.com +mail: d@example.com +- +delete: mail +mail: d@example.com +- +add: mail +mail: f@example.com diff --git a/tests/data/constraint/t_fail_09.ldif b/tests/data/constraint/t_fail_09.ldif new file mode 100644 index 0000000..61c2799 --- /dev/null +++ b/tests/data/constraint/t_fail_09.ldif @@ -0,0 +1,10 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +add: mail +mail: b@example.com +mail: c@example.com +mail: d@example.com +mail: e@example.com +- +delete: mail +mail: original@example.com diff --git a/tests/data/constraint/t_fail_10.ldif b/tests/data/constraint/t_fail_10.ldif new file mode 100644 index 0000000..d50f911 --- /dev/null +++ b/tests/data/constraint/t_fail_10.ldif @@ -0,0 +1,4 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +add: mail +mail: example@not-allowed.com diff --git a/tests/data/constraint/t_fail_11.ldif b/tests/data/constraint/t_fail_11.ldif new file mode 100644 index 0000000..48bed05 --- /dev/null +++ b/tests/data/constraint/t_fail_11.ldif @@ -0,0 +1,7 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +delete: mail +mail: original@example.com +- +add: mail +mail: a@fail.com diff --git a/tests/data/constraint/t_fail_12.ldif b/tests/data/constraint/t_fail_12.ldif new file mode 100644 index 0000000..071d829 --- /dev/null +++ b/tests/data/constraint/t_fail_12.ldif @@ -0,0 +1,10 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +delete: mail +mail: original@example.com +- +add: mail +mail: notsooriginal@example.com +- +replace: cn +cn: John Fail diff --git a/tests/data/constraint/t_fail_13.ldif b/tests/data/constraint/t_fail_13.ldif new file mode 100644 index 0000000..b8c2ab5 --- /dev/null +++ b/tests/data/constraint/t_fail_13.ldif @@ -0,0 +1,4 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +replace: givenname +givenname: Joe diff --git a/tests/data/constraint/t_fail_14.ldif b/tests/data/constraint/t_fail_14.ldif new file mode 100644 index 0000000..090e48b --- /dev/null +++ b/tests/data/constraint/t_fail_14.ldif @@ -0,0 +1,4 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +replace: sn +sn: Down diff --git a/tests/data/constraint/t_fail_15.ldif b/tests/data/constraint/t_fail_15.ldif new file mode 100644 index 0000000..94d7dd7 --- /dev/null +++ b/tests/data/constraint/t_fail_15.ldif @@ -0,0 +1,5 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +replace: uid +uid: 3 + diff --git a/tests/data/constraint/t_fail_16.ldif b/tests/data/constraint/t_fail_16.ldif new file mode 100644 index 0000000..055f284 --- /dev/null +++ b/tests/data/constraint/t_fail_16.ldif @@ -0,0 +1,4 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +replace: jpegPhoto +jpegPhoto: AAAA diff --git a/tests/data/constraint/t_ok_01.ldif b/tests/data/constraint/t_ok_01.ldif new file mode 100644 index 0000000..5766461 --- /dev/null +++ b/tests/data/constraint/t_ok_01.ldif @@ -0,0 +1,3 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +delete: mail diff --git a/tests/data/constraint/t_ok_02.ldif b/tests/data/constraint/t_ok_02.ldif new file mode 100644 index 0000000..17ce4b2 --- /dev/null +++ b/tests/data/constraint/t_ok_02.ldif @@ -0,0 +1,5 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +replace: mail +mail: a@example.com +mail: b@example.com diff --git a/tests/data/constraint/t_ok_03.ldif b/tests/data/constraint/t_ok_03.ldif new file mode 100644 index 0000000..3d2a9d1 --- /dev/null +++ b/tests/data/constraint/t_ok_03.ldif @@ -0,0 +1,6 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +replace: mail +mail: a@example.com +mail: b@example.com +mail: c@example.com diff --git a/tests/data/constraint/t_ok_04.ldif b/tests/data/constraint/t_ok_04.ldif new file mode 100644 index 0000000..5766461 --- /dev/null +++ b/tests/data/constraint/t_ok_04.ldif @@ -0,0 +1,3 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +delete: mail diff --git a/tests/data/constraint/t_ok_05.ldif b/tests/data/constraint/t_ok_05.ldif new file mode 100644 index 0000000..c30d339 --- /dev/null +++ b/tests/data/constraint/t_ok_05.ldif @@ -0,0 +1,5 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +add: mail +mail: a@example.com +mail: b@example.com diff --git a/tests/data/constraint/t_ok_06.ldif b/tests/data/constraint/t_ok_06.ldif new file mode 100644 index 0000000..eef34bd --- /dev/null +++ b/tests/data/constraint/t_ok_06.ldif @@ -0,0 +1,7 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +delete: mail +- +add: mail +mail: b@example.com +mail: c@example.com diff --git a/tests/data/constraint/t_ok_07.ldif b/tests/data/constraint/t_ok_07.ldif new file mode 100644 index 0000000..f5c7333 --- /dev/null +++ b/tests/data/constraint/t_ok_07.ldif @@ -0,0 +1,8 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +delete: mail +- +add: mail +mail: a@example.com +mail: b@example.com +mail: c@example.com diff --git a/tests/data/constraint/t_ok_08.ldif b/tests/data/constraint/t_ok_08.ldif new file mode 100644 index 0000000..40b7fa9 --- /dev/null +++ b/tests/data/constraint/t_ok_08.ldif @@ -0,0 +1,12 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +add: mail +mail: b@example.com +mail: c@example.com +- +delete: mail +- +add: mail +mail: x@example.com +mail: y@example.com +mail: z@example.com diff --git a/tests/data/constraint/t_ok_09.ldif b/tests/data/constraint/t_ok_09.ldif new file mode 100644 index 0000000..73cec01 --- /dev/null +++ b/tests/data/constraint/t_ok_09.ldif @@ -0,0 +1,9 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +replace: mail +mail: a@example.com +mail: b@example.com +mail: c@example.com +mail: d@example.com +- +delete: mail diff --git a/tests/data/constraint/t_ok_10.ldif b/tests/data/constraint/t_ok_10.ldif new file mode 100644 index 0000000..367e9a8 --- /dev/null +++ b/tests/data/constraint/t_ok_10.ldif @@ -0,0 +1,24 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +add: mail +mail: b@example.com +mail: c@example.com +- +delete: mail +- +add: mail +mail: x@example.com +mail: y@example.com +mail: z@example.com +mail: u@example.com +mail: m@example.com +- +replace: mail +mail: i@example.com +mail: j@example.com +- +add: mail +mail: k@example.com +- +replace: description +description: d1 diff --git a/tests/data/constraint/t_ok_11.ldif b/tests/data/constraint/t_ok_11.ldif new file mode 100644 index 0000000..76cbb17 --- /dev/null +++ b/tests/data/constraint/t_ok_11.ldif @@ -0,0 +1,32 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +add: mail +mail: b@example.com +mail: c@example.com +- +delete: mail +- +add: mail +mail: x@example.com +mail: y@example.com +mail: z@example.com +mail: u@example.com +mail: m@example.com +- +replace: mail +mail: i@example.com +mail: j@example.com +- +add: mail +mail: k@example.com +mail: hh@example.com +- +delete: mail +- +add: mail +mail: k@example.com +mail: hh@example.com +mail: hj@example.com +- +replace: description +description: d1 diff --git a/tests/data/constraint/t_ok_12.ldif b/tests/data/constraint/t_ok_12.ldif new file mode 100644 index 0000000..ce89978 --- /dev/null +++ b/tests/data/constraint/t_ok_12.ldif @@ -0,0 +1,11 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +add: mail +mail: b@example.com +mail: c@example.com +mail: d@example.com +mail: e@example.com +- +delete: mail +mail: original@example.com +mail: e@example.com diff --git a/tests/data/constraint/t_ok_13.ldif b/tests/data/constraint/t_ok_13.ldif new file mode 100644 index 0000000..0e9257e --- /dev/null +++ b/tests/data/constraint/t_ok_13.ldif @@ -0,0 +1,18 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +add: mail +mail: b@example.com +mail: c@example.com +mail: d@example.com +mail: e@example.com +- +delete: mail +- +add: mail +mail: b@example.com +mail: c@example.com +mail: d@example.com +mail: e@example.com +- +delete: mail +mail: e@example.com diff --git a/tests/data/constraint/t_ok_14.ldif b/tests/data/constraint/t_ok_14.ldif new file mode 100644 index 0000000..96ef3a4 --- /dev/null +++ b/tests/data/constraint/t_ok_14.ldif @@ -0,0 +1,8 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +delete: description +description: desc1 +- +add: description +description: desc1-mod + diff --git a/tests/data/constraint/t_ok_15.ldif b/tests/data/constraint/t_ok_15.ldif new file mode 100644 index 0000000..9352caa --- /dev/null +++ b/tests/data/constraint/t_ok_15.ldif @@ -0,0 +1,5 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +changetype: modify +replace: uid +uid: 2 + diff --git a/tests/data/constraint/user.ldif b/tests/data/constraint/user.ldif new file mode 100644 index 0000000..6150462 --- /dev/null +++ b/tests/data/constraint/user.ldif @@ -0,0 +1,10 @@ +dn: cn=John Doe,ou=users,dc=example,dc=com +objectclass: inetOrgPerson +objectclass: organizationalPerson +cn: John Doe +givenname: John +sn: Doe +mail: original@example.com +description: desc1 +description: desc2 +uid: 1 diff --git a/tests/data/dds.out b/tests/data/dds.out new file mode 100644 index 0000000..1f580b4 --- /dev/null +++ b/tests/data/dds.out @@ -0,0 +1,70 @@ +# [1] Searching the dynamic portion of the database... +dn: cn=Dynamic Object,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: dynamicObject +cn: Dynamic Object +sn: Object +entryTtl: 120 +userPassword:: ZHluYW1pYw== + +dn: cn=Subordinate Dynamic Object,cn=Dynamic Object,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: dynamicObject +cn: Subordinate Dynamic Object +sn: Object +userPassword:: ZHluYW1pYw== +entryTtl: 3600 + +# [2] Searching the dynamic portion of the database... +dn: cn=Dynamic Object,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: dynamicObject +cn: Dynamic Object +sn: Object +entryTtl: 120 +userPassword:: ZHluYW1pYw== + +dn: cn=Renamed Dynamic Object,cn=Dynamic Object,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: dynamicObject +sn: Object +userPassword:: ZHluYW1pYw== +entryTtl: 3600 +cn: Renamed Dynamic Object + +# [3] Searching the dynamic portion of the database... +dn: cn=Dynamic Object,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: dynamicObject +cn: Dynamic Object +sn: Object +userPassword:: ZHluYW1pYw== +entryTtl: 120 + +dn: cn=Renamed Dynamic Object,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: dynamicObject +sn: Object +userPassword:: ZHluYW1pYw== +entryTtl: 3600 +cn: Renamed Dynamic Object + +# [4] Searching the dynamic portion of the database... +dn: cn=Renamed Dynamic Object,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: dynamicObject +sn: Object +userPassword:: ZHluYW1pYw== +entryTtl: 3600 +cn: Renamed Dynamic Object + +# [5] Searching the dynamic portion of the database... +dn: cn=Renamed Dynamic Object,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: dynamicObject +sn: Object +userPassword:: ZHluYW1pYw== +cn: Renamed Dynamic Object +entryTtl: 10 + +# [6] Searching the dynamic portion of the database... diff --git a/tests/data/ditcontentrules.conf b/tests/data/ditcontentrules.conf new file mode 100644 index 0000000..b133cfd --- /dev/null +++ b/tests/data/ditcontentrules.conf @@ -0,0 +1,18 @@ +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +ditcontentrule ( 2.5.6.4 NAME 'organization' AUX ( domainRelatedObject $ dcObject ) ) +ditcontentrule ( 2.5.6.5 NAME 'organizationalUnit' AUX extensibleObject ) +ditcontentrule ( 2.5.6.9 NAME 'groupOfNames' ) +ditcontentrule ( 2.5.6.17 NAME 'groupOfUniqueNames' ) diff --git a/tests/data/dn.out b/tests/data/dn.out new file mode 100644 index 0000000..24019e5 --- /dev/null +++ b/tests/data/dn.out @@ -0,0 +1,233 @@ +# Searching database... +dn: dc=example,dc=com +objectClass: domain +objectClass: domainRelatedObject +dc: example +associatedDomain: example.com + +dn: ou=LDAPv2,dc=example,dc=com +objectClass: organizationalUnit +ou: LDAPv2 +description: RFC 1779 compliant DN string representation + +dn: ou=LDAPv3,dc=example,dc=com +objectClass: organizationalUnit +ou: LDAPv3 +description: RFC 2253 compliant DN string representation + +dn: cn=May Succeed 1,ou=LDAPv2,dc=example,dc=com +objectClass: groupOfNames +cn: May Succeed 1 +member: +description: " " // space, quote characters (") are not part of the string + +dn: cn=May Succeed 3,ou=LDAPv2,dc=example,dc=com +objectClass: groupOfNames +cn: May Succeed 3 +member: uid=jsmith,o=example,c=US +description: UID=jsmith, O=example, C=US // spaces + +dn: cn=May Succeed 4,ou=LDAPv2,dc=example,dc=com +objectClass: groupOfNames +cn: May Succeed 4 +member: uid=jsmith,o=example,c=US +description: UID=jsmith;O=example;C=US // semi-colons + +dn: cn=May Succeed 6,ou=LDAPv2,dc=example,dc=com +objectClass: groupOfNames +cn: May Succeed 6 +member: cn=John Smith,o=example,c=US +description: CN="John Smith",O=example,C=US // quotes + +dn: cn=Must Succeed,ou=LDAPv3,dc=example,dc=com +objectClass: groupOfNames +cn: Must Succeed +member: cn=Must Succeed,ou=LDAPv3,dc=example,dc=com +member: +member: uid=jsmith,dc=example,dc=net +member: cn=J. Smith+ou=Sales,dc=example,dc=net +member: cn=John Smith\2C III,dc=example,dc=net +member: ou=Sales\3B Data\2BAlgorithms,dc=example,dc=net +member:: Y249QmVmb3JlDUFmdGVyLGRjPWV4YW1wbGUsZGM9bmV0 +member: cn=\23John Smith\20,dc=example,dc=net +member:: Y249THXEjWnEhw== +member: testUUID=597ae2f6-16a6-1027-98f4-abcdefabcdef,dc=Example +seeAlso: cn=John Smith\2C III,dc=example,dc=net +seeAlso: ou=Sales\3B Data\2BAlgorithms,dc=example,dc=net +seeAlso: cn=\23John Smith\20,dc=example,dc=net +description: "member" values contain specific DN forms; +description: "seeAlso" values contain DN forms already defined as "member", +description: but in a different string representation; +description: the following "description" values contain the "member" and +description: "seeAlso" DN string representations used above. +description: "" +description: UID=jsmith,DC=example,DC=net +description: OU=Sales+CN=J. Smith,DC=example,DC=net +description: CN=John Smith\, III,DC=example,DC=net +description: CN=John Smith\2C III,DC=example,DC=net +description: OU=Sales\; Data\+Algorithms,DC=example,DC=net +description: OU=Sales\3B Data\2BAlgorithms,DC=example,DC=net +description: CN=Before\0dAfter,DC=example,DC=net +description: CN=\23John Smith\20,DC=example,DC=net +description: CN=\#John Smith\ ,DC=example,DC=net +description: CN=Lu\C4\8Di\C4\87 +description: testUUID=597ae2f6-16a6-1027-98f4-abcdefABCDEF,DC=Example + +dn: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com +objectClass: groupOfUniqueNames +cn: Name and Optional UID +uniqueMember: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com +uniqueMember: #'1'B +uniqueMember: #'0010'B +uniqueMember: dc=example,dc=com#'1000'B +uniqueMember: dc=example,dc=com#''B +description: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com // + only DN portion +description: #'1'B // empty "" DN +description: #'0010'B // empty "" DN with leading '0's +description: dc=example,dc=com#'1000'B // with DN portion +description: dc=example,dc=com#''B // with DN portion + bitstring with no bits + +dn: ou=Related Syntaxes,dc=example,dc=com +objectClass: organizationalUnit +ou: Related Syntaxes + +dn: cn=Should Parse as DN,cn=Name and Optional UID,ou=Related Syntaxes,dc=exam + ple,dc=com +objectClass: groupOfUniqueNames +cn: Should Parse as DN +uniqueMember: dc=example,dc=com#0'B +uniqueMember: dc=example,dc=com#'0B +uniqueMember: dc=example,dc=com '0'B +description: dc=example,dc=com#0'B // malformed UID? +description: dc=example,dc=com#'0B // malformed UID? +description: dc=example,dc=com '0'B // malformed UID? + +dn: cn=Unescaped Equals,ou=LDAPv3,dc=example,dc=com +objectClass: groupOfNames +cn: Unescaped Equals +member: cn=Unescaped Equals,ou=LDAPv3,dc=example,dc=com +member: cn=A*x\3Db is a linear algebra problem,ou=LDAPv3,dc=example,dc=com +description: cn=A*x=b is a linear algebra problem,ou=LDAPv3,dc=example,dc=com + // unescaped EQUALS + +# Searching database for DN="OU=Sales+CN=J. Smith,DC=example,DC=net"... +dn: cn=Must Succeed,ou=LDAPv3,dc=example,dc=com +objectClass: groupOfNames +cn: Must Succeed +member: cn=Must Succeed,ou=LDAPv3,dc=example,dc=com +member: +member: uid=jsmith,dc=example,dc=net +member: cn=J. Smith+ou=Sales,dc=example,dc=net +member: cn=John Smith\2C III,dc=example,dc=net +member: ou=Sales\3B Data\2BAlgorithms,dc=example,dc=net +member:: Y249QmVmb3JlDUFmdGVyLGRjPWV4YW1wbGUsZGM9bmV0 +member: cn=\23John Smith\20,dc=example,dc=net +member:: Y249THXEjWnEhw== +member: testUUID=597ae2f6-16a6-1027-98f4-abcdefabcdef,dc=Example +seeAlso: cn=John Smith\2C III,dc=example,dc=net +seeAlso: ou=Sales\3B Data\2BAlgorithms,dc=example,dc=net +seeAlso: cn=\23John Smith\20,dc=example,dc=net +description: "member" values contain specific DN forms; +description: "seeAlso" values contain DN forms already defined as "member", +description: but in a different string representation; +description: the following "description" values contain the "member" and +description: "seeAlso" DN string representations used above. +description: "" +description: UID=jsmith,DC=example,DC=net +description: OU=Sales+CN=J. Smith,DC=example,DC=net +description: CN=John Smith\, III,DC=example,DC=net +description: CN=John Smith\2C III,DC=example,DC=net +description: OU=Sales\; Data\+Algorithms,DC=example,DC=net +description: OU=Sales\3B Data\2BAlgorithms,DC=example,DC=net +description: CN=Before\0dAfter,DC=example,DC=net +description: CN=\23John Smith\20,DC=example,DC=net +description: CN=\#John Smith\ ,DC=example,DC=net +description: CN=Lu\C4\8Di\C4\87 +description: testUUID=597ae2f6-16a6-1027-98f4-abcdefABCDEF,DC=Example + +# Searching database for entryUUID-named DN="testUUID=597ae2f6-16a6-1027-98f4-ABCDEFabcdef,DC=Example"... +dn: cn=Must Succeed,ou=LDAPv3,dc=example,dc=com +objectClass: groupOfNames +cn: Must Succeed +member: cn=Must Succeed,ou=LDAPv3,dc=example,dc=com +member: +member: uid=jsmith,dc=example,dc=net +member: cn=J. Smith+ou=Sales,dc=example,dc=net +member: cn=John Smith\2C III,dc=example,dc=net +member: ou=Sales\3B Data\2BAlgorithms,dc=example,dc=net +member:: Y249QmVmb3JlDUFmdGVyLGRjPWV4YW1wbGUsZGM9bmV0 +member: cn=\23John Smith\20,dc=example,dc=net +member:: Y249THXEjWnEhw== +member: testUUID=597ae2f6-16a6-1027-98f4-abcdefabcdef,dc=Example +seeAlso: cn=John Smith\2C III,dc=example,dc=net +seeAlso: ou=Sales\3B Data\2BAlgorithms,dc=example,dc=net +seeAlso: cn=\23John Smith\20,dc=example,dc=net +description: "member" values contain specific DN forms; +description: "seeAlso" values contain DN forms already defined as "member", +description: but in a different string representation; +description: the following "description" values contain the "member" and +description: "seeAlso" DN string representations used above. +description: "" +description: UID=jsmith,DC=example,DC=net +description: OU=Sales+CN=J. Smith,DC=example,DC=net +description: CN=John Smith\, III,DC=example,DC=net +description: CN=John Smith\2C III,DC=example,DC=net +description: OU=Sales\; Data\+Algorithms,DC=example,DC=net +description: OU=Sales\3B Data\2BAlgorithms,DC=example,DC=net +description: CN=Before\0dAfter,DC=example,DC=net +description: CN=\23John Smith\20,DC=example,DC=net +description: CN=\#John Smith\ ,DC=example,DC=net +description: CN=Lu\C4\8Di\C4\87 +description: testUUID=597ae2f6-16a6-1027-98f4-abcdefABCDEF,DC=Example + +# Searching database for nameAndOptionalUID="dc=example,dc=com"... +# Searching database for nameAndOptionalUID="dc=example,dc=com#'001000'B"... +# Searching database for nameAndOptionalUID="dc=example,dc=com#'1000'B"... +dn: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com +objectClass: groupOfUniqueNames +cn: Name and Optional UID +uniqueMember: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com +uniqueMember: #'1'B +uniqueMember: #'0010'B +uniqueMember: dc=example,dc=com#'1000'B +uniqueMember: dc=example,dc=com#''B +description: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com // + only DN portion +description: #'1'B // empty "" DN +description: #'0010'B // empty "" DN with leading '0's +description: dc=example,dc=com#'1000'B // with DN portion +description: dc=example,dc=com#''B // with DN portion + bitstring with no bits + +# Searching database for uniqueMember~="dc=example,dc=com" (approx)... +dn: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com +objectClass: groupOfUniqueNames +cn: Name and Optional UID +uniqueMember: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com +uniqueMember: #'1'B +uniqueMember: #'0010'B +uniqueMember: dc=example,dc=com#'1000'B +uniqueMember: dc=example,dc=com#''B +description: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com // + only DN portion +description: #'1'B // empty "" DN +description: #'0010'B // empty "" DN with leading '0's +description: dc=example,dc=com#'1000'B // with DN portion +description: dc=example,dc=com#''B // with DN portion + bitstring with no bits + +# Searching database for uniqueMember~="dc=example,dc=com#'1000'B" (approx)... +dn: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com +objectClass: groupOfUniqueNames +cn: Name and Optional UID +uniqueMember: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com +uniqueMember: #'1'B +uniqueMember: #'0010'B +uniqueMember: dc=example,dc=com#'1000'B +uniqueMember: dc=example,dc=com#''B +description: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com // + only DN portion +description: #'1'B // empty "" DN +description: #'0010'B // empty "" DN with leading '0's +description: dc=example,dc=com#'1000'B // with DN portion +description: dc=example,dc=com#''B // with DN portion + bitstring with no bits + diff --git a/tests/data/do_add.1 b/tests/data/do_add.1 new file mode 100644 index 0000000..54afb38 --- /dev/null +++ b/tests/data/do_add.1 @@ -0,0 +1,18 @@ +dn: cn=James A Jones 2,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff, ou=Groups, dc=example,dc=com +userpassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 diff --git a/tests/data/do_add.2 b/tests/data/do_add.2 new file mode 100644 index 0000000..9884c89 --- /dev/null +++ b/tests/data/do_add.2 @@ -0,0 +1,18 @@ +dn: cn=James A Jones 3,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 3 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff, ou=Groups, dc=example,dc=com +userpassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 diff --git a/tests/data/do_add.3 b/tests/data/do_add.3 new file mode 100644 index 0000000..2a1c59a --- /dev/null +++ b/tests/data/do_add.3 @@ -0,0 +1,18 @@ +dn: cn=James A Jones 4,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 4 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff, ou=Groups, dc=example,dc=com +userpassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 diff --git a/tests/data/do_add.4 b/tests/data/do_add.4 new file mode 100644 index 0000000..c1de147 --- /dev/null +++ b/tests/data/do_add.4 @@ -0,0 +1,18 @@ +dn: cn=James A Jones 5,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 5 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff, ou=Groups, dc=example,dc=com +userpassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homephone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 diff --git a/tests/data/do_bind.0 b/tests/data/do_bind.0 new file mode 100644 index 0000000..ecbb872 --- /dev/null +++ b/tests/data/do_bind.0 @@ -0,0 +1,6 @@ +cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com +bjensen +cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com +bjorn +ou=People,dc=example,dc=com ++userPassword:(userPassword=*) diff --git a/tests/data/do_modify.0 b/tests/data/do_modify.0 new file mode 100644 index 0000000..fb919f5 --- /dev/null +++ b/tests/data/do_modify.0 @@ -0,0 +1,8 @@ +cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com +mail: bj@mailgw.example.com +cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com +cn: Björn +cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +displayname: James Jones +cn=ITD Staff,ou=Groups,dc=example,dc=com +uniquemember: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com diff --git a/tests/data/do_modrdn.0 b/tests/data/do_modrdn.0 new file mode 100644 index 0000000..96620ed --- /dev/null +++ b/tests/data/do_modrdn.0 @@ -0,0 +1,4 @@ +cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example,dc=com diff --git a/tests/data/do_read.0 b/tests/data/do_read.0 new file mode 100644 index 0000000..e6f0e2f --- /dev/null +++ b/tests/data/do_read.0 @@ -0,0 +1,5 @@ +cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com +cn=ITD Staff,ou=Groups,dc=example,dc=com +ou=Groups, dc=example,dc=com +ou=Alumni Association, ou=People, dc=example,dc=com +cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com diff --git a/tests/data/do_search.0 b/tests/data/do_search.0 new file mode 100644 index 0000000..a5235c5 --- /dev/null +++ b/tests/data/do_search.0 @@ -0,0 +1,12 @@ +dc=example,dc=com +(cn=Barbara Jensen) +ou=people,dc=example,dc=com +(cn=Bjorn Jensen) +ou=people,dc=example,dc=com +(cn=James A Jones 1) +dc=example,dc=com +(cn=Bjorn Jensen) +dc=example,dc=com +(cn=Alumni Assoc Staff) +dc=example,dc=com +(cn=James*) diff --git a/tests/data/dynlist.out b/tests/data/dynlist.out new file mode 100644 index 0000000..8caf0e2 --- /dev/null +++ b/tests/data/dynlist.out @@ -0,0 +1,274 @@ +# Testing list search of all attrs... +dn: cn=Dynamic List,ou=Dynamic Lists,dc=example,dc=com +objectClass: groupOfURLs +cn: Dynamic List +cn: Barbara Jensen +cn: Babs Jensen +cn: Bjorn Jensen +cn: Biiff Jensen +cn: Dorothy Stevens +cn: Dot Stevens +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +cn: James A Jones 2 +cn: Jane Doe +cn: Jane Alverson +cn: Jennifer Smith +cn: Jen Smith +cn: John Doe +cn: Jonathon Doe +cn: Mark Elliot +cn: Mark A Elliot +cn: Ursula Hampster +memberURL: ldap:///ou=People,dc=example,dc=com?cn,mail?sub?(objectClass=person + ) +mail: bjensen@mailgw.example.com +mail: bjorn@mailgw.example.com +mail: dots@mail.alumni.example.com +mail: jaj@mail.alumni.example.com +mail: jjones@mailgw.example.com +mail: jdoe@woof.net +mail: jen@mail.alumni.example.com +mail: johnd@mailgw.example.com +mail: melliot@mail.alumni.example.com +mail: uham@mail.alumni.example.com + +# Testing list search of a listed attr... +dn: cn=Dynamic List,ou=Dynamic Lists,dc=example,dc=com +mail: bjensen@mailgw.example.com +mail: bjorn@mailgw.example.com +mail: dots@mail.alumni.example.com +mail: jaj@mail.alumni.example.com +mail: jjones@mailgw.example.com +mail: jdoe@woof.net +mail: jen@mail.alumni.example.com +mail: johnd@mailgw.example.com +mail: melliot@mail.alumni.example.com +mail: uham@mail.alumni.example.com + +# Testing list search of a non-listed attr... +dn: cn=Dynamic List,ou=Dynamic Lists,dc=example,dc=com +objectClass: groupOfURLs + +# Testing list search with (critical) manageDSAit... +dn: cn=Dynamic List,ou=Dynamic Lists,dc=example,dc=com +objectClass: groupOfURLs +cn: Dynamic List +memberURL: ldap:///ou=People,dc=example,dc=com?cn,mail?sub?(objectClass=person + ) + +# Testing list compare... +TRUE + +# Testing list compare (should return FALSE)... +FALSE + +# Testing list compare (should return UNDEFINED)... +Compare Result: No such attribute (16) +UNDEFINED + +# Testing list compare with manageDSAit... +FALSE + +# Testing list search of all (mapped) attrs... +dn: cn=Dynamic List,ou=Dynamic Lists,dc=example,dc=com +objectClass: groupOfURLs +cn: Dynamic List +memberURL: ldap:///ou=People,dc=example,dc=com?cn,mail?sub?(objectClass=person + ) +sn: Barbara Jensen +sn: Babs Jensen +sn: Bjorn Jensen +sn: Biiff Jensen +sn: Dorothy Stevens +sn: Dot Stevens +sn: James A Jones 1 +sn: James Jones +sn: Jim Jones +sn: James A Jones 2 +sn: Jane Doe +sn: Jane Alverson +sn: Jennifer Smith +sn: Jen Smith +sn: John Doe +sn: Jonathon Doe +sn: Mark Elliot +sn: Mark A Elliot +sn: Ursula Hampster +mail: bjensen@mailgw.example.com +mail: bjorn@mailgw.example.com +mail: dots@mail.alumni.example.com +mail: jaj@mail.alumni.example.com +mail: jjones@mailgw.example.com +mail: jdoe@woof.net +mail: jen@mail.alumni.example.com +mail: johnd@mailgw.example.com +mail: melliot@mail.alumni.example.com +mail: uham@mail.alumni.example.com + +# Testing list search of a (mapped) listed attr... +dn: cn=Dynamic List,ou=Dynamic Lists,dc=example,dc=com +sn: Barbara Jensen +sn: Babs Jensen +sn: Bjorn Jensen +sn: Biiff Jensen +sn: Dorothy Stevens +sn: Dot Stevens +sn: James A Jones 1 +sn: James Jones +sn: Jim Jones +sn: James A Jones 2 +sn: Jane Doe +sn: Jane Alverson +sn: Jennifer Smith +sn: Jen Smith +sn: John Doe +sn: Jonathon Doe +sn: Mark Elliot +sn: Mark A Elliot +sn: Ursula Hampster + +# Testing list search of a (n unmapped) listed attr... +dn: cn=Dynamic List,ou=Dynamic Lists,dc=example,dc=com +mail: bjensen@mailgw.example.com +mail: bjorn@mailgw.example.com +mail: dots@mail.alumni.example.com +mail: jaj@mail.alumni.example.com +mail: jjones@mailgw.example.com +mail: jdoe@woof.net +mail: jen@mail.alumni.example.com +mail: johnd@mailgw.example.com +mail: melliot@mail.alumni.example.com +mail: uham@mail.alumni.example.com + +# Testing list compare (mapped attrs) ... +TRUE + +# Testing list compare (mapped attrs; should return FALSE)... +FALSE + +# Testing list search of all attrs... +dn: cn=Dynamic List of Members,ou=Dynamic Lists,dc=example,dc=com +objectClass: groupOfURLs +cn: Dynamic List of Members +memberURL: ldap:///ou=People,dc=example,dc=com??sub?(objectClass=person) +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com + +# Testing list search of a listed attr... +dn: cn=Dynamic List of Members,ou=Dynamic Lists,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com + +# Testing list search of a non-listed attr... +dn: cn=Dynamic List of Members,ou=Dynamic Lists,dc=example,dc=com +objectClass: groupOfURLs + +# Testing list search with (critical) manageDSAit... +dn: cn=Dynamic List of Members,ou=Dynamic Lists,dc=example,dc=com +objectClass: groupOfURLs +cn: Dynamic List of Members +memberURL: ldap:///ou=People,dc=example,dc=com??sub?(objectClass=person) + +# Testing list compare... +TRUE + +# Testing list compare... (should return FALSE) +FALSE + +# Testing list compare (should return FALSE)... +FALSE + +# Testing list compare with manageDSAit... +FALSE + +# Testing list search without dgIdentity... +dn: cn=Dynamic List of Members,ou=Dynamic Lists,dc=example,dc=com +objectClass: groupOfURLs +cn: Dynamic List of Members +memberURL: ldap:///ou=People,dc=example,dc=com??sub?(objectClass=person) + +# Testing list search with dgIdentity... +dn: cn=Dynamic List of Members,ou=Dynamic Lists,dc=example,dc=com +objectClass: groupOfURLs +objectClass: dgIdentityAux +cn: Dynamic List of Members +memberURL: ldap:///ou=People,dc=example,dc=com??sub?(objectClass=person) +dgIdentity: cn=Bjorn Jensen,ou=Information Technology DivisioN,ou=People,dc=ex + ample,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com + +# Testing list search with dgIdentity and dgAuthz anonymously... +dn: cn=Dynamic List of Members,ou=Dynamic Lists,dc=example,dc=com +objectClass: groupOfURLs +objectClass: dgIdentityAux +cn: Dynamic List of Members +memberURL: ldap:///ou=People,dc=example,dc=com??sub?(objectClass=person) +dgIdentity: cn=Bjorn Jensen,ou=Information Technology DivisioN,ou=People,dc=ex + ample,dc=com +dgAuthz: {0}dn:cn=Barbara Jensen,ou=Information Technology DivisioN,ou=People, + dc=example,dc=com + +# Testing list search with dgIdentity and dgAuthz as the authorized identity... +dn: cn=Dynamic List of Members,ou=Dynamic Lists,dc=example,dc=com +objectClass: groupOfURLs +objectClass: dgIdentityAux +cn: Dynamic List of Members +memberURL: ldap:///ou=People,dc=example,dc=com??sub?(objectClass=person) +dgIdentity: cn=Bjorn Jensen,ou=Information Technology DivisioN,ou=People,dc=ex + ample,dc=com +dgAuthz: {0}dn:cn=Barbara Jensen,ou=Information Technology DivisioN,ou=People, + dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com + diff --git a/tests/data/emptydn.out b/tests/data/emptydn.out new file mode 100644 index 0000000..3bb9f92 --- /dev/null +++ b/tests/data/emptydn.out @@ -0,0 +1,28 @@ +dn: o=Esempio,c=IT +objectClass: organization +o: Esempio +o: Esempio S.p.A. +o: Example + +dn: o=Example,c=UK +objectClass: organization +o: Example +o: Example, Ltd. + +dn: o=Example,c=US +objectClass: organization +o: Example +o: Example, Inc. + +dn: c=IT +objectClass: country +c: IT + +dn: c=UK +objectClass: country +c: UK + +dn: c=US +objectClass: country +c: US + diff --git a/tests/data/emptydn.out.slapadd b/tests/data/emptydn.out.slapadd new file mode 100644 index 0000000..a0afec8 --- /dev/null +++ b/tests/data/emptydn.out.slapadd @@ -0,0 +1,38 @@ +dn: o=Beispiel,c=DE +objectClass: organization +o: Beispiel +o: Beispiel GmbH +o: Example + +dn: c=DE +objectClass: country +c: DE + +dn: o=Esempio,c=IT +objectClass: organization +o: Esempio +o: Esempio S.p.A. +o: Example + +dn: o=Example,c=UK +objectClass: organization +o: Example +o: Example, Ltd. + +dn: o=Example,c=US +objectClass: organization +o: Example +o: Example, Inc. + +dn: c=IT +objectClass: country +c: IT + +dn: c=UK +objectClass: country +c: UK + +dn: c=US +objectClass: country +c: US + diff --git a/tests/data/gluesync.out b/tests/data/gluesync.out new file mode 100644 index 0000000..3d53473 --- /dev/null +++ b/tests/data/gluesync.out @@ -0,0 +1,410 @@ +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: dc=example,dc=com +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,dc=example,dc=com +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 + diff --git a/tests/data/idassert.out b/tests/data/idassert.out new file mode 100644 index 0000000..53d76bb --- /dev/null +++ b/tests/data/idassert.out @@ -0,0 +1,59 @@ +dn: o=Example,c=US +objectClass: organization +objectClass: dcObject +o: Example, Inc. +dc: example + +dn: ou=People,o=Example,c=US +objectClass: organizationalUnit +ou: People + +dn: uid=bjorn,ou=People,o=Example,c=US +objectClass: inetOrgPerson +cn: Bjorn Jensen +sn: Jensen +uid: bjorn +mail: bjorn@example.com +description: *** + +dn: uid=bjensen,ou=People,o=Example,c=US +objectClass: inetOrgPerson +cn: Barbara Jensen +sn: Jensen +uid: bjensen +mail: bjensen@example.com +description: *** + +dn: ou=Groups,o=Example,c=US +objectClass: organizationalUnit +ou: Groups + +dn: cn=All,ou=Groups,o=Example,c=US +objectClass: groupOfNames +cn: All +member: uid=bjorn,ou=People,o=Example,c=US +member: uid=bjensen,ou=People,o=Example,c=US + +dn: cn=Authorizable,ou=Groups,o=Example,c=US +objectClass: groupOfNames +cn: Authorizable +member: uid=bjorn,ou=People,o=Example,c=US + +dn: ou=Admin,o=Example,c=US +objectClass: organizationalUnit +ou: Admin + +dn: cn=Proxy US,ou=Admin,o=Example,c=US +objectClass: applicationProcess +objectClass: simpleSecurityObject +cn: Proxy US + +dn: cn=Proxy IT,ou=Admin,o=Example,c=US +objectClass: applicationProcess +objectClass: simpleSecurityObject +cn: Proxy IT + +dn: cn=Sandbox,ou=Admin,o=Example,c=US +objectClass: applicationProcess +cn: Sandbox + diff --git a/tests/data/lang-out.ldif b/tests/data/lang-out.ldif new file mode 100644 index 0000000..3d5d1fb --- /dev/null +++ b/tests/data/lang-out.ldif @@ -0,0 +1,35 @@ +dn: dc=example,dc=com +dc: example +objectClass: organization +objectClass: extensibleObject +o: Example, Inc. +o;lang-x;lang-xx;lang-y;lang-yy;lang-z;lang-zz: Example, Inc. +name;lang-en-us: Billy Ray +name;lang-en-us: Billy Bob +cn;lang-en-us: Billy Ray +name: Billy Ray +sn;lang-en-gb;lang-en-us: Billy Ray +sn: Ray + +dn: dc=example,dc=com +o: Example, Inc. +o;lang-x;lang-xx;lang-y;lang-yy;lang-z;lang-zz: Example, Inc. +name;lang-en-us: Billy Ray +name;lang-en-us: Billy Bob +cn;lang-en-us: Billy Ray +name: Billy Ray +sn;lang-en-gb;lang-en-us: Billy Ray +sn: Ray + +dn: dc=example,dc=com +name;lang-en-us: Billy Ray +name;lang-en-us: Billy Bob +cn;lang-en-us: Billy Ray +sn;lang-en-gb;lang-en-us: Billy Ray + +dn: dc=example,dc=com +name;lang-en-us: Billy Ray +name;lang-en-us: Billy Bob +cn;lang-en-us: Billy Ray +sn;lang-en-gb;lang-en-us: Billy Ray + diff --git a/tests/data/ldapglue.out b/tests/data/ldapglue.out new file mode 100644 index 0000000..e781c71 --- /dev/null +++ b/tests/data/ldapglue.out @@ -0,0 +1,51 @@ +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=All,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: All +member: uid=bjorn,ou=People,dc=example,dc=com +member: uid=bjensen,ou=People,dc=example,dc=com + +dn: cn=ITD,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: ITD +member: uid=bjorn,ou=People,dc=example,dc=com + +dn: uid=proxy,ou=Groups,dc=example,dc=com +objectClass: inetOrgPerson +cn: Proxy +sn: Proxy +uid: proxy + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: People + +dn: uid=bjorn,ou=People,dc=example,dc=com +objectClass: inetOrgPerson +cn: Bjorn Jensen +sn: Jensen +uid: bjorn +mail: bjorn@example.com + +dn: uid=bjensen,ou=People,dc=example,dc=com +objectClass: inetOrgPerson +cn: Barbara Jensen +sn: Jensen +uid: bjensen +mail: bjensen@example.com + +dn: uid=proxy,ou=People,dc=example,dc=com +objectClass: inetOrgPerson +cn: Proxy +sn: Proxy +uid: proxy + diff --git a/tests/data/ldapglueanonymous.out b/tests/data/ldapglueanonymous.out new file mode 100644 index 0000000..f0b576b --- /dev/null +++ b/tests/data/ldapglueanonymous.out @@ -0,0 +1,6 @@ +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example, Inc. +dc: example + diff --git a/tests/data/manage.out b/tests/data/manage.out new file mode 100644 index 0000000..1ec0d94 --- /dev/null +++ b/tests/data/manage.out @@ -0,0 +1,508 @@ +dn: cn=All Staff,dc=example,dc=com +objectClass: groupOfNames +cn: All Staff +member: +creatorsName: cn=Someone +modifiersName: cn=Someone Else + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames +creatorsName: cn=Manager,dc=example,dc=com +modifiersName: cn=Manager,dc=example,dc=com + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames +creatorsName: cn=Manager,dc=example,dc=com +modifiersName: cn=Manager,dc=example,dc=com + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Alumni Association +creatorsName: cn=Manager,dc=example,dc=com +modifiersName: cn=Manager,dc=example,dc=com + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 +creatorsName: cn=Manager,dc=example,dc=com +testObsolete: TRUE +objectClass: obsoletePerson +objectClass: testPerson +modifiersName: cn=Manager,dc=example,dc=com + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 +creatorsName: cn=Manager,dc=example,dc=com +objectClass: testPerson +modifiersName: cn=Manager,dc=example,dc=com + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 +creatorsName: cn=Manager,dc=example,dc=com +modifiersName: cn=Manager,dc=example,dc=com + +dn: dc=example,dc=com +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com +creatorsName: cn=Manager,dc=example,dc=com +modifiersName: cn=Manager,dc=example,dc=com + +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups +creatorsName: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +modifiersName: cn=Manager,dc=example,dc=com + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== +creatorsName: cn=Manager,dc=example,dc=com +modifiersName: cn=Manager,dc=example,dc=com + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +creatorsName: cn=Manager,dc=example,dc=com +modifiersName: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc + =example,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +objectClass: testPerson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 +creatorsName: cn=Manager,dc=example,dc=com +modifiersName: cn=Manager,dc=example,dc=com + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 +creatorsName: cn=Manager,dc=example,dc=com +modifiersName: cn=Manager,dc=example,dc=com + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 +creatorsName: cn=Manager,dc=example,dc=com +modifiersName: cn=Manager,dc=example,dc=com + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 +creatorsName: cn=Manager,dc=example,dc=com +modifiersName: cn=Manager,dc=example,dc=com + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 +creatorsName: cn=Manager,dc=example,dc=com +modifiersName: cn=Manager,dc=example,dc=com + +dn: cn=Manager,dc=example,dc=com +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 +creatorsName: cn=Manager,dc=example,dc=com +modifiersName: cn=Manager,dc=example,dc=com + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 +creatorsName: cn=Manager,dc=example,dc=com +modifiersName: cn=Manager,dc=example,dc=com + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 +creatorsName: cn=Manager,dc=example,dc=com +modifiersName: cn=Manager,dc=example,dc=com + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 +creatorsName: cn=Manager,dc=example,dc=com +modifiersName: cn=Manager,dc=example,dc=com + +dn: dc=example,dc=com +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com +creatorsName: cn=Manager,dc=example,dc=com +modifyTimestamp: 19700101000000Z +createTimestamp: 19700101000000Z +modifiersName: cn=Manager,dc=example,dc=com + +dn: cn=All Staff,dc=example,dc=com +objectClass: groupOfNames +cn: All Staff +member: +entryUUID: badbadef-dbad-1029-92f7-badbadbadbad + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames +entryUUID: badbadba-dbad-1029-92f7-badbadbadbad + diff --git a/tests/data/memberof-refint.out b/tests/data/memberof-refint.out new file mode 100644 index 0000000..f63997a --- /dev/null +++ b/tests/data/memberof-refint.out @@ -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 + diff --git a/tests/data/memberof.out b/tests/data/memberof.out new file mode 100644 index 0000000..32691bb --- /dev/null +++ b/tests/data/memberof.out @@ -0,0 +1,296 @@ +# 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 after adding Jessica Rabbit and Cartoonia... +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 after renaming Baby Herman... +dn: cn=Baby Herman Jr,ou=People,dc=example,dc=com +objectClass: inetOrgPerson +sn: Herman +memberOf: cn=Cartoonia,ou=Groups,dc=example,dc=com +cn: Baby Herman Jr + +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=Baby Herman Jr,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 after renaming Cartoonia... +dn: cn=Baby Herman Jr,ou=People,dc=example,dc=com +objectClass: inetOrgPerson +sn: Herman +memberOf: cn=Toon Town,ou=Groups,dc=example,dc=com +cn: Baby Herman Jr + +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=Toon Town,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=Toon Town,ou=Groups,dc=example,dc=com + +dn: cn=Toon Town,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +member: cn=Roger Rabbit,ou=People,dc=example,dc=com +member: cn=Jessica Rabbit,ou=People,dc=example,dc=com +member: cn=Baby Herman Jr,ou=People,dc=example,dc=com +cn: Toon Town + +# Re-search the entire database after adding Toon Town to self... +dn: cn=Baby Herman Jr,ou=People,dc=example,dc=com +objectClass: inetOrgPerson +sn: Herman +memberOf: cn=Toon Town,ou=Groups,dc=example,dc=com +cn: Baby Herman Jr + +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=Toon Town,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=Toon Town,ou=Groups,dc=example,dc=com + +dn: cn=Toon Town,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +member: cn=Roger Rabbit,ou=People,dc=example,dc=com +member: cn=Jessica Rabbit,ou=People,dc=example,dc=com +member: cn=Baby Herman Jr,ou=People,dc=example,dc=com +member: cn=Toon Town,ou=Groups,dc=example,dc=com +cn: Toon Town +memberOf: cn=Toon Town,ou=Groups,dc=example,dc=com + +# Re-search the entire database after deleting Baby Herman... +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=Toon Town,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=Toon Town,ou=Groups,dc=example,dc=com + +dn: cn=Toon Town,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +member: cn=Roger Rabbit,ou=People,dc=example,dc=com +member: cn=Jessica Rabbit,ou=People,dc=example,dc=com +member: cn=Toon Town,ou=Groups,dc=example,dc=com +cn: Toon Town +memberOf: cn=Toon Town,ou=Groups,dc=example,dc=com + +# Re-search the entire database after deleting Toon Town... +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 + +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 + +# Re-search the entire database after adding groups with MAY member type schemas... +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example, Inc. +dc: example + +dn: cn=group1,ou=Groups,dc=example,dc=com +objectClass: groupA +cn: group1 + +dn: cn=group2,ou=Groups,dc=example,dc=com +objectClass: groupB +cn: group2 +memberB: cn=person1,ou=People,dc=example,dc=com +memberB: cn=person2,ou=People,dc=example,dc=com + +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: People + +dn: cn=person1,ou=People,dc=example,dc=com +objectClass: person +objectClass: groupMemberA +objectClass: groupMemberB +cn: person1 +sn: person1 +memberOfB: cn=group2,ou=Groups,dc=example,dc=com + +dn: cn=person2,ou=People,dc=example,dc=com +objectClass: person +objectClass: groupMemberA +objectClass: groupMemberB +cn: person2 +sn: person2 +memberOfB: cn=group2,ou=Groups,dc=example,dc=com + diff --git a/tests/data/meta.out b/tests/data/meta.out new file mode 100644 index 0000000..1ce8713 --- /dev/null +++ b/tests/data/meta.out @@ -0,0 +1,1450 @@ +# searching base="o=Example,c=US"... +dn: cn=All Staff,ou=Groups,o=Example,c=US +member: cn=Manager,o=Example,c=US +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Examp + le,c=US +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=John Doe,ou=Information Technology Division,ou=People,o=Example,c=U + S +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Exam + ple,c=US +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example + ,c=US +owner: cn=Manager,o=Example,c=US +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,o=Example,c=US +member: cn=Manager,o=Example,c=US +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +owner: cn=Manager,o=Example,c=US +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,o=Example,c=US +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Example,c + =US +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example,c=U + S +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Dan Aykroyd,ou=Meta,o=Example,c=US +objectClass: inetOrgPerson +cn: Dan Aykroyd +sn: Aykroyd +userPassword:: ZWx3b29k +description: Elwood Blues + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: o=Example,c=US +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,o=Example,c=US +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,o=Example,c=US +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,o=Example,c=US +owner: cn=Manager,o=Example,c=US +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Example, + c=US +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John Belushi,ou=Meta,o=Example,c=US +objectClass: inetOrgPerson +cn: John Belushi +sn: Belushi +userPassword:: amFjaw== +description: Joliet Jack Blues + +dn: cn=John Doe,ou=Information Technology Division,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,o=Example,c=US +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 + +dn: ou=Meta,o=Example,c=US +objectClass: organizationalUnit +ou: Meta +seeAlso: dc=OpenLDAP,dc=org + +dn: ou=People,o=Example,c=US +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 + +# refldap://localhost:9016/cn=Somewhere,ou=Meta,dc=example,dc=com??sub + +# searching base="ou=Meta,o=Example,c=US"... +dn: cn=Dan Aykroyd,ou=Meta,o=Example,c=US +objectClass: inetOrgPerson +cn: Dan Aykroyd +sn: Aykroyd +userPassword:: ZWx3b29k +description: Elwood Blues + +dn: cn=John Belushi,ou=Meta,o=Example,c=US +objectClass: inetOrgPerson +cn: John Belushi +sn: Belushi +userPassword:: amFjaw== +description: Joliet Jack Blues + +dn: ou=Meta,o=Example,c=US +objectClass: organizationalUnit +ou: Meta +seeAlso: dc=OpenLDAP,dc=org + +# refldap://localhost:9016/cn=Somewhere,ou=Meta,dc=example,dc=com??sub + +# searching base="o=Example,c=US"... +dn: cn=Added Group,ou=Groups,o=Example,c=US +objectClass: groupOfNames +cn: Added Group +member: cn=Added Group,ou=Groups,o=Example,c=US + +dn: cn=Added User,ou=Same as above,ou=Meta,o=Example,c=US +objectClass: inetOrgPerson +cn: Added User +sn: User +userPassword:: c2VjcmV0 + +dn: cn=All Staff,ou=Groups,o=Example,c=US +member: cn=Manager,o=Example,c=US +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Examp + le,c=US +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=John Doe,ou=Information Technology Division,ou=People,o=Example,c=U + S +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Exam + ple,c=US +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example + ,c=US +owner: cn=Manager,o=Example,c=US +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,o=Example,c=US +member: cn=Manager,o=Example,c=US +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +owner: cn=Manager,o=Example,c=US +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,o=Example,c=US +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Another Added Group,ou=Groups,o=Example,c=US +objectClass: groupOfNames +objectClass: uidObject +cn: Another Added Group +member: cn=Added Group,ou=Groups,o=Example,c=US +member: cn=Another Added Group,ou=Groups,o=Example,c=US +uid: added + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Example,c + =US +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example,c=U + S +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Dan Aykroyd,ou=Meta,o=Example,c=US +objectClass: inetOrgPerson +cn: Dan Aykroyd +sn: Aykroyd +userPassword:: ZWx3b29k +description: Elwood Blues + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: o=Example,c=US +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,o=Example,c=US +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,o=Example,c=US +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,o=Example,c=US +owner: cn=Manager,o=Example,c=US +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Example, + c=US +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John Belushi,ou=Meta,o=Example,c=US +objectClass: inetOrgPerson +cn: John Belushi +sn: Belushi +userPassword:: amFjaw== +description: Joliet Jack Blues + +dn: cn=John Doe,ou=Information Technology Division,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,o=Example,c=US +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 + +dn: ou=Meta,o=Example,c=US +objectClass: organizationalUnit +ou: Meta +seeAlso: dc=OpenLDAP,dc=org +description: added to "ou=Meta,o=Example,c=US" + +dn: ou=People,o=Example,c=US +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: ou=Same as above,o=Example,c=US +objectClass: organizationalUnit +ou: Same as above +description: added right after "Who's going to handle this?" +description: will be preserved + +dn: ou=Same as above,ou=Meta,o=Example,c=US +objectClass: organizationalUnit +ou: Same as above +description: added right after "Who's going to handle this?" +description: will be preserved + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 + +# refldap://localhost:9016/cn=Somewhere,ou=Meta,dc=example,dc=com??sub + +# base="o=Example,c=US"... +dn: cn=Added Group,ou=Groups,o=Example,c=US +objectClass: groupOfNames +cn: Added Group +member: cn=Added Group,ou=Groups,o=Example,c=US + +dn: cn=Added User,ou=Same as above,ou=Meta,o=Example,c=US +objectClass: inetOrgPerson +cn: Added User +sn: User +userPassword:: c2VjcmV0 + +dn: cn=All Staff,ou=Groups,o=Example,c=US +member: cn=Manager,o=Example,c=US +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Examp + le,c=US +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=John Doe,ou=Information Technology Division,ou=People,o=Example,c=U + S +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Exam + ple,c=US +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example + ,c=US +owner: cn=Manager,o=Example,c=US +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,o=Example,c=US +member: cn=Manager,o=Example,c=US +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +owner: cn=Manager,o=Example,c=US +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,o=Example,c=US +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Another Added Group,ou=Groups,o=Example,c=US +objectClass: groupOfNames +objectClass: uidObject +cn: Another Added Group +member: cn=Added Group,ou=Groups,o=Example,c=US +member: cn=Another Added Group,ou=Groups,o=Example,c=US +uid: added + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Example,c + =US +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example,c=U + S +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Dan Aykroyd,ou=Meta,o=Example,c=US +objectClass: inetOrgPerson +cn: Dan Aykroyd +sn: Aykroyd +userPassword:: ZWx3b29k +description: Elwood Blues + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: o=Example,c=US +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,o=Example,c=US +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,o=Example,c=US +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,o=Example,c=US +owner: cn=Manager,o=Example,c=US +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Example, + c=US +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John Belushi,ou=Meta,o=Example,c=US +objectClass: inetOrgPerson +cn: John Belushi +sn: Belushi +userPassword:: amFjaw== +description: Joliet Jack Blues + +dn: cn=John Doe,ou=Information Technology Division,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,o=Example,c=US +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 + +dn: ou=Meta,o=Example,c=US +objectClass: organizationalUnit +ou: Meta +seeAlso: dc=OpenLDAP,dc=org +description: added to "ou=Meta,o=Example,c=US" + +dn: ou=People,o=Example,c=US +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: ou=Same as above,o=Example,c=US +objectClass: organizationalUnit +ou: Same as above +description: added right after "Who's going to handle this?" +description: will be preserved + +dn: ou=Same as above,ou=Meta,o=Example,c=US +objectClass: organizationalUnit +ou: Same as above +description: added right after "Who's going to handle this?" +description: will be preserved + +dn: cn=Somewhere,ou=Meta,o=Example,c=US +objectClass: referral +objectClass: extensibleObject +cn: Somewhere +ref: ldap://localhost:9016 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 + +# searching filter="(seeAlso=cn=all staff,ou=Groups,o=Example,c=US)" +# attrs="seeAlso" +# base="o=Example,c=US"... +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Example,c + =US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example,c=U + S +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Example, + c=US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=John Doe,ou=Information Technology Division,ou=People,o=Example,c=US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +# refldap://localhost:9016/cn=Somewhere,ou=Meta,dc=example,dc=com??sub + +# searching filter="(uid=example)" +# attrs="uid" +# base="o=Example,c=US"... +# refldap://localhost:9016/cn=Somewhere,ou=Meta,dc=example,dc=com??sub + +# searching filter="(member=cn=Another Added Group,ou=Groups,o=Example,c=US)" +# attrs="member" +# base="o=Example,c=US"... +dn: cn=Another Added Group,ou=Groups,o=Example,c=US +member: cn=Added Group,ou=Groups,o=Example,c=US +member: cn=Another Added Group,ou=Groups,o=Example,c=US + +# refldap://localhost:9016/cn=Somewhere,ou=Meta,dc=example,dc=com??sub + +# searching filter="(member=cn=Another Added Group,ou=Groups,o=Example,c=US)" +# attrs="member" +# base="o=Example,c=US" +# with a timed out connection... +dn: cn=Another Added Group,ou=Groups,o=Example,c=US +member: cn=Added Group,ou=Groups,o=Example,c=US +member: cn=Another Added Group,ou=Groups,o=Example,c=US + +# refldap://localhost:9016/cn=Somewhere,ou=Meta,dc=example,dc=com??sub + +# Checking server-enforced size limit... +# Checking client-requested size limit... diff --git a/tests/data/metaconcurrency.out b/tests/data/metaconcurrency.out new file mode 100644 index 0000000..38c91e7 --- /dev/null +++ b/tests/data/metaconcurrency.out @@ -0,0 +1,431 @@ +dn: cn=All Staff,ou=Groups,o=Example,c=US +member: cn=Manager,o=Example,c=US +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Examp + le,c=US +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=John Doe,ou=Information Technology Division,ou=People,o=Example,c=U + S +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Exam + ple,c=US +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example + ,c=US +owner: cn=Manager,o=Example,c=US +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,o=Example,c=US +member: cn=Manager,o=Example,c=US +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +owner: cn=Manager,o=Example,c=US +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,o=Example,c=US +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Example,c + =US +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example,c=U + S +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Dan Aykroyd,ou=Meta,o=Example,c=US +objectClass: inetOrgPerson +cn: Dan Aykroyd +sn: Aykroyd +userPassword:: ZWx3b29k +description: Elwood Blues + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: o=Example,c=US +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,o=Example,c=US +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,o=Example,c=US +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,o=Example,c=US +owner: cn=Manager,o=Example,c=US +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Example, + c=US +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John Belushi,ou=Meta,o=Example,c=US +objectClass: inetOrgPerson +cn: John Belushi +sn: Belushi +userPassword:: amFjaw== +description: Joliet Jack Blues + +dn: cn=John Doe,ou=Information Technology Division,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,o=Example,c=US +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 + +dn: ou=Meta,o=Example,c=US +objectClass: organizationalUnit +ou: Meta +seeAlso: dc=OpenLDAP,dc=org + +dn: ou=People,o=Example,c=US +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 + +# refldap://localhost:9016/cn=Somewhere,ou=Meta,dc=example,dc=com??sub + diff --git a/tests/data/modify.out.master b/tests/data/modify.out.master new file mode 100644 index 0000000..aed6b39 --- /dev/null +++ b/tests/data/modify.out.master @@ -0,0 +1,396 @@ +dn: cn=All Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +objectClass: groupOfNames +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 +description: The replaced multiLineDescription $ Blah Woof. +drink: Iced Tea +drink: Mad Dog 20/20 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: dc=example,dc=com +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: cn=Gern Jensen,ou=Information Technology Division,ou=People,dc=example,dc= + com +objectClass: testPerson +cn: Gern Jensen +sn: Jensen +uid: gjensen +title: Chief Investigator, ITD +postalAddress: ITD $ 535 W. William St $ Anytown, MI 48103 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Coffee +homePostalAddress: 844 Brown St. Apt. 4 $ Anytown, MI 48104 +description: Very odd +facsimileTelephoneNumber: +1 313 555 7557 +telephoneNumber: +1 313 555 8343 +mail: gjensen@mailgw.example.com +homePhone: +1 313 555 8844 +testTime: 20050304001801.234Z + +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +uniqueMember: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc + =com +uniqueMember: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc + =com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 +drink: Orange Juice +sn: Jones + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,dc=example,dc=com +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 1 +gidNumber: -1 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 + diff --git a/tests/data/modrdn.out.master.0 b/tests/data/modrdn.out.master.0 new file mode 100644 index 0000000..77105b8 --- /dev/null +++ b/tests/data/modrdn.out.master.0 @@ -0,0 +1,411 @@ +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: dc=example,dc=com +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones II,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +objectClass: OpenLDAPperson +cn: James Jones +cn: Jim Jones +cn: James A Jones II +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=James A Jones III,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +cn: James A Jones III +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,dc=example,dc=com +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 + diff --git a/tests/data/modrdn.out.master.1 b/tests/data/modrdn.out.master.1 new file mode 100644 index 0000000..5466e51 --- /dev/null +++ b/tests/data/modrdn.out.master.1 @@ -0,0 +1,20 @@ +dn: cn=James A Jones III,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +cn: James A Jones III +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + diff --git a/tests/data/modrdn.out.master.2 b/tests/data/modrdn.out.master.2 new file mode 100644 index 0000000..057ec93 --- /dev/null +++ b/tests/data/modrdn.out.master.2 @@ -0,0 +1,19 @@ +dn: cn=James A Jones II,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +objectClass: OpenLDAPperson +cn: James Jones +cn: Jim Jones +cn: James A Jones II +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + diff --git a/tests/data/modrdn.out.master.3 b/tests/data/modrdn.out.master.3 new file mode 100644 index 0000000..67299dc --- /dev/null +++ b/tests/data/modrdn.out.master.3 @@ -0,0 +1,19 @@ +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + diff --git a/tests/data/monitor1.out b/tests/data/monitor1.out new file mode 100644 index 0000000..5919248 --- /dev/null +++ b/tests/data/monitor1.out @@ -0,0 +1,31 @@ +dn: cn=Connection 1001,cn=Connections,cn=Monitor +structuralObjectClass: monitorConnection +monitorConnectionProtocol: 3 +monitorConnectionOpsReceived: 2 +monitorConnectionOpsExecuting: 1 +monitorConnectionOpsPending: 0 +monitorConnectionOpsCompleted: 1 +monitorConnectionGet: 2 +monitorConnectionRead: 2 +monitorConnectionWrite: 0 +monitorConnectionMask: rx +monitorConnectionListener: ldap://localhost:@PORT1@/ +monitorConnectionLocalAddress: IP=127.0.0.1:@PORT1@ +entryDN: cn=Connection 1001,cn=Connections,cn=Monitor + +dn: cn=Connections,cn=Monitor +structuralObjectClass: monitorContainer +entryDN: cn=Connections,cn=Monitor + +dn: cn=Current,cn=Connections,cn=Monitor +structuralObjectClass: monitorCounterObject +entryDN: cn=Current,cn=Connections,cn=Monitor + +dn: cn=Max File Descriptors,cn=Connections,cn=Monitor +structuralObjectClass: monitorCounterObject +entryDN: cn=Max File Descriptors,cn=Connections,cn=Monitor + +dn: cn=Total,cn=Connections,cn=Monitor +structuralObjectClass: monitorCounterObject +entryDN: cn=Total,cn=Connections,cn=Monitor + diff --git a/tests/data/monitor2.out b/tests/data/monitor2.out new file mode 100644 index 0000000..26e9ce9 --- /dev/null +++ b/tests/data/monitor2.out @@ -0,0 +1,40 @@ +dn: cn=Database 0,cn=Databases,cn=Monitor +structuralObjectClass: monitoredObject +monitorIsShadow: FALSE +namingContexts: cn=config +readOnly: FALSE +entryDN: cn=Database 0,cn=Databases,cn=Monitor + +dn: cn=Database 1,cn=Databases,cn=Monitor +structuralObjectClass: monitoredObject +monitorIsShadow: FALSE +namingContexts: o=OpenLDAP Project,l=Internet +readOnly: FALSE +olmBDBEntryCache: 0 +olmBDBDNCache: 0 +olmBDBIDLCache: 0 +entryDN: cn=Database 1,cn=Databases,cn=Monitor + +dn: cn=Database 2,cn=Databases,cn=Monitor +structuralObjectClass: monitoredObject +monitorIsShadow: FALSE +monitorContext: cn=Monitor +readOnly: FALSE +entryDN: cn=Database 2,cn=Databases,cn=Monitor + +dn: cn=Databases,cn=Monitor +structuralObjectClass: monitorContainer +readOnly: FALSE +namingContexts: +namingContexts: cn=config +namingContexts: o=OpenLDAP Project,l=Internet +monitorContext: cn=Monitor +entryDN: cn=Databases,cn=Monitor + +dn: cn=Frontend,cn=Databases,cn=Monitor +structuralObjectClass: monitoredObject +monitorIsShadow: FALSE +namingContexts: +readOnly: FALSE +entryDN: cn=Frontend,cn=Databases,cn=Monitor + diff --git a/tests/data/monitor3.out b/tests/data/monitor3.out new file mode 100644 index 0000000..b40e98b --- /dev/null +++ b/tests/data/monitor3.out @@ -0,0 +1,15 @@ +dn: cn=Entries,cn=Statistics,cn=Monitor +structuralObjectClass: monitorCounterObject +monitorCounter: 12 +entryDN: cn=Entries,cn=Statistics,cn=Monitor + +dn: cn=PDU,cn=Statistics,cn=Monitor +structuralObjectClass: monitorCounterObject +monitorCounter: 18 +entryDN: cn=PDU,cn=Statistics,cn=Monitor + +dn: cn=Referrals,cn=Statistics,cn=Monitor +structuralObjectClass: monitorCounterObject +monitorCounter: 0 +entryDN: cn=Referrals,cn=Statistics,cn=Monitor + diff --git a/tests/data/monitor4.out b/tests/data/monitor4.out new file mode 100644 index 0000000..f6e82d3 --- /dev/null +++ b/tests/data/monitor4.out @@ -0,0 +1,66 @@ +dn: cn=Abandon,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 0 +monitorOpCompleted: 0 +entryDN: cn=Abandon,cn=Operations,cn=Monitor + +dn: cn=Add,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 0 +monitorOpCompleted: 0 +entryDN: cn=Add,cn=Operations,cn=Monitor + +dn: cn=Bind,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 5 +monitorOpCompleted: 5 +entryDN: cn=Bind,cn=Operations,cn=Monitor + +dn: cn=Compare,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 0 +monitorOpCompleted: 0 +entryDN: cn=Compare,cn=Operations,cn=Monitor + +dn: cn=Delete,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 0 +monitorOpCompleted: 0 +entryDN: cn=Delete,cn=Operations,cn=Monitor + +dn: cn=Extended,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 0 +monitorOpCompleted: 0 +entryDN: cn=Extended,cn=Operations,cn=Monitor + +dn: cn=Modify,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 0 +monitorOpCompleted: 0 +entryDN: cn=Modify,cn=Operations,cn=Monitor + +dn: cn=Modrdn,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 0 +monitorOpCompleted: 0 +entryDN: cn=Modrdn,cn=Operations,cn=Monitor + +dn: cn=Operations,cn=Monitor +structuralObjectClass: monitorContainer +monitorOpInitiated: 14 +monitorOpCompleted: 13 +entryDN: cn=Operations,cn=Monitor + +dn: cn=Search,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 5 +monitorOpCompleted: 4 +entryDN: cn=Search,cn=Operations,cn=Monitor + +dn: cn=Unbind,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 4 +monitorOpCompleted: 4 +entryDN: cn=Unbind,cn=Operations,cn=Monitor + diff --git a/tests/data/ndb.conf b/tests/data/ndb.conf new file mode 100644 index 0000000..6597f98 --- /dev/null +++ b/tests/data/ndb.conf @@ -0,0 +1,23 @@ +# back-ndb boilerplate config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +dbuser root +dbhost localhost +dbconnect 127.0.0.1 +dbsocket /tmp/mysql.sock +attrset extensibleObject uidNumber,gidNumber +attrblob description +index cn +#index sn diff --git a/tests/data/nis_sample.ldif b/tests/data/nis_sample.ldif new file mode 100644 index 0000000..2f4e22b --- /dev/null +++ b/tests/data/nis_sample.ldif @@ -0,0 +1,8092 @@ +dn: o=SGI, c=US +o: SGI +objectclass: organization +objectclass: top + +dn: cn=sys, o=SGI, c=US +cn: sys +userPassword: +gidNumber: 0 +memberUid: root +memberUid: bin +memberUid: sys +memberUid: adm +objectclass: posixGroup +objectclass: top + +dn: cn=root, o=SGI, c=US +cn: root +userPassword: +gidNumber: 0 +memberUid: root +objectclass: posixGroup +objectclass: top + +dn: cn=daemon, o=SGI, c=US +cn: daemon +userPassword: +gidNumber: 1 +memberUid: root +memberUid: daemon +objectclass: posixGroup +objectclass: top + +dn: cn=bin, o=SGI, c=US +cn: bin +userPassword: +gidNumber: 2 +memberUid: root +memberUid: bin +memberUid: daemon +objectclass: posixGroup +objectclass: top + +dn: cn=adm, o=SGI, c=US +cn: adm +userPassword: +gidNumber: 3 +memberUid: root +memberUid: adm +memberUid: daemon +objectclass: posixGroup +objectclass: top + +dn: cn=mail, o=SGI, c=US +cn: mail +userPassword: +gidNumber: 4 +memberUid: root +objectclass: posixGroup +objectclass: top + +dn: cn=uucp, o=SGI, c=US +cn: uucp +userPassword: +gidNumber: 5 +memberUid: uucp +objectclass: posixGroup +objectclass: top + +dn: cn=rje, o=SGI, c=US +cn: rje +userPassword: +gidNumber: 8 +objectclass: posixGroup +objectclass: top + +dn: cn=lp, o=SGI, c=US +cn: lp +userPassword: * +gidNumber: 9 +objectclass: posixGroup +objectclass: top + +dn: cn=nuucp, o=SGI, c=US +cn: nuucp +userPassword: +gidNumber: 10 +memberUid: nuucp +objectclass: posixGroup +objectclass: top + +dn: cn=user, o=SGI, c=US +cn: user +userPassword: +gidNumber: 20 +objectclass: posixGroup +objectclass: top + +dn: cn=CMWlogin, o=SGI, c=US +cn: CMWlogin +userPassword: +gidNumber: 994 +objectclass: posixGroup +objectclass: top + +dn: cn=other, o=SGI, c=US +cn: other +userPassword: +gidNumber: 995 +objectclass: posixGroup +objectclass: top + +dn: cn=demos, o=SGI, c=US +cn: demos +userPassword: * +gidNumber: 997 +objectclass: posixGroup +objectclass: top + +dn: cn=guest, o=SGI, c=US +cn: guest +userPassword: * +gidNumber: 998 +objectclass: posixGroup +objectclass: top + +dn: cn=nobody, o=SGI, c=US +cn: nobody +userPassword: * +gidNumber: 60001 +objectclass: posixGroup +objectclass: top + +dn: cn=mt-everest, o=SGI, c=US +cn: mt-everest +cn: mt-everest.engr.sgi.com +cn: mt-everest +ipHostNumber: 150.166.97.201 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=IRIS, o=SGI, c=US +cn: IRIS +cn: IRIS +ipHostNumber: 192.0.2.1 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=localhost, o=SGI, c=US +cn: localhost +cn: localhost +ipHostNumber: 127.0.0.1 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=all-systems, o=SGI, c=US +cn: all-systems +cn: all-systems.mcast.net +ipHostNumber: 224.0.0.1 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=all-routers, o=SGI, c=US +cn: all-routers +cn: all-routers.mcast.net +ipHostNumber: 224.0.0.2 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=dvmrp, o=SGI, c=US +cn: dvmrp +cn: dvmrp.mcast.net +ipHostNumber: 224.0.0.4 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=ospf-all, o=SGI, c=US +cn: ospf-all +cn: ospf-all.mcast.net +ipHostNumber: 224.0.0.5 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=ospf-dsig, o=SGI, c=US +cn: ospf-dsig +cn: ospf-dsig.mcast.net +ipHostNumber: 224.0.0.6 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=ntp, o=SGI, c=US +cn: ntp +cn: ntp.mcast.net +ipHostNumber: 224.0.1.1 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=sgi-dog, o=SGI, c=US +cn: sgi-dog +cn: sgi-dog.mcast.net +ipHostNumber: 224.0.1.2 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=rwhod, o=SGI, c=US +cn: rwhod +cn: rwhod.mcast.net +ipHostNumber: 224.0.1.3 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=rwho, o=SGI, c=US +cn: rwho +cn: rwho.mcast.net +ipHostNumber: 224.0.2.1 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=sun-rpc, o=SGI, c=US +cn: sun-rpc +cn: sun-rpc.mcast.net +ipHostNumber: 224.0.2.2 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=localhost, o=SGI, c=US +cn: localhost +cn: localhost +cn: localhost.engr.sgi.com +cn: loghost +ipHostNumber: 127.1 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=mcast, o=SGI, c=US +cn: mcast +cn: mcast. +ipHostNumber: 224.0.0.0 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=allhosts-mcast, o=SGI, c=US +cn: allhosts-mcast +cn: allhosts-mcast. +ipHostNumber: 224.0.0.1 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=allgates-mcast, o=SGI, c=US +cn: allgates-mcast +cn: allgates-mcast. +ipHostNumber: 224.0.0.2 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=dvmrp-mcast, o=SGI, c=US +cn: dvmrp-mcast +cn: dvmrp-mcast. +ipHostNumber: 224.0.0.4 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=ospf-all-routers-mcast, o=SGI, c=US +cn: ospf-all-routers-mcast +cn: ospf-all-routers-mcast. +ipHostNumber: 224.0.0.5 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=ospf-desi-routers-mcast, o=SGI, c=US +cn: ospf-desi-routers-mcast +cn: ospf-desi-routers-mcast. +ipHostNumber: 224.0.0.6 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=ntp-mcast, o=SGI, c=US +cn: ntp-mcast +cn: ntp-mcast. +ipHostNumber: 224.0.1.1 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=sgi-dog-mcast, o=SGI, c=US +cn: sgi-dog-mcast +cn: sgi-dog-mcast. +ipHostNumber: 224.0.1.2 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=rwhod-mcast, o=SGI, c=US +cn: rwhod-mcast +cn: rwhod-mcast. +ipHostNumber: 224.0.1.3 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=rwho-mcast, o=SGI, c=US +cn: rwho-mcast +cn: rwho-mcast. +ipHostNumber: 224.0.2.1 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=pmap-mcast, o=SGI, c=US +cn: pmap-mcast +cn: pmap-mcast. +ipHostNumber: 224.0.2.2 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=fddi-odin, o=SGI, c=US +cn: fddi-odin +cn: fddi-odin.corp.sgi.com +cn: fddi-odin +cn: relay.sgi.com +cn: oni +cn: sgihub +ipHostNumber: 198.29.75.194 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=sgigate, o=SGI, c=US +cn: sgigate +cn: sgigate.sgi.com +cn: socks-proxy-server.sgi.com +cn: sgigate +cn: socks-proxy +cn: socks +ipHostNumber: 198.29.75.75 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=odin, o=SGI, c=US +cn: odin +cn: odin.corp.sgi.com +cn: odin +cn: gate-odin +ipHostNumber: 192.26.51.194 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=relay, o=SGI, c=US +cn: relay +cn: relay.esd.sgi.com +cn: ares +cn: esd +ipHostNumber: 130.62.72.10 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=rock, o=SGI, c=US +cn: rock +cn: rock.csd.sgi.com +cn: csd.sgi.com +cn: relay.csd.sgi.com +cn: rock +ipHostNumber: 150.166.101.10 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=stiletto, o=SGI, c=US +cn: stiletto +cn: stiletto +ipHostNumber: 150.166.42.26 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=stiletto, o=SGI, c=US +cn: stiletto +cn: stiletto.engr.sgi.com +cn: stiletto +ipHostNumber: 150.166.42.26 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=lhola, o=SGI, c=US +cn: lhola +cn: lhola.engr.sgi.com +cn: lhola +ipHostNumber: 150.166.75.55 +objectclass: ipHost +objectclass: device +objectclass: top + +dn: cn=dhcp-166-75-76, o=SGI, c=US +cn: dhcp-166-75-76 +cn: dhcp-166-75-76.engr.sgi.com +cn: dhcp-166-75-76 +macAddress: 8:0:69:2:ed:b3 +ipHostNumber: 150.166.75.76 +objectclass: ipHost +objectclass: device +objectclass: top +objectclass: ieee802Device + +dn: cn=loopback, o=SGI, c=US +cn: loopback +cn: loopback.sgi.com +ipNetworkNumber: 127 +objectclass: ipNetwork +objectclass: top + +dn: cn=sgicust, o=SGI, c=US +cn: sgicust +ipNetworkNumber: 192.26.50 +objectclass: ipNetwork +objectclass: top + +dn: cn=bacbone, o=SGI, c=US +cn: bacbone +ipNetworkNumber: 192.26.51 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2, o=SGI, c=US +cn: b2 +ipNetworkNumber: 192.26.52 +objectclass: ipNetwork +objectclass: top + +dn: cn=b4-esdvt-fddi-test-net, o=SGI, c=US +cn: b4-esdvt-fddi-test-net +ipNetworkNumber: 192.26.53 +objectclass: ipNetwork +objectclass: top + +dn: cn=b3u-engr-slip, o=SGI, c=US +cn: b3u-engr-slip +ipNetworkNumber: 192.26.54 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-isdn-fddibackbone, o=SGI, c=US +cn: b2u-isdn-fddibackbone +ipNetworkNumber: 192.26.55 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-isdn-net, o=SGI, c=US +cn: b2u-isdn-net +ipNetworkNumber: 192.26.56 +objectclass: ipNetwork +objectclass: top + +dn: cn=b4, o=SGI, c=US +cn: b4 +ipNetworkNumber: 192.26.57 +objectclass: ipNetwork +objectclass: top + +dn: cn=b3u-ffdi-lab, o=SGI, c=US +cn: b3u-ffdi-lab +ipNetworkNumber: 192.26.59 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2-gandalf, o=SGI, c=US +cn: b2-gandalf +ipNetworkNumber: 192.26.60 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9U, o=SGI, c=US +cn: b9U +ipNetworkNumber: 192.26.61 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-vis-sim, o=SGI, c=US +cn: b7l-vis-sim +ipNetworkNumber: 192.26.62 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9L-rel, o=SGI, c=US +cn: b9L-rel +ipNetworkNumber: 192.26.63 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8-ofc, o=SGI, c=US +cn: b8-ofc +ipNetworkNumber: 192.26.65 +objectclass: ipNetwork +objectclass: top + +dn: cn=b12-mfg-lab, o=SGI, c=US +cn: b12-mfg-lab +ipNetworkNumber: 192.26.66 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-psd-sw, o=SGI, c=US +cn: b1-psd-sw +ipNetworkNumber: 192.26.67 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9L-comp-ffdi, o=SGI, c=US +cn: b9L-comp-ffdi +ipNetworkNumber: 192.26.68 +objectclass: ipNetwork +objectclass: top + +dn: cn=wpd-dless, o=SGI, c=US +cn: wpd-dless +ipNetworkNumber: 192.26.69 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2L-VSG-staff, o=SGI, c=US +cn: b2L-VSG-staff +ipNetworkNumber: 192.26.70 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-nei2, o=SGI, c=US +cn: b2u-nei2 +ipNetworkNumber: 192.26.71 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7u-gfxsw, o=SGI, c=US +cn: b7u-gfxsw +ipNetworkNumber: 192.26.72 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7u-gfxhw, o=SGI, c=US +cn: b7u-gfxhw +ipNetworkNumber: 192.26.73 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9l-ids, o=SGI, c=US +cn: b9l-ids +ipNetworkNumber: 192.26.74 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9u-ng, o=SGI, c=US +cn: b9u-ng +ipNetworkNumber: 192.26.75 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9l-pfng1, o=SGI, c=US +cn: b9l-pfng1 +ipNetworkNumber: 192.26.76 +objectclass: ipNetwork +objectclass: top + +dn: cn=b789atm, o=SGI, c=US +cn: b789atm +ipNetworkNumber: 192.26.77 +objectclass: ipNetwork +objectclass: top + +dn: cn=wpd-slip, o=SGI, c=US +cn: wpd-slip +ipNetworkNumber: 192.26.78 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9l-pubs, o=SGI, c=US +cn: b9l-pubs +ipNetworkNumber: 192.26.79 +objectclass: ipNetwork +objectclass: top + +dn: cn=engr-fddi, o=SGI, c=US +cn: engr-fddi +ipNetworkNumber: 192.26.80 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dms, o=SGI, c=US +cn: b1-dms +ipNetworkNumber: 192.26.81 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-os, o=SGI, c=US +cn: b7l-os +cn: sgi48-150.sgi.com +ipNetworkNumber: 192.48.150 +objectclass: ipNetwork +objectclass: top + +dn: cn=show, o=SGI, c=US +cn: show +ipNetworkNumber: 192.26.82 +objectclass: ipNetwork +objectclass: top + +dn: cn=timewarner-fsn, o=SGI, c=US +cn: timewarner-fsn +ipNetworkNumber: 192.48.146 +objectclass: ipNetwork +objectclass: top + +dn: cn=vtel-mcast-net, o=SGI, c=US +cn: vtel-mcast-net +ipNetworkNumber: 192.48.147 +objectclass: ipNetwork +objectclass: top + +dn: cn=b24u-lab, o=SGI, c=US +cn: b24u-lab +ipNetworkNumber: 192.48.148 +objectclass: ipNetwork +objectclass: top + +dn: cn=wpd-fddi2, o=SGI, c=US +cn: wpd-fddi2 +ipNetworkNumber: 192.48.149 +objectclass: ipNetwork +objectclass: top + +dn: cn=b24u-lab, o=SGI, c=US +cn: b24u-lab +ipNetworkNumber: 192.48.151 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-polevault, o=SGI, c=US +cn: b1-polevault +ipNetworkNumber: 192.48.152 +objectclass: ipNetwork +objectclass: top + +dn: cn=barrnet, o=SGI, c=US +cn: barrnet +ipNetworkNumber: 192.48.153 +objectclass: ipNetwork +objectclass: top + +dn: cn=b3u-eisa-lab, o=SGI, c=US +cn: b3u-eisa-lab +ipNetworkNumber: 192.48.154 +objectclass: ipNetwork +objectclass: top + +dn: cn=hippi-net, o=SGI, c=US +cn: hippi-net +ipNetworkNumber: 192.48.155 +objectclass: ipNetwork +objectclass: top + +dn: cn=munich-support, o=SGI, c=US +cn: munich-support +ipNetworkNumber: 192.48.156 +objectclass: ipNetwork +objectclass: top + +dn: cn=boston, o=SGI, c=US +cn: boston +ipNetworkNumber: 192.48.157 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9L-pfng3, o=SGI, c=US +cn: b9L-pfng3 +cn: sgi44 +ipNetworkNumber: 192.48.158 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9L-pfng4, o=SGI, c=US +cn: b9L-pfng4 +cn: sgi45 +ipNetworkNumber: 192.48.159 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9L-pfng5, o=SGI, c=US +cn: b9L-pfng5 +cn: sgi46 +ipNetworkNumber: 192.48.160 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9L-pfng6, o=SGI, c=US +cn: b9L-pfng6 +cn: sgi47 +ipNetworkNumber: 192.48.161 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9L-pfng7, o=SGI, c=US +cn: b9L-pfng7 +cn: sgi48 +ipNetworkNumber: 192.48.162 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9L-pfng8, o=SGI, c=US +cn: b9L-pfng8 +cn: sgi49 +ipNetworkNumber: 192.48.163 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9u-eprise, o=SGI, c=US +cn: b9u-eprise +cn: sgi48-164.sgi.com +ipNetworkNumber: 192.48.164 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-oslab, o=SGI, c=US +cn: b7l-oslab +cn: sgi51 +ipNetworkNumber: 192.48.165 +objectclass: ipNetwork +objectclass: top + +dn: cn=add-brds_lab1, o=SGI, c=US +cn: add-brds_lab1 +ipNetworkNumber: 192.48.166 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8u-informix, o=SGI, c=US +cn: b8u-informix +ipNetworkNumber: 192.48.167 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dm-fddi, o=SGI, c=US +cn: b1-dm-fddi +cn: sgi48-168 +ipNetworkNumber: 192.48.168 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9l-isdn, o=SGI, c=US +cn: b9l-isdn +cn: sgi48-169 +ipNetworkNumber: 192.48.169 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-teleconf, o=SGI, c=US +cn: b1-teleconf +cn: sgi48-170.sgi.com +ipNetworkNumber: 192.48.170 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9u-tr3, o=SGI, c=US +cn: b9u-tr3 +cn: sgi48-171.sgi.com +ipNetworkNumber: 192.48.171 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7-slip, o=SGI, c=US +cn: b7-slip +cn: sgi48-172.sgi.com +ipNetworkNumber: 192.48.172 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9l-sqa-fddi, o=SGI, c=US +cn: b9l-sqa-fddi +cn: sgi48-173.sgi.com +ipNetworkNumber: 192.48.173 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-asd-fddi, o=SGI, c=US +cn: b7l-asd-fddi +cn: sgi48-174 +ipNetworkNumber: 192.48.174 +objectclass: ipNetwork +objectclass: top + +dn: cn=sgi48-175, o=SGI, c=US +cn: sgi48-175 +ipNetworkNumber: 192.48.175 +objectclass: ipNetwork +objectclass: top + +dn: cn=sgi48-176, o=SGI, c=US +cn: sgi48-176 +ipNetworkNumber: 192.48.176 +objectclass: ipNetwork +objectclass: top + +dn: cn=sgi48-177, o=SGI, c=US +cn: sgi48-177 +ipNetworkNumber: 192.48.177 +objectclass: ipNetwork +objectclass: top + +dn: cn=sgi48-178, o=SGI, c=US +cn: sgi48-178 +ipNetworkNumber: 192.48.178 +objectclass: ipNetwork +objectclass: top + +dn: cn=sgi48-179, o=SGI, c=US +cn: sgi48-179 +ipNetworkNumber: 192.48.179 +objectclass: ipNetwork +objectclass: top + +dn: cn=engr-ppp-2, o=SGI, c=US +cn: engr-ppp-2 +ipNetworkNumber: 192.48.180 +objectclass: ipNetwork +objectclass: top + +dn: cn=engr-ppp-3, o=SGI, c=US +cn: engr-ppp-3 +ipNetworkNumber: 192.48.181 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-tpc3, o=SGI, c=US +cn: b7l-tpc3 +cn: sgi48-182 +ipNetworkNumber: 192.48.182 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-tpc4, o=SGI, c=US +cn: b7l-tpc4 +cn: sgi48-183 +ipNetworkNumber: 192.48.183 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-tpc5, o=SGI, c=US +cn: b7l-tpc5 +cn: sgi48-184 +ipNetworkNumber: 192.48.184 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-tpc6, o=SGI, c=US +cn: b7l-tpc6 +cn: sgi48-185 +ipNetworkNumber: 192.48.185 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-tpc7, o=SGI, c=US +cn: b7l-tpc7 +cn: sgi48-186 +ipNetworkNumber: 192.48.186 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-tpc8, o=SGI, c=US +cn: b7l-tpc8 +cn: sgi48-187 +ipNetworkNumber: 192.48.187 +objectclass: ipNetwork +objectclass: top + +dn: cn=bldr-fddi_1, o=SGI, c=US +cn: bldr-fddi_1 +cn: sgi48-188.sgi.com +ipNetworkNumber: 192.48.188 +objectclass: ipNetwork +objectclass: top + +dn: cn=bldr-fddi_2, o=SGI, c=US +cn: bldr-fddi_2 +cn: sgi48-189.sgi.com +ipNetworkNumber: 192.48.189 +objectclass: ipNetwork +objectclass: top + +dn: cn=bldr-ether, o=SGI, c=US +cn: bldr-ether +cn: sgi48-190.sgi.com +ipNetworkNumber: 192.48.190 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-visual, o=SGI, c=US +cn: b1-visual +ipNetworkNumber: 192.48.191 +objectclass: ipNetwork +objectclass: top + +dn: cn=b3-esd-swlabs, o=SGI, c=US +cn: b3-esd-swlabs +ipNetworkNumber: 192.48.192 +objectclass: ipNetwork +objectclass: top + +dn: cn=b4-mfg-dvt, o=SGI, c=US +cn: b4-mfg-dvt +ipNetworkNumber: 192.48.194 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-pppnet, o=SGI, c=US +cn: b9-pppnet +ipNetworkNumber: 192.48.195 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-servers, o=SGI, c=US +cn: b7l-servers +ipNetworkNumber: 192.48.196 +objectclass: ipNetwork +objectclass: top + +dn: cn=is-slipnet, o=SGI, c=US +cn: is-slipnet +ipNetworkNumber: 192.48.197 +objectclass: ipNetwork +objectclass: top + +dn: cn=b3-esd-sw, o=SGI, c=US +cn: b3-esd-sw +ipNetworkNumber: 192.48.198 +objectclass: ipNetwork +objectclass: top + +dn: cn=ha-net, o=SGI, c=US +cn: ha-net +ipNetworkNumber: 192.48.199 +objectclass: ipNetwork +objectclass: top + +dn: cn=b21-awmtv-200, o=SGI, c=US +cn: b21-awmtv-200 +ipNetworkNumber: 192.48.200 +objectclass: ipNetwork +objectclass: top + +dn: cn=b21-awmtv-201, o=SGI, c=US +cn: b21-awmtv-201 +ipNetworkNumber: 192.48.201 +objectclass: ipNetwork +objectclass: top + +dn: cn=voxproc, o=SGI, c=US +cn: voxproc +ipNetworkNumber: 192.48.202 +objectclass: ipNetwork +objectclass: top + +dn: cn=b4-csd-repair, o=SGI, c=US +cn: b4-csd-repair +ipNetworkNumber: 192.48.203 +objectclass: ipNetwork +objectclass: top + +dn: cn=b3-swltest, o=SGI, c=US +cn: b3-swltest +ipNetworkNumber: 192.48.204 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2l-system-lab, o=SGI, c=US +cn: b2l-system-lab +ipNetworkNumber: 192.48.205 +objectclass: ipNetwork +objectclass: top + +dn: cn=nawaf-home_net, o=SGI, c=US +cn: nawaf-home_net +ipNetworkNumber: 192.48.206 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-wpd-qa1, o=SGI, c=US +cn: b9-wpd-qa1 +ipNetworkNumber: 192.82.162 +objectclass: ipNetwork +objectclass: top + +dn: cn=fddi-net, o=SGI, c=US +cn: fddi-net +ipNetworkNumber: 192.82.163 +objectclass: ipNetwork +objectclass: top + +dn: cn=fddi-mezz, o=SGI, c=US +cn: fddi-mezz +ipNetworkNumber: 192.82.164 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8-b11_fddi-test, o=SGI, c=US +cn: b8-b11_fddi-test +ipNetworkNumber: 192.82.165 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-mooosehead, o=SGI, c=US +cn: b1-mooosehead +ipNetworkNumber: 192.82.166 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-ppp-slip, o=SGI, c=US +cn: b7l-ppp-slip +ipNetworkNumber: 192.82.167 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-mfg, o=SGI, c=US +cn: b11-mfg +ipNetworkNumber: 192.82.168 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-slip_ppp, o=SGI, c=US +cn: b1-slip_ppp +ipNetworkNumber: 192.82.169 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2-modem-net, o=SGI, c=US +cn: b2-modem-net +ipNetworkNumber: 192.82.170 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-tools, o=SGI, c=US +cn: b1-tools +ipNetworkNumber: 192.82.171 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-asd, o=SGI, c=US +cn: b7l-asd +ipNetworkNumber: 192.82.172 +objectclass: ipNetwork +objectclass: top + +dn: cn=mel-net, o=SGI, c=US +cn: mel-net +ipNetworkNumber: 192.82.173 +objectclass: ipNetwork +objectclass: top + +dn: cn=b12-business, o=SGI, c=US +cn: b12-business +ipNetworkNumber: 192.82.174 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-east, o=SGI, c=US +cn: b11-east +ipNetworkNumber: 192.82.175 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-west, o=SGI, c=US +cn: b11-west +ipNetworkNumber: 192.82.176 +objectclass: ipNetwork +objectclass: top + +dn: cn=china-web_test, o=SGI, c=US +cn: china-web_test +ipNetworkNumber: 192.82.177 +objectclass: ipNetwork +objectclass: top + +dn: cn=aw-net1, o=SGI, c=US +cn: aw-net1 +ipNetworkNumber: 192.82.178 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-firewall-testing, o=SGI, c=US +cn: b1-firewall-testing +ipNetworkNumber: 192.82.179 +objectclass: ipNetwork +objectclass: top + +dn: cn=b3-corptest, o=SGI, c=US +cn: b3-corptest +ipNetworkNumber: 192.82.180 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9u-networking, o=SGI, c=US +cn: b9u-networking +ipNetworkNumber: 192.82.181 +objectclass: ipNetwork +objectclass: top + +dn: cn=uk, o=SGI, c=US +cn: uk +ipNetworkNumber: 192.82.182 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8l-lab, o=SGI, c=US +cn: b8l-lab +ipNetworkNumber: 192.82.183 +objectclass: ipNetwork +objectclass: top + +dn: cn=isdn-net, o=SGI, c=US +cn: isdn-net +ipNetworkNumber: 192.82.184 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2-hwlab, o=SGI, c=US +cn: b2-hwlab +ipNetworkNumber: 192.82.185 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-labs, o=SGI, c=US +cn: b2u-labs +ipNetworkNumber: 192.82.186 +objectclass: ipNetwork +objectclass: top + +dn: cn=b4-csd, o=SGI, c=US +cn: b4-csd +ipNetworkNumber: 192.82.187 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-mfg-cubes, o=SGI, c=US +cn: b11-mfg-cubes +ipNetworkNumber: 192.82.188 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9l-media-lab, o=SGI, c=US +cn: b9l-media-lab +ipNetworkNumber: 192.82.189 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-ort-lab, o=SGI, c=US +cn: b11-ort-lab +ipNetworkNumber: 192.82.190 +objectclass: ipNetwork +objectclass: top + +dn: cn=meriden, o=SGI, c=US +cn: meriden +ipNetworkNumber: 192.82.191 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-idslabdev, o=SGI, c=US +cn: b9-idslabdev +ipNetworkNumber: 192.82.192 +objectclass: ipNetwork +objectclass: top + +dn: cn=sylvain-siou-net, o=SGI, c=US +cn: sylvain-siou-net +ipNetworkNumber: 192.82.193 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7u-hwtest, o=SGI, c=US +cn: b7u-hwtest +ipNetworkNumber: 192.82.194 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-mktg-high_performance-lab, o=SGI, c=US +cn: b7l-mktg-high_performance-lab +ipNetworkNumber: 192.82.195 +objectclass: ipNetwork +objectclass: top + +dn: cn=wan-serial-routers, o=SGI, c=US +cn: wan-serial-routers +ipNetworkNumber: 192.82.196 +objectclass: ipNetwork +objectclass: top + +dn: cn=gouda-net, o=SGI, c=US +cn: gouda-net +ipNetworkNumber: 192.82.197 +objectclass: ipNetwork +objectclass: top + +dn: cn=xfs-slip, o=SGI, c=US +cn: xfs-slip +ipNetworkNumber: 192.82.198 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-ngs-net, o=SGI, c=US +cn: b1-ngs-net +ipNetworkNumber: 192.82.200 +objectclass: ipNetwork +objectclass: top + +dn: cn=siapt, o=SGI, c=US +cn: siapt +ipNetworkNumber: 192.82.202 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-token_lab, o=SGI, c=US +cn: b1-token_lab +ipNetworkNumber: 192.82.203 +objectclass: ipNetwork +objectclass: top + +dn: cn=asd-slipnet3, o=SGI, c=US +cn: asd-slipnet3 +ipNetworkNumber: 192.82.204 +objectclass: ipNetwork +objectclass: top + +dn: cn=newport-bch1-net, o=SGI, c=US +cn: newport-bch1-net +ipNetworkNumber: 192.82.205 +objectclass: ipNetwork +objectclass: top + +dn: cn=newport-bch2-net, o=SGI, c=US +cn: newport-bch2-net +ipNetworkNumber: 192.82.206 +objectclass: ipNetwork +objectclass: top + +dn: cn=b12-esd, o=SGI, c=US +cn: b12-esd +ipNetworkNumber: 192.82.207 +objectclass: ipNetwork +objectclass: top + +dn: cn=sgi-psi, o=SGI, c=US +cn: sgi-psi +ipNetworkNumber: 192.82.208 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2-100mb-net, o=SGI, c=US +cn: b2-100mb-net +ipNetworkNumber: 192.82.209 +objectclass: ipNetwork +objectclass: top + +dn: cn=b3-100mb-net, o=SGI, c=US +cn: b3-100mb-net +ipNetworkNumber: 192.82.210 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8u-mfg_engr, o=SGI, c=US +cn: b8u-mfg_engr +ipNetworkNumber: 192.82.211 +objectclass: ipNetwork +objectclass: top + +dn: cn=vsg-esd, o=SGI, c=US +cn: vsg-esd +ipNetworkNumber: 192.102.96 +objectclass: ipNetwork +objectclass: top + +dn: cn=mbus-fddi_1, o=SGI, c=US +cn: mbus-fddi_1 +ipNetworkNumber: 192.102.98 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11a-endusr-net, o=SGI, c=US +cn: b11a-endusr-net +ipNetworkNumber: 192.102.99 +objectclass: ipNetwork +objectclass: top + +dn: cn=is-test, o=SGI, c=US +cn: is-test +ipNetworkNumber: 192.102.100 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11b-endusr-net, o=SGI, c=US +cn: b11b-endusr-net +ipNetworkNumber: 192.102.101 +objectclass: ipNetwork +objectclass: top + +dn: cn=tokyo-training1, o=SGI, c=US +cn: tokyo-training1 +ipNetworkNumber: 192.102.102 +objectclass: ipNetwork +objectclass: top + +dn: cn=tokyo-training2, o=SGI, c=US +cn: tokyo-training2 +ipNetworkNumber: 192.102.103 +objectclass: ipNetwork +objectclass: top + +dn: cn=kawasaki-agd, o=SGI, c=US +cn: kawasaki-agd +ipNetworkNumber: 192.102.104 +objectclass: ipNetwork +objectclass: top + +dn: cn=mbus-fddi_2, o=SGI, c=US +cn: mbus-fddi_2 +ipNetworkNumber: 192.102.105 +objectclass: ipNetwork +objectclass: top + +dn: cn=hk-net, o=SGI, c=US +cn: hk-net +ipNetworkNumber: 192.102.106 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7u-hwlab, o=SGI, c=US +cn: b7u-hwlab +ipNetworkNumber: 192.102.107 +objectclass: ipNetwork +objectclass: top + +dn: cn=b6-brief, o=SGI, c=US +cn: b6-brief +ipNetworkNumber: 192.102.108 +objectclass: ipNetwork +objectclass: top + +dn: cn=kawasaki-indy, o=SGI, c=US +cn: kawasaki-indy +ipNetworkNumber: 192.102.109 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11a-highend-1, o=SGI, c=US +cn: b11a-highend-1 +ipNetworkNumber: 192.102.110 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11a-highend-2, o=SGI, c=US +cn: b11a-highend-2 +ipNetworkNumber: 192.102.111 +objectclass: ipNetwork +objectclass: top + +dn: cn=b789hippi, o=SGI, c=US +cn: b789hippi +ipNetworkNumber: 192.102.112 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8-benchmark1, o=SGI, c=US +cn: b8-benchmark1 +ipNetworkNumber: 192.102.114.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8-benchmark2, o=SGI, c=US +cn: b8-benchmark2 +ipNetworkNumber: 192.102.115.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8-benchmark3, o=SGI, c=US +cn: b8-benchmark3 +ipNetworkNumber: 192.102.116.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=b3u-community1, o=SGI, c=US +cn: b3u-community1 +ipNetworkNumber: 192.102.117 +objectclass: ipNetwork +objectclass: top + +dn: cn=b3u-community2, o=SGI, c=US +cn: b3u-community2 +ipNetworkNumber: 192.102.118 +objectclass: ipNetwork +objectclass: top + +dn: cn=b3u-finnance-is, o=SGI, c=US +cn: b3u-finnance-is +ipNetworkNumber: 192.102.119 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8u-agd_lab, o=SGI, c=US +cn: b8u-agd_lab +ipNetworkNumber: 192.102.120 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-highend-mfg1, o=SGI, c=US +cn: b11-highend-mfg1 +ipNetworkNumber: 192.102.122 +objectclass: ipNetwork +objectclass: top + +dn: cn=b6-demo-net, o=SGI, c=US +cn: b6-demo-net +ipNetworkNumber: 192.102.129 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11b-mfg-servernet-1, o=SGI, c=US +cn: b11b-mfg-servernet-1 +ipNetworkNumber: 192.102.130 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-asd-net, o=SGI, c=US +cn: b9-asd-net +ipNetworkNumber: 192.102.131 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2-mfg-net, o=SGI, c=US +cn: b2-mfg-net +ipNetworkNumber: 192.102.132 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11b-mfg-servernet-2, o=SGI, c=US +cn: b11b-mfg-servernet-2 +ipNetworkNumber: 192.102.133 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7u-syshw, o=SGI, c=US +cn: b7u-syshw +ipNetworkNumber: 192.102.135 +objectclass: ipNetwork +objectclass: top + +dn: cn=b4-csdlab, o=SGI, c=US +cn: b4-csdlab +ipNetworkNumber: 192.102.136 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17u-cselabC, o=SGI, c=US +cn: b17u-cselabC +ipNetworkNumber: 192.102.137 +objectclass: ipNetwork +objectclass: top + +dn: cn=b15-websafe, o=SGI, c=US +cn: b15-websafe +ipNetworkNumber: 192.102.138 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14l-engr, o=SGI, c=US +cn: b14l-engr +ipNetworkNumber: 192.102.141 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14-upper, o=SGI, c=US +cn: b14-upper +ipNetworkNumber: 192.102.142 +objectclass: ipNetwork +objectclass: top + +dn: cn=b5u-finance, o=SGI, c=US +cn: b5u-finance +ipNetworkNumber: 192.102.143 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14-dms1, o=SGI, c=US +cn: b14-dms1 +ipNetworkNumber: 192.102.144 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-highend-mfg2, o=SGI, c=US +cn: b11-highend-mfg2 +ipNetworkNumber: 192.111.1 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-totestack4, o=SGI, c=US +cn: b11-totestack4 +ipNetworkNumber: 192.111.2 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-totestack5, o=SGI, c=US +cn: b11-totestack5 +ipNetworkNumber: 192.111.3 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-totestack6, o=SGI, c=US +cn: b11-totestack6 +ipNetworkNumber: 192.111.4 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8u-entrpse-mgmt, o=SGI, c=US +cn: b8u-entrpse-mgmt +ipNetworkNumber: 192.111.5 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-desktop2, o=SGI, c=US +cn: b11-desktop2 +ipNetworkNumber: 192.111.6 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-desktop3, o=SGI, c=US +cn: b11-desktop3 +ipNetworkNumber: 192.111.7 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-mfgsystest1, o=SGI, c=US +cn: b11-mfgsystest1 +ipNetworkNumber: 192.111.8 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-datacollect, o=SGI, c=US +cn: b11-datacollect +ipNetworkNumber: 192.111.9 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-mips-mfg, o=SGI, c=US +cn: b11-mips-mfg +ipNetworkNumber: 192.111.10 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-OOBA, o=SGI, c=US +cn: b11-OOBA +ipNetworkNumber: 192.111.11 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-DCO, o=SGI, c=US +cn: b11-DCO +ipNetworkNumber: 192.111.12 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-dskcopy, o=SGI, c=US +cn: b11-dskcopy +ipNetworkNumber: 192.111.13 +objectclass: ipNetwork +objectclass: top + +dn: cn=b12-imsd1, o=SGI, c=US +cn: b12-imsd1 +ipNetworkNumber: 192.111.14 +objectclass: ipNetwork +objectclass: top + +dn: cn=b12-imsd2, o=SGI, c=US +cn: b12-imsd2 +ipNetworkNumber: 192.111.15 +objectclass: ipNetwork +objectclass: top + +dn: cn=b12-imsd3, o=SGI, c=US +cn: b12-imsd3 +ipNetworkNumber: 192.111.16 +objectclass: ipNetwork +objectclass: top + +dn: cn=dms-moose, o=SGI, c=US +cn: dms-moose +ipNetworkNumber: 192.111.17 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-video-lab, o=SGI, c=US +cn: b7l-video-lab +ipNetworkNumber: 192.111.18 +objectclass: ipNetwork +objectclass: top + +dn: cn=corp-fddi, o=SGI, c=US +cn: corp-fddi +ipNetworkNumber: 192.111.21 +objectclass: ipNetwork +objectclass: top + +dn: cn=b16-engr-net, o=SGI, c=US +cn: b16-engr-net +ipNetworkNumber: 192.111.22 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dss-hwd, o=SGI, c=US +cn: b1-dss-hwd +ipNetworkNumber: 192.111.23 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dss-sft, o=SGI, c=US +cn: b1-dss-sft +ipNetworkNumber: 192.111.24 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dss-mkt, o=SGI, c=US +cn: b1-dss-mkt +ipNetworkNumber: 192.111.25 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dss-sftlab, o=SGI, c=US +cn: b1-dss-sftlab +ipNetworkNumber: 192.111.26 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dss-hwdlab, o=SGI, c=US +cn: b1-dss-hwdlab +ipNetworkNumber: 192.111.27 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dss-guinness, o=SGI, c=US +cn: b1-dss-guinness +ipNetworkNumber: 192.111.28 +objectclass: ipNetwork +objectclass: top + +dn: cn=corp-isdn, o=SGI, c=US +cn: corp-isdn +ipNetworkNumber: 192.111.29 +objectclass: ipNetwork +objectclass: top + +dn: cn=kodak-shutter, o=SGI, c=US +cn: kodak-shutter +ipNetworkNumber: 192.111.30 +objectclass: ipNetwork +objectclass: top + +dn: cn=zursch-house, o=SGI, c=US +cn: zursch-house +ipNetworkNumber: 192.132.105 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14u-mkt, o=SGI, c=US +cn: b14u-mkt +ipNetworkNumber: 192.132.108 +objectclass: ipNetwork +objectclass: top + +dn: cn=atm-net1, o=SGI, c=US +cn: atm-net1 +ipNetworkNumber: 192.132.109 +objectclass: ipNetwork +objectclass: top + +dn: cn=atm-net2, o=SGI, c=US +cn: atm-net2 +ipNetworkNumber: 192.132.110 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-corpdc, o=SGI, c=US +cn: b1-corpdc +ipNetworkNumber: 192.132.111 +objectclass: ipNetwork +objectclass: top + +dn: cn=qa-net, o=SGI, c=US +cn: qa-net +ipNetworkNumber: 192.132.112 +objectclass: ipNetwork +objectclass: top + +dn: cn=aw-net3, o=SGI, c=US +cn: aw-net3 +ipNetworkNumber: 192.132.114 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8u-engr-lab, o=SGI, c=US +cn: b8u-engr-lab +ipNetworkNumber: 192.132.115 +objectclass: ipNetwork +objectclass: top + +dn: cn=euro-mbus_1, o=SGI, c=US +cn: euro-mbus_1 +ipNetworkNumber: 192.132.116 +objectclass: ipNetwork +objectclass: top + +dn: cn=euro-mbus_2, o=SGI, c=US +cn: euro-mbus_2 +ipNetworkNumber: 192.132.117 +objectclass: ipNetwork +objectclass: top + +dn: cn=lsil-asd-dev, o=SGI, c=US +cn: lsil-asd-dev +ipNetworkNumber: 192.132.118 +objectclass: ipNetwork +objectclass: top + +dn: cn=neuchatel-slip, o=SGI, c=US +cn: neuchatel-slip +ipNetworkNumber: 192.132.119 +objectclass: ipNetwork +objectclass: top + +dn: cn=dialup-isdn, o=SGI, c=US +cn: dialup-isdn +ipNetworkNumber: 192.132.120 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dms3, o=SGI, c=US +cn: b1-dms3 +ipNetworkNumber: 192.132.122 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dss-cad, o=SGI, c=US +cn: b1-dss-cad +ipNetworkNumber: 192.132.127 +objectclass: ipNetwork +objectclass: top + +dn: cn=cabmerwell, o=SGI, c=US +cn: cabmerwell +ipNetworkNumber: 192.132.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=b21-studio-hippi, o=SGI, c=US +cn: b21-studio-hippi +ipNetworkNumber: 192.132.129 +objectclass: ipNetwork +objectclass: top + +dn: cn=tw-wan-net, o=SGI, c=US +cn: tw-wan-net +ipNetworkNumber: 192.132.130 +objectclass: ipNetwork +objectclass: top + +dn: cn=beijing, o=SGI, c=US +cn: beijing +ipNetworkNumber: 192.132.131 +objectclass: ipNetwork +objectclass: top + +dn: cn=homefr, o=SGI, c=US +cn: homefr +ipNetworkNumber: 192.132.133 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dms4, o=SGI, c=US +cn: b1-dms4 +ipNetworkNumber: 192.132.134 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-mtcast-net, o=SGI, c=US +cn: b1-mtcast-net +ipNetworkNumber: 192.132.136 +objectclass: ipNetwork +objectclass: top + +dn: cn=fire-wall-net, o=SGI, c=US +cn: fire-wall-net +ipNetworkNumber: 192.132.137 +objectclass: ipNetwork +objectclass: top + +dn: cn=lfsh-home-isdn, o=SGI, c=US +cn: lfsh-home-isdn +ipNetworkNumber: 192.132.138 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-nei4-1, o=SGI, c=US +cn: b2u-nei4-1 +ipNetworkNumber: 192.132.139 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-nei4-2, o=SGI, c=US +cn: b2u-nei4-2 +ipNetworkNumber: 192.132.140 +objectclass: ipNetwork +objectclass: top + +dn: cn=frame-lpbck, o=SGI, c=US +cn: frame-lpbck +ipNetworkNumber: 192.132.141 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-gandalf-142, o=SGI, c=US +cn: b2u-gandalf-142 +cn: Net +cn: 192.132.142 +ipNetworkNumber: ISDN +objectclass: ipNetwork +objectclass: top + +dn: cn=home-frame1, o=SGI, c=US +cn: home-frame1 +ipNetworkNumber: 192.132.144 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-fdd-mzz, o=SGI, c=US +cn: b11-fdd-mzz +ipNetworkNumber: 192.132.146 +objectclass: ipNetwork +objectclass: top + +dn: cn=corp-is, o=SGI, c=US +cn: corp-is +ipNetworkNumber: 192.132.148 +objectclass: ipNetwork +objectclass: top + +dn: cn=munich-firewall, o=SGI, c=US +cn: munich-firewall +ipNetworkNumber: 192.132.149 +objectclass: ipNetwork +objectclass: top + +dn: cn=taipei, o=SGI, c=US +cn: taipei +ipNetworkNumber: 192.72.19 +objectclass: ipNetwork +objectclass: top + +dn: cn=taiwan, o=SGI, c=US +cn: taiwan +ipNetworkNumber: 192.132.150 +objectclass: ipNetwork +objectclass: top + +dn: cn=sydney-tech_centre, o=SGI, c=US +cn: sydney-tech_centre +ipNetworkNumber: 192.132.151 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9U-atm, o=SGI, c=US +cn: b9U-atm +ipNetworkNumber: 192.132.153 +objectclass: ipNetwork +objectclass: top + +dn: cn=is-fddi-test1, o=SGI, c=US +cn: is-fddi-test1 +ipNetworkNumber: 192.132.155 +objectclass: ipNetwork +objectclass: top + +dn: cn=is-fddi-test2, o=SGI, c=US +cn: is-fddi-test2 +ipNetworkNumber: 192.132.156 +objectclass: ipNetwork +objectclass: top + +dn: cn=is-fddi-test3, o=SGI, c=US +cn: is-fddi-test3 +ipNetworkNumber: 192.132.157 +objectclass: ipNetwork +objectclass: top + +dn: cn=is-fddi-test4, o=SGI, c=US +cn: is-fddi-test4 +ipNetworkNumber: 192.132.158 +objectclass: ipNetwork +objectclass: top + +dn: cn=is-fddi-test5, o=SGI, c=US +cn: is-fddi-test5 +ipNetworkNumber: 192.132.159 +objectclass: ipNetwork +objectclass: top + +dn: cn=is-fddi-test6, o=SGI, c=US +cn: is-fddi-test6 +ipNetworkNumber: 192.132.160 +objectclass: ipNetwork +objectclass: top + +dn: cn=is-fddi-test7, o=SGI, c=US +cn: is-fddi-test7 +ipNetworkNumber: 192.132.161 +objectclass: ipNetwork +objectclass: top + +dn: cn=b4-evtlab, o=SGI, c=US +cn: b4-evtlab +ipNetworkNumber: 192.132.162 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanb8-wanb17, o=SGI, c=US +cn: wanb8-wanb17 +ipNetworkNumber: 192.132.163 +objectclass: ipNetwork +objectclass: top + +dn: cn=csd-insight, o=SGI, c=US +cn: csd-insight +ipNetworkNumber: 192.132.164 +objectclass: ipNetwork +objectclass: top + +dn: cn=b4-wan, o=SGI, c=US +cn: b4-wan +ipNetworkNumber: 192.132.165 +objectclass: ipNetwork +objectclass: top + +dn: cn=b4-csdindy, o=SGI, c=US +cn: b4-csdindy +ipNetworkNumber: 192.132.170 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2-hwlab2-temp, o=SGI, c=US +cn: b2-hwlab2-temp +ipNetworkNumber: 192.132.171 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dss-os-1, o=SGI, c=US +cn: b1-dss-os-1 +ipNetworkNumber: 192.132.173 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dss-msig-1, o=SGI, c=US +cn: b1-dss-msig-1 +ipNetworkNumber: 192.132.174 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-eng-lab, o=SGI, c=US +cn: b11-eng-lab +ipNetworkNumber: 192.132.175 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-b, o=SGI, c=US +cn: b2u-b +ipNetworkNumber: 192.132.176 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-token-ring, o=SGI, c=US +cn: b11-token-ring +cn: sgi132-177 +ipNetworkNumber: 192.132.177 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-guiness-lab, o=SGI, c=US +cn: b1-guiness-lab +ipNetworkNumber: 192.132.178 +objectclass: ipNetwork +objectclass: top + +dn: cn=jwag-home-slip, o=SGI, c=US +cn: jwag-home-slip +ipNetworkNumber: 192.132.179 +objectclass: ipNetwork +objectclass: top + +dn: cn=akmal-home-slip, o=SGI, c=US +cn: akmal-home-slip +ipNetworkNumber: 192.132.180 +objectclass: ipNetwork +objectclass: top + +dn: cn=nasa-jsc, o=SGI, c=US +cn: nasa-jsc +ipNetworkNumber: 192.132.181 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8l-nsd, o=SGI, c=US +cn: b8l-nsd +ipNetworkNumber: 192.132.182 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-fddi-servers, o=SGI, c=US +cn: b7l-fddi-servers +ipNetworkNumber: 192.132.186 +objectclass: ipNetwork +objectclass: top + +dn: cn=msdtest-fddi, o=SGI, c=US +cn: msdtest-fddi +ipNetworkNumber: 192.132.187 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-mfg-test, o=SGI, c=US +cn: b11-mfg-test +cn: sgi132-188 +ipNetworkNumber: 192.132.188 +objectclass: ipNetwork +objectclass: top + +dn: cn=paris-secure3, o=SGI, c=US +cn: paris-secure3 +ipNetworkNumber: 192.132.189 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-digital-media-lab, o=SGI, c=US +cn: b2u-digital-media-lab +ipNetworkNumber: 192.132.190 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7u-swlab, o=SGI, c=US +cn: b7u-swlab +ipNetworkNumber: 192.132.191 +objectclass: ipNetwork +objectclass: top + +dn: cn=eng-spine, o=SGI, c=US +cn: eng-spine +ipNetworkNumber: 192.132.194 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-ddc, o=SGI, c=US +cn: b11-ddc +ipNetworkNumber: 192.132.195 +objectclass: ipNetwork +objectclass: top + +dn: cn=b12-totestack1, o=SGI, c=US +cn: b12-totestack1 +ipNetworkNumber: 192.132.196 +objectclass: ipNetwork +objectclass: top + +dn: cn=b12-totestack2, o=SGI, c=US +cn: b12-totestack2 +ipNetworkNumber: 192.132.197 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-mfgoven1, o=SGI, c=US +cn: b11-mfgoven1 +ipNetworkNumber: 192.132.198 +objectclass: ipNetwork +objectclass: top + +dn: cn=aw-tokyo, o=SGI, c=US +cn: aw-tokyo +ipNetworkNumber: 192.132.199 +objectclass: ipNetwork +objectclass: top + +dn: cn=b12-mfg, o=SGI, c=US +cn: b12-mfg +ipNetworkNumber: 192.132.204 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2-cddi-net, o=SGI, c=US +cn: b2-cddi-net +ipNetworkNumber: 198.29.64 +objectclass: ipNetwork +objectclass: top + +dn: cn=aw-net2, o=SGI, c=US +cn: aw-net2 +ipNetworkNumber: 198.29.65 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7-net, o=SGI, c=US +cn: b7-net +ipNetworkNumber: 198.29.66 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14l-dms5, o=SGI, c=US +cn: b14l-dms5 +ipNetworkNumber: 198.29.67 +objectclass: ipNetwork +objectclass: top + +dn: cn=portlandwa, o=SGI, c=US +cn: portlandwa +ipNetworkNumber: 198.29.68 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-engr-net1, o=SGI, c=US +cn: b9-engr-net1 +ipNetworkNumber: 198.29.69 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-ssd-benchlab_1, o=SGI, c=US +cn: b7l-ssd-benchlab_1 +ipNetworkNumber: 198.29.71 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-mfgoven2, o=SGI, c=US +cn: b11-mfgoven2 +ipNetworkNumber: 198.29.72 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-mfgsystest2, o=SGI, c=US +cn: b11-mfgsystest2 +ipNetworkNumber: 198.29.73 +objectclass: ipNetwork +objectclass: top + +dn: cn=burnham-local, o=SGI, c=US +cn: burnham-local +ipNetworkNumber: 198.29.74 +objectclass: ipNetwork +objectclass: top + +dn: cn=dco-fddi, o=SGI, c=US +cn: dco-fddi +ipNetworkNumber: 198.29.75 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-engr-net2, o=SGI, c=US +cn: b9-engr-net2 +ipNetworkNumber: 198.29.76 +objectclass: ipNetwork +objectclass: top + +dn: cn=b3-cddi-net, o=SGI, c=US +cn: b3-cddi-net +ipNetworkNumber: 198.29.77 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7u-lego-test1, o=SGI, c=US +cn: b7u-lego-test1 +ipNetworkNumber: 198.29.78 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-networking-lab, o=SGI, c=US +cn: b7l-networking-lab +ipNetworkNumber: 198.29.79 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-gandalf-80-isdn, o=SGI, c=US +cn: b2u-gandalf-80-isdn +ipNetworkNumber: 198.29.80 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-gandalf-81-isdn, o=SGI, c=US +cn: b2u-gandalf-81-isdn +ipNetworkNumber: 198.29.81 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7u-syssw, o=SGI, c=US +cn: b7u-syssw +ipNetworkNumber: 198.29.82 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-asdlabs, o=SGI, c=US +cn: b7l-asdlabs +ipNetworkNumber: 198.29.83 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-compliance-lab, o=SGI, c=US +cn: b7l-compliance-lab +ipNetworkNumber: 198.29.84 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-gandalf-85-isdn, o=SGI, c=US +cn: b2u-gandalf-85-isdn +ipNetworkNumber: 198.29.85 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-engr-net3, o=SGI, c=US +cn: b9-engr-net3 +ipNetworkNumber: 198.29.86 +objectclass: ipNetwork +objectclass: top + +dn: cn=barna-internet, o=SGI, c=US +cn: barna-internet +ipNetworkNumber: 198.29.87 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-gandalf-88-isdn, o=SGI, c=US +cn: b2u-gandalf-88-isdn +ipNetworkNumber: 198.29.88 +objectclass: ipNetwork +objectclass: top + +dn: cn=appletalk_net_9, o=SGI, c=US +cn: appletalk_net_9 +ipNetworkNumber: 198.29.89 +objectclass: ipNetwork +objectclass: top + +dn: cn=appletalk_net_10, o=SGI, c=US +cn: appletalk_net_10 +ipNetworkNumber: 198.29.90 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-gandalf-91-isdn, o=SGI, c=US +cn: b2u-gandalf-91-isdn +ipNetworkNumber: 198.29.91 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-gandalf-92-isdn, o=SGI, c=US +cn: b2u-gandalf-92-isdn +ipNetworkNumber: 198.29.92 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-gandalf-93-isdn, o=SGI, c=US +cn: b2u-gandalf-93-isdn +ipNetworkNumber: 198.29.93 +objectclass: ipNetwork +objectclass: top + +dn: cn=uktraining, o=SGI, c=US +cn: uktraining +ipNetworkNumber: 198.29.94 +objectclass: ipNetwork +objectclass: top + +dn: cn=vbt-testnet, o=SGI, c=US +cn: vbt-testnet +ipNetworkNumber: 198.29.95 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14-mcast, o=SGI, c=US +cn: b14-mcast +ipNetworkNumber: 198.29.96 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14l-esd_mkt, o=SGI, c=US +cn: b14l-esd_mkt +ipNetworkNumber: 198.29.97 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14u-apps1, o=SGI, c=US +cn: b14u-apps1 +ipNetworkNumber: 198.29.98 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14u-apps2, o=SGI, c=US +cn: b14u-apps2 +ipNetworkNumber: 198.29.99 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-prod-eng1, o=SGI, c=US +cn: b1-prod-eng1 +ipNetworkNumber: 198.29.100 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-prod-eng2, o=SGI, c=US +cn: b1-prod-eng2 +ipNetworkNumber: 198.29.101 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-time-warner-3, o=SGI, c=US +cn: b9-time-warner-3 +ipNetworkNumber: 198.29.102 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9u-time-warner, o=SGI, c=US +cn: b9u-time-warner +ipNetworkNumber: 198.29.103 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8l-prod-design, o=SGI, c=US +cn: b8l-prod-design +ipNetworkNumber: 198.29.104 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8l-mktg-net3, o=SGI, c=US +cn: b8l-mktg-net3 +ipNetworkNumber: 198.29.106 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9l-enduser, o=SGI, c=US +cn: b9l-enduser +ipNetworkNumber: 198.29.108 +objectclass: ipNetwork +objectclass: top + +dn: cn=partner-net, o=SGI, c=US +cn: partner-net +ipNetworkNumber: 198.29.110 +objectclass: ipNetwork +objectclass: top + +dn: cn=solectron, o=SGI, c=US +cn: solectron +ipNetworkNumber: 198.29.111 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2-isdn-network, o=SGI, c=US +cn: b2-isdn-network +ipNetworkNumber: 198.29.112 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-lego-systest, o=SGI, c=US +cn: b11-lego-systest +ipNetworkNumber: 198.29.113 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-lego-ovens, o=SGI, c=US +cn: b11-lego-ovens +ipNetworkNumber: 198.29.114 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-time-warner-4, o=SGI, c=US +cn: b9-time-warner-4 +ipNetworkNumber: 198.29.115 +objectclass: ipNetwork +objectclass: top + +dn: cn=paris-secure1, o=SGI, c=US +cn: paris-secure1 +ipNetworkNumber: 198.29.116 +objectclass: ipNetwork +objectclass: top + +dn: cn=paris-secure2, o=SGI, c=US +cn: paris-secure2 +ipNetworkNumber: 198.29.117 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2-b4backbone, o=SGI, c=US +cn: b2-b4backbone +ipNetworkNumber: 198.29.118 +objectclass: ipNetwork +objectclass: top + +dn: cn=home-frame2, o=SGI, c=US +cn: home-frame2 +ipNetworkNumber: 198.29.119 +objectclass: ipNetwork +objectclass: top + +dn: cn=add-brds_lab2, o=SGI, c=US +cn: add-brds_lab2 +ipNetworkNumber: 198.29.120 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-gauntlet, o=SGI, c=US +cn: b1-gauntlet +ipNetworkNumber: 198.29.121 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dms-fddi, o=SGI, c=US +cn: b1-dms-fddi +ipNetworkNumber: 198.29.122 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14l-nafo-lab, o=SGI, c=US +cn: b14l-nafo-lab +ipNetworkNumber: 198.29.124 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-comp-lab-a, o=SGI, c=US +cn: b11-comp-lab-a +ipNetworkNumber: 198.29.125 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-comp-lab-b, o=SGI, c=US +cn: b11-comp-lab-b +ipNetworkNumber: 198.29.126 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-comp-lab-c, o=SGI, c=US +cn: b11-comp-lab-c +ipNetworkNumber: 198.29.127 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-wpdlab1, o=SGI, c=US +cn: b9-wpdlab1 +ipNetworkNumber: 199.74.33 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-wpdlab2, o=SGI, c=US +cn: b9-wpdlab2 +ipNetworkNumber: 199.74.34 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-wpdlab3, o=SGI, c=US +cn: b9-wpdlab3 +ipNetworkNumber: 199.74.35 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-wpdlab4, o=SGI, c=US +cn: b9-wpdlab4 +ipNetworkNumber: 199.74.36 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-wpdlab5, o=SGI, c=US +cn: b9-wpdlab5 +ipNetworkNumber: 199.74.37 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-wpdfddi3, o=SGI, c=US +cn: b9-wpdfddi3 +ipNetworkNumber: 199.74.38 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-wpdfddi1, o=SGI, c=US +cn: b9-wpdfddi1 +ipNetworkNumber: 199.74.39 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-wpdfddi2, o=SGI, c=US +cn: b9-wpdfddi2 +ipNetworkNumber: 199.74.40 +objectclass: ipNetwork +objectclass: top + +dn: cn=la-pri_hub, o=SGI, c=US +cn: la-pri_hub +ipNetworkNumber: 199.74.41 +objectclass: ipNetwork +objectclass: top + +dn: cn=rpa-mtview-serial, o=SGI, c=US +cn: rpa-mtview-serial +ipNetworkNumber: 199.74.42 +objectclass: ipNetwork +objectclass: top + +dn: cn=b4-mfg-endusers, o=SGI, c=US +cn: b4-mfg-endusers +ipNetworkNumber: 199.74.43 +objectclass: ipNetwork +objectclass: top + +dn: cn=b6u-corp-bc, o=SGI, c=US +cn: b6u-corp-bc +ipNetworkNumber: 199.74.44 +objectclass: ipNetwork +objectclass: top + +dn: cn=isdn1, o=SGI, c=US +cn: isdn1 +ipNetworkNumber: 199.74.46 +objectclass: ipNetwork +objectclass: top + +dn: cn=isdn2, o=SGI, c=US +cn: isdn2 +ipNetworkNumber: 199.74.47 +objectclass: ipNetwork +objectclass: top + +dn: cn=b6-fddi-corp, o=SGI, c=US +cn: b6-fddi-corp +ipNetworkNumber: 199.74.48 +objectclass: ipNetwork +objectclass: top + +dn: cn=b18_xplx-apptlk, o=SGI, c=US +cn: b18_xplx-apptlk +ipNetworkNumber: 199.74.49 +objectclass: ipNetwork +objectclass: top + +dn: cn=ppp-isdn-network1, o=SGI, c=US +cn: ppp-isdn-network1 +ipNetworkNumber: 199.74.51 +objectclass: ipNetwork +objectclass: top + +dn: cn=ppp-isdn-network2, o=SGI, c=US +cn: ppp-isdn-network2 +ipNetworkNumber: 199.74.52 +objectclass: ipNetwork +objectclass: top + +dn: cn=dss-isdn, o=SGI, c=US +cn: dss-isdn +ipNetworkNumber: 199.74.53 +objectclass: ipNetwork +objectclass: top + +dn: cn=b3l-community1, o=SGI, c=US +cn: b3l-community1 +ipNetworkNumber: 199.74.54 +objectclass: ipNetwork +objectclass: top + +dn: cn=b3l-community2, o=SGI, c=US +cn: b3l-community2 +ipNetworkNumber: 199.74.56 +objectclass: ipNetwork +objectclass: top + +dn: cn=b3l-community3, o=SGI, c=US +cn: b3l-community3 +ipNetworkNumber: 199.74.57 +objectclass: ipNetwork +objectclass: top + +dn: cn=sf-studio3, o=SGI, c=US +cn: sf-studio3 +ipNetworkNumber: 199.74.58 +objectclass: ipNetwork +objectclass: top + +dn: cn=mbus-ether, o=SGI, c=US +cn: mbus-ether +ipNetworkNumber: 199.74.59 +objectclass: ipNetwork +objectclass: top + +dn: cn=cole-weber, o=SGI, c=US +cn: cole-weber +ipNetworkNumber: 199.74.60 +objectclass: ipNetwork +objectclass: top + +dn: cn=tre-nei1-61-cnet, o=SGI, c=US +cn: tre-nei1-61-cnet +ipNetworkNumber: 199.74.61 +objectclass: ipNetwork +objectclass: top + +dn: cn=japan-external, o=SGI, c=US +cn: japan-external +ipNetworkNumber: 199.74.62 +objectclass: ipNetwork +objectclass: top + +dn: cn=nsd-oracle, o=SGI, c=US +cn: nsd-oracle +ipNetworkNumber: 199.74.63 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-is, o=SGI, c=US +cn: neu-is +ipNetworkNumber: 155.11.1.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-1d1b, o=SGI, c=US +cn: neu-1d1b +ipNetworkNumber: 155.11.1.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-adm, o=SGI, c=US +cn: neu-adm +ipNetworkNumber: 155.11.2.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-1d2b, o=SGI, c=US +cn: neu-1d2b +ipNetworkNumber: 155.11.2.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-csd, o=SGI, c=US +cn: neu-csd +ipNetworkNumber: 155.11.3.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-1d3b, o=SGI, c=US +cn: neu-1d3b +ipNetworkNumber: 155.11.3.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-mktg, o=SGI, c=US +cn: neu-mktg +ipNetworkNumber: 155.11.4.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-1p4b, o=SGI, c=US +cn: neu-1p4b +ipNetworkNumber: 155.11.4.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-1p5b, o=SGI, c=US +cn: neu-1p5b +ipNetworkNumber: 155.11.5.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-1p5a, o=SGI, c=US +cn: neu-1p5a +ipNetworkNumber: 155.11.5.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-lab1, o=SGI, c=US +cn: neu-lab1 +ipNetworkNumber: 155.11.6.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-lab2, o=SGI, c=US +cn: neu-lab2 +ipNetworkNumber: 155.11.6.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-train1, o=SGI, c=US +cn: neu-train1 +ipNetworkNumber: 155.11.7.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-train2, o=SGI, c=US +cn: neu-train2 +ipNetworkNumber: 155.11.7.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-mfgtst, o=SGI, c=US +cn: neu-mfgtst +ipNetworkNumber: 155.11.8.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-1r8b, o=SGI, c=US +cn: neu-1r8b +ipNetworkNumber: 155.11.8.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-mfg1, o=SGI, c=US +cn: neu-mfg1 +ipNetworkNumber: 155.11.9.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-1r9b, o=SGI, c=US +cn: neu-1r9b +ipNetworkNumber: 155.11.9.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-mfg2, o=SGI, c=US +cn: neu-mfg2 +ipNetworkNumber: 155.11.10.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-itlcomm, o=SGI, c=US +cn: neu-itlcomm +ipNetworkNumber: 155.11.10.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=par-bb, o=SGI, c=US +cn: par-bb +ipNetworkNumber: 155.11.11.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=par-csd, o=SGI, c=US +cn: par-csd +ipNetworkNumber: 155.11.11.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=par-sales, o=SGI, c=US +cn: par-sales +ipNetworkNumber: 155.11.12.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=par-train, o=SGI, c=US +cn: par-train +ipNetworkNumber: 155.11.12.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=par-eng, o=SGI, c=US +cn: par-eng +ipNetworkNumber: 155.11.13.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=par-adm, o=SGI, c=US +cn: par-adm +ipNetworkNumber: 155.11.13.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=aix-net, o=SGI, c=US +cn: aix-net +ipNetworkNumber: 155.11.14.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=par-aix-ptp, o=SGI, c=US +cn: par-aix-ptp +ipNetworkNumber: 155.11.14.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=tou-net, o=SGI, c=US +cn: tou-net +ipNetworkNumber: 155.11.15.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=par-tou-ptp, o=SGI, c=US +cn: par-tou-ptp +ipNetworkNumber: 155.11.15.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=lyon-net, o=SGI, c=US +cn: lyon-net +ipNetworkNumber: 155.11.16.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=par-lyon-ptp, o=SGI, c=US +cn: par-lyon-ptp +ipNetworkNumber: 155.11.16.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=rennes-net, o=SGI, c=US +cn: rennes-net +ipNetworkNumber: 155.11.17.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=par-rennes-ptp, o=SGI, c=US +cn: par-rennes-ptp +ipNetworkNumber: 155.11.17.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=milan-net1, o=SGI, c=US +cn: milan-net1 +ipNetworkNumber: 155.11.18.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=milan-net2, o=SGI, c=US +cn: milan-net2 +ipNetworkNumber: 155.11.18.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=geneva-ptp, o=SGI, c=US +cn: geneva-ptp +ipNetworkNumber: 155.11.19.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=geneva-net, o=SGI, c=US +cn: geneva-net +ipNetworkNumber: 155.11.19.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=rome-net1, o=SGI, c=US +cn: rome-net1 +ipNetworkNumber: 155.11.20.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=rome-net2, o=SGI, c=US +cn: rome-net2 +ipNetworkNumber: 155.11.20.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-h-2511, o=SGI, c=US +cn: neu-h-2511 +ipNetworkNumber: 155.11.21.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-blazer, o=SGI, c=US +cn: neu-blazer +ipNetworkNumber: 155.11.21.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=helsinki-net, o=SGI, c=US +cn: helsinki-net +ipNetworkNumber: 155.11.22.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=FREE-1, o=SGI, c=US +cn: FREE-1 +ipNetworkNumber: 155.11.22.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=zurich-net, o=SGI, c=US +cn: zurich-net +ipNetworkNumber: 155.11.23.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-zurich-ptp, o=SGI, c=US +cn: neu-zurich-ptp +ipNetworkNumber: 155.11.23.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-1fddi, o=SGI, c=US +cn: neu-1fddi +ipNetworkNumber: 155.11.24.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-2fddi, o=SGI, c=US +cn: neu-2fddi +ipNetworkNumber: 155.11.24.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=london1, o=SGI, c=US +cn: london1 +ipNetworkNumber: 155.11.25.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=london2, o=SGI, c=US +cn: london2 +ipNetworkNumber: 155.11.25.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=falkirk1, o=SGI, c=US +cn: falkirk1 +ipNetworkNumber: 155.11.26.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=falkirk2, o=SGI, c=US +cn: falkirk2 +ipNetworkNumber: 155.11.26.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-wh1, o=SGI, c=US +cn: reading-wh1 +ipNetworkNumber: 155.11.27.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-wh2, o=SGI, c=US +cn: reading-wh2 +ipNetworkNumber: 155.11.27.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=demeern-net, o=SGI, c=US +cn: demeern-net +ipNetworkNumber: 155.11.28.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=demeern-net2, o=SGI, c=US +cn: demeern-net2 +ipNetworkNumber: 155.11.28.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=demeern-net3, o=SGI, c=US +cn: demeern-net3 +ipNetworkNumber: 155.11.29.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=demeern-net4, o=SGI, c=US +cn: demeern-net4 +ipNetworkNumber: 155.11.29.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=lausanne1, o=SGI, c=US +cn: lausanne1 +ipNetworkNumber: 155.11.30.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=lausanne2, o=SGI, c=US +cn: lausanne2 +ipNetworkNumber: 155.11.30.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=stockholm-net, o=SGI, c=US +cn: stockholm-net +ipNetworkNumber: 155.11.31.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=stockholm-ptp, o=SGI, c=US +cn: stockholm-ptp +ipNetworkNumber: 155.11.31.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=budapest, o=SGI, c=US +cn: budapest +ipNetworkNumber: 155.11.32.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=budapest-ptp, o=SGI, c=US +cn: budapest-ptp +ipNetworkNumber: 155.11.32.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=FREE-2, o=SGI, c=US +cn: FREE-2 +ipNetworkNumber: 155.11.33.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=FREE-3, o=SGI, c=US +cn: FREE-3 +ipNetworkNumber: 155.11.33.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-mfg2a, o=SGI, c=US +cn: neu-mfg2a +ipNetworkNumber: 155.11.34.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-mfg2b, o=SGI, c=US +cn: neu-mfg2b +ipNetworkNumber: 155.11.34.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=lan-tst, o=SGI, c=US +cn: lan-tst +ipNetworkNumber: 155.11.35.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=wan-tst, o=SGI, c=US +cn: wan-tst +ipNetworkNumber: 155.11.35.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=demeern-net7, o=SGI, c=US +cn: demeern-net7 +ipNetworkNumber: 155.11.36.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=demeern-net8, o=SGI, c=US +cn: demeern-net8 +ipNetworkNumber: 155.11.36.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=basel-net, o=SGI, c=US +cn: basel-net +ipNetworkNumber: 155.11.37.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=basel-ptp, o=SGI, c=US +cn: basel-ptp +ipNetworkNumber: 155.11.37.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=brno-net, o=SGI, c=US +cn: brno-net +ipNetworkNumber: 155.11.38.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=brno-ptp, o=SGI, c=US +cn: brno-ptp +ipNetworkNumber: 155.11.38.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=warsaw-net, o=SGI, c=US +cn: warsaw-net +ipNetworkNumber: 155.11.39.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=warsaw-ptp, o=SGI, c=US +cn: warsaw-ptp +ipNetworkNumber: 155.11.39.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=moscow, o=SGI, c=US +cn: moscow +ipNetworkNumber: 155.11.40.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=moscow-ptp, o=SGI, c=US +cn: moscow-ptp +ipNetworkNumber: 155.11.40.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=munich-1, o=SGI, c=US +cn: munich-1 +ipNetworkNumber: 155.11.41.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=munich-2, o=SGI, c=US +cn: munich-2 +ipNetworkNumber: 155.11.41.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=Karlsruhe-1, o=SGI, c=US +cn: Karlsruhe-1 +ipNetworkNumber: 155.11.42.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=Karlsruhe-2, o=SGI, c=US +cn: Karlsruhe-2 +ipNetworkNumber: 155.11.42.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=Cologne-1, o=SGI, c=US +cn: Cologne-1 +ipNetworkNumber: 155.11.43.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=Cologne-2, o=SGI, c=US +cn: Cologne-2 +ipNetworkNumber: 155.11.43.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=Berlin-1, o=SGI, c=US +cn: Berlin-1 +ipNetworkNumber: 155.11.44.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=Berlin-2, o=SGI, c=US +cn: Berlin-2 +ipNetworkNumber: 155.11.44.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=Hannover-1, o=SGI, c=US +cn: Hannover-1 +ipNetworkNumber: 155.11.45.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=Hannover-2, o=SGI, c=US +cn: Hannover-2 +ipNetworkNumber: 155.11.45.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=munich-3, o=SGI, c=US +cn: munich-3 +ipNetworkNumber: 155.11.46.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=munich-4, o=SGI, c=US +cn: munich-4 +ipNetworkNumber: 155.11.46.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=demeern-5, o=SGI, c=US +cn: demeern-5 +ipNetworkNumber: 155.11.47.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=demeern, o=SGI, c=US +cn: demeern +ipNetworkNumber: 155.11.47.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=telaviv1, o=SGI, c=US +cn: telaviv1 +ipNetworkNumber: 155.11.48.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=telaviv2, o=SGI, c=US +cn: telaviv2 +ipNetworkNumber: 155.11.48.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=cort-tst1, o=SGI, c=US +cn: cort-tst1 +ipNetworkNumber: 155.11.49.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=cort-tst2, o=SGI, c=US +cn: cort-tst2 +ipNetworkNumber: 155.11.49.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=copen01, o=SGI, c=US +cn: copen01 +ipNetworkNumber: 155.11.50.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=copen02, o=SGI, c=US +cn: copen02 +ipNetworkNumber: 155.11.50.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=oslo01, o=SGI, c=US +cn: oslo01 +ipNetworkNumber: 155.11.51.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=oslo02, o=SGI, c=US +cn: oslo02 +ipNetworkNumber: 155.11.51.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=brussels, o=SGI, c=US +cn: brussels +ipNetworkNumber: 155.11.52.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=brussels_1, o=SGI, c=US +cn: brussels_1 +ipNetworkNumber: 155.11.53.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=brussels_2, o=SGI, c=US +cn: brussels_2 +ipNetworkNumber: 155.11.53.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=brussels_3, o=SGI, c=US +cn: brussels_3 +ipNetworkNumber: 155.11.54.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=brussels_4, o=SGI, c=US +cn: brussels_4 +ipNetworkNumber: 155.11.54.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=lausanne3, o=SGI, c=US +cn: lausanne3 +ipNetworkNumber: 155.11.55.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=lausanne4, o=SGI, c=US +cn: lausanne4 +ipNetworkNumber: 155.11.55.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=vienna1, o=SGI, c=US +cn: vienna1 +ipNetworkNumber: 155.11.56.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=vienna2, o=SGI, c=US +cn: vienna2 +ipNetworkNumber: 155.11.56.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=madrid1, o=SGI, c=US +cn: madrid1 +ipNetworkNumber: 155.11.57.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=madrid2, o=SGI, c=US +cn: madrid2 +ipNetworkNumber: 155.11.57.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=barcelona01, o=SGI, c=US +cn: barcelona01 +ipNetworkNumber: 155.11.58.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=barcelona02, o=SGI, c=US +cn: barcelona02 +ipNetworkNumber: 155.11.58.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=bahrain01, o=SGI, c=US +cn: bahrain01 +ipNetworkNumber: 155.11.59.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=bahrain02, o=SGI, c=US +cn: bahrain02 +ipNetworkNumber: 155.11.59.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=frankfurt1, o=SGI, c=US +cn: frankfurt1 +ipNetworkNumber: 155.11.60.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=frankfurt2, o=SGI, c=US +cn: frankfurt2 +ipNetworkNumber: 155.11.60.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=visual-land, o=SGI, c=US +cn: visual-land +ipNetworkNumber: 155.11.61.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=gland-wan, o=SGI, c=US +cn: gland-wan +ipNetworkNumber: 155.11.61.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=gothenburg1, o=SGI, c=US +cn: gothenburg1 +ipNetworkNumber: 155.11.62.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=gothenburg2, o=SGI, c=US +cn: gothenburg2 +ipNetworkNumber: 155.11.62.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=munich-5, o=SGI, c=US +cn: munich-5 +ipNetworkNumber: 155.11.63.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=munich-6, o=SGI, c=US +cn: munich-6 +ipNetworkNumber: 155.11.63.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=munich-7, o=SGI, c=US +cn: munich-7 +ipNetworkNumber: 155.11.64.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=munich-8, o=SGI, c=US +cn: munich-8 +ipNetworkNumber: 155.11.64.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=zurich-ppp1, o=SGI, c=US +cn: zurich-ppp1 +ipNetworkNumber: 155.11.65.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=zurich-ppp2, o=SGI, c=US +cn: zurich-ppp2 +ipNetworkNumber: 155.11.65.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=stavanger01, o=SGI, c=US +cn: stavanger01 +ipNetworkNumber: 155.11.66.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=stavanger02, o=SGI, c=US +cn: stavanger02 +ipNetworkNumber: 155.11.66.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=jerusalem1, o=SGI, c=US +cn: jerusalem1 +ipNetworkNumber: 155.11.67.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=jerusalem2, o=SGI, c=US +cn: jerusalem2 +ipNetworkNumber: 155.11.67.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-debug1, o=SGI, c=US +cn: neu-debug1 +ipNetworkNumber: 155.11.68.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-debug2, o=SGI, c=US +cn: neu-debug2 +ipNetworkNumber: 155.11.68.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-peripheral1, o=SGI, c=US +cn: neu-peripheral1 +ipNetworkNumber: 155.11.70.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-peripheral2, o=SGI, c=US +cn: neu-peripheral2 +ipNetworkNumber: 155.11.70.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-15, o=SGI, c=US +cn: reading-15 +ipNetworkNumber: 155.11.71.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-16, o=SGI, c=US +cn: reading-16 +ipNetworkNumber: 155.11.71.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-17, o=SGI, c=US +cn: reading-17 +ipNetworkNumber: 155.11.72.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-18, o=SGI, c=US +cn: reading-18 +ipNetworkNumber: 155.11.72.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-19, o=SGI, c=US +cn: reading-19 +ipNetworkNumber: 155.11.73.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-20, o=SGI, c=US +cn: reading-20 +ipNetworkNumber: 155.11.73.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=demeern-9, o=SGI, c=US +cn: demeern-9 +ipNetworkNumber: 155.11.74.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=demeern-10, o=SGI, c=US +cn: demeern-10 +ipNetworkNumber: 155.11.74.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=demeern-11, o=SGI, c=US +cn: demeern-11 +ipNetworkNumber: 155.11.75.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=demeern-12, o=SGI, c=US +cn: demeern-12 +ipNetworkNumber: 155.11.75.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=demeern-13, o=SGI, c=US +cn: demeern-13 +ipNetworkNumber: 155.11.76.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=demeern-14, o=SGI, c=US +cn: demeern-14 +ipNetworkNumber: 155.11.76.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-21, o=SGI, c=US +cn: reading-21 +ipNetworkNumber: 155.11.77.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-22, o=SGI, c=US +cn: reading-22 +ipNetworkNumber: 155.11.77.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-23, o=SGI, c=US +cn: reading-23 +ipNetworkNumber: 155.11.78.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-24, o=SGI, c=US +cn: reading-24 +ipNetworkNumber: 155.11.78.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-25, o=SGI, c=US +cn: reading-25 +ipNetworkNumber: 155.11.79.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-26, o=SGI, c=US +cn: reading-26 +ipNetworkNumber: 155.11.79.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=praha-01, o=SGI, c=US +cn: praha-01 +ipNetworkNumber: 155.11.80.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=praha-02, o=SGI, c=US +cn: praha-02 +ipNetworkNumber: 155.11.80.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=strasbourg-01, o=SGI, c=US +cn: strasbourg-01 +ipNetworkNumber: 155.11.81.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=paris-08, o=SGI, c=US +cn: paris-08 +ipNetworkNumber: 155.11.81.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=paris-09, o=SGI, c=US +cn: paris-09 +ipNetworkNumber: 155.11.82.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=paris-10, o=SGI, c=US +cn: paris-10 +ipNetworkNumber: 155.11.82.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=milan-03, o=SGI, c=US +cn: milan-03 +ipNetworkNumber: 155.11.83.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=milan-04, o=SGI, c=US +cn: milan-04 +ipNetworkNumber: 155.11.83.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=cort-desktop1, o=SGI, c=US +cn: cort-desktop1 +ipNetworkNumber: 155.11.84.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=cort-desktop2, o=SGI, c=US +cn: cort-desktop2 +ipNetworkNumber: 155.11.84.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=copen-3, o=SGI, c=US +cn: copen-3 +ipNetworkNumber: 155.11.85.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=copen-4, o=SGI, c=US +cn: copen-4 +ipNetworkNumber: 155.11.85.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu-isdn, o=SGI, c=US +cn: neu-isdn +ipNetworkNumber: 155.11.86.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=home-isdn, o=SGI, c=US +cn: home-isdn +ipNetworkNumber: 155.11.86.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=lausanne5, o=SGI, c=US +cn: lausanne5 +ipNetworkNumber: 155.11.87.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=lausanne6, o=SGI, c=US +cn: lausanne6 +ipNetworkNumber: 155.11.87.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=lausanne7, o=SGI, c=US +cn: lausanne7 +ipNetworkNumber: 155.11.88.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-01, o=SGI, c=US +cn: reading-01 +ipNetworkNumber: 155.11.90.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-02, o=SGI, c=US +cn: reading-02 +ipNetworkNumber: 155.11.90.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-03, o=SGI, c=US +cn: reading-03 +ipNetworkNumber: 155.11.91.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-04, o=SGI, c=US +cn: reading-04 +ipNetworkNumber: 155.11.91.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-05, o=SGI, c=US +cn: reading-05 +ipNetworkNumber: 155.11.92.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-06, o=SGI, c=US +cn: reading-06 +ipNetworkNumber: 155.11.92.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-07, o=SGI, c=US +cn: reading-07 +ipNetworkNumber: 155.11.93.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-08, o=SGI, c=US +cn: reading-08 +ipNetworkNumber: 155.11.93.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-09, o=SGI, c=US +cn: reading-09 +ipNetworkNumber: 155.11.94.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-10, o=SGI, c=US +cn: reading-10 +ipNetworkNumber: 155.11.94.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-11, o=SGI, c=US +cn: reading-11 +ipNetworkNumber: 155.11.95.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-12, o=SGI, c=US +cn: reading-12 +ipNetworkNumber: 155.11.95.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-13, o=SGI, c=US +cn: reading-13 +ipNetworkNumber: 155.11.96.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-14, o=SGI, c=US +cn: reading-14 +ipNetworkNumber: 155.11.96.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=manchester-01, o=SGI, c=US +cn: manchester-01 +ipNetworkNumber: 155.11.97.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=manchester-02, o=SGI, c=US +cn: manchester-02 +ipNetworkNumber: 155.11.97.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-27, o=SGI, c=US +cn: reading-27 +ipNetworkNumber: 155.11.98.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-28, o=SGI, c=US +cn: reading-28 +ipNetworkNumber: 155.11.98.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-29, o=SGI, c=US +cn: reading-29 +ipNetworkNumber: 155.11.99.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=neu_comms, o=SGI, c=US +cn: neu_comms +ipNetworkNumber: 155.11.99.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-30, o=SGI, c=US +cn: reading-30 +ipNetworkNumber: 155.11.100.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=reading-31, o=SGI, c=US +cn: reading-31 +ipNetworkNumber: 155.11.100.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=wangate-common, o=SGI, c=US +cn: wangate-common +ipNetworkNumber: 155.11.254 +objectclass: ipNetwork +objectclass: top + +dn: cn=wangate2-wanatl, o=SGI, c=US +cn: wangate2-wanatl +ipNetworkNumber: 155.11.253 +objectclass: ipNetwork +objectclass: top + +dn: cn=wangate2-wandal, o=SGI, c=US +cn: wangate2-wandal +ipNetworkNumber: 155.11.252 +objectclass: ipNetwork +objectclass: top + +dn: cn=wangate-wanhud, o=SGI, c=US +cn: wangate-wanhud +ipNetworkNumber: 155.11.251 +objectclass: ipNetwork +objectclass: top + +dn: cn=wangate2-wanden, o=SGI, c=US +cn: wangate2-wanden +ipNetworkNumber: 155.11.250 +objectclass: ipNetwork +objectclass: top + +dn: cn=wangate2-wandiego, o=SGI, c=US +cn: wangate2-wandiego +ipNetworkNumber: 155.11.249 +objectclass: ipNetwork +objectclass: top + +dn: cn=wangate2-wanhou, o=SGI, c=US +cn: wangate2-wanhou +ipNetworkNumber: 155.11.248 +objectclass: ipNetwork +objectclass: top + +dn: cn=wangate2-wanmtv, o=SGI, c=US +cn: wangate2-wanmtv +ipNetworkNumber: 155.11.247 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanfarm-wanrose, o=SGI, c=US +cn: wanfarm-wanrose +ipNetworkNumber: 155.11.246 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanfarm-wanoak, o=SGI, c=US +cn: wanfarm-wanoak +ipNetworkNumber: 155.11.245 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanfarm-wanhud, o=SGI, c=US +cn: wanfarm-wanhud +ipNetworkNumber: 155.11.244 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanhud-wanmil, o=SGI, c=US +cn: wanhud-wanmil +ipNetworkNumber: 155.11.243 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanhud-wanhan, o=SGI, c=US +cn: wanhud-wanhan +ipNetworkNumber: 155.11.242 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanbeth-wantim, o=SGI, c=US +cn: wanbeth-wantim +ipNetworkNumber: 155.11.241 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanbeth-wanatl, o=SGI, c=US +cn: wanbeth-wanatl +ipNetworkNumber: 155.11.240 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanatl-wanmco, o=SGI, c=US +cn: wanatl-wanmco +ipNetworkNumber: 155.11.239 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanatl-wanlaud, o=SGI, c=US +cn: wanatl-wanlaud +ipNetworkNumber: 155.11.238 +objectclass: ipNetwork +objectclass: top + +dn: cn=wandal-wanstl, o=SGI, c=US +cn: wandal-wanstl +ipNetworkNumber: 155.11.237 +objectclass: ipNetwork +objectclass: top + +dn: cn=aw-sydney, o=SGI, c=US +cn: aw-sydney +ipNetworkNumber: 155.11.236 +objectclass: ipNetwork +objectclass: top + +dn: cn=wantokyo-wannagoya, o=SGI, c=US +cn: wantokyo-wannagoya +ipNetworkNumber: 155.11.235 +objectclass: ipNetwork +objectclass: top + +dn: cn=osaka, o=SGI, c=US +cn: osaka +ipNetworkNumber: 155.11.234 +objectclass: ipNetwork +objectclass: top + +dn: cn=nagoya, o=SGI, c=US +cn: nagoya +ipNetworkNumber: 155.11.233 +objectclass: ipNetwork +objectclass: top + +dn: cn=wagner-home, o=SGI, c=US +cn: wagner-home +ipNetworkNumber: 155.11.232 +objectclass: ipNetwork +objectclass: top + +dn: cn=ntt-nsg, o=SGI, c=US +cn: ntt-nsg +ipNetworkNumber: 155.11.230 +objectclass: ipNetwork +objectclass: top + +dn: cn=bos-nei1-brige, o=SGI, c=US +cn: bos-nei1-brige +ipNetworkNumber: 155.11.231 +objectclass: ipNetwork +objectclass: top + +dn: cn=wsyd-wperth, o=SGI, c=US +cn: wsyd-wperth +ipNetworkNumber: 155.11.229 +objectclass: ipNetwork +objectclass: top + +dn: cn=wellington, o=SGI, c=US +cn: wellington +ipNetworkNumber: 155.11.228 +objectclass: ipNetwork +objectclass: top + +dn: cn=connyers-atlanta, o=SGI, c=US +cn: connyers-atlanta +ipNetworkNumber: 155.11.227 +objectclass: ipNetwork +objectclass: top + +dn: cn=sydney, o=SGI, c=US +cn: sydney +ipNetworkNumber: 155.11.226 +objectclass: ipNetwork +objectclass: top + +dn: cn=melbourne, o=SGI, c=US +cn: melbourne +ipNetworkNumber: 155.11.225 +objectclass: ipNetwork +objectclass: top + +dn: cn=brisbane, o=SGI, c=US +cn: brisbane +ipNetworkNumber: 155.11.224 +objectclass: ipNetwork +objectclass: top + +dn: cn=adelaide, o=SGI, c=US +cn: adelaide +ipNetworkNumber: 155.11.223 +objectclass: ipNetwork +objectclass: top + +dn: cn=perth, o=SGI, c=US +cn: perth +ipNetworkNumber: 155.11.222 +objectclass: ipNetwork +objectclass: top + +dn: cn=auckland, o=SGI, c=US +cn: auckland +ipNetworkNumber: 155.11.221 +objectclass: ipNetwork +objectclass: top + +dn: cn=tokyo-net1, o=SGI, c=US +cn: tokyo-net1 +ipNetworkNumber: 155.11.220 +objectclass: ipNetwork +objectclass: top + +dn: cn=tokyo-net2, o=SGI, c=US +cn: tokyo-net2 +ipNetworkNumber: 155.11.219 +objectclass: ipNetwork +objectclass: top + +dn: cn=hongkong, o=SGI, c=US +cn: hongkong +ipNetworkNumber: 155.11.218 +objectclass: ipNetwork +objectclass: top + +dn: cn=milwaukee, o=SGI, c=US +cn: milwaukee +ipNetworkNumber: 155.11.216 +objectclass: ipNetwork +objectclass: top + +dn: cn=kansas, o=SGI, c=US +cn: kansas +ipNetworkNumber: 155.11.215 +objectclass: ipNetwork +objectclass: top + +dn: cn=honk-kong-test, o=SGI, c=US +cn: honk-kong-test +ipNetworkNumber: 155.11.214 +objectclass: ipNetwork +objectclass: top + +dn: cn=beijing1, o=SGI, c=US +cn: beijing1 +ipNetworkNumber: 155.11.213 +objectclass: ipNetwork +objectclass: top + +dn: cn=kawasaki, o=SGI, c=US +cn: kawasaki +ipNetworkNumber: 155.11.212 +objectclass: ipNetwork +objectclass: top + +dn: cn=shangai1, o=SGI, c=US +cn: shangai1 +ipNetworkNumber: 155.11.211 +objectclass: ipNetwork +objectclass: top + +dn: cn=guangzhou, o=SGI, c=US +cn: guangzhou +ipNetworkNumber: 155.11.210 +objectclass: ipNetwork +objectclass: top + +dn: cn=riverside, o=SGI, c=US +cn: riverside +ipNetworkNumber: 155.11.206 +objectclass: ipNetwork +objectclass: top + +dn: cn=minneapolis, o=SGI, c=US +cn: minneapolis +ipNetworkNumber: 155.11.205 +objectclass: ipNetwork +objectclass: top + +dn: cn=canberra, o=SGI, c=US +cn: canberra +ipNetworkNumber: 155.11.204 +objectclass: ipNetwork +objectclass: top + +dn: cn=newdelhi, o=SGI, c=US +cn: newdelhi +ipNetworkNumber: 155.11.203 +objectclass: ipNetwork +objectclass: top + +dn: cn=sanantonio, o=SGI, c=US +cn: sanantonio +ipNetworkNumber: 155.11.202 +objectclass: ipNetwork +objectclass: top + +dn: cn=frame-relay2, o=SGI, c=US +cn: frame-relay2 +ipNetworkNumber: 155.11.201 +objectclass: ipNetwork +objectclass: top + +dn: cn=pittsburgh, o=SGI, c=US +cn: pittsburgh +ipNetworkNumber: 155.11.200 +objectclass: ipNetwork +objectclass: top + +dn: cn=albuquerque, o=SGI, c=US +cn: albuquerque +ipNetworkNumber: 155.11.199 +objectclass: ipNetwork +objectclass: top + +dn: cn=syracuse, o=SGI, c=US +cn: syracuse +ipNetworkNumber: 155.11.198 +objectclass: ipNetwork +objectclass: top + +dn: cn=rochester, o=SGI, c=US +cn: rochester +ipNetworkNumber: 155.11.197 +objectclass: ipNetwork +objectclass: top + +dn: cn=tulsa, o=SGI, c=US +cn: tulsa +ipNetworkNumber: 155.11.196 +objectclass: ipNetwork +objectclass: top + +dn: cn=leffler-home, o=SGI, c=US +cn: leffler-home +ipNetworkNumber: 155.11.194 +objectclass: ipNetwork +objectclass: top + +dn: cn=melville, o=SGI, c=US +cn: melville +ipNetworkNumber: 155.11.193 +objectclass: ipNetwork +objectclass: top + +dn: cn=hudson-slip-1, o=SGI, c=US +cn: hudson-slip-1 +ipNetworkNumber: 155.11.192 +objectclass: ipNetwork +objectclass: top + +dn: cn=hudson-engr, o=SGI, c=US +cn: hudson-engr +ipNetworkNumber: 155.11.191 +objectclass: ipNetwork +objectclass: top + +dn: cn=hudson-sales, o=SGI, c=US +cn: hudson-sales +ipNetworkNumber: 155.11.190 +objectclass: ipNetwork +objectclass: top + +dn: cn=nova, o=SGI, c=US +cn: nova +ipNetworkNumber: 155.11.189 +objectclass: ipNetwork +objectclass: top + +dn: cn=singapore, o=SGI, c=US +cn: singapore +ipNetworkNumber: 155.11.188 +objectclass: ipNetwork +objectclass: top + +dn: cn=allied, o=SGI, c=US +cn: allied +ipNetworkNumber: 155.11.187 +objectclass: ipNetwork +objectclass: top + +dn: cn=manhattan, o=SGI, c=US +cn: manhattan +ipNetworkNumber: 155.11.186 +objectclass: ipNetwork +objectclass: top + +dn: cn=mtltac, o=SGI, c=US +cn: mtltac +ipNetworkNumber: 155.11.185 +objectclass: ipNetwork +objectclass: top + +dn: cn=cleveland, o=SGI, c=US +cn: cleveland +ipNetworkNumber: 155.11.184 +objectclass: ipNetwork +objectclass: top + +dn: cn=sao-paolo, o=SGI, c=US +cn: sao-paolo +ipNetworkNumber: 155.11.183 +objectclass: ipNetwork +objectclass: top + +dn: cn=wangate2-wbldG, o=SGI, c=US +cn: wangate2-wbldG +ipNetworkNumber: 155.11.181 +objectclass: ipNetwork +objectclass: top + +dn: cn=sanramon, o=SGI, c=US +cn: sanramon +ipNetworkNumber: 155.11.180 +objectclass: ipNetwork +objectclass: top + +dn: cn=sanramon-fddi, o=SGI, c=US +cn: sanramon-fddi +ipNetworkNumber: 155.11.180.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=hudson-training, o=SGI, c=US +cn: hudson-training +ipNetworkNumber: 155.11.179 +objectclass: ipNetwork +objectclass: top + +dn: cn=hudson-tech, o=SGI, c=US +cn: hudson-tech +ipNetworkNumber: 155.11.178 +objectclass: ipNetwork +objectclass: top + +dn: cn=singapore-eptc, o=SGI, c=US +cn: singapore-eptc +ipNetworkNumber: 155.11.177 +objectclass: ipNetwork +objectclass: top + +dn: cn=ottawa, o=SGI, c=US +cn: ottawa +ipNetworkNumber: 155.11.172 +objectclass: ipNetwork +objectclass: top + +dn: cn=calgary, o=SGI, c=US +cn: calgary +ipNetworkNumber: 155.11.171 +objectclass: ipNetwork +objectclass: top + +dn: cn=vancouver, o=SGI, c=US +cn: vancouver +ipNetworkNumber: 155.11.170 +objectclass: ipNetwork +objectclass: top + +dn: cn=tampa, o=SGI, c=US +cn: tampa +ipNetworkNumber: 155.11.169 +objectclass: ipNetwork +objectclass: top + +dn: cn=birmingham, o=SGI, c=US +cn: birmingham +ipNetworkNumber: 155.11.168 +objectclass: ipNetwork +objectclass: top + +dn: cn=stlouis-sales, o=SGI, c=US +cn: stlouis-sales +ipNetworkNumber: 155.11.167 +objectclass: ipNetwork +objectclass: top + +dn: cn=stlouis-service, o=SGI, c=US +cn: stlouis-service +ipNetworkNumber: 155.11.166 +objectclass: ipNetwork +objectclass: top + +dn: cn=albany, o=SGI, c=US +cn: albany +ipNetworkNumber: 155.11.165 +objectclass: ipNetwork +objectclass: top + +dn: cn=neworleans, o=SGI, c=US +cn: neworleans +ipNetworkNumber: 155.11.164 +objectclass: ipNetwork +objectclass: top + +dn: cn=sacramento, o=SGI, c=US +cn: sacramento +ipNetworkNumber: 155.11.163 +objectclass: ipNetwork +objectclass: top + +dn: cn=buffalo, o=SGI, c=US +cn: buffalo +ipNetworkNumber: 155.11.162 +objectclass: ipNetwork +objectclass: top + +dn: cn=urbana, o=SGI, c=US +cn: urbana +ipNetworkNumber: 155.11.161 +objectclass: ipNetwork +objectclass: top + +dn: cn=korea, o=SGI, c=US +cn: korea +ipNetworkNumber: 155.11.160 +objectclass: ipNetwork +objectclass: top + +dn: cn=harrisburg, o=SGI, c=US +cn: harrisburg +ipNetworkNumber: 155.11.159 +objectclass: ipNetwork +objectclass: top + +dn: cn=dallas1, o=SGI, c=US +cn: dallas1 +ipNetworkNumber: 155.11.158 +objectclass: ipNetwork +objectclass: top + +dn: cn=dallas2, o=SGI, c=US +cn: dallas2 +ipNetworkNumber: 155.11.157 +objectclass: ipNetwork +objectclass: top + +dn: cn=denver1, o=SGI, c=US +cn: denver1 +ipNetworkNumber: 155.11.156 +objectclass: ipNetwork +objectclass: top + +dn: cn=denver2, o=SGI, c=US +cn: denver2 +ipNetworkNumber: 155.11.155 +objectclass: ipNetwork +objectclass: top + +dn: cn=toronto, o=SGI, c=US +cn: toronto +ipNetworkNumber: 155.11.154 +objectclass: ipNetwork +objectclass: top + +dn: cn=stlaurent, o=SGI, c=US +cn: stlaurent +ipNetworkNumber: 155.11.153 +objectclass: ipNetwork +objectclass: top + +dn: cn=charlotte, o=SGI, c=US +cn: charlotte +ipNetworkNumber: 155.11.152 +objectclass: ipNetwork +objectclass: top + +dn: cn=bothell, o=SGI, c=US +cn: bothell +ipNetworkNumber: 155.11.151 +objectclass: ipNetwork +objectclass: top + +dn: cn=space-vision-tokyo, o=SGI, c=US +cn: space-vision-tokyo +ipNetworkNumber: 155.11.150 +objectclass: ipNetwork +objectclass: top + +dn: cn=cray-mfg-pro-tokyo, o=SGI, c=US +cn: cray-mfg-pro-tokyo +ipNetworkNumber: 155.11.149 +objectclass: ipNetwork +objectclass: top + +dn: cn=sandiego, o=SGI, c=US +cn: sandiego +ipNetworkNumber: 155.11.148 +objectclass: ipNetwork +objectclass: top + +dn: cn=b16-corp-avai, o=SGI, c=US +cn: b16-corp-avai +ipNetworkNumber: 155.11.147 +objectclass: ipNetwork +objectclass: top + +dn: cn=houston, o=SGI, c=US +cn: houston +ipNetworkNumber: 155.11.145 +objectclass: ipNetwork +objectclass: top + +dn: cn=lauderdale, o=SGI, c=US +cn: lauderdale +ipNetworkNumber: 155.11.144 +objectclass: ipNetwork +objectclass: top + +dn: cn=huntsville, o=SGI, c=US +cn: huntsville +ipNetworkNumber: 155.11.143 +objectclass: ipNetwork +objectclass: top + +dn: cn=jackson, o=SGI, c=US +cn: jackson +ipNetworkNumber: 155.11.142 +objectclass: ipNetwork +objectclass: top + +dn: cn=triangle, o=SGI, c=US +cn: triangle +ipNetworkNumber: 155.11.141 +objectclass: ipNetwork +objectclass: top + +dn: cn=knoxville-avai, o=SGI, c=US +cn: knoxville-avai +ipNetworkNumber: 155.11.140 +objectclass: ipNetwork +objectclass: top + +dn: cn=orlando, o=SGI, c=US +cn: orlando +ipNetworkNumber: 155.11.139 +objectclass: ipNetwork +objectclass: top + +dn: cn=pensacola, o=SGI, c=US +cn: pensacola +ipNetworkNumber: 155.11.138 +objectclass: ipNetwork +objectclass: top + +dn: cn=atlanta-avai, o=SGI, c=US +cn: atlanta-avai +ipNetworkNumber: 155.11.137 +objectclass: ipNetwork +objectclass: top + +dn: cn=hampton-avai, o=SGI, c=US +cn: hampton-avai +ipNetworkNumber: 155.11.136 +objectclass: ipNetwork +objectclass: top + +dn: cn=timonium, o=SGI, c=US +cn: timonium +ipNetworkNumber: 155.11.135 +objectclass: ipNetwork +objectclass: top + +dn: cn=clubfed-avai, o=SGI, c=US +cn: clubfed-avai +ipNetworkNumber: 155.11.134 +objectclass: ipNetwork +objectclass: top + +dn: cn=dayton-avai, o=SGI, c=US +cn: dayton-avai +ipNetworkNumber: 155.11.133 +objectclass: ipNetwork +objectclass: top + +dn: cn=columbus, o=SGI, c=US +cn: columbus +ipNetworkNumber: 155.11.132 +objectclass: ipNetwork +objectclass: top + +dn: cn=chicago, o=SGI, c=US +cn: chicago +ipNetworkNumber: 155.11.131 +objectclass: ipNetwork +objectclass: top + +dn: cn=indianapolis, o=SGI, c=US +cn: indianapolis +ipNetworkNumber: 155.11.130 +objectclass: ipNetwork +objectclass: top + +dn: cn=detroit, o=SGI, c=US +cn: detroit +ipNetworkNumber: 155.11.129 +objectclass: ipNetwork +objectclass: top + +dn: cn=trevose, o=SGI, c=US +cn: trevose +ipNetworkNumber: 155.11.128 +objectclass: ipNetwork +objectclass: top + +dn: cn=parsippany, o=SGI, c=US +cn: parsippany +ipNetworkNumber: 155.11.127 +objectclass: ipNetwork +objectclass: top + +dn: cn=meriden-avai, o=SGI, c=US +cn: meriden-avai +ipNetworkNumber: 155.11.126 +objectclass: ipNetwork +objectclass: top + +dn: cn=richmond, o=SGI, c=US +cn: richmond +ipNetworkNumber: 155.11.125 +objectclass: ipNetwork +objectclass: top + +dn: cn=aberdeen, o=SGI, c=US +cn: aberdeen +ipNetworkNumber: 155.11.124 +objectclass: ipNetwork +objectclass: top + +dn: cn=hacienda, o=SGI, c=US +cn: hacienda +ipNetworkNumber: 155.11.123 +objectclass: ipNetwork +objectclass: top + +dn: cn=hudson-dfoulser, o=SGI, c=US +cn: hudson-dfoulser +ipNetworkNumber: 155.11.122 +objectclass: ipNetwork +objectclass: top + +dn: cn=ftworth, o=SGI, c=US +cn: ftworth +ipNetworkNumber: 155.11.121 +objectclass: ipNetwork +objectclass: top + +dn: cn=tokyo-net3, o=SGI, c=US +cn: tokyo-net3 +ipNetworkNumber: 155.11.120 +objectclass: ipNetwork +objectclass: top + +dn: cn=tokyo-nptc2, o=SGI, c=US +cn: tokyo-nptc2 +ipNetworkNumber: 155.11.119 +objectclass: ipNetwork +objectclass: top + +dn: cn=johannesburg, o=SGI, c=US +cn: johannesburg +ipNetworkNumber: 155.11.118 +objectclass: ipNetwork +objectclass: top + +dn: cn=tokyo-nptc1, o=SGI, c=US +cn: tokyo-nptc1 +ipNetworkNumber: 155.11.117 +objectclass: ipNetwork +objectclass: top + +dn: cn=ssi-prod, o=SGI, c=US +cn: ssi-prod +ipNetworkNumber: 155.11.116 +objectclass: ipNetwork +objectclass: top + +dn: cn=bangalore, o=SGI, c=US +cn: bangalore +ipNetworkNumber: 155.11.115 +objectclass: ipNetwork +objectclass: top + +dn: cn=wan-atm, o=SGI, c=US +cn: wan-atm +ipNetworkNumber: 155.11.112 +objectclass: ipNetwork +objectclass: top + +dn: cn=clearlake, o=SGI, c=US +cn: clearlake +ipNetworkNumber: 155.11.111 +objectclass: ipNetwork +objectclass: top + +dn: cn=alamos, o=SGI, c=US +cn: alamos +ipNetworkNumber: 155.11.110 +objectclass: ipNetwork +objectclass: top + +dn: cn=troy, o=SGI, c=US +cn: troy +ipNetworkNumber: 155.11.109 +objectclass: ipNetwork +objectclass: top + +dn: cn=temp-ring, o=SGI, c=US +cn: temp-ring +ipNetworkNumber: 155.11.108 +objectclass: ipNetwork +objectclass: top + +dn: cn=silicon-farm, o=SGI, c=US +cn: silicon-farm +ipNetworkNumber: 155.11.107 +objectclass: ipNetwork +objectclass: top + +dn: cn=perftools-melb, o=SGI, c=US +cn: perftools-melb +ipNetworkNumber: 155.11.106 +objectclass: ipNetwork +objectclass: top + +dn: cn=memphis, o=SGI, c=US +cn: memphis +ipNetworkNumber: 155.11.104 +objectclass: ipNetwork +objectclass: top + +dn: cn=nashville, o=SGI, c=US +cn: nashville +ipNetworkNumber: 155.11.103 +objectclass: ipNetwork +objectclass: top + +dn: cn=access-graphics, o=SGI, c=US +cn: access-graphics +ipNetworkNumber: 155.11.102 +objectclass: ipNetwork +objectclass: top + +dn: cn=sgi-uk, o=SGI, c=US +cn: sgi-uk +ipNetworkNumber: 192.35.108 +objectclass: ipNetwork +objectclass: top + +dn: cn=melbourne-net, o=SGI, c=US +cn: melbourne-net +ipNetworkNumber: 192.68.139 +objectclass: ipNetwork +objectclass: top + +dn: cn=oasis, o=SGI, c=US +cn: oasis +ipNetworkNumber: 163.154.0.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=ids-1, o=SGI, c=US +cn: ids-1 +ipNetworkNumber: 204.94.208 +objectclass: ipNetwork +objectclass: top + +dn: cn=sgigate-net, o=SGI, c=US +cn: sgigate-net +ipNetworkNumber: 204.94.209 +objectclass: ipNetwork +objectclass: top + +dn: cn=is-test-out, o=SGI, c=US +cn: is-test-out +ipNetworkNumber: 204.94.210 +objectclass: ipNetwork +objectclass: top + +dn: cn=is-outside-ring, o=SGI, c=US +cn: is-outside-ring +ipNetworkNumber: 204.94.211 +objectclass: ipNetwork +objectclass: top + +dn: cn=is-devforum, o=SGI, c=US +cn: is-devforum +ipNetworkNumber: 204.94.212 +objectclass: ipNetwork +objectclass: top + +dn: cn=is-devline, o=SGI, c=US +cn: is-devline +ipNetworkNumber: 204.94.213 +objectclass: ipNetwork +objectclass: top + +dn: cn=alv-temp, o=SGI, c=US +cn: alv-temp +ipNetworkNumber: 204.94.215 +objectclass: ipNetwork +objectclass: top + +dn: cn=ids-2, o=SGI, c=US +cn: ids-2 +ipNetworkNumber: 204.94.223 +objectclass: ipNetwork +objectclass: top + +dn: cn=ssla-cidr-1, o=SGI, c=US +cn: ssla-cidr-1 +ipNetworkNumber: 204.250.254 +objectclass: ipNetwork +objectclass: top + +dn: cn=ssla-cidr-2, o=SGI, c=US +cn: ssla-cidr-2 +ipNetworkNumber: 204.250.255 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17u-cselabtr, o=SGI, c=US +cn: b17u-cselabtr +ipNetworkNumber: 150.166.1 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17u-labiso, o=SGI, c=US +cn: b17u-labiso +ipNetworkNumber: 150.166.2 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17u-cselabfddi, o=SGI, c=US +cn: b17u-cselabfddi +ipNetworkNumber: 150.166.3 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17u-labenet1, o=SGI, c=US +cn: b17u-labenet1 +ipNetworkNumber: 150.166.4 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17u-labenet2, o=SGI, c=US +cn: b17u-labenet2 +ipNetworkNumber: 150.166.5 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17l-new2, o=SGI, c=US +cn: b17l-new2 +ipNetworkNumber: 150.166.7 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17-microwave, o=SGI, c=US +cn: b17-microwave +ipNetworkNumber: 150.166.9 +objectclass: ipNetwork +objectclass: top + +dn: cn=etc-fiber-channel, o=SGI, c=US +cn: etc-fiber-channel +ipNetworkNumber: 150.166.10 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17u-cselabmm, o=SGI, c=US +cn: b17u-cselabmm +ipNetworkNumber: 150.166.11 +objectclass: ipNetwork +objectclass: top + +dn: cn=b30l-csd, o=SGI, c=US +cn: b30l-csd +ipNetworkNumber: 150.166.12 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8u-tring_net1, o=SGI, c=US +cn: b8u-tring_net1 +ipNetworkNumber: 150.166.13 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17u-lab-conf, o=SGI, c=US +cn: b17u-lab-conf +ipNetworkNumber: 150.166.14 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17u-cselabhip, o=SGI, c=US +cn: b17u-cselabhip +ipNetworkNumber: 150.166.15 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8u-tring_net2, o=SGI, c=US +cn: b8u-tring_net2 +ipNetworkNumber: 150.166.16 +objectclass: ipNetwork +objectclass: top + +dn: cn=b24u-performance-plus_lab, o=SGI, c=US +cn: b24u-performance-plus_lab +ipNetworkNumber: 150.166.17 +objectclass: ipNetwork +objectclass: top + +dn: cn=b21-softsuite-blockhouse-network, o=SGI, c=US +cn: b21-softsuite-blockhouse-network +ipNetworkNumber: 150.166.24 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14u-vsg-apps3, o=SGI, c=US +cn: b14u-vsg-apps3 +ipNetworkNumber: 150.166.32 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14l-corp-net5, o=SGI, c=US +cn: b14l-corp-net5 +ipNetworkNumber: 150.166.33 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9u-lab, o=SGI, c=US +cn: b9u-lab +ipNetworkNumber: 150.166.34 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1dco-ntservers, o=SGI, c=US +cn: b1dco-ntservers +ipNetworkNumber: 150.166.35 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8u-engr-net, o=SGI, c=US +cn: b8u-engr-net +ipNetworkNumber: 150.166.36 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8u-core_render_net1, o=SGI, c=US +cn: b8u-core_render_net1 +ipNetworkNumber: 150.166.37 +objectclass: ipNetwork +objectclass: top + +dn: cn=b10l-pandora_lab_engr2, o=SGI, c=US +cn: b10l-pandora_lab_engr2 +ipNetworkNumber: 150.166.39 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8u-ipd, o=SGI, c=US +cn: b8u-ipd +ipNetworkNumber: 150.166.40 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8u-ipd_lab, o=SGI, c=US +cn: b8u-ipd_lab +ipNetworkNumber: 150.166.41 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8u-ipd_engr, o=SGI, c=US +cn: b8u-ipd_engr +ipNetworkNumber: 150.166.42 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8l-ibmi_lab, o=SGI, c=US +cn: b8l-ibmi_lab +ipNetworkNumber: 150.166.43 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8u-tirix_net, o=SGI, c=US +cn: b8u-tirix_net +ipNetworkNumber: 150.166.44 +objectclass: ipNetwork +objectclass: top + +dn: cn=b12-imsd5, o=SGI, c=US +cn: b12-imsd5 +ipNetworkNumber: 150.166.45 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dss2, o=SGI, c=US +cn: b1-dss2 +ipNetworkNumber: 150.166.46 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dss3, o=SGI, c=US +cn: b1-dss3 +ipNetworkNumber: 150.166.47 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8u-add-mktg, o=SGI, c=US +cn: b8u-add-mktg +ipNetworkNumber: 150.166.48 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8u-ipd_lab2, o=SGI, c=US +cn: b8u-ipd_lab2 +ipNetworkNumber: 150.166.49 +objectclass: ipNetwork +objectclass: top + +dn: cn=b10l-pandora_lab_engr, o=SGI, c=US +cn: b10l-pandora_lab_engr +ipNetworkNumber: 150.166.51 +objectclass: ipNetwork +objectclass: top + +dn: cn=b10-community1, o=SGI, c=US +cn: b10-community1 +ipNetworkNumber: 150.166.52 +objectclass: ipNetwork +objectclass: top + +dn: cn=b10-community2, o=SGI, c=US +cn: b10-community2 +ipNetworkNumber: 150.166.53 +objectclass: ipNetwork +objectclass: top + +dn: cn=b10-community3, o=SGI, c=US +cn: b10-community3 +ipNetworkNumber: 150.166.54 +objectclass: ipNetwork +objectclass: top + +dn: cn=b10-community4, o=SGI, c=US +cn: b10-community4 +ipNetworkNumber: 150.166.55 +objectclass: ipNetwork +objectclass: top + +dn: cn=b10-community5, o=SGI, c=US +cn: b10-community5 +ipNetworkNumber: 150.166.56 +objectclass: ipNetwork +objectclass: top + +dn: cn=b10-community6, o=SGI, c=US +cn: b10-community6 +ipNetworkNumber: 150.166.57 +objectclass: ipNetwork +objectclass: top + +dn: cn=b10-community7, o=SGI, c=US +cn: b10-community7 +ipNetworkNumber: 150.166.58 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9u-tw59, o=SGI, c=US +cn: b9u-tw59 +ipNetworkNumber: 150.166.59 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-empty60, o=SGI, c=US +cn: b9-empty60 +ipNetworkNumber: 150.166.60 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9u-engr61, o=SGI, c=US +cn: b9u-engr61 +ipNetworkNumber: 150.166.61 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-empty62, o=SGI, c=US +cn: b9-empty62 +ipNetworkNumber: 150.166.62 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-empty63, o=SGI, c=US +cn: b9-empty63 +ipNetworkNumber: 150.166.63 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-empty64, o=SGI, c=US +cn: b9-empty64 +ipNetworkNumber: 150.166.64 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9l-sw-lab1, o=SGI, c=US +cn: b9l-sw-lab1 +ipNetworkNumber: 150.166.65 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9l-sw-lab2, o=SGI, c=US +cn: b9l-sw-lab2 +ipNetworkNumber: 150.166.66 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-empty68, o=SGI, c=US +cn: b9-empty68 +ipNetworkNumber: 150.166.68 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-empty69, o=SGI, c=US +cn: b9-empty69 +ipNetworkNumber: 150.166.69 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9u-tw-itv1, o=SGI, c=US +cn: b9u-tw-itv1 +ipNetworkNumber: 150.166.70 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-empty71, o=SGI, c=US +cn: b9-empty71 +ipNetworkNumber: 150.166.71 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-empty72, o=SGI, c=US +cn: b9-empty72 +ipNetworkNumber: 150.166.72 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-empty73, o=SGI, c=US +cn: b9-empty73 +ipNetworkNumber: 150.166.73 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-empty74, o=SGI, c=US +cn: b9-empty74 +ipNetworkNumber: 150.166.74 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9u-engr75, o=SGI, c=US +cn: b9u-engr75 +ipNetworkNumber: 150.166.75 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9u-engr76, o=SGI, c=US +cn: b9u-engr76 +ipNetworkNumber: 150.166.76 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-empty77, o=SGI, c=US +cn: b9-empty77 +ipNetworkNumber: 150.166.77 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-empty78, o=SGI, c=US +cn: b9-empty78 +ipNetworkNumber: 150.166.78 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9l-100bt, o=SGI, c=US +cn: b9l-100bt +ipNetworkNumber: 150.166.79 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-empty80, o=SGI, c=US +cn: b9-empty80 +ipNetworkNumber: 150.166.80 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9l-advnet-lab, o=SGI, c=US +cn: b9l-advnet-lab +ipNetworkNumber: 150.166.81 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-empty82, o=SGI, c=US +cn: b9-empty82 +ipNetworkNumber: 150.166.82 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-webgrp, o=SGI, c=US +cn: b9-webgrp +ipNetworkNumber: 150.166.83 +objectclass: ipNetwork +objectclass: top + +dn: cn=aes-ams-atm2, o=SGI, c=US +cn: aes-ams-atm2 +ipNetworkNumber: 150.166.84 +objectclass: ipNetwork +objectclass: top + +dn: cn=aes-ams-atm3, o=SGI, c=US +cn: aes-ams-atm3 +ipNetworkNumber: 150.166.85 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17l-csdtrnglab, o=SGI, c=US +cn: b17l-csdtrnglab +ipNetworkNumber: 150.166.87 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9l-sqa-fddi1, o=SGI, c=US +cn: b9l-sqa-fddi1 +ipNetworkNumber: 150.166.88 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9l-sqa-fddi2, o=SGI, c=US +cn: b9l-sqa-fddi2 +ipNetworkNumber: 150.166.89 +objectclass: ipNetwork +objectclass: top + +dn: cn=b20-dco-fddi, o=SGI, c=US +cn: b20-dco-fddi +ipNetworkNumber: 150.166.90 +objectclass: ipNetwork +objectclass: top + +dn: cn=b20-dco, o=SGI, c=US +cn: b20-dco +ipNetworkNumber: 150.166.91 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9u-atm-lab, o=SGI, c=US +cn: b9u-atm-lab +ipNetworkNumber: 150.166.92 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9u-atm-lab2, o=SGI, c=US +cn: b9u-atm-lab2 +ipNetworkNumber: 150.166.67 +objectclass: ipNetwork +objectclass: top + +dn: cn=b21-etm3, o=SGI, c=US +cn: b21-etm3 +ipNetworkNumber: 150.166.93 +objectclass: ipNetwork +objectclass: top + +dn: cn=b21-ssi2, o=SGI, c=US +cn: b21-ssi2 +ipNetworkNumber: 150.166.94 +objectclass: ipNetwork +objectclass: top + +dn: cn=b22-1, o=SGI, c=US +cn: b22-1 +ipNetworkNumber: 150.166.95 +objectclass: ipNetwork +objectclass: top + +dn: cn=b22-2, o=SGI, c=US +cn: b22-2 +ipNetworkNumber: 150.166.96 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8l, o=SGI, c=US +cn: b8l +ipNetworkNumber: 150.166.97 +objectclass: ipNetwork +objectclass: top + +dn: cn=b15-micro, o=SGI, c=US +cn: b15-micro +ipNetworkNumber: 150.166.98 +objectclass: ipNetwork +objectclass: top + +dn: cn=ss-wan-net, o=SGI, c=US +cn: ss-wan-net +ipNetworkNumber: 150.166.99 +objectclass: ipNetwork +objectclass: top + +dn: cn=fddi-campus, o=SGI, c=US +cn: fddi-campus +ipNetworkNumber: 150.166.100 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17u-cse1, o=SGI, c=US +cn: b17u-cse1 +ipNetworkNumber: 150.166.101 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17-b21_micro, o=SGI, c=US +cn: b17-b21_micro +ipNetworkNumber: 150.166.102 +objectclass: ipNetwork +objectclass: top + +dn: cn=b15-b20_atm, o=SGI, c=US +cn: b15-b20_atm +ipNetworkNumber: 150.166.103 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14U-apps3, o=SGI, c=US +cn: b14U-apps3 +ipNetworkNumber: 150.166.104 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9u-100bt, o=SGI, c=US +cn: b9u-100bt +ipNetworkNumber: 150.166.105 +objectclass: ipNetwork +objectclass: top + +dn: cn=b12l-mfg, o=SGI, c=US +cn: b12l-mfg +ipNetworkNumber: 150.166.106 +objectclass: ipNetwork +objectclass: top + +dn: cn=atm-utp, o=SGI, c=US +cn: atm-utp +ipNetworkNumber: 150.166.107 +objectclass: ipNetwork +objectclass: top + +dn: cn=b5u-demo-room, o=SGI, c=US +cn: b5u-demo-room +ipNetworkNumber: 150.166.108 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-ssd-benchlab_2, o=SGI, c=US +cn: b7l-ssd-benchlab_2 +ipNetworkNumber: 150.166.109 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2u-gandalf-110, o=SGI, c=US +cn: b2u-gandalf-110 +ipNetworkNumber: 150.166.110 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dms1, o=SGI, c=US +cn: b1-dms1 +ipNetworkNumber: 150.166.111 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-dms2, o=SGI, c=US +cn: b1-dms2 +ipNetworkNumber: 150.166.112 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9l-media-qa_lab, o=SGI, c=US +cn: b9l-media-qa_lab +ipNetworkNumber: 150.166.113 +objectclass: ipNetwork +objectclass: top + +dn: cn=b23-micro, o=SGI, c=US +cn: b23-micro +ipNetworkNumber: 150.166.116 +objectclass: ipNetwork +objectclass: top + +dn: cn=b23-production, o=SGI, c=US +cn: b23-production +ipNetworkNumber: 150.166.117 +objectclass: ipNetwork +objectclass: top + +dn: cn=b23-t1, o=SGI, c=US +cn: b23-t1 +ipNetworkNumber: 150.166.118 +objectclass: ipNetwork +objectclass: top + +dn: cn=b23, o=SGI, c=US +cn: b23 +ipNetworkNumber: 150.166.119 +objectclass: ipNetwork +objectclass: top + +dn: cn=btl-essA, o=SGI, c=US +cn: btl-essA +ipNetworkNumber: 150.166.120 +objectclass: ipNetwork +objectclass: top + +dn: cn=btu-essA, o=SGI, c=US +cn: btu-essA +ipNetworkNumber: 150.166.121 +objectclass: ipNetwork +objectclass: top + +dn: cn=bt-t1-b1, o=SGI, c=US +cn: bt-t1-b1 +ipNetworkNumber: 150.166.122 +objectclass: ipNetwork +objectclass: top + +dn: cn=bt-mcast-b1, o=SGI, c=US +cn: bt-mcast-b1 +ipNetworkNumber: 150.166.123 +objectclass: ipNetwork +objectclass: top + +dn: cn=bt-hssi-b1, o=SGI, c=US +cn: bt-hssi-b1 +ipNetworkNumber: 150.166.124 +objectclass: ipNetwork +objectclass: top + +dn: cn=btl-essB, o=SGI, c=US +cn: btl-essB +ipNetworkNumber: 150.166.125 +objectclass: ipNetwork +objectclass: top + +dn: cn=btu-essB, o=SGI, c=US +cn: btu-essB +ipNetworkNumber: 150.166.126 +objectclass: ipNetwork +objectclass: top + +dn: cn=b24l-b2_micro, o=SGI, c=US +cn: b24l-b2_micro +ipNetworkNumber: 150.166.127 +objectclass: ipNetwork +objectclass: top + +dn: cn=b1-b28-t1, o=SGI, c=US +cn: b1-b28-t1 +ipNetworkNumber: 150.166.132 +objectclass: ipNetwork +objectclass: top + +dn: cn=b10-b28-micro, o=SGI, c=US +cn: b10-b28-micro +ipNetworkNumber: 150.166.133 +objectclass: ipNetwork +objectclass: top + +dn: cn=b28-b29-endusers, o=SGI, c=US +cn: b28-b29-endusers +ipNetworkNumber: 150.166.134 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17u-cselabatm, o=SGI, c=US +cn: b17u-cselabatm +ipNetworkNumber: 150.166.135 +objectclass: ipNetwork +objectclass: top + +dn: cn=b16-endusers, o=SGI, c=US +cn: b16-endusers +ipNetworkNumber: 150.166.136 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14u-endusers, o=SGI, c=US +cn: b14u-endusers +ipNetworkNumber: 150.166.137 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14u-endusers1, o=SGI, c=US +cn: b14u-endusers1 +ipNetworkNumber: 150.166.138 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14l-inperson_lab, o=SGI, c=US +cn: b14l-inperson_lab +ipNetworkNumber: 150.166.139 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14l-endusers, o=SGI, c=US +cn: b14l-endusers +ipNetworkNumber: 150.166.140 +objectclass: ipNetwork +objectclass: top + +dn: cn=ntg-net, o=SGI, c=US +cn: ntg-net +ipNetworkNumber: 150.166.141 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9u-sw-net, o=SGI, c=US +cn: b9u-sw-net +ipNetworkNumber: 150.166.142 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2-b27-micro, o=SGI, c=US +cn: b2-b27-micro +ipNetworkNumber: 150.166.143 +objectclass: ipNetwork +objectclass: top + +dn: cn=b27l-csd-endusers, o=SGI, c=US +cn: b27l-csd-endusers +ipNetworkNumber: 150.166.144 +objectclass: ipNetwork +objectclass: top + +dn: cn=b27u-csd-endusers, o=SGI, c=US +cn: b27u-csd-endusers +ipNetworkNumber: 150.166.145 +objectclass: ipNetwork +objectclass: top + +dn: cn=b21-corp-users, o=SGI, c=US +cn: b21-corp-users +ipNetworkNumber: 150.166.146 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8u-hppi-lab, o=SGI, c=US +cn: b8u-hppi-lab +ipNetworkNumber: 150.166.147 +objectclass: ipNetwork +objectclass: top + +dn: cn=isdn-engr, o=SGI, c=US +cn: isdn-engr +ipNetworkNumber: 150.166.148 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14l-moose1, o=SGI, c=US +cn: b14l-moose1 +ipNetworkNumber: 150.166.149 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14l-esd-users, o=SGI, c=US +cn: b14l-esd-users +ipNetworkNumber: 150.166.150 +objectclass: ipNetwork +objectclass: top + +dn: cn=b2-b26-fddi, o=SGI, c=US +cn: b2-b26-fddi +ipNetworkNumber: 150.166.151 +objectclass: ipNetwork +objectclass: top + +dn: cn=b26u-mfg, o=SGI, c=US +cn: b26u-mfg +ipNetworkNumber: 150.166.152 +objectclass: ipNetwork +objectclass: top + +dn: cn=b26u-csd, o=SGI, c=US +cn: b26u-csd +ipNetworkNumber: 150.166.153 +objectclass: ipNetwork +objectclass: top + +dn: cn=b26l-mfg, o=SGI, c=US +cn: b26l-mfg +ipNetworkNumber: 150.166.154 +objectclass: ipNetwork +objectclass: top + +dn: cn=b26l-csd, o=SGI, c=US +cn: b26l-csd +ipNetworkNumber: 150.166.155 +objectclass: ipNetwork +objectclass: top + +dn: cn=b26-mfg-floor, o=SGI, c=US +cn: b26-mfg-floor +ipNetworkNumber: 150.166.156 +objectclass: ipNetwork +objectclass: top + +dn: cn=b26-gcs-csd1, o=SGI, c=US +cn: b26-gcs-csd1 +ipNetworkNumber: 150.166.157 +objectclass: ipNetwork +objectclass: top + +dn: cn=b26-mfg-server, o=SGI, c=US +cn: b26-mfg-server +ipNetworkNumber: 150.166.158 +objectclass: ipNetwork +objectclass: top + +dn: cn=b26-gcs-csd2, o=SGI, c=US +cn: b26-gcs-csd2 +ipNetworkNumber: 150.166.159 +objectclass: ipNetwork +objectclass: top + +dn: cn=b27-telecomm-net, o=SGI, c=US +cn: b27-telecomm-net +ipNetworkNumber: 150.166.160 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14-isdn-esd, o=SGI, c=US +cn: b14-isdn-esd +ipNetworkNumber: 150.166.161 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7l-hippi, o=SGI, c=US +cn: b7l-hippi +ipNetworkNumber: 150.166.162 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-atm, o=SGI, c=US +cn: b9-atm +ipNetworkNumber: 150.166.163 +objectclass: ipNetwork +objectclass: top + +dn: cn=b7-hippi, o=SGI, c=US +cn: b7-hippi +ipNetworkNumber: 150.166.164 +objectclass: ipNetwork +objectclass: top + +dn: cn=b14-community, o=SGI, c=US +cn: b14-community +ipNetworkNumber: 150.166.165 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9-eis-hippi, o=SGI, c=US +cn: b9-eis-hippi +ipNetworkNumber: 150.166.166 +objectclass: ipNetwork +objectclass: top + +dn: cn=b9l-laddis-lab, o=SGI, c=US +cn: b9l-laddis-lab +ipNetworkNumber: 150.166.167 +objectclass: ipNetwork +objectclass: top + +dn: cn=b24u-dev-hlab, o=SGI, c=US +cn: b24u-dev-hlab +ipNetworkNumber: 150.166.171 +objectclass: ipNetwork +objectclass: top + +dn: cn=b25-1-community-net, o=SGI, c=US +cn: b25-1-community-net +ipNetworkNumber: 150.166.172.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=b25-2-community-net, o=SGI, c=US +cn: b25-2-community-net +ipNetworkNumber: 150.166.173.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=b25-3-community-net, o=SGI, c=US +cn: b25-3-community-net +ipNetworkNumber: 150.166.174.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=b25-4-community-net, o=SGI, c=US +cn: b25-4-community-net +ipNetworkNumber: 150.166.175.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=b25-noc-net, o=SGI, c=US +cn: b25-noc-net +ipNetworkNumber: 150.166.176.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=b25-isac-net, o=SGI, c=US +cn: b25-isac-net +ipNetworkNumber: 150.166.177.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=b25-mmedia-lab-net, o=SGI, c=US +cn: b25-mmedia-lab-net +ipNetworkNumber: 150.166.178.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=b25-ntg-lab-net, o=SGI, c=US +cn: b25-ntg-lab-net +ipNetworkNumber: 150.166.179.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=b25-cvt-lab-net, o=SGI, c=US +cn: b25-cvt-lab-net +ipNetworkNumber: 150.166.180.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=fddi-annex, o=SGI, c=US +cn: fddi-annex +ipNetworkNumber: 150.166.200 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo1, o=SGI, c=US +cn: shore-nafo1 +ipNetworkNumber: 150.166.201 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo2, o=SGI, c=US +cn: shore-nafo2 +ipNetworkNumber: 150.166.202 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo3, o=SGI, c=US +cn: shore-nafo3 +ipNetworkNumber: 150.166.203 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo4, o=SGI, c=US +cn: shore-nafo4 +ipNetworkNumber: 150.166.204 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo5, o=SGI, c=US +cn: shore-nafo5 +ipNetworkNumber: 150.166.205 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo6, o=SGI, c=US +cn: shore-nafo6 +ipNetworkNumber: 150.166.206 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo7, o=SGI, c=US +cn: shore-nafo7 +ipNetworkNumber: 150.166.207 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo8, o=SGI, c=US +cn: shore-nafo8 +ipNetworkNumber: 150.166.208 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo9, o=SGI, c=US +cn: shore-nafo9 +ipNetworkNumber: 150.166.209 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo10, o=SGI, c=US +cn: shore-nafo10 +ipNetworkNumber: 150.166.210 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo11, o=SGI, c=US +cn: shore-nafo11 +ipNetworkNumber: 150.166.211 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo12, o=SGI, c=US +cn: shore-nafo12 +ipNetworkNumber: 150.166.212 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo13, o=SGI, c=US +cn: shore-nafo13 +ipNetworkNumber: 150.166.213 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo14, o=SGI, c=US +cn: shore-nafo14 +ipNetworkNumber: 150.166.214 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo15, o=SGI, c=US +cn: shore-nafo15 +ipNetworkNumber: 150.166.215 +objectclass: ipNetwork +objectclass: top + +dn: cn=telecom-solutions1, o=SGI, c=US +cn: telecom-solutions1 +ipNetworkNumber: 150.166.216 +objectclass: ipNetwork +objectclass: top + +dn: cn=telecom-solutions2, o=SGI, c=US +cn: telecom-solutions2 +ipNetworkNumber: 150.166.217 +objectclass: ipNetwork +objectclass: top + +dn: cn=b20l-saleslab-2, o=SGI, c=US +cn: b20l-saleslab-2 +ipNetworkNumber: 150.166.219 +objectclass: ipNetwork +objectclass: top + +dn: cn=magic-mkting, o=SGI, c=US +cn: magic-mkting +ipNetworkNumber: 150.166.220 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo21, o=SGI, c=US +cn: shore-nafo21 +ipNetworkNumber: 150.166.221 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo22, o=SGI, c=US +cn: shore-nafo22 +ipNetworkNumber: 150.166.222 +objectclass: ipNetwork +objectclass: top + +dn: cn=b40-leadership1, o=SGI, c=US +cn: b40-leadership1 +ipNetworkNumber: 150.166.227 +objectclass: ipNetwork +objectclass: top + +dn: cn=b40-leadership2, o=SGI, c=US +cn: b40-leadership2 +ipNetworkNumber: 150.166.228 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17u-cseserv, o=SGI, c=US +cn: b17u-cseserv +ipNetworkNumber: 150.166.229 +objectclass: ipNetwork +objectclass: top + +dn: cn=atm-bckbone, o=SGI, c=US +cn: atm-bckbone +ipNetworkNumber: 150.166.230 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo29, o=SGI, c=US +cn: shore-nafo29 +ipNetworkNumber: 150.166.231 +objectclass: ipNetwork +objectclass: top + +dn: cn=shore-nafo30, o=SGI, c=US +cn: shore-nafo30 +ipNetworkNumber: 150.166.232 +objectclass: ipNetwork +objectclass: top + +dn: cn=atm2-bckbone, o=SGI, c=US +cn: atm2-bckbone +ipNetworkNumber: 150.166.233 +objectclass: ipNetwork +objectclass: top + +dn: cn=intr-fddi-3, o=SGI, c=US +cn: intr-fddi-3 +ipNetworkNumber: 150.166.234 +objectclass: ipNetwork +objectclass: top + +dn: cn=atm, o=SGI, c=US +cn: atm +ipNetworkNumber: 150.166.235 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-mfg-endusers, o=SGI, c=US +cn: b11-mfg-endusers +ipNetworkNumber: 150.166.236 +objectclass: ipNetwork +objectclass: top + +dn: cn=b27u-tools-lab, o=SGI, c=US +cn: b27u-tools-lab +ipNetworkNumber: 150.166.237 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17u-isdn-combinet, o=SGI, c=US +cn: b17u-isdn-combinet +ipNetworkNumber: 150.166.238 +objectclass: ipNetwork +objectclass: top + +dn: cn=b17u-isdn-ppp, o=SGI, c=US +cn: b17u-isdn-ppp +ipNetworkNumber: 150.166.239 +objectclass: ipNetwork +objectclass: top + +dn: cn=b5u-visim, o=SGI, c=US +cn: b5u-visim +ipNetworkNumber: 150.166.241 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-5l-mfg, o=SGI, c=US +cn: b11-5l-mfg +ipNetworkNumber: 150.166.242 +objectclass: ipNetwork +objectclass: top + +dn: cn=b11-5u-mfg, o=SGI, c=US +cn: b11-5u-mfg +ipNetworkNumber: 150.166.243 +objectclass: ipNetwork +objectclass: top + +dn: cn=b8-hippi, o=SGI, c=US +cn: b8-hippi +ipNetworkNumber: 150.166.245 +objectclass: ipNetwork +objectclass: top + +dn: cn=b20l-nafo-training, o=SGI, c=US +cn: b20l-nafo-training +ipNetworkNumber: 150.166.246 +objectclass: ipNetwork +objectclass: top + +dn: cn=b21-etm2, o=SGI, c=US +cn: b21-etm2 +ipNetworkNumber: 150.166.247 +objectclass: ipNetwork +objectclass: top + +dn: cn=dialbk-project1, o=SGI, c=US +cn: dialbk-project1 +ipNetworkNumber: 150.166.248 +objectclass: ipNetwork +objectclass: top + +dn: cn=dialbk-project2, o=SGI, c=US +cn: dialbk-project2 +ipNetworkNumber: 150.166.249 +objectclass: ipNetwork +objectclass: top + +dn: cn=dialbk-project3, o=SGI, c=US +cn: dialbk-project3 +ipNetworkNumber: 150.166.250 +objectclass: ipNetwork +objectclass: top + +dn: cn=dialbk-project4, o=SGI, c=US +cn: dialbk-project4 +ipNetworkNumber: 150.166.251 +objectclass: ipNetwork +objectclass: top + +dn: cn=b21-ssi4, o=SGI, c=US +cn: b21-ssi4 +ipNetworkNumber: 150.166.252 +objectclass: ipNetwork +objectclass: top + +dn: cn=b21-csd1, o=SGI, c=US +cn: b21-csd1 +ipNetworkNumber: 150.166.253 +objectclass: ipNetwork +objectclass: top + +dn: cn=b21-csd2, o=SGI, c=US +cn: b21-csd2 +ipNetworkNumber: 150.166.254 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanaber.aberdeen, o=SGI, c=US +cn: wanaber.aberdeen +ipNetworkNumber: 169.238.31.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanbeth.clubfed, o=SGI, c=US +cn: wanbeth.clubfed +ipNetworkNumber: 169.238.31.4 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanham.hampton, o=SGI, c=US +cn: wanham.hampton +ipNetworkNumber: 169.238.31.8 +objectclass: ipNetwork +objectclass: top + +dn: cn=wannova.nova, o=SGI, c=US +cn: wannova.nova +ipNetworkNumber: 169.238.31.12 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanrich.richmond, o=SGI, c=US +cn: wanrich.richmond +ipNetworkNumber: 169.238.31.16 +objectclass: ipNetwork +objectclass: top + +dn: cn=wantim.timonium, o=SGI, c=US +cn: wantim.timonium +ipNetworkNumber: 169.238.31.20 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanalb.albany, o=SGI, c=US +cn: wanalb.albany +ipNetworkNumber: 169.238.63.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanbuf.buffalo, o=SGI, c=US +cn: wanbuf.buffalo +ipNetworkNumber: 169.238.63.4 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanhar.harrisburg, o=SGI, c=US +cn: wanhar.harrisburg +ipNetworkNumber: 169.238.63.8 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanhud.boston, o=SGI, c=US +cn: wanhud.boston +ipNetworkNumber: 169.238.63.12 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanmanhat.manhattan, o=SGI, c=US +cn: wanmanhat.manhattan +ipNetworkNumber: 169.238.63.16 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanmel.melville, o=SGI, c=US +cn: wanmel.melville +ipNetworkNumber: 169.238.63.20 +objectclass: ipNetwork +objectclass: top + +dn: cn=anmer.meriden, o=SGI, c=US +cn: anmer.meriden +ipNetworkNumber: 169.238.63.24 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanparsip.parsippany, o=SGI, c=US +cn: wanparsip.parsippany +ipNetworkNumber: 169.238.63.28 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanroc.rochester, o=SGI, c=US +cn: wanroc.rochester +ipNetworkNumber: 169.238.63.32 +objectclass: ipNetwork +objectclass: top + +dn: cn=wansyc.syracuse, o=SGI, c=US +cn: wansyc.syracuse +ipNetworkNumber: 169.238.63.36 +objectclass: ipNetwork +objectclass: top + +dn: cn=wantre.trevose, o=SGI, c=US +cn: wantre.trevose +ipNetworkNumber: 169.238.63.40 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanaccessg.boulder, o=SGI, c=US +cn: wanaccessg.boulder +ipNetworkNumber: 169.238.95.120 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanant.sanantonio, o=SGI, c=US +cn: wanant.sanantonio +cn: is +cn: down +cn: due +cn: to +cn: move> +ipNetworkNumber: <Site +objectclass: ipNetwork +objectclass: top + +dn: cn=wanaus.austin, o=SGI, c=US +cn: wanaus.austin +ipNetworkNumber: 169.238.95.116 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanclear.clearlake, o=SGI, c=US +cn: wanclear.clearlake +ipNetworkNumber: 169.238.95.112 +objectclass: ipNetwork +objectclass: top + +dn: cn=wancosprgs.cosprings, o=SGI, c=US +cn: wancosprgs.cosprings +ipNetworkNumber: 169.238.95.108 +objectclass: ipNetwork +objectclass: top + +dn: cn=wandal.dallas, o=SGI, c=US +cn: wandal.dallas +ipNetworkNumber: 169.238.95.104 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanden.denver, o=SGI, c=US +cn: wanden.denver +ipNetworkNumber: 169.238.95.100 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanhou.houst, o=SGI, c=US +cn: wanhou.houst +ipNetworkNumber: 169.238.95.96 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanslc.saltlake, o=SGI, c=US +cn: wanslc.saltlake +ipNetworkNumber: 169.238.95.92 +objectclass: ipNetwork +objectclass: top + +dn: cn=wantulsa.tulsa, o=SGI, c=US +cn: wantulsa.tulsa +ipNetworkNumber: 169.238.95.88 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanworth.ftworth, o=SGI, c=US +cn: wanworth.ftworth +ipNetworkNumber: 169.238.95.84 +objectclass: ipNetwork +objectclass: top + +dn: cn=cisco.chez, o=SGI, c=US +cn: cisco.chez +ipNetworkNumber: 169.238.127.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=router-ala-jwag.engr, o=SGI, c=US +cn: router-ala-jwag.engr +ipNetworkNumber: 169.238.127.4 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanalamos.losalamos, o=SGI, c=US +cn: wanalamos.losalamos +ipNetworkNumber: 169.238.127.8 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanalbq.albuquerque, o=SGI, c=US +cn: wanalbq.albuquerque +ipNetworkNumber: 169.238.127.12 +objectclass: ipNetwork +objectclass: top + +dn: cn=wandiego.sandiego, o=SGI, c=US +cn: wandiego.sandiego +ipNetworkNumber: 169.238.127.16 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanlos.losangeles, o=SGI, c=US +cn: wanlos.losangeles +ipNetworkNumber: 169.238.127.20 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanmtv.corp, o=SGI, c=US +cn: wanmtv.corp +ipNetworkNumber: 169.238.127.24 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanmtv2.corp, o=SGI, c=US +cn: wanmtv2.corp +ipNetworkNumber: 169.238.127.28 +objectclass: ipNetwork +objectclass: top + +dn: cn=wannew.newport, o=SGI, c=US +cn: wannew.newport +ipNetworkNumber: 169.238.127.32 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanphx.phoenix, o=SGI, c=US +cn: wanphx.phoenix +ipNetworkNumber: 169.238.127.36 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanport.oregon, o=SGI, c=US +cn: wanport.oregon +ipNetworkNumber: 169.238.127.40 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanram.sanramon, o=SGI, c=US +cn: wanram.sanramon +ipNetworkNumber: 169.238.127.44 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanriver.riverside, o=SGI, c=US +cn: wanriver.riverside +ipNetworkNumber: 169.238.127.48 +objectclass: ipNetwork +objectclass: top + +dn: cn=wansacto.sacramento, o=SGI, c=US +cn: wansacto.sacramento +ipNetworkNumber: 169.238.127.52 +objectclass: ipNetwork +objectclass: top + +dn: cn=wansea.seattle, o=SGI, c=US +cn: wansea.seattle +ipNetworkNumber: 169.238.127.56 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanspo.spokane, o=SGI, c=US +cn: wanspo.spokane +ipNetworkNumber: 169.238.127.60 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanstudio-sm.ssla, o=SGI, c=US +cn: wanstudio-sm.ssla +ipNetworkNumber: 169.238.127.64 +objectclass: ipNetwork +objectclass: top + +dn: cn=wantuc.tucson, o=SGI, c=US +cn: wantuc.tucson +ipNetworkNumber: 169.238.127.68 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanvegas.lasvegas, o=SGI, c=US +cn: wanvegas.lasvegas +ipNetworkNumber: 169.238.127.72 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanallp.dearborn, o=SGI, c=US +cn: wanallp.dearborn +ipNetworkNumber: 169.238.143.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=wancleve.cleveland, o=SGI, c=US +cn: wancleve.cleveland +ipNetworkNumber: 169.238.143.4 +objectclass: ipNetwork +objectclass: top + +dn: cn=wancol.columbus, o=SGI, c=US +cn: wancol.columbus +ipNetworkNumber: 169.238.143.8 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanday.dayton, o=SGI, c=US +cn: wanday.dayton +ipNetworkNumber: 169.238.143.12 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanfarm.detroit, o=SGI, c=US +cn: wanfarm.detroit +ipNetworkNumber: 169.238.143.16 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanindy.indianapolis, o=SGI, c=US +cn: wanindy.indianapolis +ipNetworkNumber: 169.238.143.20 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanpit.pittsburgh, o=SGI, c=US +cn: wanpit.pittsburgh +ipNetworkNumber: 169.238.143.24 +objectclass: ipNetwork +objectclass: top + +dn: cn=wantroy.troy, o=SGI, c=US +cn: wantroy.troy +ipNetworkNumber: 169.238.143.28 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanatl.atlanta, o=SGI, c=US +cn: wanatl.atlanta +ipNetworkNumber: 169.238.223.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanbirm.birmingham, o=SGI, c=US +cn: wanbirm.birmingham +ipNetworkNumber: 169.238.223.4 +objectclass: ipNetwork +objectclass: top + +dn: cn=wancharl.charlotte, o=SGI, c=US +cn: wancharl.charlotte +ipNetworkNumber: 169.238.223.8 +objectclass: ipNetwork +objectclass: top + +dn: cn=wancon.conyers, o=SGI, c=US +cn: wancon.conyers +ipNetworkNumber: 169.238.223.12 +objectclass: ipNetwork +objectclass: top + +dn: cn=wandur.triangle, o=SGI, c=US +cn: wandur.triangle +ipNetworkNumber: 169.238.223.16 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanhunt.huntsville, o=SGI, c=US +cn: wanhunt.huntsville +ipNetworkNumber: 169.238.223.20 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanjack.jackson, o=SGI, c=US +cn: wanjack.jackson +ipNetworkNumber: 169.238.223.24 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanknox.knoxville, o=SGI, c=US +cn: wanknox.knoxville +ipNetworkNumber: 169.238.223.28 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanlaud.lauderdale, o=SGI, c=US +cn: wanlaud.lauderdale +ipNetworkNumber: 169.238.223.32 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanmco.orlando, o=SGI, c=US +cn: wanmco.orlando +ipNetworkNumber: 169.238.223.36 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanmem.memphis, o=SGI, c=US +cn: wanmem.memphis +ipNetworkNumber: 169.238.223.40 +objectclass: ipNetwork +objectclass: top + +dn: cn=wannash.nashville, o=SGI, c=US +cn: wannash.nashville +ipNetworkNumber: 169.238.223.44 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanpns.pensacola, o=SGI, c=US +cn: wanpns.pensacola +ipNetworkNumber: 169.238.223.48 +objectclass: ipNetwork +objectclass: top + +dn: cn=wantamp.tampa, o=SGI, c=US +cn: wantamp.tampa +ipNetworkNumber: 169.238.223.52 +objectclass: ipNetwork +objectclass: top + +dn: cn=wancal.calgary, o=SGI, c=US +cn: wancal.calgary +ipNetworkNumber: 169.238.229.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanmtl.montreal, o=SGI, c=US +cn: wanmtl.montreal +ipNetworkNumber: 169.238.229.4 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanott.ottawa, o=SGI, c=US +cn: wanott.ottawa +ipNetworkNumber: 169.238.229.8 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanvan.vancouver, o=SGI, c=US +cn: wanvan.vancouver +ipNetworkNumber: 169.238.229.12 +objectclass: ipNetwork +objectclass: top + +dn: cn=wancedar.cedar, o=SGI, c=US +cn: wancedar.cedar +ipNetworkNumber: 169.238.239.0 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanchi.chicago, o=SGI, c=US +cn: wanchi.chicago +ipNetworkNumber: 169.238.239.4 +objectclass: ipNetwork +objectclass: top + +dn: cn=wankansas.kansas, o=SGI, c=US +cn: wankansas.kansas +ipNetworkNumber: 169.238.239.8 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanmilw.milwaukee, o=SGI, c=US +cn: wanmilw.milwaukee +ipNetworkNumber: 169.238.239.12 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanminn.minneapolis, o=SGI, c=US +cn: wanminn.minneapolis +ipNetworkNumber: 169.238.239.16 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanstl.stlouis, o=SGI, c=US +cn: wanstl.stlouis +ipNetworkNumber: 169.238.239.20 +objectclass: ipNetwork +objectclass: top + +dn: cn=wanurb.urbana, o=SGI, c=US +cn: wanurb.urbana +ipNetworkNumber: 169.238.239.24 +objectclass: ipNetwork +objectclass: top + +dn: uid=root, o=SGI, c=US +uid: root +userPassword: {crypt}xZuUdcHRxN1cc +uidNumber: 0 +gidNumber: 0 +gecos: Super-User +homeDirectory: / +loginShell: /usr/bin/tcsh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=sysadm, o=SGI, c=US +uid: sysadm +userPassword: * +uidNumber: 0 +gidNumber: 0 +gecos: System V Administration +homeDirectory: /usr/admin +loginShell: /bin/sh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=cmwlogin, o=SGI, c=US +uid: cmwlogin +userPassword: * +uidNumber: 0 +gidNumber: 994 +gecos: CMW Login UserID +homeDirectory: /usr/CMW +loginShell: /sbin/csh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=diag, o=SGI, c=US +uid: diag +userPassword: * +uidNumber: 0 +gidNumber: 996 +gecos: Hardware Diagnostics +homeDirectory: /usr/diags +loginShell: /bin/csh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=daemon, o=SGI, c=US +uid: daemon +userPassword: * +uidNumber: 1 +gidNumber: 1 +gecos: daemons +homeDirectory: / +loginShell: /dev/null +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=bin, o=SGI, c=US +uid: bin +userPassword: * +uidNumber: 2 +gidNumber: 2 +gecos: System Tools Owner +homeDirectory: /bin +loginShell: /dev/null +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=uucp, o=SGI, c=US +uid: uucp +userPassword: * +uidNumber: 3 +gidNumber: 5 +gecos: UUCP Owner +homeDirectory: /usr/lib/uucp +loginShell: /bin/csh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=sys, o=SGI, c=US +uid: sys +userPassword: * +uidNumber: 4 +gidNumber: 0 +gecos: System Activity Owner +homeDirectory: /var/adm +loginShell: /bin/sh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=adm, o=SGI, c=US +uid: adm +userPassword: * +uidNumber: 5 +gidNumber: 3 +gecos: Accounting Files Owner +homeDirectory: /var/adm +loginShell: /bin/sh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=lp, o=SGI, c=US +uid: lp +userPassword: +uidNumber: 9 +gidNumber: 9 +gecos: Print Spooler Owner +homeDirectory: /var/spool/lp +loginShell: /bin/sh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=nuucp, o=SGI, c=US +uid: nuucp +userPassword: +uidNumber: 10 +gidNumber: 10 +gecos: Remote UUCP User +homeDirectory: /var/spool/uucppublic +loginShell: /usr/lib/uucp/uucico +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=auditor, o=SGI, c=US +uid: auditor +userPassword: * +uidNumber: 11 +gidNumber: 0 +gecos: Audit Activity Owner +homeDirectory: /auditor +loginShell: /bin/sh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=dbadmin, o=SGI, c=US +uid: dbadmin +userPassword: * +uidNumber: 12 +gidNumber: 0 +gecos: Security Database Owner +homeDirectory: /dbadmin +loginShell: /bin/sh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=sgiweb, o=SGI, c=US +uid: sgiweb +userPassword: * +uidNumber: 13 +gidNumber: 60001 +gecos: SGI Web Applications +homeDirectory: /var/www/htdocs +loginShell: /bin/csh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=rfindd, o=SGI, c=US +uid: rfindd +userPassword: * +uidNumber: 66 +gidNumber: 1 +gecos: Rfind Daemon and Fsdump +homeDirectory: /var/rfindd +loginShell: /bin/sh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=EZsetup, o=SGI, c=US +uid: EZsetup +userPassword: +uidNumber: 992 +gidNumber: 998 +gecos: System Setup +homeDirectory: /var/sysadmdesktop/EZsetup +loginShell: /bin/csh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=demos, o=SGI, c=US +uid: demos +userPassword: +uidNumber: 993 +gidNumber: 997 +gecos: Demonstration User +homeDirectory: /usr/demos +loginShell: /bin/csh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=OutOfBox, o=SGI, c=US +uid: OutOfBox +userPassword: +uidNumber: 995 +gidNumber: 997 +gecos: Out of Box Experience +homeDirectory: /usr/people/OutOfBox +loginShell: /bin/csh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=guest, o=SGI, c=US +uid: guest +userPassword: +uidNumber: 998 +gidNumber: 998 +gecos: Guest Account +homeDirectory: /usr/people/guest +loginShell: /bin/csh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=4Dgifts, o=SGI, c=US +uid: 4Dgifts +userPassword: * +uidNumber: 999 +gidNumber: 998 +gecos: 4Dgifts Account +homeDirectory: /usr/people/4Dgifts +loginShell: /bin/csh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=nobody, o=SGI, c=US +uid: nobody +userPassword: * +uidNumber: 60001 +gidNumber: 60001 +gecos: SVR4 nobody uid +homeDirectory: /dev/null +loginShell: /dev/null +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=noaccess, o=SGI, c=US +uid: noaccess +userPassword: * +uidNumber: 60002 +gidNumber: 60002 +gecos: uid no access +homeDirectory: /dev/null +loginShell: /dev/null +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=nobody, o=SGI, c=US +uid: nobody +userPassword: * +uidNumber: 60001 +gidNumber: 60001 +gecos: original nobody uid +homeDirectory: /dev/null +loginShell: /dev/null +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=gomez, o=SGI, c=US +uid: gomez +userPassword: fRJsjYGR3q7TE +uidNumber: 37425 +gidNumber: 10 +gecos: Gomez +homeDirectory: /usr/people/gomez +loginShell: /usr/bin/tcsh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: uid=jcgomez, o=SGI, c=US +uid: jcgomez +userPassword: +uidNumber: 14427 +gidNumber: 20 +gecos: Juan Carlos Gomez +homeDirectory: /home/people/jcgomez +loginShell: /bin/tcsh +objectclass: posixAccount +objectclass: account +objectclass: top + +dn: cn=ip, o=SGI, c=US +cn: ip +cn: IP +ipProtocolNumber: 0 +objectclass: ipProtocol +objectclass: top + +dn: cn=icmp, o=SGI, c=US +cn: icmp +cn: ICMP +ipProtocolNumber: 1 +objectclass: ipProtocol +objectclass: top + +dn: cn=igmp, o=SGI, c=US +cn: igmp +cn: IGMP +ipProtocolNumber: 2 +objectclass: ipProtocol +objectclass: top + +dn: cn=ggp, o=SGI, c=US +cn: ggp +cn: GGP +ipProtocolNumber: 3 +objectclass: ipProtocol +objectclass: top + +dn: cn=tcp, o=SGI, c=US +cn: tcp +cn: TCP +ipProtocolNumber: 6 +objectclass: ipProtocol +objectclass: top + +dn: cn=egp, o=SGI, c=US +cn: egp +cn: EGP +ipProtocolNumber: 8 +objectclass: ipProtocol +objectclass: top + +dn: cn=pup, o=SGI, c=US +cn: pup +cn: PUP +ipProtocolNumber: 12 +objectclass: ipProtocol +objectclass: top + +dn: cn=udp, o=SGI, c=US +cn: udp +cn: UDP +ipProtocolNumber: 17 +objectclass: ipProtocol +objectclass: top + +dn: cn=hmp, o=SGI, c=US +cn: hmp +cn: HMP +ipProtocolNumber: 20 +objectclass: ipProtocol +objectclass: top + +dn: cn=xns-idp, o=SGI, c=US +cn: xns-idp +cn: XNS-IDP +ipProtocolNumber: 22 +objectclass: ipProtocol +objectclass: top + +dn: cn=rdp, o=SGI, c=US +cn: rdp +cn: RDP +ipProtocolNumber: 27 +objectclass: ipProtocol +objectclass: top + +dn: cn=iso-tp4, o=SGI, c=US +cn: iso-tp4 +cn: ISO-TP4 +ipProtocolNumber: 29 +objectclass: ipProtocol +objectclass: top + +dn: cn=ipv6, o=SGI, c=US +cn: ipv6 +cn: IPV6 +ipProtocolNumber: 41 +objectclass: ipProtocol +objectclass: top + +dn: cn=rsvp, o=SGI, c=US +cn: rsvp +cn: RSVP +ipProtocolNumber: 46 +objectclass: ipProtocol +objectclass: top + +dn: cn=icmpv6, o=SGI, c=US +cn: icmpv6 +cn: ICMPV6 +ipProtocolNumber: 58 +objectclass: ipProtocol +objectclass: top + +dn: cn=portmapper, o=SGI, c=US +cn: portmapper +cn: portmap +cn: sunrpc +oncRpcNumber: 100000 +objectclass: oncRpc +objectclass: top + +dn: cn=rstatd, o=SGI, c=US +cn: rstatd +cn: rstat +cn: rup +cn: perfmeter +oncRpcNumber: 100001 +objectclass: oncRpc +objectclass: top + +dn: cn=rusersd, o=SGI, c=US +cn: rusersd +cn: rusers +oncRpcNumber: 100002 +objectclass: oncRpc +objectclass: top + +dn: cn=nfs, o=SGI, c=US +cn: nfs +cn: nfsprog +oncRpcNumber: 100003 +objectclass: oncRpc +objectclass: top + +dn: cn=ypserv, o=SGI, c=US +cn: ypserv +cn: ypprog +oncRpcNumber: 100004 +objectclass: oncRpc +objectclass: top + +dn: cn=mountd, o=SGI, c=US +cn: mountd +cn: mount +cn: showmount +oncRpcNumber: 100005 +objectclass: oncRpc +objectclass: top + +dn: cn=ypbind, o=SGI, c=US +cn: ypbind +oncRpcNumber: 100007 +objectclass: oncRpc +objectclass: top + +dn: cn=walld, o=SGI, c=US +cn: walld +cn: rwall +cn: shutdown +oncRpcNumber: 100008 +objectclass: oncRpc +objectclass: top + +dn: cn=yppasswdd, o=SGI, c=US +cn: yppasswdd +cn: yppasswd +oncRpcNumber: 100009 +objectclass: oncRpc +objectclass: top + +dn: cn=etherstatd, o=SGI, c=US +cn: etherstatd +cn: etherstat +oncRpcNumber: 100010 +objectclass: oncRpc +objectclass: top + +dn: cn=rquotad, o=SGI, c=US +cn: rquotad +cn: rquotaprog +cn: quota +cn: rquota +oncRpcNumber: 100011 +objectclass: oncRpc +objectclass: top + +dn: cn=sprayd, o=SGI, c=US +cn: sprayd +cn: spray +oncRpcNumber: 100012 +objectclass: oncRpc +objectclass: top + +dn: cn=3270_mapper, o=SGI, c=US +cn: 3270_mapper +oncRpcNumber: 100013 +objectclass: oncRpc +objectclass: top + +dn: cn=rje_mapper, o=SGI, c=US +cn: rje_mapper +oncRpcNumber: 100014 +objectclass: oncRpc +objectclass: top + +dn: cn=selection_svc, o=SGI, c=US +cn: selection_svc +cn: selnsvc +oncRpcNumber: 100015 +objectclass: oncRpc +objectclass: top + +dn: cn=database_svc, o=SGI, c=US +cn: database_svc +oncRpcNumber: 100016 +objectclass: oncRpc +objectclass: top + +dn: cn=rexd, o=SGI, c=US +cn: rexd +cn: rex +oncRpcNumber: 100017 +objectclass: oncRpc +objectclass: top + +dn: cn=alis, o=SGI, c=US +cn: alis +oncRpcNumber: 100018 +objectclass: oncRpc +objectclass: top + +dn: cn=sched, o=SGI, c=US +cn: sched +oncRpcNumber: 100019 +objectclass: oncRpc +objectclass: top + +dn: cn=llockmgr, o=SGI, c=US +cn: llockmgr +oncRpcNumber: 100020 +objectclass: oncRpc +objectclass: top + +dn: cn=nlockmgr, o=SGI, c=US +cn: nlockmgr +oncRpcNumber: 100021 +objectclass: oncRpc +objectclass: top + +dn: cn=x25.inr, o=SGI, c=US +cn: x25.inr +oncRpcNumber: 100022 +objectclass: oncRpc +objectclass: top + +dn: cn=statmon, o=SGI, c=US +cn: statmon +oncRpcNumber: 100023 +objectclass: oncRpc +objectclass: top + +dn: cn=status, o=SGI, c=US +cn: status +oncRpcNumber: 100024 +objectclass: oncRpc +objectclass: top + +dn: cn=bootparam, o=SGI, c=US +cn: bootparam +oncRpcNumber: 100026 +objectclass: oncRpc +objectclass: top + +dn: cn=ypupdated, o=SGI, c=US +cn: ypupdated +cn: ypupdate +oncRpcNumber: 100028 +objectclass: oncRpc +objectclass: top + +dn: cn=keyserv, o=SGI, c=US +cn: keyserv +cn: keyserver +oncRpcNumber: 100029 +objectclass: oncRpc +objectclass: top + +dn: cn=ttdbserverd, o=SGI, c=US +cn: ttdbserverd +cn: ttdbserverd +oncRpcNumber: 100083 +objectclass: oncRpc +objectclass: top + +dn: cn=autofsd, o=SGI, c=US +cn: autofsd +cn: autofsd +oncRpcNumber: 100099 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_snoopd, o=SGI, c=US +cn: sgi_snoopd +cn: snoopd +cn: snoop +oncRpcNumber: 391000 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_toolkitbus, o=SGI, c=US +cn: sgi_toolkitbus +oncRpcNumber: 391001 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_fam, o=SGI, c=US +cn: sgi_fam +oncRpcNumber: 391002 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_notepad, o=SGI, c=US +cn: sgi_notepad +cn: notepad +oncRpcNumber: 391003 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_mountd, o=SGI, c=US +cn: sgi_mountd +cn: mount +cn: showmount +oncRpcNumber: 391004 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_smtd, o=SGI, c=US +cn: sgi_smtd +cn: smtd +oncRpcNumber: 391005 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_pcsd, o=SGI, c=US +cn: sgi_pcsd +cn: pcsd +oncRpcNumber: 391006 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_nfs, o=SGI, c=US +cn: sgi_nfs +oncRpcNumber: 391007 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_rfind, o=SGI, c=US +cn: sgi_rfind +cn: rfind +oncRpcNumber: 391008 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_pod, o=SGI, c=US +cn: sgi_pod +cn: pod +oncRpcNumber: 391009 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_iphone, o=SGI, c=US +cn: sgi_iphone +oncRpcNumber: 391010 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_videod, o=SGI, c=US +cn: sgi_videod +oncRpcNumber: 391011 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_testcd, o=SGI, c=US +cn: sgi_testcd +cn: testcd +oncRpcNumber: 391012 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi.ha_hbeat, o=SGI, c=US +cn: sgi.ha_hbeat +cn: ha_hbeat +oncRpcNumber: 391013 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi.ha_nc, o=SGI, c=US +cn: sgi.ha_nc +cn: ha_nc +oncRpcNumber: 391014 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi.ha_appmon, o=SGI, c=US +cn: sgi.ha_appmon +cn: ha_appmon +oncRpcNumber: 391015 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_xfsmd, o=SGI, c=US +cn: sgi_xfsmd +oncRpcNumber: 391016 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_mediad, o=SGI, c=US +cn: sgi_mediad +cn: mediad +oncRpcNumber: 391017 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi.ha_orcl, o=SGI, c=US +cn: sgi.ha_orcl +cn: ha_orcl +oncRpcNumber: 391018 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi.ha_ifmx, o=SGI, c=US +cn: sgi.ha_ifmx +cn: ha_ifmx +oncRpcNumber: 391019 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi.ha_sybs, o=SGI, c=US +cn: sgi.ha_sybs +cn: ha_sybs +oncRpcNumber: 391020 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi.ha_ifa, o=SGI, c=US +cn: sgi.ha_ifa +cn: ha_ifa +oncRpcNumber: 391021 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391022 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391023 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391024 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391025 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391026 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391027 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391028 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391029 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391030 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391031 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391032 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391033 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391034 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391035 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391036 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391037 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391038 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391039 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391040 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391041 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391042 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391043 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391044 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391045 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391046 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391047 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391048 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391049 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391050 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391051 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391052 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391053 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391054 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391055 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391056 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391057 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391058 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391059 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391060 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391061 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391062 +objectclass: oncRpc +objectclass: top + +dn: cn=sgi_reserved, o=SGI, c=US +cn: sgi_reserved +oncRpcNumber: 391063 +objectclass: oncRpc +objectclass: top + +dn: cn=tcpmux, o=SGI, c=US +cn: tcpmux +ipServicePort: 1 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=echo, o=SGI, c=US +cn: echo +ipServicePort: 7 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=echo, o=SGI, c=US +cn: echo +ipServicePort: 7 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=discard, o=SGI, c=US +cn: discard +cn: sink +cn: null +ipServicePort: 9 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=discard, o=SGI, c=US +cn: discard +cn: sink +cn: null +ipServicePort: 9 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=systat, o=SGI, c=US +cn: systat +cn: users +ipServicePort: 11 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=daytime, o=SGI, c=US +cn: daytime +ipServicePort: 13 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=daytime, o=SGI, c=US +cn: daytime +ipServicePort: 13 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=netstat, o=SGI, c=US +cn: netstat +ipServicePort: 15 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=qotd, o=SGI, c=US +cn: qotd +cn: quote +ipServicePort: 17 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=chargen, o=SGI, c=US +cn: chargen +cn: ttytst +cn: source +ipServicePort: 19 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=chargen, o=SGI, c=US +cn: chargen +cn: ttytst +cn: source +ipServicePort: 19 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=ftp-data, o=SGI, c=US +cn: ftp-data +ipServicePort: 20 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=ftp, o=SGI, c=US +cn: ftp +ipServicePort: 21 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=telnet, o=SGI, c=US +cn: telnet +ipServicePort: 23 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=smtp, o=SGI, c=US +cn: smtp +cn: mail +ipServicePort: 25 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=time, o=SGI, c=US +cn: time +cn: timserver +ipServicePort: 37 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=time, o=SGI, c=US +cn: time +cn: timserver +ipServicePort: 37 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=rlp, o=SGI, c=US +cn: rlp +cn: resource +ipServicePort: 39 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=name, o=SGI, c=US +cn: name +ipServicePort: 42 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=whois, o=SGI, c=US +cn: whois +cn: nicname +ipServicePort: 43 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=domain, o=SGI, c=US +cn: domain +cn: nameserver +ipServicePort: 53 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=domain, o=SGI, c=US +cn: domain +cn: nameserver +ipServicePort: 53 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=mtp, o=SGI, c=US +cn: mtp +ipServicePort: 57 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=bootp, o=SGI, c=US +cn: bootp +cn: bootps +ipServicePort: 67 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=bootpc, o=SGI, c=US +cn: bootpc +ipServicePort: 68 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=tftp, o=SGI, c=US +cn: tftp +ipServicePort: 69 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=rje, o=SGI, c=US +cn: rje +cn: netrjs +ipServicePort: 77 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=finger, o=SGI, c=US +cn: finger +ipServicePort: 79 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=http, o=SGI, c=US +cn: http +ipServicePort: 80 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=link, o=SGI, c=US +cn: link +cn: ttylink +ipServicePort: 87 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=supdup, o=SGI, c=US +cn: supdup +ipServicePort: 95 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=hostnames, o=SGI, c=US +cn: hostnames +cn: hostname +ipServicePort: 101 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=iso-tsap, o=SGI, c=US +cn: iso-tsap +ipServicePort: 102 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=x400, o=SGI, c=US +cn: x400 +ipServicePort: 103 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=x400-snd, o=SGI, c=US +cn: x400-snd +ipServicePort: 104 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=csnet-ns, o=SGI, c=US +cn: csnet-ns +ipServicePort: 105 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=pop-2, o=SGI, c=US +cn: pop-2 +ipServicePort: 109 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=pop-3, o=SGI, c=US +cn: pop-3 +ipServicePort: 110 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=sunrpc, o=SGI, c=US +cn: sunrpc +cn: rpcbind +ipServicePort: 111 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=sunrpc, o=SGI, c=US +cn: sunrpc +cn: rpcbind +ipServicePort: 111 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=auth, o=SGI, c=US +cn: auth +cn: authentication +ipServicePort: 113 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=sftp, o=SGI, c=US +cn: sftp +ipServicePort: 115 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=uucp-path, o=SGI, c=US +cn: uucp-path +ipServicePort: 117 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=nntp, o=SGI, c=US +cn: nntp +cn: readnews +cn: untp +ipServicePort: 119 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=erpc, o=SGI, c=US +cn: erpc +ipServicePort: 121 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=ntp, o=SGI, c=US +cn: ntp +ipServicePort: 123 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=loc-srv, o=SGI, c=US +cn: loc-srv +ipServicePort: 135 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=loc-srv, o=SGI, c=US +cn: loc-srv +ipServicePort: 135 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=imap2, o=SGI, c=US +cn: imap2 +ipServicePort: 143 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=snmp, o=SGI, c=US +cn: snmp +ipServicePort: 161 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=snmp-trap, o=SGI, c=US +cn: snmp-trap +cn: snmptrap +ipServicePort: 162 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=xdmcp, o=SGI, c=US +cn: xdmcp +ipServicePort: 177 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=exec, o=SGI, c=US +cn: exec +ipServicePort: 512 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=biff, o=SGI, c=US +cn: biff +cn: comsat +ipServicePort: 512 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=login, o=SGI, c=US +cn: login +ipServicePort: 513 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=who, o=SGI, c=US +cn: who +cn: whod +ipServicePort: 513 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=shell, o=SGI, c=US +cn: shell +cn: cmd +ipServicePort: 514 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=syslog, o=SGI, c=US +cn: syslog +ipServicePort: 514 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=printer, o=SGI, c=US +cn: printer +cn: spooler +ipServicePort: 515 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=talk, o=SGI, c=US +cn: talk +ipServicePort: 517 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=ntalk, o=SGI, c=US +cn: ntalk +ipServicePort: 518 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=route, o=SGI, c=US +cn: route +cn: router +cn: routed +ipServicePort: 520 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=timed, o=SGI, c=US +cn: timed +cn: timeserver +ipServicePort: 525 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=tempo, o=SGI, c=US +cn: tempo +cn: newdate +ipServicePort: 526 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=courier, o=SGI, c=US +cn: courier +cn: rpc +ipServicePort: 530 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=conference, o=SGI, c=US +cn: conference +cn: chat +ipServicePort: 531 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=netnews, o=SGI, c=US +cn: netnews +cn: readnews +ipServicePort: 532 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=netwall, o=SGI, c=US +cn: netwall +ipServicePort: 533 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=uucp, o=SGI, c=US +cn: uucp +cn: uucpd +ipServicePort: 540 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=remotefs, o=SGI, c=US +cn: remotefs +cn: rfs_server +cn: rfs +ipServicePort: 556 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=ingreslock, o=SGI, c=US +cn: ingreslock +ipServicePort: 1524 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=albd, o=SGI, c=US +cn: albd +ipServicePort: 371 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=ta-rauth, o=SGI, c=US +cn: ta-rauth +cn: rauth +ipServicePort: 601 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=kerberos, o=SGI, c=US +cn: kerberos +cn: kdc +ipServicePort: 750 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=kerberos, o=SGI, c=US +cn: kerberos +cn: kdc +ipServicePort: 750 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=krbupdate, o=SGI, c=US +cn: krbupdate +cn: kreg +ipServicePort: 760 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=kpasswd, o=SGI, c=US +cn: kpasswd +cn: kpwd +ipServicePort: 761 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=klogin, o=SGI, c=US +cn: klogin +ipServicePort: 543 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=nfs, o=SGI, c=US +cn: nfs +cn: nfs +ipServicePort: 2049 +ipServiceProtocol: udp +objectclass: ipService +objectclass: top + +dn: cn=nfs, o=SGI, c=US +cn: nfs +cn: nfs +ipServicePort: 2049 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=eklogin, o=SGI, c=US +cn: eklogin +ipServicePort: 2105 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=kshell, o=SGI, c=US +cn: kshell +cn: krcmd +ipServicePort: 544 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=x-server, o=SGI, c=US +cn: x-server +ipServicePort: 6000 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=sgi-dgl, o=SGI, c=US +cn: sgi-dgl +ipServicePort: 5232 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=sgi-arrayd, o=SGI, c=US +cn: sgi-arrayd +ipServicePort: 5434 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=realaudio, o=SGI, c=US +cn: realaudio +cn: ra +ipServicePort: 7070 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=wn-http, o=SGI, c=US +cn: wn-http +ipServicePort: 8778 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top + +dn: cn=sgi_iphone, o=SGI, c=US +cn: sgi_iphone +ipServicePort: 32769 +ipServiceProtocol: tcp +objectclass: ipService +objectclass: top diff --git a/tests/data/passwd.ldif b/tests/data/passwd.ldif new file mode 100644 index 0000000..528957e --- /dev/null +++ b/tests/data/passwd.ldif @@ -0,0 +1,29 @@ +dn: dc=example,dc=com +objectclass: dcobject +dc: example +objectclass: organization +o: Example, Inc. + +dn: cn=md5,dc=example,dc=com +objectclass: person +cn: md5 +sn: md5 +userpassword:: e01ENX1YcjRpbE96UTRQQ09xM2FRMHFidWFRPT0= + +dn: cn=smd5,dc=example,dc=com +objectclass: person +cn: smd5 +sn: smd5 +userpassword: secret + +dn: cn=sha,dc=example,dc=com +objectclass: person +cn: sha +sn: sha +userpassword:: e1NIQX01ZW42RzZNZXpScm9UM1hLcWtkUE9tWS9CZlE9 + +dn: cn=ssha,dc=example,dc=com +objectclass: person +cn: ssha +sn: ssha +userpassword: secret diff --git a/tests/data/ppolicy.ldif b/tests/data/ppolicy.ldif new file mode 100644 index 0000000..fdd0c48 --- /dev/null +++ b/tests/data/ppolicy.ldif @@ -0,0 +1,68 @@ +dn: dc=example, dc=com +objectClass: top +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +dn: ou=People, dc=example, dc=com +objectClass: top +objectClass: organizationalUnit +ou: People + +dn: ou=Policies, dc=example, dc=com +objectClass: top +objectClass: organizationalUnit +ou: Policies + +dn: cn=Standard Policy, ou=Policies, dc=example, dc=com +objectClass: top +objectClass: device +objectClass: pwdPolicy +cn: Standard Policy +pwdAttribute: 2.5.4.35 +pwdLockoutDuration: 15 +pwdInHistory: 6 +pwdCheckQuality: 2 +pwdExpireWarning: 10 +pwdMaxAge: 30 +pwdMinLength: 5 +pwdGraceAuthnLimit: 3 +pwdAllowUserChange: TRUE +pwdMustChange: TRUE +pwdMaxFailure: 3 +pwdFailureCountInterval: 120 +pwdSafeModify: TRUE +pwdLockout: TRUE + +dn: uid=nd, ou=People, dc=example, dc=com +objectClass: top +objectClass: person +objectClass: inetOrgPerson +cn: Neil Dunbar +uid: nd +sn: Dunbar +givenName: Neil +userPassword: testpassword + +dn: uid=ndadmin, ou=People, dc=example, dc=com +objectClass: top +objectClass: person +objectClass: inetOrgPerson +cn: Neil Dunbar (Admin) +uid: ndadmin +sn: Dunbar +givenName: Neil +userPassword: testpw + +dn: uid=test, ou=People, dc=example, dc=com +objectClass: top +objectClass: person +objectClass: inetOrgPerson +cn: test test +uid: test +sn: Test +givenName: Test +userPassword: kfhgkjhfdgkfd +pwdPolicySubEntry: cn=No Policy, ou=Policies, dc=example, dc=com + diff --git a/tests/data/proxycache.out b/tests/data/proxycache.out new file mode 100644 index 0000000..d879fd8 --- /dev/null +++ b/tests/data/proxycache.out @@ -0,0 +1,258 @@ +# Query 1: filter:(sn=Jon) attrs:all (expect nothing) +# Query 2: filter:(|(cn=*Jon*)(sn=Jon*)) attrs:cn sn title uid +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +title: Mad Cow Researcher, UM Alumni Association + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +title: Senior Manager, Information Technology Division + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +title: System Administrator, Information Technology Division + +# Query 3: filter:(sn=Smith*) attrs:cn sn uid +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen + +# Query 4: filter:(sn=Doe*) attrs:cn sn title uid +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +title: Senior Manager, Information Technology Division + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +title: System Administrator, Information Technology Division + +# Query 5: filter:(uid=johnd) attrs:mail postaladdress telephonenumber cn uid +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +cn: John Doe +cn: Jonathon Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +mail: johnd@mailgw.example.com +telephoneNumber: +1 313 555 9394 + +# Query 6: filter:(mail=*@mail.alumni.example.com) attrs:cn sn title uid +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +title: Mad Cow Researcher, UM Alumni Association + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +title: Telemarketer, UM Alumni Association + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +title: Director, UM Alumni Association + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association + +# Query 7: filter:(mail=*) attrs:cn sn title uid +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +title: Director, Embedded Systems + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +title: Mad Cow Researcher, UM Alumni Association + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +title: Senior Manager, Information Technology Division + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +title: Telemarketer, UM Alumni Association + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +title: System Administrator, Information Technology Division + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +title: Director, UM Alumni Association + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association + +# Query 8: filter:(mail=*example.com) attrs:cn sn title uid +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems + +# Query 9: filter:(uid=b*) attrs:mail +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +mail: bjensen@mailgw.example.com + +# Query 10: filter:(|(cn=All Staff)(sn=All Staff)) attrs:sn cn title uid undefinedAttr +dn: cn=All Staff,ou=Groups,dc=example,dc=com +cn: All Staff + +# Query 11: filter:(|(cn=*Jones)(sn=Jones)) attrs:cn sn title uid +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +title: Mad Cow Researcher, UM Alumni Association + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +title: Senior Manager, Information Technology Division + +# Query 12: filter:(sn=Smith) attrs:cn sn title uid +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +title: Telemarketer, UM Alumni Association + +# Query 13: filter:(uid=bjorn) attrs:mail postaladdress telephonenumber cn uid +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +cn: Bjorn Jensen +cn: Biiff Jensen +uid: bjorn +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +telephoneNumber: +1 313 555 0355 + +# Query 14: filter:(mail=jaj@mail.alumni.example.com) attrs:cn sn title uid +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +title: Mad Cow Researcher, UM Alumni Association + +# Query 15: filter:(mail=*example.com) attrs:cn sn title uid +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems + +# Query 16: filter:(uid=b*) attrs:mail +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +mail: bjensen@mailgw.example.com + +# Query 17: filter:(|(cn=All Staff)(sn=All Staff)) attrs:sn cn title uid undefinedAttr +dn: cn=All Staff,ou=Groups,dc=example,dc=com +cn: All Staff + diff --git a/tests/data/referrals.ldif b/tests/data/referrals.ldif new file mode 100644 index 0000000..8824ae1 --- /dev/null +++ b/tests/data/referrals.ldif @@ -0,0 +1,29 @@ +dn: c=US +c: US +objectclass: country + +dn: o=ABC,c=US +o: ABC +ref: ldap://hostA/o=abc,c=us HostA +ref: ldap://hostB HostB +objectclass: referral +objectclass: extensibleObject + +dn: o=XYZ,c=US +o: XYZ +ref: ldap://hostC/o=xyz,c=us HostC +objectclass: referral +objectclass: extensibleObject + +dn: o=Example,c=US +o: Example +objectclass: organization + +dn: cn=Manager,o=Example,c=US +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userpassword:: c2VjcmV0 +objectclass: person diff --git a/tests/data/referrals.out b/tests/data/referrals.out new file mode 100644 index 0000000..fac5b74 --- /dev/null +++ b/tests/data/referrals.out @@ -0,0 +1,239 @@ +# extended LDIF +# +# LDAPv3 +# base <c=US> with scope sub +# filter: (objectClass=referral) +# requesting: * ref +# with manageDSAit critical control +# + +# ABC, US +dn: o=ABC,c=US +o: ABC +ref: ldap://hostA/o=abc,c=us HostA +ref: ldap://hostB HostB +objectClass: referral +objectClass: extensibleObject + +# XYZ, US +dn: o=XYZ,c=US +o: XYZ +ref: ldap://hostC/o=xyz,c=us HostC +objectClass: referral +objectClass: extensibleObject + +# search result +search: 2 +result: 0 Success + +# numResponses: 3 +# numEntries: 2 +# extended LDIF +# +# LDAPv3 +# base <o=abc,c=US> with scope sub +# filter: (objectClass=referral) +# requesting: * ref +# with manageDSAit critical control +# + +# ABC, US +dn: o=ABC,c=US +o: ABC +ref: ldap://hostA/o=abc,c=us HostA +ref: ldap://hostB HostB +objectClass: referral +objectClass: extensibleObject + +# search result +search: 2 +result: 0 Success + +# numResponses: 2 +# numEntries: 1 +# extended LDIF +# +# LDAPv3 +# base <uid=xxx,o=abc,c=US> with scope sub +# filter: (objectClass=referral) +# requesting: * ref +# with manageDSAit critical control +# + +# search result +search: 2 +result: 10 Referral +matchedDN: o=ABC,c=US +ref: ldap://hostA/uid=xxx,o=abc,c=us??sub +ref: ldap://hostB/uid=xxx,o=abc,c=US??sub + +# numResponses: 1 +# extended LDIF +# +# LDAPv3 +# base <c=US> with scope base +# filter: (objectclass=*) +# requesting: 1.1 +# + +# US +dn: c=US + +# search result +search: 2 +result: 0 Success + +# numResponses: 2 +# numEntries: 1 +# extended LDIF +# +# LDAPv3 +# base <c=US> with scope one +# filter: (objectclass=*) +# requesting: 1.1 +# + +# Example, Inc., US +dn: o=Example,c=US + +# search reference +ref: ldap://hostA/o=abc,c=us??base +ref: ldap://hostB/o=ABC,c=US??base + +# search reference +ref: ldap://hostC/o=xyz,c=us??base + +# search result +search: 2 +result: 0 Success + +# numResponses: 4 +# numEntries: 1 +# numReferences: 2 +# extended LDIF +# +# LDAPv3 +# base <c=US> with scope sub +# filter: (objectclass=*) +# requesting: 1.1 +# + +# Example, Inc., US +dn: o=Example,c=US + +# Manager, Example, Inc., US +dn: cn=Manager,o=Example,c=US + +# US +dn: c=US + +# search reference +ref: ldap://hostA/o=abc,c=us??sub +ref: ldap://hostB/o=ABC,c=US??sub + +# search reference +ref: ldap://hostC/o=xyz,c=us??sub + +# search result +search: 2 +result: 0 Success + +# numResponses: 6 +# numEntries: 3 +# numReferences: 2 +# extended LDIF +# +# LDAPv3 +# base <o=abc,c=US> with scope base +# filter: (objectclass=*) +# requesting: 1.1 +# + +# search result +search: 2 +result: 10 Referral +matchedDN: o=ABC,c=US +ref: ldap://hostA/o=abc,c=us??base +ref: ldap://hostB/o=abc,c=US??base + +# numResponses: 1 +# extended LDIF +# +# LDAPv3 +# base <o=abc,c=US> with scope one +# filter: (objectclass=*) +# requesting: 1.1 +# + +# search result +search: 2 +result: 10 Referral +matchedDN: o=ABC,c=US +ref: ldap://hostA/o=abc,c=us??one +ref: ldap://hostB/o=abc,c=US??one + +# numResponses: 1 +# extended LDIF +# +# LDAPv3 +# base <o=abc,c=US> with scope sub +# filter: (objectclass=*) +# requesting: 1.1 +# + +# search result +search: 2 +result: 10 Referral +matchedDN: o=ABC,c=US +ref: ldap://hostA/o=abc,c=us??sub +ref: ldap://hostB/o=abc,c=US??sub + +# numResponses: 1 +# extended LDIF +# +# LDAPv3 +# base <uid=xxx,o=abc,c=US> with scope base +# filter: (objectclass=*) +# requesting: 1.1 +# + +# search result +search: 2 +result: 10 Referral +matchedDN: o=ABC,c=US +ref: ldap://hostA/uid=xxx,o=abc,c=us??base +ref: ldap://hostB/uid=xxx,o=abc,c=US??base + +# numResponses: 1 +# extended LDIF +# +# LDAPv3 +# base <uid=xxx,o=abc,c=US> with scope one +# filter: (objectclass=*) +# requesting: 1.1 +# + +# search result +search: 2 +result: 10 Referral +matchedDN: o=ABC,c=US +ref: ldap://hostA/uid=xxx,o=abc,c=us??one +ref: ldap://hostB/uid=xxx,o=abc,c=US??one + +# numResponses: 1 +# extended LDIF +# +# LDAPv3 +# base <uid=xxx,o=abc,c=US> with scope sub +# filter: (objectclass=*) +# requesting: 1.1 +# + +# search result +search: 2 +result: 10 Referral +matchedDN: o=ABC,c=US +ref: ldap://hostA/uid=xxx,o=abc,c=us??sub +ref: ldap://hostB/uid=xxx,o=abc,c=US??sub + +# numResponses: 1 diff --git a/tests/data/regressions/README b/tests/data/regressions/README new file mode 100644 index 0000000..f1a8078 --- /dev/null +++ b/tests/data/regressions/README @@ -0,0 +1,20 @@ +This directory contains test related to regression tracking that require +a specific setup and a complete test. Each regression test must be +contained in a test directory whose name is "its<number>", where <number> +is the ITS number, and it must be entirely executed by a script, contained +in that directory and with the same name of the directory. It can exploit +all the helpers provided for common tests (variables in scripts/defines.sh, +data files in data/, ...), but it should simultaneously be as self contained +and as general as possible. Warning: occasionally, data files and +shell variables may change, so limit their use to real needs. + +For example, if an issue only appears with a certain database type, the +test itself should only run when invoked for that database type; +otherwise, if the issue appears whatever backend is used, the test should +be parametric, so that it is run with the backend selected at run-time +via the "-b" switch of the "run" script. + +Regression tests are prepared on a voluntary basis, so don't expect all +bugs to have a test any soon. When the issue reporter provides a simple, +yet complete means to reproduce the bug she's reporting, this may speed up +the process. In case, only put neutral data in bug exploitation reports. diff --git a/tests/data/regressions/its4184/README b/tests/data/regressions/its4184/README new file mode 100644 index 0000000..82ced51 --- /dev/null +++ b/tests/data/regressions/its4184/README @@ -0,0 +1 @@ +ITS#4184: fixed in 2.3.14 diff --git a/tests/data/regressions/its4184/adds.ldif b/tests/data/regressions/its4184/adds.ldif new file mode 100644 index 0000000..716e341 --- /dev/null +++ b/tests/data/regressions/its4184/adds.ldif @@ -0,0 +1,83 @@ +dn: dc=example,dc=com +objectClass: domain +dc: example + +dn: cn=Manager,dc=example,dc=com +objectClass: organizationalRole +cn: Manager +description: Directory Manager + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: People + +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: uid=user1,ou=people,dc=example,dc=com +objectClass: person +objectClass: posixAccount +cn: User 1 +sn: User 1 +uid: user1 +uidNumber: 500 +userPassword: abc +homeDirectory: /home/user1 +gidNumber: 10 +gecos: User 1 + +dn: cn=A Group,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: A Group +member: uid=user1,ou=people,dc=example,dc=com + +dn: cn=Another Group,ou=Groups,dc=example,dc=com +cn: Another Group +objectClass: groupOfNames +member: uid=user1,ou=People,dc=example,dc=com +member: uid=user2,ou=People,dc=example,dc=com + +dn: uid=user3,ou=people,dc=example,dc=com +objectClass: person +objectClass: posixAccount +uid: user3 +uidNumber: 5387 +homeDirectory: /home/user3 +loginShell: /bin/false +gecos: Slave +gidNumber: 100 +userPassword: abc +cn: Slave +sn: Slave + +dn: uid=user2,ou=people,dc=example,dc=com +objectClass: person +objectClass: posixAccount +cn: User 2 +sn: User 2 +uid: user2 +uidNumber: 23071 +gecos: User 2 +loginShell: /bin/false +homeDirectory: /home/user2 +gidNumber: 100 +userPassword: abc + +dn: ou=Special,dc=example,dc=com +objectClass: organizationalUnit +ou: Special + +dn: uid=special1,ou=Special,dc=example,dc=com +objectClass: person +objectClass: posixAccount +cn: Special 1 +sn: Special 1 +uid: special1 +uidNumber: 6319 +homeDirectory: /home/special1 +gecos: Special1 +loginShell: /bin/false +userPassword: abc +gidNumber: 100 + diff --git a/tests/data/regressions/its4184/its4184 b/tests/data/regressions/its4184/its4184 new file mode 100755 index 0000000..a206495 --- /dev/null +++ b/tests/data/regressions/its4184/its4184 @@ -0,0 +1,94 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test "$BACKEND" != "bdb" && test "$BACKEND" != "hdb" ; then + echo "Warning: this test is known to affect bdb and hdb, although it may impact other backends as well." +fi + +mkdir -p $DBDIR1A $DBDIR2A + +ITS=4184 +ITSDIR=$DATADIR/regressions/its$ITS +USER="uid=user1,ou=People,dc=example,dc=com" +PASS="abc" + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd.conf > $CONF1 +$SLAPADD -f $CONF1 -l $ITSDIR/adds.ldif +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -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 + +echo "" +echo " This test applies a round of updates __after__ grabbing a lock" +echo " that, before the fix, was not correctly released; in case " +echo " of failure, the second round of updates will deadlock." +echo " This issue was fixed in OpenLDAP 2.3.14." +echo "" + +for S in 1 2 ; do + FILE="${ITSDIR}/mods.ldif" + echo "${S}) Applying `basename ${FILE}`..." + $LDAPMODIFY -v -D "$USER" -w $PASS -h $LOCALHOST -p $PORT1 \ + -f "${FILE}" > $TESTOUT 2>&1 + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + sleep 1 +done + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/data/regressions/its4184/mods.ldif b/tests/data/regressions/its4184/mods.ldif new file mode 100644 index 0000000..93fe76e --- /dev/null +++ b/tests/data/regressions/its4184/mods.ldif @@ -0,0 +1,15 @@ +dn: cn=Another Group,ou=Groups,dc=example,dc=com +changetype: modify +add: member +member: uid=user3,ou=People,dc=example,dc=com + +dn: cn=Another Group,ou=Groups,dc=example,dc=com +changetype: modify +delete: member +member: uid=user3,ou=people,dc=example,dc=com + +dn: uid=special1,ou=Special,dc=example,dc=com +changetype: modify +replace: sn +sn: NewName + diff --git a/tests/data/regressions/its4184/slapd.conf b/tests/data/regressions/its4184/slapd.conf new file mode 100644 index 0000000..ed23ef8 --- /dev/null +++ b/tests/data/regressions/its4184/slapd.conf @@ -0,0 +1,59 @@ +# $OpenLDAP$ +# +# ITS 4184 slapd.conf + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/nis.schema +include @SCHEMADIR@/misc.schema + +pidfile @TESTDIR@/slapd.pid +argsfile @TESTDIR@/slapd.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la + +loglevel 0 + +# ACL issue: with this ACL doesn't show up +#access to * by * write + +# database access control definitions +access to attrs=userPassword + by self write + by group="cn=A Group,ou=Groups,dc=example,dc=com" write + by group="cn=Another Group,ou=Groups,dc=example,dc=com" write + by anonymous auth + +access to * + by self write + by group="cn=Another Group,ou=Groups,dc=example,dc=com" write + by * read + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "ou=Special,dc=example,dc=com" +subordinate +rootdn "cn=Manager,dc=example,dc=com" +#~null~#directory @TESTDIR@/db.2.a + +# Indices to maintain +#indexdb#index default pres,eq +#indexdb#index objectClass eq +#indexdb#index sn pres,eq,sub + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#null#bind on +#~null~#directory @TESTDIR@/db.1.a + +# Indices to maintain +#indexdb#index default pres,eq +#indexdb#index objectClass eq +#indexdb#index sn pres,eq,sub + diff --git a/tests/data/regressions/its4326/its4326 b/tests/data/regressions/its4326/its4326 new file mode 100755 index 0000000..0e3de4e --- /dev/null +++ b/tests/data/regressions/its4326/its4326 @@ -0,0 +1,224 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $BACKLDAP = "ldapno" ; then + echo "LDAP backend not available, test skipped" + exit 0 +fi + +if test $BACKEND = "ldap" ; then + echo "LDAP backend not valid, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 + +ITS=4326 +ITSDIR=$DATADIR/regressions/its$ITS + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1 +$SLAPADD -f $CONF1 -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +SERVERPID=$! +if test $WAIT != 0 ; then + echo SERVERPID $SERVERPID + read foo +fi +KILLPIDS="$SERVERPID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Starting proxy slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd.conf > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +PROXYPID=$! +if test $WAIT != 0 ; then + echo PROXYPID $PROXYPID + read foo +fi +KILLPIDS="$KILLPIDS $PROXYPID" + +sleep 1 + +echo "Using ldapsearch to check that proxy slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + '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 + +echo "Searching the proxy..." +$LDAPSEARCH -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Re-searching the proxy..." +$LDAPSEARCH -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +SLEEP=2 +echo "Stopping the server and sleeping $SLEEP seconds..." +kill -HUP "$SERVERPID" +wait $SERVERPID +sleep $SLEEP +KILLPIDS="$PROXYPID" + +echo "Searching the proxy..." +$LDAPSEARCH -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > /dev/null 2>&1 +RC=$? +case $RC in +0) + echo "ldapsearch should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +52) + echo "ldapsearch failed ($RC)" + ;; +*) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Re-searching the proxy..." +$LDAPSEARCH -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > /dev/null 2>&1 +RC=$? +case $RC in +0) + echo "ldapsearch should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +52) + echo "ldapsearch failed ($RC)" + ;; +*) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Restarting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +SERVERPID=$! +if test $WAIT != 0 ; then + echo SERVERPID $SERVERPID + read foo +fi +KILLPIDS="$SERVERPID $PROXYPID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Searching the proxy..." +$LDAPSEARCH -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Re-searching the proxy..." +$LDAPSEARCH -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > /dev/null 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 + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/data/regressions/its4326/slapd.conf b/tests/data/regressions/its4326/slapd.conf new file mode 100644 index 0000000..99a47af --- /dev/null +++ b/tests/data/regressions/its4326/slapd.conf @@ -0,0 +1,45 @@ +# proxy slapd config -- for regression of back-ldap server unavailable issue +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @DATADIR@/test.schema + +# +pidfile @TESTDIR@/slapd.2.pid +argsfile @TESTDIR@/slapd.2.args + +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database ldap +suffix "dc=example,dc=com" +uri @URI1@ +idassert-bind bindmethod=simple + binddn="cn=manager,dc=example,dc=com" + credentials="secret" + mode=self + flags=non-prescriptive + +#monitor#database monitor diff --git a/tests/data/regressions/its4336/its4336 b/tests/data/regressions/its4336/its4336 new file mode 100755 index 0000000..fd07cd5 --- /dev/null +++ b/tests/data/regressions/its4336/its4336 @@ -0,0 +1,139 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $BACKLDAP = "ldapno" ; then + echo "LDAP backend not available, test skipped" + exit 0 +fi + +if test $RETCODE = retcodeno; then + echo "Retcode overlay not available, test skipped" + exit 0 +fi + +if test "$BACKEND" = "ldap"; then + echo "LDAP backend not valid, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 + +ITS=4336 +ITSDIR=$DATADIR/regressions/its$ITS + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $RETCODECONF > $CONF1 +$SLAPADD -f $CONF1 -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +SERVERPID=$! +if test $WAIT != 0 ; then + echo SERVERPID $SERVERPID + read foo +fi +KILLPIDS="$SERVERPID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Starting chain slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd.conf > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +PROXYPID=$! +if test $WAIT != 0 ; then + echo PROXYPID $PROXYPID + read foo +fi +KILLPIDS="$KILLPIDS $PROXYPID" + +sleep 1 + +echo "Using ldapsearch to check that chain slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + '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 + +echo "Searching the chain..." +echo " + Search an entry that causes a successful result to be returned + with a 2 second delay; since size/time limits were erroneously + set to 0/0, which internally means 0 instead of unlimited, the + underlying back-ldap search timed out. +" +$LDAPSEARCH -b "cn=success w/ delay,ou=RetCodes,$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Re-searching the chain..." +$LDAPSEARCH -b "cn=success w/ delay,ou=RetCodes,$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > /dev/null 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 + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/data/regressions/its4336/slapd.conf b/tests/data/regressions/its4336/slapd.conf new file mode 100644 index 0000000..3f12f5d --- /dev/null +++ b/tests/data/regressions/its4336/slapd.conf @@ -0,0 +1,37 @@ +# stand-alone slapd config -- for testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @DATADIR@/test.schema + +# +pidfile @TESTDIR@/slapd.2.pid +argsfile @TESTDIR@/slapd.2.args + +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la + +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +# no database; only a referral to another DSA, with anonymous chaining +referral "@URI1@" +overlay chain + +#monitor#database monitor diff --git a/tests/data/regressions/its4337/config.out b/tests/data/regressions/its4337/config.out new file mode 100644 index 0000000..bdcbbe5 --- /dev/null +++ b/tests/data/regressions/its4337/config.out @@ -0,0 +1,129 @@ +# Searching databases __before__ append... +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAddContentAcl: FALSE +olcLastMod: TRUE +olcMaxDerefDepth: 0 +olcReadOnly: FALSE +olcSchemaDN: cn=Subschema +olcSyncUseSubentry: FALSE +olcMonitoring: FALSE + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcAccess: {0}to * by * none +olcAddContentAcl: TRUE +olcLastMod: TRUE +olcMaxDerefDepth: 15 +olcReadOnly: FALSE +olcRootDN: cn=config +olcRootPW: config +olcSyncUseSubentry: FALSE +olcMonitoring: FALSE + +dn: olcDatabase={1}monitor,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {1}monitor +olcAddContentAcl: FALSE +olcLastMod: TRUE +olcMaxDerefDepth: 15 +olcReadOnly: FALSE +olcSyncUseSubentry: FALSE +olcMonitoring: FALSE + +# Searching databases __after__ append... +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAddContentAcl: FALSE +olcLastMod: TRUE +olcMaxDerefDepth: 0 +olcReadOnly: FALSE +olcSchemaDN: cn=Subschema +olcSyncUseSubentry: FALSE +olcMonitoring: FALSE + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcAccess: {0}to * by * none +olcAddContentAcl: TRUE +olcLastMod: TRUE +olcMaxDerefDepth: 15 +olcReadOnly: FALSE +olcRootDN: cn=config +olcRootPW: config +olcSyncUseSubentry: FALSE +olcMonitoring: FALSE + +dn: olcDatabase={1}monitor,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {1}monitor +olcAddContentAcl: FALSE +olcLastMod: TRUE +olcMaxDerefDepth: 15 +olcReadOnly: FALSE +olcSyncUseSubentry: FALSE +olcMonitoring: FALSE + +dn: olcDatabase={2}bdb,cn=config +objectClass: olcDatabaseConfig +objectClass: olcBdbConfig +olcDatabase: {2}bdb +olcDbDirectory: ./testrun/db.1.a +olcSuffix: dc=com + +# Searching databases __after__ insert... +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAddContentAcl: FALSE +olcLastMod: TRUE +olcMaxDerefDepth: 0 +olcReadOnly: FALSE +olcSchemaDN: cn=Subschema +olcSyncUseSubentry: FALSE +olcMonitoring: FALSE + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcAccess: {0}to * by * none +olcAddContentAcl: TRUE +olcLastMod: TRUE +olcMaxDerefDepth: 15 +olcReadOnly: FALSE +olcRootDN: cn=config +olcRootPW: config +olcSyncUseSubentry: FALSE +olcMonitoring: FALSE + +dn: olcDatabase={1}bdb,cn=config +objectClass: olcDatabaseConfig +objectClass: olcBdbConfig +olcDatabase: {1}bdb +olcDbDirectory: ./testrun/db.2.a +olcSuffix: dc=org + +dn: olcDatabase={2}monitor,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {2}monitor +olcAddContentAcl: FALSE +olcLastMod: TRUE +olcMaxDerefDepth: 15 +olcReadOnly: FALSE +olcSyncUseSubentry: FALSE +olcMonitoring: FALSE + +dn: olcDatabase={3}bdb,cn=config +objectClass: olcDatabaseConfig +objectClass: olcBdbConfig +olcDatabase: {3}bdb +olcDbDirectory: ./testrun/db.1.a +olcSuffix: dc=com + diff --git a/tests/data/regressions/its4337/its4337 b/tests/data/regressions/its4337/its4337 new file mode 100755 index 0000000..a5bea26 --- /dev/null +++ b/tests/data/regressions/its4337/its4337 @@ -0,0 +1,157 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $BACKEND != "bdb" ; then + echo "BDB backend not available, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 $DBDIR3 $TESTDIR/slapd.d + +ITS=4337 +ITSDIR=$DATADIR/regressions/its$ITS + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd.conf > $CONF1 +#$SLAPD -f $CONF1 -F $TESTDIR/slapd.d -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 +cat /dev/null > $SEARCHOUT + +echo "Searching databases..." +echo "# Searching databases __before__ append..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 \ + -D "cn=config" -w "config" -b "cn=config" \ + '(objectClass=olcDatabaseConfig)' >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Appending a database..." +$LDAPADD -v -D "cn=config" -w "config" -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS +dn: olcDatabase=bdb,cn=config +objectClass: olcDatabaseConfig +objectClass: olcBdbConfig +olcDatabase: bdb +olcSuffix: dc=com +olcDbDirectory: ./testrun/db.1.a +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Searching databases..." +echo "# Searching databases __after__ append..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 \ + -D "cn=config" -w "config" -b "cn=config" \ + '(objectClass=olcDatabaseConfig)' >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Inserting a database..." +$LDAPADD -v -D "cn=config" -w "config" -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS +dn: olcDatabase={1}bdb,cn=config +objectClass: olcDatabaseConfig +objectClass: olcBdbConfig +olcDatabase: {1}bdb +olcSuffix: dc=org +olcDbDirectory: ./testrun/db.2.a +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + if test $RC = 53 ; then + echo "TODO" + exit 0 + fi + exit $RC +fi + +echo "Searching databases..." +echo "# Searching databases __after__ insert..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 \ + -D "cn=config" -w "config" -b "cn=config" \ + '(objectClass=olcDatabaseConfig)' >> $SEARCHOUT 2>> $TESTOUT +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=$ITSDIR/config.out + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif..." +$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 diff --git a/tests/data/regressions/its4337/slapd.conf b/tests/data/regressions/its4337/slapd.conf new file mode 100644 index 0000000..17563b4 --- /dev/null +++ b/tests/data/regressions/its4337/slapd.conf @@ -0,0 +1,36 @@ +# stand-alone slapd config -- for testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @DATADIR@/test.schema + +# +pidfile @TESTDIR@/slapd.2.pid +argsfile @TESTDIR@/slapd.2.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/:../servers/slapd/overlays +#mod#moduleload back_@BACKEND@.la + +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +database config +rootpw config + +#monitor#database monitor diff --git a/tests/data/regressions/its4448/its4448 b/tests/data/regressions/its4448/its4448 new file mode 100755 index 0000000..538f16c --- /dev/null +++ b/tests/data/regressions/its4448/its4448 @@ -0,0 +1,326 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +echo "" + +if test $BACKMETA = metano ; then + echo "meta backend not available, test skipped" + exit 0 +fi + +# to be removed some time... +if test "x$TEST_META" = "xno" ; then + echo '### Test disabled by "TEST_META=no"; unset TEST_META to re-enable' + echo "" + exit 0 +else + echo "### this test is experimental; in case of problems," + echo "### set \"TEST_META=no\" to disable, and report thru" + echo "### the Issue Tracking System <http://www.openldap.org/its/>" + echo "" +fi + +if test x$TESTLOOPS = x ; then + TESTLOOPS=50 +fi + +rm -rf $TESTDIR + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 + +ITS=4448 +ITSDIR=$DATADIR/regressions/its$ITS +ITSCONF=$ITSDIR/slapd-meta.conf + +# NOTE: this could be added to all tests... +if test "$BACKEND" = "bdb" || test "$BACKEND" = "hdb" ; then + if test "x$DB_CONFIG" != "x" ; then \ + if test -f $DB_CONFIG ; then + echo "==> using DB_CONFIG \"$DB_CONFIG\"" + cp $DB_CONFIG $DBDIR1 + cp $DB_CONFIG $DBDIR2 + else + echo "==> DB_CONFIG must point to a valid file (ignored)" + fi + else + echo "==> set \"DB_CONFIG\" to the DB_CONFIG file you want to use for the test." + fi + echo "" +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Using ldapadd to populate the database..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDERED > $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapadd to add the referral..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD << EOMODS \ + > $TESTOUT 2>&1 +dn: cn=Meta,dc=example,dc=com +objectClass: referral +objectClass: extensibleObject +cn: Meta +ref: ${URI2}ou=Meta,dc=example,dc=com +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $METACONF2 > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$KILLPIDS $PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + '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 + +echo "Using ldapadd to populate the database..." +$LDAPADD -D "$METAMANAGERDN" -h $LOCALHOST -p $PORT2 -w $PASSWD < \ + $LDIFMETA >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT3..." +. $CONFFILTER $BACKEND $MONITORDB < $ITSCONF > $CONF3 +$SLAPD -f $CONF3 -h $URI3 -d $LVL $TIMING > $LOG3 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$KILLPIDS $PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT3 \ + '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 > $SEARCHOUT + +mkdir -p $TESTDIR/$DATADIR +METABASEDN="o=Example,c=US" +#for f in $DATADIR/do_* ; do +# sed -e "s;$BASEDN;$METABASEDN;" $f > $TESTDIR/$f +#done + +# add a read that matches only the local database, but selects +# also the remote as candidate; this should be removed to compare +# execution times with test008... +#for f in $TESTDIR/$DATADIR/do_read.* ; do +# echo "ou=Meta,$METABASEDN" >> $f +#done + +# add a read that matches a referral in the local database only, +# but selects also the remote as candidate; this should be removed +# to compare execution times with test008... +#for f in $TESTDIR/$DATADIR/do_read.* ; do +# echo "cn=Somewhere,ou=Meta,$METABASEDN" >> $f +#done + +# add a bind that resolves to a referral +#for f in $TESTDIR/$DATADIR/do_bind.* ; do +# echo "cn=Foo,ou=Meta,$METABASEDN" >> $f +# echo "bar" >> $f +# echo "" >> $f +# echo "" >> $f +#done + +echo \ +"$METABASEDN +(cn=John Belushi) +$METABASEDN +(cn=Meta) +$METABASEDN +(cn=Foo Bar) +$METABASEDN +(cn=Dan Aykroyd) +$METABASEDN +(cn=John Belushi) +$METABASEDN +(cn=Meta) +$METABASEDN +(cn=Foo Bar) +$METABASEDN +(cn=Dan Aykroyd) +$METABASEDN +(cn=John Belushi) +$METABASEDN +(cn=Meta) +$METABASEDN +(cn=Foo Bar) +$METABASEDN +(cn=Dan Aykroyd) +$METABASEDN +(cn=John Belushi) +$METABASEDN +(cn=Meta) +$METABASEDN +(cn=Foo Bar) +$METABASEDN +(cn=Dan Aykroyd) +$METABASEDN +(cn=John Belushi) +$METABASEDN +(cn=Meta) +$METABASEDN +(cn=Foo Bar) +$METABASEDN +(cn=Dan Aykroyd) +$METABASEDN +(cn=John Belushi) +$METABASEDN +(cn=Meta) +$METABASEDN +(cn=Foo Bar) +$METABASEDN +(cn=Dan Aykroyd) +$METABASEDN +(cn=John Belushi) +$METABASEDN +(cn=Meta) +$METABASEDN +(cn=Foo Bar) +$METABASEDN +(cn=Dan Aykroyd) +$METABASEDN +(cn=John Belushi) +$METABASEDN +(cn=Meta) +$METABASEDN +(cn=Foo Bar) +$METABASEDN +(cn=Dan Aykroyd)" \ +> $TESTDIR/$DATADIR/do_search.0 + +echo "Using tester for concurrent server access..." +$SLAPDTESTER -P "$PROGDIR" -d "$TESTDIR/$DATADIR" -h $LOCALHOST -p $PORT3 \ + -D "cn=Manager,$METABASEDN" -w $PASSWD -l $TESTLOOPS -r 20 -FF +RC=$? + +if test $RC != 0 ; then + echo "slapd-tester failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to retrieve all the entries..." +$LDAPSEARCH -S "" -b "$METABASEDN" -h $LOCALHOST -p $PORT3 \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif used to create database..." +$LDIFFILTER < $METACONCURRENCYOUT > $LDIFFLT +echo "Comparing filter output..." +$BCMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - slapd-meta search/modification didn't succeed" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/data/regressions/its4448/slapd-meta.conf b/tests/data/regressions/its4448/slapd-meta.conf new file mode 100644 index 0000000..ed8bc63 --- /dev/null +++ b/tests/data/regressions/its4448/slapd-meta.conf @@ -0,0 +1,61 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @SCHEMADIR@/ppolicy.schema +pidfile @TESTDIR@/slapd.m.pid +argsfile @TESTDIR@/slapd.m.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#relaymod#modulepath ../servers/slapd/back-relay/ +#relaymod#moduleload back_relay.la +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la +#metamod#modulepath ../servers/slapd/back-meta/ +#metamod#moduleload back_meta.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#rwmmod#modulepath ../servers/slapd/overlays/ +#rwmmod#moduleload rwm.la + +# seems to improve behavior under very heavy load +# (i.e. it alleviates load on target systems) +threads 8 + +####################################################################### +# database definitions +####################################################################### + +database meta +suffix "o=Example,c=US" +rootdn "cn=Manager,o=Example,c=US" +rootpw secret +nretries 100 +chase-referrals yes + +uri "@URI1@o=Example,c=US" +suffixmassage "o=Example,c=US" "dc=example,dc=com" +idassert-bind bindmethod=simple + binddn="cn=manager,dc=example,dc=com" + credentials=secret + mode=none +idassert-authzFrom "*" + +#monitor#database monitor diff --git a/tests/data/regressions/its6794/its6794 b/tests/data/regressions/its6794/its6794 new file mode 100755 index 0000000..cd91061 --- /dev/null +++ b/tests/data/regressions/its6794/its6794 @@ -0,0 +1,84 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +rm -rf $TESTDIR + +mkdir -p $TESTDIR $DBDIR1A $DBDIR1B $DBDIR1C +ITS=6794 +ITSDIR=$DATADIR/regressions/its$ITS +ITSCONF=$ITSDIR/slapd-glue.conf + +echo "Running multi-threaded slapadd in quick mode to build glued slapd databases..." +. $CONFFILTER $BACKEND $MONITORDB < $ITSCONF > $CONF1 +$SLAPADD -q -d $LVL -f $CONF1 -l $LDIFORDERED > $SLAPADDLOG1 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to retrieve all the entries..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -b "$BASEDN" -h $LOCALHOST -p $PORT1 > $SEARCHOUT 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 + +echo "Filtering ldapsearch results..." +$LDIFFILTER -s ldif=e < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif used to create database..." +$LDIFFILTER -s ldif=e < $LDIFGLUED > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - database was not created correctly" + echo $SEARCHFLT $LDIFFLT + $DIFF $SEARCHFLT $LDIFFLT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/data/regressions/its6794/slapd-glue.conf b/tests/data/regressions/its6794/slapd-glue.conf new file mode 100644 index 0000000..39deeb5 --- /dev/null +++ b/tests/data/regressions/its6794/slapd-glue.conf @@ -0,0 +1,66 @@ +# stand-alone slapd config -- for backglue testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +tool-threads 4 +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "ou=Information Technology Division,ou=People,dc=example,dc=com" +subordinate +rootdn "cn=Manager, dc=example,dc=com" +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectclass eq +#indexdb#index uid pres,eq,sub +#indexdb#index cn,sn pres,eq,sub,subany +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +database @BACKEND@ +suffix "ou=Groups,dc=example,dc=com" +subordinate +rootdn "cn=Manager, dc=example,dc=com" +#~null~#directory @TESTDIR@/db.1.b +#indexdb#index objectclass eq +#indexdb#index uid pres,eq,sub +#indexdb#index cn,sn pres,eq,sub,subany +#ndb#dbname db_2 +#ndb#include @DATADIR@/ndb.conf + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager, dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.c +#indexdb#index objectclass eq +#indexdb#index uid pres,eq,sub +#indexdb#index cn pres,eq,sub,subany +#ndb#dbname db_3 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/regressions/its8444/its8444 b/tests/data/regressions/its8444/its8444 new file mode 100755 index 0000000..e30d12e --- /dev/null +++ b/tests/data/regressions/its8444/its8444 @@ -0,0 +1,322 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi +if test $ACCESSLOG = accesslogno; then + echo "Accesslog overlay not available, test skipped" + exit 0 +fi +if test $DYNLIST = dynlistno; then + echo "Dynlist overlay not available, test skipped" + exit 0 +fi +if test $MEMBEROF = memberofno; then + echo "Memberof overlay not available, test skipped" + exit 0 +fi +if test $BACKEND = ldif ; then + # Onelevel search does not return entries in order of creation or CSN. + echo "$BACKEND backend unsuitable for syncprov logdb, test skipped" + exit 0 +fi + +echo "This test tracks a case where changes are incorrectly skipped" +echo "See http://www.openldap.org/its/index.cgi/?findid=8444 for more information." + +MMR=4 +XDIR=$TESTDIR/srv + +mkdir -p $TESTDIR + +$SLAPPASSWD -g -n >$CONFIGPWF + +ITS=8444 +ITSDIR=$DATADIR/regressions/its$ITS + +echo "Initializing server configurations..." + +n=1 +while [ $n -le $MMR ]; do + DBDIR=${XDIR}$n/db + CFDIR=${XDIR}$n/slapd.d + + mkdir -p ${XDIR}$n $DBDIR.1 $DBDIR.2 $CFDIR + . $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd-provider${n}.ldif > $CONFLDIF + $SLAPADD -F $CFDIR -n 0 -l $CONFLDIF + n=`expr $n + 1` +done + +KILLPIDS= +n=1 +while [ $n -le $MMR ]; do + MYURI=`eval echo '$URI'$n` + MYLOG=`eval echo '$LOG'$n` + CFDIR=${XDIR}$n/slapd.d + + echo "Starting provider slapd on TCP/IP URI $MYURI" + $SLAPD -F $CFDIR -h $MYURI -d $LVL $TIMING > $MYLOG 2>&1 & + + PID=$! + if test $WAIT != 0 ; then + echo PID $PID + read foo + fi + KILLPIDS="$PID $KILLPIDS" + sleep 1 + + echo "Using ldapsearch to check that provider slapd is running..." + for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $MYURI \ + '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 + n=`expr $n + 1` +done + +echo "Populating database on first provider..." +$LDAPADD -D $MANAGERDN -H $URI1 -w $PASSWD << EOMODS >> $TESTOUT 2>&1 +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=Jessica_Rabbit,ou=People,$BASEDN +objectClass: inetOrgPerson +cn: Jessica_Rabbit +sn: Rabbit + +dn: cn=Bugs_Bunny,ou=People,$BASEDN +objectClass: inetOrgPerson +cn: Bugs_Bunny +sn: Bunny + +dn: cn=Daffy_Duck,ou=People,$BASEDN +objectClass: inetOrgPerson +cn: Daffy_Duck +sn: Duck + +dn: cn=Elmer_Fudd,ou=People,$BASEDN +objectClass: inetOrgPerson +cn: Elmer_Fudd +sn: Fudd + +dn: cn=Cartoonia,ou=Groups,$BASEDN +objectClass: groupOfNames +cn: Cartoonia +member: cn=Roger Rabbit,ou=People,$BASEDN +member: cn=Baby Herman,ou=People,$BASEDN +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Sleeping 10 seconds to allow replication to initiate..." +sleep 10 + +echo "Looping 50 times adding and deleting members to the Cartoonia group..." +modloop=1 +while [ $modloop -le 50 ]; do + echo "Adding new members to the group (${modloop}/50)..." + $LDAPMODIFY -H $URI1 \ + -D "cn=Manager,$BASEDN" -w $PASSWD \ + >> $TESTOUT 2>&1 << EOF +dn: cn=Cartoonia,ou=Groups,$BASEDN +changetype: modify +add: member +member: cn=Jessica_Rabbit,ou=People,$BASEDN +member: cn=Elmer_Fudd,ou=People,$BASEDN +member: cn=Daffy_Duck,ou=People,$BASEDN +member: cn=Bugs_Bunny,ou=People,$BASEDN +EOF + + sleep 3 + + echo "Deleting new members from the group..." + $LDAPMODIFY -H $URI1 \ + -D "cn=Manager,$BASEDN" -w $PASSWD \ + >> $TESTOUT 2>&1 << EOF +dn: cn=Cartoonia,ou=Groups,$BASEDN +changetype: modify +delete: member +member: cn=Jessica_Rabbit,ou=People,$BASEDN +member: cn=Elmer_Fudd,ou=People,$BASEDN +member: cn=Daffy_Duck,ou=People,$BASEDN +member: cn=Bugs_Bunny,ou=People,$BASEDN +EOF + sleep 3 + + echo "Searching new members to see if they still have memberOf present..." + TOON1="cn=Jessica_Rabbit,ou=People,$BASEDN" + TOON2="cn=Elmer_Fudd,ou=People,$BASEDN" + TOON3="cn=Daffy_Duck,ou=People,$BASEDN" + TOON4="cn=Bugs_Bunny,ou=People,$BASEDN" + for member in $TOON1 $TOON2 $TOON3 $TOON4; do + n=1 + while [ $n -le $MMR ]; do + >$SEARCHOUT + echo "# Searching member $member after removal from Cartoonia group, provider $n" >> $SEARCHOUT + MYURI=`eval echo '$URI'$n` + $LDAPSEARCH -S "" -b "$member" -s base -H $MYURI -D "cn=manager,$BASEDN" -w $PASSWD \ + '(objectClass=*)' 'memberOf' >> $SEARCHOUT 2>&1 + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + grep "memberOf:" $SEARCHOUT >/dev/null 2>&1 + RC=$? + + if test $RC != 1 ; then + echo "User delete failed on one or more consumer." + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + n=`expr $n + 1` + done + done + modloop=`expr $modloop + 1` +done + +echo "Looping 50 times deleting and adding Cartoonia group..." +modloop=1 +while [ $modloop -le 50 ]; do + >$SEARCHOUT + echo "Running ldapdelete to remove a group (${modloop}/50)..." + $LDAPMODIFY -H $URI1 \ + -D "cn=Manager,$BASEDN" -w $PASSWD \ + >> $TESTOUT 2>&1 << EOF +dn: cn=Cartoonia,ou=Groups,$BASEDN +changetype: delete +EOF + + sleep 3 + + echo "Searching entire database on each provider after deleting Cartoonia group" + + n=1 + while [ $n -le $MMR ]; do + echo "# Searching the entire database after deleting Cartoonia, provider $n" >> $SEARCHOUT + MYURI=`eval echo '$URI'$n` + $LDAPSEARCH -S "" -b "$BASEDN" -H $MYURI -D "cn=manager,$BASEDN" -w $PASSWD \ + '(objectClass=*)' '*' >> $SEARCHOUT 2>&1 + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + n=`expr $n + 1` + done + + grep "cn=Cartoonia" $SEARCHOUT >/dev/null 2>&1 + RC=$? + + if test $RC != 1 ; then + echo "Group delete failed on one or more consumer." + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Running ldapmodify to add the group back..." + $LDAPMODIFY -H $URI1 \ + -D "cn=Manager,$BASEDN" -w $PASSWD \ + >> $TESTOUT 2>&1 <<EOF +dn: cn=Cartoonia,ou=Groups,$BASEDN +changetype: add +objectClass: groupOfNames +cn: Cartoonia +member: cn=Roger Rabbit,ou=People,$BASEDN +member: cn=Baby Herman,ou=People,$BASEDN +EOF + + sleep 3 + + echo "Searching entire database on each provider after re-adding Cartoonia group" + + n=1 + while [ $n -le $MMR ]; do + >$SEARCHOUT + echo "# Searching the entire database after re-adding Cartoonia, provider $n" >> $SEARCHOUT + MYURI=`eval echo '$URI'$n` + $LDAPSEARCH -S "" -b "$BASEDN" -H $MYURI -D "cn=manager,$BASEDN" -w $PASSWD \ + '(objectClass=*)' '*' memberOf>> $SEARCHOUT 2>&1 + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + grep "memberOf:" $SEARCHOUT >/dev/null 2>&1 + RC=$? + + if test $RC != 0 ; then + echo "Group add failed on one or more consumer." + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + n=`expr $n + 1` + done + modloop=`expr $modloop + 1` +done + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/data/regressions/its8444/slapd-provider1.ldif b/tests/data/regressions/its8444/slapd-provider1.ldif new file mode 100644 index 0000000..d2a57a8 --- /dev/null +++ b/tests/data/regressions/its8444/slapd-provider1.ldif @@ -0,0 +1,160 @@ +dn: cn=config +objectClass: olcGlobal +cn: config +olcLogLevel: Sync +olcLogLevel: Stats +olcPidFile: @TESTDIR@/slapd.1.pid +olcArgsFile: @TESTDIR@/slapd.1.args +olcServerID: 1 + +dn: cn=schema,cn=config +objectClass: olcSchemaConfig +cn: schema + +include: file://@TESTWD@/@SCHEMADIR@/core.ldif +include: file://@TESTWD@/@SCHEMADIR@/cosine.ldif +include: file://@TESTWD@/@SCHEMADIR@/inetorgperson.ldif +include: file://@TESTWD@/@SCHEMADIR@/misc.ldif +include: file://@TESTWD@/@SCHEMADIR@/nis.ldif +include: file://@TESTWD@/@SCHEMADIR@/dyngroup.ldif + +#mod#dn: cn=module{0},cn=config +#mod#objectClass: olcModuleList +#mod#cn: module{0} +#mod#olcModulePath: @TESTWD@/../servers/slapd/back-@BACKEND@/ +#mod#olcModuleLoad: {0}back_@BACKEND@.la + +#monitormod#dn: cn=module{1},cn=config +#monitormod#objectClass: olcModuleList +#monitormod#cn: module{1} +#monitormod#olcModulePath: @TESTWD@/../servers/slapd/back-monitor/ +#monitormod#olcModuleLoad: {0}back_monitor.la + +#memberofmod#dn: cn=module{2},cn=config +#memberofmod#objectClass: olcModuleList +#memberofmod#cn: module{2} +#memberofmod#olcModulePath: @TESTWD@/../servers/slapd/overlays/ +#memberofmod#olcModuleLoad: {0}memberof.la +#dynlistmod#olcModuleLoad: {1}dynlist.la +#syncprovmod#olcModuleLoad: {2}syncprov.la +#accesslogmod#olcModuleLoad: {3}accesslog.la + +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAccess: {0}to dn="" by * read +olcAccess: {1}to * by self write by users read by anonymous auth + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcAccess: {0}to * by * none +olcRootPW:< file://@TESTDIR@/configpw + +dn: olcDatabase={1}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {1}@BACKEND@ +olcSuffix: dc=example,dc=com +olcRootDN: cn=manager,dc=example,dc=com +olcRootPW: secret +olcSizeLimit: unlimited +olcTimeLimit: unlimited +olcMirrorMode: TRUE +olcSyncrepl: {0}rid=100 provider=@URI2@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +olcSyncrepl: {1}rid=101 provider=@URI3@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +olcSyncrepl: {2}rid=102 provider=@URI4@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +#~null~#olcDbDirectory: @TESTDIR@/srv1/db.1 +#indexdb#olcDbIndex: default eq +#indexdb#olcDbIndex: objectClass +#indexdb#olcDbIndex: entryUUID +#indexdb#olcDbIndex: entryCSN +#indexdb#olcDbIndex: cn pres,eq,sub +#indexdb#olcDbIndex: uid pres,eq,sub +#indexdb#olcDbIndex: uidNumber pres,eq +#indexdb#olcDbIndex: gidNumber pres,eq +#indexdb#olcDbIndex: mail pres,eq,sub +#indexdb#olcDbIndex: sn pres,eq,sub +#indexdb#olcDbIndex: memberUid +#indexdb#olcDbIndex: uniqueMember pres,eq +#indexdb#olcDbIndex: description pres,eq,sub +#indexdb#olcDbIndex: title pres,eq,sub +#indexdb#olcDbIndex: givenName pres,eq,sub +#indexdb#olcDbIndex: member +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}dynlist,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcDynamicList +olcOverlay: {0}dynlist +olcDlAttrSet: {0}groupOfURLs memberURL + +dn: olcOverlay={1}memberof,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcMemberOf +olcOverlay: {1}memberof +olcMemberOfDangling: ignore +olcMemberOfRefInt: TRUE +olcMemberOfGroupOC: groupOfNames +olcMemberOfMemberAD: member +olcMemberOfMemberOfAD: memberOf + +dn: olcOverlay={2}syncprov,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncProvConfig +olcOverlay: {2}syncprov +olcSpCheckpoint: 20 10 +olcSpSessionlog: 50 + +dn: olcOverlay={3}accesslog,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcAccessLogConfig +olcOverlay: {3}accesslog +olcAccessLogDB: cn=accesslog +olcAccessLogOps: writes +olcAccessLogPurge: 07+00:00 01+00:00 +olcAccessLogSuccess: TRUE + +dn: olcDatabase={2}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {2}@BACKEND@ +olcSuffix: cn=accesslog +olcSizeLimit: unlimited +olcTimeLimit: unlimited +olcDbIndex: default eq +olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart,reqDN +#~null~#olcDbDirectory: @TESTDIR@/srv1/db.2 +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}syncprov,olcDatabase={2}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncProvConfig +olcOverlay: {0}syncprov +olcSpNoPresent: TRUE +olcSpReloadHint: TRUE + +dn: olcDatabase={3}monitor,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {3}monitor +olcAccess: {0}to dn.subtree="cn=monitor" by * read diff --git a/tests/data/regressions/its8444/slapd-provider2.ldif b/tests/data/regressions/its8444/slapd-provider2.ldif new file mode 100644 index 0000000..fa72a2f --- /dev/null +++ b/tests/data/regressions/its8444/slapd-provider2.ldif @@ -0,0 +1,160 @@ +dn: cn=config +objectClass: olcGlobal +cn: config +olcLogLevel: Sync +olcLogLevel: Stats +olcPidFile: @TESTDIR@/slapd.2.pid +olcArgsFile: @TESTDIR@/slapd.2.args +olcServerID: 2 + +dn: cn=schema,cn=config +objectClass: olcSchemaConfig +cn: schema + +include: file://@TESTWD@/@SCHEMADIR@/core.ldif +include: file://@TESTWD@/@SCHEMADIR@/cosine.ldif +include: file://@TESTWD@/@SCHEMADIR@/inetorgperson.ldif +include: file://@TESTWD@/@SCHEMADIR@/misc.ldif +include: file://@TESTWD@/@SCHEMADIR@/nis.ldif +include: file://@TESTWD@/@SCHEMADIR@/dyngroup.ldif + +#mod#dn: cn=module{0},cn=config +#mod#objectClass: olcModuleList +#mod#cn: module{0} +#mod#olcModulePath: @TESTWD@/../servers/slapd/back-@BACKEND@/ +#mod#olcModuleLoad: {0}back_@BACKEND@.la + +#monitormod#dn: cn=module{1},cn=config +#monitormod#objectClass: olcModuleList +#monitormod#cn: module{1} +#monitormod#olcModulePath: @TESTWD@/../servers/slapd/back-monitor/ +#monitormod#olcModuleLoad: {0}back_monitor.la + +#memberofmod#dn: cn=module{2},cn=config +#memberofmod#objectClass: olcModuleList +#memberofmod#cn: module{2} +#memberofmod#olcModulePath: @TESTWD@/../servers/slapd/overlays/ +#memberofmod#olcModuleLoad: {0}memberof.la +#dynlistmod#olcModuleLoad: {1}dynlist.la +#syncprovmod#olcModuleLoad: {2}syncprov.la +#accesslogmod#olcModuleLoad: {3}accesslog.la + +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAccess: {0}to dn="" by * read +olcAccess: {1}to * by self write by users read by anonymous auth + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcAccess: {0}to * by * none +olcRootPW:< file://@TESTDIR@/configpw + +dn: olcDatabase={1}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {1}@BACKEND@ +olcSuffix: dc=example,dc=com +olcRootDN: cn=manager,dc=example,dc=com +olcRootPW: secret +olcSizeLimit: unlimited +olcTimeLimit: unlimited +olcMirrorMode: TRUE +olcSyncrepl: {0}rid=100 provider=@URI1@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +olcSyncrepl: {1}rid=101 provider=@URI3@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +olcSyncrepl: {2}rid=102 provider=@URI4@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +#~null~#olcDbDirectory: @TESTDIR@/srv2/db.1 +#indexdb#olcDbIndex: default eq +#indexdb#olcDbIndex: objectClass +#indexdb#olcDbIndex: entryUUID +#indexdb#olcDbIndex: entryCSN +#indexdb#olcDbIndex: cn pres,eq,sub +#indexdb#olcDbIndex: uid pres,eq,sub +#indexdb#olcDbIndex: uidNumber pres,eq +#indexdb#olcDbIndex: gidNumber pres,eq +#indexdb#olcDbIndex: mail pres,eq,sub +#indexdb#olcDbIndex: sn pres,eq,sub +#indexdb#olcDbIndex: memberUid +#indexdb#olcDbIndex: uniqueMember pres,eq +#indexdb#olcDbIndex: description pres,eq,sub +#indexdb#olcDbIndex: title pres,eq,sub +#indexdb#olcDbIndex: givenName pres,eq,sub +#indexdb#olcDbIndex: member +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}dynlist,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcDynamicList +olcOverlay: {0}dynlist +olcDlAttrSet: {0}groupOfURLs memberURL + +dn: olcOverlay={1}memberof,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcMemberOf +olcOverlay: {1}memberof +olcMemberOfDangling: ignore +olcMemberOfRefInt: TRUE +olcMemberOfGroupOC: groupOfNames +olcMemberOfMemberAD: member +olcMemberOfMemberOfAD: memberOf + +dn: olcOverlay={2}syncprov,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncProvConfig +olcOverlay: {2}syncprov +olcSpCheckpoint: 20 10 +olcSpSessionlog: 50 + +dn: olcOverlay={3}accesslog,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcAccessLogConfig +olcOverlay: {3}accesslog +olcAccessLogDB: cn=accesslog +olcAccessLogOps: writes +olcAccessLogPurge: 07+00:00 01+00:00 +olcAccessLogSuccess: TRUE + +dn: olcDatabase={2}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {2}@BACKEND@ +olcSuffix: cn=accesslog +olcSizeLimit: unlimited +olcTimeLimit: unlimited +olcDbIndex: default eq +olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart,reqDN +#~null~#olcDbDirectory: @TESTDIR@/srv2/db.2 +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}syncprov,olcDatabase={2}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncProvConfig +olcOverlay: {0}syncprov +olcSpNoPresent: TRUE +olcSpReloadHint: TRUE + +dn: olcDatabase={3}monitor,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {3}monitor +olcAccess: {0}to dn.subtree="cn=monitor" by * read diff --git a/tests/data/regressions/its8444/slapd-provider3.ldif b/tests/data/regressions/its8444/slapd-provider3.ldif new file mode 100644 index 0000000..26a3ea1 --- /dev/null +++ b/tests/data/regressions/its8444/slapd-provider3.ldif @@ -0,0 +1,160 @@ +dn: cn=config +objectClass: olcGlobal +cn: config +olcLogLevel: Sync +olcLogLevel: Stats +olcPidFile: @TESTDIR@/slapd.3.pid +olcArgsFile: @TESTDIR@/slapd.3.args +olcServerID: 3 + +dn: cn=schema,cn=config +objectClass: olcSchemaConfig +cn: schema + +include: file://@TESTWD@/@SCHEMADIR@/core.ldif +include: file://@TESTWD@/@SCHEMADIR@/cosine.ldif +include: file://@TESTWD@/@SCHEMADIR@/inetorgperson.ldif +include: file://@TESTWD@/@SCHEMADIR@/misc.ldif +include: file://@TESTWD@/@SCHEMADIR@/nis.ldif +include: file://@TESTWD@/@SCHEMADIR@/dyngroup.ldif + +#mod#dn: cn=module{0},cn=config +#mod#objectClass: olcModuleList +#mod#cn: module{0} +#mod#olcModulePath: @TESTWD@/../servers/slapd/back-@BACKEND@/ +#mod#olcModuleLoad: {0}back_@BACKEND@.la + +#monitormod#dn: cn=module{1},cn=config +#monitormod#objectClass: olcModuleList +#monitormod#cn: module{1} +#monitormod#olcModulePath: @TESTWD@/../servers/slapd/back-monitor/ +#monitormod#olcModuleLoad: {0}back_monitor.la + +#memberofmod#dn: cn=module{2},cn=config +#memberofmod#objectClass: olcModuleList +#memberofmod#cn: module{2} +#memberofmod#olcModulePath: @TESTWD@/../servers/slapd/overlays/ +#memberofmod#olcModuleLoad: {0}memberof.la +#dynlistmod#olcModuleLoad: {1}dynlist.la +#syncprovmod#olcModuleLoad: {2}syncprov.la +#accesslogmod#olcModuleLoad: {3}accesslog.la + +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAccess: {0}to dn="" by * read +olcAccess: {1}to * by self write by users read by anonymous auth + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcAccess: {0}to * by * none +olcRootPW:< file://@TESTDIR@/configpw + +dn: olcDatabase={1}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {1}@BACKEND@ +olcSuffix: dc=example,dc=com +olcRootDN: cn=manager,dc=example,dc=com +olcRootPW: secret +olcSizeLimit: unlimited +olcTimeLimit: unlimited +olcMirrorMode: TRUE +olcSyncrepl: {0}rid=100 provider=@URI2@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +olcSyncrepl: {1}rid=101 provider=@URI1@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +olcSyncrepl: {2}rid=102 provider=@URI4@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +#~null~#olcDbDirectory: @TESTDIR@/srv3/db.1 +#indexdb#olcDbIndex: default eq +#indexdb#olcDbIndex: objectClass +#indexdb#olcDbIndex: entryUUID +#indexdb#olcDbIndex: entryCSN +#indexdb#olcDbIndex: cn pres,eq,sub +#indexdb#olcDbIndex: uid pres,eq,sub +#indexdb#olcDbIndex: uidNumber pres,eq +#indexdb#olcDbIndex: gidNumber pres,eq +#indexdb#olcDbIndex: mail pres,eq,sub +#indexdb#olcDbIndex: sn pres,eq,sub +#indexdb#olcDbIndex: memberUid +#indexdb#olcDbIndex: uniqueMember pres,eq +#indexdb#olcDbIndex: description pres,eq,sub +#indexdb#olcDbIndex: title pres,eq,sub +#indexdb#olcDbIndex: givenName pres,eq,sub +#indexdb#olcDbIndex: member +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}dynlist,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcDynamicList +olcOverlay: {0}dynlist +olcDlAttrSet: {0}groupOfURLs memberURL + +dn: olcOverlay={1}memberof,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcMemberOf +olcOverlay: {1}memberof +olcMemberOfDangling: ignore +olcMemberOfRefInt: TRUE +olcMemberOfGroupOC: groupOfNames +olcMemberOfMemberAD: member +olcMemberOfMemberOfAD: memberOf + +dn: olcOverlay={2}syncprov,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncProvConfig +olcOverlay: {2}syncprov +olcSpCheckpoint: 20 10 +olcSpSessionlog: 50 + +dn: olcOverlay={3}accesslog,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcAccessLogConfig +olcOverlay: {3}accesslog +olcAccessLogDB: cn=accesslog +olcAccessLogOps: writes +olcAccessLogPurge: 07+00:00 01+00:00 +olcAccessLogSuccess: TRUE + +dn: olcDatabase={2}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {2}@BACKEND@ +olcSuffix: cn=accesslog +olcSizeLimit: unlimited +olcTimeLimit: unlimited +olcDbIndex: default eq +olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart,reqDN +#~null~#olcDbDirectory: @TESTDIR@/srv3/db.2 +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}syncprov,olcDatabase={2}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncProvConfig +olcOverlay: {0}syncprov +olcSpNoPresent: TRUE +olcSpReloadHint: TRUE + +dn: olcDatabase={3}monitor,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {3}monitor +olcAccess: {0}to dn.subtree="cn=monitor" by * read diff --git a/tests/data/regressions/its8444/slapd-provider4.ldif b/tests/data/regressions/its8444/slapd-provider4.ldif new file mode 100644 index 0000000..eae330e --- /dev/null +++ b/tests/data/regressions/its8444/slapd-provider4.ldif @@ -0,0 +1,160 @@ +dn: cn=config +objectClass: olcGlobal +cn: config +olcLogLevel: Sync +olcLogLevel: Stats +olcPidFile: @TESTDIR@/slapd.4.pid +olcArgsFile: @TESTDIR@/slapd.4.args +olcServerID: 4 + +dn: cn=schema,cn=config +objectClass: olcSchemaConfig +cn: schema + +include: file://@TESTWD@/@SCHEMADIR@/core.ldif +include: file://@TESTWD@/@SCHEMADIR@/cosine.ldif +include: file://@TESTWD@/@SCHEMADIR@/inetorgperson.ldif +include: file://@TESTWD@/@SCHEMADIR@/misc.ldif +include: file://@TESTWD@/@SCHEMADIR@/nis.ldif +include: file://@TESTWD@/@SCHEMADIR@/dyngroup.ldif + +#mod#dn: cn=module{0},cn=config +#mod#objectClass: olcModuleList +#mod#cn: module{0} +#mod#olcModulePath: @TESTWD@/../servers/slapd/back-@BACKEND@/ +#mod#olcModuleLoad: {0}back_@BACKEND@.la + +#monitormod#dn: cn=module{1},cn=config +#monitormod#objectClass: olcModuleList +#monitormod#cn: module{1} +#monitormod#olcModulePath: @TESTWD@/../servers/slapd/back-monitor/ +#monitormod#olcModuleLoad: {0}back_monitor.la + +#memberofmod#dn: cn=module{2},cn=config +#memberofmod#objectClass: olcModuleList +#memberofmod#cn: module{2} +#memberofmod#olcModulePath: @TESTWD@/../servers/slapd/overlays/ +#memberofmod#olcModuleLoad: {0}memberof.la +#dynlistmod#olcModuleLoad: {1}dynlist.la +#syncprovmod#olcModuleLoad: {2}syncprov.la +#accesslogmod#olcModuleLoad: {3}accesslog.la + +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAccess: {0}to dn="" by * read +olcAccess: {1}to * by self write by users read by anonymous auth + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcAccess: {0}to * by * none +olcRootPW:< file://@TESTDIR@/configpw + +dn: olcDatabase={1}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {1}@BACKEND@ +olcSuffix: dc=example,dc=com +olcRootDN: cn=manager,dc=example,dc=com +olcRootPW: secret +olcSizeLimit: unlimited +olcTimeLimit: unlimited +olcMirrorMode: TRUE +olcSyncrepl: {0}rid=100 provider=@URI2@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +olcSyncrepl: {1}rid=101 provider=@URI3@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +olcSyncrepl: {2}rid=102 provider=@URI1@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +#~null~#olcDbDirectory: @TESTDIR@/srv4/db.1 +#indexdb#olcDbIndex: default eq +#indexdb#olcDbIndex: objectClass +#indexdb#olcDbIndex: entryUUID +#indexdb#olcDbIndex: entryCSN +#indexdb#olcDbIndex: cn pres,eq,sub +#indexdb#olcDbIndex: uid pres,eq,sub +#indexdb#olcDbIndex: uidNumber pres,eq +#indexdb#olcDbIndex: gidNumber pres,eq +#indexdb#olcDbIndex: mail pres,eq,sub +#indexdb#olcDbIndex: sn pres,eq,sub +#indexdb#olcDbIndex: memberUid +#indexdb#olcDbIndex: uniqueMember pres,eq +#indexdb#olcDbIndex: description pres,eq,sub +#indexdb#olcDbIndex: title pres,eq,sub +#indexdb#olcDbIndex: givenName pres,eq,sub +#indexdb#olcDbIndex: member +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}dynlist,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcDynamicList +olcOverlay: {0}dynlist +olcDlAttrSet: {0}groupOfURLs memberURL + +dn: olcOverlay={1}memberof,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcMemberOf +olcOverlay: {1}memberof +olcMemberOfDangling: ignore +olcMemberOfRefInt: TRUE +olcMemberOfGroupOC: groupOfNames +olcMemberOfMemberAD: member +olcMemberOfMemberOfAD: memberOf + +dn: olcOverlay={2}syncprov,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncProvConfig +olcOverlay: {2}syncprov +olcSpCheckpoint: 20 10 +olcSpSessionlog: 50 + +dn: olcOverlay={3}accesslog,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcAccessLogConfig +olcOverlay: {3}accesslog +olcAccessLogDB: cn=accesslog +olcAccessLogOps: writes +olcAccessLogPurge: 07+00:00 01+00:00 +olcAccessLogSuccess: TRUE + +dn: olcDatabase={2}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {2}@BACKEND@ +olcSuffix: cn=accesslog +olcSizeLimit: unlimited +olcTimeLimit: unlimited +olcDbIndex: default eq +olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart,reqDN +#~null~#olcDbDirectory: @TESTDIR@/srv4/db.2 +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}syncprov,olcDatabase={2}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncProvConfig +olcOverlay: {0}syncprov +olcSpNoPresent: TRUE +olcSpReloadHint: TRUE + +dn: olcDatabase={3}monitor,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {3}monitor +olcAccess: {0}to dn.subtree="cn=monitor" by * read diff --git a/tests/data/regressions/its8521/its8521 b/tests/data/regressions/its8521/its8521 new file mode 100755 index 0000000..b6ea90d --- /dev/null +++ b/tests/data/regressions/its8521/its8521 @@ -0,0 +1,331 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi + +echo "" +echo " This test tracks a case where a consumer fails to replicate from the provider" +echo " when the provider is dynamically configured for replication." +echo " See http://www.openldap.org/its/index.cgi/?findid=8521 and" +echo " See http://www.openldap.org/its/index.cgi/?findid=8281 for more information." +echo "" + +PRODIR=$TESTDIR/pro +CONDIR=$TESTDIR/con1 +CFPRO=$PRODIR/slapd.d +CFCON=$CONDIR/slapd.d + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 $PRODIR $CONDIR $CFPRO $CFCON + +$SLAPPASSWD -g -n >$CONFIGPWF + +ITS=8521 +ITSDIR=$DATADIR/regressions/its$ITS + +echo "Starting provider slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd-provider.ldif > $CONFLDIF +$SLAPADD -F $CFPRO -n 0 -l $CONFLDIF +$SLAPD -F $CFPRO -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that provider slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $URI1 \ + '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 + +echo "Starting consumer slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd-consumer.ldif > $CONFLDIF +$SLAPADD -F $CFCON -n 0 -l $CONFLDIF +$SLAPD -F $CFCON -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVEPID $SLAVEPID + read foo +fi +KILLPIDS="$KILLPIDS $SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that consumer slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $URI2 \ + '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 + +echo "Setting serverID on provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: cn=config +changetype: modify +add: olcServerId +olcServerId: 1 +EOF +RC=$? + +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Populating database on provider..." +$LDAPADD -D $MANAGERDN -H $URI1 -w $PASSWD << EOMODS >> $TESTOUT 2>&1 +dn: dc=example,dc=com +changetype: add +objectClass: domain +objectClass: top +dc: example + +dn: ou=LDAPRoles,dc=example,dc=com +objectClass: top +objectClass: organizationalUnit +ou: LDAPRoles + +dn: dc=users,dc=example,dc=com +changetype: add +dc: users +objectClass: domain +objectClass: top + +dn: uid=johndoe,dc=users,dc=example,dc=com +changetype: add +objectClass: inetOrgPerson +objectClass: top +sn: Doe +cn: Johndoe +uid: johndoe + +dn: cn=replicator,ou=LDAPRoles,dc=example,dc=com +objectClass: top +objectClass: simpleSecurityObject +objectClass: organizationalRole +userPassword: secret +cn: replicator +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +if [ "$SYNCPROV" = syncprovmod ]; then + echo "Configuring syncprov module on the provider..." + $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1 +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModulePath: $TESTWD/../servers/slapd/overlays +olcModuleLoad: syncprov.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 "Configuring replication on the provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcOverlay=syncprov,olcDatabase={1}$BACKEND,cn=config +changetype: add +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncprovConfig +olcOverlay: syncprov +olcSpSessionLog: 10000 +olcSpCheckpoint: 100 10 + +dn: olcDatabase={1}$BACKEND,cn=config +changetype: modify +add: olcLimits +olcLimits: dn.exact="cn=replicator,ou=LDAPRoles,dc=example,dc=com" + time.soft=unlimited time.hard=unlimited size.soft=unlimited + size.hard=unlimited + +dn: olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcAccess +olcAccess: {0}to dn.subtree="dc=example,dc=com" by self write + by dn.exact="cn=replicator,ou=LDAPRoles,dc=example,dc=com" read + by anonymous auth by * read +EOF + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Configuring replication on the consumer..." +$LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcDatabase={1}$BACKEND,cn=config +changetype: modify +add: olcSyncrepl +olcSyncrepl: rid=100 provider=$URI1 bindmethod=simple + binddn="cn=replicator,ou=LDAPRoles,dc=example,dc=com" credentials=secret + type=refreshAndPersist searchbase="dc=example,dc=com" filter="(objectclass=*)" + scope=sub schemachecking=on interval=5 retry="5 +" sizeLimit=unlimited + timelimit=unlimited +- + +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for olcSyncrepl configuration ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Sleeping 10 seconds to allow replication to initiate..." +sleep 10 + +echo "Using ldapsearch to read all the entries from the provider..." +$LDAPSEARCH -S "" -D $MANAGERDN -w $PASSWD -b "$BASEDN" -H $URI1 \ + '(objectclass=*)' '*' $OPATTRS > $MASTEROUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at provider ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the consumer..." +$LDAPSEARCH -S "" -D $MANAGERDN -w $PASSWD -b "$BASEDN" -H $URI2 \ + '(objectclass=*)' '*' $OPATTRS > $SLAVEOUT 2>&1 +RC=$? + +if test $RC != 32 ; then + echo "ldapsearch should have failed with error 32. Got $RC instead!" + echo "This is a regression of ITS8281" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + + +echo "Filtering provider results..." +$LDIFFILTER < $MASTEROUT > $MASTERFLT +echo "Filtering consumer results..." +$LDIFFILTER < $SLAVEOUT > $SLAVEFLT + +echo "Comparing retrieved entries from provider and consumer..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? = 0 ; then + echo "test failed - provider and consumer databases match" + echo "This is a regression of ITS8281" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Modifying provider to force generation of a contextCSN" +$LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: uid=Johndoe,dc=users,dc=example,dc=com +changetype: modify +replace: cn +cn: John Doe +EOMODS + +echo "Sleeping 30 seconds to allow consumer to reconnect and replicate..." +sleep 30 + +echo "Using ldapsearch to read all the entries from the provider..." +$LDAPSEARCH -S "" -D $MANAGERDN -w $PASSWD -b "$BASEDN" -H $URI1 \ + '(objectclass=*)' '*' $OPATTRS > $MASTEROUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at provider ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the consumer..." +$LDAPSEARCH -S "" -D $MANAGERDN -w $PASSWD -b "$BASEDN" -H $URI2 \ + '(objectclass=*)' '*' $OPATTRS > $SLAVEOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at consumer ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + + +echo "Filtering provider results..." +$LDIFFILTER < $MASTEROUT > $MASTERFLT +echo "Filtering consumer results..." +$LDIFFILTER < $SLAVEOUT > $SLAVEFLT + +echo "Comparing retrieved entries from provider and consumer..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - provider and consumer databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/data/regressions/its8521/slapd-consumer.ldif b/tests/data/regressions/its8521/slapd-consumer.ldif new file mode 100644 index 0000000..4fca59e --- /dev/null +++ b/tests/data/regressions/its8521/slapd-consumer.ldif @@ -0,0 +1,59 @@ +dn: cn=config +objectClass: olcGlobal +cn: config +olcLogLevel: Sync +olcLogLevel: Stats +olcPidFile: @TESTDIR@/slapd.3.pid +olcArgsFile: @TESTDIR@/slapd.3.args + +dn: cn=schema,cn=config +objectClass: olcSchemaConfig +cn: schema + +include: file://@TESTWD@/@SCHEMADIR@/core.ldif +include: file://@TESTWD@/@SCHEMADIR@/cosine.ldif +include: file://@TESTWD@/@SCHEMADIR@/inetorgperson.ldif +include: file://@TESTWD@/@SCHEMADIR@/misc.ldif + +#mod#dn: cn=module{0},cn=config +#mod#objectClass: olcModuleList +#mod#cn: module{0} +#mod#olcModulePath: @TESTWD@/../servers/slapd/back-@BACKEND@/ +#mod#olcModuleLoad: {0}back_@BACKEND@.la + +#monitormod#dn: cn=module{1},cn=config +#monitormod#objectClass: olcModuleList +#monitormod#cn: module{1} +#monitormod#olcModulePath: @TESTWD@/../servers/slapd/back-monitor/ +#monitormod#olcModuleLoad: {0}back_monitor.la + +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAccess: {0}to dn="" by * read +olcAccess: {1}to * by self write by users read by anonymous auth + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcRootPW:< file://@TESTDIR@/configpw +olcAccess: {0}to * by * none + +dn: olcDatabase={1}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {1}@BACKEND@ +olcSuffix: dc=example,dc=com +olcRootDN: cn=Manager,dc=example,dc=com +olcRootPW: secret +#~null~#olcDbDirectory: @TESTDIR@/db.2.a +#indexdb#olcDbIndex: default eq +#indexdb#olcDbIndex: objectClass +#indexdb#olcDbIndex: cn +#mdb#olcDbMaxSize: 33554432 + +dn: olcDatabase={2}monitor,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {2}monitor +olcAccess: {0}to dn.subtree="cn=monitor" by * read diff --git a/tests/data/regressions/its8521/slapd-provider.ldif b/tests/data/regressions/its8521/slapd-provider.ldif new file mode 100644 index 0000000..40e3e37 --- /dev/null +++ b/tests/data/regressions/its8521/slapd-provider.ldif @@ -0,0 +1,59 @@ +dn: cn=config +objectClass: olcGlobal +cn: config +olcLogLevel: Sync +olcLogLevel: Stats +olcPidFile: @TESTDIR@/slapd.2.pid +olcArgsFile: @TESTDIR@/slapd.2.args + +dn: cn=schema,cn=config +objectClass: olcSchemaConfig +cn: schema + +include: file://@TESTWD@/@SCHEMADIR@/core.ldif +include: file://@TESTWD@/@SCHEMADIR@/cosine.ldif +include: file://@TESTWD@/@SCHEMADIR@/inetorgperson.ldif +include: file://@TESTWD@/@SCHEMADIR@/misc.ldif + +#mod#dn: cn=module{0},cn=config +#mod#objectClass: olcModuleList +#mod#cn: module{0} +#mod#olcModulePath: @TESTWD@/../servers/slapd/back-@BACKEND@/ +#mod#olcModuleLoad: {0}back_@BACKEND@.la + +#monitormod#dn: cn=module{1},cn=config +#monitormod#objectClass: olcModuleList +#monitormod#cn: module{1} +#monitormod#olcModulePath: @TESTWD@/../servers/slapd/back-monitor/ +#monitormod#olcModuleLoad: {0}back_monitor.la + +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAccess: {0}to dn="" by * read +olcAccess: {1}to * by self write by users read by anonymous auth + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcRootPW:< file://@TESTDIR@/configpw +olcAccess: {0}to * by * none + +dn: olcDatabase={1}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {1}@BACKEND@ +olcSuffix: dc=example,dc=com +olcRootDN: cn=Manager,dc=example,dc=com +olcRootPW: secret +#~null~#olcDbDirectory: @TESTDIR@/db.1.a +#indexdb#olcDbIndex: default eq +#indexdb#olcDbIndex: objectClass +#indexdb#olcDbIndex: cn +#mdb#olcDbMaxSize: 33554432 + +dn: olcDatabase={2}monitor,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {2}monitor +olcAccess: {0}to dn.subtree="cn=monitor" by * read diff --git a/tests/data/regressions/its8616/its8616 b/tests/data/regressions/its8616/its8616 new file mode 100755 index 0000000..f1e7262 --- /dev/null +++ b/tests/data/regressions/its8616/its8616 @@ -0,0 +1,259 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi + +echo "" +echo " This test tracks a case where it was not possible to modify the syncprov overlay configuration" +echo " when the provider is dynamically configured for replication." +echo " See http://www.openldap.org/its/index.cgi/?findid=8616 for more information" +echo "" + +PRODIR=$TESTDIR/pro +CFPRO=$PRODIR/slapd.d + +mkdir -p $TESTDIR $DBDIR1 $PRODIR $CFPRO + +$SLAPPASSWD -g -n >$CONFIGPWF + +ITS=8616 +ITSDIR=$DATADIR/regressions/its$ITS + +echo "Starting provider slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd-provider.ldif > $CONFLDIF +$SLAPADD -F $CFPRO -n 0 -l $CONFLDIF +$SLAPD -F $CFPRO -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that provider slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $URI1 \ + '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 + +echo "Populating database on provider..." +$LDAPADD -D $MANAGERDN -H $URI1 -w $PASSWD << EOMODS >> $TESTOUT 2>&1 +dn: dc=example,dc=com +changetype: add +objectClass: domain +objectClass: top +dc: example + +dn: ou=LDAPRoles,dc=example,dc=com +objectClass: top +objectClass: organizationalUnit +ou: LDAPRoles + +dn: dc=users,dc=example,dc=com +changetype: add +dc: users +objectClass: domain +objectClass: top + +dn: uid=johndoe,dc=users,dc=example,dc=com +changetype: add +objectClass: inetOrgPerson +objectClass: top +sn: Doe +cn: Johndoe +uid: johndoe + +dn: cn=replicator,ou=LDAPRoles,dc=example,dc=com +objectClass: top +objectClass: simpleSecurityObject +objectClass: organizationalRole +userPassword: secret +cn: replicator +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +if [ "$SYNCPROV" = syncprovmod ]; then + echo "Configuring syncprov module on the provider..." + $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1 +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModulePath: $TESTWD/../servers/slapd/overlays +olcModuleLoad: syncprov.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 "Configuring replication on the provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcOverlay={0}syncprov,olcDatabase={1}$BACKEND,cn=config +changetype: add +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncprovConfig +olcOverlay: {0}syncprov +olcSpSessionLog: 10000 +olcSpCheckpoint: 100 10 +EOF + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +sleep 1 + +echo "Setting olcSpNoPresent to TRUE on the provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcOverlay={0}syncprov,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcSpNoPresent +olcSpNoPresent: TRUE +EOF + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +sleep 1 + +echo "Changing olcSpNoPresent to FALSE on the provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcOverlay={0}syncprov,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcSpNoPresent +olcSpNoPresent: FALSE +EOF + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +sleep 1 + +echo "Changing olcSpNoPresent back to TRUE on the provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcOverlay={0}syncprov,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcSpNoPresent +olcSpNoPresent: TRUE +EOF + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +sleep 1 + +echo "Setting olcSpReloadHint to TRUE on the provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcOverlay={0}syncprov,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcSpReloadHint +olcSpReloadHint: TRUE +EOF + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +sleep 1 + +echo "Changing olcSpReloadHint to FALSE on the provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcOverlay={0}syncprov,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcSpReloadHint +olcSpReloadHint: FALSE +EOF + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +sleep 1 + +echo "Changing olcSpReloadHint back to TRUE on the provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcOverlay={0}syncprov,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcSpReloadHint +olcSpReloadHint: TRUE +EOF + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/data/regressions/its8616/slapd-provider.ldif b/tests/data/regressions/its8616/slapd-provider.ldif new file mode 100644 index 0000000..40e3e37 --- /dev/null +++ b/tests/data/regressions/its8616/slapd-provider.ldif @@ -0,0 +1,59 @@ +dn: cn=config +objectClass: olcGlobal +cn: config +olcLogLevel: Sync +olcLogLevel: Stats +olcPidFile: @TESTDIR@/slapd.2.pid +olcArgsFile: @TESTDIR@/slapd.2.args + +dn: cn=schema,cn=config +objectClass: olcSchemaConfig +cn: schema + +include: file://@TESTWD@/@SCHEMADIR@/core.ldif +include: file://@TESTWD@/@SCHEMADIR@/cosine.ldif +include: file://@TESTWD@/@SCHEMADIR@/inetorgperson.ldif +include: file://@TESTWD@/@SCHEMADIR@/misc.ldif + +#mod#dn: cn=module{0},cn=config +#mod#objectClass: olcModuleList +#mod#cn: module{0} +#mod#olcModulePath: @TESTWD@/../servers/slapd/back-@BACKEND@/ +#mod#olcModuleLoad: {0}back_@BACKEND@.la + +#monitormod#dn: cn=module{1},cn=config +#monitormod#objectClass: olcModuleList +#monitormod#cn: module{1} +#monitormod#olcModulePath: @TESTWD@/../servers/slapd/back-monitor/ +#monitormod#olcModuleLoad: {0}back_monitor.la + +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAccess: {0}to dn="" by * read +olcAccess: {1}to * by self write by users read by anonymous auth + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcRootPW:< file://@TESTDIR@/configpw +olcAccess: {0}to * by * none + +dn: olcDatabase={1}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {1}@BACKEND@ +olcSuffix: dc=example,dc=com +olcRootDN: cn=Manager,dc=example,dc=com +olcRootPW: secret +#~null~#olcDbDirectory: @TESTDIR@/db.1.a +#indexdb#olcDbIndex: default eq +#indexdb#olcDbIndex: objectClass +#indexdb#olcDbIndex: cn +#mdb#olcDbMaxSize: 33554432 + +dn: olcDatabase={2}monitor,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {2}monitor +olcAccess: {0}to dn.subtree="cn=monitor" by * read diff --git a/tests/data/regressions/its8663/its8663 b/tests/data/regressions/its8663/its8663 new file mode 100755 index 0000000..fc73e89 --- /dev/null +++ b/tests/data/regressions/its8663/its8663 @@ -0,0 +1,279 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <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 + +echo "" +echo " This test tracks a case where it was not possible to modify the memberof overlay configuration" +echo " when the provider is dynamically configured for replication." +echo " See http://www.openldap.org/its/index.cgi/?findid=8663 for more information" +echo "" + +PRODIR=$TESTDIR/pro +CFPRO=$PRODIR/slapd.d + +mkdir -p $TESTDIR $DBDIR1 $PRODIR $CFPRO + +$SLAPPASSWD -g -n >$CONFIGPWF + +ITS=8663 +ITSDIR=$DATADIR/regressions/its$ITS + +echo "Starting provider slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd-provider.ldif > $CONFLDIF +$SLAPADD -F $CFPRO -n 0 -l $CONFLDIF +$SLAPD -F $CFPRO -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that provider slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $URI1 \ + '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 + +echo "Populating database on provider..." +$LDAPADD -D $MANAGERDN -H $URI1 -w $PASSWD << EOMODS >> $TESTOUT 2>&1 +dn: dc=example,dc=com +changetype: add +objectClass: domain +objectClass: top +dc: example + +dn: ou=LDAPRoles,dc=example,dc=com +objectClass: top +objectClass: organizationalUnit +ou: LDAPRoles + +dn: dc=users,dc=example,dc=com +changetype: add +dc: users +objectClass: domain +objectClass: top + +dn: uid=johndoe,dc=users,dc=example,dc=com +changetype: add +objectClass: inetOrgPerson +objectClass: top +sn: Doe +cn: Johndoe +uid: johndoe + +dn: cn=replicator,ou=LDAPRoles,dc=example,dc=com +objectClass: top +objectClass: simpleSecurityObject +objectClass: organizationalRole +userPassword: secret +cn: replicator +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +if [ "$MEMBEROF" = memberofmod ]; then + echo "Configuring memberof module on the provider..." + $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1 +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModulePath: $TESTWD/../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 "Configuring memberof on the provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config +changetype: add +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcMemberOf +olcMemberOfGroupOC: groupOfNames +olcMemberOfMemberAD: member +olcMemberOfMemberOfAD: memberOf +olcMemberOfDN: cn=Manager,dc=example,dc=com +olcMemberOfDangling: ignore +olcMemberOfDanglingError: 13 +olcMemberOfRefInt: FALSE +olcOverlay: {0}memberof +EOF + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +sleep 1 + +echo "Setting olcMemberOfRefInt to TRUE on the provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcMemberOfRefInt +olcMemberOfRefInt: TRUE +EOF + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +sleep 1 + +echo "Changing olcMemberOfDangling to error on the provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcMemberOfDangling +olcMemberOfDangling: error +EOF + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +sleep 1 + +echo "Changing olcMemberOfDanglingError to 20 on the provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcMemberOfDanglingError +olcMemberOfDanglingError: 20 +EOF + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +sleep 1 + +echo "Setting olcMemberOfDN to cn=config on the provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcMemberOfDN +olcMemberOfDN: cn=config +EOF + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +sleep 1 + +echo "Changing olcMemberOfGroupOC to groupOfUniqueNames on the provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcMemberOfGroupOC +olcMemberOfGroupOC: groupOfNames +EOF + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +sleep 1 + +echo "Changing olcMemberOfMemberAD to uniqueMember on the provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcMemberOfMemberAD +olcMemberOfMemberAD: uniqueMember +EOF + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Changing olcMemberOfMemberOfAD to owner on the provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcMemberOfMemberOfAD +olcMemberOfMemberOfAD: owner +EOF + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/data/regressions/its8663/slapd-provider.ldif b/tests/data/regressions/its8663/slapd-provider.ldif new file mode 100644 index 0000000..40e3e37 --- /dev/null +++ b/tests/data/regressions/its8663/slapd-provider.ldif @@ -0,0 +1,59 @@ +dn: cn=config +objectClass: olcGlobal +cn: config +olcLogLevel: Sync +olcLogLevel: Stats +olcPidFile: @TESTDIR@/slapd.2.pid +olcArgsFile: @TESTDIR@/slapd.2.args + +dn: cn=schema,cn=config +objectClass: olcSchemaConfig +cn: schema + +include: file://@TESTWD@/@SCHEMADIR@/core.ldif +include: file://@TESTWD@/@SCHEMADIR@/cosine.ldif +include: file://@TESTWD@/@SCHEMADIR@/inetorgperson.ldif +include: file://@TESTWD@/@SCHEMADIR@/misc.ldif + +#mod#dn: cn=module{0},cn=config +#mod#objectClass: olcModuleList +#mod#cn: module{0} +#mod#olcModulePath: @TESTWD@/../servers/slapd/back-@BACKEND@/ +#mod#olcModuleLoad: {0}back_@BACKEND@.la + +#monitormod#dn: cn=module{1},cn=config +#monitormod#objectClass: olcModuleList +#monitormod#cn: module{1} +#monitormod#olcModulePath: @TESTWD@/../servers/slapd/back-monitor/ +#monitormod#olcModuleLoad: {0}back_monitor.la + +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAccess: {0}to dn="" by * read +olcAccess: {1}to * by self write by users read by anonymous auth + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcRootPW:< file://@TESTDIR@/configpw +olcAccess: {0}to * by * none + +dn: olcDatabase={1}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {1}@BACKEND@ +olcSuffix: dc=example,dc=com +olcRootDN: cn=Manager,dc=example,dc=com +olcRootPW: secret +#~null~#olcDbDirectory: @TESTDIR@/db.1.a +#indexdb#olcDbIndex: default eq +#indexdb#olcDbIndex: objectClass +#indexdb#olcDbIndex: cn +#mdb#olcDbMaxSize: 33554432 + +dn: olcDatabase={2}monitor,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {2}monitor +olcAccess: {0}to dn.subtree="cn=monitor" by * read diff --git a/tests/data/regressions/its8667/accounting.ldif b/tests/data/regressions/its8667/accounting.ldif new file mode 100644 index 0000000..b4e3e6f --- /dev/null +++ b/tests/data/regressions/its8667/accounting.ldif @@ -0,0 +1,63 @@ +dn: ou=Accounting,dc=example,dc=com +objectClass: organizationalunit +objectClass: top +ou: Accounting + +dn: cn=May Gaul,ou=Accounting,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: organizationalPerson +objectClass: person +objectClass: top +cn: May Gaul +sn: Gaul +carLicense: 1BMCX31 +departmentNumber: 5148 +description: This is May Gaul's description +employeeType: Temp +facsimileTelephoneNumber: +1 804 673-8690 +givenName: May +homePhone: +1 415 245-8979 +initials: M. G. +l: Sunnyvale +mail: May_Gaul@example.com +manager: cn=Fqa McMannen +mobile: +1 818 141-8493 +ou: Accounting +pager: +1 804 480-4264 +postalAddress: example # 930 +roomNumber: 5933 +secretary: cn=Daniel Encomenderos +telephoneNumber: +1 408 696-5756 +title: Associate Accounting Developer +uid: May_Gaul +userPassword:: bHVhR3lhTQ== + +dn: cn=Ann Tully,ou=Accounting,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: organizationalPerson +objectClass: person +objectClass: top +cn: Ann Tully +sn: Tully +carLicense: 3BM6G8F +departmentNumber: 1672 +description: This is Ann Tully's description +employeeType: Employee +facsimileTelephoneNumber: +1 213 206-5551 +givenName: Ann +homePhone: +1 213 246-2575 +initials: A. T. +l: Cambridge +mail: Ann_Tully@example.com +manager: cn=Buddy Wingfield +mobile: +1 213 889-1457 +ou: Accounting +pager: +1 71 105-8458 +postalAddress: example # 784 +roomNumber: 538 +secretary: cn=Minny Vahdat +telephoneNumber: +1 415 208-1794 +title: Supreme Accounting Admin +uid: Ann_Tully +userPassword:: eWxsdVRubkE= + diff --git a/tests/data/regressions/its8667/administrative.ldif b/tests/data/regressions/its8667/administrative.ldif new file mode 100644 index 0000000..943e192 --- /dev/null +++ b/tests/data/regressions/its8667/administrative.ldif @@ -0,0 +1,63 @@ +dn: ou=Administrative,dc=example,dc=com +objectClass: organizationalunit +objectClass: top +ou: Administrative + +dn: cn=Tab Danko,ou=Administrative,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: organizationalPerson +objectClass: person +objectClass: top +cn: Tab Danko +sn: Danko +carLicense: XB3M2XY +departmentNumber: 1320 +description: This is Tab Danko's description +employeeType: Employee +facsimileTelephoneNumber: +1 510 538-4771 +givenName: Tab +homePhone: +1 206 386-9666 +initials: T. D. +l: Orem +mail: Tab_Danko@example.com +manager: cn=Ingaborg Burruss +mobile: +1 206 296-7053 +ou: Administrative +pager: +1 804 647-2654 +postalAddress: example # 669 +roomNumber: 1597 +secretary: cn=Hilde McCaugherty +telephoneNumber: +1 415 622-6699 +title: Associate Administrative Yahoo +uid: Tab_Danko +userPassword:: b2tuYURiYVQ= + +dn: cn=Clary Mand,ou=Administrative,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: organizationalPerson +objectClass: person +objectClass: top +cn: Clary Mand +sn: Mand +carLicense: 2AVIDV3 +departmentNumber: 2566 +description: This is Clary Mand's description +employeeType: Temp +facsimileTelephoneNumber: +1 408 928-6670 +givenName: Clary +homePhone: +1 213 446-5803 +initials: C. M. +l: Alameda +mail: Clary_Mand@example.com +manager: cn=Ainslee Hanlan +mobile: +1 71 687-3763 +ou: Administrative +pager: +1 206 452-2059 +postalAddress: example # 55 +roomNumber: 8363 +secretary: cn=Mallik MacArthur +telephoneNumber: +1 804 111-7612 +title: Senior Administrative Stooge +uid: Clary_Mand +userPassword:: ZG5hTXlyYWxD + diff --git a/tests/data/regressions/its8667/its8667 b/tests/data/regressions/its8667/its8667 new file mode 100755 index 0000000..794075d --- /dev/null +++ b/tests/data/regressions/its8667/its8667 @@ -0,0 +1,116 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +echo "" +echo " This test tracks a case where the -g flag to slapcat fails to work" +echo " correctly, exporting the subordinate dbs as well as the root db." +echo " See http://www.openldap.org/its/index.cgi/?findid=8667 for more information." +echo "" + +DBDIR1=$TESTDIR/db.1.a +DBDIR2=$TESTDIR/db.2.a +DBDIR3=$TESTDIR/db.3.a +DBDIR4=$TESTDIR/db.4.a +CFPRO=$TESTDIR/slapd.d + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 $DBDIR3 $DBDIR4 $CFPRO + +$SLAPPASSWD -g -n >$CONFIGPWF + +ITS=8667 +ITSDIR=$DATADIR/regressions/its$ITS + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd.ldif > $CONFLDIF +$SLAPADD -F $CFPRO -n 0 -l $CONFLDIF + +echo "Populating root database..." +$SLAPADD -F $CFPRO -b "dc=example,dc=com" -l $ITSDIR/root.ldif >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapadd failed for root database ($RC)!" + exit $RC +fi + +echo "Populating accounting database..." +$SLAPADD -F $CFPRO -b "dc=accounting,dc=example,dc=com" -l $ITSDIR/accounting.ldif >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapadd failed for accounting database ($RC)!" + exit $RC +fi + +echo "Populating administrative database..." +$SLAPADD -F $CFPRO -b "dc=administrative,dc=example,dc=com" -l $ITSDIR/administrative.ldif >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapadd failed for administrative database ($RC)!" + exit $RC +fi + +echo "Populating janitorial database..." +$SLAPADD -F $CFPRO -b "dc=janitorial,dc=example,dc=com" -l $ITSDIR/janitorial.ldif >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapadd failed for janitorial database ($RC)!" + exit $RC +fi + +echo "Using slapcat -g to export only the root database..." +$SLAPCAT -F $CFPRO -g -b "dc=example,dc=com" -l $TESTDIR/slapcat.out >> $TESTOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "slapcat -g failed for root databse ($RC)!" + exit $RC +fi + +echo "Verifying Administrative subordinate is not found..." +grep "dn: ou=Administrative,dc=example,dc=com" $TESTDIR/slapcat.out >> $TESTOUT 2>&1 +RC=$? + +if test $RC = 0 ; then + echo "test failed - Administrative subordinate found." + echo "This is a regression of ITS8667" + exit 1 +fi + +echo "Verifying Accounting subordinate is not found..." +grep "dn: ou=Accounting,dc=example,dc=com" $TESTDIR/slapcat.out >> $TESTOUT 2>&1 +RC=$? + +if test $RC = 0 ; then + echo "test failed - Accounting subordinate found." + echo "This is a regression of ITS8667" + exit 1 +fi + +echo "Verifying Janitorial subordinate is not found..." +grep "dn: ou=Janitorial,dc=example,dc=com" $TESTDIR/slapcat.out >> $TESTOUT 2>&1 +RC=$? + +if test $RC = 0 ; then + echo "test failed - Janitorial subordinate found." + echo "This is a regression of ITS8667" + exit 1 +fi + +echo +echo ">>>>> Test succeeded" + +exit 0 diff --git a/tests/data/regressions/its8667/janitorial.ldif b/tests/data/regressions/its8667/janitorial.ldif new file mode 100644 index 0000000..2b3c6ec --- /dev/null +++ b/tests/data/regressions/its8667/janitorial.ldif @@ -0,0 +1,63 @@ +dn: ou=Janitorial,dc=example,dc=com +objectClass: organizationalunit +objectClass: top +ou: Janitorial + +dn: cn=Clark Soto,ou=Janitorial,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: organizationalPerson +objectClass: person +objectClass: top +cn: Clark Soto +sn: Soto +carLicense: PPTYC3Z +departmentNumber: 7897 +description: This is Clark Soto's description +employeeType: Employee +facsimileTelephoneNumber: +1 510 450-7054 +givenName: Clark +homePhone: +1 804 304-2863 +initials: C. S. +l: San Francisco +mail: Clark_Soto@example.com +manager: cn=Gerianne Skrebels +mobile: +1 206 393-4632 +ou: Janitorial +pager: +1 510 651-1646 +postalAddress: example # 395 +roomNumber: 5847 +secretary: cn=Vrouwerff Komenda +telephoneNumber: +1 415 574-1770 +title: Junior Janitorial Sales Rep +uid: Clark_Soto +userPassword:: b3RvU2tyYWxD + +dn: cn=Edmx Beaty,ou=Janitorial,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: organizationalPerson +objectClass: person +objectClass: top +cn: Edmx Beaty +sn: Beaty +carLicense: 4XOW1HI +departmentNumber: 1279 +description: This is Edmx Beaty's description +employeeType: Contract +facsimileTelephoneNumber: +1 408 460-7625 +givenName: Edmx +homePhone: +1 206 683-8029 +initials: E. B. +l: San Mateo +mail: Edmx_Beaty@example.com +manager: cn=Jilleen Funston +mobile: +1 303 400-9306 +ou: Janitorial +pager: +1 408 324-7874 +postalAddress: example # 331 +roomNumber: 389 +secretary: cn=Chick Bulifant +telephoneNumber: +1 303 427-6104 +title: Chief Janitorial Vice President +uid: Edmx_Beaty +userPassword:: eXRhZUJ4bWRF + diff --git a/tests/data/regressions/its8667/root.ldif b/tests/data/regressions/its8667/root.ldif new file mode 100644 index 0000000..3220c3e --- /dev/null +++ b/tests/data/regressions/its8667/root.ldif @@ -0,0 +1,46 @@ +dn: dc=example,dc=com +objectClass: dcObject +objectClass: organization +objectClass: top +dc: example +o: example + +dn: ou=NonSub00,dc=example,dc=com +objectClass: top +objectClass: organizationalUnit +ou: NonSub00 + +dn: ou=NonSub01,dc=example,dc=com +objectClass: top +objectClass: organizationalUnit +ou: NonSub01 + +dn: ou=NonSub02,dc=example,dc=com +objectClass: top +objectClass: organizationalUnit +ou: NonSub02 + +dn: cn=NonSubTestPerson00,ou=NonSub00,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +cn: NonSubTestPerson00 +sn: TP00 + +dn: cn=NonSubTestPerson01,ou=NonSub01,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +cn: NonSubTestPerson01 +sn: TP01 + +dn: cn=NonSubTestPerson02,ou=NonSub02,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +cn: NonSubTestPerson02 +sn: TP02 + diff --git a/tests/data/regressions/its8667/slapd.ldif b/tests/data/regressions/its8667/slapd.ldif new file mode 100644 index 0000000..2d30ff9 --- /dev/null +++ b/tests/data/regressions/its8667/slapd.ldif @@ -0,0 +1,97 @@ +dn: cn=config +objectClass: olcGlobal +cn: config +olcLogLevel: Sync +olcLogLevel: Stats +olcPidFile: @TESTDIR@/slapd.1.pid +olcArgsFile: @TESTDIR@/slapd.1.args + +dn: cn=schema,cn=config +objectClass: olcSchemaConfig +cn: schema + +include: file://@TESTWD@/@SCHEMADIR@/core.ldif +include: file://@TESTWD@/@SCHEMADIR@/cosine.ldif +include: file://@TESTWD@/@SCHEMADIR@/inetorgperson.ldif + +#mod#dn: cn=module{0},cn=config +#mod#objectClass: olcModuleList +#mod#cn: module{0} +#mod#olcModulePath: @TESTWD@/../servers/slapd/back-@BACKEND@/ +#mod#olcModuleLoad: {0}back_@BACKEND@.la + +#monitormod#dn: cn=module{1},cn=config +#monitormod#objectClass: olcModuleList +#monitormod#cn: module{1} +#monitormod#olcModulePath: @TESTWD@/../servers/slapd/back-monitor/ +#monitormod#olcModuleLoad: {0}back_monitor.la + +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAccess: {0}to dn="" by * read +olcAccess: {1}to * by self write by users read by anonymous auth + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcRootPW:< file://@TESTDIR@/configpw +olcAccess: {0}to * by * none + +dn: olcDatabase={1}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {1}@BACKEND@ +olcSuffix: ou=Accounting,dc=example,dc=com +olcSubordinate: advertise +olcRootDN: cn=Manager,dc=example,dc=com +#~null~#olcDbDirectory: @TESTDIR@/db.1.a +#indexdb#olcDbIndex: default eq +#indexdb#olcDbIndex: objectClass +#indexdb#olcDbIndex: cn +#mdb#olcDbMaxSize: 33554432 + +dn: olcDatabase={2}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {2}@BACKEND@ +olcSuffix: ou=Administrative,dc=example,dc=com +olcSubordinate: advertise +olcRootDN: cn=Manager,dc=example,dc=com +#~null~#olcDbDirectory: @TESTDIR@/db.2.a +#indexdb#olcDbIndex: default eq +#indexdb#olcDbIndex: objectClass +#indexdb#olcDbIndex: cn +#mdb#olcDbMaxSize: 33554432 + +dn: olcDatabase={3}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {3}@BACKEND@ +olcSuffix: ou=Janitorial,dc=example,dc=com +olcSubordinate: advertise +olcRootDN: cn=Manager,dc=example,dc=com +#~null~#olcDbDirectory: @TESTDIR@/db.3.a +#indexdb#olcDbIndex: default eq +#indexdb#olcDbIndex: objectClass +#indexdb#olcDbIndex: cn +#mdb#olcDbMaxSize: 33554432 + +dn: olcDatabase={4}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {4}@BACKEND@ +olcSuffix: dc=example,dc=com +olcRootDN: cn=Manager,dc=example,dc=com +olcRootPW: secret +#~null~#olcDbDirectory: @TESTDIR@/db.4.a +#indexdb#olcDbIndex: default eq +#indexdb#olcDbIndex: objectClass +#indexdb#olcDbIndex: cn +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}glue,olcDatabase={4}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +olcOverlay: {0}glue diff --git a/tests/data/regressions/its8752/its8752 b/tests/data/regressions/its8752/its8752 new file mode 100755 index 0000000..32de3c8 --- /dev/null +++ b/tests/data/regressions/its8752/its8752 @@ -0,0 +1,513 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi +if test $ACCESSLOG = accesslogno; then + echo "Accesslog overlay not available, test skipped" + exit 0 +fi +if test $BACKEND = ldif ; then + echo "$BACKEND backend unsuitable, test skipped" + exit 0 +fi + +dtest=`date +%N|sed s/...$//` + +if test $dtest = N; then + echo "nanosecond date values not supported, test skipped" + exit 0 +fi + +# This mimics the scenario where a single server has been used until now (no +# syncprov either, so no contextCSN) and we convert it to a delta-MMR setup: +# 1. stop the server (note that there is likely no contextCSN in the DB at this point) +# 2. configure all servers to delta-replicate from each other and start them up +# - empty servers will start with a refresh of the main DB +# - when the refresh is successful they should change over to replicating the log +# 3. keep making changes on all servers to see things still work + +echo "This test tracks a case where slapd deadlocks during a significant write load" +echo "See http://www.openldap.org/its/index.cgi/?findid=8752 for more information." + +MMR=4 +iterations=20000 +check_sync_every=100 +MAPSIZE=`expr 100 \* 1024 \* 1024` +XDIR=$TESTDIR/srv + +mkdir -p $TESTDIR + +ITS=8752 +ITSDIR=$DATADIR/regressions/its$ITS + +n=1 +while [ $n -le $MMR ]; do + DBDIR=${XDIR}$n/db + mkdir -p ${XDIR}$n $DBDIR.1 $DBDIR.2 + n=`expr $n + 1` +done + +KILLPIDS= + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd.conf > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep $SLEEP0 + +echo "Using ldapsearch to check that slapd is running..." +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 $SLEEP1 seconds for slapd to start..." + sleep $SLEEP1 +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Populating database on first provider..." +$LDAPADD -D $MANAGERDN -H $URI1 -w $PASSWD << EOMODS >> $TESTOUT 2>&1 +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=Jessica_Rabbit,ou=People,$BASEDN +objectClass: inetOrgPerson +cn: Jessica_Rabbit +sn: Rabbit + +dn: cn=Bugs_Bunny,ou=People,$BASEDN +objectClass: inetOrgPerson +cn: Bugs_Bunny +sn: Bunny + +dn: cn=Daffy_Duck,ou=People,$BASEDN +objectClass: inetOrgPerson +cn: Daffy_Duck +sn: Duck + +dn: cn=Elmer_Fudd,ou=People,$BASEDN +objectClass: inetOrgPerson +cn: Elmer_Fudd +sn: Fudd + +dn: cn=Cartoonia,ou=Groups,$BASEDN +objectClass: groupOfNames +cn: Cartoonia +member: cn=Roger Rabbit,ou=People,$BASEDN +member: cn=Baby Herman,ou=People,$BASEDN +EOMODS + +RC=$? + +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Stopping slapd and reworking configuration for MMR..." + +kill -HUP $KILLPIDS +wait $KILLPIDS + +KILLPIDS= +n=1 +while [ $n -le $MMR ]; do + MYURI=`eval echo '$URI'$n` + MYLOG=`eval echo '$LOG'$n` + MYCONF=`eval echo '$CONF'$n` + echo "Starting provider slapd on TCP/IP URI $MYURI" + . $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd.conf.mmr > $TESTDIR/slapd.conf + sed -e "s/MMR/$n/g" -e "s/wronglog/log/" -e "s/@MAPSIZE@/$MAPSIZE/" $TESTDIR/slapd.conf > $MYCONF + j=1 + while [ $j -le $MMR ]; do + MMCURI=`eval echo '$URI'$j` + sed -e "s|MMC${j}|${MMCURI}|" $MYCONF > $TESTDIR/slapd.conf + mv $TESTDIR/slapd.conf $MYCONF + j=`expr $j + 1` + done + if [ -f $TESTDIR/slapd.conf ]; then + rm -f $TESTDIR/slapd.conf + fi + $SLAPD -f $MYCONF -h $MYURI -d $LVL $TIMING >> $MYLOG 2>&1 & + PID=$! + if test $WAIT != 0 ; then + echo PID $PID + read foo + fi + KILLPIDS="$PID $KILLPIDS" + sleep $SLEEP1 + + echo "Using ldapsearch to check that provider slapd is running..." + for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $MYURI \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + if test $RC = 0 ; then + break + fi + echo "Waiting $SLEEP1 seconds for slapd to start..." + sleep $SLEEP1 + done + + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + n=`expr $n + 1` +done + +echo "Setting up accesslog on each master..." +n=1 +while [ $n -le $MMR ]; do + echo "Modifying dn: cn=Elmer_Fudd,ou=People,$BASEDN on master $n" + MYURI=`eval echo '$URI'$n` + $LDAPMODIFY -v -D "$MANAGERDN" -H $MYURI -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS + +dn: cn=Elmer_Fudd,ou=People,$BASEDN +changetype: modify +replace: sn +sn: Fudd +EOMODS + RC=$? + if test $RC != 0; then + echo "ldapmodify failed ($RC)" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + sleep $SLEEP1 + n=`expr $n + 1` +done + +#echo "Letting server 1 establish its own contextCSN..." +#echo "Modifying dn: cn=Elmer_Fudd,ou=People,$BASEDN on $URI1" +#$LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD > \ +# $TESTOUT 2>&1 << EOMODS +#dn: cn=Elmer_Fudd,ou=People,$BASEDN +#changetype: modify +#replace: sn +#sn: Fudd +#EOMODS + +for i in 0 1 2 3 4 5; do + j=1 + while [ $j -le $MMR ]; do + MYURI=`eval echo '$URI'$j` + $LDAPSEARCH -b "$BASEDN" -H "$MYURI" \ + '*' '+' >"$TESTDIR/server$j.out" 2>&1 + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + $LDIFFILTER -s a < "$TESTDIR/server$j.out" > "$TESTDIR/server$j.flt" + j=`expr $j + 1` + done + + in_sync=1 + j=1 + while [ $j -lt $MMR ]; do + k=$j + j=`expr $j + 1` + $CMP "$TESTDIR/server$k.flt" "$TESTDIR/server$j.flt" > $CMPOUT + if test $? != 0 ; then + in_sync=0 + fi + done + if test $in_sync = 1; then + break + fi + + echo "Waiting $SLEEP1 seconds for servers to catch up..." + sleep $SLEEP1 +done + +if test $in_sync = 0; then + echo "Servers did not replicate in time" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "The next step of the test will perform $iterations random write operations and may take some time." +echo "As this test is for a deadlock, it will take manual intervention to exit the test if one occurs." + +echo "Starting random master/entry modifications..." +DN1="cn=Elmer_Fudd,ou=People,$BASEDN" +VAL1="Fudd" + +DN2="cn=Jessica_Rabbit,ou=People,$BASEDN" +VAL2="Rabbit" + +DN3="cn=Bugs_Bunny,ou=People,$BASEDN" +VAL3="Bunny" + +DN4="cn=Daffy_Duck,ou=People,$BASEDN" +VAL4="Duck" + +n=1 +while [ $n -le $iterations ]; do + seed=`date +%N|sed s/...$//` + rvalue=`echo|awk "BEGIN {srand($seed) +{print int(1+rand()*$MMR)}}"` + MYURI=`eval echo '$URI'$rvalue` + seed=`date +%N|sed s/...$//` + rvalue=`echo|awk "BEGIN {srand($seed) +{print int(1+rand()*4)}}"` + MYDN=`eval echo '$DN'$rvalue` + MYVAL=`eval echo '$VAL'$rvalue` + echo "Modifying $MYURI entry $MYDN with value $MYVAL iteration $n of $iterations" + $LDAPMODIFY -v -D "$MANAGERDN" -H $MYURI -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS + +dn: $MYDN +changetype: modify +replace: sn +sn: $MYVAL +EOMODS + RC=$? + if test $RC != 0; then + echo "ldapmodify failed ($RC)" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + + if [ "$check_sync_every" -gt 0 ] && [ `expr $n % $check_sync_every` = 0 ]; then + i=1 + echo "Checking replication status before we start iteration $n..." + for i in 0 1 2 3 4 5; do + j=1 + while [ $j -le $MMR ]; do + MYURI=`eval echo '$URI'$j` + echo "Reading database from server $j..." + $LDAPSEARCH -b "$BASEDN" -H "$MYURI" \ + '*' '+' >"$TESTDIR/server$j.out" 2>&1 + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + $LDIFFILTER -s a < "$TESTDIR/server$j.out" > "$TESTDIR/server$j.flt" + j=`expr $j + 1` + done + + in_sync=1 + j=1 + while [ $j -lt $MMR ]; do + k=`expr $j + 1` + $CMP "$TESTDIR/server$j.flt" "$TESTDIR/server$k.flt" > $CMPOUT + if test $? != 0 ; then + in_sync=0 + fi + j=$k + done + if test $in_sync = 1; then + break + fi + + echo "Waiting $SLEEP1 seconds for servers to catch up..." + sleep $SLEEP1 + done + + if test $in_sync = 0; then + echo "Servers did not replicate in time" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + fi + n=`expr $n + 1` +done + +kill -HUP $KILLPIDS +wait $KILLPIDS + +echo "The next step of the test will perform $iterations random write operations and may take some time." +echo "As this test is for a deadlock, it will take manual intervention to exit the test if one occurs." + +echo "Starting servers again, this time with the wrong logbase setting..." +KILLPIDS= +n=1 +while [ $n -le $MMR ]; do + MYURI=`eval echo '$URI'$n` + MYLOG=`eval echo '$LOG'$n` + MYCONF=`eval echo '$CONF'$n` + echo "Starting provider slapd on TCP/IP URI $MYURI" + . $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd.conf.mmr > $TESTDIR/slapd.conf + sed -e "s/MMR/$n/g" -e "s/@MAPSIZE@/$MAPSIZE/" $TESTDIR/slapd.conf > $MYCONF + j=1 + while [ $j -le $MMR ]; do + MMCURI=`eval echo '$URI'$j` + sed -e "s|MMC${j}|${MMCURI}|" $MYCONF > $TESTDIR/slapd.conf + mv $TESTDIR/slapd.conf $MYCONF + j=`expr $j + 1` + done + if [ -f $TESTDIR/slapd.conf ]; then + rm -f $TESTDIR/slapd.conf + fi + $SLAPD -f $MYCONF -h $MYURI -d $LVL $TIMING >> $MYLOG 2>&1 & + PID=$! + if test $WAIT != 0 ; then + echo PID $PID + read foo + fi + KILLPIDS="$PID $KILLPIDS" + sleep $SLEEP1 + + echo "Using ldapsearch to check that provider slapd is running..." + for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $MYURI \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + if test $RC = 0 ; then + break + fi + echo "Waiting $SLEEP1 seconds for slapd to start..." + sleep $SLEEP1 + done + + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + n=`expr $n + 1` + done + + echo "Starting random master/entry modifications..." + n=1 + while [ $n -le $iterations ]; do + seed=`date +%N|sed s/...$//` + rvalue=`echo|awk "BEGIN {srand($seed) + {print int(1+rand()*$MMR)}}"` + MYURI=`eval echo '$URI'$rvalue` + seed=`date +%N|sed s/...$//` + rvalue=`echo|awk "BEGIN {srand($seed) + {print int(1+rand()*4)}}"` + MYDN=`eval echo '$DN'$rvalue` + MYVAL=`eval echo '$VAL'$rvalue` + echo "Modifying $MYURI entry $MYDN with value $MYVAL iteration $n of $iterations" + $LDAPMODIFY -v -D "$MANAGERDN" -H $MYURI -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS + +dn: $MYDN +changetype: modify +replace: sn +sn: $MYVAL +EOMODS +RC=$? +if test $RC != 0; then + echo "ldapmodify failed ($RC)" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +if [ "$check_sync_every" -gt 0 ] && [ `expr $n % $check_sync_every` = 0 ]; then + i=1 + echo "Checking replication status before we start iteration $n..." + for i in 0 1 2 3 4 5; do + j=1 + while [ $j -le $MMR ]; do + MYURI=`eval echo '$URI'$j` + echo "Reading database from server $j..." + $LDAPSEARCH -b "$BASEDN" -H "$MYURI" \ + '*' '+' >"$TESTDIR/server$j.out" 2>&1 + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + $LDIFFILTER -s a < "$TESTDIR/server$j.out" > "$TESTDIR/server$j.flt" + j=`expr $j + 1` + done + + in_sync=1 + j=1 + while [ $j -lt $MMR ]; do + k=`expr $j + 1` + $CMP "$TESTDIR/server$j.flt" "$TESTDIR/server$k.flt" > $CMPOUT + if test $? != 0 ; then + in_sync=0 + fi + j=$k + done + if test $in_sync = 1; then + break + fi + + echo "Waiting $SLEEP1 seconds for servers to catch up..." + sleep $SLEEP1 + done + + if test $in_sync = 0; then + echo "Servers did not replicate in time" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + fi + n=`expr $n + 1` +done + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/data/regressions/its8752/slapd.conf b/tests/data/regressions/its8752/slapd.conf new file mode 100644 index 0000000..b8f3e49 --- /dev/null +++ b/tests/data/regressions/its8752/slapd.conf @@ -0,0 +1,43 @@ +# stand-alone slapd config -- for testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @DATADIR@/test.schema + +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/:../servers/slapd/overlays +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +database config +rootpw config + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/srv1/db.1 +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub + +#monitor#database monitor diff --git a/tests/data/regressions/its8752/slapd.conf.mmr b/tests/data/regressions/its8752/slapd.conf.mmr new file mode 100644 index 0000000..578c990 --- /dev/null +++ b/tests/data/regressions/its8752/slapd.conf.mmr @@ -0,0 +1,144 @@ +# stand-alone slapd config -- for testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @DATADIR@/test.schema + +# +pidfile @TESTDIR@/slapd.MMR.pid +argsfile @TESTDIR@/slapd.MMR.args + +serverid MMR +#mod#modulepath ../servers/slapd/back-@BACKEND@/:../servers/slapd/overlays +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#syncprovmod#modulepath ../servers/slapd/overlays/ +#syncprovmod#moduleload syncprov.la +#accesslogmod#modulepath ../servers/slapd/overlays/ +#accesslogmod#moduleload accesslog.la + +database config +rootpw config + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/srvMMR/db.1 +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub + +syncrepl + rid=001 + provider=MMC1 + bindmethod=simple + binddn="cn=Manager,dc=example,dc=com" + credentials=secret + type=refreshAndPersist + searchbase="dc=example,dc=com" + filter="(objectclass=*)" + scope=sub + schemachecking=on + retry="5 10 60 +" + logbase="cn=log" + logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" + syncdata=accesslog + sizeLimit=unlimited + timelimit=unlimited + +syncrepl + rid=002 + provider=MMC2 + bindmethod=simple + binddn="cn=Manager,dc=example,dc=com" + credentials=secret + type=refreshAndPersist + searchbase="dc=example,dc=com" + filter="(objectclass=*)" + scope=sub + schemachecking=on + retry="5 10 60 +" + logbase="cn=log" + logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" + syncdata=accesslog + sizeLimit=unlimited + timelimit=unlimited + +syncrepl + rid=003 + provider=MMC3 + bindmethod=simple + binddn="cn=Manager,dc=example,dc=com" + credentials=secret + type=refreshAndPersist + searchbase="dc=example,dc=com" + filter="(objectclass=*)" + scope=sub + schemachecking=on + retry="5 10 60 +" + logbase="cn=log" + logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" + syncdata=accesslog + sizeLimit=unlimited + timelimit=unlimited + +syncrepl + rid=004 + provider=MMC4 + bindmethod=simple + binddn="cn=Manager,dc=example,dc=com" + credentials=secret + type=refreshAndPersist + searchbase="dc=example,dc=com" + filter="(objectclass=*)" + scope=sub + schemachecking=on + retry="5 10 60 +" + logbase="cn=log" + logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" + syncdata=accesslog + sizeLimit=unlimited + timelimit=unlimited + +mirrormode TRUE + +overlay syncprov +syncprov-sessionlog 100 +syncprov-checkpoint 100 10 + +overlay accesslog +logdb cn=log +logops writes +logsuccess TRUE +logpurge 24:00 01+00:00 + +database @BACKEND@ +suffix "cn=log" +rootdn "cn=Manager,dc=example,dc=com" +#~null~#directory @TESTDIR@/srvMMR/db.2 +#indexdb#index objectClass eq +#indexdb#index entryCSN,entryUUID,reqEnd,reqResult,reqStart eq +#mdb#maxsize @MAPSIZE@ + +overlay syncprov +syncprov-reloadhint true +syncprov-nopresent true + +#monitor#database monitor diff --git a/tests/data/regressions/its8800/db.ldif b/tests/data/regressions/its8800/db.ldif new file mode 100644 index 0000000..4e6591c --- /dev/null +++ b/tests/data/regressions/its8800/db.ldif @@ -0,0 +1,9380 @@ +dn: dc=example,dc=com +objectClass: dcObject +objectClass: organization +dc: example +o: example +o: Example domain for holding data +postalAddress: Example Organization, LLC$1234 Anywhere Street$Example, CA 99 + 999 +description: Example Organization +street: 1234 Anywhere Street +l: Example +st: CA +postalCode: 99999 +telephoneNumber: +1 234 567 8910 +businessCategory: Example +businessCategory: Examples +structuralObjectClass: organization +entryUUID: 156eb8cc-18e9-1027-80e5-d3f2010890dc +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20030512171533Z +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170401111056Z +entryCSN: 20171130221813.848426Z#000000#004#000000 +contextCSN: 20171203010043.825769Z#000000#001#000000 +contextCSN: 20171130222521.056018Z#000000#002#000000 +contextCSN: 20171130222318.939265Z#000000#003#000000 +contextCSN: 20171201011219.228381Z#000000#004#000000 + +dn: ou=user,dc=example,dc=com +objectClass: organizationalUnit +ou: user +structuralObjectClass: organizationalUnit +entryUUID: 159cc9b0-18e9-1027-80e6-d3f2010890dc +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20030512171533Z +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20030512171533Z +entryCSN: 20171130221813.848561Z#000000#004#000000 + +dn: uid=user.1,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.1 +mail: user.1@example.com +o: example +initials: u.1 +structuralObjectClass: inetOrgPerson +uidNumber: 1005 +gidNumber: 1012 +loginShell: /bin/bash +title: user.1 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.1 +cn: User 1 +displayName: User 1 +givenName: User +sn: 1 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25845f6c-9eff-1037-879e-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.736705Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.2,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.2 +mail: user.2@example.com +o: example +initials: u.2 +structuralObjectClass: inetOrgPerson +uidNumber: 1006 +gidNumber: 1013 +loginShell: /bin/bash +title: user.2 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.2 +cn: User 2 +displayName: User 2 +givenName: User +sn: 2 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25846476-9eff-1037-879f-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.736859Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.3,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.3 +mail: user.3@example.com +o: example +initials: u.3 +structuralObjectClass: inetOrgPerson +uidNumber: 1007 +gidNumber: 1014 +loginShell: /bin/bash +title: user.3 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.3 +cn: User 3 +displayName: User 3 +givenName: User +sn: 3 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258467be-9eff-1037-87a0-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.736944Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.4,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.4 +mail: user.4@example.com +o: example +initials: u.4 +structuralObjectClass: inetOrgPerson +uidNumber: 1008 +gidNumber: 1015 +loginShell: /bin/bash +title: user.4 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.4 +cn: User 4 +displayName: User 4 +givenName: User +sn: 4 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25846b10-9eff-1037-87a1-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.737029Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.5,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.5 +mail: user.5@example.com +o: example +initials: u.5 +structuralObjectClass: inetOrgPerson +uidNumber: 1009 +gidNumber: 1016 +loginShell: /bin/bash +title: user.5 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.5 +cn: User 5 +displayName: User 5 +givenName: User +sn: 5 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25846dae-9eff-1037-87a2-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.737096Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.6,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.6 +mail: user.6@example.com +o: example +initials: u.6 +structuralObjectClass: inetOrgPerson +uidNumber: 1010 +gidNumber: 1017 +loginShell: /bin/bash +title: user.6 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.6 +cn: User 6 +displayName: User 6 +givenName: User +sn: 6 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584709c-9eff-1037-87a3-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.737171Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.7,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.7 +mail: user.7@example.com +o: example +initials: u.7 +structuralObjectClass: inetOrgPerson +uidNumber: 1011 +gidNumber: 1018 +loginShell: /bin/bash +title: user.7 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.7 +cn: User 7 +displayName: User 7 +givenName: User +sn: 7 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25847312-9eff-1037-87a4-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.737235Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.8,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.8 +mail: user.8@example.com +o: example +initials: u.8 +structuralObjectClass: inetOrgPerson +uidNumber: 1012 +gidNumber: 1019 +loginShell: /bin/bash +title: user.8 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.8 +cn: User 8 +displayName: User 8 +givenName: User +sn: 8 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25847600-9eff-1037-87a5-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.737309Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.9,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.9 +mail: user.9@example.com +o: example +initials: u.9 +structuralObjectClass: inetOrgPerson +uidNumber: 1013 +gidNumber: 1020 +loginShell: /bin/bash +title: user.9 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.9 +cn: User 9 +displayName: User 9 +givenName: User +sn: 9 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25847880-9eff-1037-87a6-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.737373Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.10,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.10 +mail: user.10@example.com +o: example +initials: u.10 +structuralObjectClass: inetOrgPerson +uidNumber: 1014 +gidNumber: 1021 +loginShell: /bin/bash +title: user.10 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.10 +cn: User 10 +displayName: User 10 +givenName: User +sn: 10 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25847b14-9eff-1037-87a7-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.737439Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.11,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.11 +mail: user.11@example.com +o: example +initials: u.11 +structuralObjectClass: inetOrgPerson +uidNumber: 1015 +gidNumber: 1022 +loginShell: /bin/bash +title: user.11 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.11 +cn: User 11 +displayName: User 11 +givenName: User +sn: 11 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25847d94-9eff-1037-87a8-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.737503Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.12,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.12 +mail: user.12@example.com +o: example +initials: u.12 +structuralObjectClass: inetOrgPerson +uidNumber: 1016 +gidNumber: 1023 +loginShell: /bin/bash +title: user.12 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.12 +cn: User 12 +displayName: User 12 +givenName: User +sn: 12 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25848078-9eff-1037-87a9-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.737577Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.13,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.13 +mail: user.13@example.com +o: example +initials: u.13 +structuralObjectClass: inetOrgPerson +uidNumber: 1017 +gidNumber: 1024 +loginShell: /bin/bash +title: user.13 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.13 +cn: User 13 +displayName: User 13 +givenName: User +sn: 13 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258482ee-9eff-1037-87aa-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.737641Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.14,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.14 +mail: user.14@example.com +o: example +initials: u.14 +structuralObjectClass: inetOrgPerson +uidNumber: 1018 +gidNumber: 1025 +loginShell: /bin/bash +title: user.14 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.14 +cn: User 14 +displayName: User 14 +givenName: User +sn: 14 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584865e-9eff-1037-87ab-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.737728Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.15,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.15 +mail: user.15@example.com +o: example +initials: u.15 +structuralObjectClass: inetOrgPerson +uidNumber: 1019 +gidNumber: 1026 +loginShell: /bin/bash +title: user.15 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.15 +cn: User 15 +displayName: User 15 +givenName: User +sn: 15 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25848956-9eff-1037-87ac-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.737804Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.16,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.16 +mail: user.16@example.com +o: example +initials: u.16 +structuralObjectClass: inetOrgPerson +uidNumber: 1020 +gidNumber: 1027 +loginShell: /bin/bash +title: user.16 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.16 +cn: User 16 +displayName: User 16 +givenName: User +sn: 16 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25848bd6-9eff-1037-87ad-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.737868Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.17,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.17 +mail: user.17@example.com +o: example +initials: u.17 +structuralObjectClass: inetOrgPerson +uidNumber: 1021 +gidNumber: 1028 +loginShell: /bin/bash +title: user.17 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.17 +cn: User 17 +displayName: User 17 +givenName: User +sn: 17 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25848e38-9eff-1037-87ae-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.737930Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.18,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.18 +mail: user.18@example.com +o: example +initials: u.18 +structuralObjectClass: inetOrgPerson +uidNumber: 1022 +gidNumber: 1029 +loginShell: /bin/bash +title: user.18 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.18 +cn: User 18 +displayName: User 18 +givenName: User +sn: 18 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25849126-9eff-1037-87af-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.738004Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.19,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.19 +mail: user.19@example.com +o: example +initials: u.19 +structuralObjectClass: inetOrgPerson +uidNumber: 1023 +gidNumber: 1030 +loginShell: /bin/bash +title: user.19 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.19 +cn: User 19 +displayName: User 19 +givenName: User +sn: 19 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584939c-9eff-1037-87b0-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.738067Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.20,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.20 +mail: user.20@example.com +o: example +initials: u.20 +structuralObjectClass: inetOrgPerson +uidNumber: 1024 +gidNumber: 1031 +loginShell: /bin/bash +title: user.20 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.20 +cn: User 20 +displayName: User 20 +givenName: User +sn: 20 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258495fe-9eff-1037-87b1-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.738128Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.21,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.21 +mail: user.21@example.com +o: example +initials: u.21 +structuralObjectClass: inetOrgPerson +uidNumber: 1025 +gidNumber: 1032 +loginShell: /bin/bash +title: user.21 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.21 +cn: User 21 +displayName: User 21 +givenName: User +sn: 21 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584990a-9eff-1037-87b2-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.738206Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.22,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.22 +mail: user.22@example.com +o: example +initials: u.22 +structuralObjectClass: inetOrgPerson +uidNumber: 1026 +gidNumber: 1033 +loginShell: /bin/bash +title: user.22 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.22 +cn: User 22 +displayName: User 22 +givenName: User +sn: 22 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25849b9e-9eff-1037-87b3-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.738272Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.23,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.23 +mail: user.23@example.com +o: example +initials: u.23 +structuralObjectClass: inetOrgPerson +uidNumber: 1027 +gidNumber: 1034 +loginShell: /bin/bash +title: user.23 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.23 +cn: User 23 +displayName: User 23 +givenName: User +sn: 23 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25849e00-9eff-1037-87b4-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.738334Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.24,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.24 +mail: user.24@example.com +o: example +initials: u.24 +structuralObjectClass: inetOrgPerson +uidNumber: 1028 +gidNumber: 1035 +loginShell: /bin/bash +title: user.24 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.24 +cn: User 24 +displayName: User 24 +givenName: User +sn: 24 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584a0e4-9eff-1037-87b5-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.738407Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.25,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.25 +mail: user.25@example.com +o: example +initials: u.25 +structuralObjectClass: inetOrgPerson +uidNumber: 1029 +gidNumber: 1036 +loginShell: /bin/bash +title: user.25 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.25 +cn: User 25 +displayName: User 25 +givenName: User +sn: 25 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584a350-9eff-1037-87b6-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.738469Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.26,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.26 +mail: user.26@example.com +o: example +initials: u.26 +structuralObjectClass: inetOrgPerson +uidNumber: 1030 +gidNumber: 1037 +loginShell: /bin/bash +title: user.26 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.26 +cn: User 26 +displayName: User 26 +givenName: User +sn: 26 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584a67a-9eff-1037-87b7-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.738551Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.27,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.27 +mail: user.27@example.com +o: example +initials: u.27 +structuralObjectClass: inetOrgPerson +uidNumber: 1031 +gidNumber: 1038 +loginShell: /bin/bash +title: user.27 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.27 +cn: User 27 +displayName: User 27 +givenName: User +sn: 27 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584a940-9eff-1037-87b8-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.738621Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.28,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.28 +mail: user.28@example.com +o: example +initials: u.28 +structuralObjectClass: inetOrgPerson +uidNumber: 1032 +gidNumber: 1039 +loginShell: /bin/bash +title: user.28 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.28 +cn: User 28 +displayName: User 28 +givenName: User +sn: 28 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584ac1a-9eff-1037-87b9-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.738693Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.29,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.29 +mail: user.29@example.com +o: example +initials: u.29 +structuralObjectClass: inetOrgPerson +uidNumber: 1033 +gidNumber: 1040 +loginShell: /bin/bash +title: user.29 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.29 +cn: User 29 +displayName: User 29 +givenName: User +sn: 29 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584aecc-9eff-1037-87ba-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.738763Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.30,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.30 +mail: user.30@example.com +o: example +initials: u.30 +structuralObjectClass: inetOrgPerson +uidNumber: 1034 +gidNumber: 1041 +loginShell: /bin/bash +title: user.30 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.30 +cn: User 30 +displayName: User 30 +givenName: User +sn: 30 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584b1ba-9eff-1037-87bb-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.738838Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.31,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.31 +mail: user.31@example.com +o: example +initials: u.31 +structuralObjectClass: inetOrgPerson +uidNumber: 1035 +gidNumber: 1042 +loginShell: /bin/bash +title: user.31 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.31 +cn: User 31 +displayName: User 31 +givenName: User +sn: 31 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584b426-9eff-1037-87bc-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.738900Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.32,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.32 +mail: user.32@example.com +o: example +initials: u.32 +structuralObjectClass: inetOrgPerson +uidNumber: 1036 +gidNumber: 1043 +loginShell: /bin/bash +title: user.32 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.32 +cn: User 32 +displayName: User 32 +givenName: User +sn: 32 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584b688-9eff-1037-87bd-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.738961Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.33,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.33 +mail: user.33@example.com +o: example +initials: u.33 +structuralObjectClass: inetOrgPerson +uidNumber: 1037 +gidNumber: 1044 +loginShell: /bin/bash +title: user.33 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.33 +cn: User 33 +displayName: User 33 +givenName: User +sn: 33 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584b944-9eff-1037-87be-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.739031Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.34,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.34 +mail: user.34@example.com +o: example +initials: u.34 +structuralObjectClass: inetOrgPerson +uidNumber: 1038 +gidNumber: 1045 +loginShell: /bin/bash +title: user.34 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.34 +cn: User 34 +displayName: User 34 +givenName: User +sn: 34 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584bbc4-9eff-1037-87bf-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.739095Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.35,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.35 +mail: user.35@example.com +o: example +initials: u.35 +structuralObjectClass: inetOrgPerson +uidNumber: 1039 +gidNumber: 1046 +loginShell: /bin/bash +title: user.35 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.35 +cn: User 35 +displayName: User 35 +givenName: User +sn: 35 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584be1c-9eff-1037-87c0-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.739156Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.36,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.36 +mail: user.36@example.com +o: example +initials: u.36 +structuralObjectClass: inetOrgPerson +uidNumber: 1040 +gidNumber: 1047 +loginShell: /bin/bash +title: user.36 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.36 +cn: User 36 +displayName: User 36 +givenName: User +sn: 36 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584c150-9eff-1037-87c1-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.739236Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.37,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.37 +mail: user.37@example.com +o: example +initials: u.37 +structuralObjectClass: inetOrgPerson +uidNumber: 1041 +gidNumber: 1048 +loginShell: /bin/bash +title: user.37 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.37 +cn: User 37 +displayName: User 37 +givenName: User +sn: 37 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584c3c6-9eff-1037-87c2-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.739301Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.38,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.38 +mail: user.38@example.com +o: example +initials: u.38 +structuralObjectClass: inetOrgPerson +uidNumber: 1042 +gidNumber: 1049 +loginShell: /bin/bash +title: user.38 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.38 +cn: User 38 +displayName: User 38 +givenName: User +sn: 38 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584c740-9eff-1037-87c3-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.739389Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.39,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.39 +mail: user.39@example.com +o: example +initials: u.39 +structuralObjectClass: inetOrgPerson +uidNumber: 1043 +gidNumber: 1050 +loginShell: /bin/bash +title: user.39 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.39 +cn: User 39 +displayName: User 39 +givenName: User +sn: 39 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584ca10-9eff-1037-87c4-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.739461Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.40,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.40 +mail: user.40@example.com +o: example +initials: u.40 +structuralObjectClass: inetOrgPerson +uidNumber: 1044 +gidNumber: 1051 +loginShell: /bin/bash +title: user.40 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.40 +cn: User 40 +displayName: User 40 +givenName: User +sn: 40 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584ccf4-9eff-1037-87c5-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.739535Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.41,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.41 +mail: user.41@example.com +o: example +initials: u.41 +structuralObjectClass: inetOrgPerson +uidNumber: 1045 +gidNumber: 1052 +loginShell: /bin/bash +title: user.41 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.41 +cn: User 41 +displayName: User 41 +givenName: User +sn: 41 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584cf4c-9eff-1037-87c6-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.739596Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.42,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.42 +mail: user.42@example.com +o: example +initials: u.42 +structuralObjectClass: inetOrgPerson +uidNumber: 1046 +gidNumber: 1053 +loginShell: /bin/bash +title: user.42 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.42 +cn: User 42 +displayName: User 42 +givenName: User +sn: 42 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584d456-9eff-1037-87c7-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.739723Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.43,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.43 +mail: user.43@example.com +o: example +initials: u.43 +structuralObjectClass: inetOrgPerson +uidNumber: 1047 +gidNumber: 1054 +loginShell: /bin/bash +title: user.43 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.43 +cn: User 43 +displayName: User 43 +givenName: User +sn: 43 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584d708-9eff-1037-87c8-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.739793Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.44,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.44 +mail: user.44@example.com +o: example +initials: u.44 +structuralObjectClass: inetOrgPerson +uidNumber: 1048 +gidNumber: 1055 +loginShell: /bin/bash +title: user.44 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.44 +cn: User 44 +displayName: User 44 +givenName: User +sn: 44 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584d9c4-9eff-1037-87c9-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.739863Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.45,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.45 +mail: user.45@example.com +o: example +initials: u.45 +structuralObjectClass: inetOrgPerson +uidNumber: 1049 +gidNumber: 1056 +loginShell: /bin/bash +title: user.45 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.45 +cn: User 45 +displayName: User 45 +givenName: User +sn: 45 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584dcc6-9eff-1037-87ca-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.739940Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.46,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.46 +mail: user.46@example.com +o: example +initials: u.46 +structuralObjectClass: inetOrgPerson +uidNumber: 1050 +gidNumber: 1057 +loginShell: /bin/bash +title: user.46 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.46 +cn: User 46 +displayName: User 46 +givenName: User +sn: 46 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584df3c-9eff-1037-87cb-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.740004Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.47,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.47 +mail: user.47@example.com +o: example +initials: u.47 +structuralObjectClass: inetOrgPerson +uidNumber: 1051 +gidNumber: 1058 +loginShell: /bin/bash +title: user.47 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.47 +cn: User 47 +displayName: User 47 +givenName: User +sn: 47 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584e194-9eff-1037-87cc-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.740063Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.48,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.48 +mail: user.48@example.com +o: example +initials: u.48 +structuralObjectClass: inetOrgPerson +uidNumber: 1052 +gidNumber: 1059 +loginShell: /bin/bash +title: user.48 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.48 +cn: User 48 +displayName: User 48 +givenName: User +sn: 48 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584e450-9eff-1037-87cd-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.740134Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.49,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.49 +mail: user.49@example.com +o: example +initials: u.49 +structuralObjectClass: inetOrgPerson +uidNumber: 1053 +gidNumber: 1060 +loginShell: /bin/bash +title: user.49 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.49 +cn: User 49 +displayName: User 49 +givenName: User +sn: 49 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584e6a8-9eff-1037-87ce-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.740194Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.50,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.50 +mail: user.50@example.com +o: example +initials: u.50 +structuralObjectClass: inetOrgPerson +uidNumber: 1054 +gidNumber: 1061 +loginShell: /bin/bash +title: user.50 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.50 +cn: User 50 +displayName: User 50 +givenName: User +sn: 50 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584e914-9eff-1037-87cf-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.740255Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.51,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.51 +mail: user.51@example.com +o: example +initials: u.51 +structuralObjectClass: inetOrgPerson +uidNumber: 1055 +gidNumber: 1062 +loginShell: /bin/bash +title: user.51 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.51 +cn: User 51 +displayName: User 51 +givenName: User +sn: 51 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584ec0c-9eff-1037-87d0-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.740331Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.52,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.52 +mail: user.52@example.com +o: example +initials: u.52 +structuralObjectClass: inetOrgPerson +uidNumber: 1056 +gidNumber: 1063 +loginShell: /bin/bash +title: user.52 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.52 +cn: User 52 +displayName: User 52 +givenName: User +sn: 52 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584ee78-9eff-1037-87d1-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.740394Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.53,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.53 +mail: user.53@example.com +o: example +initials: u.53 +structuralObjectClass: inetOrgPerson +uidNumber: 1057 +gidNumber: 1064 +loginShell: /bin/bash +title: user.53 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.53 +cn: User 53 +displayName: User 53 +givenName: User +sn: 53 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584f0d0-9eff-1037-87d2-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.740453Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.54,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.54 +mail: user.54@example.com +o: example +initials: u.54 +structuralObjectClass: inetOrgPerson +uidNumber: 1058 +gidNumber: 1065 +loginShell: /bin/bash +title: user.54 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.54 +cn: User 54 +displayName: User 54 +givenName: User +sn: 54 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584f3a0-9eff-1037-87d3-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.740525Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.55,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.55 +mail: user.55@example.com +o: example +initials: u.55 +structuralObjectClass: inetOrgPerson +uidNumber: 1059 +gidNumber: 1066 +loginShell: /bin/bash +title: user.55 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.55 +cn: User 55 +displayName: User 55 +givenName: User +sn: 55 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584f602-9eff-1037-87d4-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.740586Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.56,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.56 +mail: user.56@example.com +o: example +initials: u.56 +structuralObjectClass: inetOrgPerson +uidNumber: 1060 +gidNumber: 1067 +loginShell: /bin/bash +title: user.56 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.56 +cn: User 56 +displayName: User 56 +givenName: User +sn: 56 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584f8b4-9eff-1037-87d5-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.740655Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.57,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.57 +mail: user.57@example.com +o: example +initials: u.57 +structuralObjectClass: inetOrgPerson +uidNumber: 1061 +gidNumber: 1068 +loginShell: /bin/bash +title: user.57 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.57 +cn: User 57 +displayName: User 57 +givenName: User +sn: 57 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584fba2-9eff-1037-87d6-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.740730Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.58,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.58 +mail: user.58@example.com +o: example +initials: u.58 +structuralObjectClass: inetOrgPerson +uidNumber: 1062 +gidNumber: 1069 +loginShell: /bin/bash +title: user.58 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.58 +cn: User 58 +displayName: User 58 +givenName: User +sn: 58 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2584fe22-9eff-1037-87d7-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.740794Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.59,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.59 +mail: user.59@example.com +o: example +initials: u.59 +structuralObjectClass: inetOrgPerson +uidNumber: 1063 +gidNumber: 1070 +loginShell: /bin/bash +title: user.59 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.59 +cn: User 59 +displayName: User 59 +givenName: User +sn: 59 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258500c0-9eff-1037-87d8-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.740862Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.60,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.60 +mail: user.60@example.com +o: example +initials: u.60 +structuralObjectClass: inetOrgPerson +uidNumber: 1064 +gidNumber: 1071 +loginShell: /bin/bash +title: user.60 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.60 +cn: User 60 +displayName: User 60 +givenName: User +sn: 60 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585039a-9eff-1037-87d9-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.740934Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.61,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.61 +mail: user.61@example.com +o: example +initials: u.61 +structuralObjectClass: inetOrgPerson +uidNumber: 1065 +gidNumber: 1072 +loginShell: /bin/bash +title: user.61 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.61 +cn: User 61 +displayName: User 61 +givenName: User +sn: 61 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258505fc-9eff-1037-87da-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.740995Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.62,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.62 +mail: user.62@example.com +o: example +initials: u.62 +structuralObjectClass: inetOrgPerson +uidNumber: 1066 +gidNumber: 1073 +loginShell: /bin/bash +title: user.62 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.62 +cn: User 62 +displayName: User 62 +givenName: User +sn: 62 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25850872-9eff-1037-87db-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.741058Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.63,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.63 +mail: user.63@example.com +o: example +initials: u.63 +structuralObjectClass: inetOrgPerson +uidNumber: 1067 +gidNumber: 1074 +loginShell: /bin/bash +title: user.63 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.63 +cn: User 63 +displayName: User 63 +givenName: User +sn: 63 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25850b24-9eff-1037-87dc-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.741127Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.64,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.64 +mail: user.64@example.com +o: example +initials: u.64 +structuralObjectClass: inetOrgPerson +uidNumber: 1068 +gidNumber: 1075 +loginShell: /bin/bash +title: user.64 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.64 +cn: User 64 +displayName: User 64 +givenName: User +sn: 64 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25850d90-9eff-1037-87dd-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.741189Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.65,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.65 +mail: user.65@example.com +o: example +initials: u.65 +structuralObjectClass: inetOrgPerson +uidNumber: 1069 +gidNumber: 1076 +loginShell: /bin/bash +title: user.65 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.65 +cn: User 65 +displayName: User 65 +givenName: User +sn: 65 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25850fde-9eff-1037-87de-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.741248Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.66,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.66 +mail: user.66@example.com +o: example +initials: u.66 +structuralObjectClass: inetOrgPerson +uidNumber: 1070 +gidNumber: 1077 +loginShell: /bin/bash +title: user.66 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.66 +cn: User 66 +displayName: User 66 +givenName: User +sn: 66 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258512ea-9eff-1037-87df-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.741326Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.67,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.67 +mail: user.67@example.com +o: example +initials: u.67 +structuralObjectClass: inetOrgPerson +uidNumber: 1071 +gidNumber: 1078 +loginShell: /bin/bash +title: user.67 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.67 +cn: User 67 +displayName: User 67 +givenName: User +sn: 67 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585154c-9eff-1037-87e0-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.741388Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.68,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.68 +mail: user.68@example.com +o: example +initials: u.68 +structuralObjectClass: inetOrgPerson +uidNumber: 1072 +gidNumber: 1079 +loginShell: /bin/bash +title: user.68 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.68 +cn: User 68 +displayName: User 68 +givenName: User +sn: 68 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258517ae-9eff-1037-87e1-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.741448Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.69,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.69 +mail: user.69@example.com +o: example +initials: u.69 +structuralObjectClass: inetOrgPerson +uidNumber: 1073 +gidNumber: 1080 +loginShell: /bin/bash +title: user.69 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.69 +cn: User 69 +displayName: User 69 +givenName: User +sn: 69 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25851a6a-9eff-1037-87e2-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.741518Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.70,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.70 +mail: user.70@example.com +o: example +initials: u.70 +structuralObjectClass: inetOrgPerson +uidNumber: 1074 +gidNumber: 1081 +loginShell: /bin/bash +title: user.70 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.70 +cn: User 70 +displayName: User 70 +givenName: User +sn: 70 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25851cea-9eff-1037-87e3-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.741582Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.71,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.71 +mail: user.71@example.com +o: example +initials: u.71 +structuralObjectClass: inetOrgPerson +uidNumber: 1075 +gidNumber: 1082 +loginShell: /bin/bash +title: user.71 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.71 +cn: User 71 +displayName: User 71 +givenName: User +sn: 71 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25851f38-9eff-1037-87e4-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.741641Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.72,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.72 +mail: user.72@example.com +o: example +initials: u.72 +structuralObjectClass: inetOrgPerson +uidNumber: 1076 +gidNumber: 1083 +loginShell: /bin/bash +title: user.72 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.72 +cn: User 72 +displayName: User 72 +givenName: User +sn: 72 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585229e-9eff-1037-87e5-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.741728Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.73,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.73 +mail: user.73@example.com +o: example +initials: u.73 +structuralObjectClass: inetOrgPerson +uidNumber: 1077 +gidNumber: 1084 +loginShell: /bin/bash +title: user.73 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.73 +cn: User 73 +displayName: User 73 +givenName: User +sn: 73 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25852550-9eff-1037-87e6-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.741797Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.74,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.74 +mail: user.74@example.com +o: example +initials: u.74 +structuralObjectClass: inetOrgPerson +uidNumber: 1078 +gidNumber: 1085 +loginShell: /bin/bash +title: user.74 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.74 +cn: User 74 +displayName: User 74 +givenName: User +sn: 74 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258527da-9eff-1037-87e7-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.741862Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.75,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.75 +mail: user.75@example.com +o: example +initials: u.75 +structuralObjectClass: inetOrgPerson +uidNumber: 1079 +gidNumber: 1086 +loginShell: /bin/bash +title: user.75 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.75 +cn: User 75 +displayName: User 75 +givenName: User +sn: 75 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25852aa0-9eff-1037-87e8-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.741933Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.76,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.76 +mail: user.76@example.com +o: example +initials: u.76 +structuralObjectClass: inetOrgPerson +uidNumber: 1080 +gidNumber: 1087 +loginShell: /bin/bash +title: user.76 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.76 +cn: User 76 +displayName: User 76 +givenName: User +sn: 76 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25852d0c-9eff-1037-87e9-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.741996Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.77,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.77 +mail: user.77@example.com +o: example +initials: u.77 +structuralObjectClass: inetOrgPerson +uidNumber: 1081 +gidNumber: 1088 +loginShell: /bin/bash +title: user.77 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.77 +cn: User 77 +displayName: User 77 +givenName: User +sn: 77 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25852f64-9eff-1037-87ea-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.742055Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.78,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.78 +mail: user.78@example.com +o: example +initials: u.78 +structuralObjectClass: inetOrgPerson +uidNumber: 1082 +gidNumber: 1089 +loginShell: /bin/bash +title: user.78 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.78 +cn: User 78 +displayName: User 78 +givenName: User +sn: 78 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585323e-9eff-1037-87eb-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.742128Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.79,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.79 +mail: user.79@example.com +o: example +initials: u.79 +structuralObjectClass: inetOrgPerson +uidNumber: 1083 +gidNumber: 1090 +loginShell: /bin/bash +title: user.79 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.79 +cn: User 79 +displayName: User 79 +givenName: User +sn: 79 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25853496-9eff-1037-87ec-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.742189Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.80,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.80 +mail: user.80@example.com +o: example +initials: u.80 +structuralObjectClass: inetOrgPerson +uidNumber: 1084 +gidNumber: 1091 +loginShell: /bin/bash +title: user.80 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.80 +cn: User 80 +displayName: User 80 +givenName: User +sn: 80 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25853810-9eff-1037-87ed-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.742277Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.81,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.81 +mail: user.81@example.com +o: example +initials: u.81 +structuralObjectClass: inetOrgPerson +uidNumber: 1085 +gidNumber: 1092 +loginShell: /bin/bash +title: user.81 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.81 +cn: User 81 +displayName: User 81 +givenName: User +sn: 81 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25853b1c-9eff-1037-87ee-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.742355Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.82,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.82 +mail: user.82@example.com +o: example +initials: u.82 +structuralObjectClass: inetOrgPerson +uidNumber: 1086 +gidNumber: 1093 +loginShell: /bin/bash +title: user.82 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.82 +cn: User 82 +displayName: User 82 +givenName: User +sn: 82 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25853da6-9eff-1037-87ef-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.742420Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.83,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.83 +mail: user.83@example.com +o: example +initials: u.83 +structuralObjectClass: inetOrgPerson +uidNumber: 1087 +gidNumber: 1094 +loginShell: /bin/bash +title: user.83 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.83 +cn: User 83 +displayName: User 83 +givenName: User +sn: 83 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25854008-9eff-1037-87f0-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.742481Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.84,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.84 +mail: user.84@example.com +o: example +initials: u.84 +structuralObjectClass: inetOrgPerson +uidNumber: 1088 +gidNumber: 1095 +loginShell: /bin/bash +title: user.84 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.84 +cn: User 84 +displayName: User 84 +givenName: User +sn: 84 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258542ce-9eff-1037-87f1-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.742553Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.85,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.85 +mail: user.85@example.com +o: example +initials: u.85 +structuralObjectClass: inetOrgPerson +uidNumber: 1089 +gidNumber: 1096 +loginShell: /bin/bash +title: user.85 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.85 +cn: User 85 +displayName: User 85 +givenName: User +sn: 85 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25854530-9eff-1037-87f2-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.742614Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.86,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.86 +mail: user.86@example.com +o: example +initials: u.86 +structuralObjectClass: inetOrgPerson +uidNumber: 1090 +gidNumber: 1097 +loginShell: /bin/bash +title: user.86 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.86 +cn: User 86 +displayName: User 86 +givenName: User +sn: 86 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585481e-9eff-1037-87f3-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.742688Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.87,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.87 +mail: user.87@example.com +o: example +initials: u.87 +structuralObjectClass: inetOrgPerson +uidNumber: 1091 +gidNumber: 1098 +loginShell: /bin/bash +title: user.87 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.87 +cn: User 87 +displayName: User 87 +givenName: User +sn: 87 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25854aee-9eff-1037-87f4-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.742761Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.88,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.88 +mail: user.88@example.com +o: example +initials: u.88 +structuralObjectClass: inetOrgPerson +uidNumber: 1092 +gidNumber: 1099 +loginShell: /bin/bash +title: user.88 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.88 +cn: User 88 +displayName: User 88 +givenName: User +sn: 88 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25854db4-9eff-1037-87f5-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.742831Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.89,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.89 +mail: user.89@example.com +o: example +initials: u.89 +structuralObjectClass: inetOrgPerson +uidNumber: 1093 +gidNumber: 1100 +loginShell: /bin/bash +title: user.89 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.89 +cn: User 89 +displayName: User 89 +givenName: User +sn: 89 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585500c-9eff-1037-87f6-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.742891Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.90,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.90 +mail: user.90@example.com +o: example +initials: u.90 +structuralObjectClass: inetOrgPerson +uidNumber: 1094 +gidNumber: 1101 +loginShell: /bin/bash +title: user.90 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.90 +cn: User 90 +displayName: User 90 +givenName: User +sn: 90 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258552f0-9eff-1037-87f7-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.742965Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.91,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.91 +mail: user.91@example.com +o: example +initials: u.91 +structuralObjectClass: inetOrgPerson +uidNumber: 1095 +gidNumber: 1102 +loginShell: /bin/bash +title: user.91 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.91 +cn: User 91 +displayName: User 91 +givenName: User +sn: 91 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25855552-9eff-1037-87f8-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.743027Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.92,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.92 +mail: user.92@example.com +o: example +initials: u.92 +structuralObjectClass: inetOrgPerson +uidNumber: 1096 +gidNumber: 1103 +loginShell: /bin/bash +title: user.92 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.92 +cn: User 92 +displayName: User 92 +givenName: User +sn: 92 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258557b4-9eff-1037-87f9-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.743087Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.93,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.93 +mail: user.93@example.com +o: example +initials: u.93 +structuralObjectClass: inetOrgPerson +uidNumber: 1097 +gidNumber: 1104 +loginShell: /bin/bash +title: user.93 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.93 +cn: User 93 +displayName: User 93 +givenName: User +sn: 93 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25855a70-9eff-1037-87fa-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.743157Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.94,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.94 +mail: user.94@example.com +o: example +initials: u.94 +structuralObjectClass: inetOrgPerson +uidNumber: 1098 +gidNumber: 1105 +loginShell: /bin/bash +title: user.94 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.94 +cn: User 94 +displayName: User 94 +givenName: User +sn: 94 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25855d18-9eff-1037-87fb-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.743225Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.95,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.95 +mail: user.95@example.com +o: example +initials: u.95 +structuralObjectClass: inetOrgPerson +uidNumber: 1099 +gidNumber: 1106 +loginShell: /bin/bash +title: user.95 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.95 +cn: User 95 +displayName: User 95 +givenName: User +sn: 95 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25855f84-9eff-1037-87fc-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.743287Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.96,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.96 +mail: user.96@example.com +o: example +initials: u.96 +structuralObjectClass: inetOrgPerson +uidNumber: 1100 +gidNumber: 1107 +loginShell: /bin/bash +title: user.96 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.96 +cn: User 96 +displayName: User 96 +givenName: User +sn: 96 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25856308-9eff-1037-87fd-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.743377Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.97,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.97 +mail: user.97@example.com +o: example +initials: u.97 +structuralObjectClass: inetOrgPerson +uidNumber: 1101 +gidNumber: 1108 +loginShell: /bin/bash +title: user.97 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.97 +cn: User 97 +displayName: User 97 +givenName: User +sn: 97 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258565ec-9eff-1037-87fe-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.743451Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.98,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.98 +mail: user.98@example.com +o: example +initials: u.98 +structuralObjectClass: inetOrgPerson +uidNumber: 1102 +gidNumber: 1109 +loginShell: /bin/bash +title: user.98 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.98 +cn: User 98 +displayName: User 98 +givenName: User +sn: 98 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25856862-9eff-1037-87ff-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.743515Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.99,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.99 +mail: user.99@example.com +o: example +initials: u.99 +structuralObjectClass: inetOrgPerson +uidNumber: 1103 +gidNumber: 1110 +loginShell: /bin/bash +title: user.99 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.99 +cn: User 99 +displayName: User 99 +givenName: User +sn: 99 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25856b46-9eff-1037-8800-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.743588Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.100,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.100 +mail: user.100@example.com +o: example +initials: u.100 +structuralObjectClass: inetOrgPerson +uidNumber: 1104 +gidNumber: 1111 +loginShell: /bin/bash +title: user.100 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.100 +cn: User 100 +displayName: User 100 +givenName: User +sn: 100 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25856f6a-9eff-1037-8801-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.743692Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.101,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.101 +mail: user.101@example.com +o: example +initials: u.101 +structuralObjectClass: inetOrgPerson +uidNumber: 1105 +gidNumber: 1112 +loginShell: /bin/bash +title: user.101 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.101 +cn: User 101 +displayName: User 101 +givenName: User +sn: 101 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585723a-9eff-1037-8802-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.743767Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.102,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.102 +mail: user.102@example.com +o: example +initials: u.102 +structuralObjectClass: inetOrgPerson +uidNumber: 1106 +gidNumber: 1113 +loginShell: /bin/bash +title: user.102 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.102 +cn: User 102 +displayName: User 102 +givenName: User +sn: 102 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25857550-9eff-1037-8803-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.743845Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.103,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.103 +mail: user.103@example.com +o: example +initials: u.103 +structuralObjectClass: inetOrgPerson +uidNumber: 1107 +gidNumber: 1114 +loginShell: /bin/bash +title: user.103 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.103 +cn: User 103 +displayName: User 103 +givenName: User +sn: 103 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25857816-9eff-1037-8804-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.743916Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.104,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.104 +mail: user.104@example.com +o: example +initials: u.104 +structuralObjectClass: inetOrgPerson +uidNumber: 1108 +gidNumber: 1115 +loginShell: /bin/bash +title: user.104 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.104 +cn: User 104 +displayName: User 104 +givenName: User +sn: 104 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25857a96-9eff-1037-8805-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.743980Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.105,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.105 +mail: user.105@example.com +o: example +initials: u.105 +structuralObjectClass: inetOrgPerson +uidNumber: 1109 +gidNumber: 1116 +loginShell: /bin/bash +title: user.105 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.105 +cn: User 105 +displayName: User 105 +givenName: User +sn: 105 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25857d66-9eff-1037-8806-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.744052Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.106,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.106 +mail: user.106@example.com +o: example +initials: u.106 +structuralObjectClass: inetOrgPerson +uidNumber: 1110 +gidNumber: 1117 +loginShell: /bin/bash +title: user.106 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.106 +cn: User 106 +displayName: User 106 +givenName: User +sn: 106 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25857ff0-9eff-1037-8807-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.744118Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.107,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.107 +mail: user.107@example.com +o: example +initials: u.107 +structuralObjectClass: inetOrgPerson +uidNumber: 1111 +gidNumber: 1118 +loginShell: /bin/bash +title: user.107 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.107 +cn: User 107 +displayName: User 107 +givenName: User +sn: 107 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585825c-9eff-1037-8808-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.744179Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.108,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.108 +mail: user.108@example.com +o: example +initials: u.108 +structuralObjectClass: inetOrgPerson +uidNumber: 1112 +gidNumber: 1119 +loginShell: /bin/bash +title: user.108 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.108 +cn: User 108 +displayName: User 108 +givenName: User +sn: 108 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585852c-9eff-1037-8809-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.744251Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.109,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.109 +mail: user.109@example.com +o: example +initials: u.109 +structuralObjectClass: inetOrgPerson +uidNumber: 1113 +gidNumber: 1120 +loginShell: /bin/bash +title: user.109 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.109 +cn: User 109 +displayName: User 109 +givenName: User +sn: 109 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25858798-9eff-1037-880a-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.744313Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.110,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.110 +mail: user.110@example.com +o: example +initials: u.110 +structuralObjectClass: inetOrgPerson +uidNumber: 1114 +gidNumber: 1121 +loginShell: /bin/bash +title: user.110 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.110 +cn: User 110 +displayName: User 110 +givenName: User +sn: 110 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25858a18-9eff-1037-880b-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.744377Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.111,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.111 +mail: user.111@example.com +o: example +initials: u.111 +structuralObjectClass: inetOrgPerson +uidNumber: 1115 +gidNumber: 1122 +loginShell: /bin/bash +title: user.111 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.111 +cn: User 111 +displayName: User 111 +givenName: User +sn: 111 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25858d1a-9eff-1037-880c-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.744455Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.112,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.112 +mail: user.112@example.com +o: example +initials: u.112 +structuralObjectClass: inetOrgPerson +uidNumber: 1116 +gidNumber: 1123 +loginShell: /bin/bash +title: user.112 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.112 +cn: User 112 +displayName: User 112 +givenName: User +sn: 112 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25858fa4-9eff-1037-880d-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.744519Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.113,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.113 +mail: user.113@example.com +o: example +initials: u.113 +structuralObjectClass: inetOrgPerson +uidNumber: 1117 +gidNumber: 1124 +loginShell: /bin/bash +title: user.113 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.113 +cn: User 113 +displayName: User 113 +givenName: User +sn: 113 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25859206-9eff-1037-880e-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.744581Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.114,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.114 +mail: user.114@example.com +o: example +initials: u.114 +structuralObjectClass: inetOrgPerson +uidNumber: 1118 +gidNumber: 1125 +loginShell: /bin/bash +title: user.114 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.114 +cn: User 114 +displayName: User 114 +givenName: User +sn: 114 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25859558-9eff-1037-880f-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.744664Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.115,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.115 +mail: user.115@example.com +o: example +initials: u.115 +structuralObjectClass: inetOrgPerson +uidNumber: 1119 +gidNumber: 1126 +loginShell: /bin/bash +title: user.115 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.115 +cn: User 115 +displayName: User 115 +givenName: User +sn: 115 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258597e2-9eff-1037-8810-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.744730Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.116,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.116 +mail: user.116@example.com +o: example +initials: u.116 +structuralObjectClass: inetOrgPerson +uidNumber: 1120 +gidNumber: 1127 +loginShell: /bin/bash +title: user.116 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.116 +cn: User 116 +displayName: User 116 +givenName: User +sn: 116 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25859a4e-9eff-1037-8811-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.744792Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.117,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.117 +mail: user.117@example.com +o: example +initials: u.117 +structuralObjectClass: inetOrgPerson +uidNumber: 1121 +gidNumber: 1128 +loginShell: /bin/bash +title: user.117 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.117 +cn: User 117 +displayName: User 117 +givenName: User +sn: 117 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25859d1e-9eff-1037-8812-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.744864Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.118,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.118 +mail: user.118@example.com +o: example +initials: u.118 +structuralObjectClass: inetOrgPerson +uidNumber: 1122 +gidNumber: 1129 +loginShell: /bin/bash +title: user.118 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.118 +cn: User 118 +displayName: User 118 +givenName: User +sn: 118 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25859ff8-9eff-1037-8813-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.744937Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.119,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.119 +mail: user.119@example.com +o: example +initials: u.119 +structuralObjectClass: inetOrgPerson +uidNumber: 1123 +gidNumber: 1130 +loginShell: /bin/bash +title: user.119 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.119 +cn: User 119 +displayName: User 119 +givenName: User +sn: 119 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585a264-9eff-1037-8814-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.745000Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.120,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.120 +mail: user.120@example.com +o: example +initials: u.120 +structuralObjectClass: inetOrgPerson +uidNumber: 1124 +gidNumber: 1131 +loginShell: /bin/bash +title: user.120 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.120 +cn: User 120 +displayName: User 120 +givenName: User +sn: 120 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585a53e-9eff-1037-8815-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.745072Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.121,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.121 +mail: user.121@example.com +o: example +initials: u.121 +structuralObjectClass: inetOrgPerson +uidNumber: 1125 +gidNumber: 1132 +loginShell: /bin/bash +title: user.121 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.121 +cn: User 121 +displayName: User 121 +givenName: User +sn: 121 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585a7aa-9eff-1037-8816-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.745134Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.122,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.122 +mail: user.122@example.com +o: example +initials: u.122 +structuralObjectClass: inetOrgPerson +uidNumber: 1126 +gidNumber: 1133 +loginShell: /bin/bash +title: user.122 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.122 +cn: User 122 +displayName: User 122 +givenName: User +sn: 122 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585aa2a-9eff-1037-8817-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.745198Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.123,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.123 +mail: user.123@example.com +o: example +initials: u.123 +structuralObjectClass: inetOrgPerson +uidNumber: 1127 +gidNumber: 1134 +loginShell: /bin/bash +title: user.123 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.123 +cn: User 123 +displayName: User 123 +givenName: User +sn: 123 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585acf0-9eff-1037-8818-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.745270Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.124,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.124 +mail: user.124@example.com +o: example +initials: u.124 +structuralObjectClass: inetOrgPerson +uidNumber: 1128 +gidNumber: 1135 +loginShell: /bin/bash +title: user.124 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.124 +cn: User 124 +displayName: User 124 +givenName: User +sn: 124 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585af66-9eff-1037-8819-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.745333Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.125,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.125 +mail: user.125@example.com +o: example +initials: u.125 +structuralObjectClass: inetOrgPerson +uidNumber: 1129 +gidNumber: 1136 +loginShell: /bin/bash +title: user.125 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.125 +cn: User 125 +displayName: User 125 +givenName: User +sn: 125 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585b222-9eff-1037-881a-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.745402Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.126,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.126 +mail: user.126@example.com +o: example +initials: u.126 +structuralObjectClass: inetOrgPerson +uidNumber: 1130 +gidNumber: 1137 +loginShell: /bin/bash +title: user.126 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.126 +cn: User 126 +displayName: User 126 +givenName: User +sn: 126 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585b506-9eff-1037-881b-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.745476Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.127,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.127 +mail: user.127@example.com +o: example +initials: u.127 +structuralObjectClass: inetOrgPerson +uidNumber: 1131 +gidNumber: 1138 +loginShell: /bin/bash +title: user.127 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.127 +cn: User 127 +displayName: User 127 +givenName: User +sn: 127 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585b772-9eff-1037-881c-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.745539Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.128,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.128 +mail: user.128@example.com +o: example +initials: u.128 +structuralObjectClass: inetOrgPerson +uidNumber: 1132 +gidNumber: 1139 +loginShell: /bin/bash +title: user.128 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.128 +cn: User 128 +displayName: User 128 +givenName: User +sn: 128 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585b9e8-9eff-1037-881d-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.745601Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.129,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.129 +mail: user.129@example.com +o: example +initials: u.129 +structuralObjectClass: inetOrgPerson +uidNumber: 1133 +gidNumber: 1140 +loginShell: /bin/bash +title: user.129 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.129 +cn: User 129 +displayName: User 129 +givenName: User +sn: 129 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585bd12-9eff-1037-881e-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.745682Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.130,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.130 +mail: user.130@example.com +o: example +initials: u.130 +structuralObjectClass: inetOrgPerson +uidNumber: 1134 +gidNumber: 1141 +loginShell: /bin/bash +title: user.130 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.130 +cn: User 130 +displayName: User 130 +givenName: User +sn: 130 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585bfba-9eff-1037-881f-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.745750Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.131,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.131 +mail: user.131@example.com +o: example +initials: u.131 +structuralObjectClass: inetOrgPerson +uidNumber: 1135 +gidNumber: 1142 +loginShell: /bin/bash +title: user.131 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.131 +cn: User 131 +displayName: User 131 +givenName: User +sn: 131 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585c21c-9eff-1037-8820-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.745811Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.132,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.132 +mail: user.132@example.com +o: example +initials: u.132 +structuralObjectClass: inetOrgPerson +uidNumber: 1136 +gidNumber: 1143 +loginShell: /bin/bash +title: user.132 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.132 +cn: User 132 +displayName: User 132 +givenName: User +sn: 132 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585c4f6-9eff-1037-8821-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.745884Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.133,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.133 +mail: user.133@example.com +o: example +initials: u.133 +structuralObjectClass: inetOrgPerson +uidNumber: 1137 +gidNumber: 1144 +loginShell: /bin/bash +title: user.133 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.133 +cn: User 133 +displayName: User 133 +givenName: User +sn: 133 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585c7b2-9eff-1037-8822-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.745954Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.134,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.134 +mail: user.134@example.com +o: example +initials: u.134 +structuralObjectClass: inetOrgPerson +uidNumber: 1138 +gidNumber: 1145 +loginShell: /bin/bash +title: user.134 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.134 +cn: User 134 +displayName: User 134 +givenName: User +sn: 134 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585ca32-9eff-1037-8823-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.746019Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.135,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.135 +mail: user.135@example.com +o: example +initials: u.135 +structuralObjectClass: inetOrgPerson +uidNumber: 1139 +gidNumber: 1146 +loginShell: /bin/bash +title: user.135 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.135 +cn: User 135 +displayName: User 135 +givenName: User +sn: 135 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585cd02-9eff-1037-8824-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.746090Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.136,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.136 +mail: user.136@example.com +o: example +initials: u.136 +structuralObjectClass: inetOrgPerson +uidNumber: 1140 +gidNumber: 1147 +loginShell: /bin/bash +title: user.136 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.136 +cn: User 136 +displayName: User 136 +givenName: User +sn: 136 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585cf78-9eff-1037-8825-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.746154Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.137,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.137 +mail: user.137@example.com +o: example +initials: u.137 +structuralObjectClass: inetOrgPerson +uidNumber: 1141 +gidNumber: 1148 +loginShell: /bin/bash +title: user.137 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.137 +cn: User 137 +displayName: User 137 +givenName: User +sn: 137 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585d1da-9eff-1037-8826-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.746214Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.138,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.138 +mail: user.138@example.com +o: example +initials: u.138 +structuralObjectClass: inetOrgPerson +uidNumber: 1142 +gidNumber: 1149 +loginShell: /bin/bash +title: user.138 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.138 +cn: User 138 +displayName: User 138 +givenName: User +sn: 138 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585d4be-9eff-1037-8827-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.746288Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.139,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.139 +mail: user.139@example.com +o: example +initials: u.139 +structuralObjectClass: inetOrgPerson +uidNumber: 1143 +gidNumber: 1150 +loginShell: /bin/bash +title: user.139 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.139 +cn: User 139 +displayName: User 139 +givenName: User +sn: 139 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585d72a-9eff-1037-8828-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.746350Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.140,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.140 +mail: user.140@example.com +o: example +initials: u.140 +structuralObjectClass: inetOrgPerson +uidNumber: 1144 +gidNumber: 1151 +loginShell: /bin/bash +title: user.140 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.140 +cn: User 140 +displayName: User 140 +givenName: User +sn: 140 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585d9e6-9eff-1037-8829-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.746420Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.141,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.141 +mail: user.141@example.com +o: example +initials: u.141 +structuralObjectClass: inetOrgPerson +uidNumber: 1145 +gidNumber: 1152 +loginShell: /bin/bash +title: user.141 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.141 +cn: User 141 +displayName: User 141 +givenName: User +sn: 141 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585dcc0-9eff-1037-882a-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.746494Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.142,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.142 +mail: user.142@example.com +o: example +initials: u.142 +structuralObjectClass: inetOrgPerson +uidNumber: 1146 +gidNumber: 1153 +loginShell: /bin/bash +title: user.142 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.142 +cn: User 142 +displayName: User 142 +givenName: User +sn: 142 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585df54-9eff-1037-882b-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.746560Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.143,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.143 +mail: user.143@example.com +o: example +initials: u.143 +structuralObjectClass: inetOrgPerson +uidNumber: 1147 +gidNumber: 1154 +loginShell: /bin/bash +title: user.143 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.143 +cn: User 143 +displayName: User 143 +givenName: User +sn: 143 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585e1c0-9eff-1037-882c-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.746622Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.144,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.144 +mail: user.144@example.com +o: example +initials: u.144 +structuralObjectClass: inetOrgPerson +uidNumber: 1148 +gidNumber: 1155 +loginShell: /bin/bash +title: user.144 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.144 +cn: User 144 +displayName: User 144 +givenName: User +sn: 144 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585e512-9eff-1037-882d-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.746706Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.145,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.145 +mail: user.145@example.com +o: example +initials: u.145 +structuralObjectClass: inetOrgPerson +uidNumber: 1149 +gidNumber: 1156 +loginShell: /bin/bash +title: user.145 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.145 +cn: User 145 +displayName: User 145 +givenName: User +sn: 145 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585e792-9eff-1037-882e-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.746770Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.146,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.146 +mail: user.146@example.com +o: example +initials: u.146 +structuralObjectClass: inetOrgPerson +uidNumber: 1150 +gidNumber: 1157 +loginShell: /bin/bash +title: user.146 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.146 +cn: User 146 +displayName: User 146 +givenName: User +sn: 146 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585ea1c-9eff-1037-882f-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.746835Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.147,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.147 +mail: user.147@example.com +o: example +initials: u.147 +structuralObjectClass: inetOrgPerson +uidNumber: 1151 +gidNumber: 1158 +loginShell: /bin/bash +title: user.147 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.147 +cn: User 147 +displayName: User 147 +givenName: User +sn: 147 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585ed32-9eff-1037-8830-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.746914Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.148,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.148 +mail: user.148@example.com +o: example +initials: u.148 +structuralObjectClass: inetOrgPerson +uidNumber: 1152 +gidNumber: 1159 +loginShell: /bin/bash +title: user.148 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.148 +cn: User 148 +displayName: User 148 +givenName: User +sn: 148 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585efbc-9eff-1037-8831-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.746979Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.149,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.149 +mail: user.149@example.com +o: example +initials: u.149 +structuralObjectClass: inetOrgPerson +uidNumber: 1153 +gidNumber: 1160 +loginShell: /bin/bash +title: user.149 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.149 +cn: User 149 +displayName: User 149 +givenName: User +sn: 149 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585f21e-9eff-1037-8832-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.747041Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.150,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.150 +mail: user.150@example.com +o: example +initials: u.150 +structuralObjectClass: inetOrgPerson +uidNumber: 1154 +gidNumber: 1161 +loginShell: /bin/bash +title: user.150 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.150 +cn: User 150 +displayName: User 150 +givenName: User +sn: 150 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585f516-9eff-1037-8833-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.747116Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.151,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.151 +mail: user.151@example.com +o: example +initials: u.151 +structuralObjectClass: inetOrgPerson +uidNumber: 1155 +gidNumber: 1162 +loginShell: /bin/bash +title: user.151 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.151 +cn: User 151 +displayName: User 151 +givenName: User +sn: 151 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585f782-9eff-1037-8834-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.747178Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.152,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.152 +mail: user.152@example.com +o: example +initials: u.152 +structuralObjectClass: inetOrgPerson +uidNumber: 1156 +gidNumber: 1163 +loginShell: /bin/bash +title: user.152 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.152 +cn: User 152 +displayName: User 152 +givenName: User +sn: 152 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585fa20-9eff-1037-8835-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.747245Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.153,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.153 +mail: user.153@example.com +o: example +initials: u.153 +structuralObjectClass: inetOrgPerson +uidNumber: 1157 +gidNumber: 1164 +loginShell: /bin/bash +title: user.153 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.153 +cn: User 153 +displayName: User 153 +givenName: User +sn: 153 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585fcfa-9eff-1037-8836-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.747318Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.154,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.154 +mail: user.154@example.com +o: example +initials: u.154 +structuralObjectClass: inetOrgPerson +uidNumber: 1158 +gidNumber: 1165 +loginShell: /bin/bash +title: user.154 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.154 +cn: User 154 +displayName: User 154 +givenName: User +sn: 154 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2585ff84-9eff-1037-8837-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.747383Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.155,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.155 +mail: user.155@example.com +o: example +initials: u.155 +structuralObjectClass: inetOrgPerson +uidNumber: 1159 +gidNumber: 1166 +loginShell: /bin/bash +title: user.155 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.155 +cn: User 155 +displayName: User 155 +givenName: User +sn: 155 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586059c-9eff-1037-8838-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.747538Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.156,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.156 +mail: user.156@example.com +o: example +initials: u.156 +structuralObjectClass: inetOrgPerson +uidNumber: 1160 +gidNumber: 1167 +loginShell: /bin/bash +title: user.156 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.156 +cn: User 156 +displayName: User 156 +givenName: User +sn: 156 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258608da-9eff-1037-8839-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.747622Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.157,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.157 +mail: user.157@example.com +o: example +initials: u.157 +structuralObjectClass: inetOrgPerson +uidNumber: 1161 +gidNumber: 1168 +loginShell: /bin/bash +title: user.157 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.157 +cn: User 157 +displayName: User 157 +givenName: User +sn: 157 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25860bd2-9eff-1037-883a-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.747697Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.158,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.158 +mail: user.158@example.com +o: example +initials: u.158 +structuralObjectClass: inetOrgPerson +uidNumber: 1162 +gidNumber: 1169 +loginShell: /bin/bash +title: user.158 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.158 +cn: User 158 +displayName: User 158 +givenName: User +sn: 158 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25860e66-9eff-1037-883b-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.747764Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.159,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.159 +mail: user.159@example.com +o: example +initials: u.159 +structuralObjectClass: inetOrgPerson +uidNumber: 1163 +gidNumber: 1170 +loginShell: /bin/bash +title: user.159 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.159 +cn: User 159 +displayName: User 159 +givenName: User +sn: 159 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586114a-9eff-1037-883c-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.747838Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.160,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.160 +mail: user.160@example.com +o: example +initials: u.160 +structuralObjectClass: inetOrgPerson +uidNumber: 1164 +gidNumber: 1171 +loginShell: /bin/bash +title: user.160 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.160 +cn: User 160 +displayName: User 160 +givenName: User +sn: 160 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258613ca-9eff-1037-883d-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.747902Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.161,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.161 +mail: user.161@example.com +o: example +initials: u.161 +structuralObjectClass: inetOrgPerson +uidNumber: 1165 +gidNumber: 1172 +loginShell: /bin/bash +title: user.161 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.161 +cn: User 161 +displayName: User 161 +givenName: User +sn: 161 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586162c-9eff-1037-883e-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.747964Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.162,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.162 +mail: user.162@example.com +o: example +initials: u.162 +structuralObjectClass: inetOrgPerson +uidNumber: 1166 +gidNumber: 1173 +loginShell: /bin/bash +title: user.162 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.162 +cn: User 162 +displayName: User 162 +givenName: User +sn: 162 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25861960-9eff-1037-883f-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.748045Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.163,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.163 +mail: user.163@example.com +o: example +initials: u.163 +structuralObjectClass: inetOrgPerson +uidNumber: 1167 +gidNumber: 1174 +loginShell: /bin/bash +title: user.163 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.163 +cn: User 163 +displayName: User 163 +givenName: User +sn: 163 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25861bd6-9eff-1037-8840-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.748109Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.164,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.164 +mail: user.164@example.com +o: example +initials: u.164 +structuralObjectClass: inetOrgPerson +uidNumber: 1168 +gidNumber: 1175 +loginShell: /bin/bash +title: user.164 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.164 +cn: User 164 +displayName: User 164 +givenName: User +sn: 164 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25861ece-9eff-1037-8841-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.748184Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.165,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.165 +mail: user.165@example.com +o: example +initials: u.165 +structuralObjectClass: inetOrgPerson +uidNumber: 1169 +gidNumber: 1176 +loginShell: /bin/bash +title: user.165 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.165 +cn: User 165 +displayName: User 165 +givenName: User +sn: 165 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586219e-9eff-1037-8842-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.748256Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.166,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.166 +mail: user.166@example.com +o: example +initials: u.166 +structuralObjectClass: inetOrgPerson +uidNumber: 1170 +gidNumber: 1177 +loginShell: /bin/bash +title: user.166 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.166 +cn: User 166 +displayName: User 166 +givenName: User +sn: 166 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25862428-9eff-1037-8843-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.748321Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.167,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.167 +mail: user.167@example.com +o: example +initials: u.167 +structuralObjectClass: inetOrgPerson +uidNumber: 1171 +gidNumber: 1178 +loginShell: /bin/bash +title: user.167 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.167 +cn: User 167 +displayName: User 167 +givenName: User +sn: 167 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586268a-9eff-1037-8844-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.748383Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.168,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.168 +mail: user.168@example.com +o: example +initials: u.168 +structuralObjectClass: inetOrgPerson +uidNumber: 1172 +gidNumber: 1179 +loginShell: /bin/bash +title: user.168 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.168 +cn: User 168 +displayName: User 168 +givenName: User +sn: 168 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586295a-9eff-1037-8845-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.748455Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.169,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.169 +mail: user.169@example.com +o: example +initials: u.169 +structuralObjectClass: inetOrgPerson +uidNumber: 1173 +gidNumber: 1180 +loginShell: /bin/bash +title: user.169 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.169 +cn: User 169 +displayName: User 169 +givenName: User +sn: 169 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25862c16-9eff-1037-8846-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.748524Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.170,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.170 +mail: user.170@example.com +o: example +initials: u.170 +structuralObjectClass: inetOrgPerson +uidNumber: 1174 +gidNumber: 1181 +loginShell: /bin/bash +title: user.170 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.170 +cn: User 170 +displayName: User 170 +givenName: User +sn: 170 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25862f5e-9eff-1037-8847-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.748608Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.171,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.171 +mail: user.171@example.com +o: example +initials: u.171 +structuralObjectClass: inetOrgPerson +uidNumber: 1175 +gidNumber: 1182 +loginShell: /bin/bash +title: user.171 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.171 +cn: User 171 +displayName: User 171 +givenName: User +sn: 171 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25863288-9eff-1037-8848-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.748689Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.172,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.172 +mail: user.172@example.com +o: example +initials: u.172 +structuralObjectClass: inetOrgPerson +uidNumber: 1176 +gidNumber: 1183 +loginShell: /bin/bash +title: user.172 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.172 +cn: User 172 +displayName: User 172 +givenName: User +sn: 172 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25863580-9eff-1037-8849-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.748765Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.173,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.173 +mail: user.173@example.com +o: example +initials: u.173 +structuralObjectClass: inetOrgPerson +uidNumber: 1177 +gidNumber: 1184 +loginShell: /bin/bash +title: user.173 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.173 +cn: User 173 +displayName: User 173 +givenName: User +sn: 173 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258637d8-9eff-1037-884a-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.748826Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.174,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.174 +mail: user.174@example.com +o: example +initials: u.174 +structuralObjectClass: inetOrgPerson +uidNumber: 1178 +gidNumber: 1185 +loginShell: /bin/bash +title: user.174 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.174 +cn: User 174 +displayName: User 174 +givenName: User +sn: 174 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25863ad0-9eff-1037-884b-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.748901Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.175,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.175 +mail: user.175@example.com +o: example +initials: u.175 +structuralObjectClass: inetOrgPerson +uidNumber: 1179 +gidNumber: 1186 +loginShell: /bin/bash +title: user.175 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.175 +cn: User 175 +displayName: User 175 +givenName: User +sn: 175 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25863d3c-9eff-1037-884c-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.748963Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.176,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.176 +mail: user.176@example.com +o: example +initials: u.176 +structuralObjectClass: inetOrgPerson +uidNumber: 1180 +gidNumber: 1187 +loginShell: /bin/bash +title: user.176 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.176 +cn: User 176 +displayName: User 176 +givenName: User +sn: 176 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25863fa8-9eff-1037-884d-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.749025Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.177,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.177 +mail: user.177@example.com +o: example +initials: u.177 +structuralObjectClass: inetOrgPerson +uidNumber: 1181 +gidNumber: 1188 +loginShell: /bin/bash +title: user.177 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.177 +cn: User 177 +displayName: User 177 +givenName: User +sn: 177 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258642a0-9eff-1037-884e-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.749101Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.178,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.178 +mail: user.178@example.com +o: example +initials: u.178 +structuralObjectClass: inetOrgPerson +uidNumber: 1182 +gidNumber: 1189 +loginShell: /bin/bash +title: user.178 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.178 +cn: User 178 +displayName: User 178 +givenName: User +sn: 178 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586452a-9eff-1037-884f-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.749166Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.179,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.179 +mail: user.179@example.com +o: example +initials: u.179 +structuralObjectClass: inetOrgPerson +uidNumber: 1183 +gidNumber: 1190 +loginShell: /bin/bash +title: user.179 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.179 +cn: User 179 +displayName: User 179 +givenName: User +sn: 179 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25864782-9eff-1037-8850-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.749227Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.180,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.180 +mail: user.180@example.com +o: example +initials: u.180 +structuralObjectClass: inetOrgPerson +uidNumber: 1184 +gidNumber: 1191 +loginShell: /bin/bash +title: user.180 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.180 +cn: User 180 +displayName: User 180 +givenName: User +sn: 180 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25864a52-9eff-1037-8851-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.749298Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.181,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.181 +mail: user.181@example.com +o: example +initials: u.181 +structuralObjectClass: inetOrgPerson +uidNumber: 1185 +gidNumber: 1192 +loginShell: /bin/bash +title: user.181 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.181 +cn: User 181 +displayName: User 181 +givenName: User +sn: 181 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25864cbe-9eff-1037-8852-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.749360Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.182,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.182 +mail: user.182@example.com +o: example +initials: u.182 +structuralObjectClass: inetOrgPerson +uidNumber: 1186 +gidNumber: 1193 +loginShell: /bin/bash +title: user.182 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.182 +cn: User 182 +displayName: User 182 +givenName: User +sn: 182 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25864f3e-9eff-1037-8853-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.749424Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.183,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.183 +mail: user.183@example.com +o: example +initials: u.183 +structuralObjectClass: inetOrgPerson +uidNumber: 1187 +gidNumber: 1194 +loginShell: /bin/bash +title: user.183 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.183 +cn: User 183 +displayName: User 183 +givenName: User +sn: 183 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25865204-9eff-1037-8854-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.749495Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.184,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.184 +mail: user.184@example.com +o: example +initials: u.184 +structuralObjectClass: inetOrgPerson +uidNumber: 1188 +gidNumber: 1195 +loginShell: /bin/bash +title: user.184 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.184 +cn: User 184 +displayName: User 184 +givenName: User +sn: 184 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258654c0-9eff-1037-8855-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.749566Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.185,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.185 +mail: user.185@example.com +o: example +initials: u.185 +structuralObjectClass: inetOrgPerson +uidNumber: 1189 +gidNumber: 1196 +loginShell: /bin/bash +title: user.185 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.185 +cn: User 185 +displayName: User 185 +givenName: User +sn: 185 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586572c-9eff-1037-8856-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.749628Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.186,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.186 +mail: user.186@example.com +o: example +initials: u.186 +structuralObjectClass: inetOrgPerson +uidNumber: 1190 +gidNumber: 1197 +loginShell: /bin/bash +title: user.186 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.186 +cn: User 186 +displayName: User 186 +givenName: User +sn: 186 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25865a88-9eff-1037-8857-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.749713Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.187,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.187 +mail: user.187@example.com +o: example +initials: u.187 +structuralObjectClass: inetOrgPerson +uidNumber: 1191 +gidNumber: 1198 +loginShell: /bin/bash +title: user.187 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.187 +cn: User 187 +displayName: User 187 +givenName: User +sn: 187 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25865df8-9eff-1037-8858-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.749801Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.188,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.188 +mail: user.188@example.com +o: example +initials: u.188 +structuralObjectClass: inetOrgPerson +uidNumber: 1192 +gidNumber: 1199 +loginShell: /bin/bash +title: user.188 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.188 +cn: User 188 +displayName: User 188 +givenName: User +sn: 188 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586606e-9eff-1037-8859-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.749865Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.189,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.189 +mail: user.189@example.com +o: example +initials: u.189 +structuralObjectClass: inetOrgPerson +uidNumber: 1193 +gidNumber: 1200 +loginShell: /bin/bash +title: user.189 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.189 +cn: User 189 +displayName: User 189 +givenName: User +sn: 189 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25866334-9eff-1037-885a-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.749935Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.190,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.190 +mail: user.190@example.com +o: example +initials: u.190 +structuralObjectClass: inetOrgPerson +uidNumber: 1194 +gidNumber: 1201 +loginShell: /bin/bash +title: user.190 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.190 +cn: User 190 +displayName: User 190 +givenName: User +sn: 190 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258665b4-9eff-1037-885b-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.750000Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.191,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.191 +mail: user.191@example.com +o: example +initials: u.191 +structuralObjectClass: inetOrgPerson +uidNumber: 1195 +gidNumber: 1202 +loginShell: /bin/bash +title: user.191 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.191 +cn: User 191 +displayName: User 191 +givenName: User +sn: 191 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25866816-9eff-1037-885c-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.750061Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.192,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.192 +mail: user.192@example.com +o: example +initials: u.192 +structuralObjectClass: inetOrgPerson +uidNumber: 1196 +gidNumber: 1203 +loginShell: /bin/bash +title: user.192 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.192 +cn: User 192 +displayName: User 192 +givenName: User +sn: 192 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25866b22-9eff-1037-885d-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.750138Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.193,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.193 +mail: user.193@example.com +o: example +initials: u.193 +structuralObjectClass: inetOrgPerson +uidNumber: 1197 +gidNumber: 1204 +loginShell: /bin/bash +title: user.193 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.193 +cn: User 193 +displayName: User 193 +givenName: User +sn: 193 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25866d8e-9eff-1037-885e-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.750201Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.194,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.194 +mail: user.194@example.com +o: example +initials: u.194 +structuralObjectClass: inetOrgPerson +uidNumber: 1198 +gidNumber: 1205 +loginShell: /bin/bash +title: user.194 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.194 +cn: User 194 +displayName: User 194 +givenName: User +sn: 194 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586700e-9eff-1037-885f-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.750264Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.195,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.195 +mail: user.195@example.com +o: example +initials: u.195 +structuralObjectClass: inetOrgPerson +uidNumber: 1199 +gidNumber: 1206 +loginShell: /bin/bash +title: user.195 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.195 +cn: User 195 +displayName: User 195 +givenName: User +sn: 195 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258672d4-9eff-1037-8860-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.750335Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.196,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.196 +mail: user.196@example.com +o: example +initials: u.196 +structuralObjectClass: inetOrgPerson +uidNumber: 1200 +gidNumber: 1207 +loginShell: /bin/bash +title: user.196 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.196 +cn: User 196 +displayName: User 196 +givenName: User +sn: 196 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586754a-9eff-1037-8861-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.750398Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.197,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.197 +mail: user.197@example.com +o: example +initials: u.197 +structuralObjectClass: inetOrgPerson +uidNumber: 1201 +gidNumber: 1208 +loginShell: /bin/bash +title: user.197 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.197 +cn: User 197 +displayName: User 197 +givenName: User +sn: 197 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258677a2-9eff-1037-8862-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.750459Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.198,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.198 +mail: user.198@example.com +o: example +initials: u.198 +structuralObjectClass: inetOrgPerson +uidNumber: 1202 +gidNumber: 1209 +loginShell: /bin/bash +title: user.198 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.198 +cn: User 198 +displayName: User 198 +givenName: User +sn: 198 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25867a86-9eff-1037-8863-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.750532Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.199,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.199 +mail: user.199@example.com +o: example +initials: u.199 +structuralObjectClass: inetOrgPerson +uidNumber: 1203 +gidNumber: 1210 +loginShell: /bin/bash +title: user.199 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.199 +cn: User 199 +displayName: User 199 +givenName: User +sn: 199 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25867d2e-9eff-1037-8864-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.750601Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.200,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.200 +mail: user.200@example.com +o: example +initials: u.200 +structuralObjectClass: inetOrgPerson +uidNumber: 1204 +gidNumber: 1211 +loginShell: /bin/bash +title: user.200 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.200 +cn: User 200 +displayName: User 200 +givenName: User +sn: 200 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25868008-9eff-1037-8865-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.750673Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.201,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.201 +mail: user.201@example.com +o: example +initials: u.201 +structuralObjectClass: inetOrgPerson +uidNumber: 1205 +gidNumber: 1212 +loginShell: /bin/bash +title: user.201 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.201 +cn: User 201 +displayName: User 201 +givenName: User +sn: 201 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258682f6-9eff-1037-8866-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.750748Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.202,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.202 +mail: user.202@example.com +o: example +initials: u.202 +structuralObjectClass: inetOrgPerson +uidNumber: 1206 +gidNumber: 1213 +loginShell: /bin/bash +title: user.202 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.202 +cn: User 202 +displayName: User 202 +givenName: User +sn: 202 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25868580-9eff-1037-8867-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.750813Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.203,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.203 +mail: user.203@example.com +o: example +initials: u.203 +structuralObjectClass: inetOrgPerson +uidNumber: 1207 +gidNumber: 1214 +loginShell: /bin/bash +title: user.203 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.203 +cn: User 203 +displayName: User 203 +givenName: User +sn: 203 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258687e2-9eff-1037-8868-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.750874Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.204,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.204 +mail: user.204@example.com +o: example +initials: u.204 +structuralObjectClass: inetOrgPerson +uidNumber: 1208 +gidNumber: 1215 +loginShell: /bin/bash +title: user.204 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.204 +cn: User 204 +displayName: User 204 +givenName: User +sn: 204 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25868ab2-9eff-1037-8869-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.750946Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.205,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.205 +mail: user.205@example.com +o: example +initials: u.205 +structuralObjectClass: inetOrgPerson +uidNumber: 1209 +gidNumber: 1216 +loginShell: /bin/bash +title: user.205 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.205 +cn: User 205 +displayName: User 205 +givenName: User +sn: 205 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25868d14-9eff-1037-886a-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.751008Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.206,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.206 +mail: user.206@example.com +o: example +initials: u.206 +structuralObjectClass: inetOrgPerson +uidNumber: 1210 +gidNumber: 1217 +loginShell: /bin/bash +title: user.206 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.206 +cn: User 206 +displayName: User 206 +givenName: User +sn: 206 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25868fda-9eff-1037-886b-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.751079Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.207,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.207 +mail: user.207@example.com +o: example +initials: u.207 +structuralObjectClass: inetOrgPerson +uidNumber: 1211 +gidNumber: 1218 +loginShell: /bin/bash +title: user.207 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.207 +cn: User 207 +displayName: User 207 +givenName: User +sn: 207 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258692aa-9eff-1037-886c-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.751150Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.208,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.208 +mail: user.208@example.com +o: example +initials: u.208 +structuralObjectClass: inetOrgPerson +uidNumber: 1212 +gidNumber: 1219 +loginShell: /bin/bash +title: user.208 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.208 +cn: User 208 +displayName: User 208 +givenName: User +sn: 208 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25869534-9eff-1037-886d-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.751215Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.209,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.209 +mail: user.209@example.com +o: example +initials: u.209 +structuralObjectClass: inetOrgPerson +uidNumber: 1213 +gidNumber: 1220 +loginShell: /bin/bash +title: user.209 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.209 +cn: User 209 +displayName: User 209 +givenName: User +sn: 209 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258697aa-9eff-1037-886e-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.751278Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.210,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.210 +mail: user.210@example.com +o: example +initials: u.210 +structuralObjectClass: inetOrgPerson +uidNumber: 1214 +gidNumber: 1221 +loginShell: /bin/bash +title: user.210 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.210 +cn: User 210 +displayName: User 210 +givenName: User +sn: 210 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25869aa2-9eff-1037-886f-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.751354Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.211,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.211 +mail: user.211@example.com +o: example +initials: u.211 +structuralObjectClass: inetOrgPerson +uidNumber: 1215 +gidNumber: 1222 +loginShell: /bin/bash +title: user.211 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.211 +cn: User 211 +displayName: User 211 +givenName: User +sn: 211 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25869ee4-9eff-1037-8870-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.751462Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.212,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.212 +mail: user.212@example.com +o: example +initials: u.212 +structuralObjectClass: inetOrgPerson +uidNumber: 1216 +gidNumber: 1223 +loginShell: /bin/bash +title: user.212 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.212 +cn: User 212 +displayName: User 212 +givenName: User +sn: 212 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586a182-9eff-1037-8871-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.751531Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.213,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.213 +mail: user.213@example.com +o: example +initials: u.213 +structuralObjectClass: inetOrgPerson +uidNumber: 1217 +gidNumber: 1224 +loginShell: /bin/bash +title: user.213 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.213 +cn: User 213 +displayName: User 213 +givenName: User +sn: 213 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586a470-9eff-1037-8872-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.751605Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.214,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.214 +mail: user.214@example.com +o: example +initials: u.214 +structuralObjectClass: inetOrgPerson +uidNumber: 1218 +gidNumber: 1225 +loginShell: /bin/bash +title: user.214 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.214 +cn: User 214 +displayName: User 214 +givenName: User +sn: 214 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586a7c2-9eff-1037-8873-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.751690Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.215,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.215 +mail: user.215@example.com +o: example +initials: u.215 +structuralObjectClass: inetOrgPerson +uidNumber: 1219 +gidNumber: 1226 +loginShell: /bin/bash +title: user.215 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.215 +cn: User 215 +displayName: User 215 +givenName: User +sn: 215 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586aa42-9eff-1037-8874-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.751754Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.216,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.216 +mail: user.216@example.com +o: example +initials: u.216 +structuralObjectClass: inetOrgPerson +uidNumber: 1220 +gidNumber: 1227 +loginShell: /bin/bash +title: user.216 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.216 +cn: User 216 +displayName: User 216 +givenName: User +sn: 216 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586ad26-9eff-1037-8875-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.751828Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.217,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.217 +mail: user.217@example.com +o: example +initials: u.217 +structuralObjectClass: inetOrgPerson +uidNumber: 1221 +gidNumber: 1228 +loginShell: /bin/bash +title: user.217 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.217 +cn: User 217 +displayName: User 217 +givenName: User +sn: 217 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586af92-9eff-1037-8876-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.751891Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.218,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.218 +mail: user.218@example.com +o: example +initials: u.218 +structuralObjectClass: inetOrgPerson +uidNumber: 1222 +gidNumber: 1229 +loginShell: /bin/bash +title: user.218 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.218 +cn: User 218 +displayName: User 218 +givenName: User +sn: 218 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586b21c-9eff-1037-8877-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.751955Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.219,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.219 +mail: user.219@example.com +o: example +initials: u.219 +structuralObjectClass: inetOrgPerson +uidNumber: 1223 +gidNumber: 1230 +loginShell: /bin/bash +title: user.219 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.219 +cn: User 219 +displayName: User 219 +givenName: User +sn: 219 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586b4e2-9eff-1037-8878-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.752026Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.220,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.220 +mail: user.220@example.com +o: example +initials: u.220 +structuralObjectClass: inetOrgPerson +uidNumber: 1224 +gidNumber: 1231 +loginShell: /bin/bash +title: user.220 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.220 +cn: User 220 +displayName: User 220 +givenName: User +sn: 220 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586b758-9eff-1037-8879-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.752089Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.221,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.221 +mail: user.221@example.com +o: example +initials: u.221 +structuralObjectClass: inetOrgPerson +uidNumber: 1225 +gidNumber: 1232 +loginShell: /bin/bash +title: user.221 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.221 +cn: User 221 +displayName: User 221 +givenName: User +sn: 221 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586ba00-9eff-1037-887a-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.752158Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.222,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.222 +mail: user.222@example.com +o: example +initials: u.222 +structuralObjectClass: inetOrgPerson +uidNumber: 1226 +gidNumber: 1233 +loginShell: /bin/bash +title: user.222 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.222 +cn: User 222 +displayName: User 222 +givenName: User +sn: 222 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586bcf8-9eff-1037-887b-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.752233Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.223,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.223 +mail: user.223@example.com +o: example +initials: u.223 +structuralObjectClass: inetOrgPerson +uidNumber: 1227 +gidNumber: 1234 +loginShell: /bin/bash +title: user.223 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.223 +cn: User 223 +displayName: User 223 +givenName: User +sn: 223 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586bf64-9eff-1037-887c-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.752295Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.224,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.224 +mail: user.224@example.com +o: example +initials: u.224 +structuralObjectClass: inetOrgPerson +uidNumber: 1228 +gidNumber: 1235 +loginShell: /bin/bash +title: user.224 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.224 +cn: User 224 +displayName: User 224 +givenName: User +sn: 224 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586c1da-9eff-1037-887d-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.752358Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.225,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.225 +mail: user.225@example.com +o: example +initials: u.225 +structuralObjectClass: inetOrgPerson +uidNumber: 1229 +gidNumber: 1236 +loginShell: /bin/bash +title: user.225 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.225 +cn: User 225 +displayName: User 225 +givenName: User +sn: 225 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586c4a0-9eff-1037-887e-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.752429Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.226,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.226 +mail: user.226@example.com +o: example +initials: u.226 +structuralObjectClass: inetOrgPerson +uidNumber: 1230 +gidNumber: 1237 +loginShell: /bin/bash +title: user.226 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.226 +cn: User 226 +displayName: User 226 +givenName: User +sn: 226 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586c72a-9eff-1037-887f-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.752494Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.227,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.227 +mail: user.227@example.com +o: example +initials: u.227 +structuralObjectClass: inetOrgPerson +uidNumber: 1231 +gidNumber: 1238 +loginShell: /bin/bash +title: user.227 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.227 +cn: User 227 +displayName: User 227 +givenName: User +sn: 227 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586c98c-9eff-1037-8880-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.752555Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.228,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.228 +mail: user.228@example.com +o: example +initials: u.228 +structuralObjectClass: inetOrgPerson +uidNumber: 1232 +gidNumber: 1239 +loginShell: /bin/bash +title: user.228 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.228 +cn: User 228 +displayName: User 228 +givenName: User +sn: 228 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586cc98-9eff-1037-8881-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.752633Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.229,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.229 +mail: user.229@example.com +o: example +initials: u.229 +structuralObjectClass: inetOrgPerson +uidNumber: 1233 +gidNumber: 1240 +loginShell: /bin/bash +title: user.229 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.229 +cn: User 229 +displayName: User 229 +givenName: User +sn: 229 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586d01c-9eff-1037-8882-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.752723Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.230,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.230 +mail: user.230@example.com +o: example +initials: u.230 +structuralObjectClass: inetOrgPerson +uidNumber: 1234 +gidNumber: 1241 +loginShell: /bin/bash +title: user.230 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.230 +cn: User 230 +displayName: User 230 +givenName: User +sn: 230 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586d2b0-9eff-1037-8883-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.752789Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.231,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.231 +mail: user.231@example.com +o: example +initials: u.231 +structuralObjectClass: inetOrgPerson +uidNumber: 1235 +gidNumber: 1242 +loginShell: /bin/bash +title: user.231 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.231 +cn: User 231 +displayName: User 231 +givenName: User +sn: 231 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586d576-9eff-1037-8884-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.752860Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.232,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.232 +mail: user.232@example.com +o: example +initials: u.232 +structuralObjectClass: inetOrgPerson +uidNumber: 1236 +gidNumber: 1243 +loginShell: /bin/bash +title: user.232 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.232 +cn: User 232 +displayName: User 232 +givenName: User +sn: 232 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586d7ec-9eff-1037-8885-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.752924Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.233,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.233 +mail: user.233@example.com +o: example +initials: u.233 +structuralObjectClass: inetOrgPerson +uidNumber: 1237 +gidNumber: 1244 +loginShell: /bin/bash +title: user.233 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.233 +cn: User 233 +displayName: User 233 +givenName: User +sn: 233 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586da58-9eff-1037-8886-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.752985Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.234,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.234 +mail: user.234@example.com +o: example +initials: u.234 +structuralObjectClass: inetOrgPerson +uidNumber: 1238 +gidNumber: 1245 +loginShell: /bin/bash +title: user.234 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.234 +cn: User 234 +displayName: User 234 +givenName: User +sn: 234 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586dd6e-9eff-1037-8887-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.753064Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.235,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.235 +mail: user.235@example.com +o: example +initials: u.235 +structuralObjectClass: inetOrgPerson +uidNumber: 1239 +gidNumber: 1246 +loginShell: /bin/bash +title: user.235 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.235 +cn: User 235 +displayName: User 235 +givenName: User +sn: 235 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586dfd0-9eff-1037-8888-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.753126Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.236,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.236 +mail: user.236@example.com +o: example +initials: u.236 +structuralObjectClass: inetOrgPerson +uidNumber: 1240 +gidNumber: 1247 +loginShell: /bin/bash +title: user.236 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.236 +cn: User 236 +displayName: User 236 +givenName: User +sn: 236 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586e282-9eff-1037-8889-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.753194Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.237,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.237 +mail: user.237@example.com +o: example +initials: u.237 +structuralObjectClass: inetOrgPerson +uidNumber: 1241 +gidNumber: 1248 +loginShell: /bin/bash +title: user.237 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.237 +cn: User 237 +displayName: User 237 +givenName: User +sn: 237 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586e548-9eff-1037-888a-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.753265Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.238,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.238 +mail: user.238@example.com +o: example +initials: u.238 +structuralObjectClass: inetOrgPerson +uidNumber: 1242 +gidNumber: 1249 +loginShell: /bin/bash +title: user.238 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.238 +cn: User 238 +displayName: User 238 +givenName: User +sn: 238 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586e7d2-9eff-1037-888b-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.753330Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.239,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.239 +mail: user.239@example.com +o: example +initials: u.239 +structuralObjectClass: inetOrgPerson +uidNumber: 1243 +gidNumber: 1250 +loginShell: /bin/bash +title: user.239 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.239 +cn: User 239 +displayName: User 239 +givenName: User +sn: 239 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586ea34-9eff-1037-888c-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.753392Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.240,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.240 +mail: user.240@example.com +o: example +initials: u.240 +structuralObjectClass: inetOrgPerson +uidNumber: 1244 +gidNumber: 1251 +loginShell: /bin/bash +title: user.240 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.240 +cn: User 240 +displayName: User 240 +givenName: User +sn: 240 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586ed0e-9eff-1037-888d-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.753464Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.241,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.241 +mail: user.241@example.com +o: example +initials: u.241 +structuralObjectClass: inetOrgPerson +uidNumber: 1245 +gidNumber: 1252 +loginShell: /bin/bash +title: user.241 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.241 +cn: User 241 +displayName: User 241 +givenName: User +sn: 241 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586ef7a-9eff-1037-888e-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.753527Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.242,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.242 +mail: user.242@example.com +o: example +initials: u.242 +structuralObjectClass: inetOrgPerson +uidNumber: 1246 +gidNumber: 1253 +loginShell: /bin/bash +title: user.242 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.242 +cn: User 242 +displayName: User 242 +givenName: User +sn: 242 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586f1fa-9eff-1037-888f-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.753590Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.243,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.243 +mail: user.243@example.com +o: example +initials: u.243 +structuralObjectClass: inetOrgPerson +uidNumber: 1247 +gidNumber: 1254 +loginShell: /bin/bash +title: user.243 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.243 +cn: User 243 +displayName: User 243 +givenName: User +sn: 243 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586f560-9eff-1037-8890-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.753676Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.244,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.244 +mail: user.244@example.com +o: example +initials: u.244 +structuralObjectClass: inetOrgPerson +uidNumber: 1248 +gidNumber: 1255 +loginShell: /bin/bash +title: user.244 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.244 +cn: User 244 +displayName: User 244 +givenName: User +sn: 244 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586f7f4-9eff-1037-8891-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.753743Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.245,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.245 +mail: user.245@example.com +o: example +initials: u.245 +structuralObjectClass: inetOrgPerson +uidNumber: 1249 +gidNumber: 1256 +loginShell: /bin/bash +title: user.245 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.245 +cn: User 245 +displayName: User 245 +givenName: User +sn: 245 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586fa4c-9eff-1037-8892-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.753804Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.246,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.246 +mail: user.246@example.com +o: example +initials: u.246 +structuralObjectClass: inetOrgPerson +uidNumber: 1250 +gidNumber: 1257 +loginShell: /bin/bash +title: user.246 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.246 +cn: User 246 +displayName: User 246 +givenName: User +sn: 246 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2586fd3a-9eff-1037-8893-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.753878Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.247,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.247 +mail: user.247@example.com +o: example +initials: u.247 +structuralObjectClass: inetOrgPerson +uidNumber: 1251 +gidNumber: 1258 +loginShell: /bin/bash +title: user.247 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.247 +cn: User 247 +displayName: User 247 +givenName: User +sn: 247 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2587001e-9eff-1037-8894-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.753952Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.248,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.248 +mail: user.248@example.com +o: example +initials: u.248 +structuralObjectClass: inetOrgPerson +uidNumber: 1252 +gidNumber: 1259 +loginShell: /bin/bash +title: user.248 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.248 +cn: User 248 +displayName: User 248 +givenName: User +sn: 248 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258702ee-9eff-1037-8895-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.754025Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.249,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.249 +mail: user.249@example.com +o: example +initials: u.249 +structuralObjectClass: inetOrgPerson +uidNumber: 1253 +gidNumber: 1260 +loginShell: /bin/bash +title: user.249 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.249 +cn: User 249 +displayName: User 249 +givenName: User +sn: 249 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258705b4-9eff-1037-8896-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.754095Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.250,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.250 +mail: user.250@example.com +o: example +initials: u.250 +structuralObjectClass: inetOrgPerson +uidNumber: 1254 +gidNumber: 1261 +loginShell: /bin/bash +title: user.250 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.250 +cn: User 250 +displayName: User 250 +givenName: User +sn: 250 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25870956-9eff-1037-8897-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.754188Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.251,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.251 +mail: user.251@example.com +o: example +initials: u.251 +structuralObjectClass: inetOrgPerson +uidNumber: 1255 +gidNumber: 1262 +loginShell: /bin/bash +title: user.251 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.251 +cn: User 251 +displayName: User 251 +givenName: User +sn: 251 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25870bcc-9eff-1037-8898-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.754252Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.252,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.252 +mail: user.252@example.com +o: example +initials: u.252 +structuralObjectClass: inetOrgPerson +uidNumber: 1256 +gidNumber: 1263 +loginShell: /bin/bash +title: user.252 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.252 +cn: User 252 +displayName: User 252 +givenName: User +sn: 252 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25870e9c-9eff-1037-8899-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.754323Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.253,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.253 +mail: user.253@example.com +o: example +initials: u.253 +structuralObjectClass: inetOrgPerson +uidNumber: 1257 +gidNumber: 1264 +loginShell: /bin/bash +title: user.253 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.253 +cn: User 253 +displayName: User 253 +givenName: User +sn: 253 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25871108-9eff-1037-889a-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.754385Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.254,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.254 +mail: user.254@example.com +o: example +initials: u.254 +structuralObjectClass: inetOrgPerson +uidNumber: 1258 +gidNumber: 1265 +loginShell: /bin/bash +title: user.254 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.254 +cn: User 254 +displayName: User 254 +givenName: User +sn: 254 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2587136a-9eff-1037-889b-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.754446Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.255,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.255 +mail: user.255@example.com +o: example +initials: u.255 +structuralObjectClass: inetOrgPerson +uidNumber: 1259 +gidNumber: 1266 +loginShell: /bin/bash +title: user.255 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.255 +cn: User 255 +displayName: User 255 +givenName: User +sn: 255 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25871630-9eff-1037-889c-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.754517Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.256,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.256 +mail: user.256@example.com +o: example +initials: u.256 +structuralObjectClass: inetOrgPerson +uidNumber: 1260 +gidNumber: 1267 +loginShell: /bin/bash +title: user.256 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.256 +cn: User 256 +displayName: User 256 +givenName: User +sn: 256 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2587189c-9eff-1037-889d-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.754579Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.257,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.257 +mail: user.257@example.com +o: example +initials: u.257 +structuralObjectClass: inetOrgPerson +uidNumber: 1261 +gidNumber: 1268 +loginShell: /bin/bash +title: user.257 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.257 +cn: User 257 +displayName: User 257 +givenName: User +sn: 257 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25871afe-9eff-1037-889e-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.754640Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.258,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.258 +mail: user.258@example.com +o: example +initials: u.258 +structuralObjectClass: inetOrgPerson +uidNumber: 1262 +gidNumber: 1269 +loginShell: /bin/bash +title: user.258 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.258 +cn: User 258 +displayName: User 258 +givenName: User +sn: 258 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25871e78-9eff-1037-889f-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.754729Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.259,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.259 +mail: user.259@example.com +o: example +initials: u.259 +structuralObjectClass: inetOrgPerson +uidNumber: 1263 +gidNumber: 1270 +loginShell: /bin/bash +title: user.259 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.259 +cn: User 259 +displayName: User 259 +givenName: User +sn: 259 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258720f8-9eff-1037-88a0-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.754793Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.260,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.260 +mail: user.260@example.com +o: example +initials: u.260 +structuralObjectClass: inetOrgPerson +uidNumber: 1264 +gidNumber: 1271 +loginShell: /bin/bash +title: user.260 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.260 +cn: User 260 +displayName: User 260 +givenName: User +sn: 260 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2587235a-9eff-1037-88a1-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.754854Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.261,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.261 +mail: user.261@example.com +o: example +initials: u.261 +structuralObjectClass: inetOrgPerson +uidNumber: 1265 +gidNumber: 1272 +loginShell: /bin/bash +title: user.261 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.261 +cn: User 261 +displayName: User 261 +givenName: User +sn: 261 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25872620-9eff-1037-88a2-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.754925Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.262,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.262 +mail: user.262@example.com +o: example +initials: u.262 +structuralObjectClass: inetOrgPerson +uidNumber: 1266 +gidNumber: 1273 +loginShell: /bin/bash +title: user.262 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.262 +cn: User 262 +displayName: User 262 +givenName: User +sn: 262 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2587288c-9eff-1037-88a3-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.754988Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.263,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.263 +mail: user.263@example.com +o: example +initials: u.263 +structuralObjectClass: inetOrgPerson +uidNumber: 1267 +gidNumber: 1274 +loginShell: /bin/bash +title: user.263 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.263 +cn: User 263 +displayName: User 263 +givenName: User +sn: 263 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25872aee-9eff-1037-88a4-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.755049Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.264,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.264 +mail: user.264@example.com +o: example +initials: u.264 +structuralObjectClass: inetOrgPerson +uidNumber: 1268 +gidNumber: 1275 +loginShell: /bin/bash +title: user.264 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.264 +cn: User 264 +displayName: User 264 +givenName: User +sn: 264 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25872db4-9eff-1037-88a5-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.755119Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.265,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.265 +mail: user.265@example.com +o: example +initials: u.265 +structuralObjectClass: inetOrgPerson +uidNumber: 1269 +gidNumber: 1276 +loginShell: /bin/bash +title: user.265 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.265 +cn: User 265 +displayName: User 265 +givenName: User +sn: 265 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25873070-9eff-1037-88a6-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.755189Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.266,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.266 +mail: user.266@example.com +o: example +initials: u.266 +structuralObjectClass: inetOrgPerson +uidNumber: 1270 +gidNumber: 1277 +loginShell: /bin/bash +title: user.266 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.266 +cn: User 266 +displayName: User 266 +givenName: User +sn: 266 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258732fa-9eff-1037-88a7-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.755254Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.267,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.267 +mail: user.267@example.com +o: example +initials: u.267 +structuralObjectClass: inetOrgPerson +uidNumber: 1271 +gidNumber: 1278 +loginShell: /bin/bash +title: user.267 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.267 +cn: User 267 +displayName: User 267 +givenName: User +sn: 267 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258735ca-9eff-1037-88a8-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.755326Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.268,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.268 +mail: user.268@example.com +o: example +initials: u.268 +structuralObjectClass: inetOrgPerson +uidNumber: 1272 +gidNumber: 1279 +loginShell: /bin/bash +title: user.268 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.268 +cn: User 268 +displayName: User 268 +givenName: User +sn: 268 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25873836-9eff-1037-88a9-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.755388Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.269,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.269 +mail: user.269@example.com +o: example +initials: u.269 +structuralObjectClass: inetOrgPerson +uidNumber: 1273 +gidNumber: 1280 +loginShell: /bin/bash +title: user.269 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.269 +cn: User 269 +displayName: User 269 +givenName: User +sn: 269 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25873a8e-9eff-1037-88aa-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.755449Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.270,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.270 +mail: user.270@example.com +o: example +initials: u.270 +structuralObjectClass: inetOrgPerson +uidNumber: 1274 +gidNumber: 1281 +loginShell: /bin/bash +title: user.270 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.270 +cn: User 270 +displayName: User 270 +givenName: User +sn: 270 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25873d54-9eff-1037-88ab-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.755519Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.271,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.271 +mail: user.271@example.com +o: example +initials: u.271 +structuralObjectClass: inetOrgPerson +uidNumber: 1275 +gidNumber: 1282 +loginShell: /bin/bash +title: user.271 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.271 +cn: User 271 +displayName: User 271 +givenName: User +sn: 271 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25873fc0-9eff-1037-88ac-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.755582Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.272,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.272 +mail: user.272@example.com +o: example +initials: u.272 +structuralObjectClass: inetOrgPerson +uidNumber: 1276 +gidNumber: 1283 +loginShell: /bin/bash +title: user.272 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.272 +cn: User 272 +displayName: User 272 +givenName: User +sn: 272 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25874434-9eff-1037-88ad-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.755694Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.273,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.273 +mail: user.273@example.com +o: example +initials: u.273 +structuralObjectClass: inetOrgPerson +uidNumber: 1277 +gidNumber: 1284 +loginShell: /bin/bash +title: user.273 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.273 +cn: User 273 +displayName: User 273 +givenName: User +sn: 273 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25874786-9eff-1037-88ae-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.755780Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.274,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.274 +mail: user.274@example.com +o: example +initials: u.274 +structuralObjectClass: inetOrgPerson +uidNumber: 1278 +gidNumber: 1285 +loginShell: /bin/bash +title: user.274 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.274 +cn: User 274 +displayName: User 274 +givenName: User +sn: 274 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25874a06-9eff-1037-88af-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.755844Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.275,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.275 +mail: user.275@example.com +o: example +initials: u.275 +structuralObjectClass: inetOrgPerson +uidNumber: 1279 +gidNumber: 1286 +loginShell: /bin/bash +title: user.275 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.275 +cn: User 275 +displayName: User 275 +givenName: User +sn: 275 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25874c68-9eff-1037-88b0-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.755906Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.276,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.276 +mail: user.276@example.com +o: example +initials: u.276 +structuralObjectClass: inetOrgPerson +uidNumber: 1280 +gidNumber: 1287 +loginShell: /bin/bash +title: user.276 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.276 +cn: User 276 +displayName: User 276 +givenName: User +sn: 276 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25874f42-9eff-1037-88b1-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.755978Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.277,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.277 +mail: user.277@example.com +o: example +initials: u.277 +structuralObjectClass: inetOrgPerson +uidNumber: 1281 +gidNumber: 1288 +loginShell: /bin/bash +title: user.277 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.277 +cn: User 277 +displayName: User 277 +givenName: User +sn: 277 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258751b8-9eff-1037-88b2-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.756041Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.278,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.278 +mail: user.278@example.com +o: example +initials: u.278 +structuralObjectClass: inetOrgPerson +uidNumber: 1282 +gidNumber: 1289 +loginShell: /bin/bash +title: user.278 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.278 +cn: User 278 +displayName: User 278 +givenName: User +sn: 278 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25875410-9eff-1037-88b3-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.756101Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.279,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.279 +mail: user.279@example.com +o: example +initials: u.279 +structuralObjectClass: inetOrgPerson +uidNumber: 1283 +gidNumber: 1290 +loginShell: /bin/bash +title: user.279 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.279 +cn: User 279 +displayName: User 279 +givenName: User +sn: 279 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258756d6-9eff-1037-88b4-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.756172Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.280,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.280 +mail: user.280@example.com +o: example +initials: u.280 +structuralObjectClass: inetOrgPerson +uidNumber: 1284 +gidNumber: 1291 +loginShell: /bin/bash +title: user.280 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.280 +cn: User 280 +displayName: User 280 +givenName: User +sn: 280 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25875988-9eff-1037-88b5-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.756242Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.281,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.281 +mail: user.281@example.com +o: example +initials: u.281 +structuralObjectClass: inetOrgPerson +uidNumber: 1285 +gidNumber: 1292 +loginShell: /bin/bash +title: user.281 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.281 +cn: User 281 +displayName: User 281 +givenName: User +sn: 281 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25875bfe-9eff-1037-88b6-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.756304Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.282,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.282 +mail: user.282@example.com +o: example +initials: u.282 +structuralObjectClass: inetOrgPerson +uidNumber: 1286 +gidNumber: 1293 +loginShell: /bin/bash +title: user.282 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.282 +cn: User 282 +displayName: User 282 +givenName: User +sn: 282 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25875ec4-9eff-1037-88b7-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.756375Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.283,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.283 +mail: user.283@example.com +o: example +initials: u.283 +structuralObjectClass: inetOrgPerson +uidNumber: 1287 +gidNumber: 1294 +loginShell: /bin/bash +title: user.283 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.283 +cn: User 283 +displayName: User 283 +givenName: User +sn: 283 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25876130-9eff-1037-88b8-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.756438Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.284,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.284 +mail: user.284@example.com +o: example +initials: u.284 +structuralObjectClass: inetOrgPerson +uidNumber: 1288 +gidNumber: 1295 +loginShell: /bin/bash +title: user.284 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.284 +cn: User 284 +displayName: User 284 +givenName: User +sn: 284 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2587639c-9eff-1037-88b9-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.756499Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.285,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.285 +mail: user.285@example.com +o: example +initials: u.285 +structuralObjectClass: inetOrgPerson +uidNumber: 1289 +gidNumber: 1296 +loginShell: /bin/bash +title: user.285 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.285 +cn: User 285 +displayName: User 285 +givenName: User +sn: 285 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25876662-9eff-1037-88ba-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.756570Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.286,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.286 +mail: user.286@example.com +o: example +initials: u.286 +structuralObjectClass: inetOrgPerson +uidNumber: 1290 +gidNumber: 1297 +loginShell: /bin/bash +title: user.286 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.286 +cn: User 286 +displayName: User 286 +givenName: User +sn: 286 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258768ce-9eff-1037-88bb-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.756632Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.287,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.287 +mail: user.287@example.com +o: example +initials: u.287 +structuralObjectClass: inetOrgPerson +uidNumber: 1291 +gidNumber: 1298 +loginShell: /bin/bash +title: user.287 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.287 +cn: User 287 +displayName: User 287 +givenName: User +sn: 287 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25876bf8-9eff-1037-88bc-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.756713Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.288,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.288 +mail: user.288@example.com +o: example +initials: u.288 +structuralObjectClass: inetOrgPerson +uidNumber: 1292 +gidNumber: 1299 +loginShell: /bin/bash +title: user.288 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.288 +cn: User 288 +displayName: User 288 +givenName: User +sn: 288 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25876edc-9eff-1037-88bd-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.756787Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.289,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.289 +mail: user.289@example.com +o: example +initials: u.289 +structuralObjectClass: inetOrgPerson +uidNumber: 1293 +gidNumber: 1300 +loginShell: /bin/bash +title: user.289 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.289 +cn: User 289 +displayName: User 289 +givenName: User +sn: 289 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25877148-9eff-1037-88be-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.756850Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.290,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.290 +mail: user.290@example.com +o: example +initials: u.290 +structuralObjectClass: inetOrgPerson +uidNumber: 1294 +gidNumber: 1301 +loginShell: /bin/bash +title: user.290 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.290 +cn: User 290 +displayName: User 290 +givenName: User +sn: 290 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258773aa-9eff-1037-88bf-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.756911Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.291,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.291 +mail: user.291@example.com +o: example +initials: u.291 +structuralObjectClass: inetOrgPerson +uidNumber: 1295 +gidNumber: 1302 +loginShell: /bin/bash +title: user.291 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.291 +cn: User 291 +displayName: User 291 +givenName: User +sn: 291 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2587767a-9eff-1037-88c0-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.756982Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.292,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.292 +mail: user.292@example.com +o: example +initials: u.292 +structuralObjectClass: inetOrgPerson +uidNumber: 1296 +gidNumber: 1303 +loginShell: /bin/bash +title: user.292 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.292 +cn: User 292 +displayName: User 292 +givenName: User +sn: 292 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258778e6-9eff-1037-88c1-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.757044Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.293,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.293 +mail: user.293@example.com +o: example +initials: u.293 +structuralObjectClass: inetOrgPerson +uidNumber: 1297 +gidNumber: 1304 +loginShell: /bin/bash +title: user.293 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.293 +cn: User 293 +displayName: User 293 +givenName: User +sn: 293 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25877b48-9eff-1037-88c2-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.757106Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.294,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.294 +mail: user.294@example.com +o: example +initials: u.294 +structuralObjectClass: inetOrgPerson +uidNumber: 1298 +gidNumber: 1305 +loginShell: /bin/bash +title: user.294 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.294 +cn: User 294 +displayName: User 294 +givenName: User +sn: 294 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25878020-9eff-1037-88c3-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.757227Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.295,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.295 +mail: user.295@example.com +o: example +initials: u.295 +structuralObjectClass: inetOrgPerson +uidNumber: 1299 +gidNumber: 1306 +loginShell: /bin/bash +title: user.295 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.295 +cn: User 295 +displayName: User 295 +givenName: User +sn: 295 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 258782f0-9eff-1037-88c4-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.757301Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.296,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.296 +mail: user.296@example.com +o: example +initials: u.296 +structuralObjectClass: inetOrgPerson +uidNumber: 1300 +gidNumber: 1307 +loginShell: /bin/bash +title: user.296 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.296 +cn: User 296 +displayName: User 296 +givenName: User +sn: 296 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 2587855c-9eff-1037-88c5-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.757363Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.297,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.297 +mail: user.297@example.com +o: example +initials: u.297 +structuralObjectClass: inetOrgPerson +uidNumber: 1301 +gidNumber: 1308 +loginShell: /bin/bash +title: user.297 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.297 +cn: User 297 +displayName: User 297 +givenName: User +sn: 297 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25878822-9eff-1037-88c6-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.757434Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.298,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.298 +mail: user.298@example.com +o: example +initials: u.298 +structuralObjectClass: inetOrgPerson +uidNumber: 1302 +gidNumber: 1309 +loginShell: /bin/bash +title: user.298 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.298 +cn: User 298 +displayName: User 298 +givenName: User +sn: 298 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25878a8e-9eff-1037-88c7-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.757497Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.299,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.299 +mail: user.299@example.com +o: example +initials: u.299 +structuralObjectClass: inetOrgPerson +uidNumber: 1303 +gidNumber: 1310 +loginShell: /bin/bash +title: user.299 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.299 +cn: User 299 +displayName: User 299 +givenName: User +sn: 299 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25878cfa-9eff-1037-88c8-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.757558Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: uid=user.300,ou=user,dc=example,dc=com +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +uid: user.300 +mail: user.300@example.com +o: example +initials: u.300 +structuralObjectClass: inetOrgPerson +uidNumber: 1304 +gidNumber: 1311 +loginShell: /bin/bash +title: user.300 +telephoneNumber: +1 234 567 8910 +facsimileTelephoneNumber: +1 234 567 8910 +homeDirectory: /user/user.300 +cn: User 300 +displayName: User 300 +givenName: User +sn: 300 +userPassword:: dGVzdHBhc3M= +physicalDeliveryOfficeName: 1-234 +ou: Users +entryUUID: 25878fc0-9eff-1037-88c9-f39faf7af9b0 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20170205203027Z +entryCSN: 20170205203027.757629Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20170205203027Z + +dn: ou=ppolicy,dc=example,dc=com +objectClass: organizationalUnit +ou: ppolicy +structuralObjectClass: organizationalUnit +entryUUID: ab1da419-8b45-4f74-b7e1-46d1d0ea87ce +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20171201011219Z +entryCSN: 20171201011219.211336Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20171201011219Z + +dn: cn=default,ou=ppolicy,dc=example,dc=com +cn: default +objectClass: device +objectClass: pwdPolicy +pwdAttribute: userPassword +pwdLockout: TRUE +pwdLockoutDuration: 1800 +pwdMaxFailure: 100 +pwdFailureCountInterval: 300 +structuralObjectClass: device +entryUUID: 5b04a418-5448-4f13-acff-17b263808b67 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20171201011219Z +entryCSN: 20171201011219.216962Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20171201011219Z + +dn: cn=serviceaccount,ou=ppolicy,dc=example,dc=com +cn: serviceaccount +objectClass: device +objectClass: pwdPolicy +pwdAttribute: userPassword +structuralObjectClass: device +entryUUID: 7830daeb-65d0-4b7f-ba9d-f02bdf908b24 +creatorsName: cn=manager,dc=example,dc=com +createTimestamp: 20171201011219Z +entryCSN: 20171201011219.228381Z#000000#004#000000 +modifiersName: cn=manager,dc=example,dc=com +modifyTimestamp: 20171201011219Z + diff --git a/tests/data/regressions/its8800/its8800 b/tests/data/regressions/its8800/its8800 new file mode 100755 index 0000000..c19e07f --- /dev/null +++ b/tests/data/regressions/its8800/its8800 @@ -0,0 +1,208 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $PPOLICY = ppolicyno; then + echo "Password policy overlay not available, test skipped" + exit 0 +fi + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi +if test $ACCESSLOG = accesslogno; then + echo "Accesslog overlay not available, test skipped" + exit 0 +fi +if test $BACKEND = ldif ; then + # Onelevel search does not return entries in order of creation or CSN. + echo "$BACKEND backend unsuitable for syncprov logdb, test skipped" + exit 0 +fi + +echo "This test tracks a case where changes are not refreshed when an old db is reloaded" +echo "See http://www.openldap.org/its/index.cgi/?findid=8800 for more information." + +MMR=4 +XDIR=$TESTDIR/srv + +mkdir -p $TESTDIR + +$SLAPPASSWD -g -n >$CONFIGPWF + +ITS=8800 +ITSDIR=$DATADIR/regressions/its$ITS + + +n=1 +while [ $n -le $MMR ]; do + echo "Initializing server configuration for MMR$n..." + DBDIR=${XDIR}$n/db + CFDIR=${XDIR}$n/slapd.d + + mkdir -p ${XDIR}$n $DBDIR.1 $DBDIR.2 $CFDIR + . $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd-provider${n}.ldif > $CONFLDIF + $SLAPADD -F $CFDIR -n 0 -l $CONFLDIF + $SLAPADD -F $CFDIR -q -b $BASEDN -l $ITSDIR/db.ldif + n=`expr $n + 1` +done + +KILLPIDS= +n=1 +while [ $n -le $MMR ]; do + MYURI=`eval echo '$URI'$n` + MYLOG=`eval echo '$LOG'$n` + CFDIR=${XDIR}$n/slapd.d + + echo "Starting provider slapd on TCP/IP URI $MYURI" + $SLAPD -F $CFDIR -h $MYURI -d $LVL $TIMING > $MYLOG 2>&1 & + + PID=$! + if test $WAIT != 0 ; then + echo PID $PID + read foo + fi + KILLPIDS="$PID $KILLPIDS" + if [ $n = 1 ]; then + MPID="$PID" + fi + sleep 1 + + echo "Using ldapsearch to check that provider slapd is running..." + for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $MYURI \ + '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 + n=`expr $n + 1` +done + +echo "Sleeping 10 seconds to allow stabalization..." +sleep 10 + +echo "Looping failed authentications for 50 users 10 times each..." +user=250 +while [ $user -le 300 ]; do + auths=1 + echo -n "user $user..." + while [ $auths -le 10 ]; do + $LDAPSEARCH -x -H $URI1 -D uid=user.$user,ou=user,dc=example,dc=com -w wrongpass uid=fred >/dev/null 2>&1 + RC=$? + if test $RC = 0 ; then + echo "ldapsearch succeeded when it should have failed" + exit 1 + fi + auths=`expr $auths + 1` + done + echo "done" + user=`expr $user + 1` +done + +echo -n "Sleeping 1 minute to ensure consumers catch up..." +sleep 60 +echo "done" + +echo -n "Stopping MMR1 slapd..." +kill -HUP $MPID +wait $MPID +KILLPIDS=`echo "$KILLPIDS " | sed -e "s/ $MPID / /"`; +sleep $SLEEP2 +echo "done" + +echo -n "Wiping primary and accesslog databases for MMR1..." +DBDIR="$TESTDIR/srv1/db" +CFDIR="$TESTDIR/srv1/slapd.d" +mv $DBDIR.1 $DBDIR.1.orig +mv $DBDIR.2 $DBDIR.2.orig +mkdir -p $DBDIR.1 $DBDIR.2 +$SLAPADD -F $CFDIR -q -b $BASEDN -l $ITSDIR/db.ldif +echo "done" + +echo "Starting provider1 slapd on TCP/IP URI $URI1" +CFDIR="$TESTDIR/srv1/slapd.d" +$SLAPD -F $CFDIR -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 & + +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID $KILLPIDS" +sleep 1 + +echo "Using ldapsearch to check that provider slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $URI1 \ + '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 +echo "done" + +echo "Sleeping 5 minutes to allow databases to sync..." +sleep 300 + +echo "Comparing resulting databases..." + +n=1 +while [ $n -le 4 ]; do + CFDIR=${XDIR}$n/slapd.d + $SLAPCAT -F $CFDIR -b $BASEDN -l $TESTDIR/finaldb-$n.ldif + n=`expr $n + 1` +done + +n=2 +while [ $n -le 4 ]; do + diff $TESTDIR/finaldb-1.ldif $TESTDIR/finaldb-$n.ldif > /dev/null 2>&1 + RC=$? + if test $RC != 0 ; then + echo "ERROR: Final LDIF files differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + n=`expr $n + 1` +done + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/data/regressions/its8800/slapd-provider1.ldif b/tests/data/regressions/its8800/slapd-provider1.ldif new file mode 100644 index 0000000..6bf0b84 --- /dev/null +++ b/tests/data/regressions/its8800/slapd-provider1.ldif @@ -0,0 +1,150 @@ +dn: cn=config +objectClass: olcGlobal +cn: config +olcLogLevel: Sync +olcLogLevel: Stats +olcPidFile: @TESTDIR@/slapd.1.pid +olcArgsFile: @TESTDIR@/slapd.1.args +olcServerID: 1 + +dn: cn=schema,cn=config +objectClass: olcSchemaConfig +cn: schema + +include: file://@TESTWD@/@SCHEMADIR@/core.ldif +include: file://@TESTWD@/@SCHEMADIR@/cosine.ldif +include: file://@TESTWD@/@SCHEMADIR@/inetorgperson.ldif +include: file://@TESTWD@/@SCHEMADIR@/misc.ldif +include: file://@TESTWD@/@SCHEMADIR@/nis.ldif +include: file://@TESTWD@/@SCHEMADIR@/ppolicy.ldif + +#mod#dn: cn=module{0},cn=config +#mod#objectClass: olcModuleList +#mod#cn: module{0} +#mod#olcModulePath: @TESTWD@/../servers/slapd/back-@BACKEND@/ +#mod#olcModuleLoad: {0}back_@BACKEND@.la + +#monitormod#dn: cn=module{1},cn=config +#monitormod#objectClass: olcModuleList +#monitormod#cn: module{1} +#monitormod#olcModulePath: @TESTWD@/../servers/slapd/back-monitor/ +#monitormod#olcModuleLoad: {0}back_monitor.la + +#syncprovmod#dn: cn=module{2},cn=config +#syncprovmod#objectClass: olcModuleList +#syncprovmod#cn: module{2} +#syncprovmod#olcModulePath: @TESTWD@/../servers/slapd/overlays/ +#syncprovmod#olcModuleLoad: {0}syncprov.la +#accesslogmod#olcModuleLoad: {1}accesslog.la +#ppolicymod#olcModuleLoad: {2}ppolicy.la + +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAccess: {0}to dn="" by * read +olcAccess: {1}to * by self write by users read by anonymous auth + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcAccess: {0}to * by * none +olcRootPW:< file://@TESTDIR@/configpw + +dn: olcDatabase={1}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {1}@BACKEND@ +olcSuffix: dc=example,dc=com +olcRootDN: cn=manager,dc=example,dc=com +olcRootPW: secret +olcSizeLimit: unlimited +olcTimeLimit: unlimited +olcMirrorMode: TRUE +olcSyncrepl: {0}rid=100 provider=@URI2@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +olcSyncrepl: {1}rid=101 provider=@URI3@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +olcSyncrepl: {2}rid=102 provider=@URI4@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +#~null~#olcDbDirectory: @TESTDIR@/srv1/db.1 +#indexdb#olcDbIndex: default eq +#indexdb#olcDbIndex: objectClass +#indexdb#olcDbIndex: entryUUID +#indexdb#olcDbIndex: entryCSN +#indexdb#olcDbIndex: cn eq,sub,approx +#indexdb#olcDbIndex: givenName eq,sub,approx +#indexdb#olcDbIndex: displayname eq,sub,approx +#indexdb#olcDbIndex: uid eq,sub +#indexdb#olcDbIndex: uidNumber eq +#indexdb#olcDbIndex: gidNumber eq +#indexdb#olcDbIndex: mail eq,sub +#indexdb#olcDbIndex: sn eq,sub,approx +#indexdb#olcDbIndex: description eq,sub +#indexdb#olcDbIndex: title eq,sub +#indexdb#olcDbIndex: member +#indexdb#olcDbIndex: ou eq,sub,approx +#indexdb#olcDbIndex: memberUid +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}syncprov,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncProvConfig +olcOverlay: {0}syncprov +olcSpCheckpoint: 1 10 +olcSpSessionlog: 50 + +dn: olcOverlay={1}accesslog,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcAccessLogConfig +olcOverlay: {1}accesslog +olcAccessLogDB: cn=accesslog +olcAccessLogOps: writes +olcAccessLogPurge: 07+00:00 01+00:00 +olcAccessLogSuccess: TRUE + +dn: olcOverlay={2}ppolicy,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcPPolicyConfig +olcOverlay: {2}ppolicy +olcPPolicyDefault: cn=default,ou=ppolicy,dc=example,dc=com + +dn: olcDatabase={2}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {2}@BACKEND@ +olcSuffix: cn=accesslog +olcSizeLimit: unlimited +olcTimeLimit: unlimited +olcDbIndex: default eq +olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart,reqDN +#~null~#olcDbDirectory: @TESTDIR@/srv1/db.2 +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}syncprov,olcDatabase={2}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncProvConfig +olcOverlay: {0}syncprov +olcSpNoPresent: TRUE +olcSpReloadHint: TRUE + +dn: olcDatabase={3}monitor,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {3}monitor +olcAccess: {0}to dn.subtree="cn=monitor" by * read diff --git a/tests/data/regressions/its8800/slapd-provider2.ldif b/tests/data/regressions/its8800/slapd-provider2.ldif new file mode 100644 index 0000000..3de1333 --- /dev/null +++ b/tests/data/regressions/its8800/slapd-provider2.ldif @@ -0,0 +1,150 @@ +dn: cn=config +objectClass: olcGlobal +cn: config +olcLogLevel: Sync +olcLogLevel: Stats +olcPidFile: @TESTDIR@/slapd.2.pid +olcArgsFile: @TESTDIR@/slapd.2.args +olcServerID: 2 + +dn: cn=schema,cn=config +objectClass: olcSchemaConfig +cn: schema + +include: file://@TESTWD@/@SCHEMADIR@/core.ldif +include: file://@TESTWD@/@SCHEMADIR@/cosine.ldif +include: file://@TESTWD@/@SCHEMADIR@/inetorgperson.ldif +include: file://@TESTWD@/@SCHEMADIR@/misc.ldif +include: file://@TESTWD@/@SCHEMADIR@/nis.ldif +include: file://@TESTWD@/@SCHEMADIR@/ppolicy.ldif + +#mod#dn: cn=module{0},cn=config +#mod#objectClass: olcModuleList +#mod#cn: module{0} +#mod#olcModulePath: @TESTWD@/../servers/slapd/back-@BACKEND@/ +#mod#olcModuleLoad: {0}back_@BACKEND@.la + +#monitormod#dn: cn=module{1},cn=config +#monitormod#objectClass: olcModuleList +#monitormod#cn: module{1} +#monitormod#olcModulePath: @TESTWD@/../servers/slapd/back-monitor/ +#monitormod#olcModuleLoad: {0}back_monitor.la + +#syncprovmod#dn: cn=module{2},cn=config +#syncprovmod#objectClass: olcModuleList +#syncprovmod#cn: module{2} +#syncprovmod#olcModulePath: @TESTWD@/../servers/slapd/overlays/ +#syncprovmod#olcModuleLoad: {0}syncprov.la +#accesslogmod#olcModuleLoad: {1}accesslog.la +#ppolicymod#olcModuleLoad: {2}ppolicy.la + +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAccess: {0}to dn="" by * read +olcAccess: {1}to * by self write by users read by anonymous auth + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcAccess: {0}to * by * none +olcRootPW:< file://@TESTDIR@/configpw + +dn: olcDatabase={1}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {1}@BACKEND@ +olcSuffix: dc=example,dc=com +olcRootDN: cn=manager,dc=example,dc=com +olcRootPW: secret +olcSizeLimit: unlimited +olcTimeLimit: unlimited +olcMirrorMode: TRUE +olcSyncrepl: {0}rid=100 provider=@URI1@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +olcSyncrepl: {1}rid=101 provider=@URI3@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +olcSyncrepl: {2}rid=102 provider=@URI4@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +#~null~#olcDbDirectory: @TESTDIR@/srv2/db.1 +#indexdb#olcDbIndex: default eq +#indexdb#olcDbIndex: objectClass +#indexdb#olcDbIndex: entryUUID +#indexdb#olcDbIndex: entryCSN +#indexdb#olcDbIndex: cn eq,sub,approx +#indexdb#olcDbIndex: givenName eq,sub,approx +#indexdb#olcDbIndex: displayname eq,sub,approx +#indexdb#olcDbIndex: uid eq,sub +#indexdb#olcDbIndex: uidNumber eq +#indexdb#olcDbIndex: gidNumber eq +#indexdb#olcDbIndex: mail eq,sub +#indexdb#olcDbIndex: sn eq,sub,approx +#indexdb#olcDbIndex: description eq,sub +#indexdb#olcDbIndex: title eq,sub +#indexdb#olcDbIndex: member +#indexdb#olcDbIndex: ou eq,sub,approx +#indexdb#olcDbIndex: memberUid +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}syncprov,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncProvConfig +olcOverlay: {0}syncprov +olcSpCheckpoint: 1 10 +olcSpSessionlog: 50 + +dn: olcOverlay={1}accesslog,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcAccessLogConfig +olcOverlay: {1}accesslog +olcAccessLogDB: cn=accesslog +olcAccessLogOps: writes +olcAccessLogPurge: 07+00:00 01+00:00 +olcAccessLogSuccess: TRUE + +dn: olcOverlay={2}ppolicy,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcPPolicyConfig +olcOverlay: {2}ppolicy +olcPPolicyDefault: cn=default,ou=ppolicy,dc=example,dc=com + +dn: olcDatabase={2}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {2}@BACKEND@ +olcSuffix: cn=accesslog +olcSizeLimit: unlimited +olcTimeLimit: unlimited +olcDbIndex: default eq +olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart,reqDN +#~null~#olcDbDirectory: @TESTDIR@/srv2/db.2 +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}syncprov,olcDatabase={2}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncProvConfig +olcOverlay: {0}syncprov +olcSpNoPresent: TRUE +olcSpReloadHint: TRUE + +dn: olcDatabase={3}monitor,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {3}monitor +olcAccess: {0}to dn.subtree="cn=monitor" by * read diff --git a/tests/data/regressions/its8800/slapd-provider3.ldif b/tests/data/regressions/its8800/slapd-provider3.ldif new file mode 100644 index 0000000..ceb9079 --- /dev/null +++ b/tests/data/regressions/its8800/slapd-provider3.ldif @@ -0,0 +1,150 @@ +dn: cn=config +objectClass: olcGlobal +cn: config +olcLogLevel: Sync +olcLogLevel: Stats +olcPidFile: @TESTDIR@/slapd.3.pid +olcArgsFile: @TESTDIR@/slapd.3.args +olcServerID: 3 + +dn: cn=schema,cn=config +objectClass: olcSchemaConfig +cn: schema + +include: file://@TESTWD@/@SCHEMADIR@/core.ldif +include: file://@TESTWD@/@SCHEMADIR@/cosine.ldif +include: file://@TESTWD@/@SCHEMADIR@/inetorgperson.ldif +include: file://@TESTWD@/@SCHEMADIR@/misc.ldif +include: file://@TESTWD@/@SCHEMADIR@/nis.ldif +include: file://@TESTWD@/@SCHEMADIR@/ppolicy.ldif + +#mod#dn: cn=module{0},cn=config +#mod#objectClass: olcModuleList +#mod#cn: module{0} +#mod#olcModulePath: @TESTWD@/../servers/slapd/back-@BACKEND@/ +#mod#olcModuleLoad: {0}back_@BACKEND@.la + +#monitormod#dn: cn=module{1},cn=config +#monitormod#objectClass: olcModuleList +#monitormod#cn: module{1} +#monitormod#olcModulePath: @TESTWD@/../servers/slapd/back-monitor/ +#monitormod#olcModuleLoad: {0}back_monitor.la + +#syncprovmod#dn: cn=module{2},cn=config +#syncprovmod#objectClass: olcModuleList +#syncprovmod#cn: module{2} +#syncprovmod#olcModulePath: @TESTWD@/../servers/slapd/overlays/ +#syncprovmod#olcModuleLoad: {0}syncprov.la +#accesslogmod#olcModuleLoad: {1}accesslog.la +#ppolicymod#olcModuleLoad: {2}ppolicy.la + +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAccess: {0}to dn="" by * read +olcAccess: {1}to * by self write by users read by anonymous auth + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcAccess: {0}to * by * none +olcRootPW:< file://@TESTDIR@/configpw + +dn: olcDatabase={1}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {1}@BACKEND@ +olcSuffix: dc=example,dc=com +olcRootDN: cn=manager,dc=example,dc=com +olcRootPW: secret +olcSizeLimit: unlimited +olcTimeLimit: unlimited +olcMirrorMode: TRUE +olcSyncrepl: {0}rid=100 provider=@URI2@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +olcSyncrepl: {1}rid=101 provider=@URI1@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +olcSyncrepl: {2}rid=102 provider=@URI4@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +#~null~#olcDbDirectory: @TESTDIR@/srv3/db.1 +#indexdb#olcDbIndex: default eq +#indexdb#olcDbIndex: objectClass +#indexdb#olcDbIndex: entryUUID +#indexdb#olcDbIndex: entryCSN +#indexdb#olcDbIndex: cn eq,sub,approx +#indexdb#olcDbIndex: givenName eq,sub,approx +#indexdb#olcDbIndex: displayname eq,sub,approx +#indexdb#olcDbIndex: uid eq,sub +#indexdb#olcDbIndex: uidNumber eq +#indexdb#olcDbIndex: gidNumber eq +#indexdb#olcDbIndex: mail eq,sub +#indexdb#olcDbIndex: sn eq,sub,approx +#indexdb#olcDbIndex: description eq,sub +#indexdb#olcDbIndex: title eq,sub +#indexdb#olcDbIndex: member +#indexdb#olcDbIndex: ou eq,sub,approx +#indexdb#olcDbIndex: memberUid +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}syncprov,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncProvConfig +olcOverlay: {0}syncprov +olcSpCheckpoint: 1 10 +olcSpSessionlog: 50 + +dn: olcOverlay={1}accesslog,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcAccessLogConfig +olcOverlay: {1}accesslog +olcAccessLogDB: cn=accesslog +olcAccessLogOps: writes +olcAccessLogPurge: 07+00:00 01+00:00 +olcAccessLogSuccess: TRUE + +dn: olcOverlay={2}ppolicy,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcPPolicyConfig +olcOverlay: {2}ppolicy +olcPPolicyDefault: cn=default,ou=ppolicy,dc=example,dc=com + +dn: olcDatabase={2}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {2}@BACKEND@ +olcSuffix: cn=accesslog +olcSizeLimit: unlimited +olcTimeLimit: unlimited +olcDbIndex: default eq +olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart,reqDN +#~null~#olcDbDirectory: @TESTDIR@/srv3/db.2 +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}syncprov,olcDatabase={2}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncProvConfig +olcOverlay: {0}syncprov +olcSpNoPresent: TRUE +olcSpReloadHint: TRUE + +dn: olcDatabase={3}monitor,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {3}monitor +olcAccess: {0}to dn.subtree="cn=monitor" by * read diff --git a/tests/data/regressions/its8800/slapd-provider4.ldif b/tests/data/regressions/its8800/slapd-provider4.ldif new file mode 100644 index 0000000..21baccd --- /dev/null +++ b/tests/data/regressions/its8800/slapd-provider4.ldif @@ -0,0 +1,150 @@ +dn: cn=config +objectClass: olcGlobal +cn: config +olcLogLevel: Sync +olcLogLevel: Stats +olcPidFile: @TESTDIR@/slapd.4.pid +olcArgsFile: @TESTDIR@/slapd.4.args +olcServerID: 4 + +dn: cn=schema,cn=config +objectClass: olcSchemaConfig +cn: schema + +include: file://@TESTWD@/@SCHEMADIR@/core.ldif +include: file://@TESTWD@/@SCHEMADIR@/cosine.ldif +include: file://@TESTWD@/@SCHEMADIR@/inetorgperson.ldif +include: file://@TESTWD@/@SCHEMADIR@/misc.ldif +include: file://@TESTWD@/@SCHEMADIR@/nis.ldif +include: file://@TESTWD@/@SCHEMADIR@/ppolicy.ldif + +#mod#dn: cn=module{0},cn=config +#mod#objectClass: olcModuleList +#mod#cn: module{0} +#mod#olcModulePath: @TESTWD@/../servers/slapd/back-@BACKEND@/ +#mod#olcModuleLoad: {0}back_@BACKEND@.la + +#monitormod#dn: cn=module{1},cn=config +#monitormod#objectClass: olcModuleList +#monitormod#cn: module{1} +#monitormod#olcModulePath: @TESTWD@/../servers/slapd/back-monitor/ +#monitormod#olcModuleLoad: {0}back_monitor.la + +#syncprovmod#dn: cn=module{2},cn=config +#syncprovmod#objectClass: olcModuleList +#syncprovmod#cn: module{2} +#syncprovmod#olcModulePath: @TESTWD@/../servers/slapd/overlays/ +#syncprovmod#olcModuleLoad: {0}syncprov.la +#accesslogmod#olcModuleLoad: {1}accesslog.la +#ppolicymod#olcModuleLoad: {2}ppolicy.la + +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAccess: {0}to dn="" by * read +olcAccess: {1}to * by self write by users read by anonymous auth + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcAccess: {0}to * by * none +olcRootPW:< file://@TESTDIR@/configpw + +dn: olcDatabase={1}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {1}@BACKEND@ +olcSuffix: dc=example,dc=com +olcRootDN: cn=manager,dc=example,dc=com +olcRootPW: secret +olcSizeLimit: unlimited +olcTimeLimit: unlimited +olcMirrorMode: TRUE +olcSyncrepl: {0}rid=100 provider=@URI2@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +olcSyncrepl: {1}rid=101 provider=@URI3@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +olcSyncrepl: {2}rid=102 provider=@URI1@ binddn="cn=manager,dc=example,dc=com + " credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba + se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0)) + " filter="(objectClass=*)" schemachecking=off attrs="*,+" type=refreshAndPe + rsist retry="60 +" tls_reqcert=never timeout=0 keepalive=240:10:30 syncdata + =accesslog network-timeout=0 scope=sub interval=00:00:00:03 +#~null~#olcDbDirectory: @TESTDIR@/srv4/db.1 +#indexdb#olcDbIndex: default eq +#indexdb#olcDbIndex: objectClass +#indexdb#olcDbIndex: entryUUID +#indexdb#olcDbIndex: entryCSN +#indexdb#olcDbIndex: cn eq,sub,approx +#indexdb#olcDbIndex: givenName eq,sub,approx +#indexdb#olcDbIndex: displayname eq,sub,approx +#indexdb#olcDbIndex: uid eq,sub +#indexdb#olcDbIndex: uidNumber eq +#indexdb#olcDbIndex: gidNumber eq +#indexdb#olcDbIndex: mail eq,sub +#indexdb#olcDbIndex: sn eq,sub,approx +#indexdb#olcDbIndex: description eq,sub +#indexdb#olcDbIndex: title eq,sub +#indexdb#olcDbIndex: member +#indexdb#olcDbIndex: ou eq,sub,approx +#indexdb#olcDbIndex: memberUid +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}syncprov,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncProvConfig +olcOverlay: {0}syncprov +olcSpCheckpoint: 1 10 +olcSpSessionlog: 50 + +dn: olcOverlay={1}accesslog,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcAccessLogConfig +olcOverlay: {1}accesslog +olcAccessLogDB: cn=accesslog +olcAccessLogOps: writes +olcAccessLogPurge: 07+00:00 01+00:00 +olcAccessLogSuccess: TRUE + +dn: olcOverlay={2}ppolicy,olcDatabase={1}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcPPolicyConfig +olcOverlay: {2}ppolicy +olcPPolicyDefault: cn=default,ou=ppolicy,dc=example,dc=com + +dn: olcDatabase={2}@BACKEND@,cn=config +objectClass: olcDatabaseConfig +objectClass: olc@BACKEND@Config +olcDatabase: {2}@BACKEND@ +olcSuffix: cn=accesslog +olcSizeLimit: unlimited +olcTimeLimit: unlimited +olcDbIndex: default eq +olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart,reqDN +#~null~#olcDbDirectory: @TESTDIR@/srv4/db.2 +#mdb#olcDbMaxSize: 33554432 + +dn: olcOverlay={0}syncprov,olcDatabase={2}@BACKEND@,cn=config +objectClass: olcOverlayConfig +objectClass: olcConfig +objectClass: top +objectClass: olcSyncProvConfig +olcOverlay: {0}syncprov +olcSpNoPresent: TRUE +olcSpReloadHint: TRUE + +dn: olcDatabase={3}monitor,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {3}monitor +olcAccess: {0}to dn.subtree="cn=monitor" by * read diff --git a/tests/data/relay.out b/tests/data/relay.out new file mode 100644 index 0000000..a17b58d --- /dev/null +++ b/tests/data/relay.out @@ -0,0 +1,2585 @@ +# searching base="dc=example,dc=com"... +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: dc=example,dc=com +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,dc=example,dc=com +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 + +# searching base="o=Example,c=US"... +dn: cn=All Staff,ou=Groups,o=Example,c=US +member: cn=Manager,o=Example,c=US +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Examp + le,c=US +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=John Doe,ou=Information Technology Division,ou=People,o=Example,c=U + S +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Exam + ple,c=US +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example + ,c=US +owner: cn=Manager,o=Example,c=US +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,o=Example,c=US +member: cn=Manager,o=Example,c=US +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +owner: cn=Manager,o=Example,c=US +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,o=Example,c=US +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Example,c + =US +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example,c=U + S +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: o=Example,c=US +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: uidObject +uid: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,o=Example,c=US +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,o=Example,c=US +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,o=Example,c=US +owner: cn=Manager,o=Example,c=US +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfNames +member: cn=Manager,o=Example,c=US +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example + ,c=US +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Exam + ple,c=US +member: cn=John Doe,ou=Information Technology Division,ou=People,o=Example,c=U + S + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Example, + c=US +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,o=Example,c=US +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 + +dn: ou=People,o=Example,c=US +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 + +# searching base="o=Esempio,c=IT"... +dn: cn=All Staff,ou=Groups,o=Esempio,c=IT +member: cn=Manager,o=Esempio,c=IT +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Esemp + io,c=IT +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=John Doe,ou=Information Technology Division,ou=People,o=Esempio,c=I + T +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Esem + pio,c=IT +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Esempio + ,c=IT +owner: cn=Manager,o=Esempio,c=IT +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,o=Esempio,c=IT +member: cn=Manager,o=Esempio,c=IT +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Esempio,c=IT +owner: cn=Manager,o=Esempio,c=IT +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,o=Esempio,c=IT +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Esempio,c + =IT +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Esempio,c=I + T +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Esempio,c=IT +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: o=Esempio,c=IT +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,o=Esempio,c=IT +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,o=Esempio,c=IT +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,o=Esempio,c=IT +owner: cn=Manager,o=Esempio,c=IT +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Esempio,c=IT +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Esempio, + c=IT +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,o=Esempio,c=IT +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Esempio,c=IT +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,o=Esempio,c=IT +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,o=Esempio,c=IT +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Esempio,c=IT +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 + +dn: ou=People,o=Esempio,c=IT +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Esempio,c=IT +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 + +# searching base="o=Beispiel,c=DE"... +dn: cn=All Staff,ou=Groups,o=Beispiel,c=DE +member: cn=Manager,o=Beispiel,c=DE +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Beisp + iel,c=DE +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Beispiel,c=DE +member: cn=John Doe,ou=Information Technology Division,ou=People,o=Beispiel,c= + DE +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Beispiel,c=DE +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Beispiel,c=DE +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Beis + piel,c=DE +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Beispiel,c=DE +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Beispiel,c=DE +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Beispiel,c=DE +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Beispie + l,c=DE +owner: cn=Manager,o=Beispiel,c=DE +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,o=Beispiel,c=DE +member: cn=Manager,o=Beispiel,c=DE +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Beispiel,c=DE +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Beispiel,c=DE +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Beispiel,c=DE +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Beispiel,c=DE +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Beispiel,c=DE +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Beispiel,c=DE +owner: cn=Manager,o=Beispiel,c=DE +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,o=Beispiel,c=DE +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Beispiel, + c=DE +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,o=Beispiel,c=DE +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: o=Beispiel,c=DE +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Beispiel,c= + DE +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,o=Beispiel,c=DE +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Beispiel,c=DE +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Beispiel,c=DE +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: ou=Groups,o=Beispiel,c=DE +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,o=Beispiel,c=DE +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,o=Beispiel,c=DE +owner: cn=Manager,o=Beispiel,c=DE +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Beispiel,c=DE +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Beispiel,c=DE +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Beispiel + ,c=DE +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,o=Beispiel,c=DE +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,o=Beispiel,c=DE +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Beispiel,c=DE +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Beispiel,c=DE +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Beispiel,c=DE +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,o=Beispiel,c=DE +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Beispiel,c=DE +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,o=Beispiel,c=DE +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Beispiel,c=DE +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Beispiel,c=DE +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 + +dn: ou=People,o=Beispiel,c=DE +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Beispiel,c=DE +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Beispiel,c=DE +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 + +# searching base="o=Example,c=US"... +dn: cn=Added Group,ou=Groups,o=Example,c=US +objectClass: groupOfNames +cn: Added Group +member: cn=Added Group,ou=Groups,o=Example,c=US + +dn: cn=Added User,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Added User +sn: User +uid: auser +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePhone: +49 1234567890 +drink: Beer +mail: auser@mail.alumni.example.com +telephoneNumber: +49 1234-567-890 +description: Just added in o=Beispiel,c=DE naming context + +dn: cn=All Staff,ou=Groups,o=Example,c=US +member: cn=Manager,o=Example,c=US +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Examp + le,c=US +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=John Doe,ou=Information Technology Division,ou=People,o=Example,c=U + S +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Exam + ple,c=US +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example + ,c=US +owner: cn=Manager,o=Example,c=US +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,o=Example,c=US +member: cn=Manager,o=Example,c=US +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Example,c=US +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +owner: cn=Manager,o=Example,c=US +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,o=Example,c=US +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Another Added Group,ou=Groups,o=Example,c=US +objectClass: groupOfNames +objectClass: uidObject +cn: Another Added Group +member: cn=Added Group,ou=Groups,o=Example,c=US +member: cn=Another Added Group,ou=Groups,o=Example,c=US +uid: added + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Example,c + =US +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example,c=U + S +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: o=Example,c=US +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: uidObject +uid: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,o=Example,c=US +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,o=Example,c=US +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,o=Example,c=US +owner: cn=Manager,o=Example,c=US +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfNames +member: cn=Manager,o=Example,c=US +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example + ,c=US +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Exam + ple,c=US +member: cn=John Doe,ou=Information Technology Division,ou=People,o=Example,c=U + S + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Example, + c=US +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=Jane Q. Doe,ou=Information Technology Division,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Jane Alverson +cn: Jane Q. Doe +cn: Jane Qissapaolo Doe +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John P. Doe,ou=Information Technology Division,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Jonathon Doe +cn: John P. Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,o=Example,c=US +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: ou=People,o=Example,c=US +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +seeAlso: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 +description: Just added self to seeAlso in o=Beispiel,c=DE virtual naming cont + ext + +# refldap://localhost:9012/ou=Referrals,o=Beispiel,c=DE??sub + +# searching base="o=Esempio,c=IT"... +dn: cn=Added Group,ou=Groups,o=Esempio,c=IT +objectClass: groupOfUniqueNames +cn: Added Group +uniqueMember: cn=Added Group,ou=Groups,dc=example,dc=com + +dn: cn=Added User,ou=Alumni Association,ou=People,o=Esempio,c=IT +objectClass: OpenLDAPperson +cn: Added User +sn: User +uid: auser +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +homePhone: +49 1234567890 +drink: Beer +mail: auser@mail.alumni.example.com +telephoneNumber: +49 1234-567-890 +description: Just added in o=Beispiel,c=DE naming context + +dn: cn=All Staff,ou=Groups,o=Esempio,c=IT +member: cn=Manager,o=Esempio,c=IT +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Esemp + io,c=IT +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=John Doe,ou=Information Technology Division,ou=People,o=Esempio,c=I + T +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Esem + pio,c=IT +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Esempio + ,c=IT +owner: cn=Manager,o=Esempio,c=IT +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,o=Esempio,c=IT +member: cn=Manager,o=Esempio,c=IT +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=Jane Doe,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=Mark Elliot,ou=Alumni Association,ou=People,o=Esempio,c=IT +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Esempio,c=IT +owner: cn=Manager,o=Esempio,c=IT +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,o=Esempio,c=IT +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Another Added Group,ou=Groups,o=Esempio,c=IT +objectClass: groupOfUniqueNames +objectClass: dcObject +cn: Another Added Group +uniqueMember: cn=Added Group,ou=Groups,dc=example,dc=com +uniqueMember: cn=Another Added Group,ou=Groups,dc=example,dc=com +dc: added + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Esempio,c + =IT +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Esempio,c=I + T +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Esempio,c=IT +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: o=Esempio,c=IT +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,o=Esempio,c=IT +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,o=Esempio,c=IT +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,o=Esempio,c=IT +owner: cn=Manager,o=Esempio,c=IT +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Esempio,c=IT +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Esempio, + c=IT +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=Jane Q. Doe,ou=Information Technology Division,ou=People,o=Esempio,c=IT +objectClass: OpenLDAPperson +cn: Jane Alverson +cn: Jane Q. Doe +cn: Jane Qissapaolo Doe +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Esempio,c=IT +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John P. Doe,ou=Information Technology Division,ou=People,o=Esempio,c=IT +objectClass: OpenLDAPperson +cn: Jonathon Doe +cn: John P. Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,o=Esempio,c=IT +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: ou=People,o=Esempio,c=IT +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Esempio,c=IT +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,o=Esempio,c=IT +seeAlso: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Esempio,c=IT +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 +description: Just added self to seeAlso in o=Beispiel,c=DE virtual naming cont + ext + +# refldap://localhost:9012/ou=Referrals,o=Beispiel,c=DE??sub + +# searching filter="(objectClass=referral)" +# attrs="'*' ref" +# base="dc=example,dc=com"... +dn: ou=Referrals,dc=example,dc=com +objectClass: referral +objectClass: extensibleObject +ou: Referrals +description: Just added as ldap://localhost.localdomain:389/ou=Referrals,o=Bei + spiel,c=DE +description: ...and modified as ldap://localhost:9012/ou=Referrals,o=Beispiel, + c=DE +ref: ldap://localhost:9012/ou=Referrals,o=Beispiel,c=DE + +# base="o=Example,c=US"... +dn: ou=Referrals,o=Example,c=US +objectClass: referral +objectClass: extensibleObject +ou: Referrals +description: Just added as ldap://localhost.localdomain:389/ou=Referrals,o=Bei + spiel,c=DE +description: ...and modified as ldap://localhost:9012/ou=Referrals,o=Beispiel, + c=DE +ref: ldap://localhost:9012/ou=Referrals,o=Beispiel,c=DE + +# base="o=Esempio,c=IT"... +dn: ou=Referrals,o=Esempio,c=IT +objectClass: referral +objectClass: extensibleObject +ou: Referrals +description: Just added as ldap://localhost.localdomain:389/ou=Referrals,o=Bei + spiel,c=DE +description: ...and modified as ldap://localhost:9012/ou=Referrals,o=Beispiel, + c=DE +ref: ldap://localhost:9012/ou=Referrals,o=Beispiel,c=DE + +# searching filter="(seeAlso=cn=all staff,ou=Groups,o=Example,c=US)" +# attrs="seeAlso" +# base="o=Example,c=US"... +dn: cn=Added User,ou=Alumni Association,ou=People,o=Example,c=US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Example,c + =US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example,c=U + S +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=Example,c=US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,o=Example,c=US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,o=Example, + c=US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=Jane Q. Doe,ou=Information Technology Division,ou=People,o=Example,c=US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,o=Example,c=US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=John P. Doe,ou=Information Technology Division,ou=People,o=Example,c=US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US +seeAlso: cn=All Staff,ou=Groups,o=Example,c=US +seeAlso: cn=Ursula Hampster,ou=Alumni Association,ou=People,o=Example,c=US + +# refldap://localhost:9012/ou=Referrals,o=Beispiel,c=DE??sub + +# searching filter="(uid=example)" +# attrs="uid" +# base="o=Example,c=US"... +dn: o=Example,c=US +uid: example + +# refldap://localhost:9012/ou=Referrals,o=Beispiel,c=DE??sub + +# searching filter="(member=cn=Another Added Group,ou=Groups,o=Example,c=US)" +# attrs="member" +# base="o=Example,c=US"... +dn: cn=Another Added Group,ou=Groups,o=Example,c=US +member: cn=Added Group,ou=Groups,o=Example,c=US +member: cn=Another Added Group,ou=Groups,o=Example,c=US + +# refldap://localhost:9012/ou=Referrals,o=Beispiel,c=DE??sub + diff --git a/tests/data/retcode.conf b/tests/data/retcode.conf new file mode 100644 index 0000000..86d8a1f --- /dev/null +++ b/tests/data/retcode.conf @@ -0,0 +1,115 @@ +# slapo-retcode standard track response codes configuration example +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. +# +# From "ldap.h", revised as per <draft-ietf-ldapbis-protocol> + +retcode-item "cn=success" 0x00 + +retcode-item "cn=success w/ delay" 0x00 sleeptime=2 + +retcode-item "cn=operationsError" 0x01 +retcode-item "cn=protocolError" 0x02 +retcode-item "cn=timeLimitExceeded" 0x03 op=search +retcode-item "cn=sizeLimitExceeded" 0x04 op=search +retcode-item "cn=compareFalse" 0x05 op=compare +retcode-item "cn=compareTrue" 0x06 op=compare +retcode-item "cn=authMethodNotSupported" 0x07 +retcode-item "cn=strongAuthNotSupported" 0x07 text="same as authMethodNotSupported" +retcode-item "cn=strongAuthRequired" 0x08 +retcode-item "cn=strongerAuthRequired" 0x08 text="same as strongAuthRequired" +#retcode-item "cn=partialResults" 0x09 text="LDAPv2+ (not LDAPv3)" + +retcode-item "cn=referral" 0x0a text="LDAPv3" ref="ldap://:9019" +retcode-item "cn=adminLimitExceeded" 0x0b text="LDAPv3" +retcode-item "cn=unavailableCriticalExtension" 0x0c text="LDAPv3" +retcode-item "cn=confidentialityRequired" 0x0d text="LDAPv3" +retcode-item "cn=saslBindInProgress" 0x0e text="LDAPv3" + +# LDAP_ATTR_ERROR(n) LDAP_RANGE((n),0x10,0x15) /* 16-21 */ + +retcode-item "cn=noSuchAttribute" 0x10 +retcode-item "cn=undefinedAttributeType" 0x11 +retcode-item "cn=inappropriateMatching" 0x12 +retcode-item "cn=constraintViolation" 0x13 +retcode-item "cn=attributeOrValueExists" 0x14 +retcode-item "cn=invalidAttributeSyntax" 0x15 + +# LDAP_NAME_ERROR(n) LDAP_RANGE((n),0x20,0x24) /* 32-34,36 */ + +retcode-item "cn=noSuchObject" 0x20 +retcode-item "cn=aliasProblem" 0x21 +retcode-item "cn=invalidDNSyntax" 0x22 +#retcode-item "cn=isLeaf" 0x23 text="not LDAPv3" +retcode-item "cn=aliasDereferencingProblem" 0x24 + +# LDAP_SECURITY_ERROR(n) LDAP_RANGE((n),0x2F,0x32) /* 47-50 */ + +retcode-item "cn=proxyAuthzFailure" 0x2F text="LDAPv3 proxy authorization" +retcode-item "cn=inappropriateAuthentication" 0x30 +retcode-item "cn=invalidCredentials" 0x31 +retcode-item "cn=insufficientAccessRights" 0x32 + +# LDAP_SERVICE_ERROR(n) LDAP_RANGE((n),0x33,0x36) /* 51-54 */ + +retcode-item "cn=busy" 0x33 +retcode-item "cn=unavailable" 0x34 +retcode-item "cn=unwillingToPerform" 0x35 +retcode-item "cn=loopDetect" 0x36 + +# LDAP_UPDATE_ERROR(n) LDAP_RANGE((n),0x40,0x47) /* 64-69,71 */ + +retcode-item "cn=namingViolation" 0x40 +retcode-item "cn=objectClassViolation" 0x41 +retcode-item "cn=notAllowedOnNonleaf" 0x42 +retcode-item "cn=notAllowedOnRDN" 0x43 +retcode-item "cn=entryAlreadyExists" 0x44 +retcode-item "cn=objectClassModsProhibited" 0x45 +retcode-item "cn=resultsTooLarge" 0x46 text="CLDAP" +retcode-item "cn=affectsMultipleDSAs" 0x47 text="LDAPv3" + +retcode-item "cn=other" 0x50 + +# /* LCUP operation codes (113-117) - not implemented */ +retcode-item "cn=cupResourcesExhausted" 0x71 +retcode-item "cn=cupSecurityViolation" 0x72 +retcode-item "cn=cupInvalidData" 0x73 +retcode-item "cn=cupUnsupportedScheme" 0x74 +retcode-item "cn=cupReloadRequired" 0x75 + +# /* Cancel operation codes (118-121) */ +retcode-item "cn=cancelled" 0x76 +retcode-item "cn=noSuchOperation" 0x77 +retcode-item "cn=tooLate" 0x78 +retcode-item "cn=cannotCancel" 0x79 + + +# /* Experimental result codes */ +# LDAP_E_ERROR(n) LDAP_RANGE((n),0x1000,0x3FFF) /* experimental */ +# LDAP_X_ERROR(n) LDAP_RANGE((n),0x4000,0xFFFF) /* private use */ + +# /* for the LDAP Sync operation */ +retcode-item "cn=syncRefreshRequired" 0x4100 + +# /* for the LDAP No-Op control */ +retcode-item "cn=noOperation" 0x410e + +# /* for the Assertion control */ +retcode-item "cn=assertionFailed" 0x410f + +# /* for the Chaining Behavior control (consecutive result codes requested; +# * see <draft-sermersheim-ldap-chaining> ) */ +retcode-item "cn=noReferralsFound" 0x4110 +retcode-item "cn=cannotChain" 0x4111 + diff --git a/tests/data/rootdse.ldif b/tests/data/rootdse.ldif new file mode 100644 index 0000000..6bad226 --- /dev/null +++ b/tests/data/rootdse.ldif @@ -0,0 +1,2 @@ +dn: +vendorName: The OpenLDAP Project <http://www.openldap.org/> diff --git a/tests/data/search.out.master b/tests/data/search.out.master new file mode 100644 index 0000000..c48cd1f --- /dev/null +++ b/tests/data/search.out.master @@ -0,0 +1,389 @@ +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +title: Mythical Manager, Research Systems + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +title: Director, Embedded Systems + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Alumni Association + +dn: dc=example,dc=com +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=Manager,dc=example,dc=com +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +uid: uham + diff --git a/tests/data/search.out.xsearch b/tests/data/search.out.xsearch new file mode 100644 index 0000000..8bbddca --- /dev/null +++ b/tests/data/search.out.xsearch @@ -0,0 +1,645 @@ +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: dc=example,dc=com +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,dc=example,dc=com +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: dc=example,dc=com +o: Example, Inc. + +dn: dc=example,dc=com +dc: example +o: Example, Inc. + +dn: dc=example,dc=com +dc: example + +dn: cn=Subschema +attributeTypes: ( 0.9.2342.19200300.100.1.25 NAME ( 'dc' 'domainComponent' ) D + ESC 'RFC1274/2247: domain component' EQUALITY caseIgnoreIA5Match SUBSTR caseI + gnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) + diff --git a/tests/data/slapd-2db.conf b/tests/data/slapd-2db.conf new file mode 100644 index 0000000..51a8265 --- /dev/null +++ b/tests/data/slapd-2db.conf @@ -0,0 +1,52 @@ +# stand-alone slapd config -- for testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "cn=Everyone,ou=Groups,dc=example,dc=com" +subordinate +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.b +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_2 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd-aci.conf b/tests/data/slapd-aci.conf new file mode 100644 index 0000000..49c9a67 --- /dev/null +++ b/tests/data/slapd-aci.conf @@ -0,0 +1,58 @@ +# stand-alone slapd config -- for testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @DATADIR@/test.schema + +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#acimod#modulepath ../servers/slapd/ +#acimod#moduleload aci.la + +####################################################################### +# database definitions +####################################################################### + +access to dn="" + by * read + +access to dn="cn=Subschema" + by * read + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +access to dn.subtree="dc=example,dc=com" + by dynacl/aci write + +#monitor#database monitor +#monitor#rootdn "cn=Monitor" diff --git a/tests/data/slapd-acl.conf b/tests/data/slapd-acl.conf new file mode 100644 index 0000000..cabbdd6 --- /dev/null +++ b/tests/data/slapd-acl.conf @@ -0,0 +1,146 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +# global ACLs +# +# normal installations should protect root dse, cn=monitor, cn=subschema +# + +access to dn.exact="" attrs=objectClass + by users read +access to * + by * read + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ + +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf +add_content_acl on +#access to attrs=objectclass dn.subtree="dc=example,dc=com" +access to attrs=objectclass + by dn.exact="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" add + by * =rsc stop + +#access to filter="(objectclass=person)" attrs=userpassword dn.subtree="dc=example,dc=com" +access to filter="(objectclass=person)" attrs=userpassword + by anonymous auth + by self =wx + +access to dn.exact="cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com" + attrs=cn val="Mark A Elliot" + by dn="cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" read + by * break + +access to dn.exact="cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com" + attrs=cn val="Mark Elliot" + by dn="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" read + by * break + +access to dn.exact="cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com" + attrs=cn + by * search + +access to dn.exact="cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com" + attrs=cn val.regex="^John D.+" + by dn="cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" read + by * break + +access to dn.exact="cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com" + attrs=cn val.regex="^Jonath.+" + by dn="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" read + by * break + +access to dn.exact="cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com" + attrs=cn + by * search + +access to dn.onelevel="ou=Information Technology Division,ou=People,dc=example,dc=com" + filter="(cn=*Jensen)" + attrs=cn val.regex=".*Jensen$" + by dn="cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" read + by dn="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" read + by * break + +access to dn.exact="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" + attrs=cn + by * search + +access to dn.children="ou=Alumni Association,ou=People,dc=example,dc=com" + by dn.regex=".+,dc=example,dc=com" +c continue + by dn.subtree="dc=example,dc=com" +rs continue + by dn.children="dc=example,dc=com" +d continue + by * stop + +#access to attrs=member,uniquemember dn.subtree="dc=example,dc=com" +access to attrs=member,uniquemember + by dn.exact="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com" selfwrite + by dnattr=member selfwrite + by dnattr=uniquemember selfwrite + by * read + +#access to attrs=member,uniquemember filter="(mail=*com)" dn.subtree="dc=example,dc=com" +access to attrs=member,uniquemember filter="(mail=*com)" + by * read + +#access to filter="(|(objectclass=groupofnames)(objectClass=groupofuniquenames))" dn.subtree="dc=example,dc=com" +access to filter="(|(objectclass=groupofnames)(objectClass=groupofuniquenames))" + by dn.exact="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" =sc continue + by dn.regex="^cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com$" +rw stop + by * break + +access to dn.children="ou=Information Technology Division,ou=People,dc=example,dc=com" + by group/groupOfUniqueNames/uniqueMember.exact="cn=ITD Staff,ou=Groups,dc=example,dc=com" write + by * read + +access to dn.exact="cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com" + by set="[cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com]/member* & user" write + by * read + +#access to filter="(name=X*Y*Z)" dn.subtree="dc=example,dc=com" +access to filter="(name=X*Y*Z)" + by * continue + +access to dn.subtree="ou=Add & Delete,dc=example,dc=com" + by dn.exact="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" add + by dn.exact="cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" delete + by dn.exact="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com" write + by * read + +# fall into global ACLs + +#monitor#database monitor diff --git a/tests/data/slapd-cache-master-proxyauthz.conf b/tests/data/slapd-cache-master-proxyauthz.conf new file mode 100644 index 0000000..e313093 --- /dev/null +++ b/tests/data/slapd-cache-master-proxyauthz.conf @@ -0,0 +1,47 @@ +# master slapd config -- for proxy cache testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +disallow bind_anon + + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd-cache-master.conf b/tests/data/slapd-cache-master.conf new file mode 100644 index 0000000..c963e5c --- /dev/null +++ b/tests/data/slapd-cache-master.conf @@ -0,0 +1,44 @@ +# master slapd config -- for proxy cache testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd-chain1.conf b/tests/data/slapd-chain1.conf new file mode 100644 index 0000000..aff058b --- /dev/null +++ b/tests/data/slapd-chain1.conf @@ -0,0 +1,63 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +# +# uses the chain overlay as global; +# no chain-URI is configured, so the URI is parsed out of the referral +overlay chain +chain-uri @URI2@ +chain-idassert-bind bindmethod=simple + binddn="cn=Manager,dc=example,dc=com" + credentials=secret + mode=self + flags=non-prescriptive + +####################################################################### +# database definitions +####################################################################### + +# +# normal installations should protect root dse, +# cn=monitor, cn=schema, and cn=config +# + +database @BACKEND@ + +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#null#bind on +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd-chain2.conf b/tests/data/slapd-chain2.conf new file mode 100644 index 0000000..e13d3d9 --- /dev/null +++ b/tests/data/slapd-chain2.conf @@ -0,0 +1,62 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.2.pid +argsfile @TESTDIR@/slapd.2.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +# +# normal installations should protect root dse, +# cn=monitor, cn=schema, and cn=config +# + +database @BACKEND@ + +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.2.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_2 +#ndb#include @DATADIR@/ndb.conf + +# +# uses the chain overlay as database specific; +# the chain-URI is configured, so only that URI is chained +overlay chain +chain-uri @URI1@ +chain-idassert-bind bindmethod=simple + binddn="cn=Manager,dc=example,dc=com" + credentials=secret + mode=self + flags=non-prescriptive + +#monitor#database monitor diff --git a/tests/data/slapd-component.conf b/tests/data/slapd-component.conf new file mode 100644 index 0000000..1aad6fb --- /dev/null +++ b/tests/data/slapd-component.conf @@ -0,0 +1,48 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema + +include @DATADIR@/test.schema +include @DATADIR@/ditcontentrules.conf + +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +moduleload @DATADIR@/comp_libs/compmatch.la + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd-config-naked.conf b/tests/data/slapd-config-naked.conf new file mode 100644 index 0000000..ad7b2e7 --- /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/data/slapd-config-undo.conf b/tests/data/slapd-config-undo.conf new file mode 100644 index 0000000..3487acc --- /dev/null +++ b/tests/data/slapd-config-undo.conf @@ -0,0 +1,21 @@ +include @SCHEMADIR@/core.schema + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +database @BACKEND@ +suffix "o=undo" +rootdn "cn=Manager,o=undo" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor + +database config +include @TESTDIR@/configpw.conf diff --git a/tests/data/slapd-dds.conf b/tests/data/slapd-dds.conf new file mode 100644 index 0000000..f3b009f --- /dev/null +++ b/tests/data/slapd-dds.conf @@ -0,0 +1,87 @@ +# stand-alone slapd config -- for testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 2005-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @DATADIR@/test.schema + +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#ddsmod#modulepath ../servers/slapd/overlays/ +#ddsmod#moduleload dds.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#indexdb#index entryExpireTimestamp eq +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf +add_content_acl on + +overlay dds +dds-max-ttl 1d +dds-min-ttl 10s +dds-default-ttl 1h +dds-interval 5s +dds-tolerance 1s + +# This is to test the meeting feature +access to attrs=userPassword + by self write + by * read + +access to dn.base="ou=Groups,dc=example,dc=com" + attrs=children + by users write + +access to dn.onelevel="ou=Groups,dc=example,dc=com" + attrs=entryTtl + by dnattr=member manage + by * read + +access to dn.onelevel="ou=Groups,dc=example,dc=com" + by dnattr=creatorsName write + by * break + +access to dn.onelevel="ou=Groups,dc=example,dc=com" + attrs=entry + by * read + +access to dn.onelevel="ou=Groups,dc=example,dc=com" + attrs=member + by users selfwrite + by * read + +access to * + by * read + +#monitor#database monitor diff --git a/tests/data/slapd-deltasync-master.conf b/tests/data/slapd-deltasync-master.conf new file mode 100644 index 0000000..dfe16af --- /dev/null +++ b/tests/data/slapd-deltasync-master.conf @@ -0,0 +1,75 @@ +# master slapd config -- for testing of Delta SYNC replication +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#syncprovmod#modulepath ../servers/slapd/overlays/ +#syncprovmod#moduleload syncprov.la +#accesslogmod#modulepath ../servers/slapd/overlays/ +#accesslogmod#moduleload accesslog.la + +####################################################################### +# master database definitions +####################################################################### + +database @BACKEND@ +suffix "cn=log" +rootdn "cn=Manager,dc=example,dc=com" +#~null~#directory @TESTDIR@/db.1.b +#indexdb#index objectClass eq +#indexdb#index entryUUID,entryCSN eq +#ndb#dbname db_2 +#ndb#include @DATADIR@/ndb.conf + +overlay syncprov +syncprov-reloadhint true +syncprov-nopresent true + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#indexdb#index entryUUID,entryCSN eq +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + + +access to * + by users write + by * read + +overlay syncprov +#syncprov-sessionlog 100 + +overlay accesslog +logdb cn=log +logops writes +logsuccess true + +#monitor#database monitor diff --git a/tests/data/slapd-deltasync-slave.conf b/tests/data/slapd-deltasync-slave.conf new file mode 100644 index 0000000..5b893eb --- /dev/null +++ b/tests/data/slapd-deltasync-slave.conf @@ -0,0 +1,76 @@ +# slave slapd config -- for testing of Delta SYNC replication +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +# +pidfile @TESTDIR@/slapd.2.pid +argsfile @TESTDIR@/slapd.2.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#syncprovmod#modulepath ../servers/slapd/overlays/ +#syncprovmod#moduleload syncprov.la +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la + +#ldapyes#overlay chain +#ldapyes#chain-uri @URI1@ +#ldapyes#chain-idassert-bind bindmethod=simple binddn="cn=Manager,dc=example,dc=com" credentials=secret mode=self +#ldapmod#overlay chain +#ldapmod#chain-uri @URI1@ +#ldapmod#chain-idassert-bind bindmethod=simple binddn="cn=Manager,dc=example,dc=com" credentials=secret mode=self + +####################################################################### +# consumer database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Replica,dc=example,dc=com" +rootpw secret +#null#bind on +#~null~#directory @TESTDIR@/db.2.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_3 +#ndb#include @DATADIR@/ndb.conf + +# Don't change syncrepl spec yet +syncrepl rid=1 + provider=@URI1@ + binddn="cn=Manager,dc=example,dc=com" + bindmethod=simple + credentials=secret + searchbase="dc=example,dc=com" + filter="(objectClass=*)" + logbase="cn=log" + logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" + syncdata=accesslog + attrs="*,+" + schemachecking=off + scope=sub + type=refreshAndPersist + retry="3 +" interval=00:00:00:03 +updateref @URI1@ + +overlay syncprov + +#monitor#database monitor diff --git a/tests/data/slapd-dn.conf b/tests/data/slapd-dn.conf new file mode 100644 index 0000000..5994f7d --- /dev/null +++ b/tests/data/slapd-dn.conf @@ -0,0 +1,46 @@ +# stand-alone slapd config -- for testing DNs +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 2004-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @DATADIR@/test.schema + +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd-dnssrv.conf b/tests/data/slapd-dnssrv.conf new file mode 100644 index 0000000..cc38c6f --- /dev/null +++ b/tests/data/slapd-dnssrv.conf @@ -0,0 +1,35 @@ +# DNS SRV slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +pidfile @TESTDIR@/slapd.pid +argsfile @TESTDIR@/slapd.args + +sasl-secprops noanonymous +#sasl-secprops none + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +#monitor#database monitor + +database dnssrv +suffix "" diff --git a/tests/data/slapd-dynamic.ldif b/tests/data/slapd-dynamic.ldif new file mode 100644 index 0000000..166e58f --- /dev/null +++ b/tests/data/slapd-dynamic.ldif @@ -0,0 +1,8 @@ +dn: cn=config +objectClass: olcGlobal +cn: config + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcRootPW:< file://@TESTDIR@/configpw diff --git a/tests/data/slapd-dynlist.conf b/tests/data/slapd-dynlist.conf new file mode 100644 index 0000000..363e00e --- /dev/null +++ b/tests/data/slapd-dynlist.conf @@ -0,0 +1,56 @@ +# stand-alone slapd config -- for testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @SCHEMADIR@/dyngroup.schema +include @DATADIR@/test.schema + +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#dynlistmod#modulepath ../servers/slapd/overlays/ +#dynlistmod#moduleload dynlist.la + +####################################################################### +# database definitions +####################################################################### + +#monitor#database monitor + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +# we'll reconfigure the attrset dynamically +overlay dynlist +dynlist-attrset groupOfURLs memberURL + +database config +include @TESTDIR@/configpw.conf diff --git a/tests/data/slapd-emptydn.conf b/tests/data/slapd-emptydn.conf new file mode 100644 index 0000000..78b73d2 --- /dev/null +++ b/tests/data/slapd-emptydn.conf @@ -0,0 +1,79 @@ +# stand-alone slapd config -- for testing empty DNs +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 2004-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema + +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +access to dn.exact="" + by * read + +access to dn.exact="cn=Subschema" + by * read + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +access to attrs=userPassword + by dn.exact="cn=Manager,c=US" write + by self =wx + by * =x + +access to dn.subtree="dc=example,dc=com" + by dn.exact="cn=Manager,c=US" write + by * read + +#monitor#database monitor +#monitor#access to dn.subtree="cn=Monitor" +#monitor# by * read + +database @BACKEND@ +suffix "" +rootdn "cn=Manager,c=US" +rootpw secret +#~null~#directory @TESTDIR@/db.2.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_2 +#ndb#include @DATADIR@/ndb.conf + +access to attrs=userPassword + by self =wx + by * =x + +access to dn.subtree="" + by * read diff --git a/tests/data/slapd-glue-ldap.conf b/tests/data/slapd-glue-ldap.conf new file mode 100644 index 0000000..e717263 --- /dev/null +++ b/tests/data/slapd-glue-ldap.conf @@ -0,0 +1,82 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @SCHEMADIR@/ppolicy.schema +pidfile @TESTDIR@/slapd.m.pid +argsfile @TESTDIR@/slapd.m.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#relaymod#modulepath ../servers/slapd/back-relay/ +#relaymod#moduleload back_relay.la +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la +#metamod#modulepath ../servers/slapd/back-meta/ +#metamod#moduleload back_meta.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#rwmmod#modulepath ../servers/slapd/overlays/ +#rwmmod#moduleload rwm.la + +overlay rwm +rwm-suffixmassage "o=Example,c=US" "dc=example,dc=com" + +####################################################################### +# database definitions +####################################################################### + +# remote +database ldap +suffix "ou=Meta,dc=example,dc=com" +subordinate +uri "@URI2@" +rootdn "cn=Manager,dc=example,dc=com" +chase-referrals no +idassert-bind bindmethod=simple + binddn="cn=Manager,ou=Meta,dc=example,dc=com" + credentials="secret" + mode=self + flags=non-prescriptive +idassert-authzfrom "dn.exact:cn=Manager,o=Local" + +# local +database ldap +suffix "dc=example,dc=com" +uri "@URI1@" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +chase-referrals no +idassert-bind bindmethod=simple + binddn="cn=Manager,dc=example,dc=com" + credentials="secret" + mode=self + flags=non-prescriptive +idassert-authzfrom "dn.exact:cn=Manager,o=Local" + +limits dn.exact="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" time=1 size=8 + +# This is only for binding as the rootdn +database ldap +suffix "o=Local" +rootdn "cn=Manager,o=Local" +rootpw secret +uri "@URI6@" + +#monitor#database monitor diff --git a/tests/data/slapd-glue-syncrepl1.conf b/tests/data/slapd-glue-syncrepl1.conf new file mode 100644 index 0000000..0b27090 --- /dev/null +++ b/tests/data/slapd-glue-syncrepl1.conf @@ -0,0 +1,89 @@ +# stand-alone slapd config -- for backglue testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#syncprovmod#moduleload ../servers/slapd/overlays/syncprov.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "ou=Information Technology Division,ou=People,dc=example,dc=com" +subordinate +rootdn "cn=Manager 1,dc=example,dc=com" +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectclass eq +#indexdb#index uid pres,eq,sub +#indexdb#index cn,sn pres,eq,sub,subany +#indexdb#index entryUUID,entryCSN pres +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +overlay syncprov + +database @BACKEND@ +suffix "ou=Groups,dc=example,dc=com" +subordinate +rootdn "cn=Manager 1,dc=example,dc=com" +#~null~#directory @TESTDIR@/db.1.b +#indexdb#index objectclass eq +#indexdb#index uid pres,eq,sub +#indexdb#index cn,sn pres,eq,sub,subany +#indexdb#index entryUUID,entryCSN pres +#ndb#dbname db_2 +#ndb#include @DATADIR@/ndb.conf + +syncrepl rid=1 + provider=@URI2@ + binddn="cn=Manager 2,dc=example,dc=com" + bindmethod=simple + credentials=secret + searchbase="ou=Groups,dc=example,dc=com" + filter="(objectClass=*)" + attrs="*,+" + schemachecking=off + scope=sub + type=refreshAndPersist + retry="3 10 300 5" +updateref @URI2@ +#overlay syncprov + + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager 1,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.c +#indexdb#index objectclass eq +#indexdb#index uid pres,eq,sub +#indexdb#index cn,sn pres,eq,sub,subany +#ndb#dbname db_3 +#ndb#include @DATADIR@/ndb.conf + +#overlay syncprov + +#monitor#database monitor diff --git a/tests/data/slapd-glue-syncrepl2.conf b/tests/data/slapd-glue-syncrepl2.conf new file mode 100644 index 0000000..b3a6a8e --- /dev/null +++ b/tests/data/slapd-glue-syncrepl2.conf @@ -0,0 +1,92 @@ +# stand-alone slapd config -- for backglue testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.2.pid +argsfile @TESTDIR@/slapd.2.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#syncprovmod#moduleload ../servers/slapd/overlays/syncprov.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "ou=Information Technology Division,ou=People,dc=example,dc=com" +subordinate +rootdn "cn=Manager 2,dc=example,dc=com" +#~null~#directory @TESTDIR@/db.2.a +#indexdb#index objectclass eq +#indexdb#index uid pres,eq,sub +#indexdb#index cn,sn pres,eq,sub,subany +#indexdb#index entryUUID,entryCSN pres +#ndb#dbname db_4 +#ndb#include @DATADIR@/ndb.conf + + +syncrepl rid=2 + provider=@URI1@ + binddn="cn=Manager 1,dc=example,dc=com" + bindmethod=simple + credentials=secret + searchbase="ou=Information Technology Division,ou=People,dc=example,dc=com" + filter="(objectClass=*)" + attrs="*,+" + schemachecking=off + scope=sub + type=refreshAndPersist + retry="3 10 300 5" +updateref @URI1@ +#overlay syncprov + +database @BACKEND@ +suffix "ou=Groups,dc=example,dc=com" +subordinate +rootdn "cn=Manager 2,dc=example,dc=com" +#~null~#directory @TESTDIR@/db.2.b +#indexdb#index objectclass eq +#indexdb#index uid pres,eq,sub +#indexdb#index cn,sn pres,eq,sub,subany +#indexdb#index entryUUID,entryCSN pres +#ndb#dbname db_5 +#ndb#include @DATADIR@/ndb.conf + + +overlay syncprov + + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager 2,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.2.c +#indexdb#index objectclass eq +#indexdb#index uid pres,eq,sub +#indexdb#index cn,sn pres,eq,sub,subany +#ndb#dbname db_6 +#ndb#include @DATADIR@/ndb.conf + + +#overlay syncprov + +#monitor#database monitor diff --git a/tests/data/slapd-glue.conf b/tests/data/slapd-glue.conf new file mode 100644 index 0000000..2f85d04 --- /dev/null +++ b/tests/data/slapd-glue.conf @@ -0,0 +1,66 @@ +# stand-alone slapd config -- for backglue testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "ou=Information Technology Division,ou=People,dc=example,dc=com" +subordinate +rootdn "cn=Manager, dc=example,dc=com" +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectclass eq +#indexdb#index uid pres,eq,sub +#indexdb#index cn,sn pres,eq,sub,subany +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +database @BACKEND@ +suffix "ou=Groups,dc=example,dc=com" +subordinate +rootdn "cn=Manager, dc=example,dc=com" +#~null~#directory @TESTDIR@/db.1.b +#indexdb#index objectclass eq +#indexdb#index uid pres,eq,sub +#indexdb#index cn,sn pres,eq,sub,subany +#ndb#dbname db_2 +#ndb#include @DATADIR@/ndb.conf + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager, dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.c +#indexdb#index objectclass eq +#indexdb#index uid pres,eq,sub +#indexdb#index cn,sn pres,eq,sub,subany +#ndb#dbname db_3 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd-idassert.conf b/tests/data/slapd-idassert.conf new file mode 100644 index 0000000..ca67430 --- /dev/null +++ b/tests/data/slapd-idassert.conf @@ -0,0 +1,128 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +#ucdata-path ./ucdata +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#rwmmod#modulepath ../servers/slapd/overlays/ +#rwmmod#moduleload rwm.la + +####################################################################### +# database definitions +####################################################################### + +authz-policy both +authz-regexp "^uid=admin/([^,]+),.+" "ldap:///ou=Admin,dc=example,dc=com??sub?(cn=$1)" +authz-regexp "^uid=it/([^,]+),.+" "ldap:///ou=People,dc=example,dc=it??sub?(uid=$1)" +authz-regexp "^uid=(us/)?([^,]+),.+" "ldap:///ou=People,dc=example,dc=com??sub?(uid=$2)" + +# +# normal installations should protect root dse, +# cn=monitor, cn=schema, and cn=config +# + +access to attrs=userpassword + by self =wx + by anonymous =x + +access to dn.exact="" + by * read + +access to * + by users read + by * search + +database @BACKEND@ + +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#null#bind on +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +access to dn.exact="cn=Proxy,ou=Admin,dc=example,dc=com" + attrs=authzTo + by dn.exact="cn=Proxy,ou=Admin,dc=example,dc=com" =wx + by * =x + +database @BACKEND@ + +suffix "dc=example,dc=it" +rootdn "cn=Manager,dc=example,dc=it" +rootpw secret +#~null~#directory @TESTDIR@/db.2.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_2 +#ndb#include @DATADIR@/ndb.conf + +database ldap +suffix "o=Example,c=US" +uri "@URI1@" + +#sasl#idassert-bind bindmethod=sasl binddn="cn=Proxy US,ou=Admin,dc=example,dc=com" authcId="admin/proxy US" credentials="proxy" @SASL_MECH@ mode=self +#nosasl#idassert-bind bindmethod=simple binddn="cn=Proxy US,ou=Admin,dc=example,dc=com" credentials="proxy" mode=self + +# authorizes database +idassert-authzFrom "dn.subtree:dc=example,dc=it" + +overlay rwm +rwm-suffixmassage "dc=example,dc=com" + +database ldap +suffix "o=Esempio,c=IT" +uri "@URI1@" + +acl-authcDN "cn=Proxy IT,ou=Admin,dc=example,dc=com" +acl-passwd proxy + +idassert-bind bindmethod=simple binddn="cn=Proxy IT,ou=Admin,dc=example,dc=com" credentials="proxy" authzId="dn:cn=Sandbox,ou=Admin,dc=example,dc=com" + +# authorizes database +idassert-authzFrom "dn.subtree:dc=example,dc=com" +# authorizes anonymous +idassert-authzFrom "dn.exact:" + +overlay rwm +rwm-suffixmassage "dc=example,dc=com" + +access to attrs=entry,cn,sn,mail + by users read + +access to * + by dn.exact="cn=Proxy IT,ou=Admin,o=Esempio,c=IT" read + by group.exact="cn=Authorizable,ou=Groups,o=Esempio,c=IT" read + by dn.exact="cn=Sandbox,ou=Admin,dc=example,dc=com" search + by * none + +#monitor#database monitor +#monitor#rootdn "cn=monitor" +#monitor#rootpw monitor diff --git a/tests/data/slapd-ldapglue.conf b/tests/data/slapd-ldapglue.conf new file mode 100644 index 0000000..f9099a4 --- /dev/null +++ b/tests/data/slapd-ldapglue.conf @@ -0,0 +1,79 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +#ucdata-path ./ucdata +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +authz-regexp "^uid=([^,]+),.*" "uid=$1,ou=People,dc=example,dc=com" + +# +# normal installations should protect root dse, +# cn=monitor, cn=schema, and cn=config +# + +access to attrs=userpassword + by self =wx + by anonymous =x + +access to * + by * read + +# groups branch +database ldap +suffix "ou=Groups,dc=example,dc=com" +subordinate +uri "@URI3@" +# FIXME: doesn't work with authz=native +#sasl#idassert-bind bindmethod=sasl authcid=proxy credentials=proxy @SASL_MECH@ mode=self +#nosasl#idassert-bind bindmethod=simple binddn="uid=proxy,ou=Groups,dc=example,dc=com" credentials=proxy mode=self + +# people branch +database ldap +suffix "ou=People,dc=example,dc=com" +subordinate +uri "@URI2@" +# FIXME: doesn't work with authz=native +#sasl#idassert-bind bindmethod=sasl authcid=proxy credentials=proxy @SASL_MECH@ mode=self +#nosasl#idassert-bind bindmethod=simple binddn="uid=proxy,ou=People,dc=example,dc=com" credentials=proxy mode=self + +# root +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd-ldapgluegroups.conf b/tests/data/slapd-ldapgluegroups.conf new file mode 100644 index 0000000..e408c0d --- /dev/null +++ b/tests/data/slapd-ldapgluegroups.conf @@ -0,0 +1,61 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +#ucdata-path ./ucdata +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.3.pid +argsfile @TESTDIR@/slapd.3.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +authz-policy to +authz-regexp "^uid=([^,]+),.*" "uid=$1,ou=Groups,dc=example,dc=com" + +# +# normal installations should protect root dse, +# cn=monitor, cn=schema, and cn=config +# + +access to attrs=userpassword + by self =wx + by anonymous =x + +access to * + by users read + by * search + +# people branch +database @BACKEND@ +suffix "ou=Groups,dc=example,dc=com" +rootdn "cn=Manager,ou=Groups,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.3.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_6 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd-ldapgluepeople.conf b/tests/data/slapd-ldapgluepeople.conf new file mode 100644 index 0000000..15a5b41 --- /dev/null +++ b/tests/data/slapd-ldapgluepeople.conf @@ -0,0 +1,63 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +#ucdata-path ./ucdata +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.2.pid +argsfile @TESTDIR@/slapd.2.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +authz-policy to +authz-regexp "^uid=([^,]+),.*" "uid=$1,ou=People,dc=example,dc=com" + +# +# normal installations should protect root dse, +# cn=monitor, cn=schema, and cn=config +# + +access to attrs=userpassword + by dn.exact="uid=proxy,ou=People,dc=example,dc=com" read + by self =wx + by anonymous =x + +access to * + by users read + by * search + +# people branch +database @BACKEND@ +suffix "ou=People,dc=example,dc=com" +rootdn "cn=Manager,ou=People,dc=example,dc=com" +rootpw secret +#null#bind on +#~null~#directory @TESTDIR@/db.2.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_5 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd-limits.conf b/tests/data/slapd-limits.conf new file mode 100644 index 0000000..86a33a1 --- /dev/null +++ b/tests/data/slapd-limits.conf @@ -0,0 +1,64 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema + +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a + +# Need quality indices on "uid" to check "unchecked" limits... +#indexdb#index objectClass eq +#indexdb#index uid eq +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +# Need extra limits for pagedResults on backends that support it... +#maindb#limits dn.exact="cn=Unlimited User,ou=Paged Results Users,dc=example,dc=com" size=4 size.pr=unlimited +#maindb#limits dn.exact="cn=Page Size Limited User,ou=Paged Results Users,dc=example,dc=com" size=4 size.pr=4 +#maindb#limits dn.exact="cn=Paged Results Disabled User,ou=Paged Results Users,dc=example,dc=com" size=4 size.prtotal=disabled +#maindb#limits dn.exact="cn=Paged Results Limited User,ou=Paged Results Users,dc=example,dc=com" size=4 size.prtotal=10 + +limits dn.exact="cn=Unlimited User,ou=People,dc=example,dc=com" size=unlimited time=unlimited +limits dn.exact="cn=Soft Limited User,ou=People,dc=example,dc=com" size.soft=4 size.hard=unlimited +limits dn.exact="cn=Hard Limited User,ou=People,dc=example,dc=com" size.soft=4 size.hard=8 +limits dn.exact="cn=Unchecked Limited User,ou=People,dc=example,dc=com" size.unchecked=4 +limits group="cn=Unchecked Limited Users,ou=Groups,dc=example,dc=com" size.unchecked=4 +limits dn.regex="^cn=Foo User,ou=[^,]+,dc=example,dc=com$" size.soft=6 +limits dn.onelevel="ou=People,dc=example,dc=com" size.soft=5 +limits dn.children="ou=Groups,dc=example,dc=com" size.soft=4 +limits dn.subtree="ou=Admin,dc=example,dc=com" size.soft=3 +limits users size.soft=2 +limits anonymous size.soft=1 + +#monitor#database monitor diff --git a/tests/data/slapd-master.conf b/tests/data/slapd-master.conf new file mode 100644 index 0000000..22d0542 --- /dev/null +++ b/tests/data/slapd-master.conf @@ -0,0 +1,45 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema + +include @DATADIR@/ditcontentrules.conf + +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd-meta-target1.conf b/tests/data/slapd-meta-target1.conf new file mode 100644 index 0000000..5405c3f --- /dev/null +++ b/tests/data/slapd-meta-target1.conf @@ -0,0 +1,64 @@ +# stand-alone slapd config -- for testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @DATADIR@/test.schema + +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +# allow big PDUs from anonymous (for testing purposes) +sockbuf_max_incoming 4194303 + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#null#bind on +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +# ITS#5154: force mixed success/failure of binds using same connection +access to dn="cn=Barbara Jensen,ou=Information Technology DivisioN,ou=People,dc=example,dc=com" + attrs=userPassword + by dn="cn=Manager,o=Local" write + by * =r + +access to attrs=userPassword + by dn="cn=Manager,o=Local" write + by * =xr + +access to * + by dn="cn=Manager,o=Local" write + by * read + +#monitor#database monitor diff --git a/tests/data/slapd-meta-target2.conf b/tests/data/slapd-meta-target2.conf new file mode 100644 index 0000000..ff1697b --- /dev/null +++ b/tests/data/slapd-meta-target2.conf @@ -0,0 +1,59 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @SCHEMADIR@/ppolicy.schema +pidfile @TESTDIR@/slapd.2.pid +argsfile @TESTDIR@/slapd.2.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#relaymod#modulepath ../servers/slapd/back-relay/ +#relaymod#moduleload back_relay.la +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la +#metamod#modulepath ../servers/slapd/back-meta/ +#metamod#moduleload back_meta.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#rwmmod#modulepath ../servers/slapd/overlays/ +#rwmmod#moduleload rwm.la + +idletimeout 5 + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "ou=Meta,dc=example,dc=com" +rootdn "cn=Manager,ou=Meta,dc=example,dc=com" +rootpw secret +#null#bind on +#~null~#directory @TESTDIR@/db.2.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_2 +#ndb#include @DATADIR@/ndb.conf + +access to * + by dn="cn=Manager,o=Local" write + by * read + +#monitor#database monitor diff --git a/tests/data/slapd-meta.conf b/tests/data/slapd-meta.conf new file mode 100644 index 0000000..adee439 --- /dev/null +++ b/tests/data/slapd-meta.conf @@ -0,0 +1,86 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @SCHEMADIR@/ppolicy.schema +pidfile @TESTDIR@/slapd.m.pid +argsfile @TESTDIR@/slapd.m.args + +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la +#metamod#modulepath ../servers/slapd/back-meta/ +#metamod#moduleload back_meta.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +# seems to improve behavior under very heavy load +# (i.e. it alleviates load on target systems) +threads 8 + +####################################################################### +# database definitions +####################################################################### + +database meta +suffix "o=Example,c=US" +rootdn "cn=Manager,o=Example,c=US" +rootpw secret +chase-referrals no +#nretries forever +nretries 100 +# 1 sec timeout for binds +bind-timeout 1000000 +#norefs true + +# local +uri "@URI2@ou=Meta,o=Example,c=US" +subtree-exclude "ou=Excluded,ou=Meta,o=Example,c=US" +suffixmassage "ou=Meta,o=Example,c=US" "ou=Meta,dc=example,dc=com" +###pseudorootdn "cn=manager,ou=meta,dc=example,dc=com" +###pseudorootpw secret +idassert-bind bindmethod=simple + binddn="cn=manager,ou=meta,dc=example,dc=com" + credentials="secret" + mode=self + flags=non-prescriptive +idassert-authzFrom "dn.exact:cn=Manager,o=Local" + +# remote +uri "@URI1@o=Example,c=US" +subtree-include "dn.subtree:o=Example,c=US" +suffixmassage "o=Example,c=US" "dc=example,dc=com" +###pseudorootdn "cn=manager,dc=example,dc=com" +###pseudorootpw secret +idassert-bind bindmethod=simple + binddn="cn=manager,dc=example,dc=com" + credentials="secret" + mode=self + flags=non-prescriptive +idassert-authzFrom "dn.exact:cn=Manager,o=Local" + +limits dn.exact="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=Example,c=US" time=1 size=8 + +# This is only for binding as the rootdn +database meta +suffix "o=Local" +rootdn "cn=Manager,o=Local" +rootpw secret +uri "@URI6@o=Local" + +#monitor#database monitor diff --git a/tests/data/slapd-nis-master.conf b/tests/data/slapd-nis-master.conf new file mode 100644 index 0000000..5f4c40f --- /dev/null +++ b/tests/data/slapd-nis-master.conf @@ -0,0 +1,55 @@ +# master slapd config -- for testing (needs updating) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/others_nis.at.conf +include @SCHEMADIR@/others_nis.oc.conf +include @SCHEMADIR@/nis.at.conf +include @SCHEMADIR@/nis.oc.conf +include @SCHEMADIR@/internet_mail.at.conf +include @SCHEMADIR@/internet_mail.oc.conf +pidfile @TESTDIR@/slapd.pid +argsfile @TESTDIR@/slapd.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database bdb +cachesize 4 +suffix "o=SGI, c=US" +directory @TESTDIR@ +rootdn "cn=Manager, o=SGI, c=US" +rootpw secret +index objectClass eq +index uid pres,eq,approx +index gidNumber pres,eq,approx +index uidNumber pres,eq,approx +index cn pres,eq,approx +index memberUid pres,eq,approx +index macAddress pres,eq,approx +index ipServiceProtocol pres,eq,approx +index ipServicePort pres,eq,approx +index oncRpcNumber pres,eq,approx +index ipHostNumber pres,eq,approx +index ipNetworkNumber pres,eq,approx +index ipProtocolNumber pres,eq,approx +index default none + +#monitor#database monitor diff --git a/tests/data/slapd-passwd.conf b/tests/data/slapd-passwd.conf new file mode 100644 index 0000000..7bba6ce --- /dev/null +++ b/tests/data/slapd-passwd.conf @@ -0,0 +1,39 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.pid +argsfile @TESTDIR@/slapd.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database passwd +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#file ./data/passwd + +#monitor#database monitor diff --git a/tests/data/slapd-ppolicy.conf b/tests/data/slapd-ppolicy.conf new file mode 100644 index 0000000..59095b8 --- /dev/null +++ b/tests/data/slapd-ppolicy.conf @@ -0,0 +1,58 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @SCHEMADIR@/ppolicy.schema + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#ppolicymod#modulepath ../servers/slapd/overlays/ +#ppolicymod#moduleload ppolicy.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +overlay ppolicy +ppolicy_default "cn=Standard Policy,ou=Policies,dc=example,dc=com" +ppolicy_use_lockout + +access to attrs=userpassword + by self write + by * auth + +access to * + by self write + by * read + +#monitor#database monitor + +database config +include @TESTDIR@/configpw.conf diff --git a/tests/data/slapd-proxyauthz.conf b/tests/data/slapd-proxyauthz.conf new file mode 100644 index 0000000..fde907f --- /dev/null +++ b/tests/data/slapd-proxyauthz.conf @@ -0,0 +1,79 @@ +# proxy cache slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema + +pidfile @TESTDIR@/slapd.2.pid +argsfile @TESTDIR@/slapd.2.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#pcachemod#modulepath ../servers/slapd/overlays/ +#pcachemod#moduleload pcache.la + + +####################################################################### +# database definitions +####################################################################### + +database ldap +suffix "dc=example,dc=com" +rootdn "dc=example,dc=com" +rootpw "secret" +uri "@URI1@" + +limits dn="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" size=1 + +idassert-bind bindmethod=simple binddn="cn=Manager,dc=example,dc=com" credentials="secret" + mode=self authz=proxyauthz flags="override" + +idassert-authzFrom "dn.children:dc=example,dc=com" + +#authz=proxyauthz + +overlay pcache +pcache @BACKEND@ 100 2 @ENTRY_LIMIT@ @CCPERIOD@ +pcacheattrset 0 sn cn title uid +pcacheattrset 1 mail postaladdress telephonenumber cn uid +pcachetemplate (|(cn=)(sn=)) 0 @TTL@ @NTTL@ @STTL@ +pcachetemplate (sn=) 0 @TTL@ @NTTL@ @STTL@ +pcachetemplate (uid=) 1 @TTL@ @NTTL@ @STTL@ +pcachetemplate (mail=) 0 @TTL@ @NTTL@ @STTL@ +pcachetemplate (&(objectclass=)(uid=)) 1 @TTL@ @NTTL@ @STTL@ @TTR@ +pcachetemplate (cn=) 0 86400 86400 86400 180 + +pcachebind (cn=) 0 3600 sub ou=people,dc=example,dc=com + +#bdb#cachesize 20 +#hdb#cachesize 20 +#bdb#dbnosync +#hdb#dbnosync +#mdb#dbnosync + +#~null~#directory @TESTDIR@/db.2.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid,mail pres,eq,sub +#ndb#dbname db_2 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd-proxycache.conf b/tests/data/slapd-proxycache.conf new file mode 100644 index 0000000..6164bff --- /dev/null +++ b/tests/data/slapd-proxycache.conf @@ -0,0 +1,69 @@ +# proxy cache slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema + +pidfile @TESTDIR@/slapd.2.pid +argsfile @TESTDIR@/slapd.2.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#pcachemod#modulepath ../servers/slapd/overlays/ +#pcachemod#moduleload pcache.la + +####################################################################### +# database definitions +####################################################################### + +database ldap +suffix "dc=example,dc=com" +rootdn "dc=example,dc=com" +rootpw "secret" +uri "@URI1@" + +limits dn="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" size=1 + +overlay pcache +pcache @BACKEND@ 100 2 @ENTRY_LIMIT@ @CCPERIOD@ +pcacheattrset 0 sn cn title uid +pcacheattrset 1 mail postaladdress telephonenumber cn uid +pcachetemplate (|(cn=)(sn=)) 0 @TTL@ @NTTL@ @STTL@ +pcachetemplate (sn=) 0 @TTL@ @NTTL@ @STTL@ +pcachetemplate (uid=) 1 @TTL@ @NTTL@ @STTL@ +pcachetemplate (mail=) 0 @TTL@ @NTTL@ @STTL@ +pcachetemplate (&(objectclass=)(uid=)) 1 @TTL@ @NTTL@ @STTL@ @TTR@ +pcachebind (&(objectclass=person)(uid=)) 1 @BTTR@ sub "ou=Alumni Association,ou=people,dc=example,dc=com" + +#bdb#cachesize 20 +#hdb#cachesize 20 +#bdb#dbnosync +#hdb#dbnosync +#mdb#dbnosync + +#~null~#directory @TESTDIR@/db.2.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid,mail pres,eq,sub +#ndb#dbname db_2 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd-pw.conf b/tests/data/slapd-pw.conf new file mode 100644 index 0000000..6a3af44 --- /dev/null +++ b/tests/data/slapd-pw.conf @@ -0,0 +1,58 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ + +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#null#bind on +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +# +# normal installations should protect root dse, +# cn=monitor, cn=schema, and cn=config +# + +access to attrs=userpassword + by anonymous auth + by self write + +access to * + by self write + by * read + +#monitor#database monitor diff --git a/tests/data/slapd-ref-slave.conf b/tests/data/slapd-ref-slave.conf new file mode 100644 index 0000000..2f0bec9 --- /dev/null +++ b/tests/data/slapd-ref-slave.conf @@ -0,0 +1,49 @@ +# slave slapd config -- for default referral testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +# +pidfile @TESTDIR@/slapd.2.pid +argsfile @TESTDIR@/slapd.2.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +referral "@URI1@" + +database @BACKEND@ +#bdb#cachesize 0 +#hdb#cachesize 0 + +suffix "o=University of Mich,c=US" +rootdn "cn=Manager,o=University of Mich,c=US" +rootpw secret +#~null~#directory @TESTDIR@/db.2.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_2 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd-referrals.conf b/tests/data/slapd-referrals.conf new file mode 100644 index 0000000..76c0eb2 --- /dev/null +++ b/tests/data/slapd-referrals.conf @@ -0,0 +1,42 @@ +# referral slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.pid +argsfile @TESTDIR@/slapd.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "c=us" +rootdn "cn=Manager,c=us" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd-refint.conf b/tests/data/slapd-refint.conf new file mode 100644 index 0000000..437756e --- /dev/null +++ b/tests/data/slapd-refint.conf @@ -0,0 +1,50 @@ +# stand-alone slapd config -- for testing (with refint overlay) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 2004-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema + +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#refintmod#modulepath ../servers/slapd/overlays/ +#refintmod#moduleload refint.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "o=refint" +rootdn "cn=Manager,o=refint" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +overlay refint +refint_attributes manager secretary member + +#monitor#database monitor diff --git a/tests/data/slapd-relay.conf b/tests/data/slapd-relay.conf new file mode 100644 index 0000000..762c38b --- /dev/null +++ b/tests/data/slapd-relay.conf @@ -0,0 +1,103 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @SCHEMADIR@/ppolicy.schema +pidfile @TESTDIR@/slapd.pid +argsfile @TESTDIR@/slapd.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#relaymod#modulepath ../servers/slapd/back-relay/ +#relaymod#moduleload back_relay.la +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la +#metamod#modulepath ../servers/slapd/back-meta/ +#metamod#moduleload back_meta.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#rwmmod#modulepath ../servers/slapd/overlays/ +#rwmmod#moduleload rwm.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#null#bind on +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +database @RELAY@ +suffix "o=Example,c=US" +### back-relay can automatically instantiate the rwm overlay +#relay-relay#relay "dc=example,dc=com" +#relay-relay#overlay rwm +#relay-relay#rwm-suffixmassage "dc=example,dc=com" +#relay-relay#rwm-map objectClass groupOfNames groupOfUniqueNames +#relay-relay#rwm-map objectClass uidObject dcObject +#relay-relay#rwm-map attribute member uniqueMember +#relay-relay#rwm-map attribute uid dc +### back-ldap needs explicit instantiation of the rwm overlay +#relay-ldap#uri "@URI1@" +#relay-ldap#overlay rwm +#relay-ldap#rwm-suffixmassage "dc=example,dc=com" +#relay-ldap#rwm-map objectClass groupOfNames groupOfUniqueNames +#relay-ldap#rwm-map objectClass uidObject dcObject +#relay-ldap#rwm-map attribute member uniqueMember +#relay-ldap#rwm-map attribute uid dc +#relay-meta#uri "@URI1@o=Example,c=US" +#relay-meta#suffixmassage "o=Example,c=US" "dc=example,dc=com" +#relay-meta#map objectClass groupOfNames groupOfUniqueNames +#relay-meta#map objectClass uidObject dcObject +#relay-meta#map attribute member uniqueMember +#relay-meta#map attribute uid dc + +database @RELAY@ +suffix "o=Esempio,c=IT" +### use this alternate form of back-relay, without the "relay" directive, +### which causes the target database to be selected after DN massaging +#relay-relay#overlay rwm +#relay-relay#rwm-suffixmassage "dc=example,dc=com" +### back-ldap needs URI +#relay-ldap#uri "@URI1@" +#relay-ldap#overlay rwm +#relay-ldap#rwm-suffixmassage "dc=example,dc=com" +#relay-meta#uri "@URI1@o=Esempio,c=IT" +#relay-meta#suffixmassage "o=Esempio,c=IT" "dc=example,dc=com" + +database @RELAY@ +suffix "o=Beispiel,c=DE" +### back-relay can automatically instantiate the rwm overlay +#relay-relay#relay "dc=example,dc=com" +#relay-relay#overlay rwm +#relay-relay#rwm-suffixmassage "dc=example,dc=com" +### back-ldap needs explicit instantiation of the rwm overlay +#relay-ldap#uri "@URI1@" +#relay-ldap#overlay rwm +#relay-ldap#rwm-suffixmassage "dc=example,dc=com" +#relay-meta#uri "@URI1@o=Beispiel,c=DE" +#relay-meta#suffixmassage "o=Beispiel,c=DE" "dc=example,dc=com" + +#monitor#database monitor diff --git a/tests/data/slapd-repl-slave-remote.conf b/tests/data/slapd-repl-slave-remote.conf new file mode 100644 index 0000000..3721c1d --- /dev/null +++ b/tests/data/slapd-repl-slave-remote.conf @@ -0,0 +1,80 @@ +# slave slapd config -- for testing of replication +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +# +pidfile @TESTDIR@/slapd.2.pid +argsfile @TESTDIR@/slapd.2.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la + +#ldapyes#overlay chain +#ldapyes#chain-uri @URI1@ +#ldapyes#chain-idassert-bind bindmethod=simple binddn="cn=Manager,dc=example,dc=com" credentials=secret mode=self +#ldapmod#overlay chain +#ldapmod#chain-uri @URI1@ +#ldapmod#chain-idassert-bind bindmethod=simple binddn="cn=Manager,dc=example,dc=com" credentials=secret mode=self + +####################################################################### +# database definitions +####################################################################### + +access to dn.base="" attrs=children + by dn.exact="cn=Monitor" write + by * break + +access to * + by * read + +database @BACKEND@ + +suffix "dc=example,dc=com" +rootdn "cn=Replica,dc=example,dc=com" +rootpw secret +# HACK: use the RootDN of the monitor database as UpdateDN so ACLs apply +# without the need to write the UpdateDN before starting replication +updatedn "cn=Monitor" +updateref @URI1@ +#null#bind on +#~null~#directory @TESTDIR@/db.2.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#indexdb#index entryUUID pres,eq +#ndb#dbname db_2 +#ndb#include @DATADIR@/ndb.conf + +# Need to strip hasSubordinates from internal searches otherwise +# syncrepl will try to delete it, since syncprov is not sending +# it because it's generated +access to dn.subtree="dc=example,dc=com" attrs=hasSubordinates + by dn.exact="cn=Monitor" none + by * read + +access to dn.subtree="dc=example,dc=com" + by dn.exact="cn=Monitor" write + by * read + +#monitor#database monitor +#monitor#rootdn "cn=Monitor" +#monitor#rootpw monitor diff --git a/tests/data/slapd-retcode.conf b/tests/data/slapd-retcode.conf new file mode 100644 index 0000000..0aa636c --- /dev/null +++ b/tests/data/slapd-retcode.conf @@ -0,0 +1,57 @@ +# stand-alone slapd config -- for testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @DATADIR@/test.schema + +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#retcodemod#modulepath ../servers/slapd/overlays/ +#retcodemod#moduleload retcode.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +overlay retcode +retcode-parent "ou=RetCodes,dc=example,dc=com" +include @DATADIR@/retcode.conf + +retcode-item "cn=Unsolicited" 0x00 unsolicited="0" +retcode-item "cn=Notice of Disconnect" 0x00 unsolicited="1.3.6.1.4.1.1466.20036" +retcode-item "cn=Pre-disconnect" 0x34 flags="pre-disconnect" +retcode-item "cn=Post-disconnect" 0x34 flags="post-disconnect" + +#monitor#database monitor diff --git a/tests/data/slapd-schema.conf b/tests/data/slapd-schema.conf new file mode 100644 index 0000000..79cdf82 --- /dev/null +++ b/tests/data/slapd-schema.conf @@ -0,0 +1,54 @@ +# stand-alone slapd config -- for testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +# +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +# +include @SCHEMADIR@/corba.schema +include @SCHEMADIR@/java.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/misc.schema +include @SCHEMADIR@/nis.schema +include @SCHEMADIR@/openldap.schema +# +include @SCHEMADIR@/duaconf.schema +include @SCHEMADIR@/dyngroup.schema +include @SCHEMADIR@/ppolicy.schema + +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +# +rootdse @DATADIR@/rootdse.ldif + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "o=OpenLDAP Project,l=Internet" +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#ndb#dbname db_1_a +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd-sql-syncrepl-master.conf b/tests/data/slapd-sql-syncrepl-master.conf new file mode 100644 index 0000000..43ce8d8 --- /dev/null +++ b/tests/data/slapd-sql-syncrepl-master.conf @@ -0,0 +1,80 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +#ucdata-path ./ucdata +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#sqlmod#modulepath ../servers/slapd/back-sql/ +#sqlmod#moduleload back_sql.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#syncprovmod#modulepath ../servers/slapd/overlays/ +#syncprovmod#moduleload syncprov.la + +# +# normal installations should protect root dse, +# cn=monitor, cn=schema, and cn=config +# + +access to attrs=userpassword + by self =w + by anonymous =x + +access to * + by * read + +####################################################################### +# sql database definitions +####################################################################### + +database sql +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +dbname example +dbuser manager +dbpasswd secret + +# +# rdbms specific directives +# +# IBM db2 +#ibmdb2#upper_func "ucase" +#ibmdb2#upper_needs_cast "yes" +#ibmdb2#concat_pattern "?||?" +#ibmdb2#children_cond "ucase(ldap_entries.dn)=ucase(cast(? as varchar(255)))" +#ibmdb2#create_needs_select "yes" +#ibmdb2#insentry_stmt "insert into ldap_entries (id,dn,oc_map_id,parent,keyval) values ((select case when max(id) is null then 1 else max(id) + 1 end from ldap_entries),?,?,?,?)" +# +# PostgreSQL +#pgsql#insentry_stmt "insert into ldap_entries (id,dn,oc_map_id,parent,keyval) values ((select case when max(id) is null then 1 else max(id) + 1 end from ldap_entries),?,?,?,?)" +#pgsql#upper_func "upper" +#pgsql#strcast_func "text" +#pgsql#concat_pattern "?||?" +# +# MySQL +#mysql#concat_pattern "concat(?,?)" + +has_ldapinfo_dn_ru no + +overlay syncprov + +#monitor#database monitor diff --git a/tests/data/slapd-sql.conf b/tests/data/slapd-sql.conf new file mode 100644 index 0000000..23c9818 --- /dev/null +++ b/tests/data/slapd-sql.conf @@ -0,0 +1,76 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +#ucdata-path ./ucdata +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#sqlmod#modulepath ../servers/slapd/back-sql/ +#sqlmod#moduleload back_sql.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +# +# normal installations should protect root dse, +# cn=monitor, cn=schema, and cn=config +# + +access to attrs=userpassword + by self =w + by anonymous =x + +access to * + by * read + +####################################################################### +# sql database definitions +####################################################################### + +database sql +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +dbname example +dbuser manager +dbpasswd secret + +# +# rdbms specific directives +# +# IBM db2 +#ibmdb2#upper_func "ucase" +#ibmdb2#upper_needs_cast "yes" +#ibmdb2#concat_pattern "?||?" +#ibmdb2#children_cond "ucase(ldap_entries.dn)=ucase(cast(? as varchar(255)))" +#ibmdb2#create_needs_select "yes" +#ibmdb2#insentry_stmt "insert into ldap_entries (id,dn,oc_map_id,parent,keyval) values ((select case when max(id) is null then 1 else max(id) + 1 end from ldap_entries),?,?,?,?)" +# +# PostgreSQL +#pgsql#insentry_stmt "insert into ldap_entries (id,dn,oc_map_id,parent,keyval) values ((select case when max(id) is null then 1 else max(id) + 1 end from ldap_entries),?,?,?,?)" +#pgsql#upper_func "upper" +#pgsql#strcast_func "text" +#pgsql#concat_pattern "?||?" +# +# MySQL +#mysql#concat_pattern "concat(?,?)" + +has_ldapinfo_dn_ru no + +#monitor#database monitor diff --git a/tests/data/slapd-syncrepl-master.conf b/tests/data/slapd-syncrepl-master.conf new file mode 100644 index 0000000..fef3c30 --- /dev/null +++ b/tests/data/slapd-syncrepl-master.conf @@ -0,0 +1,50 @@ +# master slapd config -- for testing of SYNC replication +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#syncprovmod#modulepath ../servers/slapd/overlays/ +#syncprovmod#moduleload syncprov.la + +####################################################################### +# master database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#indexdb#index entryUUID,entryCSN eq +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +overlay syncprov +#syncprov-sessionlog 100 + +#monitor#database monitor diff --git a/tests/data/slapd-syncrepl-multiproxy.conf b/tests/data/slapd-syncrepl-multiproxy.conf new file mode 100644 index 0000000..014a1b5 --- /dev/null +++ b/tests/data/slapd-syncrepl-multiproxy.conf @@ -0,0 +1,105 @@ +# slave slapd config -- for testing of SYNC replication with intermediate proxy +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#syncprovmod#modulepath ../servers/slapd/overlays/ +#syncprovmod#moduleload syncprov.la +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la + +####################################################################### +# master database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#indexdb#index entryUUID,entryCSN eq +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +overlay syncprov +syncprov-sessionlog 100 + +####################################################################### +# consumer proxy database definitions +####################################################################### + +database ldap +hidden on +suffix "dc=example,dc=com" +rootdn "cn=Whoever" +uri @URI2@ + +acl-bind bindmethod=simple + binddn="cn=Monitor" + credentials=monitor + +# Don't change syncrepl spec yet + +syncrepl rid=1 + provider=@URI1@ + binddn="cn=Manager,dc=example,dc=com" + bindmethod=simple + credentials=secret + searchbase="dc=example,dc=com" + filter="(objectClass=*)" + schemachecking=off + scope=sub + type=refreshAndPersist + retry="3 5 300 5" + +database ldap +hidden on +suffix "dc=example,dc=com" +rootdn "cn=Whoever" +uri @URI3@ + +acl-bind bindmethod=simple + binddn="cn=Monitor" + credentials=monitor + +# Don't change syncrepl spec yet + +syncrepl rid=2 + provider=@URI1@ + binddn="cn=Manager,dc=example,dc=com" + bindmethod=simple + credentials=secret + searchbase="dc=example,dc=com" + filter="(objectClass=*)" + schemachecking=off + scope=sub + type=refreshOnly + interval=00:00:00:03 + retry="3 5 300 5" + +#monitor#database monitor diff --git a/tests/data/slapd-syncrepl-slave-persist-ldap.conf b/tests/data/slapd-syncrepl-slave-persist-ldap.conf new file mode 100644 index 0000000..83b8d6b --- /dev/null +++ b/tests/data/slapd-syncrepl-slave-persist-ldap.conf @@ -0,0 +1,76 @@ +# slave slapd config -- for testing of SYNC replication with intermediate proxy +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +# +pidfile @TESTDIR@/slapd.3.pid +argsfile @TESTDIR@/slapd.3.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#syncprovmod#modulepath ../servers/slapd/overlays/ +#syncprovmod#moduleload syncprov.la +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la + +# We don't need any access to this DSA +restrict all + +####################################################################### +# consumer proxy database definitions +####################################################################### + +database ldap +suffix "dc=example,dc=com" +rootdn "cn=Whoever" +uri @URI2@ + +# ITS#4632: syncprov now wants this on (ITS#4613); however, since checks +# are in place to prevent lastmod operational attrs to be added twice, +# this shuld make no harm +lastmod on + +# HACK: use the RootDN of the monitor database as UpdateDN so ACLs apply +# without the need to write the UpdateDN before starting replication +acl-bind bindmethod=simple + binddn="cn=Monitor" + credentials=monitor + +# Don't change syncrepl spec yet + +# HACK: use the RootDN of the monitor database as UpdateDN so ACLs apply +# without the need to write the UpdateDN before starting replication +syncrepl rid=1 + provider=@URI1@ + binddn="cn=Manager,dc=example,dc=com" + bindmethod=simple + credentials=secret + searchbase="dc=example,dc=com" + filter="(objectClass=*)" + attrs="*,structuralObjectClass,entryUUID,entryCSN,creatorsName,createTimestamp,modifiersName,modifyTimestamp" + schemachecking=off + scope=sub + type=refreshAndPersist + retry="3 10 5 +" + +overlay syncprov + +#monitor#database monitor diff --git a/tests/data/slapd-syncrepl-slave-persist1.conf b/tests/data/slapd-syncrepl-slave-persist1.conf new file mode 100644 index 0000000..3611c78 --- /dev/null +++ b/tests/data/slapd-syncrepl-slave-persist1.conf @@ -0,0 +1,74 @@ +# slave slapd config -- for testing of SYNC replication +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +# +pidfile @TESTDIR@/slapd.4.pid +argsfile @TESTDIR@/slapd.4.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#syncprovmod#modulepath ../servers/slapd/overlays/ +#syncprovmod#moduleload syncprov.la +#ldapmod#modulepath ../servers/slapd/back-ldap/ +#ldapmod#moduleload back_ldap.la + +#ldapyes#overlay chain +#ldapyes#chain-uri @URI1@ +#ldapyes#chain-idassert-bind bindmethod=simple binddn="cn=Manager,dc=example,dc=com" credentials=secret mode=self +#ldapmod#overlay chain +#ldapmod#chain-uri @URI1@ +#ldapmod#chain-idassert-bind bindmethod=simple binddn="cn=Manager,dc=example,dc=com" credentials=secret mode=self + +####################################################################### +# consumer database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Replica,dc=example,dc=com" +rootpw secret +#null#bind on +#~null~#directory @TESTDIR@/db.4.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#indexdb#index entryUUID,entryCSN eq +#ndb#dbname db_4 +#ndb#include @DATADIR@/ndb.conf + +# Don't change syncrepl spec yet +syncrepl rid=1 + provider=@URI1@ + binddn="cn=Manager,dc=example,dc=com" + bindmethod=simple + credentials=secret + searchbase="dc=example,dc=com" + filter="(objectClass=*)" + attrs="*,+" + schemachecking=off + scope=sub + type=refreshAndPersist + retry="3 5 300 5" +updateref @URI1@ + +overlay syncprov + +#monitor#database monitor diff --git a/tests/data/slapd-syncrepl-slave-persist2.conf b/tests/data/slapd-syncrepl-slave-persist2.conf new file mode 100644 index 0000000..16be002 --- /dev/null +++ b/tests/data/slapd-syncrepl-slave-persist2.conf @@ -0,0 +1,46 @@ +# slave slapd config -- for testing of SYNC replication +# $OpenLDAP$ + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +# +pidfile @TESTDIR@/slapd.5.pid +argsfile @TESTDIR@/slapd.5.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# consumer database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Replica,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.5.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#indexdb#index entryUUID,entryCSN eq +#ndb#dbname db_5 +#ndb#include @DATADIR@/ndb.conf + +# Don't change syncrepl spec yet +syncrepl rid=1 + provider=@URI4@ + binddn="cn=Replica,dc=example,dc=com" + bindmethod=simple + credentials=secret + searchbase="dc=example,dc=com" + filter="(objectClass=*)" + attrs="*" + schemachecking=off + scope=sub + type=refreshAndPersist + +#monitor#database monitor diff --git a/tests/data/slapd-syncrepl-slave-persist3.conf b/tests/data/slapd-syncrepl-slave-persist3.conf new file mode 100644 index 0000000..58d7814 --- /dev/null +++ b/tests/data/slapd-syncrepl-slave-persist3.conf @@ -0,0 +1,58 @@ +# slave slapd config -- for testing of SYNC replication +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +# +pidfile @TESTDIR@/slapd.6.pid +argsfile @TESTDIR@/slapd.6.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# consumer database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Replica,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.6.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#indexdb#index entryUUID,entryCSN eq +#ndb#dbname db_6 +#ndb#include @DATADIR@/ndb.conf + +# Don't change syncrepl spec yet +syncrepl rid=1 + provider=@URI1@ + binddn="cn=Manager,dc=example,dc=com" + bindmethod=simple + credentials=secret + searchbase="dc=example,dc=com" + filter="(objectClass=*)" + attrs="*" + schemachecking=off + scope=sub + type=refreshAndPersist + +#monitor#database monitor diff --git a/tests/data/slapd-syncrepl-slave-refresh1.conf b/tests/data/slapd-syncrepl-slave-refresh1.conf new file mode 100644 index 0000000..2d5ac1d --- /dev/null +++ b/tests/data/slapd-syncrepl-slave-refresh1.conf @@ -0,0 +1,65 @@ +# slave slapd config -- for testing of SYNC replication +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +# +pidfile @TESTDIR@/slapd.2.pid +argsfile @TESTDIR@/slapd.2.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#syncprovmod#modulepath ../servers/slapd/overlays/ +#syncprovmod#moduleload syncprov.la + +####################################################################### +# consumer database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Replica,dc=example,dc=com" +rootpw secret +#null#bind on +#~null~#directory @TESTDIR@/db.2.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#indexdb#index entryUUID,entryCSN eq +#ndb#dbname db_2 +#ndb#include @DATADIR@/ndb.conf + +# Don't change syncrepl spec yet +syncrepl rid=1 + provider=@URI1@ + binddn="cn=Manager,dc=example,dc=com" + bindmethod=simple + credentials=secret + searchbase="dc=example,dc=com" + filter="(objectClass=*)" + schemachecking=off + scope=sub + type=refreshOnly + interval=00:00:00:03 +updateref @URI1@ + +overlay syncprov +syncprov-sessionlog 100 + +#monitor#database monitor diff --git a/tests/data/slapd-syncrepl-slave-refresh2.conf b/tests/data/slapd-syncrepl-slave-refresh2.conf new file mode 100644 index 0000000..a152569 --- /dev/null +++ b/tests/data/slapd-syncrepl-slave-refresh2.conf @@ -0,0 +1,59 @@ +# slave slapd config -- for testing of SYNC replication +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +# +pidfile @TESTDIR@/slapd.3.pid +argsfile @TESTDIR@/slapd.3.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# consumer database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Replica,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.3.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#indexdb#index entryUUID,entryCSN eq +#ndb#dbname db_3 +#ndb#include @DATADIR@/ndb.conf + +# Don't change syncrepl spec yet +syncrepl rid=1 + provider=@URI2@ + binddn="cn=Replica,dc=example,dc=com" + bindmethod=simple + credentials=secret + searchbase="dc=example,dc=com" + filter="(objectClass=*)" + attrs="*" + schemachecking=off + scope=sub + type=refreshOnly + interval=00:00:00:03 + +#monitor#database monitor diff --git a/tests/data/slapd-translucent-local.conf b/tests/data/slapd-translucent-local.conf new file mode 100644 index 0000000..9c5ebd4 --- /dev/null +++ b/tests/data/slapd-translucent-local.conf @@ -0,0 +1,65 @@ +# stand-alone slapd config -- for testing (with translucent overlay) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 2004-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +ucdata-path ./ucdata +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema + +# +pidfile @TESTDIR@/slapd.2.pid +argsfile @TESTDIR@/slapd.2.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@ +#mod#moduleload back_@BACKEND@.la +#ldapmod#modulepath ../servers/slapd/back-ldap +#ldapmod#moduleload back_ldap.la +#translucentmod#modulepath ../servers/slapd/overlays +#translucentmod#moduleload translucent.la +#monitormod#modulepath ../servers/slapd/back-monitor +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +#monitor#database monitor + +database @BACKEND@ +suffix "o=translucent" +rootdn "o=translucent" +rootpw secret +#null#bind on +#~null~#directory @TESTDIR@/db.2.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_2 +#ndb#include @DATADIR@/ndb.conf + +overlay translucent +translucent_no_glue + +uri @URI1@ +# "lastmod off" is not strictly required because the instance of back-ldap +# added by the translucent overlay sets it off for the underlying database; +# however, the local database needs to have "lastmod off" so it's here as +# a reminder. +lastmod off +acl-bind binddn="uid=binder,o=translucent" credentials="bindtest" + +database config +include @TESTDIR@/configpw.conf diff --git a/tests/data/slapd-translucent-remote.conf b/tests/data/slapd-translucent-remote.conf new file mode 100644 index 0000000..1300043 --- /dev/null +++ b/tests/data/slapd-translucent-remote.conf @@ -0,0 +1,46 @@ +# stand-alone slapd config -- for testing (with translucent overlay) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 2004-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema + +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/:../servers/slapd/overlays +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +#monitor#database monitor + +database @BACKEND@ +suffix "o=translucent" +rootdn "o=translucent" +rootpw secret +#null#bind on +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf diff --git a/tests/data/slapd-unique.conf b/tests/data/slapd-unique.conf new file mode 100644 index 0000000..a3d1e3e --- /dev/null +++ b/tests/data/slapd-unique.conf @@ -0,0 +1,61 @@ +# stand-alone slapd config -- for testing (with unique overlay) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 2004-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema + +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#uniquemod#modulepath ../servers/slapd/overlays +#uniquemod#moduleload unique.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "o=unique" +rootdn "cn=Manager,o=unique" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +access to attrs=userPassword by * auth +access to * by users write + +overlay unique + +unique_attributes employeeNumber displayName +unique_base o=unique + +#unique_uri ldap:///?description?one +#unique_uri ldap:///?employeeNumber,displayName?sub + +#monitor#database monitor + +database config +include @TESTDIR@/configpw.conf diff --git a/tests/data/slapd-valregex.conf b/tests/data/slapd-valregex.conf new file mode 100644 index 0000000..af6d936 --- /dev/null +++ b/tests/data/slapd-valregex.conf @@ -0,0 +1,72 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +# global ACLs +# +# normal installations should protect root dse, cn=monitor, cn=subschema +# + +access to dn.exact="" attrs=objectClass + by users read +access to * + by * read + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ + +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#null#bind on +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +access to attrs=userPassword + by anonymous auth + by * none stop + +access to attrs=sn val.regex="^(.*)$" + by dn.exact,expand="cn=${v1},ou=Alumni Association,ou=People,dc=example,dc=com" write + by * read stop + +access to attrs=sn val.regex="." + by * read stop + +access to attrs=sn + by dn.exact="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com" write + by * read stop + +# fall into global ACLs + +#monitor#database monitor diff --git a/tests/data/slapd-valsort.conf b/tests/data/slapd-valsort.conf new file mode 100644 index 0000000..c43c681 --- /dev/null +++ b/tests/data/slapd-valsort.conf @@ -0,0 +1,55 @@ +# stand-alone slapd config -- for testing (with valsort overlay) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 2004-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema + +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la +#valsortmod#moduleload ../servers/slapd/overlays/valsort.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "o=valsort" +rootdn "cn=Manager,o=valsort" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +overlay valsort +valsort-attr sn ou=users,o=valsort alpha-ascend +valsort-attr departmentNumber ou=users,o=valsort alpha-ascend +valsort-attr mailPreferenceOption ou=users,o=valsort numeric-ascend +valsort-attr ou ou=users,o=valsort weighted +valsort-attr employeeType ou=users,o=valsort weighted alpha-ascend + +database config +include @TESTDIR@/configpw.conf + +#monitor#database monitor diff --git a/tests/data/slapd-whoami.conf b/tests/data/slapd-whoami.conf new file mode 100644 index 0000000..ee8bdce --- /dev/null +++ b/tests/data/slapd-whoami.conf @@ -0,0 +1,64 @@ +# master slapd config -- for testing +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +authz-policy both +authz-regexp "^uid=group/([^,]+),.*" "ldap:///dc=example,dc=com??sub?cn=$1" +authz-regexp "^uid=([^,]+),.*" "ldap:///dc=example,dc=com??sub?uid=$1" + +# +# normal installations should protect root dse, +# cn=monitor, cn=schema, and cn=config +# + +access to attrs=authzFrom,authzTo + by * auth + +access to attrs=userpassword + by anonymous auth + by self write + +access to * + by self write + by * read + +database @BACKEND@ + +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd.conf b/tests/data/slapd.conf new file mode 100644 index 0000000..50a06ae --- /dev/null +++ b/tests/data/slapd.conf @@ -0,0 +1,53 @@ +# stand-alone slapd config -- for testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +include @DATADIR@/test.schema + +# +pidfile @TESTDIR@/slapd.1.pid +argsfile @TESTDIR@/slapd.1.args + +# allow big PDUs from anonymous (for testing purposes) +sockbuf_max_incoming 4194303 + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#null#bind on +#~null~#directory @TESTDIR@/db.1.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#bdb#checkpoint 1024 5 +#hdb#checkpoint 1024 5 +#mdb#maxsize 33554432 +#ndb#dbname db_1 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/slapd2.conf b/tests/data/slapd2.conf new file mode 100644 index 0000000..9f94b1a --- /dev/null +++ b/tests/data/slapd2.conf @@ -0,0 +1,44 @@ +# stand-alone slapd config -- for testing (with indexing) +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +include @SCHEMADIR@/core.schema +include @SCHEMADIR@/cosine.schema +include @SCHEMADIR@/inetorgperson.schema +include @SCHEMADIR@/openldap.schema +include @SCHEMADIR@/nis.schema +# +pidfile @TESTDIR@/slapd.2.pid +argsfile @TESTDIR@/slapd.2.args + +#mod#modulepath ../servers/slapd/back-@BACKEND@/ +#mod#moduleload back_@BACKEND@.la +#monitormod#modulepath ../servers/slapd/back-monitor/ +#monitormod#moduleload back_monitor.la + +####################################################################### +# database definitions +####################################################################### + +database @BACKEND@ +suffix "dc=example,dc=com" +rootdn "cn=Manager,dc=example,dc=com" +rootpw secret +#~null~#directory @TESTDIR@/db.2.a +#indexdb#index objectClass eq +#indexdb#index cn,sn,uid pres,eq,sub +#ndb#dbname db_2 +#ndb#include @DATADIR@/ndb.conf + +#monitor#database monitor diff --git a/tests/data/sql-concurrency/do_add.1 b/tests/data/sql-concurrency/do_add.1 new file mode 100644 index 0000000..e4ce2d6 --- /dev/null +++ b/tests/data/sql-concurrency/do_add.1 @@ -0,0 +1,9 @@ +cn=James Jones 1,dc=example,dc=com +objectClass: inetOrgPerson +cn: James Jones 1 +givenName: James +sn: Jones 1 +userpassword:: amFq +telephoneNumber: +1 313 555 4772 +telephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 diff --git a/tests/data/sql-concurrency/do_add.2 b/tests/data/sql-concurrency/do_add.2 new file mode 100644 index 0000000..a60b619 --- /dev/null +++ b/tests/data/sql-concurrency/do_add.2 @@ -0,0 +1,10 @@ +cn=James Jones 2,dc=example,dc=com +objectClass: inetOrgPerson +cn: James Jones 2 +givenName: James +sn: Jones 2 +userpassword:: amFq +telephoneNumber: +1 313 555 4772 +telephoneNumber: +1 313 555 3923 +telephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 diff --git a/tests/data/sql-concurrency/do_add.3 b/tests/data/sql-concurrency/do_add.3 new file mode 100644 index 0000000..b479513 --- /dev/null +++ b/tests/data/sql-concurrency/do_add.3 @@ -0,0 +1,10 @@ +cn=James Jones 3,dc=example,dc=com +objectClass: inetOrgPerson +cn: James Jones 3 +givenName: James +sn: Jones 3 +userpassword:: amFq +telephoneNumber: +1 313 555 4772 +telephoneNumber: +1 313 555 3923 +telephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 diff --git a/tests/data/sql-concurrency/do_add.4 b/tests/data/sql-concurrency/do_add.4 new file mode 100644 index 0000000..065897e --- /dev/null +++ b/tests/data/sql-concurrency/do_add.4 @@ -0,0 +1,10 @@ +cn=James Jones 4,dc=example,dc=com +objectClass: inetOrgPerson +cn: James Jones 4 +givenName: James +sn: Jones 4 +userpassword:: amFq +telephoneNumber: +1 313 555 4772 +telephoneNumber: +1 313 555 3923 +telephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 diff --git a/tests/data/sql-concurrency/do_bind.0 b/tests/data/sql-concurrency/do_bind.0 new file mode 100644 index 0000000..e0d0481 --- /dev/null +++ b/tests/data/sql-concurrency/do_bind.0 @@ -0,0 +1,2 @@ +cn=Mitya Kovalev,dc=example,dc=com +mit diff --git a/tests/data/sql-concurrency/do_modrdn.0 b/tests/data/sql-concurrency/do_modrdn.0 new file mode 100644 index 0000000..29a77aa --- /dev/null +++ b/tests/data/sql-concurrency/do_modrdn.0 @@ -0,0 +1,2 @@ +cn=Mitya Kovalev,dc=example,dc=com +cn=Torvlobnor Puzdoy,dc=example,dc=com diff --git a/tests/data/sql-concurrency/do_read.0 b/tests/data/sql-concurrency/do_read.0 new file mode 100644 index 0000000..250ddbe --- /dev/null +++ b/tests/data/sql-concurrency/do_read.0 @@ -0,0 +1,4 @@ +documentTitle=book1,dc=example,dc=com +dc=example,dc=com +cn=Akakiy Zinberstein,dc=example,dc=com +ou=Referral,dc=example,dc=com diff --git a/tests/data/sql-concurrency/do_search.0 b/tests/data/sql-concurrency/do_search.0 new file mode 100644 index 0000000..1984ff1 --- /dev/null +++ b/tests/data/sql-concurrency/do_search.0 @@ -0,0 +1,12 @@ +dc=example,dc=com +cn=Mitya Kovalev +cn=Akakiy Zinberstein,dc=example,dc=com +sn=Zinberstein +dc=example,dc=com +cn=James* +dc=example,dc=com +sn=* +dc=example,dc=com +cn=* +dc=example,dc=com +cn=James* diff --git a/tests/data/sql-read.out b/tests/data/sql-read.out new file mode 100644 index 0000000..6c9749e --- /dev/null +++ b/tests/data/sql-read.out @@ -0,0 +1,623 @@ +# Testing baseobject search... +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +# Testing onelevel search... +dn: cn=Akakiy Zinberstein,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: pkiUser +cn: Akakiy Zinberstein +sn: Zinberstein +givenName: Akakiy +userCertificate;binary:: MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs + aWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhI + EhhbXBzdGVyMR8wHQYJKoZIhvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQ + UAA4GNADCBiQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJh+q + nsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYmJ0erS3aoimOHLEFi + mmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4Q + gENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUO + iC37EK0Uf0XjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1U + EBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0 + ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAM + A0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESuxLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP + 05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5j + ds/HnaJsGcHI5JRG7CBJbW+wrwge3trJ1xHJI8prN + +dn: documentTitle=book1,dc=example,dc=com +objectClass: document +description: abstract1 +documentTitle: book1 +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentAuthor: cn=Torvlobnor Puzdoy,dc=example,dc=com +documentIdentifier: document 1 + +dn: documentTitle=book2,dc=example,dc=com +objectClass: document +description: abstract2 +documentTitle: book2 +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentIdentifier: document 2 + +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +dn: cn=Torvlobnor Puzdoy,dc=example,dc=com +objectClass: inetOrgPerson +cn: Torvlobnor Puzdoy +sn: Puzdoy +seeAlso: documentTitle=book1,dc=example,dc=com +givenName: Torvlobnor +telephoneNumber: 545-4563 + +# refldap://localhost:9012/dc=example,dc=com??one + +# Testing subtree search... +dn: cn=Akakiy Zinberstein,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: pkiUser +cn: Akakiy Zinberstein +sn: Zinberstein +givenName: Akakiy +userCertificate;binary:: MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs + aWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhI + EhhbXBzdGVyMR8wHQYJKoZIhvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQ + UAA4GNADCBiQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJh+q + nsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYmJ0erS3aoimOHLEFi + mmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4Q + gENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUO + iC37EK0Uf0XjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1U + EBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0 + ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAM + A0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESuxLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP + 05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5j + ds/HnaJsGcHI5JRG7CBJbW+wrwge3trJ1xHJI8prN + +dn: documentTitle=book1,dc=example,dc=com +objectClass: document +description: abstract1 +documentTitle: book1 +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentAuthor: cn=Torvlobnor Puzdoy,dc=example,dc=com +documentIdentifier: document 1 + +dn: documentTitle=book2,dc=example,dc=com +objectClass: document +description: abstract2 +documentTitle: book2 +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentIdentifier: document 2 + +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +dn: cn=Torvlobnor Puzdoy,dc=example,dc=com +objectClass: inetOrgPerson +cn: Torvlobnor Puzdoy +sn: Puzdoy +seeAlso: documentTitle=book1,dc=example,dc=com +givenName: Torvlobnor +telephoneNumber: 545-4563 + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Testing subtree search with manageDSAit... +dn: cn=Akakiy Zinberstein,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: pkiUser +cn: Akakiy Zinberstein +sn: Zinberstein +givenName: Akakiy +userCertificate;binary:: MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs + aWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhI + EhhbXBzdGVyMR8wHQYJKoZIhvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQ + UAA4GNADCBiQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJh+q + nsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYmJ0erS3aoimOHLEFi + mmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4Q + gENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUO + iC37EK0Uf0XjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1U + EBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0 + ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAM + A0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESuxLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP + 05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5j + ds/HnaJsGcHI5JRG7CBJbW+wrwge3trJ1xHJI8prN + +dn: documentTitle=book1,dc=example,dc=com +objectClass: document +description: abstract1 +documentTitle: book1 +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentAuthor: cn=Torvlobnor Puzdoy,dc=example,dc=com +documentIdentifier: document 1 + +dn: documentTitle=book2,dc=example,dc=com +objectClass: document +description: abstract2 +documentTitle: book2 +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentIdentifier: document 2 + +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +dn: ou=Referral,dc=example,dc=com +objectClass: referral +objectClass: extensibleObject +ou: Referral +ref: ldap://localhost:9012/ + +dn: cn=Torvlobnor Puzdoy,dc=example,dc=com +objectClass: inetOrgPerson +cn: Torvlobnor Puzdoy +sn: Puzdoy +seeAlso: documentTitle=book1,dc=example,dc=com +givenName: Torvlobnor +telephoneNumber: 545-4563 + +# Testing invalid filter... +# Testing exact search... +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Testing substrings initial search... +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Testing substrings any search... +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Testing substrings final search... +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Testing approx search... +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Testing extensible filter search... +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Testing search for telephoneNumber... +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Testing AND search... +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Testing AND search on objectClass... +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +# Testing OR search... +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Testing OR search on objectClass... +dn: documentTitle=book1,dc=example,dc=com +objectClass: document +description: abstract1 +documentTitle: book1 +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentAuthor: cn=Torvlobnor Puzdoy,dc=example,dc=com +documentIdentifier: document 1 + +dn: documentTitle=book2,dc=example,dc=com +objectClass: document +description: abstract2 +documentTitle: book2 +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentIdentifier: document 2 + +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +# Testing NOT search... +dn: cn=Akakiy Zinberstein,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: pkiUser +cn: Akakiy Zinberstein +sn: Zinberstein +givenName: Akakiy +userCertificate;binary:: MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs + aWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhI + EhhbXBzdGVyMR8wHQYJKoZIhvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQ + UAA4GNADCBiQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJh+q + nsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYmJ0erS3aoimOHLEFi + mmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4Q + gENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUO + iC37EK0Uf0XjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1U + EBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0 + ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAM + A0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESuxLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP + 05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5j + ds/HnaJsGcHI5JRG7CBJbW+wrwge3trJ1xHJI8prN + +dn: cn=Torvlobnor Puzdoy,dc=example,dc=com +objectClass: inetOrgPerson +cn: Torvlobnor Puzdoy +sn: Puzdoy +seeAlso: documentTitle=book1,dc=example,dc=com +givenName: Torvlobnor +telephoneNumber: 545-4563 + +# Testing NOT search on objectClass... +dn: documentTitle=book1,dc=example,dc=com +objectClass: document +description: abstract1 +documentTitle: book1 +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentAuthor: cn=Torvlobnor Puzdoy,dc=example,dc=com +documentIdentifier: document 1 + +dn: documentTitle=book2,dc=example,dc=com +objectClass: document +description: abstract2 +documentTitle: book2 +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentIdentifier: document 2 + +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Testing NOT search on "auxiliary" objectClass... +dn: cn=Akakiy Zinberstein,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: pkiUser +cn: Akakiy Zinberstein +sn: Zinberstein +givenName: Akakiy +userCertificate;binary:: MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs + aWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhI + EhhbXBzdGVyMR8wHQYJKoZIhvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQ + UAA4GNADCBiQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJh+q + nsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYmJ0erS3aoimOHLEFi + mmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4Q + gENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUO + iC37EK0Uf0XjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1U + EBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0 + ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAM + A0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESuxLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP + 05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5j + ds/HnaJsGcHI5JRG7CBJbW+wrwge3trJ1xHJI8prN + +dn: documentTitle=book1,dc=example,dc=com +objectClass: document +description: abstract1 +documentTitle: book1 +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentAuthor: cn=Torvlobnor Puzdoy,dc=example,dc=com +documentIdentifier: document 1 + +dn: documentTitle=book2,dc=example,dc=com +objectClass: document +description: abstract2 +documentTitle: book2 +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentIdentifier: document 2 + +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +dn: cn=Torvlobnor Puzdoy,dc=example,dc=com +objectClass: inetOrgPerson +cn: Torvlobnor Puzdoy +sn: Puzdoy +seeAlso: documentTitle=book1,dc=example,dc=com +givenName: Torvlobnor +telephoneNumber: 545-4563 + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Testing attribute inheritance in filter... +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +# Testing undefined attribute in filter... +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Testing objectClass inheritance in filter... +dn: cn=Akakiy Zinberstein,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: pkiUser +cn: Akakiy Zinberstein +sn: Zinberstein +givenName: Akakiy +userCertificate;binary:: MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs + aWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhI + EhhbXBzdGVyMR8wHQYJKoZIhvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQ + UAA4GNADCBiQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJh+q + nsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYmJ0erS3aoimOHLEFi + mmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4Q + gENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUO + iC37EK0Uf0XjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1U + EBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0 + ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAM + A0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESuxLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP + 05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5j + ds/HnaJsGcHI5JRG7CBJbW+wrwge3trJ1xHJI8prN + +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +dn: cn=Torvlobnor Puzdoy,dc=example,dc=com +objectClass: inetOrgPerson +cn: Torvlobnor Puzdoy +sn: Puzdoy +seeAlso: documentTitle=book1,dc=example,dc=com +givenName: Torvlobnor +telephoneNumber: 545-4563 + +# Testing "auxiliary" objectClass in filter... +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +# Testing hasSubordinates in filter... +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Testing entryUUID in filter... +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +# Testing attribute inheritance in requested attributes... +dn: cn=Mitya Kovalev,dc=example,dc=com +cn: Mitya Kovalev +sn: Kovalev +givenName: Mitya + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Testing objectClass in requested attributes... +dn: cn=Akakiy Zinberstein,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: pkiUser + +dn: documentTitle=book1,dc=example,dc=com +objectClass: document + +dn: documentTitle=book2,dc=example,dc=com +objectClass: document + +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject + +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson + +dn: cn=Torvlobnor Puzdoy,dc=example,dc=com +objectClass: inetOrgPerson + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Testing operational attributes in request... +dn: cn=Akakiy Zinberstein,dc=example,dc=com +structuralObjectClass: inetOrgPerson +entryDN: cn=Akakiy Zinberstein,dc=example,dc=com +subschemaSubentry: cn=Subschema +hasSubordinates: FALSE +entryUUID: 00000001-0000-0003-0000-000000000000 + +dn: documentTitle=book1,dc=example,dc=com +structuralObjectClass: document +entryDN: documentTitle=book1,dc=example,dc=com +subschemaSubentry: cn=Subschema +hasSubordinates: FALSE +entryUUID: 00000002-0000-0001-0000-000000000000 + +dn: documentTitle=book2,dc=example,dc=com +structuralObjectClass: document +entryDN: documentTitle=book2,dc=example,dc=com +subschemaSubentry: cn=Subschema +hasSubordinates: FALSE +entryUUID: 00000002-0000-0002-0000-000000000000 + +dn: dc=example,dc=com +structuralObjectClass: organization +entryDN: dc=example,dc=com +subschemaSubentry: cn=Subschema +hasSubordinates: TRUE +entryUUID: 00000003-0000-0001-0000-000000000000 + +dn: cn=Mitya Kovalev,dc=example,dc=com +structuralObjectClass: inetOrgPerson +entryDN: cn=Mitya Kovalev,dc=example,dc=com +subschemaSubentry: cn=Subschema +hasSubordinates: FALSE +entryUUID: 00000001-0000-0001-0000-000000000000 + +dn: cn=Torvlobnor Puzdoy,dc=example,dc=com +structuralObjectClass: inetOrgPerson +entryDN: cn=Torvlobnor Puzdoy,dc=example,dc=com +subschemaSubentry: cn=Subschema +hasSubordinates: FALSE +entryUUID: 00000001-0000-0002-0000-000000000000 + +# refldap://localhost:9012/dc=example,dc=com??sub + diff --git a/tests/data/sql-write.out b/tests/data/sql-write.out new file mode 100644 index 0000000..45fa164 --- /dev/null +++ b/tests/data/sql-write.out @@ -0,0 +1,576 @@ +# Using ldapsearch to retrieve all the entries... +dn: cn=Akakiy Zinberstein,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: pkiUser +cn: Akakiy Zinberstein +sn: Zinberstein +givenName: Akakiy +userCertificate;binary:: MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs + aWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhI + EhhbXBzdGVyMR8wHQYJKoZIhvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQ + UAA4GNADCBiQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJh+q + nsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYmJ0erS3aoimOHLEFi + mmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4Q + gENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUO + iC37EK0Uf0XjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1U + EBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0 + ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAM + A0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESuxLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP + 05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5j + ds/HnaJsGcHI5JRG7CBJbW+wrwge3trJ1xHJI8prN + +dn: documentTitle=book1,dc=example,dc=com +objectClass: document +description: abstract1 +documentTitle: book1 +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentAuthor: cn=Torvlobnor Puzdoy,dc=example,dc=com +documentIdentifier: document 1 + +dn: documentTitle=book2,dc=example,dc=com +objectClass: document +description: abstract2 +documentTitle: book2 +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentIdentifier: document 2 + +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +dn: cn=Torvlobnor Puzdoy,dc=example,dc=com +objectClass: inetOrgPerson +cn: Torvlobnor Puzdoy +sn: Puzdoy +seeAlso: documentTitle=book1,dc=example,dc=com +givenName: Torvlobnor +telephoneNumber: 545-4563 + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Using ldapsearch to retrieve all the entries... +dn: cn=Akakiy Zinberstein,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: pkiUser +cn: Akakiy Zinberstein +sn: Zinberstein +givenName: Akakiy +userCertificate;binary:: MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs + aWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhI + EhhbXBzdGVyMR8wHQYJKoZIhvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQ + UAA4GNADCBiQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJh+q + nsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYmJ0erS3aoimOHLEFi + mmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4Q + gENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUO + iC37EK0Uf0XjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1U + EBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0 + ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAM + A0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESuxLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP + 05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5j + ds/HnaJsGcHI5JRG7CBJbW+wrwge3trJ1xHJI8prN + +dn: o=An Org,dc=example,dc=com +objectClass: organization +o: An Org + +dn: documentTitle=book1,dc=example,dc=com +objectClass: document +description: abstract1 +documentTitle: book1 +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentAuthor: cn=Torvlobnor Puzdoy,dc=example,dc=com +documentIdentifier: document 1 + +dn: documentTitle=book2,dc=example,dc=com +objectClass: document +description: abstract2 +documentTitle: book2 +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentIdentifier: document 2 + +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +dn: cn=Lev Tolstoij,dc=example,dc=com +objectClass: inetOrgPerson +cn: Lev Tolstoij +sn: Tolstoij +seeAlso: documentTitle=War and Peace,dc=example,dc=com +givenName: Lev +telephoneNumber: +39 02 XXXX YYYY +telephoneNumber: +39 02 XXXX ZZZZ + +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +dn: cn=Some One,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: simpleSecurityObject +cn: Some One +sn: One +givenName: Some +telephoneNumber: +1 800 900 1234 +telephoneNumber: +1 800 900 1235 + +dn: dc=subnet,dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: SubNet +dc: subnet + +dn: cn=SubNet User,dc=subnet,dc=example,dc=com +objectClass: inetOrgPerson +cn: SubNet User +sn: User +givenName: SubNet + +dn: dc=subnet2,dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: SubNet 2 +dc: subnet 2 + +dn: cn=Torvlobnor Puzdoy,dc=example,dc=com +objectClass: inetOrgPerson +cn: Torvlobnor Puzdoy +sn: Puzdoy +seeAlso: documentTitle=book1,dc=example,dc=com +givenName: Torvlobnor +telephoneNumber: 545-4563 + +dn: documentTitle=War and Peace,dc=example,dc=com +objectClass: document +description: Historical novel +documentTitle: War and Peace +documentAuthor: cn=Lev Tolstoij,dc=example,dc=com +documentIdentifier: document 3 + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Using ldapsearch to retrieve all the entries... +dn: cn=Akakiy Zinberstein,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: pkiUser +cn: Akakiy Zinberstein +sn: Zinberstein +givenName: Akakiy +userCertificate;binary:: MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs + aWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhI + EhhbXBzdGVyMR8wHQYJKoZIhvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQ + UAA4GNADCBiQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJh+q + nsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYmJ0erS3aoimOHLEFi + mmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4Q + gENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUO + iC37EK0Uf0XjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1U + EBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0 + ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAM + A0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESuxLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP + 05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5j + ds/HnaJsGcHI5JRG7CBJbW+wrwge3trJ1xHJI8prN + +dn: o=An Org,dc=example,dc=com +objectClass: organization +o: An Org + +dn: documentTitle=book1,dc=example,dc=com +objectClass: document +description: abstract1 +documentTitle: book1 +documentAuthor: cn=Lev Tolstoij,dc=example,dc=com +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentAuthor: cn=Torvlobnor Puzdoy,dc=example,dc=com +documentIdentifier: document 1 + +dn: documentTitle=book2,dc=example,dc=com +objectClass: document +description: abstract2 +documentTitle: book2 +documentAuthor: cn=Lev Tolstoij,dc=example,dc=com +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentIdentifier: document 2 + +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +dn: cn=Lev Tolstoij,dc=example,dc=com +objectClass: inetOrgPerson +cn: Lev Tolstoij +sn: Tolstoij +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +seeAlso: documentTitle=War and Peace,dc=example,dc=com +givenName: Lev +telephoneNumber: +39 02 XXXX ZZZZ +telephoneNumber: +39 333 ZZZ 1234 + +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book1,dc=example,dc=com +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: +1 800 123 4567 +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +dn: cn=Some One,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: simpleSecurityObject +cn: Some One +sn: One +givenName: Some + +dn: dc=subnet,dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: SubNet +dc: subnet + +dn: cn=SubNet User,dc=subnet,dc=example,dc=com +objectClass: inetOrgPerson +cn: SubNet User +sn: User +givenName: SubNet + +dn: dc=subnet2,dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: SubNet 2 +dc: subnet 2 + +dn: cn=Torvlobnor Puzdoy,dc=example,dc=com +objectClass: inetOrgPerson +cn: Torvlobnor Puzdoy +sn: Puzdoy +seeAlso: documentTitle=book1,dc=example,dc=com +givenName: Torvlobnor +telephoneNumber: 545-4563 + +dn: documentTitle=War and Peace,dc=example,dc=com +objectClass: document +description: Historical novel +documentTitle: War and Peace +documentAuthor: cn=Lev Tolstoij,dc=example,dc=com +documentIdentifier: document 3 + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Using ldapsearch to retrieve all the entries... +dn: cn=Akakiy Zinberstein,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: pkiUser +cn: Akakiy Zinberstein +sn: Zinberstein +givenName: Akakiy +userCertificate;binary:: MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs + aWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhI + EhhbXBzdGVyMR8wHQYJKoZIhvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQ + UAA4GNADCBiQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJh+q + nsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYmJ0erS3aoimOHLEFi + mmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4Q + gENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUO + iC37EK0Uf0XjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1U + EBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0 + ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAM + A0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESuxLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP + 05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5j + ds/HnaJsGcHI5JRG7CBJbW+wrwge3trJ1xHJI8prN + +dn: o=An Org,dc=example,dc=com +objectClass: organization +o: An Org + +dn: documentTitle=book2,dc=example,dc=com +objectClass: document +description: abstract2 +documentTitle: book2 +documentAuthor: cn=Lev Tolstoij,dc=example,dc=com +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentIdentifier: document 2 + +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +dn: cn=Lev Tolstoij,dc=example,dc=com +objectClass: inetOrgPerson +cn: Lev Tolstoij +sn: Tolstoij +seeAlso: documentTitle=book2,dc=example,dc=com +seeAlso: documentTitle=War and Peace,dc=example,dc=com +givenName: Lev +telephoneNumber: +39 02 XXXX ZZZZ +telephoneNumber: +39 333 ZZZ 1234 + +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=book2,dc=example,dc=com +givenName: Mitya +telephoneNumber: +1 800 123 4567 +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +dn: cn=Some One,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: simpleSecurityObject +cn: Some One +sn: One +givenName: Some + +dn: dc=subnet,dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: SubNet +dc: subnet + +dn: cn=SubNet User,dc=subnet,dc=example,dc=com +objectClass: inetOrgPerson +cn: SubNet User +sn: User +givenName: SubNet + +dn: documentTitle=War and Peace,dc=example,dc=com +objectClass: document +description: Historical novel +documentTitle: War and Peace +documentAuthor: cn=Lev Tolstoij,dc=example,dc=com +documentIdentifier: document 3 + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Using ldapsearch to retrieve all the entries... +dn: cn=Akakiy Zinberstein,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: pkiUser +cn: Akakiy Zinberstein +sn: Zinberstein +givenName: Akakiy +userCertificate;binary:: MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs + aWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhI + EhhbXBzdGVyMR8wHQYJKoZIhvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQ + UAA4GNADCBiQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJh+q + nsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYmJ0erS3aoimOHLEFi + mmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4Q + gENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUO + iC37EK0Uf0XjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1U + EBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0 + ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAM + A0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESuxLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP + 05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5j + ds/HnaJsGcHI5JRG7CBJbW+wrwge3trJ1xHJI8prN + +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +dn: cn=Lev Tolstoij,dc=subnet,dc=example,dc=com +objectClass: inetOrgPerson +cn: Lev Tolstoij +sn: Tolstoij +seeAlso: documentTitle=Renamed Book,dc=example,dc=com +seeAlso: documentTitle=War and Peace,dc=example,dc=com +givenName: Lev +telephoneNumber: +39 02 XXXX ZZZZ +telephoneNumber: +39 333 ZZZ 1234 + +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=Renamed Book,dc=example,dc=com +givenName: Mitya +telephoneNumber: +1 800 123 4567 +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +dn: documentTitle=Renamed Book,dc=example,dc=com +objectClass: document +description: abstract2 +documentTitle: Renamed Book +documentAuthor: cn=Lev Tolstoij,dc=subnet,dc=example,dc=com +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentIdentifier: document 2 + +dn: o=Renamed Org,dc=example,dc=com +objectClass: organization +o: Renamed Org + +dn: cn=Some One,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: simpleSecurityObject +cn: Some One +sn: One +givenName: Some + +dn: dc=subnet,dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: SubNet +dc: subnet + +dn: cn=SubNet User,dc=subnet,dc=example,dc=com +objectClass: inetOrgPerson +cn: SubNet User +sn: User +givenName: SubNet + +dn: documentTitle=War and Peace,dc=example,dc=com +objectClass: document +description: Historical novel +documentTitle: War and Peace +documentAuthor: cn=Lev Tolstoij,dc=subnet,dc=example,dc=com +documentIdentifier: document 3 + +# refldap://localhost:9012/dc=example,dc=com??sub + +# Using ldapsearch to retrieve the modified entry... +dn: ou=Referral,dc=example,dc=com +objectClass: referral +objectClass: extensibleObject +ou: Referral +ref: ldap://localhost:9009/ + +# Using ldapsearch to retrieve the renamed entry... +dn: ou=Renamed Referral,dc=example,dc=com +objectClass: referral +objectClass: extensibleObject +ou: Renamed Referral +ref: ldap://localhost:9009/ + +# Using ldapsearch to retrieve all the entries... +dn: cn=Akakiy Zinberstein,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: pkiUser +cn: Akakiy Zinberstein +sn: Zinberstein +givenName: Akakiy +userCertificate;binary:: MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDV + QQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTH + RkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb20wHhc + NMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs + aWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhI + EhhbXBzdGVyMR8wHQYJKoZIhvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQ + UAA4GNADCBiQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJh+q + nsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYmJ0erS3aoimOHLEFi + mmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJYIZIAYb4Q + gENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUO + iC37EK0Uf0XjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1U + EBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0 + ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAM + A0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESuxLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP + 05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5j + ds/HnaJsGcHI5JRG7CBJbW+wrwge3trJ1xHJI8prN + +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example +dc: example + +dn: cn=Lev Tolstoij,dc=subnet,dc=example,dc=com +objectClass: inetOrgPerson +cn: Lev Tolstoij +sn: Tolstoij +seeAlso: documentTitle=Renamed Book,dc=example,dc=com +seeAlso: documentTitle=War and Peace,dc=example,dc=com +givenName: Lev +telephoneNumber: +39 02 XXXX ZZZZ +telephoneNumber: +39 333 ZZZ 1234 + +dn: cn=Mitya Kovalev,dc=example,dc=com +objectClass: inetOrgPerson +cn: Mitya Kovalev +sn: Kovalev +seeAlso: documentTitle=Renamed Book,dc=example,dc=com +givenName: Mitya +telephoneNumber: +1 800 123 4567 +telephoneNumber: 222-3234 +telephoneNumber: 332-2334 + +dn: documentTitle=Renamed Book,dc=example,dc=com +objectClass: document +description: abstract2 +documentTitle: Renamed Book +documentAuthor: cn=Lev Tolstoij,dc=subnet,dc=example,dc=com +documentAuthor: cn=Mitya Kovalev,dc=example,dc=com +documentIdentifier: document 2 + +dn: o=Renamed Org,dc=example,dc=com +objectClass: organization +o: Renamed Org + +dn: cn=Some One,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: simpleSecurityObject +cn: Some One +sn: One +givenName: Some + +dn: dc=subnet,dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: SubNet +dc: subnet + +dn: cn=SubNet User,dc=subnet,dc=example,dc=com +objectClass: inetOrgPerson +cn: SubNet User +sn: User +givenName: SubNet + +dn: documentTitle=War and Peace,dc=example,dc=com +objectClass: document +description: Historical novel +documentTitle: War and Peace +documentAuthor: cn=Lev Tolstoij,dc=subnet,dc=example,dc=com +documentIdentifier: document 3 + +# refldap://localhost:9009/dc=example,dc=com??sub + diff --git a/tests/data/subtree-rename.out b/tests/data/subtree-rename.out new file mode 100644 index 0000000..e5f753a --- /dev/null +++ b/tests/data/subtree-rename.out @@ -0,0 +1,97 @@ +# Searching all database (after add)... +dn: ou=Another parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Another parent + +dn: ou=Child,ou=Parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Child + +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example, Inc. +dc: example + +dn: ou=Grandchild,ou=Child,ou=Parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Grandchild + +dn: ou=Parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Parent + +# Searching all database (after PASS1)... +dn: ou=Another parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Another parent + +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example, Inc. +dc: example + +dn: ou=Grandchild,ou=Renamed child,ou=Parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Grandchild + +dn: ou=Parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Parent + +dn: ou=Renamed child,ou=Parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Child +ou: Renamed child + +# Searching all database (after PASS2)... +dn: ou=Another parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Another parent + +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example, Inc. +dc: example + +dn: ou=Grandchild,ou=Renamed child,ou=Renamed parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Grandchild + +dn: ou=Renamed child,ou=Renamed parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Child +ou: Renamed child + +dn: ou=Renamed parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Parent +ou: Renamed parent + +# Searching all database (after PASS3)... +dn: ou=Another parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Another parent + +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example, Inc. +dc: example + +dn: ou=Grandchild,ou=Renamed child,ou=Another parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Grandchild + +dn: ou=Renamed child,ou=Another parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Child +ou: Renamed child + +dn: ou=Renamed parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Parent +ou: Renamed parent + diff --git a/tests/data/test-chain1.ldif b/tests/data/test-chain1.ldif new file mode 100644 index 0000000..76e22f7 --- /dev/null +++ b/tests/data/test-chain1.ldif @@ -0,0 +1,374 @@ +#LEAD COMMENT +dn: dc=example,dc=com +#EMBEDDED COMMENT +objectclass: top +objectclass: organization +objectclass: domainRelatedObject +objectclass: dcobject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postaladdress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephonenumber: +1 313 555 1817 +associateddomain: example.com + +dn: ou=People,dc=example,dc=com +objectclass: organizationalUnit +objectclass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: ou=Groups,dc=example,dc=com +objectclass: referral +objectclass: extensibleobject +ou: Groups +ref: @URI2@ou=Groups,dc=example,dc=com + +dn: ou=Other,dc=example,dc=com +objectclass: referral +objectclass: extensibleobject +ou: Other +# invalid URI first to test failover capabilities (search only) +ref: @URI3@ou=Other,dc=example,dc=com +ref: @URI2@ou=Other,dc=example,dc=com + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: organizationalUnit +ou: Alumni Association + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectclass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectclass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postaladdress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +userpassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homepostaladdress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homephone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimiletelephonenumber: +1 313 555 2274 +telephonenumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectclass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +userpassword:: Ympvcm4= +homepostaladdress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postaladdress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homephone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimiletelephonenumber: +1 313 555 2177 +telephonenumber: +1 313 555 0355 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Lemonade +homepostaladdress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimiletelephonenumber: +1 313 555 3223 +telephonenumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homephone: +1 313 555 0454 + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +userpassword:: amFq +homepostaladdress: 3882 Beverly Rd. $ Anytown, MI 48105 +homephone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimiletelephonenumber: +1 313 555 4332 +telephonenumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +objectclass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 933 Brooks $ Anytown, MI 48104 +homephone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postaladdress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimiletelephonenumber: +1 313 555 8688 +telephonenumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homephone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimiletelephonenumber: +1 313 555 2311 +telephonenumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homepostaladdress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homephone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimiletelephonenumber: +1 313 555 2756 +telephonenumber: +1 313 555 8232 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postaladdress: ITD $ 535 W. William $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homephone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimiletelephonenumber: +1 313 555 4544 +telephonenumber: +1 313 555 9394 + +dn: cn=Manager,dc=example,dc=com +objectclass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userpassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 199 Outer Drive $ Ypsilanti, MI 48198 +homephone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimiletelephonenumber: +1 313 555 7762 +telephonenumber: +1 313 555 4177 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homephone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimiletelephonenumber: +1 313 555 9700 +telephonenumber: +1 313 555 5331 diff --git a/tests/data/test-chain2.ldif b/tests/data/test-chain2.ldif new file mode 100644 index 0000000..e1fb680 --- /dev/null +++ b/tests/data/test-chain2.ldif @@ -0,0 +1,88 @@ +#LEAD COMMENT +dn: dc=example,dc=com +#EMBEDDED COMMENT +objectclass: top +objectclass: organization +objectclass: domainRelatedObject +objectclass: dcobject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postaladdress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephonenumber: +1 313 555 1817 +associateddomain: example.com + +dn: ou=People,dc=example,dc=com +objectClass: referral +objectclass: extensibleObject +ou: People +ref: @URI1@ou=People,dc=example,dc=com + +dn: ou=Groups,dc=example,dc=com +objectclass: organizationalUnit +ou: Groups + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectclass: groupofnames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectclass: groupofnames + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectclass: groupofuniquenames +uniquemember: cn=Manager,dc=example,dc=com +uniquemember: cn=Bjorn Jensen,OU=Information Technology Division,ou=People,dc= + example,dc=com +uniquemember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniquemember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=Manager,dc=example,dc=com +objectclass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userpassword:: c2VjcmV0 + +dn: ou=Other,dc=example,dc=com +objectclass: organizationalUnit +ou: Other + diff --git a/tests/data/test-compmatch.ldif b/tests/data/test-compmatch.ldif new file mode 100644 index 0000000..d69f9f6 --- /dev/null +++ b/tests/data/test-compmatch.ldif @@ -0,0 +1,483 @@ +#LEAD COMMENT +dn: dc=example,dc=com +#EMBEDDED COMMENT +objectclass: top +objectclass: organization +objectclass: domainRelatedObject +objectclass: dcobject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postaladdress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephonenumber: +1 313 555 1817 +associateddomain: example.com + +dn: ou=People,dc=example,dc=com +objectclass: organizationalUnit +objectclass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: ou=Groups,dc=example,dc=com +objectclass: organizationalUnit +ou: Groups + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: organizationalUnit +ou: Alumni Association + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectclass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectclass: groupofnames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectclass: groupofnames + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectclass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postaladdress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +userpassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homepostaladdress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homephone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimiletelephonenumber: +1 313 555 2274 +telephonenumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectclass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +userpassword:: Ympvcm4= +homepostaladdress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postaladdress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homephone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimiletelephonenumber: +1 313 555 2177 +telephonenumber: +1 313 555 0355 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Lemonade +homepostaladdress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimiletelephonenumber: +1 313 555 3223 +telephonenumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homephone: +1 313 555 0454 + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectclass: groupofuniquenames +uniquemember: cn=Manager,dc=example,dc=com +uniquemember: cn=Bjorn Jensen,OU=Information Technology Division,ou=People,dc= + example,dc=com +uniquemember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniquemember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +userpassword:: amFq +homepostaladdress: 3882 Beverly Rd. $ Anytown, MI 48105 +homephone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimiletelephonenumber: +1 313 555 4332 +telephonenumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +objectclass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 933 Brooks $ Anytown, MI 48104 +homephone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postaladdress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimiletelephonenumber: +1 313 555 8688 +telephonenumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homephone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimiletelephonenumber: +1 313 555 2311 +telephonenumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homepostaladdress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homephone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimiletelephonenumber: +1 313 555 2756 +telephonenumber: +1 313 555 8232 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postaladdress: ITD $ 535 W. William $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homephone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimiletelephonenumber: +1 313 555 4544 +telephonenumber: +1 313 555 9394 + +dn: cn=Manager,dc=example,dc=com +objectclass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userpassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 199 Outer Drive $ Ypsilanti, MI 48198 +homephone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimiletelephonenumber: +1 313 555 7762 +telephonenumber: +1 313 555 4177 + +dn: cn=charlie,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +objectclass: extensibleObject +uid: charlie +cn: charlie +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDVQQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MONBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnAKUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUAzNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTySuz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5UedAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4XrEkBJ/Q= + +dn: cn=beta,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +objectclass: extensibleObject +uid: charlie +cn: beta +sn: Jee +userCertificate;binary:: MIIB9jCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQQFADANMQswCQYDVQQGEwJVUzAeFw0wNDEwMTIwMDAxNTBaFw0wNDExMTEwMDAxNTBaMA0xCzAJBgNVBAYTAlVTMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQcTs4uD+gAoQ1XkYN4woLtZaEi7XVEVIJQ6Rsn2QP3MONBT9jvrhVcnUJQtvEEkfnsNANKeYntUTvih76jErFNTmg7zl0govFSkiuS+tfrZnn/Ebix3+tTMnAKUQXkYi5Mr+x3U44yYo1EPLpZlcV1Caafc30EMRQ/Gv/PdrqYwIDAQABo2YwZDAdBgNVHQ4EFgQUAzNnruNiI38IPf39ZJGFx8mDsxgwNQYDVR0jBC4wLIAUAzNnruNiI38IPf39ZJGFx8mDsxihEaQPMA0xCzAJBgNVBAYTAlVTggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAf44laoKcTySuz3yQb/lfOBVDh6oMxysal0eEij+nypQJ1H+rsZ+ebUlKMiTYhrTk3n3H6moHaxICENIu4P5rD5UedAWtMjWq2ZJIa26bbvB4enGOF66KH5S823ZdKa0Kr2JcHAAYFpf+TQoGg5JO7TD3AECd7Qo9a+4XrEkBJ/Q= +certificateRevocationList;binary:: MIIP0TCCDrkCAQEwDQYJKoZIhvcNAQEFBQAwgZMxCzA + JBgNVBAYTAkFVMSswKQYDVQQKEyJDZXJ0aWZpY2F0ZXMgQXVzdHJhbGlhIFB0eSBMaW1pdGVkMSUw + IwYDVQQDExxDQVBMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTAwLgYKCZImiZPyLGQBAxQgY2FAY + 2VydGlmaWNhdGVzLWF1c3RyYWxpYS5jb20uYXUXDTAzMDcyMjAxMzAyMFoXDTAzMTEwMzAxMzUyMF + owgg27MCMCBDi/biUXDTAwMDMwNjA2MjEzM1owDDAKBgNVHRUEAwoBBDAjAgQ5Il0KFw0wMDA1MjM + wODAwNDNaMAwwCgYDVR0VBAMKAQQwIwIEOSo6ZxcNMDAwNTI5MDIyNTQzWjAMMAoGA1UdFQQDCgEE + MCMCBDkx1QAXDTAwMDUyOTAzMzYwMVowDDAKBgNVHRUEAwoBBDAjAgQ5Pd7GFw0wMDA2MDcwNTM3M + jRaMAwwCgYDVR0VBAMKAQQwIwIEOUcavBcNMDAwNjE0MDc0MjExWjAMMAoGA1UdFQQDCgEEMCMCBD + lIlLYXDTAwMDYxNTA4MzY1NlowDDAKBgNVHRUEAwoBBDAjAgQ5SeOkFw0wMDA2MTYwODIzMDVaMAw + wCgYDVR0VBAMKAQQwIwIEOUiGjRcNMDAwNjE2MDgyMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ30oX + DTAwMDYyOTA4MDQyM1owDDAKBgNVHRUEAwoBBDAjAgQ5SdUjFw0wMDA2MjkwODA1NDVaMAwwCgYDV + R0VBAMKAQQwIwIEOTHlfRcNMDAwNjMwMDYwNjA1WjAMMAoGA1UdFQQDCgEEMCMCBDkzV6EXDTAwMD + YzMDA2MDYxMVowDDAKBgNVHRUEAwoBBDAjAgQ5SIFOFw0wMDA2MzAwNjA2MjFaMAwwCgYDVR0VBAM + KAQQwIwIEOUiCbBcNMDAwNjMwMDYwNjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlIgzkXDTAwMDYzMDA2 + MDYzNlowDDAKBgNVHRUEAwoBBDAjAgQ5SIQEFw0wMDA2MzAwNjA2NDFaMAwwCgYDVR0VBAMKAQQwI + wIEOUiFBBcNMDAwNjMwMDYwNjQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlIhfQXDTAwMDYzMDA2MDY1NV + owDDAKBgNVHRUEAwoBBDAjAgQ5SIcmFw0wMDA2MzAwNjA3MDJaMAwwCgYDVR0VBAMKAQQwIwIEOUi + H4hcNMDAwNjMwMDYwNzA4WjAMMAoGA1UdFQQDCgEEMCMCBDlIiGUXDTAwMDYzMDA2MDcxNFowDDAK + BgNVHRUEAwoBBDAjAgQ5SIjaFw0wMDA2MzAwNjA3NDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiJhRcNM + DAwNjMwMDYwNzU3WjAMMAoGA1UdFQQDCgEEMCMCBDlIjoIXDTAwMDYzMDA2MDgwNFowDDAKBgNVHR + UEAwoBBDAjAgQ5SI89Fw0wMDA2MzAwNjA4MTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiP1RcNMDAwNjM + wMDYwODE1WjAMMAoGA1UdFQQDCgEEMCMCBDlIkEoXDTAwMDYzMDA2MDg0NVowDDAKBgNVHRUEAwoB + BDAjAgQ5SJC7Fw0wMDA2MzAwNjA4NTBaMAwwCgYDVR0VBAMKAQQwIwIEOUiReRcNMDAwNjMwMDYwO + DU2WjAMMAoGA1UdFQQDCgEEMCMCBDlIkgMXDTAwMDYzMDA2MDkwNFowDDAKBgNVHRUEAwoBBDAjAg + Q5SJKqFw0wMDA2MzAwNjA5MDlaMAwwCgYDVR0VBAMKAQQwIwIEOUiTJhcNMDAwNjMwMDYwOTE2WjA + MMAoGA1UdFQQDCgEEMCMCBDlIk5AXDTAwMDYzMDA2MDkyMVowDDAKBgNVHRUEAwoBBDAjAgQ5SJQ3 + Fw0wMDA2MzAwNjA5MjZaMAwwCgYDVR0VBAMKAQQwIwIEOUiVXhcNMDAwNjMwMDYwOTMyWjAMMAoGA + 1UdFQQDCgEEMCMCBDlIlgcXDTAwMDYzMDA2MDkzOFowDDAKBgNVHRUEAwoBBDAjAgQ5SJazFw0wMD + A2MzAwNjA5NDZaMAwwCgYDVR0VBAMKAQQwIwIEOUiXPxcNMDAwNjMwMDYwOTUxWjAMMAoGA1UdFQQ + DCgEEMCMCBDlIl7IXDTAwMDYzMDA2MDk1OFowDDAKBgNVHRUEAwoBBDAjAgQ5SJg0Fw0wMDA2MzAw + NjEwMDRaMAwwCgYDVR0VBAMKAQQwIwIEOUiZBBcNMDAwNjMwMDYxMDA5WjAMMAoGA1UdFQQDCgEEM + CMCBDlJzksXDTAwMDYzMDA2MTAxNVowDDAKBgNVHRUEAwoBBDAjAgQ5Sc64Fw0wMDA2MzAwNjEwMj + FaMAwwCgYDVR0VBAMKAQQwIwIEOUnPVxcNMDAwNjMwMDYxMDI3WjAMMAoGA1UdFQQDCgEEMCMCBDl + J0BAXDTAwMDYzMDA2MTAzNVowDDAKBgNVHRUEAwoBBDAjAgQ5SdDKFw0wMDA2MzAwNjEwNDNaMAww + CgYDVR0VBAMKAQQwIwIEOUnRZRcNMDAwNjMwMDYxMDQ5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ0d0XD + TAwMDYzMDA2MTA1N1owDDAKBgNVHRUEAwoBBDAjAgQ5SdJ4Fw0wMDA2MzAwNjExMTVaMAwwCgYDVR + 0VBAMKAQQwIwIEOUnTDBcNMDAwNjMwMDYxMTIxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ04oXDTAwMDY + zMDA2MTEyN1owDDAKBgNVHRUEAwoBBDAjAgQ5SdQSFw0wMDA2MzAwNjExMzNaMAwwCgYDVR0VBAMK + AQQwIwIEOUnUoBcNMDAwNjMwMDYxMTM5WjAMMAoGA1UdFQQDCgEEMCMCBDlJ2SQXDTAwMDYzMDA2M + TE1M1owDDAKBgNVHRUEAwoBBDAjAgQ5SdmwFw0wMDA2MzAwNjEyMDVaMAwwCgYDVR0VBAMKAQQwIw + IEOUnaTBcNMDAwNjMwMDYxMjExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ2vYXDTAwMDYzMDA2MTIxN1o + wDDAKBgNVHRUEAwoBBDAjAgQ5SducFw0wMDA2MzAwNjEyMjNaMAwwCgYDVR0VBAMKAQQwIwIEOUnc + IRcNMDAwNjMwMDYxMjI4WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3KQXDTAwMDYzMDA2MTIzM1owDDAKB + gNVHRUEAwoBBDAjAgQ5Sd2xFw0wMDA2MzAwNjEyNDBaMAwwCgYDVR0VBAMKAQQwIwIEOUneRBcNMD + AwNjMwMDYxMjQ1WjAMMAoGA1UdFQQDCgEEMCMCBDlJ3skXDTAwMDYzMDA2MTI1MVowDDAKBgNVHRU + EAwoBBDAjAgQ5Sd/IFw0wMDA2MzAwNjEzMDJaMAwwCgYDVR0VBAMKAQQwIwIEOUngPRcNMDAwNjMw + MDYxMzExWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4M8XDTAwMDYzMDA2MTMyMFowDDAKBgNVHRUEAwoBB + DAjAgQ5SeE/Fw0wMDA2MzAwNjEzMjVaMAwwCgYDVR0VBAMKAQQwIwIEOUnh2BcNMDAwNjMwMDYxMz + MxWjAMMAoGA1UdFQQDCgEEMCMCBDlJ4mgXDTAwMDYzMDA2MTMzOVowDDAKBgNVHRUEAwoBBDAjAgQ + 5SeQvFw0wMDA2MzAwNjEzNDRaMAwwCgYDVR0VBAMKAQQwIwIEOVsGJRcNMDAwNjMwMDYxMzUwWjAM + MAoGA1UdFQQDCgEEMCMCBDlbBusXDTAwMDYzMDA2MTM1NlowDDAKBgNVHRUEAwoBBDAjAgQ5XEKPF + w0wMDA3MTMwOTAwMzhaMAwwCgYDVR0VBAMKAQQwIwIEOVxEKRcNMDAwNzEzMDkwMDQ1WjAMMAoGA1 + UdFQQDCgEEMCMCBDlcRukXDTAwMDcyNjA2MjkyN1owDDAKBgNVHRUEAwoBBDAjAgQ5fohgFw0wMDA + 3MjYwNjQ2NTFaMAwwCgYDVR0VBAMKAQQwIwIEOaNqPBcNMDAwODIzMDYwOTQxWjAMMAoGA1UdFQQD + CgEFMCMCBDlcX2QXDTAwMDgzMTA3MTM1OFowDDAKBgNVHRUEAwoBBDAjAgQ5YsflFw0wMDA5MDEwM + TQwMjRaMAwwCgYDVR0VBAMKAQQwIwIEOWGHDRcNMDAwOTA2MDcwMTE2WjAMMAoGA1UdFQQDCgEEMC + MCBDliz/4XDTAwMDkwNjA3MDcwNVowDDAKBgNVHRUEAwoBBDAjAgQ5m3S6Fw0wMDA5MjAwNzA2NTd + aMAwwCgYDVR0VBAMKAQQwIwIEOy6/hhcNMDEwNzAzMDYxMDQyWjAMMAoGA1UdFQQDCgEEMCMCBDtB + Yw4XDTAxMDcwMzA2MTkxNlowDDAKBgNVHRUEAwoBBDAjAgQ7MEG6Fw0wMTA3MTAwODA5NTNaMAwwC + gYDVR0VBAMKAQQwIwIEOy68CxcNMDEwNzExMDYxMzI5WjAMMAoGA1UdFQQDCgEEMCMCBDswSOsXDT + AxMDgwMTA0MTkyM1owDDAKBgNVHRUEAwoBBTAjAgQ7MYgeFw0wMTA4MDEwNDIwMDJaMAwwCgYDVR0 + VBAMKAQQwIwIEOzGHeBcNMDEwODAyMDI0NTM4WjAMMAoGA1UdFQQDCgEEMCMCBDsuveEXDTAxMDgz + MDA2MjIwOFowDDAKBgNVHRUEAwoBBDAjAgQ7jdxLFw0wMTA4MzAwNjQzMjRaMAwwCgYDVR0VBAMKA + QQwIwIEOy67QxcNMDExMTIxMDYyMDUzWjAMMAoGA1UdFQQDCgEEMCMCBDsDNXcXDTAyMDUxNzA4ND + Y0MlowDDAKBgNVHRUEAwoBBDAjAgQ7AzXMFw0wMjA1MTcwODQ2NTdaMAwwCgYDVR0VBAMKAQSgMjA + wMAsGA1UdFAQEAgIQoDATBgNVHSMEDDAKgAhISAKVrWisNzAMBgNVHRwBAf8EAjAAMA0GCSqGSIb3 + DQEBBQUAA4IBAQA1xNXgyrtVB5LSOc76JF+aJzf8IfJGqF04CMzbo4lDpec/LgOrTSFV223ccJzuq + cnxGUfDbXFfSWDHGnj9HLLTCkrS3clL1TPVjGXg5mFu1l6DCfcP2v4i4dlradNYDQg/AVBoJsYa3l + efSFHw8RFXNHJWwIjJA6J0CBJ/8Uq2ywr8umdndb10RLtPWp66A7wxu7OvTjt68d3LgSniQ0mIJCn + 4ooE30oF/ew0EznbxlSCNRPpB8jYYJTibGrTUVU43lr8h3URIgBkA4InOhuDv0ePMSCDSxBUhY0+G + eKo+YiXHy4SGUGLakahuq/hlGTRJJUddqFA1dNZdOUl23nVE diff --git a/tests/data/test-dn.ldif b/tests/data/test-dn.ldif new file mode 100644 index 0000000..15cc678 --- /dev/null +++ b/tests/data/test-dn.ldif @@ -0,0 +1,362 @@ +# Tree Structure +dn: dc=example,dc=com +objectClass: domain +objectClass: domainRelatedObject +dc: example +associatedDomain: example.com + +dn: ou=LDAPv3,dc=example,dc=com +objectClass: organizationalUnit +ou: LDAPv3 +description: RFC 2253 compliant DN string representation + +dn: cn=Must Succeed,ou=LDAPv3,dc=example,dc=com +objectClass: groupOfNames +cn: Must Succeed +# at least one member must be present; thus we use the entry's DN +member: cn=Must Succeed,ou=LDAPv3,dc=example,dc=com +# specific DN forms +member: +member: UID=jsmith,DC=example,DC=net +member: OU=Sales+CN=J. Smith,DC=example,DC=net +member: CN=John Smith\, III,DC=example,DC=net +member: OU=Sales\; Data\+Algorithms,DC=example,DC=net +member: CN=Before\0dAfter,DC=example,DC=net +member: CN=\23John Smith\20,DC=example,DC=net +member: CN=Lu\C4\8Di\C4\87 +member: testUUID=597ae2f6-16a6-1027-98f4-abcdefABCDEF,DC=Example +# DN forms already defined as "member" in a different string representation +seeAlso: CN=John Smith\2C III,DC=example,DC=net +seeAlso: OU=Sales\3B Data\2BAlgorithms,DC=example,DC=net +seeAlso: CN=\#John Smith\ ,DC=example,DC=net +# comment +description: "member" values contain specific DN forms; +description: "seeAlso" values contain DN forms already defined as "member", +description: but in a different string representation; +description: the following "description" values contain the "member" and +description: "seeAlso" DN string representations used above. +# list here all string representations used above in "member" and "seeAlso" +description: "" +description: UID=jsmith,DC=example,DC=net +description: OU=Sales+CN=J. Smith,DC=example,DC=net +description: CN=John Smith\, III,DC=example,DC=net +description: CN=John Smith\2C III,DC=example,DC=net +description: OU=Sales\; Data\+Algorithms,DC=example,DC=net +description: OU=Sales\3B Data\2BAlgorithms,DC=example,DC=net +description: CN=Before\0dAfter,DC=example,DC=net +description: CN=\23John Smith\20,DC=example,DC=net +description: CN=\#John Smith\ ,DC=example,DC=net +description: CN=Lu\C4\8Di\C4\87 +description: testUUID=597ae2f6-16a6-1027-98f4-abcdefABCDEF,DC=Example + +dn: cn=Should Succeed,ou=LDAPv3,dc=example,dc=com +objectClass: groupOfNames +cn: Should Succeed +member: cn=Should Succeed,ou=LDAPv3,dc=example,dc=com +member: 1.3.6.1.4.1.1466.0=#04024869,DC=example,DC=com +member: 1.1.1= +description: 1.3.6.1.4.1.1466.0=#04024869,DC=example,DC=com +description: 1.1.1= + +dn: cn=Unescaped Equals,ou=LDAPv3,dc=example,dc=com +objectClass: groupOfNames +cn: Unescaped Equals +member: cn=Unescaped Equals,ou=LDAPv3,dc=example,dc=com +member: cn=A*x=b is a linear algebra problem,ou=LDAPv3,dc=example,dc=com +description: cn=A*x=b is a linear algebra problem,ou=LDAPv3,dc=example,dc=com // unescaped EQUALS + +dn: cn=Must Fail 1,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 1 +member: uid;x-option=jsmith +description: uid;x-option=jsmith // option + +dn: cn=Must Fail 2,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 2 +member: at_tr=jsmith +description: at_tr=jsmith // invalid attribute type name + +dn: cn=Must Fail 3,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 3 +member: -attr=jsmith +description: -attr=jsmith // invalid attribute type name + +dn: cn=Must Fail 4,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 4 + +dn: cn=Must Fail 5,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 5 +member: 1..1=jsmith +description: 1..1=jsmith // invalid numeric OID + +dn: cn=Must Fail 6,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 6 +member: 1.1.=jsmith +description: 1.1.=jsmith // invalid numeric OID + +dn: cn=Must Fail 7,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 7 +member: 01.1=jsmith +description: 01.1=jsmith // invalid numeric OID + +dn: cn=Must Fail 8,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 8 +member: 1.ff=jsmith +description: 1.ff=jsmith // invalid numeric OID + +dn: cn=Must Fail 9,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 9 +member: 1.1.1=#GG +description: 1.1.1=#GG // invalid HEX form + +dn: cn=Must Fail 10,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 10 +member: 1.1.1=#000 +description: 1.1.1=#000 // invalid HEX form + +dn: cn=Must Fail 11,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 11 +member: 1.1.1=#F +description: 1.1.1=#F // invalid HEX form + +dn: cn=Must Fail 12,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 12 +member: 1.1.1=# +description: 1.1.1=# // invalid HEX form + +dn: cn=Must Fail 13,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 13 +member: UID=jsmith,,DC=example,DC=net +description: UID=jsmith,,DC=example,DC=net // extra comma + +dn: cn=Must Fail 14,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 14 +member: UID=john,smith +description: UID=john,smith // unescaped , + +dn: cn=Must Fail 15,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 15 +member: UID=john+smith +description: UID=john+smith // unescaped + + +dn: cn=Must Fail 16,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 16 +member: UID=john\?smith +description: UID=john\?smith // invalid escape of ? or unescaped \ + +dn: cn=Must Fail 17,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 17 +member: UID=john\Fsmith +description: UID=john\Fsmith // invalid HEX escape + +dn: cn=Must Fail 18,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Must Fail 18 +member: UID=john\GGsmith +description: UID=john\GGsmith // invalid HEX escape + +# String representations we should accept for compatibility with RFC1779 +dn: ou=LDAPv2,dc=example,dc=com +objectClass: organizationalUnit +ou: LDAPv2 +description: RFC 1779 compliant DN string representation + +dn: cn=May Succeed 1,ou=LDAPv2,dc=example,dc=com +objectClass: groupOfNames +cn: May Succeed 1 +member: +description: " " // space, quote characters (") are not part of the string + +dn: cn=May Succeed 2,ou=LDAPv2,dc=example,dc=com +objectClass: groupOfNames +cn: May Succeed 2 +member: OID.0.9.2342.19200300.100.1.1=jsmith +description: OID.0.9.2342.19200300.100.1.1=jsmith // invalid attribute type name + +dn: cn=May Succeed 3,ou=LDAPv2,dc=example,dc=com +objectClass: groupOfNames +cn: May Succeed 3 +member: UID=jsmith, O=example, C=US +description: UID=jsmith, O=example, C=US // spaces + +dn: cn=May Succeed 4,ou=LDAPv2,dc=example,dc=com +objectClass: groupOfNames +cn: May Succeed 4 +member: UID=jsmith;O=example;C=US +description: UID=jsmith;O=example;C=US // semi-colons + +dn: cn=May Succeed 5,ou=LDAPv2,dc=example,dc=com +objectClass: groupOfNames +cn: May Succeed 5 +member: <UID=jsmith,O=example,C=US> +description: <UID=jsmith,O=example,C=US> // brackets + +dn: cn=May Succeed 6,ou=LDAPv2,dc=example,dc=com +objectClass: groupOfNames +cn: May Succeed 6 +member: CN="John Smith",O=example,C=US +description: CN="John Smith",O=example,C=US // quotes + +# Other DN-related syntaxes +dn: ou=Related Syntaxes,dc=example,dc=com +objectClass: organizationalUnit +ou: Related Syntaxes + +# Name and Optional UID +dn: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com +objectClass: groupOfUniqueNames +cn: Name and Optional UID +uniqueMember: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com +uniqueMember: #'1'B +uniqueMember: #'0010'B +uniqueMember: dc=example,dc=com#'1000'B +uniqueMember: dc=example,dc=com#''B +description: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com // only DN portion +description: #'1'B // empty "" DN +description: #'0010'B // empty "" DN with leading '0's +description: dc=example,dc=com#'1000'B // with DN portion +description: dc=example,dc=com#''B // with DN portion + bitstring with no bits + +dn: cn=Should Fail 1,cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com +objectClass: groupOfUniqueNames +cn: Should Fail 1 +uniqueMember: #'1234'B +description: #'1234'B // illegal digits other than '0' and '1' + +dn: cn=Should Fail 2,cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com +objectClass: groupOfUniqueNames +cn: Should Fail 2 +uniqueMember: #'12ABCD'B +description: #'12ABCD'B // illegal digits and chars other than '0' and '1' + +dn: cn=Should Parse as DN,cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com +objectClass: groupOfUniqueNames +cn: Should Parse as DN +uniqueMember: dc=example,dc=com#0'B +uniqueMember: dc=example,dc=com#'0B +uniqueMember: dc=example,dc=com '0'B +description: dc=example,dc=com#0'B // malformed UID? +description: dc=example,dc=com#'0B // malformed UID? +description: dc=example,dc=com '0'B // malformed UID? + +# UID=jsmith,DC=example,DC=net [AoOn] +# 304631133011060A0992268993F22C64011916036E657431 [AoO] +# 173015060A0992268993F22C64011916076578616D706C65 +# 31163014060A0992268993F22C64010113066A736D697468 +# +# OU=Sales+CN=J. Smith,DC=example,DC=net [AoOn] +# 304F31133011060A0992268993F22C64011916036E657431 [AoO] +# 173015060A0992268993F22C64011916076578616D706C65 +# 311F300C060355040B130553616C6573300F060355040313 +# 084A2E20536D697468 +# +# CN=John Smith\, III,DC=example,DC=net [AoOn] +# 304831133011060A0992268993F22C64011916036E657431 [AoO] +# 173015060A0992268993F22C64011916076578616D706C65 +# 311830160603550403130F4A6F686E20536D6974682C2049 +# 4949 +# +# CN=John Smith\2C III,DC=example,DC=net [AoOn] +# 304831133011060A0992268993F22C64011916036E657431 [AoO] +# 173015060A0992268993F22C64011916076578616D706C65 +# 311830160603550403130F4A6F686E20536D6974682C2049 +# 4949 +# +# CN=Before\0dAfter,DC=example,DC=net [AoOn] +# 304531133011060A0992268993F22C64011916036E657431 [AoO] +# 173015060A0992268993F22C64011916076578616D706C65 +# 3115301306035504030C0C4265666F72650D4166746572 +# +# CN=\23John Smith\20,DC=example,DC=net [AoOn] +# 304531133011060A0992268993F22C64011916036E657431 [AoO] +# 173015060A0992268993F22C64011916076578616D706C65 +# 311530130603550403140C234A6F686E20536D69746820 +# +# CN=\#John Smith\ ,DC=example,DC=net [AoOn] +# 304531133011060A0992268993F22C64011916036E657431 [AoO] +# 173015060A0992268993F22C64011916076578616D706C65 +# 311530130603550403140C234A6F686E20536D69746820 +# +# FIXME: currently doesn't work +# 1.3.6.1.4.1.1466.0=#04024869,DC=example,DC=com [AoOn] +# 304031133011060A0992268993F22C64011916036E657431 [AoO] +# 173015060A0992268993F22C64011916076578616D706C65 +# 3110300E06082B060104018B3A0004024869 +# +# CN=Lu\C4\8Di\C4\87 [AoOn] +# 30123110300E06035504030C074C75C48D69C487 [AoO] +# +# FIXME: currently doesn't work +# 1.1.1= // empty value [AoO] +# 300A31083006060229011300 [AoO] +# +#Invalid DNs +# // some implementations may be liberal in what they accept +# // but should strict in what they produce. +# +# uid;x-option=jsmith // option [oOn] +# +# at_tr=jsmith // invalid attribute type name [AoOn] +# +# -attr=jsmith // invalid attribute type name [AoOn] +# +# 1..1=jsmith // invalid numeric OID [AoO] +# +# 1.1.=jsmith // invalid numeric OID [AoO] +# +# 01.1=jsmith // invalid numeric OID [oO] +# +# 1.ff=jsmith // invalid numeric OID [AoOn] +# +# 1.1.1=#GG // invalid HEX form [AoOn] +# +# 1.1.1=#000 // invalid HEX form [AoO] +# +# 1.1.1=#F // invalid HEX form [AoO] +# +# 1.1.1=# // invalid HEX form [AoO] +# +# UID=jsmith,,DC=example,DC=net // extra comma [AoOn] +# +# UID=john,smith // unescaped , [AoOn] +# +# UID=john+smith // unescaped + [AoOn] +# +# UID=john\?smith // invalid escape of ? or unescaped \ [oOn] +# +# UID=john\Fsmith // invalid hex escape [AoOn] +# +# UID=john\GGsmith // invalid hex escape [oOn] +# +#The following strings are invalid for use in LDAPv3, but were +#legal in LDAPv2 (RFC 1779). Some LDAPv3 implementations are +#liberal in accepting these but should not generate them. +# +# " " // space, quote characters (") are not part of the string +# +# OID.1.1=jsmith // invalid attribute type name +# +# UID=jsmith, O=example, C=US // spaces +# +# UID=jsmith;O=example;C=US // semi-colons +# +# <UID=jsmith,O=example,C=US> // brackets [AoOn] +# +# CN="John Smith",O=example,C=US // quotes + diff --git a/tests/data/test-emptydn1.ldif b/tests/data/test-emptydn1.ldif new file mode 100644 index 0000000..166dca5 --- /dev/null +++ b/tests/data/test-emptydn1.ldif @@ -0,0 +1,14 @@ +# dc=example,dc=com naming context +dn: dc=example,dc=com +objectClass: domain +objectClass: domainRelatedObject +dc: example +associatedDomain: example.com + +dn: cn=Geographical Naming Contexts,dc=example,dc=com +objectClass: groupOfNames +cn: Geographical Naming Contexts +member: o=Example,c=US +member: o=Example,c=UK +member: o=Esempio,c=IT + diff --git a/tests/data/test-emptydn2.ldif b/tests/data/test-emptydn2.ldif new file mode 100644 index 0000000..64c4aaf --- /dev/null +++ b/tests/data/test-emptydn2.ldif @@ -0,0 +1,39 @@ +# geographical naming contexts +dn: c=US +objectClass: country +c: US + +dn: o=Example,c=US +objectClass: organization +o: Example +o: Example, Inc. + +dn: c=UK +objectClass: country +c: UK + +dn: o=Example,c=UK +objectClass: organization +o: Example +o: Example, Ltd. + +dn: c=IT +objectClass: country +c: IT + +dn: o=Esempio,c=IT +objectClass: organization +o: Esempio +o: Esempio S.p.A. +o: Example + +dn: c=DE +objectClass: country +c: DE + +dn: o=Beispiel,c=DE +objectClass: organization +o: Beispiel +o: Beispiel GmbH +o: Example + diff --git a/tests/data/test-glued.ldif b/tests/data/test-glued.ldif new file mode 100644 index 0000000..eabb0c5 --- /dev/null +++ b/tests/data/test-glued.ldif @@ -0,0 +1,410 @@ +dn: dc=example,dc=com +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=Manager,dc=example,dc=com +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + diff --git a/tests/data/test-idassert1.ldif b/tests/data/test-idassert1.ldif new file mode 100644 index 0000000..063d6ec --- /dev/null +++ b/tests/data/test-idassert1.ldif @@ -0,0 +1,67 @@ +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example, Inc. +dc: example + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: People + +dn: uid=bjorn,ou=People,dc=example,dc=com +objectClass: inetOrgPerson +cn: Bjorn Jensen +sn: Jensen +uid: bjorn +userPassword:: Ympvcm4= +mail: bjorn@example.com +description: *** +authzFrom: dn.exact:uid=jaj,o=Example,c=US +authzFrom: dn.subtree:ou=People,dc=example,dc=it + +dn: uid=bjensen,ou=People,dc=example,dc=com +objectClass: inetOrgPerson +cn: Barbara Jensen +sn: Jensen +uid: bjensen +userPassword:: YmplbnNlbg== +mail: bjensen@example.com +description: *** + +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: cn=All,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: All +member: uid=bjorn,ou=People,dc=example,dc=com +member: uid=bjensen,ou=People,dc=example,dc=com + +dn: cn=Authorizable,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: Authorizable +member: uid=bjorn,ou=People,dc=example,dc=com + +dn: ou=Admin,dc=example,dc=com +objectClass: organizationalUnit +ou: Admin + +dn: cn=Proxy US,ou=Admin,dc=example,dc=com +objectClass: applicationProcess +objectClass: simpleSecurityObject +cn: Proxy US +userPassword:: cHJveHk= +authzTo: dn.subtree:ou=People,dc=example,dc=it + +dn: cn=Proxy IT,ou=Admin,dc=example,dc=com +objectClass: applicationProcess +objectClass: simpleSecurityObject +cn: Proxy IT +userPassword:: cHJveHk= +authzTo: dn.exact:cn=Sandbox,ou=Admin,dc=example,dc=com +authzTo: dn.exact: + +dn: cn=Sandbox,ou=Admin,dc=example,dc=com +objectClass: applicationProcess +cn: Sandbox diff --git a/tests/data/test-idassert2.ldif b/tests/data/test-idassert2.ldif new file mode 100644 index 0000000..c8f3d68 --- /dev/null +++ b/tests/data/test-idassert2.ldif @@ -0,0 +1,27 @@ +dn: dc=example,dc=it +objectClass: organization +objectClass: dcObject +o: Example +o: Esempio S.p.A. +dc: example + +dn: ou=People,dc=example,dc=it +objectClass: organizationalUnit +ou: People + +dn: uid=dots,ou=People,dc=example,dc=it +objectClass: inetOrgPerson +cn: Dorothy Stevens +sn: Stevens +uid: dots +userPassword:: ZG90cw== +mail: dots@example.it + +dn: uid=jaj,ou=People,dc=example,dc=it +objectClass: inetOrgPerson +cn: James A Jones 1 +sn: Jones +uid: jaj +userPassword:: amFq +mail: jaj@example.it + diff --git a/tests/data/test-lang.ldif b/tests/data/test-lang.ldif new file mode 100644 index 0000000..5b3b3b5 --- /dev/null +++ b/tests/data/test-lang.ldif @@ -0,0 +1,12 @@ +dn: dc=example,dc=com +dc: example +objectClass: organization +objectClass: extensibleObject +o: Example, Inc. +o;lang-zz;lang-y;lang-yy;lang-xx;lang-x;lang-z: Example, Inc. +name;lang-en-US: Billy Ray +name;lang-en-US: Billy Bob +CN;lang-en-US: Billy Ray +name: Billy Ray +SN;lang-en-US;lang-en-GB: Billy Ray +SN: Ray diff --git a/tests/data/test-ldapglue.ldif b/tests/data/test-ldapglue.ldif new file mode 100644 index 0000000..d3795cb --- /dev/null +++ b/tests/data/test-ldapglue.ldif @@ -0,0 +1,5 @@ +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example, Inc. +dc: example diff --git a/tests/data/test-ldapgluegroups.ldif b/tests/data/test-ldapgluegroups.ldif new file mode 100644 index 0000000..3d8254e --- /dev/null +++ b/tests/data/test-ldapgluegroups.ldif @@ -0,0 +1,23 @@ +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: cn=All,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: All +member: uid=bjorn,ou=People,dc=example,dc=com +member: uid=bjensen,ou=People,dc=example,dc=com + +dn: cn=ITD,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +cn: ITD +member: uid=bjorn,ou=People,dc=example,dc=com + +dn: uid=proxy,ou=Groups,dc=example,dc=com +objectClass: inetOrgPerson +cn: Proxy +sn: Proxy +uid: proxy +userPassword:: cHJveHk= +authzTo: dn:* + diff --git a/tests/data/test-ldapgluepeople.ldif b/tests/data/test-ldapgluepeople.ldif new file mode 100644 index 0000000..a8d3547 --- /dev/null +++ b/tests/data/test-ldapgluepeople.ldif @@ -0,0 +1,28 @@ +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: People + +dn: uid=bjorn,ou=People,dc=example,dc=com +objectClass: inetOrgPerson +cn: Bjorn Jensen +sn: Jensen +uid: bjorn +userPassword:: Ympvcm4= +mail: bjorn@example.com + +dn: uid=bjensen,ou=People,dc=example,dc=com +objectClass: inetOrgPerson +cn: Barbara Jensen +sn: Jensen +uid: bjensen +userPassword:: YmplbnNlbg== +mail: bjensen@example.com + +dn: uid=proxy,ou=People,dc=example,dc=com +objectClass: inetOrgPerson +cn: Proxy +sn: Proxy +uid: proxy +userPassword:: cHJveHk= +authzTo: dn:* + diff --git a/tests/data/test-limits.ldif b/tests/data/test-limits.ldif new file mode 100644 index 0000000..cd4aaec --- /dev/null +++ b/tests/data/test-limits.ldif @@ -0,0 +1,137 @@ +#LEAD COMMENT +dn: dc=example,dc=com +#EMBEDDED COMMENT +objectclass: top +objectclass: organization +objectclass: domainRelatedObject +objectclass: dcobject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +description: Some example company at Anytown in Michigan +postaladdress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephonenumber: +1 313 555 1817 +associateddomain: example.com + +dn: ou=People,dc=example,dc=com +objectclass: organizationalUnit +ou: People + +dn: cn=Unlimited User,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Unlimited User +sn: User +uid: unlimited +userpassword:: c2VjcmV0 + +dn: cn=Soft Limited User,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Soft Limited User +sn: User +uid: softlimited +userpassword:: c2VjcmV0 + +dn: cn=Hard Limited User,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Hard Limited User +sn: User +uid: hardlimited +userpassword:: c2VjcmV0 + +dn: cn=Unchecked Limited User,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Unchecked Limited User +sn: User +uid: uncheckedlimited +userpassword:: c2VjcmV0 + +dn: cn=Other User,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Other User +sn: User +uid: other +userpassword:: c2VjcmV0 + +dn: cn=Foo User,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Foo User +sn: User +uid: foo +userpassword:: c2VjcmV0 + +dn: cn=Bar User,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Bar User +sn: User +uid: bar +userpassword:: c2VjcmV0 + +dn: cn=Unchecked Limited User 2,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Unchecked Limited User 2 +sn: User 2 +uid: uncheckedlimited2 +userpassword:: c2VjcmV0 + +dn: ou=Groups,dc=example,dc=com +objectclass: organizationalUnit +ou: Groups + +dn: cn=Unchecked Limited Users,ou=Groups,dc=example,dc=com +objectClass: groupOfNames +objectClass: simpleSecurityObject +cn: Unchecked Limited Users +userpassword:: c2VjcmV0 +member: cn=Unchecked Limited User 2,ou=People,dc=example,dc=com + +dn: ou=Admin,dc=example,dc=com +objectclass: organizationalUnit +ou: Admin + +dn: cn=Unchecked Limited User 3,ou=Admin,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Unchecked Limited User 3 +sn: User 3 +uid: uncheckedlimited3 +userpassword:: c2VjcmV0 + +dn: cn=Special User,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Special User +sn: User +uid: special +userpassword:: c2VjcmV0 + +dn: ou=Paged Results Users,dc=example,dc=com +objectclass: organizationalUnit +ou: Paged Results Users + +dn: cn=Unlimited User,ou=Paged Results Users,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Unlimited User +sn: User +uid: unlimited +userpassword:: c2VjcmV0 + +dn: cn=Page Size Limited User,ou=Paged Results Users,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Page Size Limited User +sn: User +uid: pagesizelimited +userpassword:: c2VjcmV0 + +dn: cn=Paged Results Disabled User,ou=Paged Results Users,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Paged Results Disabled User +sn: User +uid: pagedresultsdisabled +userpassword:: c2VjcmV0 + +dn: cn=Paged Results Limited User,ou=Paged Results Users,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Paged Results Limited User +sn: User +uid: pagedresultslimited +userpassword:: c2VjcmV0 + diff --git a/tests/data/test-meta.ldif b/tests/data/test-meta.ldif new file mode 100644 index 0000000..ba9e9e8 --- /dev/null +++ b/tests/data/test-meta.ldif @@ -0,0 +1,25 @@ +dn: ou=Meta,dc=example,dc=com +objectClass: organizationalUnit +ou: Meta +seeAlso: dc=OpenLDAP,dc=org + +dn: cn=John Belushi,ou=Meta,dc=example,dc=com +objectClass: inetOrgPerson +cn: John Belushi +sn: Belushi +userPassword: jack +description: Joliet Jack Blues + +dn: cn=Dan Aykroyd,ou=Meta,dc=example,dc=com +objectClass: inetOrgPerson +cn: Dan Aykroyd +sn: Aykroyd +userPassword: elwood +description: Elwood Blues + +dn: cn=Somewhere,ou=Meta,dc=example,dc=com +objectClass: referral +objectClass: extensibleObject +cn: Somewhere +ref: ldap://localhost:9016 + diff --git a/tests/data/test-ordered-cp.ldif b/tests/data/test-ordered-cp.ldif new file mode 100644 index 0000000..5561174 --- /dev/null +++ b/tests/data/test-ordered-cp.ldif @@ -0,0 +1,16 @@ +#LEAD COMMENT +dn: dc=example,dc=com +dc: example +#EMBEDDED COMMENT +objectclass: organization +objectclass: domainRelatedObject +objectclass: dcobject +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postaladdress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephonenumber: +1 313 555 1817 +associateddomain: example.com diff --git a/tests/data/test-ordered-nocp.ldif b/tests/data/test-ordered-nocp.ldif new file mode 100644 index 0000000..039d941 --- /dev/null +++ b/tests/data/test-ordered-nocp.ldif @@ -0,0 +1,402 @@ +#LEAD COMMENT +dn: ou=People,dc=example,dc=com +#EMBEDDED COMMENT +objectclass: organizationalUnit +ou: People + +dn: ou=Groups,dc=example,dc=com +objectclass: organizationalUnit +ou: Groups + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: organizationalUnit +ou: Alumni Association + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectclass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectclass: groupofnames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectclass: groupofnames + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectclass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postaladdress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +userpassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homepostaladdress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homephone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimiletelephonenumber: +1 313 555 2274 +telephonenumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectclass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +userpassword:: Ympvcm4= +homepostaladdress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postaladdress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homephone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimiletelephonenumber: +1 313 555 2177 +telephonenumber: +1 313 555 0355 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Lemonade +homepostaladdress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimiletelephonenumber: +1 313 555 3223 +telephonenumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homephone: +1 313 555 0454 + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectclass: groupofuniquenames +uniquemember: cn=Manager,dc=example,dc=com +uniquemember: cn=Bjorn Jensen,OU=Information Technology Division,ou=People,dc= + example,dc=com +uniquemember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniquemember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +userpassword:: amFq +homepostaladdress: 3882 Beverly Rd. $ Anytown, MI 48105 +homephone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimiletelephonenumber: +1 313 555 4332 +telephonenumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +objectclass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 933 Brooks $ Anytown, MI 48104 +homephone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postaladdress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimiletelephonenumber: +1 313 555 8688 +telephonenumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homephone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimiletelephonenumber: +1 313 555 2311 +telephonenumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homepostaladdress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homephone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimiletelephonenumber: +1 313 555 2756 +telephonenumber: +1 313 555 8232 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postaladdress: ITD $ 535 W. William $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homephone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimiletelephonenumber: +1 313 555 4544 +telephonenumber: +1 313 555 9394 + +dn: cn=Manager,dc=example,dc=com +objectclass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userpassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 199 Outer Drive $ Ypsilanti, MI 48198 +homephone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimiletelephonenumber: +1 313 555 7762 +telephonenumber: +1 313 555 4177 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homephone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimiletelephonenumber: +1 313 555 9700 +telephonenumber: +1 313 555 5331 + +dn: dc=testdomain1,dc=example,dc=com +objectclass: domain +dc: testdomain1 +description: Example, Inc. modify+modrdn test domain + +dn: dc=testdomain2,dc=example,dc=com +objectclass: domain +dc: testdomain2 +description: Example, Inc. modify then modrdn test domain diff --git a/tests/data/test-ordered.ldif b/tests/data/test-ordered.ldif new file mode 100644 index 0000000..733cf2b --- /dev/null +++ b/tests/data/test-ordered.ldif @@ -0,0 +1,411 @@ +#LEAD COMMENT +dn: dc=example,dc=com +#EMBEDDED COMMENT +objectclass: top +objectclass: organization +objectclass: domainRelatedObject +objectclass: dcobject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postaladdress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephonenumber: +1 313 555 1817 +associateddomain: example.com + +dn: ou=People,dc=example,dc=com +objectclass: organizationalUnit +objectclass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: ou=Groups,dc=example,dc=com +objectclass: organizationalUnit +ou: Groups + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: organizationalUnit +ou: Alumni Association + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectclass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectclass: groupofnames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectclass: groupofnames + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectclass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postaladdress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +userpassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homepostaladdress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homephone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimiletelephonenumber: +1 313 555 2274 +telephonenumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectclass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +userpassword:: Ympvcm4= +homepostaladdress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postaladdress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homephone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimiletelephonenumber: +1 313 555 2177 +telephonenumber: +1 313 555 0355 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Lemonade +homepostaladdress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimiletelephonenumber: +1 313 555 3223 +telephonenumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homephone: +1 313 555 0454 + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectclass: groupofuniquenames +uniquemember: cn=Manager,dc=example,dc=com +uniquemember: cn=Bjorn Jensen,OU=Information Technology Division,ou=People,dc= + example,dc=com +uniquemember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniquemember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +userpassword:: amFq +homepostaladdress: 3882 Beverly Rd. $ Anytown, MI 48105 +homephone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimiletelephonenumber: +1 313 555 4332 +telephonenumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +objectclass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 933 Brooks $ Anytown, MI 48104 +homephone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postaladdress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimiletelephonenumber: +1 313 555 8688 +telephonenumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homephone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimiletelephonenumber: +1 313 555 2311 +telephonenumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homepostaladdress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homephone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimiletelephonenumber: +1 313 555 2756 +telephonenumber: +1 313 555 8232 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postaladdress: ITD $ 535 W. William $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homephone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimiletelephonenumber: +1 313 555 4544 +telephonenumber: +1 313 555 9394 + +dn: cn=Manager,dc=example,dc=com +objectclass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userpassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 199 Outer Drive $ Ypsilanti, MI 48198 +homephone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimiletelephonenumber: +1 313 555 7762 +telephonenumber: +1 313 555 4177 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homephone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimiletelephonenumber: +1 313 555 9700 +telephonenumber: +1 313 555 5331 diff --git a/tests/data/test-refint.ldif b/tests/data/test-refint.ldif new file mode 100755 index 0000000..df35bef --- /dev/null +++ b/tests/data/test-refint.ldif @@ -0,0 +1,115 @@ +# base + +dn: o=refint +objectClass: top +objectClass: organization +o: refint +description: referential integrity test database + +# container + +dn: ou=users,o=refint +objectClass: top +objectClass: organizationalUnit +ou: users +description: container for test users + +# secretary +dn: uid=alice,ou=users,o=refint +objectClass: inetOrgPerson +uid: alice +sn: typist +cn: alice +businessCategory: test +carLicense: ZOOM +departmentNumber: 5151 +displayName: George +employeeNumber: 6363 +employeeType: contractor +givenName: Alice the Typist + +# manager +dn: uid=george,ou=users,o=refint +objectClass: inetOrgPerson +uid: george +sn: jungle +cn: george +businessCategory: test +carLicense: SAMPLE +departmentNumber: 6969 +displayName: George +employeeNumber: 5150 +employeeType: contractor +givenName: Big G + +dn: uid=dave,ou=users,o=refint +objectClass: inetOrgPerson +uid: dave +sn: nothere +cn: dave +secretary: uid=george,ou=users,o=refint +businessCategory: otest +carLicense: ALGAE +departmentNumber: 42 +displayName: Dave +employeeNumber: 73 +employeeType: contractor +givenName: Dave + +dn: uid=bob,ou=users,o=refint +objectClass: inetOrgPerson +uid: bob +sn: bitchen +cn: bob +manager: uid=george,ou=users,o=refint +businessCategory: rtest +carLicense: SL49152 +departmentNumber: 42 +displayName: Bob +employeeNumber: 38 +employeeType: contractor +givenName: Bob + +dn: uid=bill,ou=users,o=refint +objectClass: inetOrgPerson +uid: bill +sn: problem +cn: bill +businessCategory: otest +manager: uid=george,ou=users,o=refint +secretary: uid=alice,ou=users,o=refint +carLicense: DRV818 +departmentNumber: 42 +displayName: Bill +employeeNumber: 69 +employeeType: contractor +givenName: Bill + +dn: uid=jorge,ou=users,o=refint +objectClass: inetOrgPerson +uid: jorge +sn: burrito +cn: jorge +manager: uid=theman,ou=users,o=refint +secretary: uid=alice,ou=users,o=refint +businessCategory: rtest +carLicense: CLA511 +departmentNumber: 42 +displayName: Jorge +employeeNumber: 93 +employeeType: contractor +givenName: Jorge + +dn: uid=richard,ou=users,o=refint +objectClass: inetOrgPerson +uid: richard +sn: cranium +cn: richard +manager: uid=theman,ou=users,o=refint +businessCategory: rtest +carLicense: DHD722 +departmentNumber: 42 +displayName: Richard +employeeNumber: 114 +employeeType: contractor +givenName: Richard diff --git a/tests/data/test-reordered.ldif b/tests/data/test-reordered.ldif new file mode 100644 index 0000000..76e9177 --- /dev/null +++ b/tests/data/test-reordered.ldif @@ -0,0 +1,55 @@ +dn: ou=test,dc=example,dc=com +objectClass: organizationalUnit +ou: test + +dn: ou=Policies,ou=test,dc=example,dc=com +objectClass: organizationalUnit +ou: Policies + +dn: ou=slapo-ppolicy,ou=Policies,ou=test,dc=example,dc=com +objectClass: organizationalUnit +ou: slapo-ppolicy +ou: Password Policies + +dn: ou=Users,ou=test,dc=example,dc=com +objectClass: organizationalUnit +ou: Users + +dn: uid=michael,ou=Users,ou=test,dc=example,dc=com +uid: michael +objectClass: account +objectClass: simpleSecurityObject +userPassword:: dGVzdHNlY3JldA== + +dn: ou=Systemkonten,ou=test,dc=example,dc=com +objectClass: organizationalUnit +ou: Systemkonten + +dn: cn=slapd-1,ou=Systemkonten,ou=test,dc=example,dc=com +cn: slapd-1 +objectClass: applicationProcess +objectClass: simpleSecurityObject +userPassword:: cHdfc2xhcGQx + +dn: cn=slapd-2,ou=Systemkonten,ou=test,dc=example,dc=com +cn: slapd-2 +objectClass: applicationProcess +objectClass: simpleSecurityObject +userPassword:: cHdfc2xhcGQy + +dn: ou=Groups,ou=test,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: cn=Admins,ou=Groups,ou=test,dc=example,dc=com +cn: Admins +cn: Password Admins +objectClass: groupOfNames +member: uid=michael,ou=Users,ou=test,dc=example,dc=com + +dn: cn=Replicas,ou=Groups,ou=test,dc=example,dc=com +member: cn=slapd-1,ou=Systemkonten,ou=test,dc=example,dc=com +member: cn=slapd-2,ou=Systemkonten,ou=test,dc=example,dc=com +cn: Replicas +objectClass: groupOfNames + diff --git a/tests/data/test-translucent-add.ldif b/tests/data/test-translucent-add.ldif new file mode 100644 index 0000000..fd6acc7 --- /dev/null +++ b/tests/data/test-translucent-add.ldif @@ -0,0 +1,10 @@ +dn: uid=danger,ou=users,o=translucent +objectClass: inetOrgPerson +uid: danger +sn: danger +cn: henry +businessCategory: frontend-override +carLicense: LIVID +employeeType: special +departmentNumber: 9999999 +roomNumber: 41L-535 diff --git a/tests/data/test-translucent-config.ldif b/tests/data/test-translucent-config.ldif new file mode 100644 index 0000000..9285176 --- /dev/null +++ b/tests/data/test-translucent-config.ldif @@ -0,0 +1,26 @@ +# toplevel + +dn: o=translucent +objectClass: top +objectClass: organization +o: translucent +description: backend database root + +# backend OU + +dn: ou=users,o=translucent +objectClass: top +objectClass: organizationalUnit +ou: users +description: backend user container root + +# bind user for frontend connection + +dn: uid=binder,o=translucent +objectClass: inetOrgPerson +uid: binder +sn: test +cn: binder +businessCategory: binder-test-user +displayName: Binder Test User +userPassword: bindtest diff --git a/tests/data/test-translucent-data.ldif b/tests/data/test-translucent-data.ldif new file mode 100644 index 0000000..2def65c --- /dev/null +++ b/tests/data/test-translucent-data.ldif @@ -0,0 +1,43 @@ +# typical user +dn: uid=danger,ou=users,o=translucent +objectClass: inetOrgPerson +uid: danger +sn: warning +cn: danger +businessCategory: backend-opaque +initials: dw +carLicense: BACK +departmentNumber: 7341 +displayName: Warning +employeeNumber: 5150 +employeeType: contractor +givenName: Danger Warning + +# another example +dn: uid=example,ou=users,o=translucent +objectClass: inetOrgPerson +uid: example +sn: user +cn: example +businessCategory: backend-opaque +carLicense: SAMPLE +departmentNumber: 7341 +displayName: Example +employeeNumber: 5150 +employeeType: fulltime +givenName: Example User + +# +dn: uid=fred,ou=users,o=translucent +objectClass: inetOrgPerson +uid: fred +sn: said +cn: said +businessCategory: backend-opaque +carLicense: RIGHT +departmentNumber: 9919 +displayName: Right Said Fred +employeeNumber: 44199 +employeeType: fulltime +givenName: Right Said + diff --git a/tests/data/test-translucent-merged.ldif b/tests/data/test-translucent-merged.ldif new file mode 100644 index 0000000..583734a --- /dev/null +++ b/tests/data/test-translucent-merged.ldif @@ -0,0 +1,41 @@ +dn: uid=danger,ou=users,o=translucent +objectClass: inetOrgPerson +uid: danger +sn: danger +cn: henry +businessCategory: frontend-override +initials: dw +carLicense: LIVID +departmentNumber: 9999999 +displayName: Warning +employeeNumber: 5150 +employeeType: special +givenName: Danger Warning +roomNumber: 41L-535 + +dn: uid=example,ou=users,o=translucent +objectClass: inetOrgPerson +uid: example +sn: user +cn: example +businessCategory: backend-opaque +carLicense: SAMPLE +departmentNumber: 7341 +displayName: Example +employeeNumber: 5150 +employeeType: fulltime +givenName: Example User + +dn: uid=fred,ou=users,o=translucent +objectClass: inetOrgPerson +uid: fred +sn: said +cn: said +businessCategory: backend-opaque +carLicense: RIGHT +departmentNumber: 9919 +displayName: Right Said Fred +employeeNumber: 44199 +employeeType: fulltime +givenName: Right Said + diff --git a/tests/data/test-unique.ldif b/tests/data/test-unique.ldif new file mode 100755 index 0000000..9e594ff --- /dev/null +++ b/tests/data/test-unique.ldif @@ -0,0 +1,29 @@ +# base + +dn: o=unique +objectClass: top +objectClass: organization +o: unique +description: unique test database + +# container + +dn: ou=users,o=unique +objectClass: top +objectClass: organizationalUnit +ou: users +description: container for test users + +# manager +dn: uid=george,ou=users,o=unique +objectClass: inetOrgPerson +uid: george +sn: jungle +cn: george +businessCategory: test +carLicense: SAMPLE +departmentNumber: 6969 +displayName: George +employeeNumber: 5150 +employeeType: contractor +givenName: Big G diff --git a/tests/data/test-unordered.ldif b/tests/data/test-unordered.ldif new file mode 100644 index 0000000..bdccea2 --- /dev/null +++ b/tests/data/test-unordered.ldif @@ -0,0 +1,55 @@ +dn: ou=test,dc=example,dc=com +objectClass: organizationalUnit +ou: test + +dn: ou=Policies,ou=test,dc=example,dc=com +objectClass: organizationalUnit +ou: Policies + +dn: ou=slapo-ppolicy,ou=Policies,ou=test,dc=example,dc=com +objectClass: organizationalUnit +ou: slapo-ppolicy +ou: Password Policies + +dn: uid=michael,ou=Users,ou=test,dc=example,dc=com +uid: michael +objectClass: account +objectClass: simpleSecurityObject +userPassword: testsecret + +dn: ou=Users,ou=test,dc=example,dc=com +objectClass: organizationalUnit +ou: Users + +dn: cn=slapd-1,ou=Systemkonten,ou=test,dc=example,dc=com +cn: slapd-1 +objectClass: applicationProcess +objectClass: simpleSecurityObject +userPassword: pw_slapd1 + +dn: cn=slapd-2,ou=Systemkonten,ou=test,dc=example,dc=com +cn: slapd-2 +objectClass: applicationProcess +objectClass: simpleSecurityObject +userPassword: pw_slapd2 + +dn: ou=Systemkonten,ou=test,dc=example,dc=com +objectClass: organizationalUnit +ou: Systemkonten + +dn: ou=Groups,ou=test,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: cn=Admins,ou=Groups,ou=test,dc=example,dc=com +cn: Admins +cn: Password Admins +objectClass: groupOfNames +member: uid=michael,ou=Users,ou=test,dc=example,dc=com + +dn: cn=Replicas,ou=Groups,ou=test,dc=example,dc=com +member: cn=slapd-1,ou=Systemkonten,ou=test,dc=example,dc=com +member: cn=slapd-2,ou=Systemkonten,ou=test,dc=example,dc=com +cn: Replicas +objectClass: groupOfNames + diff --git a/tests/data/test-valsort.ldif b/tests/data/test-valsort.ldif new file mode 100755 index 0000000..c2c7f3e --- /dev/null +++ b/tests/data/test-valsort.ldif @@ -0,0 +1,49 @@ +# base + +dn: o=valsort +objectClass: top +objectClass: organization +o: valsort +description: valsort test database + +# container + +dn: ou=users,o=valsort +objectClass: top +objectClass: organizationalUnit +ou: users +description: container for test valsort users + +# manager +dn: uid=george,ou=users,o=valsort +objectClass: OpenLDAPperson +uid: george +sn: jungle +sn: alpha +sn: zib +sn: tree +cn: george +businessCategory: test +carLicense: SAMPLE +departmentNumber: 1 +departmentNumber: 5 +departmentNumber: 3 +departmentNumber: 10 +departmentNumber: 72 +departmentNumber: 37 +departmentNumber: 46 +displayName: George +employeeNumber: 5150 +employeeType: {1}contractor +employeeType: {1}staff +employeeType: {1}anarchist +givenName: Big G +ou: {1}Chemistry +ou: {8}Academia +ou: {3}Hum Bio +ou: {2}Computer Science +mailPreferenceOption: 3 +mailPreferenceOption: 87 +mailPreferenceOption: 22 +mailPreferenceOption: 1 +mailPreferenceOption: 66 diff --git a/tests/data/test-whoami.ldif b/tests/data/test-whoami.ldif new file mode 100644 index 0000000..6a70ab4 --- /dev/null +++ b/tests/data/test-whoami.ldif @@ -0,0 +1,468 @@ +#LEAD COMMENT +dn: dc=example,dc=com +#EMBEDDED COMMENT +objectclass: top +objectclass: organization +objectclass: domainRelatedObject +objectclass: dcobject +objectClass: simpleSecurityObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postaladdress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephonenumber: +1 313 555 1817 +associateddomain: example.com +userpassword:: ZXhhbXBsZQ== +authzTo: dn: + +dn: ou=People,dc=example,dc=com +objectclass: organizationalUnit +objectclass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: ou=Groups,dc=example,dc=com +objectclass: organizationalUnit +ou: Groups + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: organizationalUnit +ou: Alumni Association + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectclass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectclass: groupofnames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectclass: groupofnames + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectclass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postaladdress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +userpassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homepostaladdress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homephone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimiletelephonenumber: +1 313 555 2274 +telephonenumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectclass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +userpassword:: Ympvcm4= +homepostaladdress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postaladdress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homephone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimiletelephonenumber: +1 313 555 2177 +telephonenumber: +1 313 555 0355 +authzFrom: dn.exact:cn=Barbara Jensen,ou=Information Technology Division,ou=Pe + ople,dc=example,dc=com +authzFrom: u:melliot +authzFrom: ldap:///ou=People,dc=example,dc=com??sub?(|(cn=Jane Doe) + (cn=Jennifer Smith)) +authzFrom: group/groupOfUniqueNames/uniqueMember:cn=ITD Staff,ou=Groups,dc=exa + mple,dc=com +authzFrom: dn.onelevel:ou=Information Technology Division,ou=People,dc=example,dc=com +authzFrom: dn.regex:^cn=Dorothy.*dc=example,dc=com$ +authzFrom: dn.children:ou=Alumni Association,ou=People,dc=example + ,dc=com +authzFrom: dn.subtree:ou=Groups,dc=example,dc=com +authzTo: dn.exact:cn=Barbara Jensen,ou=Information Technology Division,ou=Peop + le,dc=example,dc=com +authzTo: u:melliot +authzTo: ldap:///ou=People,dc=example,dc=com??sub?cn=Jane Doe +authzTo: group/groupOfUniqueNames/uniqueMember:cn=ITD Staff,ou=Groups,dc=examp + le,dc=com +authzTo: dn.onelevel:ou=Information Technology Division,ou=People,dc=example,dc=com +authzTo: dn.regex:^cn=Dorothy.*dc=example,dc=com$ +authzTo: dn.children:ou=Alumni Association,ou=People,dc=example,dc=com +authzTo: dn.subtree:ou=Groups,dc=example,dc=com + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Lemonade +homepostaladdress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimiletelephonenumber: +1 313 555 3223 +telephonenumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homephone: +1 313 555 0454 +userpassword:: ZG90cw== + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectclass: groupofuniquenames +objectclass: simplesecurityobject +uniquemember: cn=Manager,dc=example,dc=com +uniquemember: cn=Bjorn Jensen,OU=Information Technology Division,ou=People,dc= + example,dc=com +uniquemember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniquemember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +userpassword:: SVRE + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +userpassword:: amFq +homepostaladdress: 3882 Beverly Rd. $ Anytown, MI 48105 +homephone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimiletelephonenumber: +1 313 555 4332 +telephonenumber: +1 313 555 0895 +userpassword:: amFq + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +objectclass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 933 Brooks $ Anytown, MI 48104 +homephone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postaladdress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimiletelephonenumber: +1 313 555 8688 +telephonenumber: +1 313 555 7334 +userpassword:: ampvbmVz + +dn: cn=No One,ou=Information Technology Division,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: No One +sn: One +uid: noone +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +userpassword:: bm9vbmU= + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homephone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimiletelephonenumber: +1 313 555 2311 +telephonenumber: +1 313 555 4774 +userpassword:: amRvZQ== + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homepostaladdress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homephone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimiletelephonenumber: +1 313 555 2756 +telephonenumber: +1 313 555 8232 +userpassword:: amVu + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postaladdress: ITD $ 535 W. William $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homephone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimiletelephonenumber: +1 313 555 4544 +telephonenumber: +1 313 555 9394 +userpassword:: am9obmQ= + +dn: cn=Manager,dc=example,dc=com +objectclass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userpassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 199 Outer Drive $ Ypsilanti, MI 48198 +homephone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimiletelephonenumber: +1 313 555 7762 +telephonenumber: +1 313 555 4177 +userpassword:: bWVsbGlvdA== + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postaladdress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +homepostaladdress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homephone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimiletelephonenumber: +1 313 555 9700 +telephonenumber: +1 313 555 5331 + +dn: cn=Must Fail,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Must Fail +sn: Fail +uid: fail +userpassword:: ZmFpbA== + +dn: cn=Should Fail,dc=example,dc=com +objectclass: OpenLDAPperson +cn: Should Fail +sn: Fail +uid: fail +userpassword:: ZmFpbA== + diff --git a/tests/data/test.ldif b/tests/data/test.ldif new file mode 100644 index 0000000..e7939c0 --- /dev/null +++ b/tests/data/test.ldif @@ -0,0 +1,412 @@ +#LEAD COMMENT +dn: cn=All Staff,ou=Groups,dc=example,dc=com +#EMBEDDED COMMENT +member: cn=Manager,dc=example,dc=com +member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc + =com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=exa + mple,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=exampl + e,dc=com +owner: cn=Manager,dc=example,dc=com +cn: All Staff +description: Everyone in the sample data +objectClass: groupOfNames + +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All Alumni Assoc Staff +cn: Alumni Assoc Staff +objectClass: groupOfNames + +dn: ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Alumni Association + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +objectClass: OpenLDAPperson +cn: Barbara Jensen +cn: Babs Jensen +sn:: IEplbnNlbiA= +uid: bjensen +title: Mythical Manager, Research Systems +postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt + own, MI 48103-4943 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: YmplbnNlbg== +mail: bjensen@mailgw.example.com +homePostalAddress: 123 Wesley $ Anytown, MI 48103 +description: Mythical manager of the rsdd unix project +drink: water +homePhone: +1 313 555 2333 +pager: +1 313 555 3233 +facsimileTelephoneNumber: +1 313 555 2274 +telephoneNumber: +1 313 555 9022 + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +objectClass: OpenLDAPperson +cn: Bjorn Jensen +cn: Biiff Jensen +sn: Jensen +uid: bjorn +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: Ympvcm4= +homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999 +drink: Iced Tea +description: Hiker, biker +title: Director, Embedded Systems +postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103 +mail: bjorn@mailgw.example.com +homePhone: +1 313 555 5444 +pager: +1 313 555 4474 +facsimileTelephoneNumber: +1 313 555 2177 +telephoneNumber: +1 313 555 0355 + +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Dorothy Stevens +cn: Dot Stevens +sn: Stevens +uid: dots +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Lemonade +homePostalAddress: 377 White St. Apt. 3 $ Anytown, MI 48104 +description: Very tall +facsimileTelephoneNumber: +1 313 555 3223 +telephoneNumber: +1 313 555 3664 +mail: dots@mail.alumni.example.com +homePhone: +1 313 555 0454 + +dn: dc=example,dc=com +objectClass: top +objectClass: organization +objectClass: domainRelatedObject +objectClass: dcObject +dc: example +l: Anytown, Michigan +st: Michigan +o: Example, Inc. +o: EX +o: Ex. +description: The Example, Inc. at Anytown +postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US +telephoneNumber: +1 313 555 1817 +associatedDomain: example.com + +dn: ou=Groups,dc=example,dc=com +objectClass: organizationalUnit +ou: Groups + +dn: ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: organizationalUnit +ou: Information Technology Division +description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD + woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi + 01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4 + LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP + Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC + gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU + MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4 + LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L + Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD + gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw + 4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo + PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P + CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD + woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw + oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo + PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O + CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC + wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg + 8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4 + PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K + Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD + g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw + oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs + OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P + Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC + gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg + 8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo + LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF + Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD + gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw + 4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs + KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC + w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt + sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4 + PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P + Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC + gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN + DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo + PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O + DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD + woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw + 4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj + Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD + woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw + oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4 + PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf + XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw + oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM + ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO + DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD + woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg + 8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0 + 7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK + Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw + oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs + OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L + CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+ + S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw + 4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo + vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK + Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC + w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw + oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo + PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK + AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC + g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw + oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM + ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK + Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD + gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg + 8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo + LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP + DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC + gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw + 4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs + KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL + Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA + w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg + sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo + LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO + CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD + w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw + oLDg8KCw4LCgzBBMUFhMUFrMUE= +description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC + wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg + 8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo + zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O + DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD + w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg + 8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo + PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O + DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD + gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw + 4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo + PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK + BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD + w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw + 4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8 + KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL + Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx + w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw + 4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo + LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D + Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD + woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg + sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4 + LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK + Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL + RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg + 8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8 + OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP + Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD + gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw + oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8 + KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P + Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD + woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw + 4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs + KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L + ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC + w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta + MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs + KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L + Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD + gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw + p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4 + LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L + CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD + gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw + 4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4 + PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL + Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC + i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg + 8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8 + ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw== + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +owner: cn=Manager,dc=example,dc=com +description: All ITD Staff +cn: ITD Staff +objectClass: groupOfUniqueNames +uniqueMember: cn=Manager,dc=example,dc=com +uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc= + example,dc=com +uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People, + dc=example,dc=com +uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam + ple,dc=com + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 1 +cn: James Jones +cn: Jim Jones +sn: Jones +uid: jaj +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +userPassword:: amFq +homePostalAddress: 3882 Beverly Rd. $ Anytown, MI 48105 +homePhone: +1 313 555 4772 +description: Outstanding +title: Mad Cow Researcher, UM Alumni Association +pager: +1 313 555 3923 +mail: jaj@mail.alumni.example.com +facsimileTelephoneNumber: +1 313 555 4332 +telephoneNumber: +1 313 555 0895 + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example + ,dc=com +objectClass: OpenLDAPperson +cn: James A Jones 2 +cn: James Jones +cn: Jim Jones +sn: Doe +uid: jjones +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 933 Brooks $ Anytown, MI 48104 +homePhone: +1 313 555 8838 +title: Senior Manager, Information Technology Division +description: Not around very much +mail: jjones@mailgw.example.com +postalAddress: Info Tech Division $ 535 W William $ Anytown, MI 48103 +pager: +1 313 555 2833 +facsimileTelephoneNumber: +1 313 555 8688 +telephoneNumber: +1 313 555 7334 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jane Doe +cn: Jane Alverson +sn: Doe +uid: jdoe +title: Programmer Analyst, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +drink: diet coke +description: Enthusiastic +mail: jdoe@woof.net +homePhone: +1 313 555 5445 +pager: +1 313 555 1220 +facsimileTelephoneNumber: +1 313 555 2311 +telephoneNumber: +1 313 555 4774 + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Jennifer Smith +cn: Jen Smith +sn: Smith +uid: jen +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Sam Adams +homePostalAddress: 1000 Maple #44 $ Anytown, MI 48103 +title: Telemarketer, UM Alumni Association +mail: jen@mail.alumni.example.com +homePhone: +1 313 555 2333 +pager: +1 313 555 6442 +facsimileTelephoneNumber: +1 313 555 2756 +telephoneNumber: +1 313 555 8232 + +dn: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: John Doe +cn: Jonathon Doe +sn: Doe +uid: johnd +postalAddress: ITD $ 535 W. William $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 912 East Bllvd $ Anytown, MI 48104 +title: System Administrator, Information Technology Division +description: overworked! +mail: johnd@mailgw.example.com +homePhone: +1 313 555 3774 +pager: +1 313 555 6573 +facsimileTelephoneNumber: +1 313 555 4544 +telephoneNumber: +1 313 555 9394 + +dn: cn=Manager,dc=example,dc=com +objectClass: person +cn: Manager +cn: Directory Manager +cn: Dir Man +sn: Manager +description: Manager of the directory +userPassword:: c2VjcmV0 + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Mark Elliot +cn: Mark A Elliot +sn: Elliot +uid: melliot +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198 +homePhone: +1 313 555 0388 +drink: Gasoline +title: Director, UM Alumni Association +mail: melliot@mail.alumni.example.com +pager: +1 313 555 7671 +facsimileTelephoneNumber: +1 313 555 7762 +telephoneNumber: +1 313 555 4177 + +dn: ou=People,dc=example,dc=com +objectClass: organizationalUnit +objectClass: extensibleObject +ou: People +uidNumber: 0 +gidNumber: 0 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +objectClass: OpenLDAPperson +cn: Ursula Hampster +sn: Hampster +uid: uham +title: Secretary, UM Alumni Association +postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109 +seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com +homePostalAddress: 123 Anystreet $ Anytown, MI 48104 +mail: uham@mail.alumni.example.com +homePhone: +1 313 555 8421 +pager: +1 313 555 2844 +facsimileTelephoneNumber: +1 313 555 9700 +telephoneNumber: +1 313 555 5331 + diff --git a/tests/data/test.schema b/tests/data/test.schema new file mode 100644 index 0000000..96812bb --- /dev/null +++ b/tests/data/test.schema @@ -0,0 +1,69 @@ +# OpenLDAP Test schema +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. +# + +# For testing purposes only. + +# For Attribute Aliasing. +attributetype ( 1.3.6.1.4.1.4203.1.12.1.1.1 + NAME 'x509CertificateIssuer' + EQUALITY distinguishedNameMatch + DESC 'Aliasing attribute: Issuer, use' + SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) + +attributetype ( 1.3.6.1.4.1.4203.1.12.1.1.2 + NAME 'x509CertificateSerial' + DESC 'Aliasing attribute: Serial, use' + EQUALITY integerMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) + +attributetype ( 1.3.6.1.4.1.4203.1.12.1.1.3 + NAME 'x509CertificateSerialAndIssuer' + DESC 'Aliasing attribute: Serial and Issuer together, use' + EQUALITY certificateExactMatch + SYNTAX 1.3.6.1.1.15.1 ) + +# generalized time testing +attributetype ( 1.3.6.1.4.1.4203.1.12.1.1.4 + name 'testTime' + equality generalizedTimeMatch + ordering generalizedTimeOrderingMatch + syntax 1.3.6.1.4.1.1466.115.121.1.24 + single-value ) + +# for UUID testing +attributetype ( 1.3.6.1.4.1.4203.1.12.1.1.5 + name 'testUUID' + equality UUIDMatch + ordering UUIDOrderingMatch + syntax 1.3.6.1.1.16.1 ) + +# for obsolete testing +attributetype ( 1.3.6.1.4.1.4203.1.12.1.1.6 + name 'testObsolete' + obsolete + equality booleanMatch + syntax 1.3.6.1.4.1.1466.115.121.1.7 + single-value ) + +objectClass ( 1.3.6.1.4.1.4203.1.12.1.2.1 + name 'testPerson' sup OpenLDAPperson + may testTime ) + +objectClass ( 1.3.6.1.4.1.4203.1.12.1.2.2 + name 'obsoletePerson' + obsolete auxiliary + may ( testObsolete ) ) + diff --git a/tests/data/valsort1.out b/tests/data/valsort1.out new file mode 100755 index 0000000..c470762 --- /dev/null +++ b/tests/data/valsort1.out @@ -0,0 +1,45 @@ +dn: o=valsort +objectClass: top +objectClass: organization +o: valsort +description: valsort test database + +dn: ou=users,o=valsort +objectClass: top +objectClass: organizationalUnit +ou: users +description: container for test valsort users + +dn: uid=george,ou=users,o=valsort +objectClass: OpenLDAPperson +uid: george +sn: alpha +sn: jungle +sn: tree +sn: zib +cn: george +businessCategory: test +carLicense: SAMPLE +departmentNumber: 1 +departmentNumber: 10 +departmentNumber: 3 +departmentNumber: 37 +departmentNumber: 46 +departmentNumber: 5 +departmentNumber: 72 +displayName: George +employeeNumber: 5150 +employeeType: anarchist +employeeType: contractor +employeeType: staff +givenName: Big G +ou: Chemistry +ou: Computer Science +ou: Hum Bio +ou: Academia +mailPreferenceOption: 1 +mailPreferenceOption: 3 +mailPreferenceOption: 22 +mailPreferenceOption: 66 +mailPreferenceOption: 87 + diff --git a/tests/data/valsort2.out b/tests/data/valsort2.out new file mode 100755 index 0000000..c235865 --- /dev/null +++ b/tests/data/valsort2.out @@ -0,0 +1,45 @@ +dn: o=valsort +objectClass: top +objectClass: organization +o: valsort +description: valsort test database + +dn: ou=users,o=valsort +objectClass: top +objectClass: organizationalUnit +ou: users +description: container for test valsort users + +dn: uid=george,ou=users,o=valsort +objectClass: OpenLDAPperson +uid: george +sn: zib +sn: tree +sn: jungle +sn: alpha +cn: george +businessCategory: test +carLicense: SAMPLE +departmentNumber: 72 +departmentNumber: 5 +departmentNumber: 46 +departmentNumber: 37 +departmentNumber: 3 +departmentNumber: 10 +departmentNumber: 1 +displayName: George +employeeNumber: 5150 +employeeType: staff +employeeType: contractor +employeeType: anarchist +givenName: Big G +ou: Chemistry +ou: Computer Science +ou: Hum Bio +ou: Academia +mailPreferenceOption: 87 +mailPreferenceOption: 66 +mailPreferenceOption: 22 +mailPreferenceOption: 3 +mailPreferenceOption: 1 + diff --git a/tests/data/valsort3.out b/tests/data/valsort3.out new file mode 100755 index 0000000..caefe1e --- /dev/null +++ b/tests/data/valsort3.out @@ -0,0 +1,61 @@ +dn: o=valsort +objectClass: top +objectClass: organization +o: valsort +description: valsort test database + +dn: ou=users,o=valsort +objectClass: top +objectClass: organizationalUnit +ou: users +description: container for test valsort users + +dn: uid=george,ou=users,o=valsort +objectClass: OpenLDAPperson +uid: george +sn: zib +sn: tree +sn: jungle +sn: alpha +cn: george +businessCategory: test +carLicense: SAMPLE +departmentNumber: 72 +departmentNumber: 5 +departmentNumber: 46 +departmentNumber: 37 +departmentNumber: 3 +departmentNumber: 10 +departmentNumber: 1 +displayName: George +employeeNumber: 5150 +employeeType: staff +employeeType: contractor +employeeType: anarchist +givenName: Big G +ou: Chemistry +ou: Computer Science +ou: Hum Bio +ou: Academia +mailPreferenceOption: 87 +mailPreferenceOption: 66 +mailPreferenceOption: 22 +mailPreferenceOption: 3 +mailPreferenceOption: 1 + +dn: uid=dave,ou=users,o=valsort +objectClass: OpenLDAPperson +uid: dave +sn: nothere +cn: dave +businessCategory: otest +carLicense: TEST +departmentNumber: 42 +displayName: Dave +employeeNumber: 69 +employeeType: contractor +givenName: Dave +ou: Test +ou: Is +ou: Okay + diff --git a/tests/progs/Makefile.in b/tests/progs/Makefile.in new file mode 100644 index 0000000..8aa7e1d --- /dev/null +++ b/tests/progs/Makefile.in @@ -0,0 +1,66 @@ +## Makefile.in for test programs +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +PROGRAMS = slapd-tester slapd-search slapd-read slapd-addel slapd-modrdn \ + slapd-modify slapd-bind slapd-mtread ldif-filter + +SRCS = slapd-common.c \ + slapd-tester.c slapd-search.c slapd-read.c slapd-addel.c \ + slapd-modrdn.c slapd-modify.c slapd-bind.c slapd-mtread.c \ + ldif-filter.c + +LDAP_INCDIR= ../../include +LDAP_LIBDIR= ../../libraries + +XLIBS = $(LDAP_LIBLDAP_LA) $(LDAP_LIBLUTIL_A) $(LDAP_LIBLBER_LA) +XRLIBS = $(LDAP_LIBLDAP_R_LA) $(LDAP_LIBLUTIL_A) $(LDAP_LIBLBER_LA) +XXLIBS = $(SECURITY_LIBS) $(LUTIL_LIBS) +RLIBS = $(XRLIBS) $(XXLIBS) $(AC_LIBS) $(XXXLIBS) + + +OBJS = slapd-common.o + +# build-tools: FORCE +# $(MAKE) $(MFLAGS) load-tools + +# load-tools: $(PROGRAMS) + +slapd-tester: slapd-tester.o $(OBJS) $(XLIBS) + $(LTLINK) -o $@ slapd-tester.o $(OBJS) $(LIBS) + +slapd-search: slapd-search.o $(OBJS) $(XLIBS) + $(LTLINK) -o $@ slapd-search.o $(OBJS) $(LIBS) + +slapd-read: slapd-read.o $(OBJS) $(XLIBS) + $(LTLINK) -o $@ slapd-read.o $(OBJS) $(LIBS) + +slapd-addel: slapd-addel.o $(OBJS) $(XLIBS) + $(LTLINK) -o $@ slapd-addel.o $(OBJS) $(LIBS) + +slapd-modrdn: slapd-modrdn.o $(OBJS) $(XLIBS) + $(LTLINK) -o $@ slapd-modrdn.o $(OBJS) $(LIBS) + +slapd-modify: slapd-modify.o $(OBJS) $(XLIBS) + $(LTLINK) -o $@ slapd-modify.o $(OBJS) $(LIBS) + +slapd-bind: slapd-bind.o $(OBJS) $(XLIBS) + $(LTLINK) -o $@ slapd-bind.o $(OBJS) $(LIBS) + +ldif-filter: ldif-filter.o $(XLIBS) + $(LTLINK) -o $@ ldif-filter.o $(LIBS) + +slapd-mtread: slapd-mtread.o $(OBJS) $(XRLIBS) + $(LTLINK) -o $@ slapd-mtread.o $(OBJS) $(RLIBS) + diff --git a/tests/progs/ldif-filter.c b/tests/progs/ldif-filter.c new file mode 100644 index 0000000..769f850 --- /dev/null +++ b/tests/progs/ldif-filter.c @@ -0,0 +1,256 @@ +/* ldif-filter -- clean up LDIF testdata from stdin */ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software <http://www.openldap.org/>. + * + * Copyright 2009-2018 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 file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * <http://www.OpenLDAP.org/license.html>. + */ + +#include "portable.h" + +#include <stdio.h> +#include <ac/ctype.h> +#include <ac/stdlib.h> +#include <ac/string.h> +#include <ac/unistd.h> +#ifdef _WIN32 +#include <fcntl.h> +#endif + +#define DEFAULT_SPECS "ndb=a,null=n" + +typedef struct { char *val; size_t len, alloc; } String; +typedef struct { String *val; size_t len, alloc; } Strings; + +/* Flags and corresponding program options */ +enum { SORT_ATTRS = 1, SORT_ENTRIES = 2, NO_OUTPUT = 4, DUMMY_FLAG = 8 }; +static const char spec_options[] = "aen"; /* option index = log2(enum flag) */ + +static const char *progname = "ldif-filter"; +static const String null_string = { NULL, 0, 0 }; + +static void +usage( void ) +{ + fprintf( stderr, "\ +Usage: %s [-b backend] [-s spec[,spec]...]\n\ +Filter standard input by first <spec> matching '[<backend>]=[a][e][n]':\n\ + - Remove LDIF comments.\n\ + - 'a': Sort attributes in entries.\n\ + - 'e': Sort any entries separated by just one empty line.\n\ + - 'n': Output nothing.\n\ +<backend> defaults to the $BACKEND environment variable.\n\ +Use specs '%s' if no spec on the command line applies.\n", + progname, DEFAULT_SPECS ); + exit( EXIT_FAILURE ); +} + +/* Return flags from "backend=flags" in spec; nonzero if backend found */ +static unsigned +get_flags( const char *backend, const char *spec ) +{ + size_t len = strlen( backend ); + unsigned flags = DUMMY_FLAG; + const char *end, *tmp; + + for ( ;; spec = end + ( *end != '\0' )) { + if ( !*spec ) + return 0; + end = spec + strcspn( spec, "," ); + if ( !(tmp = memchr( spec, '=', end-spec ))) + break; + if ( tmp-spec == len && !memcmp( spec, backend, len )) { + spec = tmp+1; + break; + } + } + + for ( ; spec < end; spec++ ) { + if ( (tmp = strchr( spec_options, *spec )) == NULL ) { + usage(); + } + flags |= 1U << (tmp - spec_options); + } + return flags; +} + +#define APPEND(s /* String or Strings */, data, count, isString) do { \ + size_t slen = (s)->len, salloc = (s)->alloc, sz = sizeof *(s)->val; \ + if ( salloc <= slen + (count) ) { \ + (s)->alloc = salloc += salloc + ((count)|7) + 1; \ + (s)->val = xrealloc( (s)->val, sz * salloc ); \ + } \ + memcpy( (s)->val + slen, data, sz * ((count) + !!(isString)) ); \ + (s)->len = slen + (count); \ +} while (0) + +static void * +xrealloc( void *ptr, size_t len ) +{ + if ( (ptr = realloc( ptr, len )) == NULL ) { + perror( progname ); + exit( EXIT_FAILURE ); + } + return ptr; +} + +static int +cmp( const void *s, const void *t ) +{ + return strcmp( ((const String *) s)->val, ((const String *) t)->val ); +} + +static void +sort_strings( Strings *ss, size_t offset ) +{ + qsort( ss->val + offset, ss->len - offset, sizeof(*ss->val), cmp ); +} + +/* Build entry ss[n] from attrs ss[n...], and free the attrs */ +static void +build_entry( Strings *ss, size_t n, unsigned flags, size_t new_len ) +{ + String *vals = ss->val, *e = &vals[n]; + size_t end = ss->len; + char *ptr; + + if ( flags & SORT_ATTRS ) { + sort_strings( ss, n + 1 ); + } + e->val = xrealloc( e->val, e->alloc = new_len + 1 ); + ptr = e->val + e->len; + e->len = new_len; + ss->len = ++n; + for ( ; n < end; free( vals[n++].val )) { + ptr = strcpy( ptr, vals[n].val ) + vals[n].len; + } + assert( ptr == e->val + new_len ); +} + +/* Flush entries to stdout and free them */ +static void +flush_entries( Strings *ss, const char *sep, unsigned flags ) +{ + size_t i, end = ss->len; + const char *prefix = ""; + + if ( flags & SORT_ENTRIES ) { + sort_strings( ss, 0 ); + } + for ( i = 0; i < end; i++, prefix = sep ) { + if ( printf( "%s%s", prefix, ss->val[i].val ) < 0 ) { + perror( progname ); + exit( EXIT_FAILURE ); + } + free( ss->val[i].val ); + } + ss->len = 0; +} + +static void +filter_stdin( unsigned flags ) +{ + char line[256]; + Strings ss = { NULL, 0, 0 }; /* entries + attrs of partial entry */ + size_t entries = 0, attrs_totlen = 0, line_len; + const char *entry_sep = "\n", *sep = ""; + int comment = 0, eof = 0, eol, prev_eol = 1; /* flags */ + String *s; + + /* LDIF = Entries ss[..entries-1] + sep + attrs ss[entries..] + line */ + for ( ; !eof || ss.len || *sep; prev_eol = eol ) { + if ( eof || (eof = !fgets( line, sizeof(line), stdin ))) { + strcpy( line, prev_eol ? "" : *sep ? sep : "\n" ); + } + line_len = strlen( line ); + eol = (line_len == 0 || line[line_len - 1] == '\n'); + + if ( *line == ' ' ) { /* continuation line? */ + prev_eol = 0; + } else if ( prev_eol ) { /* start of logical line? */ + comment = (*line == '#'); + } + if ( comment || (flags & NO_OUTPUT) ) { + continue; + } + + /* Collect attrs for partial entry in ss[entries...] */ + if ( !prev_eol && attrs_totlen != 0 ) { + goto grow_attr; + } else if ( line_len > (*line == '\r' ? 2 : 1) ) { + APPEND( &ss, &null_string, 1, 0 ); /* new attr */ + grow_attr: + s = &ss.val[ss.len - 1]; + APPEND( s, line, line_len, 1 ); /* strcat to attr */ + attrs_totlen += line_len; + continue; + } + + /* Empty line - consume sep+attrs or entries+sep */ + if ( attrs_totlen != 0 ) { + entry_sep = sep; + if ( entries == 0 ) + fputs( sep, stdout ); + build_entry( &ss, entries++, flags, attrs_totlen ); + attrs_totlen = 0; + } else { + flush_entries( &ss, entry_sep, flags ); + fputs( sep, stdout ); + entries = 0; + } + sep = "\r\n" + 2 - line_len; /* sep = copy(line) */ + } + + free( ss.val ); +} + +int +main( int argc, char **argv ) +{ + const char *backend = getenv( "BACKEND" ), *specs = "", *tmp; + unsigned flags; + int i; + + if ( argc > 0 ) { + progname = (tmp = strrchr( argv[0], '/' )) ? tmp+1 : argv[0]; + } + + while ( (i = getopt( argc, argv, "b:s:" )) != EOF ) { + switch ( i ) { + case 'b': + backend = optarg; + break; + case 's': + specs = optarg; + break; + default: + usage(); + } + } + if ( optind < argc ) { + usage(); + } + if ( backend == NULL ) { + backend = ""; + } + +#ifdef _WIN32 + _setmode(1, _O_BINARY); /* don't convert \n to \r\n on stdout */ +#endif + flags = get_flags( backend, specs ); + filter_stdin( flags ? flags : get_flags( backend, DEFAULT_SPECS )); + if ( fclose( stdout ) == EOF ) { + perror( progname ); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/tests/progs/slapd-addel.c b/tests/progs/slapd-addel.c new file mode 100644 index 0000000..fa41b46 --- /dev/null +++ b/tests/progs/slapd-addel.c @@ -0,0 +1,435 @@ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software <http://www.openldap.org/>. + * + * Copyright 1999-2018 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 file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * <http://www.OpenLDAP.org/license.html>. + */ +/* ACKNOWLEDGEMENTS: + * This work was initially developed by Kurt Spanier for inclusion + * in OpenLDAP Software. + */ + +#include "portable.h" + +#include <stdio.h> + +#include "ac/stdlib.h" + +#include "ac/ctype.h" +#include "ac/param.h" +#include "ac/socket.h" +#include "ac/string.h" +#include "ac/unistd.h" +#include "ac/wait.h" + +#include "ldap.h" +#include "lutil.h" + +#include "slapd-common.h" + +#define LOOPS 100 +#define RETRIES 0 + +static char * +get_add_entry( char *filename, LDAPMod ***mods ); + +static void +do_addel( char *uri, char *manager, struct berval *passwd, + char *dn, LDAPMod **attrs, int maxloop, int maxretries, int delay, + int friendly, int chaserefs ); + +static void +usage( char *name ) +{ + fprintf( stderr, + "usage: %s " + "-H <uri> | ([-h <host>] -p <port>) " + "-D <manager> " + "-w <passwd> " + "-f <addfile> " + "[-i <ignore>] " + "[-l <loops>] " + "[-L <outerloops>] " + "[-r <maxretries>] " + "[-t <delay>] " + "[-F] " + "[-C]\n", + name ); + exit( EXIT_FAILURE ); +} + +int +main( int argc, char **argv ) +{ + int i; + char *host = "localhost"; + char *uri = NULL; + int port = -1; + char *manager = NULL; + struct berval passwd = { 0, NULL }; + char *filename = NULL; + char *entry = NULL; + int loops = LOOPS; + int outerloops = 1; + int retries = RETRIES; + int delay = 0; + int friendly = 0; + int chaserefs = 0; + LDAPMod **attrs = NULL; + + tester_init( "slapd-addel", TESTER_ADDEL ); + + while ( ( i = getopt( argc, argv, "CD:Ff:H:h:i:L:l:p:r:t:w:" ) ) != EOF ) + { + switch ( i ) { + case 'C': + chaserefs++; + break; + + case 'F': + friendly++; + break; + + case 'H': /* the server's URI */ + uri = strdup( optarg ); + break; + + case 'h': /* the servers host */ + host = strdup( optarg ); + break; + + case 'i': + /* ignored (!) by now */ + break; + + case 'p': /* the servers port */ + if ( lutil_atoi( &port, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'D': /* the servers manager */ + manager = strdup( optarg ); + break; + + case 'w': /* the server managers password */ + passwd.bv_val = strdup( optarg ); + passwd.bv_len = strlen( optarg ); + memset( optarg, '*', passwd.bv_len ); + break; + + case 'f': /* file with entry search request */ + filename = strdup( optarg ); + break; + + case 'l': /* the number of loops */ + if ( lutil_atoi( &loops, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'L': /* the number of outerloops */ + if ( lutil_atoi( &outerloops, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'r': /* number of retries */ + if ( lutil_atoi( &retries, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 't': /* delay in seconds */ + if ( lutil_atoi( &delay, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + default: + usage( argv[0] ); + break; + } + } + + if (( filename == NULL ) || ( port == -1 && uri == NULL ) || + ( manager == NULL ) || ( passwd.bv_val == NULL )) + usage( argv[0] ); + + entry = get_add_entry( filename, &attrs ); + if (( entry == NULL ) || ( *entry == '\0' )) { + + fprintf( stderr, "%s: invalid entry DN in file \"%s\".\n", + argv[0], filename ); + exit( EXIT_FAILURE ); + + } + + if (( attrs == NULL ) || ( *attrs == '\0' )) { + + fprintf( stderr, "%s: invalid attrs in file \"%s\".\n", + argv[0], filename ); + exit( EXIT_FAILURE ); + + } + + uri = tester_uri( uri, host, port ); + + for ( i = 0; i < outerloops; i++ ) { + do_addel( uri, manager, &passwd, entry, attrs, + loops, retries, delay, friendly, chaserefs ); + } + + exit( EXIT_SUCCESS ); +} + + +static void +addmodifyop( LDAPMod ***pmodsp, int modop, char *attr, char *value, int vlen ) +{ + LDAPMod **pmods; + int i, j; + struct berval *bvp; + + pmods = *pmodsp; + modop |= LDAP_MOD_BVALUES; + + i = 0; + if ( pmods != NULL ) { + for ( ; pmods[ i ] != NULL; ++i ) { + if ( strcasecmp( pmods[ i ]->mod_type, attr ) == 0 && + pmods[ i ]->mod_op == modop ) { + break; + } + } + } + + if ( pmods == NULL || pmods[ i ] == NULL ) { + if (( pmods = (LDAPMod **)realloc( pmods, (i + 2) * + sizeof( LDAPMod * ))) == NULL ) { + tester_perror( "realloc", NULL ); + exit( EXIT_FAILURE ); + } + *pmodsp = pmods; + pmods[ i + 1 ] = NULL; + if (( pmods[ i ] = (LDAPMod *)calloc( 1, sizeof( LDAPMod ))) + == NULL ) { + tester_perror( "calloc", NULL ); + exit( EXIT_FAILURE ); + } + pmods[ i ]->mod_op = modop; + if (( pmods[ i ]->mod_type = strdup( attr )) == NULL ) { + tester_perror( "strdup", NULL ); + exit( EXIT_FAILURE ); + } + } + + if ( value != NULL ) { + j = 0; + if ( pmods[ i ]->mod_bvalues != NULL ) { + for ( ; pmods[ i ]->mod_bvalues[ j ] != NULL; ++j ) { + ; + } + } + if (( pmods[ i ]->mod_bvalues = + (struct berval **)ber_memrealloc( pmods[ i ]->mod_bvalues, + (j + 2) * sizeof( struct berval * ))) == NULL ) { + tester_perror( "ber_memrealloc", NULL ); + exit( EXIT_FAILURE ); + } + pmods[ i ]->mod_bvalues[ j + 1 ] = NULL; + if (( bvp = (struct berval *)ber_memalloc( sizeof( struct berval ))) + == NULL ) { + tester_perror( "ber_memalloc", NULL ); + exit( EXIT_FAILURE ); + } + pmods[ i ]->mod_bvalues[ j ] = bvp; + + bvp->bv_len = vlen; + if (( bvp->bv_val = (char *)malloc( vlen + 1 )) == NULL ) { + tester_perror( "malloc", NULL ); + exit( EXIT_FAILURE ); + } + AC_MEMCPY( bvp->bv_val, value, vlen ); + bvp->bv_val[ vlen ] = '\0'; + } +} + + +static char * +get_add_entry( char *filename, LDAPMod ***mods ) +{ + FILE *fp; + char *entry = NULL; + + if ( (fp = fopen( filename, "r" )) != NULL ) { + char line[BUFSIZ]; + + if ( fgets( line, BUFSIZ, fp )) { + char *nl; + + if (( nl = strchr( line, '\r' )) || ( nl = strchr( line, '\n' ))) + *nl = '\0'; + nl = line; + if ( !strncasecmp( nl, "dn: ", 4 )) + nl += 4; + entry = strdup( nl ); + + } + + while ( fgets( line, BUFSIZ, fp )) { + char *nl; + char *value; + + if (( nl = strchr( line, '\r' )) || ( nl = strchr( line, '\n' ))) + *nl = '\0'; + + if ( *line == '\0' ) break; + if ( !( value = strchr( line, ':' ))) break; + + *value++ = '\0'; + while ( *value && isspace( (unsigned char) *value )) + value++; + + addmodifyop( mods, LDAP_MOD_ADD, line, value, strlen( value )); + + } + fclose( fp ); + } + + return( entry ); +} + + +static void +do_addel( + char *uri, + char *manager, + struct berval *passwd, + char *entry, + LDAPMod **attrs, + int maxloop, + int maxretries, + int delay, + int friendly, + int chaserefs ) +{ + LDAP *ld = NULL; + int i = 0, do_retry = maxretries; + int rc = LDAP_SUCCESS; + int version = LDAP_VERSION3; + +retry:; + ldap_initialize( &ld, uri ); + if ( ld == NULL ) { + tester_perror( "ldap_initialize", NULL ); + exit( EXIT_FAILURE ); + } + + (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); + (void) ldap_set_option( ld, LDAP_OPT_REFERRALS, + chaserefs ? LDAP_OPT_ON : LDAP_OPT_OFF ); + + if ( do_retry == maxretries ) { + fprintf( stderr, "PID=%ld - Add/Delete(%d): entry=\"%s\".\n", + (long) pid, maxloop, entry ); + } + + rc = ldap_sasl_bind_s( ld, manager, LDAP_SASL_SIMPLE, passwd, NULL, NULL, NULL ); + if ( rc != LDAP_SUCCESS ) { + tester_ldap_error( ld, "ldap_sasl_bind_s", NULL ); + switch ( rc ) { + case LDAP_BUSY: + case LDAP_UNAVAILABLE: + if ( do_retry > 0 ) { + do_retry--; + if ( delay != 0 ) { + sleep( delay ); + } + goto retry; + } + /* fallthru */ + default: + break; + } + exit( EXIT_FAILURE ); + } + + for ( ; i < maxloop; i++ ) { + + /* add the entry */ + rc = ldap_add_ext_s( ld, entry, attrs, NULL, NULL ); + if ( rc != LDAP_SUCCESS ) { + tester_ldap_error( ld, "ldap_add_ext_s", NULL ); + switch ( rc ) { + case LDAP_ALREADY_EXISTS: + /* NOTE: this likely means + * the delete failed + * during the previous round... */ + if ( !friendly ) { + goto done; + } + break; + + case LDAP_BUSY: + case LDAP_UNAVAILABLE: + if ( do_retry > 0 ) { + do_retry--; + goto retry; + } + /* fall thru */ + + default: + goto done; + } + } + +#if 0 + /* wait a second for the add to really complete */ + /* This masks some race conditions though. */ + sleep( 1 ); +#endif + + /* now delete the entry again */ + rc = ldap_delete_ext_s( ld, entry, NULL, NULL ); + if ( rc != LDAP_SUCCESS ) { + tester_ldap_error( ld, "ldap_delete_ext_s", NULL ); + switch ( rc ) { + case LDAP_NO_SUCH_OBJECT: + /* NOTE: this likely means + * the add failed + * during the previous round... */ + if ( !friendly ) { + goto done; + } + break; + + case LDAP_BUSY: + case LDAP_UNAVAILABLE: + if ( do_retry > 0 ) { + do_retry--; + goto retry; + } + /* fall thru */ + + default: + goto done; + } + } + } + +done:; + fprintf( stderr, " PID=%ld - Add/Delete done (%d).\n", (long) pid, rc ); + + ldap_unbind_ext( ld, NULL, NULL ); +} + + diff --git a/tests/progs/slapd-bind.c b/tests/progs/slapd-bind.c new file mode 100644 index 0000000..e4ab870 --- /dev/null +++ b/tests/progs/slapd-bind.c @@ -0,0 +1,609 @@ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software <http://www.openldap.org/>. + * + * Copyright 1999-2018 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 file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * <http://www.OpenLDAP.org/license.html>. + */ +/* ACKNOWLEDGEMENTS: + * This work was initially developed by Howard Chu for inclusion + * in OpenLDAP Software. + */ + +#include "portable.h" + +#include <stdio.h> + +#include "ac/stdlib.h" +#include "ac/time.h" + +#include "ac/ctype.h" +#include "ac/param.h" +#include "ac/socket.h" +#include "ac/string.h" +#include "ac/unistd.h" +#include "ac/wait.h" +#include "ac/time.h" + +#include "ldap.h" +#include "lutil.h" +#include "lber_pvt.h" +#include "ldap_pvt.h" + +#include "slapd-common.h" + +#define LOOPS 100 + +static int +do_bind( char *uri, char *dn, struct berval *pass, int maxloop, + int force, int chaserefs, int noinit, LDAP **ldp, + int action_type, void *action ); + +static int +do_base( char *uri, char *dn, struct berval *pass, char *base, char *filter, char *pwattr, + int maxloop, int force, int chaserefs, int noinit, int delay, + int action_type, void *action ); + +/* This program can be invoked two ways: if -D is used to specify a Bind DN, + * that DN will be used repeatedly for all of the Binds. If instead -b is used + * to specify a base DN, a search will be done for all "person" objects under + * that base DN. Then DNs from this list will be randomly selected for each + * Bind request. All of the users must have identical passwords. Also it is + * assumed that the users are all onelevel children of the base. + */ +static void +usage( char *name, char opt ) +{ + if ( opt ) { + fprintf( stderr, "%s: unable to handle option \'%c\'\n\n", + name, opt ); + } + + fprintf( stderr, "usage: %s " + "[-H uri | -h <host> [-p port]] " + "[-D <dn> [-w <passwd>]] " + "[-b <baseDN> [-f <searchfilter>] [-a pwattr]] " + "[-l <loops>] " + "[-L <outerloops>] " + "[-B <extra>[,...]] " + "[-F] " + "[-C] " + "[-I] " + "[-i <ignore>] " + "[-t delay]\n", + name ); + exit( EXIT_FAILURE ); +} + +int +main( int argc, char **argv ) +{ + int i; + char *uri = NULL; + char *host = "localhost"; + char *dn = NULL; + char *base = NULL; + char *filter = "(objectClass=person)"; + struct berval pass = { 0, NULL }; + char *pwattr = NULL; + int port = -1; + int loops = LOOPS; + int outerloops = 1; + int force = 0; + int chaserefs = 0; + int noinit = 1; + int delay = 0; + + /* extra action to do after bind... */ + struct berval type[] = { + BER_BVC( "tester=" ), + BER_BVC( "add=" ), + BER_BVC( "bind=" ), + BER_BVC( "modify=" ), + BER_BVC( "modrdn=" ), + BER_BVC( "read=" ), + BER_BVC( "search=" ), + BER_BVNULL + }; + + LDAPURLDesc *extra_ludp = NULL; + + tester_init( "slapd-bind", TESTER_BIND ); + + /* by default, tolerate invalid credentials */ + tester_ignore_str2errlist( "INVALID_CREDENTIALS" ); + + while ( ( i = getopt( argc, argv, "a:B:b:D:Ff:H:h:Ii:L:l:p:t:w:" ) ) != EOF ) + { + switch ( i ) { + case 'a': + pwattr = optarg; + break; + + case 'b': /* base DN of a tree of user DNs */ + base = optarg; + break; + + case 'B': + { + int c; + + for ( c = 0; type[c].bv_val; c++ ) { + if ( strncasecmp( optarg, type[c].bv_val, type[c].bv_len ) == 0 ) + { + break; + } + } + + if ( type[c].bv_val == NULL ) { + usage( argv[0], 'B' ); + } + + switch ( c ) { + case TESTER_TESTER: + case TESTER_BIND: + /* invalid */ + usage( argv[0], 'B' ); + + case TESTER_SEARCH: + { + if ( ldap_url_parse( &optarg[type[c].bv_len], &extra_ludp ) != LDAP_URL_SUCCESS ) + { + usage( argv[0], 'B' ); + } + } break; + + case TESTER_ADDEL: + case TESTER_MODIFY: + case TESTER_MODRDN: + case TESTER_READ: + /* nothing to do */ + break; + + default: + assert( 0 ); + } + + } break; + + case 'C': + chaserefs++; + break; + + case 'H': /* the server uri */ + uri = optarg; + break; + + case 'h': /* the servers host */ + host = optarg; + break; + + case 'i': + tester_ignore_str2errlist( optarg ); + break; + + case 'p': /* the servers port */ + if ( lutil_atoi( &port, optarg ) != 0 ) { + usage( argv[0], 'p' ); + } + break; + + case 'D': + dn = optarg; + break; + + case 'w': + ber_str2bv( optarg, 0, 1, &pass ); + memset( optarg, '*', pass.bv_len ); + break; + + case 'l': /* the number of loops */ + if ( lutil_atoi( &loops, optarg ) != 0 ) { + usage( argv[0], 'l' ); + } + break; + + case 'L': /* the number of outerloops */ + if ( lutil_atoi( &outerloops, optarg ) != 0 ) { + usage( argv[0], 'L' ); + } + break; + + case 'f': + filter = optarg; + break; + + case 'F': + force++; + break; + + case 'I': + /* reuse connection */ + noinit = 0; + break; + + case 't': + /* sleep between binds */ + if ( lutil_atoi( &delay, optarg ) != 0 ) { + usage( argv[0], 't' ); + } + break; + + default: + usage( argv[0], i ); + break; + } + } + + if ( port == -1 && uri == NULL ) { + usage( argv[0], '\0' ); + } + + uri = tester_uri( uri, host, port ); + + for ( i = 0; i < outerloops; i++ ) { + int rc; + + if ( base != NULL ) { + rc = do_base( uri, dn, &pass, base, filter, pwattr, loops, + force, chaserefs, noinit, delay, -1, NULL ); + } else { + rc = do_bind( uri, dn, &pass, loops, + force, chaserefs, noinit, NULL, -1, NULL ); + } + if ( rc == LDAP_SERVER_DOWN ) + break; + } + + exit( EXIT_SUCCESS ); +} + + +static int +do_bind( char *uri, char *dn, struct berval *pass, int maxloop, + int force, int chaserefs, int noinit, LDAP **ldp, + int action_type, void *action ) +{ + LDAP *ld = ldp ? *ldp : NULL; + int i, rc = -1; + + /* for internal search */ + int timelimit = 0; + int sizelimit = 0; + + switch ( action_type ) { + case -1: + break; + + case TESTER_SEARCH: + { + LDAPURLDesc *ludp = (LDAPURLDesc *)action; + + assert( action != NULL ); + + if ( ludp->lud_exts != NULL ) { + for ( i = 0; ludp->lud_exts[ i ] != NULL; i++ ) { + char *ext = ludp->lud_exts[ i ]; + int crit = 0; + + if (ext[0] == '!') { + crit++; + ext++; + } + + if ( strncasecmp( ext, "x-timelimit=", STRLENOF( "x-timelimit=" ) ) == 0 ) { + if ( lutil_atoi( &timelimit, &ext[ STRLENOF( "x-timelimit=" ) ] ) && crit ) { + tester_error( "unable to parse critical extension x-timelimit" ); + } + + } else if ( strncasecmp( ext, "x-sizelimit=", STRLENOF( "x-sizelimit=" ) ) == 0 ) { + if ( lutil_atoi( &sizelimit, &ext[ STRLENOF( "x-sizelimit=" ) ] ) && crit ) { + tester_error( "unable to parse critical extension x-sizelimit" ); + } + + } else if ( crit ) { + tester_error( "unknown critical extension" ); + } + } + } + } break; + + default: + /* nothing to do yet */ + break; + } + + if ( maxloop > 1 ) { + fprintf( stderr, "PID=%ld - Bind(%d): dn=\"%s\".\n", + (long) pid, maxloop, dn ); + } + + for ( i = 0; i < maxloop; i++ ) { + if ( !noinit || ld == NULL ) { + int version = LDAP_VERSION3; + ldap_initialize( &ld, uri ); + if ( ld == NULL ) { + tester_perror( "ldap_initialize", NULL ); + rc = -1; + break; + } + + (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, + &version ); + (void) ldap_set_option( ld, LDAP_OPT_REFERRALS, + chaserefs ? LDAP_OPT_ON: LDAP_OPT_OFF ); + } + + rc = ldap_sasl_bind_s( ld, dn, LDAP_SASL_SIMPLE, pass, NULL, NULL, NULL ); + if ( rc ) { + int first = tester_ignore_err( rc ); + + /* if ignore.. */ + if ( first ) { + /* only log if first occurrence */ + if ( ( force < 2 && first > 0 ) || abs(first) == 1 ) { + tester_ldap_error( ld, "ldap_sasl_bind_s", NULL ); + } + rc = LDAP_SUCCESS; + + } else { + tester_ldap_error( ld, "ldap_sasl_bind_s", NULL ); + } + } + + switch ( action_type ) { + case -1: + break; + + case TESTER_SEARCH: + { + LDAPURLDesc *ludp = (LDAPURLDesc *)action; + LDAPMessage *res = NULL; + struct timeval tv = { 0 }, *tvp = NULL; + + if ( timelimit ) { + tv.tv_sec = timelimit; + tvp = &tv; + } + + assert( action != NULL ); + + rc = ldap_search_ext_s( ld, + ludp->lud_dn, ludp->lud_scope, + ludp->lud_filter, ludp->lud_attrs, 0, + NULL, NULL, tvp, sizelimit, &res ); + ldap_msgfree( res ); + } break; + + default: + /* nothing to do yet */ + break; + } + + if ( !noinit ) { + ldap_unbind_ext( ld, NULL, NULL ); + ld = NULL; + } + + if ( rc != LDAP_SUCCESS ) { + break; + } + } + + if ( maxloop > 1 ) { + fprintf( stderr, " PID=%ld - Bind done (%d).\n", (long) pid, rc ); + } + + if ( ldp && noinit ) { + *ldp = ld; + + } else if ( ld != NULL ) { + ldap_unbind_ext( ld, NULL, NULL ); + } + + return rc; +} + + +static int +do_base( char *uri, char *dn, struct berval *pass, char *base, char *filter, char *pwattr, + int maxloop, int force, int chaserefs, int noinit, int delay, + int action_type, void *action ) +{ + LDAP *ld = NULL; + int i = 0; + int rc = LDAP_SUCCESS; + ber_int_t msgid; + LDAPMessage *res, *msg; + char **dns = NULL; + struct berval *creds = NULL; + char *attrs[] = { LDAP_NO_ATTRS, NULL }; + int ndns = 0; +#ifdef _WIN32 + DWORD beg, end; +#else + struct timeval beg, end; +#endif + int version = LDAP_VERSION3; + char *nullstr = ""; + + ldap_initialize( &ld, uri ); + if ( ld == NULL ) { + tester_perror( "ldap_initialize", NULL ); + exit( EXIT_FAILURE ); + } + + (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); + (void) ldap_set_option( ld, LDAP_OPT_REFERRALS, + chaserefs ? LDAP_OPT_ON: LDAP_OPT_OFF ); + + rc = ldap_sasl_bind_s( ld, dn, LDAP_SASL_SIMPLE, pass, NULL, NULL, NULL ); + if ( rc != LDAP_SUCCESS ) { + tester_ldap_error( ld, "ldap_sasl_bind_s", NULL ); + exit( EXIT_FAILURE ); + } + + fprintf( stderr, "PID=%ld - Bind(%d): base=\"%s\", filter=\"%s\" attr=\"%s\".\n", + (long) pid, maxloop, base, filter, pwattr ); + + if ( pwattr != NULL ) { + attrs[ 0 ] = pwattr; + } + rc = ldap_search_ext( ld, base, LDAP_SCOPE_SUBTREE, + filter, attrs, 0, NULL, NULL, 0, 0, &msgid ); + if ( rc != LDAP_SUCCESS ) { + tester_ldap_error( ld, "ldap_search_ext", NULL ); + exit( EXIT_FAILURE ); + } + + while ( ( rc = ldap_result( ld, LDAP_RES_ANY, LDAP_MSG_ONE, NULL, &res ) ) > 0 ) + { + BerElement *ber; + struct berval bv; + int done = 0; + + for ( msg = ldap_first_message( ld, res ); msg; + msg = ldap_next_message( ld, msg ) ) + { + switch ( ldap_msgtype( msg ) ) { + case LDAP_RES_SEARCH_ENTRY: + rc = ldap_get_dn_ber( ld, msg, &ber, &bv ); + dns = realloc( dns, (ndns + 1)*sizeof(char *) ); + dns[ndns] = ber_strdup( bv.bv_val ); + if ( pwattr != NULL ) { + struct berval **values = ldap_get_values_len( ld, msg, pwattr ); + + creds = realloc( creds, (ndns + 1)*sizeof(struct berval) ); + if ( values == NULL ) { +novals:; + creds[ndns].bv_len = 0; + creds[ndns].bv_val = nullstr; + + } else { + static struct berval cleartext = BER_BVC( "{CLEARTEXT} " ); + struct berval value = *values[ 0 ]; + + if ( value.bv_val[ 0 ] == '{' ) { + char *end = ber_bvchr( &value, '}' ); + + if ( end ) { + if ( ber_bvcmp( &value, &cleartext ) == 0 ) { + value.bv_val += cleartext.bv_len; + value.bv_len -= cleartext.bv_len; + + } else { + ldap_value_free_len( values ); + goto novals; + } + } + + } + + ber_dupbv( &creds[ndns], &value ); + ldap_value_free_len( values ); + } + } + ndns++; + ber_free( ber, 0 ); + break; + + case LDAP_RES_SEARCH_RESULT: + done = 1; + break; + } + if ( done ) + break; + } + ldap_msgfree( res ); + if ( done ) break; + } + +#ifdef _WIN32 + beg = GetTickCount(); +#else + gettimeofday( &beg, NULL ); +#endif + + if ( ndns == 0 ) { + tester_error( "No DNs" ); + return 1; + } + + fprintf( stderr, " PID=%ld - Bind base=\"%s\" filter=\"%s\" got %d values.\n", + (long) pid, base, filter, ndns ); + + /* Ok, got list of DNs, now start binding to each */ + for ( i = 0; i < maxloop; i++ ) { + int j; + struct berval cred = { 0, NULL }; + + +#if 0 /* use high-order bits for better randomness (Numerical Recipes in "C") */ + j = rand() % ndns; +#endif + j = ((double)ndns)*rand()/(RAND_MAX + 1.0); + + if ( creds && !BER_BVISEMPTY( &creds[j] ) ) { + cred = creds[j]; + } + + if ( do_bind( uri, dns[j], &cred, 1, force, chaserefs, noinit, &ld, + action_type, action ) && !force ) + { + break; + } + + if ( delay ) { + sleep( delay ); + } + } + + if ( ld != NULL ) { + ldap_unbind_ext( ld, NULL, NULL ); + ld = NULL; + } + +#ifdef _WIN32 + end = GetTickCount(); + end -= beg; + + fprintf( stderr, " PID=%ld - Bind done %d in %d.%03d seconds.\n", + (long) pid, i, end / 1000, end % 1000 ); +#else + gettimeofday( &end, NULL ); + end.tv_usec -= beg.tv_usec; + if (end.tv_usec < 0 ) { + end.tv_usec += 1000000; + end.tv_sec -= 1; + } + end.tv_sec -= beg.tv_sec; + + fprintf( stderr, " PID=%ld - Bind done %d in %ld.%06ld seconds.\n", + (long) pid, i, (long) end.tv_sec, (long) end.tv_usec ); +#endif + + if ( dns ) { + for ( i = 0; i < ndns; i++ ) { + ber_memfree( dns[i] ); + } + free( dns ); + } + + if ( creds ) { + for ( i = 0; i < ndns; i++ ) { + if ( creds[i].bv_val != nullstr ) { + ber_memfree( creds[i].bv_val ); + } + } + free( creds ); + } + + return 0; +} diff --git a/tests/progs/slapd-common.c b/tests/progs/slapd-common.c new file mode 100644 index 0000000..f6adc8c --- /dev/null +++ b/tests/progs/slapd-common.c @@ -0,0 +1,300 @@ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software <http://www.openldap.org/>. + * + * Copyright 1999-2018 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 file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * <http://www.OpenLDAP.org/license.html>. + */ +/* ACKNOWLEDGEMENTS: + * This work was initially developed by Howard Chu for inclusion + * in OpenLDAP Software. + */ + +#include "portable.h" + +#include <stdio.h> + +#include "ac/stdlib.h" +#include "ac/unistd.h" +#include "ac/string.h" +#include "ac/errno.h" + +#include "ldap.h" + +#include "ldap_pvt.h" +#include "slapd-common.h" + +/* global vars */ +pid_t pid; + +/* static vars */ +static char progname[ BUFSIZ ]; +tester_t progtype; + +/* + * ignore_count[] is indexed by result code: + * negative for OpenLDAP client-side errors, positive for protocol codes. + */ +#define TESTER_CLIENT_FIRST LDAP_REFERRAL_LIMIT_EXCEEDED /* negative */ +#define TESTER_SERVER_LAST LDAP_OTHER +static int ignore_base [ -TESTER_CLIENT_FIRST + TESTER_SERVER_LAST + 1 ]; +#define ignore_count (ignore_base - TESTER_CLIENT_FIRST) + +static const struct { + const char *name; + int err; +} ignore_str2err[] = { + { "OPERATIONS_ERROR", LDAP_OPERATIONS_ERROR }, + { "PROTOCOL_ERROR", LDAP_PROTOCOL_ERROR }, + { "TIMELIMIT_EXCEEDED", LDAP_TIMELIMIT_EXCEEDED }, + { "SIZELIMIT_EXCEEDED", LDAP_SIZELIMIT_EXCEEDED }, + { "COMPARE_FALSE", LDAP_COMPARE_FALSE }, + { "COMPARE_TRUE", LDAP_COMPARE_TRUE }, + { "AUTH_METHOD_NOT_SUPPORTED", LDAP_AUTH_METHOD_NOT_SUPPORTED }, + { "STRONG_AUTH_NOT_SUPPORTED", LDAP_STRONG_AUTH_NOT_SUPPORTED }, + { "STRONG_AUTH_REQUIRED", LDAP_STRONG_AUTH_REQUIRED }, + { "STRONGER_AUTH_REQUIRED", LDAP_STRONGER_AUTH_REQUIRED }, + { "PARTIAL_RESULTS", LDAP_PARTIAL_RESULTS }, + + { "REFERRAL", LDAP_REFERRAL }, + { "ADMINLIMIT_EXCEEDED", LDAP_ADMINLIMIT_EXCEEDED }, + { "UNAVAILABLE_CRITICAL_EXTENSION", LDAP_UNAVAILABLE_CRITICAL_EXTENSION }, + { "CONFIDENTIALITY_REQUIRED", LDAP_CONFIDENTIALITY_REQUIRED }, + { "SASL_BIND_IN_PROGRESS", LDAP_SASL_BIND_IN_PROGRESS }, + + { "NO_SUCH_ATTRIBUTE", LDAP_NO_SUCH_ATTRIBUTE }, + { "UNDEFINED_TYPE", LDAP_UNDEFINED_TYPE }, + { "INAPPROPRIATE_MATCHING", LDAP_INAPPROPRIATE_MATCHING }, + { "CONSTRAINT_VIOLATION", LDAP_CONSTRAINT_VIOLATION }, + { "TYPE_OR_VALUE_EXISTS", LDAP_TYPE_OR_VALUE_EXISTS }, + { "INVALID_SYNTAX", LDAP_INVALID_SYNTAX }, + + { "NO_SUCH_OBJECT", LDAP_NO_SUCH_OBJECT }, + { "ALIAS_PROBLEM", LDAP_ALIAS_PROBLEM }, + { "INVALID_DN_SYNTAX", LDAP_INVALID_DN_SYNTAX }, + { "IS_LEAF", LDAP_IS_LEAF }, + { "ALIAS_DEREF_PROBLEM", LDAP_ALIAS_DEREF_PROBLEM }, + + /* obsolete */ + { "PROXY_AUTHZ_FAILURE", LDAP_X_PROXY_AUTHZ_FAILURE }, + { "INAPPROPRIATE_AUTH", LDAP_INAPPROPRIATE_AUTH }, + { "INVALID_CREDENTIALS", LDAP_INVALID_CREDENTIALS }, + { "INSUFFICIENT_ACCESS", LDAP_INSUFFICIENT_ACCESS }, + + { "BUSY", LDAP_BUSY }, + { "UNAVAILABLE", LDAP_UNAVAILABLE }, + { "UNWILLING_TO_PERFORM", LDAP_UNWILLING_TO_PERFORM }, + { "LOOP_DETECT", LDAP_LOOP_DETECT }, + + { "NAMING_VIOLATION", LDAP_NAMING_VIOLATION }, + { "OBJECT_CLASS_VIOLATION", LDAP_OBJECT_CLASS_VIOLATION }, + { "NOT_ALLOWED_ON_NONLEAF", LDAP_NOT_ALLOWED_ON_NONLEAF }, + { "NOT_ALLOWED_ON_RDN", LDAP_NOT_ALLOWED_ON_RDN }, + { "ALREADY_EXISTS", LDAP_ALREADY_EXISTS }, + { "NO_OBJECT_CLASS_MODS", LDAP_NO_OBJECT_CLASS_MODS }, + { "RESULTS_TOO_LARGE", LDAP_RESULTS_TOO_LARGE }, + { "AFFECTS_MULTIPLE_DSAS", LDAP_AFFECTS_MULTIPLE_DSAS }, + + { "OTHER", LDAP_OTHER }, + + { "SERVER_DOWN", LDAP_SERVER_DOWN }, + { "LOCAL_ERROR", LDAP_LOCAL_ERROR }, + { "ENCODING_ERROR", LDAP_ENCODING_ERROR }, + { "DECODING_ERROR", LDAP_DECODING_ERROR }, + { "TIMEOUT", LDAP_TIMEOUT }, + { "AUTH_UNKNOWN", LDAP_AUTH_UNKNOWN }, + { "FILTER_ERROR", LDAP_FILTER_ERROR }, + { "USER_CANCELLED", LDAP_USER_CANCELLED }, + { "PARAM_ERROR", LDAP_PARAM_ERROR }, + { "NO_MEMORY", LDAP_NO_MEMORY }, + { "CONNECT_ERROR", LDAP_CONNECT_ERROR }, + { "NOT_SUPPORTED", LDAP_NOT_SUPPORTED }, + { "CONTROL_NOT_FOUND", LDAP_CONTROL_NOT_FOUND }, + { "NO_RESULTS_RETURNED", LDAP_NO_RESULTS_RETURNED }, + { "MORE_RESULTS_TO_RETURN", LDAP_MORE_RESULTS_TO_RETURN }, + { "CLIENT_LOOP", LDAP_CLIENT_LOOP }, + { "REFERRAL_LIMIT_EXCEEDED", LDAP_REFERRAL_LIMIT_EXCEEDED }, + + { NULL } +}; + +#define UNKNOWN_ERR (1234567890) + +static int +tester_ignore_str2err( const char *err ) +{ + int i, ignore = 1; + + if ( strcmp( err, "ALL" ) == 0 ) { + for ( i = 0; ignore_str2err[ i ].name != NULL; i++ ) { + ignore_count[ ignore_str2err[ i ].err ] = 1; + } + ignore_count[ LDAP_SUCCESS ] = 0; + + return 0; + } + + if ( err[ 0 ] == '!' ) { + ignore = 0; + err++; + + } else if ( err[ 0 ] == '*' ) { + ignore = -1; + err++; + } + + for ( i = 0; ignore_str2err[ i ].name != NULL; i++ ) { + if ( strcmp( err, ignore_str2err[ i ].name ) == 0 ) { + int err = ignore_str2err[ i ].err; + + if ( err != LDAP_SUCCESS ) { + ignore_count[ err ] = ignore; + } + + return err; + } + } + + return UNKNOWN_ERR; +} + +int +tester_ignore_str2errlist( const char *err ) +{ + int i; + char **errs = ldap_str2charray( err, "," ); + + for ( i = 0; errs[ i ] != NULL; i++ ) { + /* TODO: allow <err>:<prog> to ignore <err> only when <prog> */ + (void)tester_ignore_str2err( errs[ i ] ); + } + + ldap_charray_free( errs ); + + return 0; +} + +int +tester_ignore_err( int err ) +{ + int rc = 1; + + if ( err && TESTER_CLIENT_FIRST <= err && err <= TESTER_SERVER_LAST ) { + rc = ignore_count[ err ]; + if ( rc != 0 ) { + ignore_count[ err ] = rc + (rc > 0 ? 1 : -1); + } + } + + /* SUCCESS is always "ignored" */ + return rc; +} + +void +tester_init( const char *pname, tester_t ptype ) +{ + pid = getpid(); + srand( pid ); + snprintf( progname, sizeof( progname ), "%s PID=%d", pname, pid ); + progtype = ptype; +} + +char * +tester_uri( char *uri, char *host, int port ) +{ + static char uribuf[ BUFSIZ ]; + + if ( uri != NULL ) { + return uri; + } + + snprintf( uribuf, sizeof( uribuf ), "ldap://%s:%d", host, port ); + + return uribuf; +} + +void +tester_ldap_error( LDAP *ld, const char *fname, const char *msg ) +{ + int err; + char *text = NULL; + LDAPControl **ctrls = NULL; + + ldap_get_option( ld, LDAP_OPT_RESULT_CODE, (void *)&err ); + if ( err != LDAP_SUCCESS ) { + ldap_get_option( ld, LDAP_OPT_DIAGNOSTIC_MESSAGE, (void *)&text ); + } + + fprintf( stderr, "%s: %s: %s (%d) %s %s\n", + progname, fname, ldap_err2string( err ), err, + text == NULL ? "" : text, + msg ? msg : "" ); + + if ( text ) { + ldap_memfree( text ); + text = NULL; + } + + ldap_get_option( ld, LDAP_OPT_MATCHED_DN, (void *)&text ); + if ( text != NULL ) { + if ( text[ 0 ] != '\0' ) { + fprintf( stderr, "\tmatched: %s\n", text ); + } + ldap_memfree( text ); + text = NULL; + } + + ldap_get_option( ld, LDAP_OPT_SERVER_CONTROLS, (void *)&ctrls ); + if ( ctrls != NULL ) { + int i; + + fprintf( stderr, "\tcontrols:\n" ); + for ( i = 0; ctrls[ i ] != NULL; i++ ) { + fprintf( stderr, "\t\t%s\n", ctrls[ i ]->ldctl_oid ); + } + ldap_controls_free( ctrls ); + ctrls = NULL; + } + + if ( err == LDAP_REFERRAL ) { + char **refs = NULL; + + ldap_get_option( ld, LDAP_OPT_REFERRAL_URLS, (void *)&refs ); + + if ( refs ) { + int i; + + fprintf( stderr, "\treferral:\n" ); + for ( i = 0; refs[ i ] != NULL; i++ ) { + fprintf( stderr, "\t\t%s\n", refs[ i ] ); + } + + ber_memvfree( (void **)refs ); + } + } +} + +void +tester_perror( const char *fname, const char *msg ) +{ + int save_errno = errno; + char buf[ BUFSIZ ]; + + fprintf( stderr, "%s: %s: (%d) %s %s\n", + progname, fname, save_errno, + AC_STRERROR_R( save_errno, buf, sizeof( buf ) ), + msg ? msg : "" ); +} + +void +tester_error( const char *msg ) +{ + fprintf( stderr, "%s: %s\n", progname, msg ); +} diff --git a/tests/progs/slapd-common.h b/tests/progs/slapd-common.h new file mode 100644 index 0000000..c86a0ed --- /dev/null +++ b/tests/progs/slapd-common.h @@ -0,0 +1,44 @@ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software <http://www.openldap.org/>. + * + * Copyright 1999-2018 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 file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * <http://www.OpenLDAP.org/license.html>. + */ +/* ACKNOWLEDGEMENTS: + * This work was initially developed by Howard Chu for inclusion + * in OpenLDAP Software. + */ + +#ifndef SLAPD_COMMON_H +#define SLAPD_COMMON_H + +typedef enum { + TESTER_TESTER, + TESTER_ADDEL, + TESTER_BIND, + TESTER_MODIFY, + TESTER_MODRDN, + TESTER_READ, + TESTER_SEARCH, + TESTER_LAST +} tester_t; + +extern void tester_init( const char *pname, tester_t ptype ); +extern char * tester_uri( char *uri, char *host, int port ); +extern void tester_error( const char *msg ); +extern void tester_perror( const char *fname, const char *msg ); +extern void tester_ldap_error( LDAP *ld, const char *fname, const char *msg ); +extern int tester_ignore_str2errlist( const char *err ); +extern int tester_ignore_err( int err ); + +extern pid_t pid; + +#endif /* SLAPD_COMMON_H */ diff --git a/tests/progs/slapd-modify.c b/tests/progs/slapd-modify.c new file mode 100644 index 0000000..2f8dba0 --- /dev/null +++ b/tests/progs/slapd-modify.c @@ -0,0 +1,318 @@ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software <http://www.openldap.org/>. + * + * Copyright 1999-2018 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 file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * <http://www.OpenLDAP.org/license.html>. + */ + +#include "portable.h" + +#include <stdio.h> + +#include "ac/stdlib.h" + +#include "ac/ctype.h" +#include "ac/param.h" +#include "ac/socket.h" +#include "ac/string.h" +#include "ac/unistd.h" +#include "ac/wait.h" + +#include "ldap.h" +#include "lutil.h" + +#include "slapd-common.h" + +#define LOOPS 100 +#define RETRIES 0 + +static void +do_modify( char *uri, char *manager, struct berval *passwd, + char *entry, char *attr, char *value, int maxloop, + int maxretries, int delay, int friendly, int chaserefs ); + + +static void +usage( char *name ) +{ + fprintf( stderr, + "usage: %s " + "-H <uri> | ([-h <host>] -p <port>) " + "-D <manager> " + "-w <passwd> " + "-e <entry> " + "[-i <ignore>] " + "[-l <loops>] " + "[-L <outerloops>] " + "[-r <maxretries>] " + "[-t <delay>] " + "[-F] " + "[-C]\n", + name ); + exit( EXIT_FAILURE ); +} + +int +main( int argc, char **argv ) +{ + int i; + char *uri = NULL; + char *host = "localhost"; + int port = -1; + char *manager = NULL; + struct berval passwd = { 0, NULL }; + char *entry = NULL; + char *ava = NULL; + char *value = NULL; + int loops = LOOPS; + int outerloops = 1; + int retries = RETRIES; + int delay = 0; + int friendly = 0; + int chaserefs = 0; + + tester_init( "slapd-modify", TESTER_MODIFY ); + + while ( ( i = getopt( argc, argv, "a:CD:e:FH:h:i:L:l:p:r:t:w:" ) ) != EOF ) + { + switch ( i ) { + case 'C': + chaserefs++; + break; + + case 'F': + friendly++; + break; + + case 'H': /* the server uri */ + uri = strdup( optarg ); + break; + + case 'h': /* the servers host */ + host = strdup( optarg ); + break; + + case 'i': + /* ignored (!) by now */ + break; + + case 'p': /* the servers port */ + if ( lutil_atoi( &port, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'D': /* the servers manager */ + manager = strdup( optarg ); + break; + + case 'w': /* the server managers password */ + passwd.bv_val = strdup( optarg ); + passwd.bv_len = strlen( optarg ); + memset( optarg, '*', passwd.bv_len ); + break; + + case 'e': /* entry to modify */ + entry = strdup( optarg ); + break; + + case 'a': + ava = strdup( optarg ); + break; + + case 'l': /* the number of loops */ + if ( lutil_atoi( &loops, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'L': /* the number of outerloops */ + if ( lutil_atoi( &outerloops, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'r': /* number of retries */ + if ( lutil_atoi( &retries, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 't': /* delay in seconds */ + if ( lutil_atoi( &delay, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + default: + usage( argv[0] ); + break; + } + } + + if (( entry == NULL ) || ( ava == NULL ) || ( port == -1 && uri == NULL )) + usage( argv[0] ); + + if ( *entry == '\0' ) { + + fprintf( stderr, "%s: invalid EMPTY entry DN.\n", + argv[0] ); + exit( EXIT_FAILURE ); + + } + if ( *ava == '\0' ) { + fprintf( stderr, "%s: invalid EMPTY AVA.\n", + argv[0] ); + exit( EXIT_FAILURE ); + } + + if ( !( value = strchr( ava, ':' ))) { + fprintf( stderr, "%s: invalid AVA.\n", + argv[0] ); + exit( EXIT_FAILURE ); + } + *value++ = '\0'; + while ( *value && isspace( (unsigned char) *value )) + value++; + + uri = tester_uri( uri, host, port ); + + for ( i = 0; i < outerloops; i++ ) { + do_modify( uri, manager, &passwd, entry, ava, value, + loops, retries, delay, friendly, chaserefs ); + } + + exit( EXIT_SUCCESS ); +} + + +static void +do_modify( char *uri, char *manager, + struct berval *passwd, char *entry, char* attr, char* value, + int maxloop, int maxretries, int delay, int friendly, int chaserefs ) +{ + LDAP *ld = NULL; + int i = 0, do_retry = maxretries; + int rc = LDAP_SUCCESS; + + struct ldapmod mod; + struct ldapmod *mods[2]; + char *values[2]; + int version = LDAP_VERSION3; + + values[0] = value; + values[1] = NULL; + mod.mod_op = LDAP_MOD_ADD; + mod.mod_type = attr; + mod.mod_values = values; + mods[0] = &mod; + mods[1] = NULL; + +retry:; + ldap_initialize( &ld, uri ); + if ( ld == NULL ) { + tester_perror( "ldap_initialize", NULL ); + exit( EXIT_FAILURE ); + } + + (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); + (void) ldap_set_option( ld, LDAP_OPT_REFERRALS, + chaserefs ? LDAP_OPT_ON : LDAP_OPT_OFF ); + + if ( do_retry == maxretries ) { + fprintf( stderr, "PID=%ld - Modify(%d): entry=\"%s\".\n", + (long) pid, maxloop, entry ); + } + + rc = ldap_sasl_bind_s( ld, manager, LDAP_SASL_SIMPLE, passwd, NULL, NULL, NULL ); + if ( rc != LDAP_SUCCESS ) { + tester_ldap_error( ld, "ldap_sasl_bind_s", NULL ); + switch ( rc ) { + case LDAP_BUSY: + case LDAP_UNAVAILABLE: + if ( do_retry > 0 ) { + do_retry--; + if ( delay > 0 ) { + sleep( delay ); + } + goto retry; + } + /* fallthru */ + default: + break; + } + exit( EXIT_FAILURE ); + } + + for ( ; i < maxloop; i++ ) { + mod.mod_op = LDAP_MOD_ADD; + rc = ldap_modify_ext_s( ld, entry, mods, NULL, NULL ); + if ( rc != LDAP_SUCCESS ) { + tester_ldap_error( ld, "ldap_modify_ext_s", NULL ); + switch ( rc ) { + case LDAP_TYPE_OR_VALUE_EXISTS: + /* NOTE: this likely means + * the second modify failed + * during the previous round... */ + if ( !friendly ) { + goto done; + } + break; + + case LDAP_BUSY: + case LDAP_UNAVAILABLE: + if ( do_retry > 0 ) { + do_retry--; + goto retry; + } + /* fall thru */ + + default: + goto done; + } + } + + mod.mod_op = LDAP_MOD_DELETE; + rc = ldap_modify_ext_s( ld, entry, mods, NULL, NULL ); + if ( rc != LDAP_SUCCESS ) { + tester_ldap_error( ld, "ldap_modify_ext_s", NULL ); + switch ( rc ) { + case LDAP_NO_SUCH_ATTRIBUTE: + /* NOTE: this likely means + * the first modify failed + * during the previous round... */ + if ( !friendly ) { + goto done; + } + break; + + case LDAP_BUSY: + case LDAP_UNAVAILABLE: + if ( do_retry > 0 ) { + do_retry--; + goto retry; + } + /* fall thru */ + + default: + goto done; + } + } + + } + +done:; + fprintf( stderr, " PID=%ld - Modify done (%d).\n", (long) pid, rc ); + + ldap_unbind_ext( ld, NULL, NULL ); +} + + diff --git a/tests/progs/slapd-modrdn.c b/tests/progs/slapd-modrdn.c new file mode 100644 index 0000000..82af2e5 --- /dev/null +++ b/tests/progs/slapd-modrdn.c @@ -0,0 +1,310 @@ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software <http://www.openldap.org/>. + * + * Copyright 1999-2018 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 file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * <http://www.OpenLDAP.org/license.html>. + */ +/* ACKNOWLEDGEMENTS: + * This work was initially developed by Howard Chu, based in part + * on other OpenLDAP test tools, for inclusion in OpenLDAP Software. + */ + +#include "portable.h" + +#include <stdio.h> + +#include "ac/stdlib.h" + +#include "ac/ctype.h" +#include "ac/param.h" +#include "ac/socket.h" +#include "ac/string.h" +#include "ac/unistd.h" +#include "ac/wait.h" + +#include "ldap.h" +#include "lutil.h" + +#include "slapd-common.h" + +#define LOOPS 100 +#define RETRIES 0 + +static void +do_modrdn( char *uri, char *manager, struct berval *passwd, + char *entry, int maxloop, int maxretries, int delay, + int friendly, int chaserefs ); + +static void +usage( char *name ) +{ + fprintf( stderr, + "usage: %s " + "-H <uri> | ([-h <host>] -p <port>) " + "-D <manager> " + "-w <passwd> " + "-e <entry> " + "[-i <ignore>] " + "[-l <loops>] " + "[-L <outerloops>] " + "[-r <maxretries>] " + "[-t <delay>] " + "[-F] " + "[-C]\n", + name ); + exit( EXIT_FAILURE ); +} + +int +main( int argc, char **argv ) +{ + int i; + char *uri = NULL; + char *host = "localhost"; + int port = -1; + char *manager = NULL; + struct berval passwd = { 0, NULL }; + char *entry = NULL; + int loops = LOOPS; + int outerloops = 1; + int retries = RETRIES; + int delay = 0; + int friendly = 0; + int chaserefs = 0; + + tester_init( "slapd-modrdn", TESTER_MODRDN ); + + while ( ( i = getopt( argc, argv, "CD:e:FH:h:i:L:l:p:r:t:w:" ) ) != EOF ) + { + switch ( i ) { + case 'C': + chaserefs++; + break; + + case 'F': + friendly++; + break; + + case 'H': /* the server uri */ + uri = strdup( optarg ); + break; + + case 'h': /* the servers host */ + host = strdup( optarg ); + break; + + case 'i': + /* ignored (!) by now */ + break; + + case 'p': /* the servers port */ + if ( lutil_atoi( &port, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'D': /* the servers manager */ + manager = strdup( optarg ); + break; + + case 'w': /* the server managers password */ + passwd.bv_val = strdup( optarg ); + passwd.bv_len = strlen( optarg ); + memset( optarg, '*', passwd.bv_len ); + break; + + case 'e': /* entry to rename */ + entry = strdup( optarg ); + break; + + case 'l': /* the number of loops */ + if ( lutil_atoi( &loops, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'L': /* the number of outerloops */ + if ( lutil_atoi( &outerloops, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'r': /* the number of retries */ + if ( lutil_atoi( &retries, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 't': /* delay in seconds */ + if ( lutil_atoi( &delay, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + default: + usage( argv[0] ); + break; + } + } + + if (( entry == NULL ) || ( port == -1 && uri == NULL )) + usage( argv[0] ); + + if ( *entry == '\0' ) { + + fprintf( stderr, "%s: invalid EMPTY entry DN.\n", + argv[0] ); + exit( EXIT_FAILURE ); + + } + + uri = tester_uri( uri, host, port ); + + for ( i = 0; i < outerloops; i++ ) { + do_modrdn( uri, manager, &passwd, entry, + loops, retries, delay, friendly, chaserefs ); + } + + exit( EXIT_SUCCESS ); +} + + +static void +do_modrdn( char *uri, char *manager, + struct berval *passwd, char *entry, int maxloop, int maxretries, + int delay, int friendly, int chaserefs ) +{ + LDAP *ld = NULL; + int i, do_retry = maxretries; + char *DNs[2]; + char *rdns[2]; + int rc = LDAP_SUCCESS; + char *p1, *p2; + int version = LDAP_VERSION3; + + DNs[0] = entry; + DNs[1] = strdup( entry ); + + /* reverse the RDN, make new DN */ + p1 = strchr( entry, '=' ) + 1; + p2 = strchr( p1, ',' ); + + *p2 = '\0'; + rdns[1] = strdup( entry ); + *p2-- = ','; + + for (i = p1 - entry;p2 >= p1;) + DNs[1][i++] = *p2--; + + DNs[1][i] = '\0'; + rdns[0] = strdup( DNs[1] ); + DNs[1][i] = ','; + + i = 0; + +retry:; + ldap_initialize( &ld, uri ); + if ( ld == NULL ) { + tester_perror( "ldap_initialize", NULL ); + exit( EXIT_FAILURE ); + } + + (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); + (void) ldap_set_option( ld, LDAP_OPT_REFERRALS, + chaserefs ? LDAP_OPT_ON : LDAP_OPT_OFF ); + + if ( do_retry == maxretries ) { + fprintf( stderr, "PID=%ld - Modrdn(%d): entry=\"%s\".\n", + (long) pid, maxloop, entry ); + } + + rc = ldap_sasl_bind_s( ld, manager, LDAP_SASL_SIMPLE, passwd, NULL, NULL, NULL ); + if ( rc != LDAP_SUCCESS ) { + tester_ldap_error( ld, "ldap_sasl_bind_s", NULL ); + switch ( rc ) { + case LDAP_BUSY: + case LDAP_UNAVAILABLE: + if ( do_retry > 0 ) { + do_retry--; + if ( delay > 0) { + sleep( delay ); + } + goto retry; + } + /* fallthru */ + default: + break; + } + exit( EXIT_FAILURE ); + } + + for ( ; i < maxloop; i++ ) { + rc = ldap_rename_s( ld, DNs[0], rdns[0], NULL, 0, NULL, NULL ); + if ( rc != LDAP_SUCCESS ) { + tester_ldap_error( ld, "ldap_rename_s", NULL ); + switch ( rc ) { + case LDAP_NO_SUCH_OBJECT: + /* NOTE: this likely means + * the second modrdn failed + * during the previous round... */ + if ( !friendly ) { + goto done; + } + break; + + case LDAP_BUSY: + case LDAP_UNAVAILABLE: + if ( do_retry > 0 ) { + do_retry--; + goto retry; + } + /* fall thru */ + + default: + goto done; + } + } + rc = ldap_rename_s( ld, DNs[1], rdns[1], NULL, 1, NULL, NULL ); + if ( rc != LDAP_SUCCESS ) { + tester_ldap_error( ld, "ldap_rename_s", NULL ); + switch ( rc ) { + case LDAP_NO_SUCH_OBJECT: + /* NOTE: this likely means + * the first modrdn failed + * during the previous round... */ + if ( !friendly ) { + goto done; + } + break; + + case LDAP_BUSY: + case LDAP_UNAVAILABLE: + if ( do_retry > 0 ) { + do_retry--; + goto retry; + } + /* fall thru */ + + default: + goto done; + } + } + } + +done:; + fprintf( stderr, " PID=%ld - Modrdn done (%d).\n", (long) pid, rc ); + + ldap_unbind_ext( ld, NULL, NULL ); + + free( DNs[1] ); + free( rdns[0] ); + free( rdns[1] ); +} diff --git a/tests/progs/slapd-mtread.c b/tests/progs/slapd-mtread.c new file mode 100644 index 0000000..2bcd1cd --- /dev/null +++ b/tests/progs/slapd-mtread.c @@ -0,0 +1,837 @@ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software <http://www.openldap.org/>. + * + * Copyright 1999-2018 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 file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * <http://www.OpenLDAP.org/license.html>. + */ +/* ACKNOWLEDGEMENTS: + * This work was initially developed by Kurt Spanier for inclusion + * in OpenLDAP Software. + */ + +/* + * This tool is a MT reader. It behaves like slapd-read however + * with one or more threads simultaneously using the same connection. + * If -M is enabled, then M threads will also perform write operations. + */ + +#include "portable.h" + +#include <stdio.h> +#include "ldap_pvt_thread.h" + +#include "ac/stdlib.h" + +#include "ac/ctype.h" +#include "ac/param.h" +#include "ac/socket.h" +#include "ac/string.h" +#include "ac/unistd.h" +#include "ac/wait.h" + +#include "ldap.h" +#include "lutil.h" + +#include "ldap_pvt.h" + +#include "slapd-common.h" + +#define MAXCONN 512 +#define LOOPS 100 +#define RETRIES 0 +#define DEFAULT_BASE "ou=people,dc=example,dc=com" + +static void +do_conn( char *uri, char *manager, struct berval *passwd, + LDAP **ld, int nobind, int maxretries, int conn_num ); + +static void +do_read( LDAP *ld, char *entry, + char **attrs, int noattrs, int nobind, int maxloop, + int maxretries, int delay, int force, int chaserefs, int idx ); + +static void +do_random( LDAP *ld, + char *sbase, char *filter, char **attrs, int noattrs, int nobind, + int innerloop, int maxretries, int delay, int force, int chaserefs, + int idx ); + +static void +do_random2( LDAP *ld, + char *sbase, char *filter, char **attrs, int noattrs, int nobind, + int innerloop, int maxretries, int delay, int force, int chaserefs, + int idx ); + +static void * +do_onethread( void *arg ); + +static void * +do_onerwthread( void *arg ); + +#define MAX_THREAD 1024 +/* Use same array for readers and writers, offset writers by MAX_THREAD */ +int rt_pass[MAX_THREAD*2]; +int rt_fail[MAX_THREAD*2]; +int *rwt_pass = rt_pass + MAX_THREAD; +int *rwt_fail = rt_fail + MAX_THREAD; +ldap_pvt_thread_t rtid[MAX_THREAD*2], *rwtid = rtid + MAX_THREAD; + +/* + * Shared globals (command line args) + */ +LDAP *ld = NULL; +char *entry = NULL; +char *filter = NULL; +int loops = LOOPS; +int outerloops = 1; +int retries = RETRIES; +int delay = 0; +int force = 0; +int chaserefs = 0; +char *srchattrs[] = { "1.1", NULL }; +char **attrs = srchattrs; +int noattrs = 0; +int nobind = 0; +int threads = 1; +int rwthreads = 0; +int verbose = 0; + +int noconns = 1; +LDAP **lds = NULL; + +static void +thread_error(int idx, char *string) +{ + char thrstr[BUFSIZ]; + + snprintf(thrstr, BUFSIZ, "error on tidx: %d: %s", idx, string); + tester_error( thrstr ); +} + +static void +thread_output(int idx, char *string) +{ + char thrstr[BUFSIZ]; + + snprintf(thrstr, BUFSIZ, "tidx: %d says: %s", idx, string); + tester_error( thrstr ); +} + +static void +thread_verbose(int idx, char *string) +{ + char thrstr[BUFSIZ]; + + if (!verbose) + return; + snprintf(thrstr, BUFSIZ, "tidx: %d says: %s", idx, string); + tester_error( thrstr ); +} + +static void +usage( char *name ) +{ + fprintf( stderr, + "usage: %s " + "-H <uri> | ([-h <host>] -p <port>) " + "-D <manager> " + "-w <passwd> " + "-e <entry> " + "[-A] " + "[-C] " + "[-F] " + "[-N] " + "[-v] " + "[-c connections] " + "[-f filter] " + "[-i <ignore>] " + "[-l <loops>] " + "[-L <outerloops>] " + "[-m threads] " + "[-M threads] " + "[-r <maxretries>] " + "[-t <delay>] " + "[-T <attrs>] " + "[<attrs>] " + "\n", + name ); + exit( EXIT_FAILURE ); +} + +int +main( int argc, char **argv ) +{ + int i; + char *uri = NULL; + char *host = "localhost"; + int port = -1; + char *manager = NULL; + struct berval passwd = { 0, NULL }; + char outstr[BUFSIZ]; + int ptpass; + int testfail = 0; + + + tester_init( "slapd-mtread", TESTER_READ ); + + /* by default, tolerate referrals and no such object */ + tester_ignore_str2errlist( "REFERRAL,NO_SUCH_OBJECT" ); + + while ( (i = getopt( argc, argv, "ACc:D:e:Ff:H:h:i:L:l:M:m:p:r:t:T:w:v" )) != EOF ) { + switch ( i ) { + case 'A': + noattrs++; + break; + + case 'C': + chaserefs++; + break; + + case 'H': /* the server uri */ + uri = strdup( optarg ); + break; + + case 'h': /* the servers host */ + host = strdup( optarg ); + break; + + case 'i': + tester_ignore_str2errlist( optarg ); + break; + + case 'N': + nobind++; + break; + + case 'v': + verbose++; + break; + + case 'p': /* the servers port */ + if ( lutil_atoi( &port, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'D': /* the servers manager */ + manager = strdup( optarg ); + break; + + case 'w': /* the server managers password */ + passwd.bv_val = strdup( optarg ); + passwd.bv_len = strlen( optarg ); + memset( optarg, '*', passwd.bv_len ); + break; + + case 'c': /* the number of connections */ + if ( lutil_atoi( &noconns, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'e': /* DN to search for */ + entry = strdup( optarg ); + break; + + case 'f': /* the search request */ + filter = strdup( optarg ); + break; + + case 'F': + force++; + break; + + case 'l': /* the number of loops */ + if ( lutil_atoi( &loops, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'L': /* the number of outerloops */ + if ( lutil_atoi( &outerloops, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'M': /* the number of R/W threads */ + if ( lutil_atoi( &rwthreads, optarg ) != 0 ) { + usage( argv[0] ); + } + if (rwthreads > MAX_THREAD) + rwthreads = MAX_THREAD; + break; + + case 'm': /* the number of threads */ + if ( lutil_atoi( &threads, optarg ) != 0 ) { + usage( argv[0] ); + } + if (threads > MAX_THREAD) + threads = MAX_THREAD; + break; + + case 'r': /* the number of retries */ + if ( lutil_atoi( &retries, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 't': /* delay in seconds */ + if ( lutil_atoi( &delay, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'T': + attrs = ldap_str2charray( optarg, "," ); + if ( attrs == NULL ) { + usage( argv[0] ); + } + break; + + default: + usage( argv[0] ); + break; + } + } + + if (( entry == NULL ) || ( port == -1 && uri == NULL )) + usage( argv[0] ); + + if ( *entry == '\0' ) { + fprintf( stderr, "%s: invalid EMPTY entry DN.\n", + argv[0] ); + exit( EXIT_FAILURE ); + } + + if ( argv[optind] != NULL ) { + attrs = &argv[optind]; + } + + if (noconns < 1) + noconns = 1; + if (noconns > MAXCONN) + noconns = MAXCONN; + lds = (LDAP **) calloc( sizeof(LDAP *), noconns); + if (lds == NULL) { + fprintf( stderr, "%s: Memory error: calloc noconns.\n", + argv[0] ); + exit( EXIT_FAILURE ); + } + + uri = tester_uri( uri, host, port ); + /* One connection and one connection only */ + do_conn( uri, manager, &passwd, &ld, nobind, retries, 0 ); + lds[0] = ld; + for(i = 1; i < noconns; i++) { + do_conn( uri, manager, &passwd, &lds[i], nobind, retries, i ); + } + + ldap_pvt_thread_initialize(); + + snprintf(outstr, BUFSIZ, "MT Test Start: conns: %d (%s)", noconns, uri); + tester_error(outstr); + snprintf(outstr, BUFSIZ, "Threads: RO: %d RW: %d", threads, rwthreads); + tester_error(outstr); + + /* Set up read only threads */ + for ( i = 0; i < threads; i++ ) { + ldap_pvt_thread_create( &rtid[i], 0, do_onethread, &rtid[i]); + snprintf(outstr, BUFSIZ, "Created RO thread %d", i); + thread_verbose(-1, outstr); + } + /* Set up read/write threads */ + for ( i = 0; i < rwthreads; i++ ) { + ldap_pvt_thread_create( &rwtid[i], 0, do_onerwthread, &rwtid[i]); + snprintf(outstr, BUFSIZ, "Created RW thread %d", i + MAX_THREAD); + thread_verbose(-1, outstr); + } + + ptpass = outerloops * loops; + + /* wait for read only threads to complete */ + for ( i = 0; i < threads; i++ ) + ldap_pvt_thread_join(rtid[i], NULL); + /* wait for read/write threads to complete */ + for ( i = 0; i < rwthreads; i++ ) + ldap_pvt_thread_join(rwtid[i], NULL); + + for(i = 0; i < noconns; i++) { + if ( lds[i] != NULL ) { + ldap_unbind_ext( lds[i], NULL, NULL ); + } + } + free( lds ); + + for ( i = 0; i < threads; i++ ) { + snprintf(outstr, BUFSIZ, "RO thread %d pass=%d fail=%d", i, + rt_pass[i], rt_fail[i]); + tester_error(outstr); + if (rt_fail[i] != 0 || rt_pass[i] != ptpass) { + snprintf(outstr, BUFSIZ, "FAIL RO thread %d", i); + tester_error(outstr); + testfail++; + } + } + for ( i = 0; i < rwthreads; i++ ) { + snprintf(outstr, BUFSIZ, "RW thread %d pass=%d fail=%d", i + MAX_THREAD, + rwt_pass[i], rwt_fail[i]); + tester_error(outstr); + if (rwt_fail[i] != 0 || rwt_pass[i] != ptpass) { + snprintf(outstr, BUFSIZ, "FAIL RW thread %d", i); + tester_error(outstr); + testfail++; + } + } + snprintf(outstr, BUFSIZ, "MT Test complete" ); + tester_error(outstr); + + if (testfail) + exit( EXIT_FAILURE ); + exit( EXIT_SUCCESS ); +} + +static void * +do_onethread( void *arg ) +{ + int i, j, thisconn; + LDAP **mlds; + char thrstr[BUFSIZ]; + int rc, refcnt = 0; + int idx = (ldap_pvt_thread_t *)arg - rtid; + + mlds = (LDAP **) calloc( sizeof(LDAP *), noconns); + if (mlds == NULL) { + thread_error( idx, "Memory error: thread calloc for noconns" ); + exit( EXIT_FAILURE ); + } + + for ( j = 0; j < outerloops; j++ ) { + for(i = 0; i < noconns; i++) { + mlds[i] = ldap_dup(lds[i]); + if (mlds[i] == NULL) { + thread_error( idx, "ldap_dup error" ); + } + } + rc = ldap_get_option(mlds[0], LDAP_OPT_SESSION_REFCNT, &refcnt); + snprintf(thrstr, BUFSIZ, + "RO Thread conns: %d refcnt: %d (rc = %d)", + noconns, refcnt, rc); + thread_verbose(idx, thrstr); + + thisconn = (idx + j) % noconns; + if (thisconn < 0 || thisconn >= noconns) + thisconn = 0; + if (mlds[thisconn] == NULL) { + thread_error( idx, "(failed to dup)"); + tester_perror( "ldap_dup", "(failed to dup)" ); + exit( EXIT_FAILURE ); + } + snprintf(thrstr, BUFSIZ, "Using conn %d", thisconn); + thread_verbose(idx, thrstr); + if ( filter != NULL ) { + if (strchr(filter, '[')) + do_random2( mlds[thisconn], entry, filter, attrs, + noattrs, nobind, loops, retries, delay, force, + chaserefs, idx ); + else + do_random( mlds[thisconn], entry, filter, attrs, + noattrs, nobind, loops, retries, delay, force, + chaserefs, idx ); + + } else { + do_read( mlds[thisconn], entry, attrs, + noattrs, nobind, loops, retries, delay, force, + chaserefs, idx ); + } + for(i = 0; i < noconns; i++) { + (void) ldap_destroy(mlds[i]); + mlds[i] = NULL; + } + } + free( mlds ); + return( NULL ); +} + +static void * +do_onerwthread( void *arg ) +{ + int i, j, thisconn; + LDAP **mlds, *ld; + char thrstr[BUFSIZ]; + char dn[256], uids[32], cns[32], *base; + LDAPMod *attrp[5], attrs[4]; + char *oc_vals[] = { "top", "OpenLDAPperson", NULL }; + char *cn_vals[] = { NULL, NULL }; + char *sn_vals[] = { NULL, NULL }; + char *uid_vals[] = { NULL, NULL }; + int ret; + int adds = 0; + int dels = 0; + int rc, refcnt = 0; + int idx = (ldap_pvt_thread_t *)arg - rtid; + + mlds = (LDAP **) calloc( sizeof(LDAP *), noconns); + if (mlds == NULL) { + thread_error( idx, "Memory error: thread calloc for noconns" ); + exit( EXIT_FAILURE ); + } + + snprintf(uids, sizeof(uids), "rwtest%04d", idx); + snprintf(cns, sizeof(cns), "rwtest%04d", idx); + /* add setup */ + for (i = 0; i < 4; i++) { + attrp[i] = &attrs[i]; + attrs[i].mod_op = 0; + } + attrp[4] = NULL; + attrs[0].mod_type = "objectClass"; + attrs[0].mod_values = oc_vals; + attrs[1].mod_type = "cn"; + attrs[1].mod_values = cn_vals; + cn_vals[0] = &cns[0]; + attrs[2].mod_type = "sn"; + attrs[2].mod_values = sn_vals; + sn_vals[0] = &cns[0]; + attrs[3].mod_type = "uid"; + attrs[3].mod_values = uid_vals; + uid_vals[0] = &uids[0]; + + for ( j = 0; j < outerloops; j++ ) { + for(i = 0; i < noconns; i++) { + mlds[i] = ldap_dup(lds[i]); + if (mlds[i] == NULL) { + thread_error( idx, "ldap_dup error" ); + } + } + rc = ldap_get_option(mlds[0], LDAP_OPT_SESSION_REFCNT, &refcnt); + snprintf(thrstr, BUFSIZ, + "RW Thread conns: %d refcnt: %d (rc = %d)", + noconns, refcnt, rc); + thread_verbose(idx, thrstr); + + thisconn = (idx + j) % noconns; + if (thisconn < 0 || thisconn >= noconns) + thisconn = 0; + if (mlds[thisconn] == NULL) { + thread_error( idx, "(failed to dup)"); + tester_perror( "ldap_dup", "(failed to dup)" ); + exit( EXIT_FAILURE ); + } + snprintf(thrstr, BUFSIZ, "START RW Thread using conn %d", thisconn); + thread_verbose(idx, thrstr); + + ld = mlds[thisconn]; + if (entry != NULL) + base = entry; + else + base = DEFAULT_BASE; + snprintf(dn, 256, "cn=%s,%s", cns, base); + + adds = 0; + dels = 0; + for (i = 0; i < loops; i++) { + ret = ldap_add_ext_s(ld, dn, &attrp[0], NULL, NULL); + if (ret == LDAP_SUCCESS) { + adds++; + ret = ldap_delete_ext_s(ld, dn, NULL, NULL); + if (ret == LDAP_SUCCESS) { + dels++; + rt_pass[idx]++; + } else { + thread_output(idx, ldap_err2string(ret)); + rt_fail[idx]++; + } + } else { + thread_output(idx, ldap_err2string(ret)); + rt_fail[idx]++; + } + } + + snprintf(thrstr, BUFSIZ, + "INNER STOP RW Thread using conn %d (%d/%d)", + thisconn, adds, dels); + thread_verbose(idx, thrstr); + + for(i = 0; i < noconns; i++) { + (void) ldap_destroy(mlds[i]); + mlds[i] = NULL; + } + } + + free( mlds ); + return( NULL ); +} + +static void +do_conn( char *uri, char *manager, struct berval *passwd, + LDAP **ldp, int nobind, int maxretries, int conn_num ) +{ + LDAP *ld = NULL; + int version = LDAP_VERSION3; + int do_retry = maxretries; + int rc = LDAP_SUCCESS; + char thrstr[BUFSIZ]; + +retry:; + ldap_initialize( &ld, uri ); + if ( ld == NULL ) { + snprintf( thrstr, BUFSIZ, "connection: %d", conn_num ); + tester_error( thrstr ); + tester_perror( "ldap_initialize", NULL ); + exit( EXIT_FAILURE ); + } + + (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); + (void) ldap_set_option( ld, LDAP_OPT_REFERRALS, + chaserefs ? LDAP_OPT_ON : LDAP_OPT_OFF ); + + if ( do_retry == maxretries ) { + snprintf( thrstr, BUFSIZ, "do_conn #%d\n", conn_num ); + thread_verbose( -1, thrstr ); + } + + if ( nobind == 0 ) { + rc = ldap_sasl_bind_s( ld, manager, LDAP_SASL_SIMPLE, passwd, NULL, NULL, NULL ); + if ( rc != LDAP_SUCCESS ) { + snprintf( thrstr, BUFSIZ, "connection: %d", conn_num ); + tester_error( thrstr ); + tester_ldap_error( ld, "ldap_sasl_bind_s", NULL ); + switch ( rc ) { + case LDAP_BUSY: + case LDAP_UNAVAILABLE: + if ( do_retry > 0 ) { + ldap_unbind_ext( ld, NULL, NULL ); + ld = NULL; + do_retry--; + if ( delay != 0 ) { + sleep( delay ); + } + goto retry; + } + /* fallthru */ + default: + break; + } + exit( EXIT_FAILURE ); + } + } + *ldp = ld; +} + +static void +do_random( LDAP *ld, + char *sbase, char *filter, char **srchattrs, int noattrs, int nobind, + int innerloop, int maxretries, int delay, int force, int chaserefs, + int idx ) +{ + int i = 0, do_retry = maxretries; + char *attrs[ 2 ]; + int rc = LDAP_SUCCESS; + int nvalues = 0; + char **values = NULL; + LDAPMessage *res = NULL, *e = NULL; + char thrstr[BUFSIZ]; + + attrs[ 0 ] = LDAP_NO_ATTRS; + attrs[ 1 ] = NULL; + + snprintf( thrstr, BUFSIZ, + "Read(%d): base=\"%s\", filter=\"%s\".\n", + innerloop, sbase, filter ); + thread_verbose( idx, thrstr ); + + rc = ldap_search_ext_s( ld, sbase, LDAP_SCOPE_SUBTREE, + filter, attrs, 0, NULL, NULL, NULL, LDAP_NO_LIMIT, &res ); + switch ( rc ) { + case LDAP_SIZELIMIT_EXCEEDED: + case LDAP_TIMELIMIT_EXCEEDED: + case LDAP_SUCCESS: + nvalues = ldap_count_entries( ld, res ); + if ( nvalues == 0 ) { + if ( rc ) { + tester_ldap_error( ld, "ldap_search_ext_s", NULL ); + } + break; + } + + values = malloc( ( nvalues + 1 ) * sizeof( char * ) ); + for ( i = 0, e = ldap_first_entry( ld, res ); e != NULL; i++, e = ldap_next_entry( ld, e ) ) + { + values[ i ] = ldap_get_dn( ld, e ); + } + values[ i ] = NULL; + + ldap_msgfree( res ); + + if ( do_retry == maxretries ) { + snprintf( thrstr, BUFSIZ, + "Read base=\"%s\" filter=\"%s\" got %d values.\n", + sbase, filter, nvalues ); + thread_verbose( idx, thrstr ); + } + + for ( i = 0; i < innerloop; i++ ) { + int r = ((double)nvalues)*rand()/(RAND_MAX + 1.0); + + do_read( ld, values[ r ], + srchattrs, noattrs, nobind, 1, maxretries, + delay, force, chaserefs, idx ); + } + for( i = 0; i < nvalues; i++) { + if (values[i] != NULL) + ldap_memfree( values[i] ); + } + free( values ); + break; + + default: + tester_ldap_error( ld, "ldap_search_ext_s", NULL ); + break; + } + + snprintf( thrstr, BUFSIZ, "Search done (%d).\n", rc ); + thread_verbose( idx, thrstr ); +} + +/* substitute a generated int into the filter */ +static void +do_random2( LDAP *ld, + char *sbase, char *filter, char **srchattrs, int noattrs, int nobind, + int innerloop, int maxretries, int delay, int force, int chaserefs, + int idx ) +{ + int i = 0, do_retry = maxretries; + int rc = LDAP_SUCCESS; + int lo, hi, range; + int flen; + LDAPMessage *res = NULL; + char *ptr, *ftail; + char thrstr[BUFSIZ]; + char fbuf[BUFSIZ]; + + snprintf( thrstr, BUFSIZ, + "Read(%d): base=\"%s\", filter=\"%s\".\n", + innerloop, sbase, filter ); + thread_verbose( idx, thrstr ); + + ptr = strchr(filter, '['); + if (!ptr) + return; + ftail = strchr(filter, ']'); + if (!ftail || ftail < ptr) + return; + + sscanf(ptr, "[%d-%d]", &lo, &hi); + range = hi - lo + 1; + + flen = ptr - filter; + ftail++; + + for ( i = 0; i < innerloop; i++ ) { + int r = ((double)range)*rand()/(RAND_MAX + 1.0); + sprintf(fbuf, "%.*s%d%s", flen, filter, r, ftail); + + rc = ldap_search_ext_s( ld, sbase, LDAP_SCOPE_SUBTREE, + fbuf, srchattrs, noattrs, NULL, NULL, NULL, + LDAP_NO_LIMIT, &res ); + if ( res != NULL ) { + ldap_msgfree( res ); + } + if ( rc == 0 ) { + rt_pass[idx]++; + } else { + int first = tester_ignore_err( rc ); + char buf[ BUFSIZ ]; + + rt_fail[idx]++; + snprintf( buf, sizeof( buf ), "ldap_search_ext_s(%s)", entry ); + + /* if ignore.. */ + if ( first ) { + /* only log if first occurrence */ + if ( ( force < 2 && first > 0 ) || abs(first) == 1 ) { + tester_ldap_error( ld, buf, NULL ); + } + continue; + } + + /* busy needs special handling */ + tester_ldap_error( ld, buf, NULL ); + if ( rc == LDAP_BUSY && do_retry > 0 ) { + do_retry--; + continue; + } + break; + } + } + + snprintf( thrstr, BUFSIZ, "Search done (%d).\n", rc ); + thread_verbose( idx, thrstr ); +} + +static void +do_read( LDAP *ld, char *entry, + char **attrs, int noattrs, int nobind, int maxloop, + int maxretries, int delay, int force, int chaserefs, int idx ) +{ + int i = 0, do_retry = maxretries; + int rc = LDAP_SUCCESS; + char thrstr[BUFSIZ]; + +retry:; + if ( do_retry == maxretries ) { + snprintf( thrstr, BUFSIZ, "Read(%d): entry=\"%s\".\n", + maxloop, entry ); + thread_verbose( idx, thrstr ); + } + + snprintf(thrstr, BUFSIZ, "LD %p cnt: %d (retried %d) (%s)", \ + (void *) ld, maxloop, (do_retry - maxretries), entry); + thread_verbose( idx, thrstr ); + + for ( ; i < maxloop; i++ ) { + LDAPMessage *res = NULL; + + rc = ldap_search_ext_s( ld, entry, LDAP_SCOPE_BASE, + NULL, attrs, noattrs, NULL, NULL, NULL, + LDAP_NO_LIMIT, &res ); + if ( res != NULL ) { + ldap_msgfree( res ); + } + + if ( rc == 0 ) { + rt_pass[idx]++; + } else { + int first = tester_ignore_err( rc ); + char buf[ BUFSIZ ]; + + rt_fail[idx]++; + snprintf( buf, sizeof( buf ), "ldap_search_ext_s(%s)", entry ); + + /* if ignore.. */ + if ( first ) { + /* only log if first occurrence */ + if ( ( force < 2 && first > 0 ) || abs(first) == 1 ) { + tester_ldap_error( ld, buf, NULL ); + } + continue; + } + + /* busy needs special handling */ + tester_ldap_error( ld, buf, NULL ); + if ( rc == LDAP_BUSY && do_retry > 0 ) { + do_retry--; + goto retry; + } + break; + } + } +} diff --git a/tests/progs/slapd-read.c b/tests/progs/slapd-read.c new file mode 100644 index 0000000..7d2bffb --- /dev/null +++ b/tests/progs/slapd-read.c @@ -0,0 +1,568 @@ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software <http://www.openldap.org/>. + * + * Copyright 1999-2018 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 file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * <http://www.OpenLDAP.org/license.html>. + */ +/* ACKNOWLEDGEMENTS: + * This work was initially developed by Kurt Spanier for inclusion + * in OpenLDAP Software. + */ + +#include "portable.h" + +#include <stdio.h> + +#include "ac/stdlib.h" + +#include "ac/ctype.h" +#include "ac/param.h" +#include "ac/socket.h" +#include "ac/string.h" +#include "ac/unistd.h" +#include "ac/wait.h" + +#include "ldap.h" +#include "lutil.h" + +#include "ldap_pvt.h" + +#include "slapd-common.h" + +#define LOOPS 100 +#define RETRIES 0 + +static void +do_read( char *uri, char *manager, struct berval *passwd, + char *entry, LDAP **ld, + char **attrs, int noattrs, int nobind, int maxloop, + int maxretries, int delay, int force, int chaserefs ); + +static void +do_random( char *uri, char *manager, struct berval *passwd, + char *sbase, char *filter, char **attrs, int noattrs, int nobind, + int innerloop, int maxretries, int delay, int force, int chaserefs ); + +static void +usage( char *name ) +{ + fprintf( stderr, + "usage: %s " + "-H <uri> | ([-h <host>] -p <port>) " + "-D <manager> " + "-w <passwd> " + "-e <entry> " + "[-A] " + "[-C] " + "[-F] " + "[-N] " + "[-f filter] " + "[-i <ignore>] " + "[-l <loops>] " + "[-L <outerloops>] " + "[-r <maxretries>] " + "[-t <delay>] " + "[-T <attrs>] " + "[<attrs>] " + "\n", + name ); + exit( EXIT_FAILURE ); +} + +/* -S: just send requests without reading responses + * -SS: send all requests asynchronous and immediately start reading responses + * -SSS: send all requests asynchronous; then read responses + */ +static int swamp; + +int +main( int argc, char **argv ) +{ + int i; + char *uri = NULL; + char *host = "localhost"; + int port = -1; + char *manager = NULL; + struct berval passwd = { 0, NULL }; + char *entry = NULL; + char *filter = NULL; + int loops = LOOPS; + int outerloops = 1; + int retries = RETRIES; + int delay = 0; + int force = 0; + int chaserefs = 0; + char *srchattrs[] = { "1.1", NULL }; + char **attrs = srchattrs; + int noattrs = 0; + int nobind = 0; + + tester_init( "slapd-read", TESTER_READ ); + + /* by default, tolerate referrals and no such object */ + tester_ignore_str2errlist( "REFERRAL,NO_SUCH_OBJECT" ); + + while ( (i = getopt( argc, argv, "ACD:e:Ff:H:h:i:L:l:p:r:St:T:w:" )) != EOF ) { + switch ( i ) { + case 'A': + noattrs++; + break; + + case 'C': + chaserefs++; + break; + + case 'H': /* the server uri */ + uri = strdup( optarg ); + break; + + case 'h': /* the servers host */ + host = strdup( optarg ); + break; + + case 'i': + tester_ignore_str2errlist( optarg ); + break; + + case 'N': + nobind++; + break; + + case 'p': /* the servers port */ + if ( lutil_atoi( &port, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'D': /* the servers manager */ + manager = strdup( optarg ); + break; + + case 'w': /* the server managers password */ + passwd.bv_val = strdup( optarg ); + passwd.bv_len = strlen( optarg ); + memset( optarg, '*', passwd.bv_len ); + break; + + case 'e': /* DN to search for */ + entry = strdup( optarg ); + break; + + case 'f': /* the search request */ + filter = strdup( optarg ); + break; + + case 'F': + force++; + break; + + case 'l': /* the number of loops */ + if ( lutil_atoi( &loops, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'L': /* the number of outerloops */ + if ( lutil_atoi( &outerloops, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'r': /* the number of retries */ + if ( lutil_atoi( &retries, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'S': + swamp++; + break; + + case 't': /* delay in seconds */ + if ( lutil_atoi( &delay, optarg ) != 0 ) { + usage( argv[0] ); + } + break; + + case 'T': + attrs = ldap_str2charray( optarg, "," ); + if ( attrs == NULL ) { + usage( argv[0] ); + } + break; + + default: + usage( argv[0] ); + break; + } + } + + if (( entry == NULL ) || ( port == -1 && uri == NULL )) + usage( argv[0] ); + + if ( *entry == '\0' ) { + fprintf( stderr, "%s: invalid EMPTY entry DN.\n", + argv[0] ); + exit( EXIT_FAILURE ); + } + + if ( argv[optind] != NULL ) { + attrs = &argv[optind]; + } + + uri = tester_uri( uri, host, port ); + + for ( i = 0; i < outerloops; i++ ) { + if ( filter != NULL ) { + do_random( uri, manager, &passwd, entry, filter, attrs, + noattrs, nobind, loops, retries, delay, force, + chaserefs ); + + } else { + do_read( uri, manager, &passwd, entry, NULL, attrs, + noattrs, nobind, loops, retries, delay, force, + chaserefs ); + } + } + + exit( EXIT_SUCCESS ); +} + +static void +do_random( char *uri, char *manager, struct berval *passwd, + char *sbase, char *filter, char **srchattrs, int noattrs, int nobind, + int innerloop, int maxretries, int delay, int force, int chaserefs ) +{ + LDAP *ld = NULL; + int i = 0, do_retry = maxretries; + char *attrs[ 2 ]; + int rc = LDAP_SUCCESS; + int version = LDAP_VERSION3; + int nvalues = 0; + char **values = NULL; + LDAPMessage *res = NULL, *e = NULL; + + attrs[ 0 ] = LDAP_NO_ATTRS; + attrs[ 1 ] = NULL; + + ldap_initialize( &ld, uri ); + if ( ld == NULL ) { + tester_perror( "ldap_initialize", NULL ); + exit( EXIT_FAILURE ); + } + + (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); + (void) ldap_set_option( ld, LDAP_OPT_REFERRALS, + chaserefs ? LDAP_OPT_ON : LDAP_OPT_OFF ); + + if ( do_retry == maxretries ) { + fprintf( stderr, "PID=%ld - Read(%d): base=\"%s\", filter=\"%s\".\n", + (long) pid, innerloop, sbase, filter ); + } + + if ( nobind == 0 ) { + rc = ldap_sasl_bind_s( ld, manager, LDAP_SASL_SIMPLE, passwd, NULL, NULL, NULL ); + if ( rc != LDAP_SUCCESS ) { + tester_ldap_error( ld, "ldap_sasl_bind_s", NULL ); + switch ( rc ) { + case LDAP_BUSY: + case LDAP_UNAVAILABLE: + /* fallthru */ + default: + break; + } + exit( EXIT_FAILURE ); + } + } + + rc = ldap_search_ext_s( ld, sbase, LDAP_SCOPE_SUBTREE, + filter, attrs, 0, NULL, NULL, NULL, LDAP_NO_LIMIT, &res ); + switch ( rc ) { + case LDAP_SIZELIMIT_EXCEEDED: + case LDAP_TIMELIMIT_EXCEEDED: + case LDAP_SUCCESS: + nvalues = ldap_count_entries( ld, res ); + if ( nvalues == 0 ) { + if ( rc ) { + tester_ldap_error( ld, "ldap_search_ext_s", NULL ); + } + break; + } + + values = malloc( ( nvalues + 1 ) * sizeof( char * ) ); + for ( i = 0, e = ldap_first_entry( ld, res ); e != NULL; i++, e = ldap_next_entry( ld, e ) ) + { + values[ i ] = ldap_get_dn( ld, e ); + } + values[ i ] = NULL; + + ldap_msgfree( res ); + + if ( do_retry == maxretries ) { + fprintf( stderr, " PID=%ld - Read base=\"%s\" filter=\"%s\" got %d values.\n", + (long) pid, sbase, filter, nvalues ); + } + + for ( i = 0; i < innerloop; i++ ) { +#if 0 /* use high-order bits for better randomness (Numerical Recipes in "C") */ + int r = rand() % nvalues; +#endif + int r = ((double)nvalues)*rand()/(RAND_MAX + 1.0); + + do_read( uri, manager, passwd, values[ r ], &ld, + srchattrs, noattrs, nobind, 1, maxretries, + delay, force, chaserefs ); + } + free( values ); + break; + + default: + tester_ldap_error( ld, "ldap_search_ext_s", NULL ); + break; + } + + fprintf( stderr, " PID=%ld - Read done (%d).\n", (long) pid, rc ); + + if ( ld != NULL ) { + ldap_unbind_ext( ld, NULL, NULL ); + } +} + +static void +do_read( char *uri, char *manager, struct berval *passwd, char *entry, + LDAP **ldp, char **attrs, int noattrs, int nobind, int maxloop, + int maxretries, int delay, int force, int chaserefs ) +{ + LDAP *ld = ldp ? *ldp : NULL; + int i = 0, do_retry = maxretries; + int rc = LDAP_SUCCESS; + int version = LDAP_VERSION3; + int *msgids = NULL, active = 0; + + /* make room for msgid */ + if ( swamp > 1 ) { + msgids = (int *)calloc( sizeof(int), maxloop ); + } + +retry:; + if ( ld == NULL ) { + ldap_initialize( &ld, uri ); + if ( ld == NULL ) { + tester_perror( "ldap_initialize", NULL ); + exit( EXIT_FAILURE ); + } + + (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); + (void) ldap_set_option( ld, LDAP_OPT_REFERRALS, + chaserefs ? LDAP_OPT_ON : LDAP_OPT_OFF ); + + if ( do_retry == maxretries ) { + fprintf( stderr, "PID=%ld - Read(%d): entry=\"%s\".\n", + (long) pid, maxloop, entry ); + } + + if ( nobind == 0 ) { + rc = ldap_sasl_bind_s( ld, manager, LDAP_SASL_SIMPLE, passwd, NULL, NULL, NULL ); + if ( rc != LDAP_SUCCESS ) { + tester_ldap_error( ld, "ldap_sasl_bind_s", NULL ); + switch ( rc ) { + case LDAP_BUSY: + case LDAP_UNAVAILABLE: + if ( do_retry > 0 ) { + ldap_unbind_ext( ld, NULL, NULL ); + ld = NULL; + do_retry--; + if ( delay != 0 ) { + sleep( delay ); + } + goto retry; + } + /* fallthru */ + default: + break; + } + exit( EXIT_FAILURE ); + } + } + } + + if ( swamp > 1 ) { + do { + LDAPMessage *res = NULL; + int j, msgid; + + if ( i < maxloop ) { + rc = ldap_search_ext( ld, entry, LDAP_SCOPE_BASE, + NULL, attrs, noattrs, NULL, NULL, + NULL, LDAP_NO_LIMIT, &msgids[i] ); + + active++; +#if 0 + fprintf( stderr, + ">>> PID=%ld - Read maxloop=%d cnt=%d active=%d msgid=%d: " + "entry=\"%s\"\n", + (long) pid, maxloop, i, active, msgids[i], + entry ); +#endif + i++; + + if ( rc ) { + char buf[BUFSIZ]; + int first = tester_ignore_err( rc ); + /* if ignore.. */ + if ( first ) { + /* only log if first occurrence */ + if ( ( force < 2 && first > 0 ) || abs(first) == 1 ) { + tester_ldap_error( ld, "ldap_search_ext", NULL ); + } + continue; + } + + /* busy needs special handling */ + snprintf( buf, sizeof( buf ), "entry=\"%s\"\n", entry ); + tester_ldap_error( ld, "ldap_search_ext", buf ); + if ( rc == LDAP_BUSY && do_retry > 0 ) { + ldap_unbind_ext( ld, NULL, NULL ); + ld = NULL; + do_retry--; + goto retry; + } + break; + } + + if ( swamp > 2 ) { + continue; + } + } + + rc = ldap_result( ld, LDAP_RES_ANY, 0, NULL, &res ); + switch ( rc ) { + case -1: + /* gone really bad */ +#if 0 + fprintf( stderr, + ">>> PID=%ld - Read maxloop=%d cnt=%d active=%d: " + "entry=\"%s\" ldap_result()=%d\n", + (long) pid, maxloop, i, active, entry, rc ); +#endif + goto cleanup; + + case 0: + /* timeout (impossible) */ + break; + + case LDAP_RES_SEARCH_ENTRY: + case LDAP_RES_SEARCH_REFERENCE: + /* ignore */ + break; + + case LDAP_RES_SEARCH_RESULT: + /* just remove, no error checking (TODO?) */ + msgid = ldap_msgid( res ); + ldap_parse_result( ld, res, &rc, NULL, NULL, NULL, NULL, 1 ); + res = NULL; + + /* linear search, bah */ + for ( j = 0; j < i; j++ ) { + if ( msgids[ j ] == msgid ) { + msgids[ j ] = -1; + active--; +#if 0 + fprintf( stderr, + "<<< PID=%ld - ReadDone maxloop=%d cnt=%d active=%d msgid=%d: " + "entry=\"%s\"\n", + (long) pid, maxloop, j, active, msgid, entry ); +#endif + break; + } + } + break; + + default: + /* other messages unexpected */ + fprintf( stderr, + "### PID=%ld - Read(%d): " + "entry=\"%s\" attrs=%s%s. unexpected response tag=%d\n", + (long) pid, maxloop, + entry, attrs[0], attrs[1] ? " (more...)" : "", rc ); + break; + } + + if ( res != NULL ) { + ldap_msgfree( res ); + } + } while ( i < maxloop || active > 0 ); + + } else { + for ( ; i < maxloop; i++ ) { + LDAPMessage *res = NULL; + + if (swamp) { + int msgid; + rc = ldap_search_ext( ld, entry, LDAP_SCOPE_BASE, + NULL, attrs, noattrs, NULL, NULL, + NULL, LDAP_NO_LIMIT, &msgid ); + if ( rc == LDAP_SUCCESS ) continue; + else break; + } + + rc = ldap_search_ext_s( ld, entry, LDAP_SCOPE_BASE, + NULL, attrs, noattrs, NULL, NULL, NULL, + LDAP_NO_LIMIT, &res ); + if ( res != NULL ) { + ldap_msgfree( res ); + } + + if ( rc ) { + int first = tester_ignore_err( rc ); + char buf[ BUFSIZ ]; + + snprintf( buf, sizeof( buf ), "ldap_search_ext_s(%s)", entry ); + + /* if ignore.. */ + if ( first ) { + /* only log if first occurrence */ + if ( ( force < 2 && first > 0 ) || abs(first) == 1 ) { + tester_ldap_error( ld, buf, NULL ); + } + continue; + } + + /* busy needs special handling */ + tester_ldap_error( ld, buf, NULL ); + if ( rc == LDAP_BUSY && do_retry > 0 ) { + ldap_unbind_ext( ld, NULL, NULL ); + ld = NULL; + do_retry--; + goto retry; + } + break; + } + } + } + +cleanup:; + if ( msgids != NULL ) { + free( msgids ); + } + + if ( ldp != NULL ) { + *ldp = ld; + + } else { + fprintf( stderr, " PID=%ld - Read done (%d).\n", (long) pid, rc ); + + if ( ld != NULL ) { + ldap_unbind_ext( ld, NULL, NULL ); + } + } +} + diff --git a/tests/progs/slapd-search.c b/tests/progs/slapd-search.c new file mode 100644 index 0000000..12b5708 --- /dev/null +++ b/tests/progs/slapd-search.c @@ -0,0 +1,618 @@ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software <http://www.openldap.org/>. + * + * Copyright 1999-2018 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 file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * <http://www.OpenLDAP.org/license.html>. + */ +/* ACKNOWLEDGEMENTS: + * This work was initially developed by Kurt Spanier for inclusion + * in OpenLDAP Software. + */ + +#include "portable.h" + +#include <stdio.h> + +#include "ac/stdlib.h" + +#include "ac/ctype.h" +#include "ac/param.h" +#include "ac/socket.h" +#include "ac/string.h" +#include "ac/unistd.h" +#include "ac/wait.h" + +#include "ldap.h" +#include "lutil.h" +#include "ldap_pvt.h" + +#include "slapd-common.h" + +#define LOOPS 100 +#define RETRIES 0 + +static void +do_search( char *uri, char *manager, struct berval *passwd, + char *sbase, int scope, char *filter, LDAP **ldp, + char **attrs, int noattrs, int nobind, + int innerloop, int maxretries, int delay, int force, int chaserefs ); + +static void +do_random( char *uri, char *manager, struct berval *passwd, + char *sbase, int scope, char *filter, char *attr, + char **attrs, int noattrs, int nobind, + int innerloop, int maxretries, int delay, int force, int chaserefs ); + +static void +usage( char *name, char o ) +{ + if ( o != '\0' ) { + fprintf( stderr, "unknown/incorrect option \"%c\"\n", o ); + } + + fprintf( stderr, + "usage: %s " + "-H <uri> | ([-h <host>] -p <port>) " + "-D <manager> " + "-w <passwd> " + "-b <searchbase> " + "-s <scope> " + "-f <searchfilter> " + "[-a <attr>] " + "[-A] " + "[-C] " + "[-F] " + "[-N] " + "[-S[S[S]]] " + "[-i <ignore>] " + "[-l <loops>] " + "[-L <outerloops>] " + "[-r <maxretries>] " + "[-t <delay>] " + "[<attrs>] " + "\n", + name ); + exit( EXIT_FAILURE ); +} + +/* -S: just send requests without reading responses + * -SS: send all requests asynchronous and immediately start reading responses + * -SSS: send all requests asynchronous; then read responses + */ +static int swamp; + +int +main( int argc, char **argv ) +{ + int i; + char *uri = NULL; + char *host = "localhost"; + int port = -1; + char *manager = NULL; + struct berval passwd = { 0, NULL }; + char *sbase = NULL; + int scope = LDAP_SCOPE_SUBTREE; + char *filter = NULL; + char *attr = NULL; + char *srchattrs[] = { "cn", "sn", NULL }; + char **attrs = srchattrs; + int loops = LOOPS; + int outerloops = 1; + int retries = RETRIES; + int delay = 0; + int force = 0; + int chaserefs = 0; + int noattrs = 0; + int nobind = 0; + + tester_init( "slapd-search", TESTER_SEARCH ); + + /* by default, tolerate referrals and no such object */ + tester_ignore_str2errlist( "REFERRAL,NO_SUCH_OBJECT" ); + + while ( ( i = getopt( argc, argv, "Aa:b:CD:f:FH:h:i:l:L:Np:r:Ss:t:T:w:" ) ) != EOF ) + { + switch ( i ) { + case 'A': + noattrs++; + break; + + case 'C': + chaserefs++; + break; + + case 'H': /* the server uri */ + uri = strdup( optarg ); + break; + + case 'h': /* the servers host */ + host = strdup( optarg ); + break; + + case 'i': + tester_ignore_str2errlist( optarg ); + break; + + case 'N': + nobind++; + break; + + case 'p': /* the servers port */ + if ( lutil_atoi( &port, optarg ) != 0 ) { + usage( argv[0], i ); + } + break; + + case 'D': /* the servers manager */ + manager = strdup( optarg ); + break; + + case 'w': /* the server managers password */ + passwd.bv_val = strdup( optarg ); + passwd.bv_len = strlen( optarg ); + memset( optarg, '*', passwd.bv_len ); + break; + + case 'a': + attr = strdup( optarg ); + break; + + case 'b': /* file with search base */ + sbase = strdup( optarg ); + break; + + case 'f': /* the search request */ + filter = strdup( optarg ); + break; + + case 'F': + force++; + break; + + case 'l': /* number of loops */ + if ( lutil_atoi( &loops, optarg ) != 0 ) { + usage( argv[0], i ); + } + break; + + case 'L': /* number of loops */ + if ( lutil_atoi( &outerloops, optarg ) != 0 ) { + usage( argv[0], i ); + } + break; + + case 'r': /* number of retries */ + if ( lutil_atoi( &retries, optarg ) != 0 ) { + usage( argv[0], i ); + } + break; + + case 't': /* delay in seconds */ + if ( lutil_atoi( &delay, optarg ) != 0 ) { + usage( argv[0], i ); + } + break; + + case 'T': + attrs = ldap_str2charray( optarg, "," ); + if ( attrs == NULL ) { + usage( argv[0], i ); + } + break; + + case 'S': + swamp++; + break; + + case 's': + scope = ldap_pvt_str2scope( optarg ); + if ( scope == -1 ) { + usage( argv[0], i ); + } + break; + + default: + usage( argv[0], i ); + break; + } + } + + if (( sbase == NULL ) || ( filter == NULL ) || ( port == -1 && uri == NULL )) + usage( argv[0], '\0' ); + + if ( *filter == '\0' ) { + + fprintf( stderr, "%s: invalid EMPTY search filter.\n", + argv[0] ); + exit( EXIT_FAILURE ); + + } + + if ( argv[optind] != NULL ) { + attrs = &argv[optind]; + } + + uri = tester_uri( uri, host, port ); + + for ( i = 0; i < outerloops; i++ ) { + if ( attr != NULL ) { + do_random( uri, manager, &passwd, + sbase, scope, filter, attr, + attrs, noattrs, nobind, + loops, retries, delay, force, chaserefs ); + + } else { + do_search( uri, manager, &passwd, + sbase, scope, filter, NULL, + attrs, noattrs, nobind, + loops, retries, delay, force, chaserefs ); + } + } + + exit( EXIT_SUCCESS ); +} + + +static void +do_random( char *uri, char *manager, struct berval *passwd, + char *sbase, int scope, char *filter, char *attr, + char **srchattrs, int noattrs, int nobind, + int innerloop, int maxretries, int delay, int force, int chaserefs ) +{ + LDAP *ld = NULL; + int i = 0, do_retry = maxretries; + char *attrs[ 2 ]; + int rc = LDAP_SUCCESS; + int version = LDAP_VERSION3; + int nvalues = 0; + char **values = NULL; + LDAPMessage *res = NULL, *e = NULL; + + attrs[ 0 ] = attr; + attrs[ 1 ] = NULL; + + ldap_initialize( &ld, uri ); + if ( ld == NULL ) { + tester_perror( "ldap_initialize", NULL ); + exit( EXIT_FAILURE ); + } + + (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); + (void) ldap_set_option( ld, LDAP_OPT_REFERRALS, + chaserefs ? LDAP_OPT_ON : LDAP_OPT_OFF ); + + if ( do_retry == maxretries ) { + fprintf( stderr, "PID=%ld - Search(%d): base=\"%s\", filter=\"%s\" attr=\"%s\".\n", + (long) pid, innerloop, sbase, filter, attr ); + } + + if ( nobind == 0 ) { + rc = ldap_sasl_bind_s( ld, manager, LDAP_SASL_SIMPLE, passwd, NULL, NULL, NULL ); + if ( rc != LDAP_SUCCESS ) { + tester_ldap_error( ld, "ldap_sasl_bind_s", NULL ); + switch ( rc ) { + case LDAP_BUSY: + case LDAP_UNAVAILABLE: + /* fallthru */ + default: + break; + } + exit( EXIT_FAILURE ); + } + } + + rc = ldap_search_ext_s( ld, sbase, LDAP_SCOPE_SUBTREE, + filter, attrs, 0, NULL, NULL, NULL, LDAP_NO_LIMIT, &res ); + switch ( rc ) { + case LDAP_SIZELIMIT_EXCEEDED: + case LDAP_TIMELIMIT_EXCEEDED: + case LDAP_SUCCESS: + if ( ldap_count_entries( ld, res ) == 0 ) { + if ( rc ) { + tester_ldap_error( ld, "ldap_search_ext_s", NULL ); + } + break; + } + + for ( e = ldap_first_entry( ld, res ); e != NULL; e = ldap_next_entry( ld, e ) ) + { + struct berval **v = ldap_get_values_len( ld, e, attr ); + + if ( v != NULL ) { + int n = ldap_count_values_len( v ); + int j; + + values = realloc( values, ( nvalues + n + 1 )*sizeof( char * ) ); + for ( j = 0; j < n; j++ ) { + values[ nvalues + j ] = strdup( v[ j ]->bv_val ); + } + values[ nvalues + j ] = NULL; + nvalues += n; + ldap_value_free_len( v ); + } + } + + ldap_msgfree( res ); + + if ( !values ) { + fprintf( stderr, " PID=%ld - Search base=\"%s\" filter=\"%s\" got %d values.\n", + (long) pid, sbase, filter, nvalues ); + exit(EXIT_FAILURE); + } + + if ( do_retry == maxretries ) { + fprintf( stderr, " PID=%ld - Search base=\"%s\" filter=\"%s\" got %d values.\n", + (long) pid, sbase, filter, nvalues ); + } + + for ( i = 0; i < innerloop; i++ ) { + char buf[ BUFSIZ ]; +#if 0 /* use high-order bits for better randomness (Numerical Recipes in "C") */ + int r = rand() % nvalues; +#endif + int r = ((double)nvalues)*rand()/(RAND_MAX + 1.0); + + snprintf( buf, sizeof( buf ), "(%s=%s)", attr, values[ r ] ); + + do_search( uri, manager, passwd, + sbase, scope, buf, &ld, + srchattrs, noattrs, nobind, + 1, maxretries, delay, force, chaserefs ); + } + break; + + default: + tester_ldap_error( ld, "ldap_search_ext_s", NULL ); + break; + } + + fprintf( stderr, " PID=%ld - Search done (%d).\n", (long) pid, rc ); + + if ( ld != NULL ) { + ldap_unbind_ext( ld, NULL, NULL ); + } +} + +static void +do_search( char *uri, char *manager, struct berval *passwd, + char *sbase, int scope, char *filter, LDAP **ldp, + char **attrs, int noattrs, int nobind, + int innerloop, int maxretries, int delay, int force, int chaserefs ) +{ + LDAP *ld = ldp ? *ldp : NULL; + int i = 0, do_retry = maxretries; + int rc = LDAP_SUCCESS; + int version = LDAP_VERSION3; + char buf[ BUFSIZ ]; + int *msgids = NULL, active = 0; + + /* make room for msgid */ + if ( swamp > 1 ) { + msgids = (int *)calloc( sizeof(int), innerloop ); + } + +retry:; + if ( ld == NULL ) { + ldap_initialize( &ld, uri ); + if ( ld == NULL ) { + tester_perror( "ldap_initialize", NULL ); + exit( EXIT_FAILURE ); + } + + (void) ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); + (void) ldap_set_option( ld, LDAP_OPT_REFERRALS, + chaserefs ? LDAP_OPT_ON : LDAP_OPT_OFF ); + + if ( do_retry == maxretries ) { + fprintf( stderr, + "PID=%ld - Search(%d): " + "base=\"%s\" scope=%s filter=\"%s\" " + "attrs=%s%s.\n", + (long) pid, innerloop, + sbase, ldap_pvt_scope2str( scope ), filter, + attrs[0], attrs[1] ? " (more...)" : "" ); + } + + if ( nobind == 0 ) { + rc = ldap_sasl_bind_s( ld, manager, LDAP_SASL_SIMPLE, passwd, NULL, NULL, NULL ); + if ( rc != LDAP_SUCCESS ) { + snprintf( buf, sizeof( buf ), + "bindDN=\"%s\"", manager ); + tester_ldap_error( ld, "ldap_sasl_bind_s", buf ); + switch ( rc ) { + case LDAP_BUSY: + case LDAP_UNAVAILABLE: + if ( do_retry > 0 ) { + ldap_unbind_ext( ld, NULL, NULL ); + ld = NULL; + do_retry--; + if ( delay != 0 ) { + sleep( delay ); + } + goto retry; + } + /* fallthru */ + default: + break; + } + exit( EXIT_FAILURE ); + } + } + } + + if ( swamp > 1 ) { + do { + LDAPMessage *res = NULL; + int j, msgid; + + if ( i < innerloop ) { + rc = ldap_search_ext( ld, sbase, scope, + filter, NULL, noattrs, NULL, NULL, + NULL, LDAP_NO_LIMIT, &msgids[i] ); + + active++; +#if 0 + fprintf( stderr, + ">>> PID=%ld - Search maxloop=%d cnt=%d active=%d msgid=%d: " + "base=\"%s\" scope=%s filter=\"%s\"\n", + (long) pid, innerloop, i, active, msgids[i], + sbase, ldap_pvt_scope2str( scope ), filter ); +#endif + i++; + + if ( rc ) { + int first = tester_ignore_err( rc ); + /* if ignore.. */ + if ( first ) { + /* only log if first occurrence */ + if ( ( force < 2 && first > 0 ) || abs(first) == 1 ) { + tester_ldap_error( ld, "ldap_search_ext", NULL ); + } + continue; + } + + /* busy needs special handling */ + snprintf( buf, sizeof( buf ), + "base=\"%s\" filter=\"%s\"\n", + sbase, filter ); + tester_ldap_error( ld, "ldap_search_ext", buf ); + if ( rc == LDAP_BUSY && do_retry > 0 ) { + ldap_unbind_ext( ld, NULL, NULL ); + ld = NULL; + do_retry--; + goto retry; + } + break; + } + + if ( swamp > 2 ) { + continue; + } + } + + rc = ldap_result( ld, LDAP_RES_ANY, 0, NULL, &res ); + switch ( rc ) { + case -1: + /* gone really bad */ + goto cleanup; + + case 0: + /* timeout (impossible) */ + break; + + case LDAP_RES_SEARCH_ENTRY: + case LDAP_RES_SEARCH_REFERENCE: + /* ignore */ + break; + + case LDAP_RES_SEARCH_RESULT: + /* just remove, no error checking (TODO?) */ + msgid = ldap_msgid( res ); + ldap_parse_result( ld, res, &rc, NULL, NULL, NULL, NULL, 1 ); + res = NULL; + + /* linear search, bah */ + for ( j = 0; j < i; j++ ) { + if ( msgids[ j ] == msgid ) { + msgids[ j ] = -1; + active--; +#if 0 + fprintf( stderr, + "<<< PID=%ld - SearchDone maxloop=%d cnt=%d active=%d msgid=%d: " + "base=\"%s\" scope=%s filter=\"%s\"\n", + (long) pid, innerloop, j, active, msgid, + sbase, ldap_pvt_scope2str( scope ), filter ); +#endif + break; + } + } + break; + + default: + /* other messages unexpected */ + fprintf( stderr, + "### PID=%ld - Search(%d): " + "base=\"%s\" scope=%s filter=\"%s\" " + "attrs=%s%s. unexpected response tag=%d\n", + (long) pid, innerloop, + sbase, ldap_pvt_scope2str( scope ), filter, + attrs[0], attrs[1] ? " (more...)" : "", rc ); + break; + } + + if ( res != NULL ) { + ldap_msgfree( res ); + } + } while ( i < innerloop || active > 0 ); + + } else { + for ( ; i < innerloop; i++ ) { + LDAPMessage *res = NULL; + + if (swamp) { + int msgid; + rc = ldap_search_ext( ld, sbase, scope, + filter, NULL, noattrs, NULL, NULL, + NULL, LDAP_NO_LIMIT, &msgid ); + if ( rc == LDAP_SUCCESS ) continue; + else break; + } + + rc = ldap_search_ext_s( ld, sbase, scope, + filter, attrs, noattrs, NULL, NULL, + NULL, LDAP_NO_LIMIT, &res ); + if ( res != NULL ) { + ldap_msgfree( res ); + } + + if ( rc ) { + int first = tester_ignore_err( rc ); + /* if ignore.. */ + if ( first ) { + /* only log if first occurrence */ + if ( ( force < 2 && first > 0 ) || abs(first) == 1 ) { + tester_ldap_error( ld, "ldap_search_ext_s", NULL ); + } + continue; + } + + /* busy needs special handling */ + snprintf( buf, sizeof( buf ), + "base=\"%s\" filter=\"%s\"\n", + sbase, filter ); + tester_ldap_error( ld, "ldap_search_ext_s", buf ); + if ( rc == LDAP_BUSY && do_retry > 0 ) { + ldap_unbind_ext( ld, NULL, NULL ); + ld = NULL; + do_retry--; + goto retry; + } + break; + } + } + } + +cleanup:; + if ( msgids != NULL ) { + free( msgids ); + } + + if ( ldp != NULL ) { + *ldp = ld; + + } else { + fprintf( stderr, " PID=%ld - Search done (%d).\n", (long) pid, rc ); + + if ( ld != NULL ) { + ldap_unbind_ext( ld, NULL, NULL ); + } + } +} diff --git a/tests/progs/slapd-tester.c b/tests/progs/slapd-tester.c new file mode 100644 index 0000000..64270f1 --- /dev/null +++ b/tests/progs/slapd-tester.c @@ -0,0 +1,1197 @@ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software <http://www.openldap.org/>. + * + * Copyright 1999-2018 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 file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * <http://www.OpenLDAP.org/license.html>. + */ +/* ACKNOWLEDGEMENTS: + * This work was initially developed by Kurt Spanier for inclusion + * in OpenLDAP Software. + */ + +#include "portable.h" + +#include <stdio.h> + +#include "ac/stdlib.h" + +#include "ac/ctype.h" +#include "ac/dirent.h" +#include "ac/param.h" +#include "ac/socket.h" +#include "ac/string.h" +#include "ac/unistd.h" +#include "ac/wait.h" + + +#include "ldap_defaults.h" +#include "lutil.h" + +#include "ldap.h" +#include "ldap_pvt.h" +#include "lber_pvt.h" +#include "slapd-common.h" + +#ifdef _WIN32 +#define EXE ".exe" +#else +#define EXE +#endif + +#define SEARCHCMD "slapd-search" EXE +#define READCMD "slapd-read" EXE +#define ADDCMD "slapd-addel" EXE +#define MODRDNCMD "slapd-modrdn" EXE +#define MODIFYCMD "slapd-modify" EXE +#define BINDCMD "slapd-bind" EXE +#define MAXARGS 100 +#define MAXREQS 5000 +#define LOOPS 100 +#define OUTERLOOPS "1" +#define RETRIES "0" + +#define TSEARCHFILE "do_search.0" +#define TREADFILE "do_read.0" +#define TADDFILE "do_add." +#define TMODRDNFILE "do_modrdn.0" +#define TMODIFYFILE "do_modify.0" +#define TBINDFILE "do_bind.0" + +static char *get_file_name( char *dirname, char *filename ); +static int get_search_filters( char *filename, char *filters[], char *attrs[], char *bases[], LDAPURLDesc *luds[] ); +static int get_read_entries( char *filename, char *entries[], char *filters[] ); +static void fork_child( char *prog, char **args ); +static void wait4kids( int nkidval ); + +static int maxkids = 20; +static int nkids; + +#ifdef HAVE_WINSOCK +static HANDLE *children; +static char argbuf[BUFSIZ]; +#define ArgDup(x) strdup(strcat(strcat(strcpy(argbuf,"\""),x),"\"")) +#else +#define ArgDup(x) strdup(x) +#endif + +static void +usage( char *name, char opt ) +{ + if ( opt ) { + fprintf( stderr, "%s: unable to handle option \'%c\'\n\n", + name, opt ); + } + + fprintf( stderr, + "usage: %s " + "-H <uri> | ([-h <host>] -p <port>) " + "-D <manager> " + "-w <passwd> " + "-d <datadir> " + "[-i <ignore>] " + "[-j <maxchild>] " + "[-l {<loops>|<type>=<loops>[,...]}] " + "[-L <outerloops>] " + "-P <progdir> " + "[-r <maxretries>] " + "[-t <delay>] " + "[-C] " + "[-F] " + "[-I] " + "[-N]\n", + name ); + exit( EXIT_FAILURE ); +} + +int +main( int argc, char **argv ) +{ + int i, j; + char *uri = NULL; + char *host = "localhost"; + char *port = NULL; + char *manager = NULL; + char *passwd = NULL; + char *dirname = NULL; + char *progdir = NULL; + int loops = LOOPS; + char *outerloops = OUTERLOOPS; + char *retries = RETRIES; + char *delay = "0"; + DIR *datadir; + struct dirent *file; + int friendly = 0; + int chaserefs = 0; + int noattrs = 0; + int nobind = 0; + int noinit = 1; + char *ignore = NULL; + /* search */ + char *sfile = NULL; + char *sreqs[MAXREQS]; + char *sattrs[MAXREQS]; + char *sbase[MAXREQS]; + LDAPURLDesc *slud[MAXREQS]; + int snum = 0; + char *sargs[MAXARGS]; + int sanum; + int sextra_args = 0; + char scmd[MAXPATHLEN]; + int swamp = 0; + char swampopt[sizeof("-SSS")]; + /* static so that its address can be used in initializer below. */ + static char sloops[LDAP_PVT_INTTYPE_CHARS(unsigned long)]; + /* read */ + char *rfile = NULL; + char *rreqs[MAXREQS]; + int rnum = 0; + char *rargs[MAXARGS]; + char *rflts[MAXREQS]; + int ranum; + int rextra_args = 0; + char rcmd[MAXPATHLEN]; + static char rloops[LDAP_PVT_INTTYPE_CHARS(unsigned long)]; + /* addel */ + char *afiles[MAXREQS]; + int anum = 0; + char *aargs[MAXARGS]; + int aanum; + char acmd[MAXPATHLEN]; + static char aloops[LDAP_PVT_INTTYPE_CHARS(unsigned long)]; + /* modrdn */ + char *nfile = NULL; + char *nreqs[MAXREQS]; + int nnum = 0; + char *nargs[MAXARGS]; + int nanum; + char ncmd[MAXPATHLEN]; + static char nloops[LDAP_PVT_INTTYPE_CHARS(unsigned long)]; + /* modify */ + char *mfile = NULL; + char *mreqs[MAXREQS]; + char *mdn[MAXREQS]; + int mnum = 0; + char *margs[MAXARGS]; + int manum; + char mcmd[MAXPATHLEN]; + static char mloops[LDAP_PVT_INTTYPE_CHARS(unsigned long)]; + /* bind */ + char *bfile = NULL; + char *breqs[MAXREQS]; + char *bcreds[MAXREQS]; + char *battrs[MAXREQS]; + int bnum = 0; + char *bargs[MAXARGS]; + int banum; + char bcmd[MAXPATHLEN]; + static char bloops[LDAP_PVT_INTTYPE_CHARS(unsigned long)]; + char **bargs_extra = NULL; + + char *friendlyOpt = NULL; + int pw_ask = 0; + char *pw_file = NULL; + + /* extra action to do after bind... */ + typedef struct extra_t { + char *action; + struct extra_t *next; + } extra_t; + + extra_t *extra = NULL; + int nextra = 0; + + tester_init( "slapd-tester", TESTER_TESTER ); + + sloops[0] = '\0'; + rloops[0] = '\0'; + aloops[0] = '\0'; + nloops[0] = '\0'; + mloops[0] = '\0'; + bloops[0] = '\0'; + + while ( ( i = getopt( argc, argv, "AB:CD:d:FH:h:Ii:j:L:l:NP:p:r:St:Ww:y:" ) ) != EOF ) + { + switch ( i ) { + case 'A': + noattrs++; + break; + + case 'B': { + char **p, + **b = ldap_str2charray( optarg, "," ); + extra_t **epp; + + for ( epp = &extra; *epp; epp = &(*epp)->next ) + ; + + for ( p = b; p[0]; p++ ) { + *epp = calloc( 1, sizeof( extra_t ) ); + (*epp)->action = p[0]; + epp = &(*epp)->next; + nextra++; + } + + ldap_memfree( b ); + } break; + + case 'C': + chaserefs++; + break; + + case 'D': /* slapd manager */ + manager = ArgDup( optarg ); + break; + + case 'd': /* data directory */ + dirname = strdup( optarg ); + break; + + case 'F': + friendly++; + break; + + case 'H': /* slapd uri */ + uri = strdup( optarg ); + break; + + case 'h': /* slapd host */ + host = strdup( optarg ); + break; + + case 'I': + noinit = 0; + break; + + case 'i': + ignore = optarg; + break; + + case 'j': /* the number of parallel clients */ + if ( lutil_atoi( &maxkids, optarg ) != 0 ) { + usage( argv[0], 'j' ); + } + break; + + case 'l': /* the number of loops per client */ + if ( !isdigit( (unsigned char) optarg[0] ) ) { + char **p, + **l = ldap_str2charray( optarg, "," ); + + for ( p = l; p[0]; p++) { + struct { + struct berval type; + char *buf; + } types[] = { + { BER_BVC( "add=" ), aloops }, + { BER_BVC( "bind=" ), bloops }, + { BER_BVC( "modify=" ), mloops }, + { BER_BVC( "modrdn=" ), nloops }, + { BER_BVC( "read=" ), rloops }, + { BER_BVC( "search=" ), sloops }, + { BER_BVNULL, NULL } + }; + int c, n; + + for ( c = 0; types[c].type.bv_val; c++ ) { + if ( strncasecmp( p[0], types[c].type.bv_val, types[c].type.bv_len ) == 0 ) { + break; + } + } + + if ( types[c].type.bv_val == NULL ) { + usage( argv[0], 'l' ); + } + + if ( lutil_atoi( &n, &p[0][types[c].type.bv_len] ) != 0 ) { + usage( argv[0], 'l' ); + } + + snprintf( types[c].buf, sizeof( aloops ), "%d", n ); + } + + ldap_charray_free( l ); + + } else if ( lutil_atoi( &loops, optarg ) != 0 ) { + usage( argv[0], 'l' ); + } + break; + + case 'L': /* the number of outerloops per client */ + outerloops = strdup( optarg ); + break; + + case 'N': + nobind++; + break; + + case 'P': /* prog directory */ + progdir = strdup( optarg ); + break; + + case 'p': /* the servers port number */ + port = strdup( optarg ); + break; + + case 'r': /* the number of retries in case of error */ + retries = strdup( optarg ); + break; + + case 'S': + swamp++; + break; + + case 't': /* the delay in seconds between each retry */ + delay = strdup( optarg ); + break; + + case 'w': /* the managers passwd */ + passwd = ArgDup( optarg ); + memset( optarg, '*', strlen( optarg ) ); + break; + + case 'W': + pw_ask++; + break; + + case 'y': + pw_file = optarg; + break; + + default: + usage( argv[0], '\0' ); + break; + } + } + + if (( dirname == NULL ) || ( port == NULL && uri == NULL ) || + ( manager == NULL ) || ( passwd == NULL ) || ( progdir == NULL )) + { + usage( argv[0], '\0' ); + } + +#ifdef HAVE_WINSOCK + children = malloc( maxkids * sizeof(HANDLE) ); +#endif + /* get the file list */ + if ( ( datadir = opendir( dirname )) == NULL ) { + fprintf( stderr, "%s: couldn't open data directory \"%s\".\n", + argv[0], dirname ); + exit( EXIT_FAILURE ); + } + + /* look for search, read, modrdn, and add/delete files */ + for ( file = readdir( datadir ); file; file = readdir( datadir )) { + + if ( !strcasecmp( file->d_name, TSEARCHFILE )) { + sfile = get_file_name( dirname, file->d_name ); + continue; + } else if ( !strcasecmp( file->d_name, TREADFILE )) { + rfile = get_file_name( dirname, file->d_name ); + continue; + } else if ( !strcasecmp( file->d_name, TMODRDNFILE )) { + nfile = get_file_name( dirname, file->d_name ); + continue; + } else if ( !strcasecmp( file->d_name, TMODIFYFILE )) { + mfile = get_file_name( dirname, file->d_name ); + continue; + } else if ( !strncasecmp( file->d_name, TADDFILE, strlen( TADDFILE )) + && ( anum < MAXREQS )) { + afiles[anum++] = get_file_name( dirname, file->d_name ); + continue; + } else if ( !strcasecmp( file->d_name, TBINDFILE )) { + bfile = get_file_name( dirname, file->d_name ); + continue; + } + } + + closedir( datadir ); + + if ( pw_ask ) { + passwd = getpassphrase( _("Enter LDAP Password: ") ); + + } else if ( pw_file ) { + struct berval pw; + + if ( lutil_get_filed_password( pw_file, &pw ) ) { + exit( EXIT_FAILURE ); + } + + passwd = pw.bv_val; + } + + if ( !sfile && !rfile && !nfile && !mfile && !bfile && !anum ) { + fprintf( stderr, "no data files found.\n" ); + exit( EXIT_FAILURE ); + } + + /* look for search requests */ + if ( sfile ) { + snum = get_search_filters( sfile, sreqs, sattrs, sbase, slud ); + if ( snum < 0 ) { + fprintf( stderr, + "unable to parse file \"%s\" line %d\n", + sfile, -2*(snum + 1)); + exit( EXIT_FAILURE ); + } + } + + /* look for read requests */ + if ( rfile ) { + rnum = get_read_entries( rfile, rreqs, rflts ); + if ( rnum < 0 ) { + fprintf( stderr, + "unable to parse file \"%s\" line %d\n", + rfile, -2*(rnum + 1) ); + exit( EXIT_FAILURE ); + } + } + + /* look for modrdn requests */ + if ( nfile ) { + nnum = get_read_entries( nfile, nreqs, NULL ); + if ( nnum < 0 ) { + fprintf( stderr, + "unable to parse file \"%s\" line %d\n", + nfile, -2*(nnum + 1) ); + exit( EXIT_FAILURE ); + } + } + + /* look for modify requests */ + if ( mfile ) { + mnum = get_search_filters( mfile, mreqs, NULL, mdn, NULL ); + if ( mnum < 0 ) { + fprintf( stderr, + "unable to parse file \"%s\" line %d\n", + mfile, -2*(mnum + 1) ); + exit( EXIT_FAILURE ); + } + } + + /* look for bind requests */ + if ( bfile ) { + bnum = get_search_filters( bfile, bcreds, battrs, breqs, NULL ); + if ( bnum < 0 ) { + fprintf( stderr, + "unable to parse file \"%s\" line %d\n", + bfile, -2*(bnum + 1) ); + exit( EXIT_FAILURE ); + } + } + + /* setup friendly option */ + switch ( friendly ) { + case 0: + break; + + case 1: + friendlyOpt = "-F"; + break; + + default: + /* NOTE: right now we don't need it more than twice */ + case 2: + friendlyOpt = "-FF"; + break; + } + + /* setup swamp option */ + if ( swamp ) { + swampopt[0] = '-'; + if ( swamp > 3 ) swamp = 3; + swampopt[swamp + 1] = '\0'; + for ( ; swamp-- > 0; ) swampopt[swamp + 1] = 'S'; + } + + /* setup loop options */ + if ( sloops[0] == '\0' ) snprintf( sloops, sizeof( sloops ), "%d", 10 * loops ); + if ( rloops[0] == '\0' ) snprintf( rloops, sizeof( rloops ), "%d", 20 * loops ); + if ( aloops[0] == '\0' ) snprintf( aloops, sizeof( aloops ), "%d", loops ); + if ( nloops[0] == '\0' ) snprintf( nloops, sizeof( nloops ), "%d", loops ); + if ( mloops[0] == '\0' ) snprintf( mloops, sizeof( mloops ), "%d", loops ); + if ( bloops[0] == '\0' ) snprintf( bloops, sizeof( bloops ), "%d", 20 * loops ); + + /* + * generate the search clients + */ + + sanum = 0; + snprintf( scmd, sizeof scmd, "%s" LDAP_DIRSEP SEARCHCMD, + progdir ); + sargs[sanum++] = scmd; + if ( uri ) { + sargs[sanum++] = "-H"; + sargs[sanum++] = uri; + } else { + sargs[sanum++] = "-h"; + sargs[sanum++] = host; + sargs[sanum++] = "-p"; + sargs[sanum++] = port; + } + sargs[sanum++] = "-D"; + sargs[sanum++] = manager; + sargs[sanum++] = "-w"; + sargs[sanum++] = passwd; + sargs[sanum++] = "-l"; + sargs[sanum++] = sloops; + sargs[sanum++] = "-L"; + sargs[sanum++] = outerloops; + sargs[sanum++] = "-r"; + sargs[sanum++] = retries; + sargs[sanum++] = "-t"; + sargs[sanum++] = delay; + if ( friendly ) { + sargs[sanum++] = friendlyOpt; + } + if ( chaserefs ) { + sargs[sanum++] = "-C"; + } + if ( noattrs ) { + sargs[sanum++] = "-A"; + } + if ( nobind ) { + sargs[sanum++] = "-N"; + } + if ( ignore ) { + sargs[sanum++] = "-i"; + sargs[sanum++] = ignore; + } + if ( swamp ) { + sargs[sanum++] = swampopt; + } + sargs[sanum++] = "-b"; + sargs[sanum++] = NULL; /* will hold the search base */ + sargs[sanum++] = "-s"; + sargs[sanum++] = NULL; /* will hold the search scope */ + sargs[sanum++] = "-f"; + sargs[sanum++] = NULL; /* will hold the search request */ + + sargs[sanum++] = NULL; + sargs[sanum++] = NULL; /* might hold the "attr" request */ + sextra_args += 2; + + sargs[sanum] = NULL; + + /* + * generate the read clients + */ + + ranum = 0; + snprintf( rcmd, sizeof rcmd, "%s" LDAP_DIRSEP READCMD, + progdir ); + rargs[ranum++] = rcmd; + if ( uri ) { + rargs[ranum++] = "-H"; + rargs[ranum++] = uri; + } else { + rargs[ranum++] = "-h"; + rargs[ranum++] = host; + rargs[ranum++] = "-p"; + rargs[ranum++] = port; + } + rargs[ranum++] = "-D"; + rargs[ranum++] = manager; + rargs[ranum++] = "-w"; + rargs[ranum++] = passwd; + rargs[ranum++] = "-l"; + rargs[ranum++] = rloops; + rargs[ranum++] = "-L"; + rargs[ranum++] = outerloops; + rargs[ranum++] = "-r"; + rargs[ranum++] = retries; + rargs[ranum++] = "-t"; + rargs[ranum++] = delay; + if ( friendly ) { + rargs[ranum++] = friendlyOpt; + } + if ( chaserefs ) { + rargs[ranum++] = "-C"; + } + if ( noattrs ) { + rargs[ranum++] = "-A"; + } + if ( ignore ) { + rargs[ranum++] = "-i"; + rargs[ranum++] = ignore; + } + if ( swamp ) { + rargs[ranum++] = swampopt; + } + rargs[ranum++] = "-e"; + rargs[ranum++] = NULL; /* will hold the read entry */ + + rargs[ranum++] = NULL; + rargs[ranum++] = NULL; /* might hold the filter arg */ + rextra_args += 2; + + rargs[ranum] = NULL; + + /* + * generate the modrdn clients + */ + + nanum = 0; + snprintf( ncmd, sizeof ncmd, "%s" LDAP_DIRSEP MODRDNCMD, + progdir ); + nargs[nanum++] = ncmd; + if ( uri ) { + nargs[nanum++] = "-H"; + nargs[nanum++] = uri; + } else { + nargs[nanum++] = "-h"; + nargs[nanum++] = host; + nargs[nanum++] = "-p"; + nargs[nanum++] = port; + } + nargs[nanum++] = "-D"; + nargs[nanum++] = manager; + nargs[nanum++] = "-w"; + nargs[nanum++] = passwd; + nargs[nanum++] = "-l"; + nargs[nanum++] = nloops; + nargs[nanum++] = "-L"; + nargs[nanum++] = outerloops; + nargs[nanum++] = "-r"; + nargs[nanum++] = retries; + nargs[nanum++] = "-t"; + nargs[nanum++] = delay; + if ( friendly ) { + nargs[nanum++] = friendlyOpt; + } + if ( chaserefs ) { + nargs[nanum++] = "-C"; + } + if ( ignore ) { + nargs[nanum++] = "-i"; + nargs[nanum++] = ignore; + } + nargs[nanum++] = "-e"; + nargs[nanum++] = NULL; /* will hold the modrdn entry */ + nargs[nanum] = NULL; + + /* + * generate the modify clients + */ + + manum = 0; + snprintf( mcmd, sizeof mcmd, "%s" LDAP_DIRSEP MODIFYCMD, + progdir ); + margs[manum++] = mcmd; + if ( uri ) { + margs[manum++] = "-H"; + margs[manum++] = uri; + } else { + margs[manum++] = "-h"; + margs[manum++] = host; + margs[manum++] = "-p"; + margs[manum++] = port; + } + margs[manum++] = "-D"; + margs[manum++] = manager; + margs[manum++] = "-w"; + margs[manum++] = passwd; + margs[manum++] = "-l"; + margs[manum++] = mloops; + margs[manum++] = "-L"; + margs[manum++] = outerloops; + margs[manum++] = "-r"; + margs[manum++] = retries; + margs[manum++] = "-t"; + margs[manum++] = delay; + if ( friendly ) { + margs[manum++] = friendlyOpt; + } + if ( chaserefs ) { + margs[manum++] = "-C"; + } + if ( ignore ) { + margs[manum++] = "-i"; + margs[manum++] = ignore; + } + margs[manum++] = "-e"; + margs[manum++] = NULL; /* will hold the modify entry */ + margs[manum++] = "-a";; + margs[manum++] = NULL; /* will hold the ava */ + margs[manum] = NULL; + + /* + * generate the add/delete clients + */ + + aanum = 0; + snprintf( acmd, sizeof acmd, "%s" LDAP_DIRSEP ADDCMD, + progdir ); + aargs[aanum++] = acmd; + if ( uri ) { + aargs[aanum++] = "-H"; + aargs[aanum++] = uri; + } else { + aargs[aanum++] = "-h"; + aargs[aanum++] = host; + aargs[aanum++] = "-p"; + aargs[aanum++] = port; + } + aargs[aanum++] = "-D"; + aargs[aanum++] = manager; + aargs[aanum++] = "-w"; + aargs[aanum++] = passwd; + aargs[aanum++] = "-l"; + aargs[aanum++] = aloops; + aargs[aanum++] = "-L"; + aargs[aanum++] = outerloops; + aargs[aanum++] = "-r"; + aargs[aanum++] = retries; + aargs[aanum++] = "-t"; + aargs[aanum++] = delay; + if ( friendly ) { + aargs[aanum++] = friendlyOpt; + } + if ( chaserefs ) { + aargs[aanum++] = "-C"; + } + if ( ignore ) { + aargs[aanum++] = "-i"; + aargs[aanum++] = ignore; + } + aargs[aanum++] = "-f"; + aargs[aanum++] = NULL; /* will hold the add data file */ + aargs[aanum] = NULL; + + /* + * generate the bind clients + */ + + banum = 0; + snprintf( bcmd, sizeof bcmd, "%s" LDAP_DIRSEP BINDCMD, + progdir ); + bargs[banum++] = bcmd; + if ( !noinit ) { + bargs[banum++] = "-I"; /* init on each bind */ + } + if ( uri ) { + bargs[banum++] = "-H"; + bargs[banum++] = uri; + } else { + bargs[banum++] = "-h"; + bargs[banum++] = host; + bargs[banum++] = "-p"; + bargs[banum++] = port; + } + bargs[banum++] = "-l"; + bargs[banum++] = bloops; + bargs[banum++] = "-L"; + bargs[banum++] = outerloops; +#if 0 + bargs[banum++] = "-r"; + bargs[banum++] = retries; + bargs[banum++] = "-t"; + bargs[banum++] = delay; +#endif + if ( friendly ) { + bargs[banum++] = friendlyOpt; + } + if ( chaserefs ) { + bargs[banum++] = "-C"; + } + if ( ignore ) { + bargs[banum++] = "-i"; + bargs[banum++] = ignore; + } + if ( nextra ) { + bargs[banum++] = "-B"; + bargs_extra = &bargs[banum++]; + } + bargs[banum++] = "-D"; + bargs[banum++] = NULL; + bargs[banum++] = "-w"; + bargs[banum++] = NULL; + bargs[banum] = NULL; + +#define DOREQ(n,j) ((n) && ((maxkids > (n)) ? ((j) < maxkids ) : ((j) < (n)))) + + for ( j = 0; j < MAXREQS; j++ ) { + /* search */ + if ( DOREQ( snum, j ) ) { + int jj = j % snum; + int x = sanum - sextra_args; + + /* base */ + if ( sbase[jj] != NULL ) { + sargs[sanum - 7] = sbase[jj]; + + } else { + sargs[sanum - 7] = slud[jj]->lud_dn; + } + + /* scope */ + if ( slud[jj] != NULL ) { + sargs[sanum - 5] = (char *)ldap_pvt_scope2str( slud[jj]->lud_scope ); + + } else { + sargs[sanum - 5] = "sub"; + } + + /* filter */ + if ( sreqs[jj] != NULL ) { + sargs[sanum - 3] = sreqs[jj]; + + } else if ( slud[jj]->lud_filter != NULL ) { + sargs[sanum - 3] = slud[jj]->lud_filter; + + } else { + sargs[sanum - 3] = "(objectClass=*)"; + } + + /* extras */ + sargs[x] = NULL; + + /* attr */ + if ( sattrs[jj] != NULL ) { + sargs[x++] = "-a"; + sargs[x++] = sattrs[jj]; + } + + /* attrs */ + if ( slud[jj] != NULL && slud[jj]->lud_attrs != NULL ) { + int i; + + for ( i = 0; slud[jj]->lud_attrs[ i ] != NULL && x + i < MAXARGS - 1; i++ ) { + sargs[x + i] = slud[jj]->lud_attrs[ i ]; + } + sargs[x + i] = NULL; + } + + fork_child( scmd, sargs ); + } + + /* read */ + if ( DOREQ( rnum, j ) ) { + int jj = j % rnum; + int x = ranum - rextra_args; + + rargs[ranum - 3] = rreqs[jj]; + if ( rflts[jj] != NULL ) { + rargs[x++] = "-f"; + rargs[x++] = rflts[jj]; + } + rargs[x] = NULL; + fork_child( rcmd, rargs ); + } + + /* rename */ + if ( j < nnum ) { + nargs[nanum - 1] = nreqs[j]; + fork_child( ncmd, nargs ); + } + + /* modify */ + if ( j < mnum ) { + margs[manum - 3] = mdn[j]; + margs[manum - 1] = mreqs[j]; + fork_child( mcmd, margs ); + } + + /* add/delete */ + if ( j < anum ) { + aargs[aanum - 1] = afiles[j]; + fork_child( acmd, aargs ); + } + + /* bind */ + if ( DOREQ( bnum, j ) ) { + int jj = j % bnum; + + if ( nextra ) { + int n = ((double)nextra)*rand()/(RAND_MAX + 1.0); + extra_t *e; + + for ( e = extra; n-- > 0; e = e->next ) + ; + *bargs_extra = e->action; + } + + if ( battrs[jj] != NULL ) { + bargs[banum - 3] = manager ? manager : ""; + bargs[banum - 1] = passwd ? passwd : ""; + + bargs[banum + 0] = "-b"; + bargs[banum + 1] = breqs[jj]; + bargs[banum + 2] = "-f"; + bargs[banum + 3] = bcreds[jj]; + bargs[banum + 4] = "-a"; + bargs[banum + 5] = battrs[jj]; + bargs[banum + 6] = NULL; + + } else { + bargs[banum - 3] = breqs[jj]; + bargs[banum - 1] = bcreds[jj]; + bargs[banum] = NULL; + } + + fork_child( bcmd, bargs ); + bargs[banum] = NULL; + } + } + + wait4kids( -1 ); + + exit( EXIT_SUCCESS ); +} + +static char * +get_file_name( char *dirname, char *filename ) +{ + char buf[MAXPATHLEN]; + + snprintf( buf, sizeof buf, "%s" LDAP_DIRSEP "%s", + dirname, filename ); + return( strdup( buf )); +} + + +static int +get_search_filters( char *filename, char *filters[], char *attrs[], char *bases[], LDAPURLDesc *luds[] ) +{ + FILE *fp; + int filter = 0; + + if ( (fp = fopen( filename, "r" )) != NULL ) { + char line[BUFSIZ]; + + while (( filter < MAXREQS ) && ( fgets( line, BUFSIZ, fp ))) { + char *nl; + int got_URL = 0; + + if (( nl = strchr( line, '\r' )) || ( nl = strchr( line, '\n' ))) + *nl = '\0'; + + if ( luds ) luds[filter] = NULL; + + if ( luds && strncmp( line, "ldap:///", STRLENOF( "ldap:///" ) ) == 0 ) { + LDAPURLDesc *lud; + + got_URL = 1; + bases[filter] = NULL; + if ( ldap_url_parse( line, &lud ) != LDAP_URL_SUCCESS ) { + filter = -filter - 1; + break; + } + + if ( lud->lud_dn == NULL || lud->lud_exts != NULL ) { + filter = -filter - 1; + ldap_free_urldesc( lud ); + break; + } + + luds[filter] = lud; + + } else { + bases[filter] = ArgDup( line ); + } + if ( fgets( line, BUFSIZ, fp ) == NULL ) + *line = '\0'; + if (( nl = strchr( line, '\r' )) || ( nl = strchr( line, '\n' ))) + *nl = '\0'; + + filters[filter] = ArgDup( line ); + if ( attrs ) { + if ( filters[filter][0] == '+') { + char *sep = strchr( filters[filter], ':' ); + + attrs[ filter ] = &filters[ filter ][ 1 ]; + if ( sep != NULL ) { + sep[ 0 ] = '\0'; + /* NOTE: don't free this! */ + filters[ filter ] = &sep[ 1 ]; + } + + } else { + attrs[ filter ] = NULL; + } + } + filter++; + + } + fclose( fp ); + } + + return filter; +} + + +static int +get_read_entries( char *filename, char *entries[], char *filters[] ) +{ + FILE *fp; + int entry = 0; + + if ( (fp = fopen( filename, "r" )) != NULL ) { + char line[BUFSIZ]; + + while (( entry < MAXREQS ) && ( fgets( line, BUFSIZ, fp ))) { + char *nl; + + if (( nl = strchr( line, '\r' )) || ( nl = strchr( line, '\n' ))) + *nl = '\0'; + if ( filters != NULL && line[0] == '+' ) { + LDAPURLDesc *lud; + + if ( ldap_url_parse( &line[1], &lud ) != LDAP_URL_SUCCESS ) { + entry = -entry - 1; + break; + } + + if ( lud->lud_dn == NULL || lud->lud_dn[ 0 ] == '\0' ) { + ldap_free_urldesc( lud ); + entry = -entry - 1; + break; + } + + entries[entry] = ArgDup( lud->lud_dn ); + + if ( lud->lud_filter ) { + filters[entry] = ArgDup( lud->lud_filter ); + + } else { + filters[entry] = ArgDup( "(objectClass=*)" ); + } + ldap_free_urldesc( lud ); + + } else { + if ( filters != NULL ) + filters[entry] = NULL; + + entries[entry] = ArgDup( line ); + } + + entry++; + + } + fclose( fp ); + } + + return( entry ); +} + +#ifndef HAVE_WINSOCK +static void +fork_child( char *prog, char **args ) +{ + /* note: obscures global pid var; intended */ + pid_t pid; + + wait4kids( maxkids ); + + switch ( pid = fork() ) { + case 0: /* child */ +#ifdef HAVE_EBCDIC + /* The __LIBASCII execvp only handles ASCII "prog", + * we still need to translate the arg vec ourselves. + */ + { char *arg2[MAXREQS]; + int i; + + for (i=0; args[i]; i++) { + arg2[i] = ArgDup(args[i]); + __atoe(arg2[i]); + } + arg2[i] = NULL; + args = arg2; } +#endif + execvp( prog, args ); + tester_perror( "execvp", NULL ); + { int i; + for (i=0; args[i]; i++); + fprintf(stderr,"%d args\n", i); + for (i=0; args[i]; i++) + fprintf(stderr,"%d %s\n", i, args[i]); + } + + exit( EXIT_FAILURE ); + break; + + case -1: /* trouble */ + tester_perror( "fork", NULL ); + break; + + default: /* parent */ + nkids++; + break; + } +} + +static void +wait4kids( int nkidval ) +{ + int status; + + while ( nkids >= nkidval ) { + pid_t pid = wait( &status ); + + if ( WIFSTOPPED(status) ) { + fprintf( stderr, + "stopping: child PID=%ld stopped with signal %d\n", + (long) pid, (int) WSTOPSIG(status) ); + + } else if ( WIFSIGNALED(status) ) { + fprintf( stderr, + "stopping: child PID=%ld terminated with signal %d%s\n", + (long) pid, (int) WTERMSIG(status), +#ifdef WCOREDUMP + WCOREDUMP(status) ? ", core dumped" : "" +#else + "" +#endif + ); + exit( WEXITSTATUS(status) ); + + } else if ( WEXITSTATUS(status) != 0 ) { + fprintf( stderr, + "stopping: child PID=%ld exited with status %d\n", + (long) pid, (int) WEXITSTATUS(status) ); + exit( WEXITSTATUS(status) ); + + } else { + nkids--; + } + } +} +#else + +static void +wait4kids( int nkidval ) +{ + int rc, i; + + while ( nkids >= nkidval ) { + rc = WaitForMultipleObjects( nkids, children, FALSE, INFINITE ); + for ( i=rc - WAIT_OBJECT_0; i<nkids-1; i++) + children[i] = children[i+1]; + nkids--; + } +} + +static void +fork_child( char *prog, char **args ) +{ + int rc; + + wait4kids( maxkids ); + + rc = _spawnvp( _P_NOWAIT, prog, args ); + + if ( rc == -1 ) { + tester_perror( "_spawnvp", NULL ); + } else { + children[nkids++] = (HANDLE)rc; + } +} +#endif diff --git a/tests/run.in b/tests/run.in new file mode 100644 index 0000000..9e1d65c --- /dev/null +++ b/tests/run.in @@ -0,0 +1,276 @@ +#!/bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +USAGE="$0 [-b <backend>] [-c] [-k] [-l #] [-p] [-s {ro|rp}] [-u] [-w] <script>" + +# configure generated +SRCDIR="@srcdir@" +TOPSRCDIR="@top_srcdir@" +LN_S="@LN_S@" +EGREP_CMD="@EGREP@" + +export SRCDIR TOPSRCDIR LN_S EGREP_CMD + +# backends known to ./run -b <backend> (used to deduce $BACKENDTYPE) +AC_bdb=@BUILD_BDB@ +AC_hdb=@BUILD_HDB@ +AC_ldif=yes +AC_mdb=@BUILD_MDB@ +AC_null=@BUILD_NULL@ + +# other backends +AC_ldap=ldap@BUILD_LDAP@ +AC_meta=meta@BUILD_META@ +AC_monitor=@BUILD_MONITOR@ +AC_relay=relay@BUILD_RELAY@ +AC_sql=sql@BUILD_SQL@ + +# overlays +AC_accesslog=accesslog@BUILD_ACCESSLOG@ +AC_constraint=constraint@BUILD_CONSTRAINT@ +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@ +AC_retcode=retcode@BUILD_RETCODE@ +AC_translucent=translucent@BUILD_TRANSLUCENT@ +AC_unique=unique@BUILD_UNIQUE@ +AC_rwm=rwm@BUILD_RWM@ +AC_syncprov=syncprov@BUILD_SYNCPROV@ +AC_valsort=valsort@BUILD_VALSORT@ + +# misc +AC_WITH_SASL=@WITH_SASL@ +AC_WITH_TLS=@WITH_TLS@ +AC_WITH_MODULES_ENABLED=@WITH_MODULES_ENABLED@ +AC_ACI_ENABLED=aci@WITH_ACI_ENABLED@ +AC_THREADS=threads@BUILD_THREAD@ +AC_LIBS_DYNAMIC=lib@BUILD_LIBS_DYNAMIC@ + +# sanitize +if test "${AC_ldap}" = "ldapmod" && test "${AC_LIBS_DYNAMIC}" = "static" ; then + AC_ldap="ldapno" +fi +if test "${AC_meta}" = "metamod" && test "${AC_LIBS_DYNAMIC}" = "static" ; then + AC_meta="metano" +fi + +export AC_bdb AC_hdb AC_ldap AC_mdb AC_meta AC_monitor AC_null AC_relay AC_sql \ + AC_accesslog AC_constraint 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 + +if test ! -x ../servers/slapd/slapd ; then + echo "Could not locate slapd(8)" + exit 1 +fi + +BACKEND= +CLEAN=no +WAIT=0 +KILLSERVERS=yes +PRESERVE=${PRESERVE-no} +SYNCMODE=${SYNCMODE-rp} +USERDATA=no +LOOP=1 +COUNTER=1 + +while test $# -gt 0 ; do + case "$1" in + -b | -backend) + BACKEND="$2" + shift; shift ;; + + -c | -clean) + CLEAN=yes + shift ;; + + -k | -kill) + KILLSERVERS=no + shift ;; + -l | -loop) + NUM="`echo $2 | sed 's/[0-9]//g'`" + if [ -z "$NUM" ]; then + LOOP=$2 + else + echo "Loop variable not an int: $2" + echo "$USAGE"; exit 1 + fi + shift ; + shift ;; + + -p | -preserve) + PRESERVE=yes + shift ;; + + -s | -syncmode) + case "$2" in + ro | rp) + SYNCMODE="$2" + ;; + *) + echo "unknown sync mode $2" + echo "$USAGE"; exit 1 + ;; + esac + shift; shift ;; + + -u | -userdata) + USERDATA=yes + shift ;; + + -w | -wait) + WAIT=1 + shift ;; + + -) + shift + break ;; + + -*) + echo "$USAGE"; exit 1 + ;; + + *) + break ;; + esac +done + +if test -z "$BACKEND" ; then + for b in bdb hdb mdb ; do + if eval "test \"\$AC_$b\" != no" ; then + BACKEND=$b + break + fi + done + if test -z "$BACKEND" ; then + echo "No suitable default database backend configured" >&2 + exit 1 + fi +fi + +BACKENDTYPE=`eval 'echo $AC_'$BACKEND` +if test "x$BACKENDTYPE" = "x" ; then + BACKENDTYPE="unknown" +fi + +# Backend features. indexdb: indexing and unchecked limit. +# maindb: main storage backend. Currently index,limits,mode,paged results. +INDEXDB=noindexdb MAINDB=nomaindb +case $BACKEND in + bdb|hdb|mdb) INDEXDB=indexdb MAINDB=maindb ;; + ndb) INDEXDB=indexdb ;; +esac + +export BACKEND BACKENDTYPE INDEXDB MAINDB \ + WAIT KILLSERVERS PRESERVE SYNCMODE USERDATA + +if test $# = 0 ; then + echo "$USAGE"; exit 1 +fi + +# need defines.sh for the definitions of the directories +. $SRCDIR/scripts/defines.sh + +SCRIPTDIR="${SRCDIR}/scripts" +ITSDIR="${SRCDIR}/data/regressions" +SCRIPTNAME="$1" +shift + +if test -x "${SCRIPTDIR}/${SCRIPTNAME}" ; then + SCRIPT="${SCRIPTDIR}/${SCRIPTNAME}" +elif test -x "`echo ${SCRIPTDIR}/test*-${SCRIPTNAME}`"; then + SCRIPT="`echo ${SCRIPTDIR}/test*-${SCRIPTNAME}`" +elif test -x "`echo ${SCRIPTDIR}/${SCRIPTNAME}-*`"; then + SCRIPT="`echo ${SCRIPTDIR}/${SCRIPTNAME}-*`" +elif test -x "`echo ${ITSDIR}/${SCRIPTNAME}/${SCRIPTNAME}`"; then + SCRIPT="`echo ${ITSDIR}/${SCRIPTNAME}/${SCRIPTNAME}`" +else + echo "run: ${SCRIPTNAME} not found (or not executable)" + exit 1; +fi + +if test ! -r ${DATADIR}/test.ldif ; then + ${LN_S} ${SRCDIR}/data ${DATADIR} +fi +if test ! -r ${SCHEMADIR}/core.schema ; then + ${LN_S} ${TOPSRCDIR}/servers/slapd/schema ${SCHEMADIR} +fi + +if test -d ${TESTDIR} ; then + if test $PRESERVE = no ; then + echo "Cleaning up test run directory leftover from previous run." + /bin/rm -rf ${TESTDIR} + elif test $PRESERVE = yes ; then + echo "Cleaning up only database directories leftover from previous run." + /bin/rm -rf ${TESTDIR}/db.* + fi +fi +if test $BACKEND = ndb ; then + mysql --user root <<EOF + drop database if exists db_1; + drop database if exists db_2; + drop database if exists db_3; + drop database if exists db_4; + drop database if exists db_5; + drop database if exists db_6; +EOF +fi +mkdir -p ${TESTDIR} + +if test $USERDATA = yes ; then + if test ! -d userdata ; then + echo "User data directory (userdata) does not exist." + exit 1 + fi + cp -R userdata/* ${TESTDIR} +fi + +# disable LDAP initialization +LDAPNOINIT=true; export LDAPNOINIT + +echo "Running ${SCRIPT} for ${BACKEND}..." +while [ $COUNTER -le $LOOP ]; do + if [ $LOOP -gt 1 ]; then + echo "Running $COUNTER of $LOOP iterations" + fi + $SCRIPT $* + RC=$? + + if test $CLEAN = yes ; then + echo "Cleaning up test run directory from this run." + /bin/rm -rf ${TESTDIR} + echo "Cleaning up symlinks." + /bin/rm -f ${DATADIR} ${SCHEMADIR} + fi + + if [ $RC -ne 0 ]; then + if [ $LOOP -gt 1 ]; then + echo "Failed after $COUNTER of $LOOP iterations" + fi + exit $RC + else + COUNTER=`expr $COUNTER + 1` + if [ $COUNTER -le $LOOP ]; then + echo "Cleaning up test run directory from this run." + /bin/rm -rf ${TESTDIR} + fi + fi +done +exit $RC diff --git a/tests/scripts/all b/tests/scripts/all new file mode 100755 index 0000000..1e7fe92 --- /dev/null +++ b/tests/scripts/all @@ -0,0 +1,102 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +. $SRCDIR/scripts/defines.sh + +TB="" TN="" +if test -t 1 ; then + TB=`$SHTOOL echo -e "%B" 2>/dev/null` + TN=`$SHTOOL echo -e "%b" 2>/dev/null` +fi + +FAILCOUNT=0 +SKIPCOUNT=0 +SLEEPTIME=10 + +echo ">>>>> Executing all LDAP tests for $BACKEND" + +if [ -n "$NOEXIT" ]; then + echo "Result Test" > $TESTWD/results +fi + +for CMD in $SRCDIR/scripts/test*; do + case "$CMD" in + *~) continue;; + *.bak) continue;; + *.orig) continue;; + *.sav) continue;; + *) test -f "$CMD" || continue;; + esac + + # remove cruft from prior test + if test $PRESERVE = yes ; then + /bin/rm -rf $TESTDIR/db.* + else + /bin/rm -rf $TESTDIR + fi + if test $BACKEND = ndb ; then + mysql --user root <<EOF + drop database if exists db_1; + drop database if exists db_2; + drop database if exists db_3; + drop database if exists db_4; + drop database if exists db_5; + drop database if exists db_6; +EOF + fi + + BCMD=`basename $CMD` + if [ -x "$CMD" ]; then + echo ">>>>> Starting ${TB}$BCMD${TN} for $BACKEND..." + $CMD + RC=$? + if test $RC -eq 0 ; then + echo ">>>>> $BCMD completed ${TB}OK${TN} for $BACKEND." + else + echo ">>>>> $BCMD ${TB}failed${TN} for $BACKEND" + FAILCOUNT=`expr $FAILCOUNT + 1` + + if [ -n "$NOEXIT" ]; then + echo "Continuing." + else + echo "(exit $RC)" + exit $RC + fi + fi + else + echo ">>>>> Skipping ${TB}$BCMD${TN} for $BACKEND." + SKIPCOUNT=`expr $SKIPCOUNT + 1` + RC="-" + fi + + if [ -n "$NOEXIT" ]; then + echo "$RC $BCMD" >> $TESTWD/results + fi + +# echo ">>>>> waiting $SLEEPTIME seconds for things to exit" +# sleep $SLEEPTIME + echo "" +done + +if [ -n "$NOEXIT" ]; then + if [ "$FAILCOUNT" -gt 0 ]; then + cat $TESTWD/results + echo "$FAILCOUNT tests for $BACKEND ${TB}failed${TN}. Please review the test log." + else + echo "All executed tests for $BACKEND ${TB}succeeded${TN}." + fi +fi + +echo "$SKIPCOUNT tests for $BACKEND were ${TB}skipped${TN}." diff --git a/tests/scripts/conf.sh b/tests/scripts/conf.sh new file mode 100755 index 0000000..98bfb51 --- /dev/null +++ b/tests/scripts/conf.sh @@ -0,0 +1,82 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. +MONMOD=nomod +if [ x"$MONITORDB" = xyes -o x"$MONITORDB" = xmod ] ; then + MON=monitor + if [ $MONITORDB = mod ] ; then + MONMOD=monitormod + fi +else + MON=nomonitor +fi +if [ x"$WITH_SASL" = x"yes" -a x"$USE_SASL" != x"no" ] ; then + SASL="sasl" + if [ x"$USE_SASL" = x"yes" ] ; then + USE_SASL=DIGEST-MD5 + fi + SASL_MECH="\"saslmech=$USE_SASL\"" +else + SASL="nosasl" + SASL_MECH= +fi +sed -e "s/@BACKEND@/${BACKEND}/" \ + -e "s/^#${BACKEND}#//" \ + -e "/^#~/s/^#[^#]*~${BACKEND}~[^#]*#/#omit: /" \ + -e "s/^#~[^#]*~#//" \ + -e "s/@RELAY@/${RELAY}/" \ + -e "s/^#relay-${RELAY}#//" \ + -e "s/^#${BACKENDTYPE}#//" \ + -e "s/^#${AC_ldap}#//" \ + -e "s/^#${AC_meta}#//" \ + -e "s/^#${AC_relay}#//" \ + -e "s/^#${AC_sql}#//" \ + -e "s/^#${RDBMS}#//" \ + -e "s/^#${AC_accesslog}#//" \ + -e "s/^#${AC_dds}#//" \ + -e "s/^#${AC_dynlist}#//" \ + -e "s/^#${AC_memberof}#//" \ + -e "s/^#${AC_pcache}#//" \ + -e "s/^#${AC_ppolicy}#//" \ + -e "s/^#${AC_refint}#//" \ + -e "s/^#${AC_retcode}#//" \ + -e "s/^#${AC_rwm}#//" \ + -e "s/^#${AC_syncprov}#//" \ + -e "s/^#${AC_translucent}#//" \ + -e "s/^#${AC_unique}#//" \ + -e "s/^#${AC_valsort}#//" \ + -e "s/^#${INDEXDB}#//" \ + -e "s/^#${MAINDB}#//" \ + -e "s/^#${MON}#//" \ + -e "s/^#${MONMOD}#//" \ + -e "s/^#${SASL}#//" \ + -e "s/^#${ACI}#//" \ + -e "s;@URI1@;${URI1};" \ + -e "s;@URI2@;${URI2};" \ + -e "s;@URI3@;${URI3};" \ + -e "s;@URI4@;${URI4};" \ + -e "s;@URI5@;${URI5};" \ + -e "s;@URI6@;${URI6};" \ + -e "s;@PORT1@;${PORT1};" \ + -e "s;@PORT2@;${PORT2};" \ + -e "s;@PORT3@;${PORT3};" \ + -e "s;@PORT4@;${PORT4};" \ + -e "s;@PORT5@;${PORT5};" \ + -e "s;@PORT6@;${PORT6};" \ + -e "s/@SASL_MECH@/${SASL_MECH}/" \ + -e "s;@TESTDIR@;${TESTDIR};" \ + -e "s;@TESTWD@;${TESTWD};" \ + -e "s;@DATADIR@;${DATADIR};" \ + -e "s;@SCHEMADIR@;${SCHEMADIR};" \ + -e "/^#/d" diff --git a/tests/scripts/defines.sh b/tests/scripts/defines.sh new file mode 100755 index 0000000..7d62023 --- /dev/null +++ b/tests/scripts/defines.sh @@ -0,0 +1,366 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +umask 077 + +TESTWD=`pwd` + +# backends +MONITORDB=${AC_monitor-no} +BACKLDAP=${AC_ldap-ldapno} +BACKMETA=${AC_meta-metano} +BACKRELAY=${AC_relay-relayno} +BACKSQL=${AC_sql-sqlno} + RDBMS=${SLAPD_USE_SQL-rdbmsno} + RDBMSWRITE=${SLAPD_USE_SQLWRITE-no} + +# overlays +ACCESSLOG=${AC_accesslog-accesslogno} +CONSTRAINT=${AC_constraint-constraintno} +DDS=${AC_dds-ddsno} +DYNLIST=${AC_dynlist-dynlistno} +MEMBEROF=${AC_memberof-memberofno} +PROXYCACHE=${AC_pcache-pcacheno} +PPOLICY=${AC_ppolicy-ppolicyno} +REFINT=${AC_refint-refintno} +RETCODE=${AC_retcode-retcodeno} +RWM=${AC_rwm-rwmno} +SYNCPROV=${AC_syncprov-syncprovno} +TRANSLUCENT=${AC_translucent-translucentno} +UNIQUE=${AC_unique-uniqueno} +VALSORT=${AC_valsort-valsortno} + +# misc +WITH_SASL=${AC_WITH_SASL-no} +USE_SASL=${SLAPD_USE_SASL-no} +ACI=${AC_ACI_ENABLED-acino} +THREADS=${AC_THREADS-threadsno} +SLEEP0=${SLEEP0-1} +SLEEP1=${SLEEP1-7} +SLEEP2=${SLEEP2-15} + +# dirs +PROGDIR=./progs +DATADIR=${USER_DATADIR-./testdata} +TESTDIR=${USER_TESTDIR-$TESTWD/testrun} +SCHEMADIR=${USER_SCHEMADIR-./schema} +case "$SCHEMADIR" in +.*) ABS_SCHEMADIR="$TESTWD/$SCHEMADIR" ;; +*) ABS_SCHEMADIR="$SCHEMADIR" ;; +esac + +DBDIR1A=$TESTDIR/db.1.a +DBDIR1B=$TESTDIR/db.1.b +DBDIR1C=$TESTDIR/db.1.c +DBDIR1=$DBDIR1A +DBDIR2A=$TESTDIR/db.2.a +DBDIR2B=$TESTDIR/db.2.b +DBDIR2C=$TESTDIR/db.2.c +DBDIR2=$DBDIR2A +DBDIR3=$TESTDIR/db.3.a +DBDIR4=$TESTDIR/db.4.a +DBDIR5=$TESTDIR/db.5.a +DBDIR6=$TESTDIR/db.6.a +SQLCONCURRENCYDIR=$DATADIR/sql-concurrency + +CLIENTDIR=../clients/tools +#CLIENTDIR=/usr/local/bin + +# conf +CONF=$DATADIR/slapd.conf +CONFTWO=$DATADIR/slapd2.conf +CONF2DB=$DATADIR/slapd-2db.conf +MCONF=$DATADIR/slapd-master.conf +COMPCONF=$DATADIR/slapd-component.conf +PWCONF=$DATADIR/slapd-pw.conf +WHOAMICONF=$DATADIR/slapd-whoami.conf +ACLCONF=$DATADIR/slapd-acl.conf +RCONF=$DATADIR/slapd-referrals.conf +SRMASTERCONF=$DATADIR/slapd-syncrepl-master.conf +DSRMASTERCONF=$DATADIR/slapd-deltasync-master.conf +DSRSLAVECONF=$DATADIR/slapd-deltasync-slave.conf +PPOLICYCONF=$DATADIR/slapd-ppolicy.conf +PROXYCACHECONF=$DATADIR/slapd-proxycache.conf +PROXYAUTHZCONF=$DATADIR/slapd-proxyauthz.conf +CACHEMASTERCONF=$DATADIR/slapd-cache-master.conf +PROXYAUTHZMASTERCONF=$DATADIR/slapd-cache-master-proxyauthz.conf +R1SRSLAVECONF=$DATADIR/slapd-syncrepl-slave-refresh1.conf +R2SRSLAVECONF=$DATADIR/slapd-syncrepl-slave-refresh2.conf +P1SRSLAVECONF=$DATADIR/slapd-syncrepl-slave-persist1.conf +P2SRSLAVECONF=$DATADIR/slapd-syncrepl-slave-persist2.conf +P3SRSLAVECONF=$DATADIR/slapd-syncrepl-slave-persist3.conf +REFSLAVECONF=$DATADIR/slapd-ref-slave.conf +SCHEMACONF=$DATADIR/slapd-schema.conf +GLUECONF=$DATADIR/slapd-glue.conf +REFINTCONF=$DATADIR/slapd-refint.conf +RETCODECONF=$DATADIR/slapd-retcode.conf +UNIQUECONF=$DATADIR/slapd-unique.conf +LIMITSCONF=$DATADIR/slapd-limits.conf +DNCONF=$DATADIR/slapd-dn.conf +EMPTYDNCONF=$DATADIR/slapd-emptydn.conf +IDASSERTCONF=$DATADIR/slapd-idassert.conf +LDAPGLUECONF1=$DATADIR/slapd-ldapglue.conf +LDAPGLUECONF2=$DATADIR/slapd-ldapgluepeople.conf +LDAPGLUECONF3=$DATADIR/slapd-ldapgluegroups.conf +RELAYCONF=$DATADIR/slapd-relay.conf +CHAINCONF1=$DATADIR/slapd-chain1.conf +CHAINCONF2=$DATADIR/slapd-chain2.conf +GLUESYNCCONF1=$DATADIR/slapd-glue-syncrepl1.conf +GLUESYNCCONF2=$DATADIR/slapd-glue-syncrepl2.conf +SQLCONF=$DATADIR/slapd-sql.conf +SQLSRMASTERCONF=$DATADIR/slapd-sql-syncrepl-master.conf +TRANSLUCENTLOCALCONF=$DATADIR/slapd-translucent-local.conf +TRANSLUCENTREMOTECONF=$DATADIR/slapd-translucent-remote.conf +METACONF=$DATADIR/slapd-meta.conf +METACONF1=$DATADIR/slapd-meta-target1.conf +METACONF2=$DATADIR/slapd-meta-target2.conf +GLUELDAPCONF=$DATADIR/slapd-glue-ldap.conf +ACICONF=$DATADIR/slapd-aci.conf +VALSORTCONF=$DATADIR/slapd-valsort.conf +DYNLISTCONF=$DATADIR/slapd-dynlist.conf +RSLAVECONF=$DATADIR/slapd-repl-slave-remote.conf +PLSRSLAVECONF=$DATADIR/slapd-syncrepl-slave-persist-ldap.conf +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 +VALREGEXCONF=$DATADIR/slapd-valregex.conf + +DYNAMICCONF=$DATADIR/slapd-dynamic.ldif + +# generated files +CONF1=$TESTDIR/slapd.1.conf +CONF2=$TESTDIR/slapd.2.conf +CONF3=$TESTDIR/slapd.3.conf +CONF4=$TESTDIR/slapd.4.conf +CONF5=$TESTDIR/slapd.5.conf +CONF6=$TESTDIR/slapd.6.conf +ADDCONF=$TESTDIR/slapadd.conf +CONFLDIF=$TESTDIR/slapd-dynamic.ldif + +LOG1=$TESTDIR/slapd.1.log +LOG2=$TESTDIR/slapd.2.log +LOG3=$TESTDIR/slapd.3.log +LOG4=$TESTDIR/slapd.4.log +LOG5=$TESTDIR/slapd.5.log +LOG6=$TESTDIR/slapd.6.log +SLAPADDLOG1=$TESTDIR/slapadd.1.log +SLURPLOG=$TESTDIR/slurp.log + +CONFIGPWF=$TESTDIR/configpw + +# args +TOOLARGS="-x $LDAP_TOOLARGS" +TOOLPROTO="-P 3" + +# cmds +CONFFILTER=$SRCDIR/scripts/conf.sh + +MONITORDATA=$SRCDIR/scripts/monitor_data.sh + +SLAPADD="$TESTWD/../servers/slapd/slapd -Ta -d 0 $LDAP_VERBOSE" +SLAPCAT="$TESTWD/../servers/slapd/slapd -Tc -d 0 $LDAP_VERBOSE" +SLAPINDEX="$TESTWD/../servers/slapd/slapd -Ti -d 0 $LDAP_VERBOSE" +SLAPPASSWD="$TESTWD/../servers/slapd/slapd -Tpasswd" + +unset DIFF_OPTIONS +# NOTE: -u/-c is not that portable... +DIFF="diff -i" +CMP="diff -i" +BCMP="diff -iB" +CMPOUT=/dev/null +SLAPD="$TESTWD/../servers/slapd/slapd -s0" +LDAPPASSWD="$CLIENTDIR/ldappasswd $TOOLARGS" +LDAPSASLSEARCH="$CLIENTDIR/ldapsearch $TOOLPROTO $LDAP_TOOLARGS -LLL" +LDAPSEARCH="$CLIENTDIR/ldapsearch $TOOLPROTO $TOOLARGS -LLL" +LDAPRSEARCH="$CLIENTDIR/ldapsearch $TOOLPROTO $TOOLARGS" +LDAPDELETE="$CLIENTDIR/ldapdelete $TOOLPROTO $TOOLARGS" +LDAPMODIFY="$CLIENTDIR/ldapmodify $TOOLPROTO $TOOLARGS" +LDAPADD="$CLIENTDIR/ldapmodify -a $TOOLPROTO $TOOLARGS" +LDAPMODRDN="$CLIENTDIR/ldapmodrdn $TOOLPROTO $TOOLARGS" +LDAPWHOAMI="$CLIENTDIR/ldapwhoami $TOOLARGS" +LDAPCOMPARE="$CLIENTDIR/ldapcompare $TOOLARGS" +LDAPEXOP="$CLIENTDIR/ldapexop $TOOLARGS" +SLAPDTESTER=$PROGDIR/slapd-tester +LDIFFILTER=$PROGDIR/ldif-filter +SLAPDMTREAD=$PROGDIR/slapd-mtread +LVL=${SLAPD_DEBUG-0x4105} +LOCALHOST=localhost +BASEPORT=${SLAPD_BASEPORT-9010} +PORT1=`expr $BASEPORT + 1` +PORT2=`expr $BASEPORT + 2` +PORT3=`expr $BASEPORT + 3` +PORT4=`expr $BASEPORT + 4` +PORT5=`expr $BASEPORT + 5` +PORT6=`expr $BASEPORT + 6` +URI1="ldap://${LOCALHOST}:$PORT1/" +URI2="ldap://${LOCALHOST}:$PORT2/" +URI3="ldap://${LOCALHOST}:$PORT3/" +URI4="ldap://${LOCALHOST}:$PORT4/" +URI5="ldap://${LOCALHOST}:$PORT5/" +URI6="ldap://${LOCALHOST}:$PORT6/" + +# LDIF +LDIF=$DATADIR/test.ldif +LDIFADD1=$DATADIR/do_add.1 +LDIFGLUED=$DATADIR/test-glued.ldif +LDIFORDERED=$DATADIR/test-ordered.ldif +LDIFORDEREDCP=$DATADIR/test-ordered-cp.ldif +LDIFORDEREDNOCP=$DATADIR/test-ordered-nocp.ldif +LDIFBASE=$DATADIR/test-base.ldif +LDIFPASSWD=$DATADIR/passwd.ldif +LDIFWHOAMI=$DATADIR/test-whoami.ldif +LDIFPASSWDOUT=$DATADIR/passwd-out.ldif +LDIFPPOLICY=$DATADIR/ppolicy.ldif +LDIFLANG=$DATADIR/test-lang.ldif +LDIFLANGOUT=$DATADIR/lang-out.ldif +LDIFREF=$DATADIR/referrals.ldif +LDIFREFINT=$DATADIR/test-refint.ldif +LDIFUNIQUE=$DATADIR/test-unique.ldif +LDIFLIMITS=$DATADIR/test-limits.ldif +LDIFDN=$DATADIR/test-dn.ldif +LDIFEMPTYDN1=$DATADIR/test-emptydn1.ldif +LDIFEMPTYDN2=$DATADIR/test-emptydn2.ldif +LDIFIDASSERT1=$DATADIR/test-idassert1.ldif +LDIFIDASSERT2=$DATADIR/test-idassert2.ldif +LDIFLDAPGLUE1=$DATADIR/test-ldapglue.ldif +LDIFLDAPGLUE2=$DATADIR/test-ldapgluepeople.ldif +LDIFLDAPGLUE3=$DATADIR/test-ldapgluegroups.ldif +LDIFCOMPMATCH=$DATADIR/test-compmatch.ldif +LDIFCHAIN1=$DATADIR/test-chain1.ldif +LDIFCHAIN2=$DATADIR/test-chain2.ldif +LDIFTRANSLUCENTDATA=$DATADIR/test-translucent-data.ldif +LDIFTRANSLUCENTCONFIG=$DATADIR/test-translucent-config.ldif +LDIFTRANSLUCENTADD=$DATADIR/test-translucent-add.ldif +LDIFTRANSLUCENTMERGED=$DATADIR/test-translucent-merged.ldif +LDIFMETA=$DATADIR/test-meta.ldif +LDIFVALSORT=$DATADIR/test-valsort.ldif +SQLADD=$DATADIR/sql-add.ldif +LDIFUNORDERED=$DATADIR/test-unordered.ldif +LDIFREORDERED=$DATADIR/test-reordered.ldif + +# strings +MONITOR="" +REFDN="c=US" +BASEDN="dc=example,dc=com" +MANAGERDN="cn=Manager,$BASEDN" +UPDATEDN="cn=Replica,$BASEDN" +PASSWD=secret +BABSDN="cn=Barbara Jensen,ou=Information Technology DivisioN,ou=People,$BASEDN" +BJORNSDN="cn=Bjorn Jensen,ou=Information Technology DivisioN,ou=People,$BASEDN" +BADBJORNSDN="cn=Bjorn JensenNotReally,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" +EMPTYDNDN="cn=Manager,c=US" +TRANSLUCENTROOT="o=translucent" +TRANSLUCENTUSER="ou=users,o=translucent" +TRANSLUCENTDN="uid=binder,o=translucent" +TRANSLUCENTPASSWD="bindtest" +METABASEDN="ou=Meta,$BASEDN" +METAMANAGERDN="cn=Manager,$METABASEDN" +VALSORTDN="cn=Manager,o=valsort" +VALSORTBASEDN="o=valsort" +MONITORDN="cn=Monitor" +OPERATIONSMONITORDN="cn=Operations,$MONITORDN" +CONNECTIONSMONITORDN="cn=Connections,$MONITORDN" +DATABASESMONITORDN="cn=Databases,$MONITORDN" +STATISTICSMONITORDN="cn=Statistics,$MONITORDN" + +# generated outputs +SEARCHOUT=$TESTDIR/ldapsearch.out +SEARCHOUT2=$TESTDIR/ldapsearch2.out +SEARCHFLT=$TESTDIR/ldapsearch.flt +SEARCHFLT2=$TESTDIR/ldapsearch2.flt +LDIFFLT=$TESTDIR/ldif.flt +LDIFFLT2=$TESTDIR/ldif2.flt +TESTOUT=$TESTDIR/test.out +INITOUT=$TESTDIR/init.out +VALSORTOUT1=$DATADIR/valsort1.out +VALSORTOUT2=$DATADIR/valsort2.out +VALSORTOUT3=$DATADIR/valsort3.out +MONITOROUT1=$DATADIR/monitor1.out +MONITOROUT2=$DATADIR/monitor2.out +MONITOROUT3=$DATADIR/monitor3.out +MONITOROUT4=$DATADIR/monitor4.out + +SERVER1OUT=$TESTDIR/server1.out +SERVER1FLT=$TESTDIR/server1.flt +SERVER2OUT=$TESTDIR/server2.out +SERVER2FLT=$TESTDIR/server2.flt +SERVER3OUT=$TESTDIR/server3.out +SERVER3FLT=$TESTDIR/server3.flt +SERVER4OUT=$TESTDIR/server4.out +SERVER4FLT=$TESTDIR/server4.flt +SERVER5OUT=$TESTDIR/server5.out +SERVER5FLT=$TESTDIR/server5.flt +SERVER6OUT=$TESTDIR/server6.out +SERVER6FLT=$TESTDIR/server6.flt + +MASTEROUT=$SERVER1OUT +MASTERFLT=$SERVER1FLT +SLAVEOUT=$SERVER2OUT +SLAVE2OUT=$SERVER3OUT +SLAVEFLT=$SERVER2FLT +SLAVE2FLT=$SERVER3FLT + +MTREADOUT=$TESTDIR/mtread.out + +# original outputs for cmp +PROXYCACHEOUT=$DATADIR/proxycache.out +REFERRALOUT=$DATADIR/referrals.out +SEARCHOUTMASTER=$DATADIR/search.out.master +SEARCHOUTX=$DATADIR/search.out.xsearch +COMPSEARCHOUT=$DATADIR/compsearch.out +MODIFYOUTMASTER=$DATADIR/modify.out.master +ADDDELOUTMASTER=$DATADIR/adddel.out.master +MODRDNOUTMASTER0=$DATADIR/modrdn.out.master.0 +MODRDNOUTMASTER1=$DATADIR/modrdn.out.master.1 +MODRDNOUTMASTER2=$DATADIR/modrdn.out.master.2 +MODRDNOUTMASTER3=$DATADIR/modrdn.out.master.3 +ACLOUTMASTER=$DATADIR/acl.out.master +REPLOUTMASTER=$DATADIR/repl.out.master +MODSRCHFILTERS=$DATADIR/modify.search.filters +CERTIFICATETLS=$DATADIR/certificate.tls +CERTIFICATEOUT=$DATADIR/certificate.out +DNOUT=$DATADIR/dn.out +EMPTYDNOUT1=$DATADIR/emptydn.out.slapadd +EMPTYDNOUT2=$DATADIR/emptydn.out +IDASSERTOUT=$DATADIR/idassert.out +LDAPGLUEOUT=$DATADIR/ldapglue.out +LDAPGLUEANONYMOUSOUT=$DATADIR/ldapglueanonymous.out +RELAYOUT=$DATADIR/relay.out +CHAINOUT=$DATADIR/chain.out +CHAINREFOUT=$DATADIR/chainref.out +CHAINMODOUT=$DATADIR/chainmod.out +GLUESYNCOUT=$DATADIR/gluesync.out +SQLREAD=$DATADIR/sql-read.out +SQLWRITE=$DATADIR/sql-write.out +TRANSLUCENTOUT=$DATADIR/translucent.search.out +METAOUT=$DATADIR/meta.out +METACONCURRENCYOUT=$DATADIR/metaconcurrency.out +MANAGEOUT=$DATADIR/manage.out +SUBTREERENAMEOUT=$DATADIR/subtree-rename.out +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" + diff --git a/tests/scripts/its-all b/tests/scripts/its-all new file mode 100755 index 0000000..ef1de7f --- /dev/null +++ b/tests/scripts/its-all @@ -0,0 +1,52 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +SHTOOL="$SRCDIR/../build/shtool" + +TB="" TN="" +if test -t 1 ; then + TB=`$SHTOOL echo -e "%B" 2>/dev/null` + TN=`$SHTOOL echo -e "%b" 2>/dev/null` +fi + +echo "#######################################################################" +echo "### ###" +echo "### regression tests ###" +echo "### ###" +echo "#######################################################################" +echo "###" + +echo ">>>>> Executing all LDAP ITS regression tests" + +for CMD in $SRCDIR/data/regressions/its*/its*; do + # remove cruft from prior test + if test $PRESERVE = yes ; then + /bin/rm -rf testrun/db.* + else + /bin/rm -rf testrun + fi + + echo ">>>>> Starting ${TB}`basename $CMD`${TN} ..." + $CMD + RC=$? + if test $RC -eq 0 ; then + echo ">>>>> $CMD completed ${TB}OK${TN}." + else + echo ">>>>> $CMD ${TB}failed${TN} (exit $RC)" + exit $RC + fi + + echo "" +done diff --git a/tests/scripts/monitor_data.sh b/tests/scripts/monitor_data.sh new file mode 100755 index 0000000..3328f7e --- /dev/null +++ b/tests/scripts/monitor_data.sh @@ -0,0 +1,48 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +MONITORDB="$1" +SRCDIR="$2" +DSTDIR="$3" + +echo "MONITORDB $MONITORDB" +echo "SRCDIR $SRCDIR" +echo "DSTDIR $DSTDIR" +echo "pwd `pwd`" + +# copy test data +cp "$SRCDIR"/do_* "$DSTDIR" +if test $MONITORDB != no ; then + + # add back-monitor testing data + cat >> "$DSTDIR/do_search.0" << EOF +cn=Monitor +(objectClass=*) +cn=Monitor +(objectClass=*) +cn=Monitor +(objectClass=*) +cn=Monitor +(objectClass=*) +EOF + + cat >> "$DSTDIR/do_read.0" << EOF +cn=Backend 1,cn=Backends,cn=Monitor +cn=Entries,cn=Statistics,cn=Monitor +cn=Database 1,cn=Databases,cn=Monitor +EOF + +fi + diff --git a/tests/scripts/passwd-search b/tests/scripts/passwd-search new file mode 100755 index 0000000..5fcc899 --- /dev/null +++ b/tests/scripts/passwd-search @@ -0,0 +1,133 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +if test $# -eq 0 ; then + test -z "$SRCDIR" && SRCDIR="." +else + SRCDIR=$1; shift +fi +if test $# -eq 1 ; then + BACKEND=$1; shift +fi + +echo "running defines.sh $SRCDIR $BACKEND" +. $SRCDIR/scripts/defines.sh + +if test -d "$TESTDIR"; then + echo "Cleaning up in $TESTDIR..." + /bin/rm -rf $TESTDIR/db.* +fi +mkdir -p $TESTDIR + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $PASSWDCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test ${WAIT-0} != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +echo "Testing slapd searching..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -L -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + if test $RC = 1 ; then + echo "Waiting 5 seconds for slapd to start..." + sleep 5 + fi +done + +if test $RC != 0 ; then + echo "ldapsearch failed!" + test "$KILLSERVERS" != no && kill -HUP $KILLPIDS + exit $RC +fi + +cat /dev/null > $TESTOUT + +echo "Testing base suffix searching..." +$LDAPSEARCH -L -S "" -b "$BASEDN" -s base -h $LOCALHOST -p $PORT1 \ + '(objectclass=*)' >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed!" + test "$KILLSERVERS" != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo " ------------ " >> $TESTOUT + +echo "Testing user searching..." +$LDAPSEARCH -L -S "" -b "uid=root,$BASEDN" -s base -h $LOCALHOST -p $PORT1 \ + '(objectclass=*)' >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed!" + test "$KILLSERVERS" != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo " ------------ " >> $TESTOUT + +echo "Testing exact searching..." +$LDAPSEARCH -L -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(uid=root)' >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed!" + test "$KILLSERVERS" != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo " ------------ " >> $TESTOUT + +echo "Testing OR searching..." +$LDAPSEARCH -L -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(|(objectclass=person)(cn=root))' >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed!" + test "$KILLSERVERS" != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo " ------------ " >> $TESTOUT + +echo "Testing AND searching..." +$LDAPSEARCH -L -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(&(objectclass=person)(cn=root))' >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed!" + test "$KILLSERVERS" != no && kill -HUP $KILLPIDS + exit $RC +fi + +test "$KILLSERVERS" != no && kill -HUP $KILLPIDS + +echo "Assuming everything is fine." +#echo "Comparing results" +#$CMP $TESTOUT $SEARCHOUTMASTER +#if test $? != 0 ; then +# echo "Comparison failed" +# exit 1 +#fi + +echo ">>>>> Test succeeded" + +exit 0 diff --git a/tests/scripts/relay b/tests/scripts/relay new file mode 100755 index 0000000..c7e5272 --- /dev/null +++ b/tests/scripts/relay @@ -0,0 +1,395 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "Using $RELAY backend..." +echo "" + +echo "Starting slapd on TCP/IP port $PORT1..." +echo "======== Starting slapd with $RELAY backend ========" >> $LOG1 +. $CONFFILTER $BACKEND $MONITORDB < $RELAYCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Using ldapadd to populate the database..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDERED > $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +cat /dev/null > $SEARCHOUT + +BASEDN="dc=example,dc=com" +echo "Searching base=\"$BASEDN\"..." +echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BASEDN="o=Example,c=US" +echo "Searching base=\"$BASEDN\"..." +echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BASEDN="o=Esempio,c=IT" +echo "Searching base=\"$BASEDN\"..." +echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BASEDN="o=Beispiel,c=DE" +echo "Searching base=\"$BASEDN\"..." +echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# +# Do some modifications +# + +BASEDN="o=Beispiel,c=DE" +echo "Modifying database \"$BASEDN\"..." +$LDAPMODIFY -v -D "cn=Manager,$BASEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + -M >> $TESTOUT 2>&1 << EOMODS +dn: cn=Added User,ou=Alumni Association,ou=People,$BASEDN +changetype: add +objectClass: OpenLDAPperson +cn: Added User +sn: User +uid: auser +seealso: cn=All Staff,ou=Groups,$BASEDN +homephone: +49 1234567890 +drink: Beer +mail: auser@mail.alumni.example.com +telephonenumber: +49 1234-567-890 +description: Just added in o=Beispiel,c=DE naming context + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,$BASEDN +changetype: modify +add: seeAlso +seeAlso: cn=Ursula Hampster,ou=Alumni Association,ou=People,$BASEDN +- +add: description +description: Just added self to seeAlso in $BASEDN virtual naming context +- + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,$BASEDN +changetype: delete + +dn: cn=John Doe,ou=Information Technology Division,ou=People,$BASEDN +changetype: modrdn +newrdn: cn=John P. Doe +deleteoldrdn: 1 + +dn: cn=Jane Doe,ou=Alumni Association,ou=People,$BASEDN +changetype: modrdn +newrdn: cn=Jane Q. Doe +deleteoldrdn: 1 +newsuperior: ou=Information Technology Division,ou=People,$BASEDN + +dn: cn=Jane Q. Doe,ou=Information Technology Division,ou=People,$BASEDN +changetype: modify +add: cn +cn: Jane Qissapaolo Doe +- +# This operation (delete of DN-valued attribute) triggered ITS#3498 +delete: seeAlso +- + +dn: cn=Jane Q. Doe,ou=Information Technology Division,ou=People,$BASEDN +changetype: modify +add: seeAlso +seeAlso: cn=All Staff,ou=Groups,$BASEDN +- + +dn: ou=Referrals,$BASEDN +changetype: add +objectclass: referral +objectclass: extensibleObject +ou: Referrals +ref: ldap://localhost.localdomain/ou=Referrals,$BASEDN +description: Just added as ldap://localhost.localdomain:389/ou=Referrals,$BASEDN + +dn: ou=Referrals,$BASEDN +changetype: modify +replace: ref +ref: ldap://localhost:9012/ou=Referrals,$BASEDN +- +add: description +description: ...and modified as ldap://localhost:9012/ou=Referrals,$BASEDN +- +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "Modify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BASEDN="o=Example,c=US" +echo "Modifying database \"$BASEDN\"..." +$LDAPMODIFY -v -D "cn=Manager,$BASEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + -M >> $TESTOUT 2>&1 << EOMODS +# These operations (updates with objectClass mapping) triggered ITS#3499 +dn: cn=Added Group,ou=Groups,$BASEDN +changetype: add +objectClass: groupOfNames +objectClass: uidObject +cn: Added Group +member: cn=Added Group,ou=Groups,$BASEDN +uid: added + +dn: cn=Another Added Group,ou=Groups,$BASEDN +changetype: add +objectClass: groupOfNames +cn: Another Added Group +member: cn=Added Group,ou=Groups,$BASEDN +member: cn=Another Added Group,ou=Groups,$BASEDN + +dn: cn=Another Added Group,ou=Groups,$BASEDN +changetype: modify +add: objectClass +objectClass: uidObject +- +add: uid +uid: added +- + +dn: cn=Added Group,ou=Groups,$BASEDN +changetype: modify +delete: objectClass +objectClass: uidObject +- +delete: uid +- +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "Modify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Searching base=\"$BASEDN\"..." +echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BASEDN="o=Esempio,c=IT" +echo "Searching base=\"$BASEDN\"..." +echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(objectClass=referral)" +echo "Searching filter=\"$FILTER\"" +echo " attrs=\"'*' ref\"" +echo "# searching filter=\"$FILTER\"" >> $SEARCHOUT +echo "# attrs=\"'*' ref\"" >> $SEARCHOUT + +BASEDN="dc=example,dc=com" +echo " base=\"$BASEDN\"..." +echo "# base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" -M "$FILTER" '*' ref \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BASEDN="o=Example,c=US" +echo " base=\"$BASEDN\"..." +echo "# base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" -M "$FILTER" '*' ref \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BASEDN="o=Esempio,c=IT" +echo " base=\"$BASEDN\"..." +echo "# base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" -M "$FILTER" '*' ref \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BASEDN="o=Example,c=US" +FILTER="(seeAlso=cn=all staff,ou=Groups,$BASEDN)" +echo "Searching filter=\"$FILTER\"" +echo " attrs=\"seeAlso\"" +echo " base=\"$BASEDN\"..." +echo "# searching filter=\"$FILTER\"" >> $SEARCHOUT +echo "# attrs=\"seeAlso\"" >> $SEARCHOUT +echo "# base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" "$FILTER" seeAlso \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(uid=example)" +echo "Searching filter=\"$FILTER\"" +echo " attrs=\"uid\"" +echo " base=\"$BASEDN\"..." +echo "# searching filter=\"$FILTER\"" >> $SEARCHOUT +echo "# attrs=\"uid\"" >> $SEARCHOUT +echo "# base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" "$FILTER" uid \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(member=cn=Another Added Group,ou=Groups,$BASEDN)" +echo "Searching filter=\"$FILTER\"" +echo " attrs=\"member\"" +echo " base=\"$BASEDN\"..." +echo "# searching filter=\"$FILTER\"" >> $SEARCHOUT +echo "# attrs=\"member\"" >> $SEARCHOUT +echo "# base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S '' -h $LOCALHOST -p $PORT1 -b "$BASEDN" "$FILTER" member \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif used to create database..." +$LDIFFILTER < $RELAYOUT > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - relay search/modification didn't succeed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +BASEDN="o=Example,c=US" +echo "Changing password to database \"$BASEDN\"..." +$LDAPPASSWD -h $LOCALHOST -p $PORT1 -D "cn=Manager,$BASEDN" -w $PASSWD \ + -s $PASSWD "cn=Added User,ou=Alumni Association,ou=People,$BASEDN" \ + >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Passwd ExOp failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BASEDN="o=Beispiel,c=DE" +echo "Binding with newly changed password to database \"$BASEDN\"..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 \ + -D "cn=Added User,ou=Alumni Association,ou=People,$BASEDN" \ + -w $PASSWD >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "WhoAmI failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BASEDN="o=Esempio,c=IT" +echo "Comparing to database \"$BASEDN\"..." +$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \ + "cn=Added User,ou=Alumni Association,ou=People,$BASEDN" \ + "seeAlso:cn=All Staff,ou=Groups,$BASEDN" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 6 && test $RC,$BACKEND != 5,null ; then + echo "Compare failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS diff --git a/tests/scripts/sql-all b/tests/scripts/sql-all new file mode 100755 index 0000000..88713a5 --- /dev/null +++ b/tests/scripts/sql-all @@ -0,0 +1,70 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +SHTOOL="$SRCDIR/../build/shtool" + +TB="" TN="" +if test -t 1 ; then + TB=`$SHTOOL echo -e "%B" 2>/dev/null` + TN=`$SHTOOL echo -e "%b" 2>/dev/null` +fi + +SLEEPTIME=10 + +echo "#######################################################################" +echo "### ###" +echo "### SQL tests ###" +echo "### ###" +echo "#######################################################################" +echo "###" +echo "### SQL tests require the sql backend, a properly configured" +echo "### ODBC and a database populated with data from the applicable" +echo "### servers/slapd/back-sql/rdbms_depend/* files." +echo "###" +echo "### Set SLAPD_USE_SQL to the desired RDBMS to enable this test;" +echo "###" +echo "### Currently supported RDBMSes are:" +echo "### ibmdb2, mysql, pgsql" +echo "###" +echo "### Set SLAPD_USE_SQLWRITE=yes to enable the write tests" +echo "###" +echo "### See servers/slapd/back-sql/rdbms_depend/README for more " +echo "### details on how to set up the RDBMS and the ODBC" +echo "###" + +echo ">>>>> Executing all LDAP tests for $BACKEND" + +for CMD in $SRCDIR/scripts/sql-test*; do + # remove cruft from prior test + if test $PRESERVE = yes ; then + /bin/rm -rf testrun/db.* + else + /bin/rm -rf testrun + fi + + echo ">>>>> Starting ${TB}`basename $CMD`${TN} ..." + $CMD + RC=$? + if test $RC -eq 0 ; then + echo ">>>>> $CMD completed ${TB}OK${TN}." + else + echo ">>>>> $CMD ${TB}failed${TN} (exit $RC)" + exit $RC + fi + + echo ">>>>> waiting $SLEEPTIME seconds for things to exit" + sleep $SLEEPTIME + echo "" +done diff --git a/tests/scripts/sql-test000-read b/tests/scripts/sql-test000-read new file mode 100755 index 0000000..7101d18 --- /dev/null +++ b/tests/scripts/sql-test000-read @@ -0,0 +1,568 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $BACKSQL = "sqlno" ; then + echo "SQL backend not available, test skipped" + exit 0 +fi + +if test $RDBMS = "rdbmsno" ; then + echo "SQL test not requested, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $SQLCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +echo "Testing SQL backend read operations..." +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 + +BASEDN="dc=example,dc=com" +BINDDN="cn=Mitya Kovalev,${BASEDN}" +BINDPW="mit" +echo -n "Testing correct bind... " +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo -n "Testing incorrect bind (should fail)... " +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w "XXX" +RC=$? +if test $RC = 0 ; then + echo "ldapwhoami should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing baseobject search..." +echo "# Testing baseobject search..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -s base -S "" \ + >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing onelevel search..." +echo "# Testing onelevel search..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -s one -S "" \ + >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing subtree search..." +echo "# Testing subtree search..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing subtree search with manageDSAit..." +echo "# Testing subtree search with manageDSAit..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -M -S "" '*' ref \ + >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing invalid filter..." +echo "# Testing invalid filter..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(foo=)" \ + >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing exact search..." +echo "# Testing exact search..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(sn=Kovalev)" \ + >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing substrings initial search..." +echo "# Testing substrings initial search..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(cn=m*)" \ + >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing substrings any search..." +echo "# Testing substrings any search..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(cn=*m*)" \ + >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing substrings final search..." +echo "# Testing substrings final search..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(cn=*v)" \ + >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing approx search..." +echo "# Testing approx search..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(sn~=kovalev)" \ + >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing extensible filter search..." +echo "# Testing extensible filter search..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + "(sn:caseExactMatch:=Kovalev)" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing search for telephoneNumber..." +echo "# Testing search for telephoneNumber..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + "(telephoneNumber=3322334)" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing AND search..." +echo "# Testing AND search..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + "(&(sn=kovalev)(givenName=mitya))" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing AND search on objectClass..." +echo "# Testing AND search on objectClass..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + "(&(objectClass=organization)(objectClass=dcObject))" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing OR search..." +echo "# Testing OR search..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + "(|(sn=kovalev)(givenName=mitya))" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing OR search on objectClass..." +echo "# Testing OR search on objectClass..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + "(|(objectClass=document)(objectClass=organization))" \ + >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing NOT search..." +echo "# Testing NOT search..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + '(!(sn=kovalev))' >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing NOT search on objectClass..." +echo "# Testing NOT search on objectClass..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + '(!(objectClass=inetOrgPerson))' >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing NOT search on \"auxiliary\" objectClass..." +echo "# Testing NOT search on \"auxiliary\" objectClass..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + '(!(objectClass=dcObject))' >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#### Needs work... +echo "Testing NOT presence search... (disabled)" +###echo "# Testing NOT presence search..." >> $SEARCHOUT +###$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ +### '(!(sn=*))' >> $SEARCHOUT 2>&1 +### +###RC=$? +###if test $RC != 0 ; then +### echo "ldapsearch failed ($RC)!" +### test $KILLSERVERS != no && kill -HUP $KILLPIDS +### exit $RC +###fi + +echo "Testing attribute inheritance in filter..." +echo "# Testing attribute inheritance in filter..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + "(name=example)" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# ITS#4604 +echo "Testing undefined attribute in filter..." +echo "# Testing undefined attribute in filter..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + "(|(o=example)(foobar=x))" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing objectClass inheritance in filter..." +echo "# Testing objectClass inheritance in filter..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + "(objectClass=person)" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing \"auxiliary\" objectClass in filter..." +echo "# Testing \"auxiliary\" objectClass in filter..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + "(objectClass=dcObject)" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing hasSubordinates in filter..." +echo "# Testing hasSubordinates in filter..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + "(hasSubordinates=TRUE)" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing entryUUID in filter..." +echo "# Testing entryUUID in filter..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + "(entryUUID=00000001-0000-0001-0000-000000000000)" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing attribute inheritance in requested attributes..." +echo "# Testing attribute inheritance in requested attributes..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + "(sn=kovalev)" name >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing objectClass in requested attributes..." +echo "# Testing objectClass in requested attributes..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + objectClass >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing operational attributes in request..." +echo "# Testing operational attributes in request..." >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \ + '+' 2>&1 > $SEARCHFLT + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +grep -v '^entryCSN:' $SEARCHFLT >> $SEARCHOUT + +SIZELIMIT=4 +echo "Testing size limit..." +$LDAPRSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" \ + -z $SIZELIMIT -S "" '(objectClass=*)' >$SEARCHFLT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHFLT` +case $RC in + 0) + if test x"$COUNT" != x ; then + if test "$COUNT" -gt "$SIZELIMIT" ; then + echo "...error: got $COUNT entries instead of the requested $SIZELIMIT" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + echo "...didn't bump into the requested size limit ($SIZELIMIT; got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test x"$COUNT" != x ; then + if test "$COUNT" = "$SIZELIMIT" ; then + echo "...bumped into requested size limit ($SIZELIMIT)" + else + echo "...error: got $COUNT entries with a requested sizelimit of $SIZELIMIT" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo -n "Testing compare (should be TRUE)... " +$LDAPCOMPARE -h $LOCALHOST -p $PORT1 "$BINDDN" \ + "sn:kovalev" >> $TESTOUT 2>&1 + +RC=$? +case $RC in +6) + echo "TRUE" + ;; +5) echo "FALSE!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +*) echo "failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + ;; +esac + +echo -n "Testing compare (should be FALSE)... " +$LDAPCOMPARE -h $LOCALHOST -p $PORT1 "$BINDDN" \ + "cn:foobar" >> $TESTOUT 2>&1 + +RC=$? +case $RC in +6) + echo "TRUE!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +5) echo "FALSE" + ;; +*) echo "failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + ;; +esac + +echo -n "Testing compare (should be UNDEFINED)... " +$LDAPCOMPARE -h $LOCALHOST -p $PORT1 "$BINDDN" \ + "o:example" >> $TESTOUT 2>&1 + +RC=$? +case $RC in +6) + echo "TRUE!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +5) echo "FALSE!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +*) echo "failed ($RC)" + ;; +esac + +echo -n "Testing compare on hasSubordinates (should be TRUE)... " +$LDAPCOMPARE -h $LOCALHOST -p $PORT1 "$BASEDN" \ + "hasSubordinates:TRUE" >> $TESTOUT 2>&1 + +RC=$? +case $RC in +6) + echo "TRUE" + ;; +5) echo "FALSE!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +*) echo "failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + ;; +esac + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif..." +$LDIFFILTER < $SQLREAD > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - SQL search didn't succeed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" +exit 0 diff --git a/tests/scripts/sql-test001-concurrency b/tests/scripts/sql-test001-concurrency new file mode 100755 index 0000000..7693cd6 --- /dev/null +++ b/tests/scripts/sql-test001-concurrency @@ -0,0 +1,138 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $BACKSQL = "sqlno" ; then + echo "SQL backend not available, test skipped" + exit 0 +fi + +if test $RDBMS = "rdbmsno" ; then + echo "SQL test not requested, test skipped" + exit 0 +fi + +if test "x$TESTLOOPS" = "x" ; then + TESTLOOPS=5 +fi + +if test "x$CHILDREN" = "x" ; then + CHILDREN="-j 4" +else + CHILDREN="-j $CHILDREN" +fi + +SQLDATADIR=$TESTDIR/sql-concurrency +mkdir -p $TESTDIR $SQLDATADIR + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $SQLCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +echo "Testing SQL backend concurrency..." +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 + +echo "Using ldapsearch to retrieve all the entries..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering original ldif used to create database..." +$LDIFFILTER < $SEARCHOUT > $LDIFFLT + +if test "${RDBMSWRITE}" != "yes"; then + echo "write test disabled for ${RDBMS}; set SLAPD_USE_SQLWRITE=yes to enable" + cp $SQLCONCURRENCYDIR/do_read* $SQLCONCURRENCYDIR/do_search* \ + $SQLCONCURRENCYDIR/do_bind* $SQLDATADIR +else + case ${RDBMS} in + # list here the RDBMSes whose mapping allows writes + pgsql|ibmdb2) + cp $SQLCONCURRENCYDIR/do_* $SQLDATADIR + ;; + *) + echo "write is not supported for ${RDBMS}; performing read-only concurrency test" + cp $SQLCONCURRENCYDIR/do_read* $SQLCONCURRENCYDIR/do_search* \ + $SQLCONCURRENCYDIR/do_bind* $SQLDATADIR + ;; + esac +fi + +echo "Using tester for concurrent server access..." +$SLAPDTESTER -P "$PROGDIR" -d "$SQLDATADIR" \ + -h $LOCALHOST -p $PORT1 -D "$MANAGERDN" -w $PASSWD \ + -l $TESTLOOPS $CHILDREN -FF +RC=$? + +if test $RC != 0 ; then + echo "slapd-tester failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to retrieve all the entries..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - database was not created correctly" + exit 1 +fi + +echo ">>>>> Test succeeded" +exit 0 + diff --git a/tests/scripts/sql-test900-write b/tests/scripts/sql-test900-write new file mode 100755 index 0000000..1403f9f --- /dev/null +++ b/tests/scripts/sql-test900-write @@ -0,0 +1,573 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $BACKSQL = "sqlno" ; then + echo "SQL backend not available, test skipped" + exit 0 +fi + +if test $RDBMS = "rdbmsno" ; then + echo "SQL test not requested, test skipped" + exit 0 +fi + +if test "${RDBMSWRITE}" != "yes"; then + echo "write test disabled for ${RDBMS}; set SLAPD_USE_SQLWRITE=yes to enable" + exit 0 +fi + +mkdir -p $TESTDIR + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $SQLCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +echo "Testing SQL backend write operations..." +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 > $SEARCHOUT + +BASEDN="dc=example,dc=com" + +echo "Using ldapsearch to retrieve all the entries..." +echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \ + "objectClass=*" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +case ${RDBMS} in + # list here the RDBMSes whose mapping allows writes +pgsql|ibmdb2) + MANAGERDN="cn=Manager,${BASEDN}" + echo "Testing add..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +version: 1 + +# Adding an organization... +dn: o=An Org,${BASEDN} +changetype: add +objectClass: organization +o: An Org + +# Adding an organization with an "auxiliary" objectClass.. +dn: dc=subnet,${BASEDN} +changetype: add +objectClass: organization +objectClass: dcObject +o: SubNet +dc: subnet + +# Adding another organization with an "auxiliary" objectClass.. +dn: dc=subnet2,${BASEDN} +changetype: add +objectClass: organization +objectClass: dcObject +o: SubNet 2 +dc: subnet2 + +# Adding a person... +dn: cn=Lev Tolstoij,${BASEDN} +changetype: add +objectClass: inetOrgPerson +cn: Lev Tolstoij +sn: Tolstoij +givenName: Lev +telephoneNumber: +39 02 XXXX YYYY +telephoneNumber: +39 02 XXXX ZZZZ +userPassword: tanja + +# Adding a person with an "auxiliary" objectClass... +dn: cn=Some One,${BASEDN} +changetype: add +objectClass: inetOrgPerson +objectClass: simpleSecurityObject +cn: Some One +sn: One +givenName: Some +telephoneNumber: +1 800 900 1234 +telephoneNumber: +1 800 900 1235 +userPassword: someone + +# Adding a person in another subtree... +dn: cn=SubNet User,dc=subnet,${BASEDN} +changetype: add +objectClass: inetOrgPerson +cn: SubNet User +sn: User +givenName: SubNet + +# Adding a document... +dn: documentTitle=War and Peace,${BASEDN} +changetype: add +objectClass: document +description: Historical novel +documentTitle: War and Peace +documentAuthor: cn=Lev Tolstoij,dc=example,dc=com +documentIdentifier: document 3 +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Using ldapsearch to retrieve all the entries..." + echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT + $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \ + "objectClass=*" >> $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Testing modify..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +version: 1 + +# Deleting all telephone numbers... +dn: cn=Some One,${BASEDN} +changetype: modify +delete: telephoneNumber +- + +# Adding a telephone number... +dn: cn=Mitya Kovalev,${BASEDN} +changetype: modify +add: telephoneNumber +telephoneNumber: +1 800 123 4567 +- + +# Deleting a specific telephone number and adding a new one... +dn: cn=Lev Tolstoij,${BASEDN} +changetype: modify +delete: telephoneNumber +telephoneNumber: +39 02 XXXX YYYY +- +add: telephoneNumber +telephoneNumber: +39 333 ZZZ 1234 +- + +# Adding an author to a document... +dn: documentTitle=book1,${BASEDN} +changetype: modify +add: documentAuthor +documentAuthor: cn=Lev Tolstoij,${BASEDN} +- + +# Adding an author to another document... +dn: documentTitle=book2,${BASEDN} +changetype: modify +add: documentAuthor +documentAuthor: cn=Lev Tolstoij,${BASEDN} +- + +# Adding an "auxiliary" objectClass... +dn: cn=Mitya Kovalev,${BASEDN} +changetype: modify +add: objectClass +objectClass: simpleSecurityObject +- + +# Deleting an "auxiliary" objectClass... +dn: cn=Some One,${BASEDN} +changetype: modify +delete: objectClass +objectClass: simpleSecurityObject +- + +# Deleting userPasswords +dn: cn=Lev Tolstoij,${BASEDN} +changetype: modify +delete: userPassword +- +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Using ldapsearch to retrieve all the entries..." + echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT + $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \ + "objectClass=*" >> $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Testing delete..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +version: 1 + +# Deleting a person... +dn: cn=Torvlobnor Puzdoy,${BASEDN} +changetype: delete + +# Deleting a document... +dn: documentTitle=book1,${BASEDN} +changetype: delete + +# Deleting an organization with an "auxiliary" objectClass... +dn: dc=subnet2,${BASEDN} +changetype: delete +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Using ldapsearch to retrieve all the entries..." + echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT + $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \ + "objectClass=*" >> $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Testing rename..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +version: 1 + +# Renaming an organization... +dn: o=An Org,${BASEDN} +changetype: modrdn +newrdn: o=Renamed Org +deleteoldrdn: 1 + +# Moving a person to another subtree... +dn: cn=Lev Tolstoij,${BASEDN} +changetype: modrdn +newrdn: cn=Lev Tolstoij +deleteoldrdn: 0 +newsuperior: dc=subnet,${BASEDN} + +# Renaming a book... +dn: documentTitle=book2,${BASEDN} +changetype: modrdn +newrdn: documentTitle=Renamed Book +deleteoldrdn: 1 +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Using ldapsearch to retrieve all the entries..." + echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT + $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \ + "objectClass=*" >> $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Adding a child to a referral (should fail)..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +version: 1 + +dn: cn=Should Fail,ou=Referral,${BASEDN} +changetype: add +objectClass: inetOrgPerson +cn: Should Fail +sn: Fail +telephoneNumber: +39 02 23456789 +EOMODS + + RC=$? + if test $RC = 0 ; then + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + + echo "Modifying a referral (should fail)..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +version: 1 + +dn: ou=Referral,${BASEDN} +changetype: modify +replace: ref +ref: ldap://localhost:9009/ +- +EOMODS + + RC=$? + if test $RC = 0 ; then + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + + echo "Renaming a referral (should fail)..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +version: 1 + +dn: ou=Referral,${BASEDN} +changetype: modrdn +newrdn: ou=Renamed Referral +deleteoldrdn: 1 +EOMODS + + RC=$? + if test $RC = 0 ; then + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + + echo "Deleting a referral (should fail)..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +version: 1 + +dn: ou=Referral,${BASEDN} +changetype: delete +EOMODS + + RC=$? + if test $RC = 0 ; then + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + + echo "Adding a referral..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 -M >> $TESTOUT 2>&1 << EOMODS +version: 1 + +dn: ou=Another Referral,${BASEDN} +changetype: add +objectClass: referral +objectClass: extensibleObject +ou: Another Referral +ref: ldap://localhost:9009/ +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Modifying a referral with manageDSAit..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 -M >> $TESTOUT 2>&1 << EOMODS +version: 1 + +dn: ou=Referral,${BASEDN} +changetype: modify +replace: ref +ref: ldap://localhost:9009/ +- +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Using ldapsearch to retrieve the modified entry..." + echo "# Using ldapsearch to retrieve the modified entry..." >> $SEARCHOUT + $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "ou=Referral,$BASEDN" -M \ + "objectClass=*" '*' ref >> $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Renaming a referral with manageDSAit..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 -M >> $TESTOUT 2>&1 << EOMODS +version: 1 + +dn: ou=Referral,${BASEDN} +changetype: modrdn +newrdn: ou=Renamed Referral +deleteoldrdn: 1 +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Using ldapsearch to retrieve the renamed entry..." + echo "# Using ldapsearch to retrieve the renamed entry..." >> $SEARCHOUT + $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "ou=Renamed Referral,$BASEDN" -M \ + "objectClass=*" '*' ref >> $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Deleting a referral with manageDSAit..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 -M >> $TESTOUT 2>&1 << EOMODS +version: 1 + +dn: ou=Renamed Referral,${BASEDN} +changetype: delete +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + BINDDN="cn=Mitya Kovalev,${BASEDN}" + BINDPW="mit" + NEWPW="newsecret" + echo "Testing passwd change..." + $LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -D "${BINDDN}" -w ${BINDPW} -s ${NEWPW} \ + "$BINDDN" >> $TESTOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldappasswd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo -n "Testing bind with new secret... " + $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $NEWPW + RC=$? + if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + BINDDN="cn=Some One,${BASEDN}" + BINDPW="someone" + echo -n "Testing bind with newly added user... " + $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW + RC=$? + if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Using ldapsearch to retrieve all the entries..." + echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT + $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \ + "objectClass=*" >> $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Filtering ldapsearch results..." + $LDIFFILTER < $SEARCHOUT > $SEARCHFLT + echo "Filtering modified ldif..." + $LDIFFILTER < $SQLWRITE > $LDIFFLT + echo "Comparing filter output..." + $CMP $SEARCHFLT $LDIFFLT > $CMPOUT + + if test $? != 0 ; then + echo "comparison failed - SQL mods search didn't succeed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + +*) + echo "apparently ${RDBMS} does not support writes; skipping..." + ;; +esac + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" +exit 0 diff --git a/tests/scripts/sql-test901-syncrepl b/tests/scripts/sql-test901-syncrepl new file mode 100755 index 0000000..e4f4734 --- /dev/null +++ b/tests/scripts/sql-test901-syncrepl @@ -0,0 +1,692 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $BACKSQL = "sqlno" ; then + echo "SQL backend not available, test skipped" + exit 0 +fi + +if test $RDBMS = "rdbmsno" ; then + echo "SQL test not requested, test skipped" + exit 0 +fi + +if test "${RDBMSWRITE}" != "yes"; then + echo "write test disabled for ${RDBMS}; set SLAPD_USE_SQLWRITE=yes to enable" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR2A + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $SQLSRMASTERCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +echo "Testing SQL backend write operations..." +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 + +echo "Starting slave slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $R1SRSLAVECONF > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVEPID $SLAVEPID + read foo +fi +KILLPIDS="$KILLPIDS $SLAVEPID" + +echo "Using ldapsearch to check that slave slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + '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 > $SEARCHOUT + +echo "Using ldapsearch to retrieve all the entries from the master..." +echo "# Using ldapsearch to retrieve all the entries from the master..." \ + >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \ + -D "$MANAGERDN" -w $PASSWD \ + "(!(objectClass=referral))" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +cat /dev/null > $SEARCHOUT2 + +echo "Using ldapsearch to retrieve all the entries from the slave..." +echo "# Using ldapsearch to retrieve all the entries from the slave..." \ + >> $SEARCHOUT2 +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT2 -b "$BASEDN" \ + -D "$UPDATEDN" -w $PASSWD \ + "(objectClass=*)" >> $SEARCHOUT2 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering ldapsearch results from master..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering ldapsearch results from slave..." +$LDIFFILTER < $SEARCHOUT2 > $SEARCHFLT2 +echo "Comparing filter output..." +$CMP $SEARCHFLT $SEARCHFLT2 > $CMPOUT + +if test $? != 0 ; then + echo "Comparison failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +cat /dev/null > $SEARCHOUT + +echo "Using ldapsearch to retrieve all the entries..." +echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \ + "objectClass=*" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +case ${RDBMS} in + # list here the RDBMSes whose mapping allows writes +pgsql|ibmdb2) + MANAGERDN="cn=Manager,${BASEDN}" + echo "Testing add..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +version: 1 + +# Adding an organization... +dn: o=An Org,${BASEDN} +changetype: add +objectClass: organization +o: An Org + +# Adding an organization with an "auxiliary" objectClass.. +dn: dc=subnet,${BASEDN} +changetype: add +objectClass: organization +objectClass: dcObject +o: SubNet +dc: subnet + +# Adding another organization with an "auxiliary" objectClass.. +dn: dc=subnet2,${BASEDN} +changetype: add +objectClass: organization +objectClass: dcObject +o: SubNet 2 +dc: subnet2 + +# Adding a person... +dn: cn=Lev Tolstoij,${BASEDN} +changetype: add +objectClass: inetOrgPerson +cn: Lev Tolstoij +sn: Tolstoij +givenName: Lev +telephoneNumber: +39 02 XXXX YYYY +telephoneNumber: +39 02 XXXX ZZZZ +userPassword: tanja + +# Adding a person with an "auxiliary" objectClass... +dn: cn=Some One,${BASEDN} +changetype: add +objectClass: inetOrgPerson +objectClass: simpleSecurityObject +cn: Some One +sn: One +givenName: Some +telephoneNumber: +1 800 900 1234 +telephoneNumber: +1 800 900 1235 +userPassword: someone + +# Adding a person in another subtree... +dn: cn=SubNet User,dc=subnet,${BASEDN} +changetype: add +objectClass: inetOrgPerson +cn: SubNet User +sn: User +givenName: SubNet + +# Adding a document... +dn: documentTitle=War and Peace,${BASEDN} +changetype: add +objectClass: document +description: Historical novel +documentTitle: War and Peace +documentAuthor: cn=Lev Tolstoij,dc=example,dc=com +documentIdentifier: document 3 +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Using ldapsearch to retrieve all the entries..." + echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT + $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \ + "objectClass=*" >> $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Testing modify..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +version: 1 + +# Deleting all telephone numbers... +dn: cn=Some One,${BASEDN} +changetype: modify +delete: telephoneNumber +- + +# Adding a telephone number... +dn: cn=Mitya Kovalev,${BASEDN} +changetype: modify +add: telephoneNumber +telephoneNumber: +1 800 123 4567 +- + +# Deleting a specific telephone number and adding a new one... +dn: cn=Lev Tolstoij,${BASEDN} +changetype: modify +delete: telephoneNumber +telephoneNumber: +39 02 XXXX YYYY +- +add: telephoneNumber +telephoneNumber: +39 333 ZZZ 1234 +- + +# Adding an author to a document... +dn: documentTitle=book1,${BASEDN} +changetype: modify +add: documentAuthor +documentAuthor: cn=Lev Tolstoij,${BASEDN} +- + +# Adding an author to another document... +dn: documentTitle=book2,${BASEDN} +changetype: modify +add: documentAuthor +documentAuthor: cn=Lev Tolstoij,${BASEDN} +- + +# Adding an "auxiliary" objectClass... +dn: cn=Mitya Kovalev,${BASEDN} +changetype: modify +add: objectClass +objectClass: simpleSecurityObject +- + +# Deleting an "auxiliary" objectClass... +dn: cn=Some One,${BASEDN} +changetype: modify +delete: objectClass +objectClass: simpleSecurityObject +- + +# Deleting userPasswords +dn: cn=Lev Tolstoij,${BASEDN} +changetype: modify +delete: userPassword +- +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Using ldapsearch to retrieve all the entries..." + echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT + $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \ + "objectClass=*" >> $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Testing delete..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +version: 1 + +# Deleting a person... +dn: cn=Torvlobnor Puzdoy,${BASEDN} +changetype: delete + +# Deleting a document... +dn: documentTitle=book1,${BASEDN} +changetype: delete + +# Deleting an organization with an "auxiliary" objectClass... +dn: dc=subnet2,${BASEDN} +changetype: delete +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Using ldapsearch to retrieve all the entries..." + echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT + $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \ + "objectClass=*" >> $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Testing rename..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +version: 1 + +# Renaming an organization... +dn: o=An Org,${BASEDN} +changetype: modrdn +newrdn: o=Renamed Org +deleteoldrdn: 1 + +# Moving a person to another subtree... +dn: cn=Lev Tolstoij,${BASEDN} +changetype: modrdn +newrdn: cn=Lev Tolstoij +deleteoldrdn: 0 +newsuperior: dc=subnet,${BASEDN} + +# Renaming a book... +dn: documentTitle=book2,${BASEDN} +changetype: modrdn +newrdn: documentTitle=Renamed Book +deleteoldrdn: 1 +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Using ldapsearch to retrieve all the entries..." + echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT + $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \ + "objectClass=*" >> $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Adding a child to a referral (should fail)..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +version: 1 + +dn: cn=Should Fail,ou=Referral,${BASEDN} +changetype: add +objectClass: inetOrgPerson +cn: Should Fail +sn: Fail +telephoneNumber: +39 02 23456789 +EOMODS + + RC=$? + if test $RC = 0 ; then + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + + echo "Modifying a referral (should fail)..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +version: 1 + +dn: ou=Referral,${BASEDN} +changetype: modify +replace: ref +ref: ldap://localhost:9009/ +- +EOMODS + + RC=$? + if test $RC = 0 ; then + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + + echo "Renaming a referral (should fail)..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +version: 1 + +dn: ou=Referral,${BASEDN} +changetype: modrdn +newrdn: ou=Renamed Referral +deleteoldrdn: 1 +EOMODS + + RC=$? + if test $RC = 0 ; then + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + + echo "Deleting a referral (should fail)..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +version: 1 + +dn: ou=Referral,${BASEDN} +changetype: delete +EOMODS + + RC=$? + if test $RC = 0 ; then + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + + echo "Adding a referral..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 -M >> $TESTOUT 2>&1 << EOMODS +version: 1 + +dn: ou=Another Referral,${BASEDN} +changetype: add +objectClass: referral +objectClass: extensibleObject +ou: Another Referral +ref: ldap://localhost:9009/ +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Modifying a referral with manageDSAit..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 -M >> $TESTOUT 2>&1 << EOMODS +version: 1 + +dn: ou=Referral,${BASEDN} +changetype: modify +replace: ref +ref: ldap://localhost:9009/ +- +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Using ldapsearch to retrieve the modified entry..." + echo "# Using ldapsearch to retrieve the modified entry..." >> $SEARCHOUT + $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "ou=Referral,$BASEDN" -M \ + "objectClass=*" '*' ref >> $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Renaming a referral with manageDSAit..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 -M >> $TESTOUT 2>&1 << EOMODS +version: 1 + +dn: ou=Referral,${BASEDN} +changetype: modrdn +newrdn: ou=Renamed Referral +deleteoldrdn: 1 +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Using ldapsearch to retrieve the renamed entry..." + echo "# Using ldapsearch to retrieve the renamed entry..." >> $SEARCHOUT + $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "ou=Renamed Referral,$BASEDN" -M \ + "objectClass=*" '*' ref >> $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Deleting a referral with manageDSAit..." + $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 -M >> $TESTOUT 2>&1 << EOMODS +version: 1 + +dn: ou=Renamed Referral,${BASEDN} +changetype: delete +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + BINDDN="cn=Mitya Kovalev,${BASEDN}" + BINDPW="mit" + NEWPW="newsecret" + echo "Testing passwd change..." + $LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -D "${BINDDN}" -w ${BINDPW} -s ${NEWPW} \ + "$BINDDN" >> $TESTOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldappasswd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo -n "Testing bind with new secret... " + $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $NEWPW + RC=$? + if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + BINDDN="cn=Some One,${BASEDN}" + BINDPW="someone" + echo -n "Testing bind with newly added user... " + $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW + RC=$? + if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Using ldapsearch to retrieve all the entries..." + echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT + $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \ + "objectClass=*" >> $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Filtering ldapsearch results..." + $LDIFFILTER < $SEARCHOUT > $SEARCHFLT + echo "Filtering modified ldif..." + $LDIFFILTER < $SQLWRITE > $LDIFFLT + echo "Comparing filter output..." + $CMP $SEARCHFLT $LDIFFLT > $CMPOUT + + if test $? != 0 ; then + echo "comparison failed - SQL mods search didn't succeed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + + echo "Waiting 25 seconds for master to send changes..." + sleep 25 + + cat /dev/null > $SEARCHOUT + + echo "Using ldapsearch to retrieve all the entries from the master..." + echo "# Using ldapsearch to retrieve all the entries from the master..." \ + >> $SEARCHOUT + $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \ + -D "$MANAGERDN" -w $PASSWD \ + "(!(objectClass=referral))" >> $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + cat /dev/null > $SEARCHOUT2 + + echo "Using ldapsearch to retrieve all the entries from the slave..." + echo "# Using ldapsearch to retrieve all the entries from the slave..." \ + >> $SEARCHOUT2 + $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT2 -b "$BASEDN" \ + -D "$UPDATEDN" -w $PASSWD \ + "(objectClass=*)" >> $SEARCHOUT2 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Filtering ldapsearch results from master..." + $LDIFFILTER < $SEARCHOUT > $SEARCHFLT + echo "Filtering ldapsearch results from slave..." + $LDIFFILTER < $SEARCHOUT2 > $SEARCHFLT2 + echo "Comparing filter output..." + $CMP $SEARCHFLT $SEARCHFLT2 > $CMPOUT + + if test $? != 0 ; then + echo "Comparison failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + +*) + echo "apparently ${RDBMS} does not support writes; skipping..." + ;; +esac + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" +exit 0 diff --git a/tests/scripts/start-server b/tests/scripts/start-server new file mode 100755 index 0000000..9cdd3c9 --- /dev/null +++ b/tests/scripts/start-server @@ -0,0 +1,63 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND < $CONF > $ADDCONF +$SLAPADD -f $ADDCONF -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND < $CONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! + +echo "Using ldapsearch to retrieve all the entries..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 > $SEARCHOUT 2>&1 + RC=$? + if test $RC = 1 ; then + echo "Waiting 5 seconds for slapd to start..." + sleep 5 + fi +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +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 - database was not created correctly" + exit 1 +fi + +echo ">>>>> Server1 (pid=$PID) started" +exit 0 diff --git a/tests/scripts/start-server-nolog b/tests/scripts/start-server-nolog new file mode 100755 index 0000000..76c0de8 --- /dev/null +++ b/tests/scripts/start-server-nolog @@ -0,0 +1,63 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND < $CONF > $ADDCONF +$SLAPADD -f $ADDCONF -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND < $CONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >> /dev/null 2>&1 & +PID=$! + +echo "Using ldapsearch to retrieve all the entries..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 > $SEARCHOUT 2>&1 + RC=$? + if test $RC = 1 ; then + echo "Waiting 5 seconds for slapd to start..." + sleep 5 + fi +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +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 - database was not created correctly" + exit 1 +fi + +echo ">>>>> Server1 (pid=$PID) started" +exit 0 diff --git a/tests/scripts/start-server2 b/tests/scripts/start-server2 new file mode 100755 index 0000000..c317d7f --- /dev/null +++ b/tests/scripts/start-server2 @@ -0,0 +1,42 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR2 + +echo "Starting slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND < $CONFTWO > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +PID=$! + +echo "Using ldapsearch to retrieve all the entries..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 > $SERVER2OUT 2>&1 + RC=$? + if test $RC = 1 ; then + echo "Waiting 5 seconds for slapd to start..." + sleep 5 + fi +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +echo ">>>>> Server2 (pid=$PID) started" +exit 0 diff --git a/tests/scripts/start-server2-nolog b/tests/scripts/start-server2-nolog new file mode 100755 index 0000000..496bd95 --- /dev/null +++ b/tests/scripts/start-server2-nolog @@ -0,0 +1,42 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR2 + +echo "Starting slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND < $CONFTWO > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > /dev/null 2>&1 & +PID=$! + +echo "Using ldapsearch to retrieve all the entries..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 > $SERVER2OUT 2>&1 + RC=$? + if test $RC = 1 ; then + echo "Waiting 5 seconds for slapd to start..." + sleep 5 + fi +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +echo ">>>>> Server2 (pid=$PID) started" +exit 0 diff --git a/tests/scripts/startup_nis_ldap_server.sh b/tests/scripts/startup_nis_ldap_server.sh new file mode 100755 index 0000000..eceb095 --- /dev/null +++ b/tests/scripts/startup_nis_ldap_server.sh @@ -0,0 +1,56 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +if [ $# -eq 0 ]; then + SRCDIR="." +else + SRCDIR=$1; shift +fi +if [ $# -eq 1 ]; then + BDB2=$1; shift +fi + +. $SRCDIR/scripts/defines.sh $SRCDIR $BDB2 + +# Sample NIS database in LDIF format +NIS_LDIF=$SRCDIR/data/nis_sample.ldif + +# Sample configuration file for your LDAP server +if test "$BACKEND" = "bdb2" ; then + NIS_CONF=$DATADIR/slapd-bdb2-nis-master.conf +else + NIS_CONF=$DATADIR/slapd-nis-master.conf +fi + +echo "Cleaning up in $DBDIR..." + +rm -f $DBDIR/[!C]* + +echo "Running slapadd to build slapd database..." +$SLAPADD -f $NIS_CONF -l $NIS_LDIF +RC=$? +if [ $RC != 0 ]; then + echo "slapadd failed!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT..." +$SLAPD -f $NIS_CONF -p $PORT -d $LVL $TIMING > $MASTERLOG 2>&1 & +PID=$! + +echo ">>>>> LDAP server with NIS schema is up! PID=$PID" + + +exit 0 diff --git a/tests/scripts/test000-rootdse b/tests/scripts/test000-rootdse new file mode 100755 index 0000000..bb8bbee --- /dev/null +++ b/tests/scripts/test000-rootdse @@ -0,0 +1,86 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $SCHEMACONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to retrieve the root DSE..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -b "" -s base -h $LOCALHOST -p $PORT1 \ + '@extensibleObject' > $SEARCHOUT 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 "Using ldapsearch to retrieve the cn=Subschema..." + $LDAPSEARCH -b "cn=Subschema" -s base -h $LOCALHOST -p $PORT1 \ + '(&(objectClasses=top)(objectClasses=2.5.6.0))' cn objectClass \ + >> $SEARCHOUT 2>&1 + RC=$? + +fi + +count=2 +if test $RC = 0 ; then + case $MONITORDB in yes | mod) + count=3 + echo "Using ldapsearch to retrieve the cn=Monitor..." + $LDAPSEARCH -b "cn=Monitor" -s base -h $LOCALHOST -p $PORT1 \ + '@monitor' >> $SEARCHOUT 2>&1 + RC=$? + ;; + esac +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +cat $SEARCHOUT + + +if test $RC != 0 ; then + echo ">>>>> Test failed" +else + RC=`grep '^dn:' $SEARCHOUT | wc -l` + if test $RC != $count ; then + echo ">>>>> Test failed: expected $count entries, got" $RC + RC=1 + else + echo ">>>>> Test succeeded" + RC=0 + fi +fi + +test $KILLSERVERS != no && wait + +exit $RC diff --git a/tests/scripts/test001-slapadd b/tests/scripts/test001-slapadd new file mode 100755 index 0000000..e60cd59 --- /dev/null +++ b/tests/scripts/test001-slapadd @@ -0,0 +1,146 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF > $ADDCONF +$SLAPADD -f $ADDCONF -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to retrieve all the entries..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 > $SEARCHOUT 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 + +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 - database was not created correctly" + echo $SEARCHFLT $LDIFFLT + $DIFF $SEARCHFLT $LDIFFLT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +if test $BACKEND = ldif ; then + echo "Skipping test of unordered slapadd (unsupported in ldif backend)" +else + +kill -HUP $KILLPIDS + +rm -f $DBDIR1/* + +BASE2="ou=test,dc=example,dc=com" +sed -e "s;$BASEDN;$BASE2;" $ADDCONF > ${ADDCONF}2 +mv ${ADDCONF}2 $ADDCONF +sed -e "s;$BASEDN;$BASE2;" $CONF1 > ${CONF1}2 +mv ${CONF1}2 $CONF1 +echo "Running slapadd with unordered LDIF..." +$SLAPADD -f $ADDCONF -l $LDIFUNORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to retrieve all the entries..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -b "$BASE2" -h $LOCALHOST -p $PORT1 > $SEARCHOUT 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 + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif used to create database..." +$LDIFFILTER < $LDIFREORDERED > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - database was not created correctly" + echo $SEARCHFLT $LDIFFLT + $DIFF $SEARCHFLT $LDIFFLT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test002-populate b/tests/scripts/test002-populate new file mode 100755 index 0000000..f195559 --- /dev/null +++ b/tests/scripts/test002-populate @@ -0,0 +1,83 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Using ldapadd to populate the database..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDERED > $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + 'objectclass=*' > $SEARCHOUT 2>&1 +RC=$? + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +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 - database was not created correctly" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test003-search b/tests/scripts/test003-search new file mode 100755 index 0000000..d93428f --- /dev/null +++ b/tests/scripts/test003-search @@ -0,0 +1,155 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $MCONF > $ADDCONF +$SLAPADD -f $ADDCONF -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Running slapindex to index slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1 +$SLAPINDEX -f $CONF1 +RC=$? +if test $RC != 0 ; then + echo "warning: slapindex failed ($RC)" + echo " assuming no indexing support" +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd searching..." +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 + +echo "Testing exact searching..." +echo "# Testing exact searching..." > $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(sn=jENSEN)' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing approximate searching..." +echo "# Testing approximate searching..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(sn~=jENSEN)' name >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing OR searching..." +echo "# Testing OR searching..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(|(givenname=Xx*yY*Z)(cn=)(undef=*)(objectclass=groupofnames)(sn=jones)(member=cn=Manager,dc=example,dc=com)(uniqueMember=cn=Manager,dc=example,dc=com))' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing AND matching and ends-with searching..." +echo "# Testing AND matching and ends-with searching..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "ou=groups,$BASEDN" -s one -h $LOCALHOST -p $PORT1 \ + '(&(objectclass=groupofnames)(cn=A*)(member=cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com))' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing NOT searching..." +echo "# Testing NOT searching..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(!(objectclass=pilotPerson))' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing objectClass/attributeType inheritance ..." +echo "# Testing objectClass/attributeType inheritance ..." >> $SEARCHOUT +$LDAPSEARCH -M -a never -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(&(objectClass=inetorgperson)(userid=uham))' \ + "2.5.4.0" "userid" >> $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=$SEARCHOUTMASTER + +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 diff --git a/tests/scripts/test004-modify b/tests/scripts/test004-modify new file mode 100755 index 0000000..4bf413b --- /dev/null +++ b/tests/scripts/test004-modify @@ -0,0 +1,234 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1 +$SLAPADD -f $CONF1 -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd modify operations..." +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 + +echo "Testing modify, add, and delete..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +version: 1 + +# LEADING COMMENT AND WHITE SPACE + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +# EMBEDDED COMMENT +changetype: modify +add: drink +drink: Pils +- +add: drink +drink: Orange Juice +- +delete: drink +drink: Pils +- +delete: sn +sn: Jones +- +add: sn +sn: Jones + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com +changetype: modify +# EMBEDDED COMMENT + CONTINUED +replace: description +description: The replaced multiLineDescription $ Blah Woof. +- +replace: drink +drink: Iced Tea +drink: Mad Dog 20/20 + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: uniquemember +uniquemember: cn=James A Jones 2,ou=Information Technology Division, + ou=People,dc=example,dc=com +uniquemember: cn=Bjorn Jensen,ou=Information Technology Division, + ou=People,dc=example,dc=com +- +add: uniquemember +uniquemember: cn=Dorothy Stevens,ou=Alumni Association, + ou=People,dc=example,dc=com +uniquemember: cn=James A Jones 1,ou=Alumni Association, + ou=People,dc=example,dc=com +- +add: objectClass +objectClass: OpenLDAPdisplayableObject +objectClass: pkiUser +objectClass: userSecurityInformation +- +delete: objectClass +objectClass: userSecurityInformation +objectClass: pkiUser +objectClass: OpenLDAPdisplayableObject + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: member +- +add: member +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +- +delete: description +- +add: objectClass +objectClass: OpenLDAPdisplayableObject +objectClass: pkiUser +objectClass: userSecurityInformation +- +delete: objectClass +objectClass: OpenLDAPdisplayableObject +objectClass: pkiUser +objectClass: userSecurityInformation + +dn: cn=Gern Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com +changetype: add +objectclass: testPerson +cn: Gern Jensen +sn: Jensen +uid: gjensen +title: Chief Investigator, ITD +postaladdress: ITD $ 535 W. William St $ Anytown, MI 48103 +seealso: cn=All Staff,ou=Groups,dc=example,dc=com +drink: Coffee +homepostaladdress: 844 Brown St. Apt. 4 $ Anytown, MI 48104 +description: Very odd +facsimiletelephonenumber: +1 313 555 7557 +telephonenumber: +1 313 555 8343 +mail: gjensen@mailgw.example.com +homephone: +1 313 555 8844 +testTime: 20050304001801.234Z + +dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example,dc=com +changetype: delete +# TRAILING COMMENT AND WHITE SPACE + +dn: ou=People,dc=example,dc=com +changetype: modify +increment: uidNumber +uidNumber: 1 +- +increment: gidNumber +gidNumber: -1 + +dn: dc=example,dc=com +changetype: modify +# EMPTY SEQUENCE OF CHANGE + +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapmodify to add an empty entry (should fail with protocolError)..." +$LDAPMODIFY -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + >> $TESTOUT 2>&1 << EOMODS +dn: cn=Foo Bar,dc=example,dc=com +changetype: add +# EMPTY SEQUENCE OF ATTRS +EOMODS + +RC=$? +case $RC in +2) + echo " ldapmodify failed ($RC)" + ;; +0) + echo " ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo " ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Using ldapsearch to retrieve all the entries..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + 'objectClass=*' > $SEARCHOUT 2>&1 +RC=$? +test $KILLSERVERS != no && kill -HUP $KILLPIDS +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +LDIF=$MODIFYOUTMASTER + +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 - modify operations did not complete correctly" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test005-modrdn b/tests/scripts/test005-modrdn new file mode 100755 index 0000000..1ed51f0 --- /dev/null +++ b/tests/scripts/test005-modrdn @@ -0,0 +1,300 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1A $DBDIR1B + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF2DB > $CONF1 +$SLAPADD -f $CONF1 -b "$BASEDN" -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd modrdn operations..." + +# Make sure we can search the database +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + 'objectClass=*' > $INITOUT 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 + +# -r used to do remove of old rdn + +echo "Testing modrdn(deleteoldrdn=0)..." +$LDAPMODRDN -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 'cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com' 'cn=James A Jones III' + +RC=$? +if test $RC != 0 ; then + echo "ldapmodrdn failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing modrdn(deleteoldrdn=1)..." +$LDAPMODRDN -D "$MANAGERDN" -r -h $LOCALHOST -p $PORT1 -w $PASSWD >> \ + $TESTOUT 2>&1 'cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example, dc=com' 'cn=James A Jones II' + +RC=$? +if test $RC != 0 ; then + echo "ldapmodrdn failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Ensure the new rdn's can be found + +echo "Using ldapsearch to retrieve entries using new rdn (cn=James A Jones III)..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + 'cn=James A Jones III' > $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + + +LDIF=$MODRDNOUTMASTER1 + +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 - modrdn operations did not complete correctly" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + + +echo "Using ldapsearch to retrieve entries using new rdn (cn=James A Jones II)..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + 'cn=James A Jones II' > $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + + +LDIF=$MODRDNOUTMASTER2 + +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 - modrdn operations did not complete correctly" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +# Ensure that you cannot find the entry for which the rdn was deleted as +# an attribute. + +echo "Using ldapsearch to retrieve entries using removed rdn (cn=James A Jones 2)..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + 'cn=James A Jones 2' > $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + test $KILLSERVERS != no && kill -HUP $KILLPIDS + echo "ldapsearch failed ($RC)!" + exit $RC +fi +$CMP $SEARCHOUT - < /dev/null > $CMPOUT +if test $? != 0 ; then + echo "failure: ldapsearch found attribute that was to be removed!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo "Using ldapsearch to retrieve all the entries..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + 'objectClass=*' > $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + test $KILLSERVERS != no && kill -HUP $KILLPIDS + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +LDIF=$MODRDNOUTMASTER0 + +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 - modrdn operations did not complete correctly" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +# Test that you can use modrdn with an attribute value which was previously +# present + +echo "Testing modrdn(deleteoldrdn=1), modrdn with new rdn already an att val..." +$LDAPMODRDN -D "$MANAGERDN" -r -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + /dev/null 2>&1 'cn=James A Jones III, ou=Alumni Association, ou=People, dc=example, dc=com' 'cn=James A Jones 1' + +RC=$? +if test $RC != 0 ; then + echo "ldapmodrdn failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to retrieve entries using new rdn (cn=James A Jones 1)..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + 'cn=James A Jones 1' > $SEARCHOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +LDIF=$MODRDNOUTMASTER3 + +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 - modrdn operations did not complete correctly" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo "Testing modrdn to another database (should fail with affectsMultipleDSAs)" +$LDAPMODRDN -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 'cn=All Staff,ou=Groups,dc=example,dc=com' 'cn=Everyone' +RC=$? +case $RC in +0) + echo "ldapmodrdn succeeded, should have failed!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +71) + ;; +*) + echo "ldapmodrdn failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing modrdn with newSuperior = target (should fail with unwillingToPerform)" +$LDAPMODRDN -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 -s 'cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com' \ + 'cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com' 'cn=James A Jones 1' + +RC=$? +case $RC in +0) + echo "ldapmodrdn succeeded, should have failed!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +53) + ;; +*) + echo "ldapmodrdn failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing modrdn with newRdn exact same as target..." +$LDAPMODRDN -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 'cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com' 'cn=James A Jones 1' + +RC=$? +case $RC in +0) + ;; +*) + echo "ldapmodrdn failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing modrdn with newRdn same as target, changed case..." +$LDAPMODRDN -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 'cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com' 'cn=James A JONES 1' + +RC=$? +case $RC in +0) + ;; +*) + echo "ldapmodrdn failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test006-acls b/tests/scripts/test006-acls new file mode 100755 index 0000000..e11212e --- /dev/null +++ b/tests/scripts/test006-acls @@ -0,0 +1,667 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +case "$BACKEND" in ldif | null) + echo "$BACKEND backend does not support access controls, test skipped" + exit 0 +esac + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $ACLCONF > $CONF1 +$SLAPADD -f $CONF1 -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd access control..." +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 > $SEARCHOUT + +echo "# Try to read an entry inside the Alumni Association container. +# It should give us noSuchObject if we're not bound..." \ +>> $SEARCHOUT +# FIXME: temporarily remove the "No such object" message to make +# the test succeed even if SLAP_ACL_HONOR_DISCLOSE is not #define'd +$LDAPSEARCH -b "$JAJDN" -h $LOCALHOST -p $PORT1 "(objectclass=*)" \ + 2>&1 | grep -v "No such object" >> $SEARCHOUT + +echo "# ... and should return all attributes if we're bound as anyone +# under Example." \ +>> $SEARCHOUT +$LDAPSEARCH -b "$JAJDN" -h $LOCALHOST -p $PORT1 \ + -D "$BABSDN" -w bjensen "(objectclass=*)" >> $SEARCHOUT 2>&1 + +# ITS#4253, ITS#4255 +echo "# Checking exact/regex attrval clause" >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 \ + -D "$BABSDN" -w bjensen \ + -b "$MELLIOTDN" -s base "(objectclass=*)" cn >> $SEARCHOUT 2>&1 +$LDAPSEARCH -h $LOCALHOST -p $PORT1 \ + -D "$BJORNSDN" -w bjorn \ + -b "$MELLIOTDN" -s base "(objectclass=*)" cn >> $SEARCHOUT 2>&1 + +$LDAPSEARCH -h $LOCALHOST -p $PORT1 \ + -D "$BABSDN" -w bjensen \ + -b "$JOHNDDN" -s base "(objectclass=*)" cn >> $SEARCHOUT 2>&1 +$LDAPSEARCH -h $LOCALHOST -p $PORT1 \ + -D "$BJORNSDN" -w bjorn \ + -b "$JOHNDDN" -s base "(objectclass=*)" cn >> $SEARCHOUT 2>&1 + +$LDAPSEARCH -h $LOCALHOST -p $PORT1 \ + -D "$BABSDN" -w bjensen \ + -b "$BJORNSDN" -s base "(objectclass=*)" cn >> $SEARCHOUT 2>&1 +$LDAPSEARCH -h $LOCALHOST -p $PORT1 \ + -D "$BJORNSDN" -w bjorn \ + -b "$BABSDN" -s base "(objectclass=*)" cn >> $SEARCHOUT 2>&1 + +# check selfwrite access (ITS#4587). 6 attempts are made: +# 1) delete someone else (should fail) +# 2) delete self (should succeed) +# 3) add someone else (should fail) +# 4) add someone else and self (should fail) +# 5) add self and someone else (should fail) +# 6) add self (should succeed) +# +$LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT1 -w jaj >> \ + $TESTOUT 2>&1 << EOMODS +dn: cn=All Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: member +member: $BABSDN +EOMODS +RC=$? +case $RC in +50) + ;; +0) + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +$LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT1 -w jaj >> \ + $TESTOUT 2>&1 << EOMODS +dn: cn=All Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: member +member: $JAJDN +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT1 -w jaj >> \ + $TESTOUT 2>&1 << EOMODS +dn: cn=All Staff,ou=Groups,dc=example,dc=com +changetype: modify +add: member +member: cn=Foo,ou=Bar +EOMODS +RC=$? +case $RC in +50) + ;; +0) + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +$LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT1 -w jaj >> \ + $TESTOUT 2>&1 << EOMODS +dn: cn=All Staff,ou=Groups,dc=example,dc=com +changetype: modify +add: member +member: cn=Foo,ou=Bar +member: $JAJDN +EOMODS +RC=$? +case $RC in +50) + ;; +0) + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +$LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT1 -w jaj >> \ + $TESTOUT 2>&1 << EOMODS +dn: cn=All Staff,ou=Groups,dc=example,dc=com +changetype: modify +add: member +member: $JAJDN +member: cn=Foo,ou=Bar +EOMODS +RC=$? +case $RC in +50) + ;; +0) + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +$LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT1 -w jaj >> \ + $TESTOUT 2>&1 << EOMODS +dn: cn=All Staff,ou=Groups,dc=example,dc=com +changetype: modify +add: member +member: $JAJDN +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# +# Check group access. Try to modify Babs' entry. Two attempts: +# 1) bound as "James A Jones 1" - should fail +# 2) bound as "Bjorn Jensen" - should succeed + +$LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT1 -w jaj >> \ + $TESTOUT 2>&1 << EOMODS5 +dn: $BABSDN +changetype: modify +replace: drink +drink: wine +EOMODS5 +RC=$? +case $RC in +50) + ;; +0) + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +$LDAPMODIFY -D "$BJORNSDN" -h $LOCALHOST -p $PORT1 -w bjorn >> \ + $TESTOUT 2>&1 << EOMODS6 +dn: $BABSDN +changetype: modify +add: homephone +homephone: +1 313 555 5444 +EOMODS6 +RC=$? +case $RC in +0) + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +# +# Try to add a "member" attribute to the "ITD Staff" group. It should +# fail when we add some DN other than our own, and should succeed when +# we add our own DN. +# bjensen +$LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT1 -w jaj >> \ + $TESTOUT 2>&1 << EOMODS1 +version: 1 +dn: cn=ITD Staff, ou=Groups, dc=example, dc=com +changetype: modify +add: uniquemember +uniquemember: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com +EOMODS1 +RC=$? +case $RC in +50) + ;; +0) + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +$LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT1 -w jaj >> \ + $TESTOUT 2>&1 << EOMODS2 +version: 1 + +dn: cn=ITD Staff, ou=Groups, dc=example, dc=com +changetype: modify +add: uniquemember +uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com +EOMODS2 +RC=$? +case $RC in +0) + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +# +# Try to modify the "ITD Staff" group. Two attempts are made: +# 1) bound as "James A Jones 1" - should fail +# 2) bound as "Bjorn Jensen" - should succeed +# +$LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT1 -w jaj >> \ + $TESTOUT 2>&1 << EOMODS3 + +dn: cn=ITD Staff, ou=Groups, dc=example, dc=com +changetype: modify +delete: description +EOMODS3 +RC=$? +case $RC in +50) + ;; +0) + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +$LDAPMODIFY -D "$BJORNSDN" -h $LOCALHOST -p $PORT1 -w bjorn >> \ + $TESTOUT 2>&1 << EOMODS4 +# COMMENT +version: 1 +# comment +dn: cn=ITD Staff, ou=Groups, dc=example, dc=com +# comment +changetype: modify +# comment +add: ou +# comment +ou: Groups +# comment +EOMODS4 +RC=$? +case $RC in +0) + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +# +# Try to modify the "ITD Staff" group. Two attempts are made: +# 1) bound as "James A Jones 1" - should succeed +# 2) bound as "Barbara Jensen" - should fail +# should exploit sets +# +$LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT1 -w jaj >> \ + $TESTOUT 2>&1 << EOMODS5 +dn: cn=Alumni Assoc Staff, ou=Groups, dc=example, dc=com +changetype: modify +add: description +description: added by jaj (should succeed) +- +EOMODS5 +RC=$? +case $RC in +0) + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +$LDAPMODIFY -D "$BABSDN" -h $LOCALHOST -p $PORT1 -w bjensen >> \ + $TESTOUT 2>&1 << EOMODS6 +dn: cn=Alumni Assoc Staff, ou=Groups, dc=example, dc=com +changetype: modify +add: description +description: added by bjensen (should fail) +- +EOMODS6 +RC=$? +case $RC in +50) + ;; +0) + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +$LDAPMODIFY -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD >> \ + $TESTOUT 2>&1 << EOMODS7 +dn: ou=Add & Delete,dc=example,dc=com +changetype: add +objectClass: organizationalUnit +ou: Add & Delete +EOMODS7 +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPMODIFY -D "$BABSDN" -h $LOCALHOST -p $PORT1 -w bjensen >> \ + $TESTOUT 2>&1 << EOMODS8 +dn: cn=Added by Babs (must fail),ou=Add & Delete,dc=example,dc=com +changetype: add +objectClass: inetOrgPerson +cn: Added by Babs (must fail) +sn: None +EOMODS8 +RC=$? +case $RC in +50) + ;; +0) + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +$LDAPMODIFY -D "$BJORNSDN" -h $LOCALHOST -p $PORT1 -w bjorn >> \ + $TESTOUT 2>&1 << EOMODS9 +dn: cn=Added by Bjorn (must succeed),ou=Add & Delete,dc=example,dc=com +changetype: add +objectClass: inetOrgPerson +cn: Added by Bjorn (must succeed) +sn: None + +dn: cn=Added by Bjorn (will be deleted),ou=Add & Delete,dc=example,dc=com +changetype: add +objectClass: inetOrgPerson +cn: Added by Bjorn (will be deleted) +sn: None + +dn: cn=Added by Bjorn (will be renamed),ou=Add & Delete,dc=example,dc=com +changetype: add +objectClass: inetOrgPerson +cn: Added by Bjorn (will be renamed) +sn: None + +dn: cn=Added by Bjorn (must succeed),ou=Add & Delete,dc=example,dc=com +changetype: modify +add: description +description: this attribute value has been added __after__entry creation +description: this attribute value will be deleted by Babs (must succeed) +description: Bjorn will try to delete this attribute value (should fail) +- +EOMODS9 +RC=$? +case $RC in +0) + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +$LDAPMODIFY -D "$BJORNSDN" -h $LOCALHOST -p $PORT1 -w bjorn >> \ + $TESTOUT 2>&1 << EOMODS10 +dn: cn=Added by Bjorn (will be deleted),ou=Add & Delete,dc=example,dc=com +changetype: delete +EOMODS10 +RC=$? +case $RC in +50) + ;; +0) + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +$LDAPMODIFY -D "$BJORNSDN" -h $LOCALHOST -p $PORT1 -w bjorn >> \ + $TESTOUT 2>&1 << EOMODS11 +dn: cn=Added by Bjorn (will be renamed),ou=Add & Delete,dc=example,dc=com +changetype: modrdn +newrdn: cn=Added by Bjorn (renamed by Bjorn) +deleteoldrdn: 1 +EOMODS11 +RC=$? +case $RC in +50) + ;; +0) + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +$LDAPMODIFY -D "$BABSDN" -h $LOCALHOST -p $PORT1 -w bjensen >> \ + $TESTOUT 2>&1 << EOMODS12 +dn: cn=Added by Bjorn (will be renamed),ou=Add & Delete,dc=example,dc=com +changetype: modrdn +newrdn: cn=Added by Bjorn (renamed by Babs) +deleteoldrdn: 1 +EOMODS12 +RC=$? +case $RC in +50) + ;; +0) + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +$LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT1 -w jaj >> \ + $TESTOUT 2>&1 << EOMODS13 +dn: cn=Added by Bjorn (will be renamed),ou=Add & Delete,dc=example,dc=com +changetype: modrdn +newrdn: cn=Added by Bjorn (renamed by Jaj) +deleteoldrdn: 1 +EOMODS13 +RC=$? +case $RC in +0) + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +$LDAPMODIFY -D "$BJORNSDN" -h $LOCALHOST -p $PORT1 -w bjorn >> \ + $TESTOUT 2>&1 << EOMODS14 +dn: cn=Added by Bjorn (must succeed),ou=Add & Delete,dc=example,dc=com +changetype: modify +delete: description +description: Bjorn will try to delete this attribute value (should fail) +- +EOMODS14 +RC=$? +case $RC in +50) + ;; +0) + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +$LDAPMODIFY -D "$BABSDN" -h $LOCALHOST -p $PORT1 -w bjensen >> \ + $TESTOUT 2>&1 << EOMODS15 +dn: cn=Added by Bjorn (will be deleted),ou=Add & Delete,dc=example,dc=com +changetype: delete + +dn: cn=Added by Bjorn (must succeed),ou=Add & Delete,dc=example,dc=com +changetype: modify +delete: description +description: this attribute value will be deleted by Babs (must succeed) +- +EOMODS15 +RC=$? +case $RC in +0) + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Using ldapsearch to retrieve all the entries..." +echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + 'objectClass=*' >> $SEARCHOUT 2>&1 +RC=$? +test $KILLSERVERS != no && kill -HUP $KILLPIDS +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +LDIF=$ACLOUTMASTER + +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 - operations did not complete correctly" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test008-concurrency b/tests/scripts/test008-concurrency new file mode 100755 index 0000000..184305c --- /dev/null +++ b/tests/scripts/test008-concurrency @@ -0,0 +1,99 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test x$TESTLOOPS = x ; then + TESTLOOPS=50 +fi + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1 +$SLAPADD -f $CONF1 -l $LDIFORDERED -d -1 2> $SLAPADDLOG1 +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +# fix test data to include back-monitor, if available +# NOTE: copies do_* files from $DATADIR to $TESTDIR +$MONITORDATA "$MONITORDB" "$DATADIR" "$TESTDIR" + +echo "Using tester for concurrent server access..." +$SLAPDTESTER -P "$PROGDIR" -d "$TESTDIR" -h $LOCALHOST -p $PORT1 -D "$MANAGERDN" -w $PASSWD -l $TESTLOOPS +RC=$? + +if test $RC != 0 ; then + echo "slapd-tester failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to retrieve all the entries..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + 'objectClass=*' > $SEARCHOUT 2>&1 +RC=$? + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +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 - database was not created correctly" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test009-referral b/tests/scripts/test009-referral new file mode 100755 index 0000000..4b99b06 --- /dev/null +++ b/tests/scripts/test009-referral @@ -0,0 +1,181 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +# +# Test default referral +# + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1 +$SLAPADD -f $CONF1 -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting master slapd on TCP/IP port $PORT1..." +$SLAPD -n master -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi + +echo "Starting slave slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $REFSLAVECONF > $CONF2 +$SLAPD -n slave -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVEPID $SLAVEPID + read foo +fi + +KILLPIDS="$PID $SLAVEPID" + +sleep 1 + +echo "Testing for master slapd..." +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 master slapd to start..." + sleep 5 +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing for slave slapd..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + if test $RC = 0 ; then + break + fi + echo "Waiting 5 seconds for slave slapd to start..." + sleep 5 +done + +cat /dev/null > $SEARCHOUT + +echo "Testing exact searching..." +$LDAPSEARCH -C -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + 'sn=jensen' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing approximate searching..." +$LDAPSEARCH -C -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(sn=jENSEN)' name >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing OR searching..." +$LDAPSEARCH -C -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(|(objectclass=groupofnames)(objectClass=groupofuniquenames)(sn=jones))' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing AND matching and ends-with searching..." +$LDAPSEARCH -C -S "" -b "ou=groups,$BASEDN" -s one -h $LOCALHOST -p $PORT2 \ + '(&(objectclass=groupofnames)(cn=A*))' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing NOT searching..." +$LDAPSEARCH -C -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(!(objectclass=pilotPerson))' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing objectClass/attributeType inheritance ..." +$LDAPSEARCH -M -a never -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(&(objectClass=inetorgperson)(userid=uham))' \ + "2.5.4.0" "userid" >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing dontUseCopy control..." +$LDAPSEARCH -C -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + -E \!dontUseCopy \ + 'sn=jensen' >> $SEARCHOUT +RC=$? +if test $RC = 10 ; then + echo "ldapsearch failed as expected ($RC)" +else + echo "ldapsearch did not error as expected ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +LDIF=$SEARCHOUTMASTER + +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 diff --git a/tests/scripts/test010-passwd b/tests/scripts/test010-passwd new file mode 100755 index 0000000..ad3c048 --- /dev/null +++ b/tests/scripts/test010-passwd @@ -0,0 +1,189 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $PWCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Using ldapadd to populate the database..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFPASSWD > $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo > $SEARCHOUT +echo > $TESTOUT + +echo "Using ldapsearch to verify population ..." +echo "++ Initial search" >> $SEARCHOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 \ + -D "$MANAGERDN" -w $PASSWD \ + -b "$BASEDN" \ + 'objectclass=*' >> $SEARCHOUT 2>&1 + +echo "Using ldappasswd to test a few error conditions ..." +echo "Pass 0" >> $TESTOUT +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w secret -a "" -s newsecret \ + -D "cn=md5, $BASEDN" >> $TESTOUT 2>&1 +RC=$? +if test $RC = 0 ; then + echo "ldappasswd unexpectantly passed ($RC)! old empty" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w secret -a oldsecret -s "" \ + -D "cn=md5, $BASEDN" >> $TESTOUT 2>&1 +RC=$? +if test $RC = 0 ; then + echo "ldappasswd unexpectantly passed ($RC)! new empty" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w secret -a oldsecret -s newsecret \ + -D "cn=md5, $BASEDN" >> $TESTOUT 2>&1 +RC=$? +if test $RC = 0 ; then + echo "ldappasswd unexpectantly passed ($RC)! wrong old" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Using ldappasswd (PASS 1) ..." +echo "Pass 1" >> $TESTOUT +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w secret -s newsecret \ + -D "cn=md5, $BASEDN" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldappasswd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w $PASSWD -s newsecret \ + -D "$MANAGERDN" "cn=smd5, $BASEDN" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldappasswd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w secret -s newsecret \ + -D "cn=sha, $BASEDN" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldappasswd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w secret -s newsecret \ + -D "cn=ssha, $BASEDN" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldappasswd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "" >> $TESTOUT +echo "Pass 2" >> $TESTOUT +echo "Using ldappasswd (PASS 2) ..." +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w newsecret \ + -D "cn=md5, $BASEDN" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldappasswd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w newsecret \ + -D "cn=smd5, $BASEDN" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldappasswd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w newsecret \ + -D "cn=sha, $BASEDN" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldappasswd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w newsecret \ + -D "cn=ssha, $BASEDN" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldappasswd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Logging end state with ldapsearch..." +echo "" >> $TESTOUT +echo "++ End search" >> $TESTOUT +$LDAPSEARCH -h $LOCALHOST -p $PORT1 \ + -D "$MANAGERDN" -w $PASSWD \ + -b "$BASEDN" \ + 'objectclass=*' >> $TESTOUT 2>&1 + + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test011-glue-slapadd b/tests/scripts/test011-glue-slapadd new file mode 100755 index 0000000..203daef --- /dev/null +++ b/tests/scripts/test011-glue-slapadd @@ -0,0 +1,98 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1A $DBDIR1B $DBDIR1C + +echo "Running slapadd to build glued slapd databases..." +. $CONFFILTER $BACKEND $MONITORDB < $GLUECONF > $CONF1 +$SLAPADD -d $LVL -f $CONF1 -l $LDIFORDERED > $SLAPADDLOG1 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to retrieve all the entries..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -b "$BASEDN" -h $LOCALHOST -p $PORT1 > $SEARCHOUT 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 + +echo "Filtering ldapsearch results..." +$LDIFFILTER -s ldif=e < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif used to create database..." +$LDIFFILTER -s ldif=e < $LDIFGLUED > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - database was not created correctly" + echo $SEARCHFLT $LDIFFLT + $DIFF $SEARCHFLT $LDIFFLT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +if test $BACKEND != null ; then +echo "Testing sizelimit..." +$LDAPSEARCH -b "$BASEDN" -h $LOCALHOST -p $PORT1 -s one -z 2 > $SEARCHOUT 2>&1 +RC=$? +if test $RC = 0 ; then + echo "sizelimit not detected at end of search." + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +$LDAPSEARCH -b "$BASEDN" -h $LOCALHOST -p $PORT1 -z 9 objectclass=OpenLDAPPerson > $SEARCHOUT 2>&1 +RC=$? +if test $RC = 0 ; then + echo "sizelimit not detected at middle of search." + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test012-glue-populate b/tests/scripts/test012-glue-populate new file mode 100755 index 0000000..0438b08 --- /dev/null +++ b/tests/scripts/test012-glue-populate @@ -0,0 +1,83 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1A $DBDIR1B $DBDIR1C + +echo "Starting slapd on TCP/IP port $PORT..." +. $CONFFILTER $BACKEND $MONITORDB < $GLUECONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Using ldapadd to populate the glued database..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDERED > $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries..." +$LDAPSEARCH -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + 'objectclass=*' > $SEARCHOUT 2>&1 +RC=$? + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +echo "Filtering ldapsearch results..." +$LDIFFILTER -s ldif=e < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif used to create database..." +$LDIFFILTER -s ldif=e < $LDIFGLUED > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - database was not created correctly" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test013-language b/tests/scripts/test013-language new file mode 100755 index 0000000..ab4579d --- /dev/null +++ b/tests/scripts/test013-language @@ -0,0 +1,117 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Using ldapadd to populate the database..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFLANG > $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -s base \ + '(&)' > $SEARCHOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read name ..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -s base \ + '(&)' 'name' >> $SEARCHOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read name language tag ..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -s base \ + '(&)' 'name;lang-en-US' >> $SEARCHOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read name language range ..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -s base \ + '(&)' 'name;lang-en-' >> $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 + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering language ldif ..." +$LDIFFILTER < $LDIFLANGOUT > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - language test failed!" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test014-whoami b/tests/scripts/test014-whoami new file mode 100755 index 0000000..0a5aa46 --- /dev/null +++ b/tests/scripts/test014-whoami @@ -0,0 +1,468 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $WHOAMICONF > $ADDCONF +$SLAPADD -f $ADDCONF -l $LDIFWHOAMI +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT..." +. $CONFFILTER $BACKEND $MONITORDB < $WHOAMICONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Testing ldapwhoami as anonymous..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing ldapwhoami as ${MANAGERDN}..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$MANAGERDN" -w $PASSWD + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing ldapwhoami as ${MANAGERDN} for anonymous..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$MANAGERDN" -w $PASSWD \ + -e \!authzid="" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing ldapwhoami as ${MANAGERDN} for dn:$BABSDN..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$MANAGERDN" -w $PASSWD \ + -e \!authzid="dn:$BABSDN" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing ldapwhoami as ${MANAGERDN} for u:uham..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$MANAGERDN" -w $PASSWD \ + -e \!authzid="u:uham" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# authzFrom: someone else => bjorn +echo "Testing authzFrom..." + +BINDDN="cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjensen +AUTHZID="u:bjorn" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (dn.exact)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BINDDN="cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com" +BINDPW=melliot +AUTHZID="u:bjorn" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (u)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BINDDN="cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com" +BINDPW=jen +AUTHZID="u:bjorn" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (URI)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BINDDN="cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=jjones +AUTHZID="u:bjorn" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (group)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BINDDN="cn=No One,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=noone +AUTHZID="u:bjorn" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (dn.onelevel)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BINDDN="cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com" +BINDPW=dots +AUTHZID="u:bjorn" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (dn.regex)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BINDDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com" +BINDPW=jaj +AUTHZID="u:bjorn" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (dn.children)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BINDDN="cn=ITD Staff,ou=Groups,dc=example,dc=com" +BINDPW=ITD +AUTHZID="u:bjorn" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (dn.subtree)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BINDDN="cn=Should Fail,dc=example,dc=com" +BINDPW=fail +AUTHZID="u:bjorn" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (URI; should fail)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +case $RC in +1) + ;; +0) + echo "ldapwhoami should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +BINDDN="cn=Must Fail,dc=example,dc=com" +BINDPW=fail +AUTHZID="u:bjorn" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (URI; should fail)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +case $RC in +1) + ;; +0) + echo "ldapwhoami should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +# authzTo: bjorn => someone else +echo "Testing authzTo..." + +BINDDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjorn +AUTHZID="u:bjensen" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (dn.exact)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BINDDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjorn +AUTHZID="u:melliot" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (u)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BINDDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjorn +AUTHZID="u:jdoe" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (URI)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BINDDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjorn +AUTHZID="u:jjones" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (group)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BINDDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjorn +AUTHZID="u:noone" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (dn.onelevel)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BINDDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjorn +AUTHZID="u:dots" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (dn.regex)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BINDDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjorn +AUTHZID="u:jaj" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (dn.children)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BINDDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjorn +AUTHZID="u:group/itd staff" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (dn.subtree)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +BINDDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjorn +AUTHZID="u:fail" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (URI; should fail)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +case $RC in +1) + ;; +0) + echo "ldapwhoami should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +BINDDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjorn +AUTHZID="dn:cn=Should Fail,dc=example,dc=com" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (URI; should fail)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +case $RC in +1) + ;; +0) + echo "ldapwhoami should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +BINDDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjorn +AUTHZID="dn:cn=don't!" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID} (no authzTo; should fail)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 1 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +BINDDN="dc=example,dc=com" +BINDPW=example +AUTHZID="dn:" +echo "Testing ldapwhoami as ${BINDDN} for ${AUTHZID}\"\" (dn.exact; should succeed)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW \ + -e \!authzid="$AUTHZID" + +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 + +## Note to developers: when SLAPD_DEBUG=-1 the command +## awk '/^do_extended$/ {if (c) {print c} c=0} /<===slap_sasl_match:/ {c++} END {print c}' $TESTDIR/slapd.1.log +## must return the sequence 1 2 3 4 5 6 7 8 8 8 1 2 3 4 5 6 7 8 8 8 8 1 +## to indicate that the authzFrom and authzTo rules applied in the right order. diff --git a/tests/scripts/test015-xsearch b/tests/scripts/test015-xsearch new file mode 100755 index 0000000..2ac1e81 --- /dev/null +++ b/tests/scripts/test015-xsearch @@ -0,0 +1,261 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $MCONF > $ADDCONF +$SLAPADD -f $ADDCONF -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Running slapindex to index slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1 +$SLAPINDEX -f $CONF1 +RC=$? +if test $RC != 0 ; then + echo "warning: slapindex failed ($RC)" + echo " assuming no indexing support" +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd searching..." +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 > $SEARCHOUT + +echo "Testing exact searching..." +echo "# Testing exact searching..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(sn:=jensen)' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing approximate searching..." +echo "# Testing approximate searching..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(sn~=jensen)' name >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing OR searching..." +echo "# Testing OR searching..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(|(givenName=XX*YY*Z)(cn=)(undef=*)(objectclass=groupofnames)(objectclass=groupofuniquenames)(sn:caseExactMatch:=Jones))' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing AND matching and ends-with searching..." +echo "# Testing AND matching and ends-with searching..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "ou=groups,$BASEDN" -s one -h $LOCALHOST -p $PORT1 \ + '(&(|(objectclass=groupofnames)(objectclass=groupofuniquenames))(cn=A*))' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing NOT searching..." +echo "# Testing NOT searching..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(!(objectclass=pilotPerson))' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing objectClass/attributeType inheritance ..." +echo "# Testing objectClass/attributeType inheritance ..." >> $SEARCHOUT +$LDAPSEARCH -M -a never -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(&(objectClass=inetorgperson)(userid=uham))' \ + "2.5.4.0" "userid" >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing extended RFC2254 searching:" +echo "# Testing extended RFC2254 searching:" >> $SEARCHOUT + +FILTER="(:dn:caseIgnoreIA5Match:=example)" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(:dn:caseExactMatch:=Information Technology Division)" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +# ITS#4380: don't crash when a matchingRule without pretty/validate is used +FILTER="(:dn:caseIgnoreSubstringsMatch:=Information Technology Division)" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(name:dn:=whatever)" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing values return filter searching:" +echo "# Testing values return filter searching:" >> $SEARCHOUT + +FILTER="(o=Example, Inc.)" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + -E '!mv='"$FILTER" "$FILTER" >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(dc=example)" +VRFILTER="((o:caseExactMatch:=Example, Inc.)(dc=example))" +echo " f=$FILTER mv=$VRFILTER ..." +echo "# f=$FILTER mv=$VRFILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + -E '!mv='"$VRFILTER" "$FILTER" >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(dc=example)" +VRFILTER="((o={*)(dc=*))" +echo " f=$FILTER mv=$VRFILTER ..." +echo "# f=$FILTER mv=$VRFILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + -E '!mv='"$VRFILTER" "$FILTER" >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(attributeTypes=0.9.2342.19200300.100.1.25)" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "cn=Subschema" -s "base" -h $LOCALHOST -p $PORT1 \ + -E '!mv='"$FILTER" "$FILTER" "attributeTypes" >> $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=$SEARCHOUTMASTER +LDIF2=$SEARCHOUTX + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif used to create database..." +$LDIFFILTER < $LDIF > $LDIFFLT +$LDIFFILTER < $LDIF2 >> $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 diff --git a/tests/scripts/test016-subref b/tests/scripts/test016-subref new file mode 100755 index 0000000..c2a8504 --- /dev/null +++ b/tests/scripts/test016-subref @@ -0,0 +1,197 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +RCODE=10 +test $BACKEND = null && RCODE=0 + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $RCONF > $CONF1 +$SLAPADD -f $CONF1 -l $LDIFREF +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd searching..." +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 > $SEARCHOUT + +echo "Testing ManageDsaIT searching at $REFDN..." +$LDAPRSEARCH -S "" -MM -b "$REFDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=referral)' '*' ref >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing ManageDsaIT searching at referral object..." +$LDAPRSEARCH -S "" -MM -b "o=abc,$REFDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=referral)' '*' ref >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing ManageDsaIT searching below referral object..." +$LDAPRSEARCH -S "" -MM -b "uid=xxx,o=abc,$REFDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=referral)' '*' ref >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != $RCODE ; then + echo "ldapsearch: unexpected result ($RC)! (referral expected)" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +XREFDN="$REFDN" +echo "Testing base searching at $XREFDN..." +$LDAPRSEARCH -S "" -s base -b "$XREFDN" -h $LOCALHOST -p $PORT1 1.1 >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing one-level searching at $XREFDN..." +$LDAPRSEARCH -S "" -s one -b "$XREFDN" -h $LOCALHOST -p $PORT1 1.1 >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing subtree searching at $XREFDN..." +$LDAPRSEARCH -S "" -s sub -b "$XREFDN" -h $LOCALHOST -p $PORT1 1.1 >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +XREFDN="o=abc,$REFDN" +echo "Testing base searching at $XREFDN..." +$LDAPRSEARCH -S "" -s base -b "$XREFDN" -h $LOCALHOST -p $PORT1 1.1 >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != $RCODE ; then + echo "ldapsearch: unexpected result ($RC)! (referral expected)" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing one-level searching at $XREFDN..." +$LDAPRSEARCH -S "" -s one -b "$XREFDN" -h $LOCALHOST -p $PORT1 1.1 >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != $RCODE ; then + echo "ldapsearch: unexpected result ($RC)! (referral expected)" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing subtree searching at $XREFDN..." +$LDAPRSEARCH -S "" -s sub -b "$XREFDN" -h $LOCALHOST -p $PORT1 1.1 >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != $RCODE ; then + echo "ldapsearch: unexpected result ($RC)! (referral expected)" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +XREFDN="uid=xxx,o=abc,$REFDN" +echo "Testing base searching at $XREFDN..." +$LDAPRSEARCH -S "" -s base -b "$XREFDN" -h $LOCALHOST -p $PORT1 1.1 >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != $RCODE ; then + echo "ldapsearch: unexpected result ($RC)! (referral expected)" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing one-level searching at $XREFDN..." +$LDAPRSEARCH -S "" -s one -b "$XREFDN" -h $LOCALHOST -p $PORT1 1.1 >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != $RCODE ; then + echo "ldapsearch: unexpected result ($RC)! (referral expected)" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing subtree searching at $XREFDN..." +$LDAPRSEARCH -S "" -s sub -b "$XREFDN" -h $LOCALHOST -p $PORT1 1.1 >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != $RCODE ; then + echo "ldapsearch: unexpected result ($RC)! (referral expected)" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +LDIF=$SEARCHOUTMASTER +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering expected LDIF for comparison..." +$LDIFFILTER < $REFERRALOUT > $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 diff --git a/tests/scripts/test017-syncreplication-refresh b/tests/scripts/test017-syncreplication-refresh new file mode 100755 index 0000000..fea3d48 --- /dev/null +++ b/tests/scripts/test017-syncreplication-refresh @@ -0,0 +1,356 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 + +# +# Test replication: +# - start provider +# - start consumer +# - populate over ldap +# - perform some modifies and deleted +# - attempt to modify the consumer (referral) +# - retrieve database over ldap and compare against expected results +# + +echo "Starting provider slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $SRMASTERCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that provider slapd is running..." +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 + +echo "Using ldapadd to create the context prefix entry in the provider..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDEREDCP > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting consumer slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $R1SRSLAVECONF > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVEPID $SLAVEPID + read foo +fi +KILLPIDS="$KILLPIDS $SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that consumer slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + '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 + +echo "Using ldapadd to populate the provider directory..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDEREDNOCP > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Using ldapmodify to modify provider directory..." + +# +# Do some modifications +# + +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com +changetype: modify +add: drink +drink: Orange Juice +- +delete: sn +sn: Jones +- +add: sn +sn: Jones + +dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +replace: drink +drink: Iced Tea +drink: Mad Dog 20/20 + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: uniquemember +uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com +uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +- +add: uniquemember +uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com +uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: description + +dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +cn: Gern Jensen +sn: Jensen +uid: gjensen +title: Chief Investigator, ITD +postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103 +seealso: cn=All Staff, ou=Groups, dc=example,dc=com +drink: Coffee +homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104 +description: Very odd +facsimiletelephonenumber: +1 313 555 7557 +telephonenumber: +1 313 555 8343 +mail: gjensen@mailgw.example.com +homephone: +1 313 555 8844 + +dn: ou=Retired, ou=People, dc=example,dc=com +changetype: add +objectclass: organizationalUnit +ou: Retired + +dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +cn: Rosco P. Coltrane +sn: Coltrane +uid: rosco + +dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modrdn +newrdn: cn=Rosco P. Coltrane +deleteoldrdn: 1 +newsuperior: ou=Retired, ou=People, dc=example,dc=com + +dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: delete + +dn: dc=testdomain1,dc=example,dc=com +changetype: modrdn +newrdn: dc=itsdomain1 +deleteoldrdn: 1 + +dn: dc=itsdomain1,dc=example,dc=com +changetype: modify +replace: description +description: Example, Inc. ITS test domain + +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Performing modrdn alone on the provider..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: dc=testdomain2,dc=example,dc=com +changetype: modrdn +newrdn: dc=itsdomain2 +deleteoldrdn: 1 + +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Performing modify alone on the provider..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: dc=itsdomain2,dc=example,dc=com +changetype: modify +replace: description +description: Example, Inc. itsdomain2 test domain + +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Performing larger modify on the provider..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com +changetype: modify +replace: objectClass +objectClass: groupOfNames +- +replace: cn +cn: Alumni Assoc Staff +- +replace: description +description: blablabla +- +replace: member +member: cn=Manager,dc=example,dc=com +member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com + +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Try updating the consumer slapd..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com +changetype: modify +add: description +description: This write must fail because directed to a shadow context, +description: unless the chain overlay is configured appropriately ;) + +EOMODS + +RC=$? + +# expect 10 (LDAP_REFERRAL)... +if test $RC != 10 ; then + echo "ldapmodify should have returned referral ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +OPATTRS="entryUUID creatorsName createTimestamp modifiersName modifyTimestamp" + +echo "Using ldapsearch to read all the entries from the provider..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectclass=*)' '*' $OPATTRS > $MASTEROUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at provider ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the consumer..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectclass=*)' '*' $OPATTRS > $SLAVEOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at consumer ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo "Filtering provider results..." +$LDIFFILTER < $MASTEROUT > $MASTERFLT +echo "Filtering consumer results..." +$LDIFFILTER < $SLAVEOUT > $SLAVEFLT + +echo "Comparing retrieved entries from provider and consumer..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - provider and consumer databases differ" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test018-syncreplication-persist b/tests/scripts/test018-syncreplication-persist new file mode 100755 index 0000000..18bd92c --- /dev/null +++ b/tests/scripts/test018-syncreplication-persist @@ -0,0 +1,540 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +OPATTRS="entryUUID creatorsName createTimestamp modifiersName modifyTimestamp" + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 $DBDIR4 + +# +# Test replication: +# - start provider +# - start consumer +# - populate over ldap +# - perform some modifies and deleted +# - attempt to modify the consumer (referral or chain) +# - retrieve database over ldap and compare against expected results +# + +echo "Starting provider slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $SRMASTERCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that provider slapd is running..." +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 + +echo "Using ldapadd to create the context prefix entry in the provider..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDEREDCP > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting consumer slapd on TCP/IP port $PORT4..." +. $CONFFILTER $BACKEND $MONITORDB < $P1SRSLAVECONF > $CONF4 +$SLAPD -f $CONF4 -h $URI4 -d $LVL $TIMING > $LOG4 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVEPID $SLAVEPID + read foo +fi +KILLPIDS="$KILLPIDS $SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that consumer slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT4 \ + '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 + +echo "Using ldapadd to populate the provider directory..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDEREDNOCP > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Using ldapsearch to read all the entries from the provider..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectclass=*)' '*' $OPATTRS > $MASTEROUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at provider ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the consumer..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT4 \ + '(objectclass=*)' '*' $OPATTRS > $SLAVEOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at consumer ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering provider results..." +$LDIFFILTER < $MASTEROUT > $MASTERFLT +echo "Filtering consumer results..." +$LDIFFILTER < $SLAVEOUT > $SLAVEFLT + +echo "Comparing retrieved entries from provider and consumer..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - provider and consumer databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Stopping the provider, sleeping 10 seconds and restarting it..." +kill -HUP "$PID" +wait $PID +sleep 10 +echo "RESTART" >> $LOG1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID $SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that provider slapd is running..." +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 + +echo "Waiting $SLEEP1 seconds for consumer to reconnect..." +sleep $SLEEP1 + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapmodify to modify provider directory..." + +# +# Do some modifications +# + +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com +changetype: modify +add: drink +drink: Orange Juice +- +delete: sn +sn: Jones +- +add: sn +sn: Jones + +dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +replace: drink +drink: Iced Tea + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: uniquemember +uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com +uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +- +add: uniquemember +uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com +uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: description + +dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +cn: Gern Jensen +sn: Jensen +uid: gjensen +title: Chief Investigator, ITD +postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103 +seealso: cn=All Staff, ou=Groups, dc=example,dc=com +drink: Coffee +homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104 +description: Very odd +facsimiletelephonenumber: +1 313 555 7557 +facsimiletelephonenumber: +1 313 555 9998 +facsimiletelephonenumber: +1 313 555 9999 +telephonenumber: +1 313 555 8343 +mail: gjensen@mailgw.example.com +homephone: +1 313 555 8844 + +# modify attribute with no matching rule (ITS#6458) +dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +replace: facsimiletelephonenumber +facsimiletelephonenumber: +1 313 555 9998 +facsimiletelephonenumber: +1 313 555 9999 + +dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +replace: facsimiletelephonenumber +facsimiletelephonenumber: +1 313 555 9998 +facsimiletelephonenumber: +1 313 555 9999 +facsimiletelephonenumber: +1 313 555 7557 + +dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +replace: facsimiletelephonenumber +facsimiletelephonenumber: +1 313 555 9998 +facsimiletelephonenumber: +1 313 555 9999 + +dn: ou=Retired, ou=People, dc=example,dc=com +changetype: add +objectclass: organizationalUnit +ou: Retired + +dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +cn: Rosco P. Coltrane +sn: Coltrane +uid: rosco +description: Fat tycoon + +dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modrdn +newrdn: cn=Rosco P. Coltrane +deleteoldrdn: 1 +newsuperior: ou=Retired, ou=People, dc=example,dc=com + +dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: delete + +dn: dc=testdomain1,dc=example,dc=com +changetype: modrdn +newrdn: dc=itsdomain1 +deleteoldrdn: 1 + +dn: dc=itsdomain1,dc=example,dc=com +changetype: modify +replace: description +description: Example, Inc. ITS test domain + +dn: dc=testdomain2,dc=example,dc=com +changetype: modrdn +newrdn: dc=itsdomain2 +deleteoldrdn: 1 + +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldappasswd to change some passwords..." +$LDAPPASSWD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + 'cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com' \ + > $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Using ldapsearch to read all the entries from the provider..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectclass=*)' '*' $OPATTRS > $MASTEROUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at provider ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the consumer..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT4 \ + '(objectclass=*)' '*' $OPATTRS > $SLAVEOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at consumer ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering provider results..." +$LDIFFILTER < $MASTEROUT > $MASTERFLT +echo "Filtering consumer results..." +$LDIFFILTER < $SLAVEOUT > $SLAVEFLT + +echo "Comparing retrieved entries from provider and consumer..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - provider and consumer databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Stopping consumer to test recovery..." +kill -HUP $SLAVEPID +wait $SLAVEPID + +echo "Modifying more entries on the provider..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD >> \ + $TESTOUT 2>&1 << EOMODS +dn: cn=Rosco P. Coltrane, ou=Retired, ou=People, dc=example,dc=com +changetype: delete + +dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +add: drink +drink: Mad Dog 20/20 + +dn: cn=Rosco P. Coltrane, ou=Retired, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +sn: Coltrane +uid: rosco +cn: Rosco P. Coltrane + +dn: dc=itsdomain2,dc=example,dc=com +changetype: modify +replace: description +description: Example, Inc. itsdomain2 test domain + +# rename with a newly added newSuperior while the consumer is down (ITS#6472) +dn: ou=New Branch,dc=example,dc=com +changetype: add +objectClass: organizationalUnit +ou: New Branch + +dn: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com +changetype: modrdn +newrdn: cn=Dorothy Stevens +deleteoldrdn: 0 +newsuperior: ou=New Branch,dc=example,dc=com + +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Restarting consumer..." +echo "RESTART" >> $LOG4 +$SLAPD -f $CONF4 -h $URI4 -d $LVL $TIMING >> $LOG4 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVEPID $SLAVEPID + read foo +fi +KILLPIDS="$PID $SLAVEPID" + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Using ldapsearch to read all the entries from the provider..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectclass=*)' '*' $OPATTRS > $MASTEROUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at provider ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the consumer..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT4 \ + '(objectclass=*)' '*' $OPATTRS > $SLAVEOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at consumer ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering provider results..." +$LDIFFILTER < $MASTEROUT > $MASTERFLT +echo "Filtering consumer results..." +$LDIFFILTER < $SLAVEOUT > $SLAVEFLT + +echo "Comparing retrieved entries from provider and consumer..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - provider and consumer databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +if test ! $BACKLDAP = "ldapno" ; then + echo "Try updating the consumer slapd..." + $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT4 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com +changetype: modify +add: description +description: This write must fail because directed to a shadow context, +description: unless the chain overlay is configured appropriately ;) + +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + # ITS#4964 + echo "Trying to change some passwords on the consumer..." + $LDAPPASSWD -D "$MANAGERDN" -h $LOCALHOST -p $PORT4 -w $PASSWD \ + 'cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com' \ + > $TESTOUT 2>&1 + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." + sleep $SLEEP1 +fi + +echo "Using ldapsearch to read all the entries from the provider..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectclass=*)' '*' $OPATTRS > $MASTEROUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at provider ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the consumer..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT4 \ + '(objectclass=*)' '*' $OPATTRS > $SLAVEOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at consumer ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering provider results..." +$LDIFFILTER < $MASTEROUT > $MASTERFLT +echo "Filtering consumer results..." +$LDIFFILTER < $SLAVEOUT > $SLAVEFLT + +echo "Comparing retrieved entries from provider and consumer..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - provider and consumer databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test019-syncreplication-cascade b/tests/scripts/test019-syncreplication-cascade new file mode 100755 index 0000000..f274ba9 --- /dev/null +++ b/tests/scripts/test019-syncreplication-cascade @@ -0,0 +1,487 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 $DBDIR3 $DBDIR4 $DBDIR5 $DBDIR6 + +# +# Test replication: +# - start master +# - start slave +# - populate over ldap +# - perform some modifies and deleted +# - retrieve database over ldap and compare against expected results +# + +echo "Starting master slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $SRMASTERCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that master slapd (pid=$PID) is running..." +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 + +echo "Using ldapadd to create the context prefix entry in the master..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDEREDCP > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting R1 slave slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $R1SRSLAVECONF > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVE R1 PID $SLAVEPID + read foo +fi +KILLPIDS="$KILLPIDS $SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that R1 slave slapd (pid=$SLAVEPID) is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + if test $RC = 0 ; then + break + fi + echo "Waiting 5 seconds for R1 slapd to start..." + sleep 5 +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting R2 slave slapd on TCP/IP port $PORT3..." +. $CONFFILTER $BACKEND $MONITORDB < $R2SRSLAVECONF > $CONF3 +$SLAPD -f $CONF3 -h $URI3 -d $LVL $TIMING > $LOG3 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVE R2 PID $SLAVEPID + read foo +fi +KILLPIDS="$KILLPIDS $SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that R2 slave slapd (pid=$SLAVEPID) is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT3 \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + if test $RC = 0 ; then + break + fi + echo "Waiting 5 seconds for R2 slave slapd to start..." + sleep 5 +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting P1 slave slapd on TCP/IP port $PORT4..." +. $CONFFILTER $BACKEND $MONITORDB < $P1SRSLAVECONF > $CONF4 +$SLAPD -f $CONF4 -h $URI4 -d $LVL $TIMING > $LOG4 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVE P1 PID $SLAVEPID + read foo +fi +KILLPIDS="$KILLPIDS $SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that P1 slave slapd (pid=$SLAVEPID) is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT4 \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + if test $RC = 0 ; then + break + fi + echo "Waiting 5 seconds for P1 slave slapd to start..." + sleep 5 +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting P2 slave slapd on TCP/IP port $PORT5..." +. $CONFFILTER $BACKEND $MONITORDB < $P2SRSLAVECONF > $CONF5 +$SLAPD -f $CONF5 -h $URI5 -d $LVL $TIMING > $LOG5 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVE P2 PID $SLAVEPID + read foo +fi +KILLPIDS="$KILLPIDS $SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that P2 slave slapd (pid=$SLAVEPID) is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT5 \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + if test $RC = 0 ; then + break + fi + echo "Waiting 5 seconds for P2 slave slapd to start..." + sleep 5 +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting P3 slave slapd on TCP/IP port $PORT6..." +. $CONFFILTER $BACKEND $MONITORDB < $P3SRSLAVECONF > $CONF6 +$SLAPD -f $CONF6 -h $URI6 -d $LVL $TIMING > $LOG6 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVE P3 PID $SLAVEPID + read foo +fi +KILLPIDS="$KILLPIDS $SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that P3 slave slapd (pid=$SLAVEPID) is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT6 \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + if test $RC = 0 ; then + break + fi + echo "Waiting 5 seconds for P3 slave slapd to start..." + sleep 5 +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapadd to populate the master directory..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDEREDNOCP > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP2 seconds for syncrepl to receive changes..." +sleep $SLEEP2 + +echo "Using ldapmodify to modify master directory..." + +# +# Do some modifications +# + +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com +changetype: modify +add: drink +drink: Orange Juice +- +delete: sn +sn: Jones +- +add: sn +sn: Jones + +dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +replace: drink +drink: Iced Tea +drink: Mad Dog 20/20 + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: uniquemember +uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com +uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +- +add: uniquemember +uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com +uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: description + +dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +cn: Gern Jensen +sn: Jensen +uid: gjensen +title: Chief Investigator, ITD +postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103 +seealso: cn=All Staff, ou=Groups, dc=example,dc=com +drink: Coffee +homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104 +description: Very odd +facsimiletelephonenumber: +1 313 555 7557 +telephonenumber: +1 313 555 8343 +mail: gjensen@mailgw.example.com +homephone: +1 313 555 8844 + +dn: ou=Retired, ou=People, dc=example,dc=com +changetype: add +objectclass: organizationalUnit +ou: Retired + +dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +cn: Rosco P. Coltrane +sn: Coltrane +uid: rosco + +dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modrdn +newrdn: cn=Rosco P. Coltrane +deleteoldrdn: 1 +newsuperior: ou=Retired, ou=People, dc=example,dc=com + +dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: delete + +dn: dc=testdomain1,dc=example,dc=com +changetype: modrdn +newrdn: dc=itsdomain1 +deleteoldrdn: 1 + +dn: dc=itsdomain1,dc=example,dc=com +changetype: modify +replace: description +description: Example, Inc. ITS test domain + +dn: dc=testdomain2,dc=example,dc=com +changetype: modrdn +newrdn: dc=itsdomain2 +deleteoldrdn: 1 + +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP2 seconds for syncrepl to receive changes..." +sleep $SLEEP2 + +echo "Performing modify alone on provider..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: dc=itsdomain2,dc=example,dc=com +changetype: modify +replace: description +description: Example, Inc. itsdomain2 test domain + +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP2 seconds for syncrepl to receive changes..." +sleep $SLEEP2 + +echo "Using ldapsearch to read all the entries from the master..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' '*' entryCSN > $MASTEROUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the R1 slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' '*' entryCSN > $SERVER2OUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at R1 slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the R2 slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT3 \ + '(objectClass=*)' '*' entryCSN > $SERVER3OUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at R2 slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the P1 slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT4 \ + '(objectClass=*)' '*' entryCSN > $SERVER4OUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at P1 slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the P2 slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT5 \ + '(objectClass=*)' '*' entryCSN > $SERVER5OUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at P2 slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the P3 slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT6 \ + '(objectClass=*)' '*' entryCSN > $SERVER6OUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at P3 slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo "Filtering master ldapsearch results..." +$LDIFFILTER < $MASTEROUT > $MASTERFLT +echo "Filtering R1 slave ldapsearch results..." +$LDIFFILTER < $SERVER2OUT > $SERVER2FLT +echo "Filtering R2 slave ldapsearch results..." +$LDIFFILTER < $SERVER3OUT > $SERVER3FLT +echo "Filtering P1 slave ldapsearch results..." +$LDIFFILTER < $SERVER4OUT > $SERVER4FLT +echo "Filtering P2 slave ldapsearch results..." +$LDIFFILTER < $SERVER5OUT > $SERVER5FLT +echo "Filtering P3 slave ldapsearch results..." +$LDIFFILTER < $SERVER6OUT > $SERVER6FLT + +echo "Comparing retrieved entries from master and R1 slave..." +$CMP $MASTERFLT $SERVER2FLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and R1 slave databases differ" + exit 1 +fi + +echo "Comparing retrieved entries from master and R2 slave..." +$CMP $MASTERFLT $SERVER3FLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and R2 slave databases differ" + exit 1 +fi + +echo "Comparing retrieved entries from master and P1 slave..." +$CMP $MASTERFLT $SERVER4FLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and P1 slave databases differ" + exit 1 +fi + +echo "Comparing retrieved entries from master and P2 slave..." +$CMP $MASTERFLT $SERVER5FLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and P2 slave databases differ" + exit 1 +fi + +echo "Comparing retrieved entries from master and P3 slave..." +$CMP $MASTERFLT $SERVER6FLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and P3 slave databases differ" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test020-proxycache b/tests/scripts/test020-proxycache new file mode 100755 index 0000000..7f367d7 --- /dev/null +++ b/tests/scripts/test020-proxycache @@ -0,0 +1,654 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +PCACHETTL=${PCACHETTL-"1m"} +PCACHENTTL=${PCACHENTTL-"1m"} +PCACHESTTL=${PCACHESTTL-"1m"} +PCACHE_ENTRY_LIMIT=${PCACHE_ENTRY_LIMIT-"6"} +PCACHE_CCPERIOD=${PCACHE_CCPERIOD-"2"} +PCACHETTR=${PCACHETTR-"2"} +PCACHEBTTR=${PCACHEBTTR-"5"} + +. $SRCDIR/scripts/defines.sh + +if test $PROXYCACHE = pcacheno; then + echo "Proxy cache overlay not available, test skipped" + exit 0 +fi + +if test $BACKLDAP = "ldapno" ; then + echo "LDAP backend not available, test skipped" + exit 0 +fi + +if test $BACKEND = ldif ; then + # The (mail=example.com*) queries hit a sizelimit, so which + # entry is returned depends on the ordering in the backend. + echo "Test does not support $BACKEND backend, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 + +# Test proxy caching: +# - start master +# - start proxy cache +# - populate master +# - perform first set of searches at the proxy +# - verify cacheability +# - perform second set of searches at the proxy +# - verify answerability + +echo "Starting master slapd on TCP/IP port $PORT1..." +. $CONFFILTER < $CACHEMASTERCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that master slapd is running..." +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 + +echo "Using ldapadd to populate the master directory..." +$LDAPADD -x -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDERED > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting proxy cache on TCP/IP port $PORT2..." +. $CONFFILTER < $PROXYCACHECONF | sed \ + -e "s/@TTL@/${PCACHETTL}/" \ + -e "s/@NTTL@/${PCACHENTTL}/" \ + -e "s/@STTL@/${PCACHENTTL}/" \ + -e "s/@TTR@/${PCACHETTR}/" \ + -e "s/@ENTRY_LIMIT@/${PCACHE_ENTRY_LIMIT}/" \ + -e "s/@CCPERIOD@/${PCACHE_CCPERIOD}/" \ + -e "s/@BTTR@/${PCACHEBTTR}/" \ + > $CONF2 + +$SLAPD -f $CONF2 -h $URI2 -d $LVL -d pcache > $LOG2 2>&1 & +CACHEPID=$! +if test $WAIT != 0 ; then + echo CACHEPID $CACHEPID + read foo +fi +KILLPIDS="$KILLPIDS $CACHEPID" + +sleep 1 + +echo "Using ldapsearch to check that proxy slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + '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 > $SEARCHOUT + +echo "Making queries on the proxy cache..." +CNT=0 + +CNT=`expr $CNT + 1` +FILTER="(sn=Jon)" +echo "Query $CNT: filter:$FILTER attrs:all (expect nothing)" +echo "# Query $CNT: filter:$FILTER attrs:all (expect nothing)" >> $SEARCHOUT +$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# ITS#4491, if debug messages are unavailable, we can't verify the tests. +grep "query template" $LOG2 > /dev/null +RC=$? +if test $RC != 0 ; then + echo "Debug messages unavailable, remaining test skipped..." + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait + exit 0 +fi + +CNT=`expr $CNT + 1` +FILTER="(|(cn=*Jon*)(sn=Jon*))" +ATTRS="cn sn title uid" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +CNT=`expr $CNT + 1` +FILTER="(sn=Smith*)" +ATTRS="cn sn uid" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +CNT=`expr $CNT + 1` +FILTER="(sn=Doe*)" +ATTRS="cn sn title uid" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +CNT=`expr $CNT + 1` +FILTER="(uid=johnd)" +ATTRS="mail postaladdress telephonenumber cn uid" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +CNT=`expr $CNT + 1` +FILTER="(mail=*@mail.alumni.example.com)" +ATTRS="cn sn title uid" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +CNT=`expr $CNT + 1` +FILTER="(mail=*)" +ATTRS="cn sn title uid" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +CNT=`expr $CNT + 1` +FILTER="(mail=*example.com)" +ATTRS="cn sn title uid" +USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +UPASSWD="bjorn" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + -D "$USERDN" -w "$UPASSWD" \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +case $RC in +0) + echo "ldapsearch should have failed!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + ;; +4) + echo "ldapsearch failed ($RC)" + ;; +*) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +CNT=`expr $CNT + 1` +FILTER="(uid=b*)" +ATTRS="mail" +USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +UPASSWD="bjorn" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + -D "$USERDN" -w "$UPASSWD" \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +case $RC in +0) + echo "ldapsearch should have failed!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + ;; +4) + echo "ldapsearch failed ($RC)" + ;; +*) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +CNT=`expr $CNT + 1` +FILTER="(|(cn=All Staff)(sn=All Staff))" +ATTRS="sn cn title uid undefinedAttr" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FIRST=$CNT + +# queries 2-6,8-10 are cacheable +CACHEABILITY=0111110111 +grep CACHEABLE $LOG2 | awk '{ + if ($3 == "NOT") + printf "Query %d not cacheable\n",NR + else + printf "Query %d cacheable\n",NR + }' +CACHED=`grep CACHEABLE $LOG2 | awk '{ + if ($3 == "NOT") + printf "0" + else + printf "1" + }'` + +if test "$CACHEABILITY" = "$CACHED" ; then + echo "Successfully verified cacheability" +else + echo "Error in verifying cacheability" + echo "$CACHED" + echo "$CACHEABILITY" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +CNT=`expr $CNT + 1` +FILTER="(|(cn=*Jones)(sn=Jones))" +ATTRS="cn sn title uid" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +CNT=`expr $CNT + 1` +FILTER="(sn=Smith)" +ATTRS="cn sn title uid" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +CNT=`expr $CNT + 1` +FILTER="(uid=bjorn)" +ATTRS="mail postaladdress telephonenumber cn uid" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +CNT=`expr $CNT + 1` +FILTER="(mail=jaj@mail.alumni.example.com)" +ATTRS="cn sn title uid" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +CNT=`expr $CNT + 1` +FILTER="(mail=*example.com)" +ATTRS="cn sn title uid" +USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +UPASSWD="bjorn" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + -D "$USERDN" -w "$UPASSWD" \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +case $RC in +0) + echo "ldapsearch should have failed!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + ;; +4) + echo "ldapsearch failed ($RC)" + ;; +*) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +CNT=`expr $CNT + 1` +FILTER="(uid=b*)" +ATTRS="mail" +USERDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +UPASSWD="bjorn" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + -D "$USERDN" -w "$UPASSWD" \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +case $RC in +0) + echo "ldapsearch should have failed!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + ;; +4) + echo "ldapsearch failed ($RC)" + ;; +*) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +CNT=`expr $CNT + 1` +FILTER="(|(cn=All Staff)(sn=All Staff))" +ATTRS="sn cn title uid undefinedAttr" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#queries 11-13,16-17 are answerable, 14-15 are not +#actually, 14 would be answerable, but since 8 made mail=*example.com +#not answerable because of sizelimit, queries contained in it are no longer +#answerable as well +ANSWERABILITY=1110011 +grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{ + if (NR > FIRST) { + if ($3 == "NOT") + printf "Query %d not answerable\n",NR + else + printf "Query %d answerable\n",NR + } + }' +ANSWERED=`grep ANSWERABLE $LOG2 | awk "BEGIN {FIRST=$FIRST}"'{ + if (NR > FIRST) { + if ($3 == "NOT") + printf "0" + else + printf "1" + } + }'` + +if test "$ANSWERABILITY" = "$ANSWERED" ; then + echo "Successfully verified answerability" +else + echo "Error in verifying answerability" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Filtering ldapsearch results..." +$LDIFFILTER -s ldif=a < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif..." +$LDIFFILTER -s ldif=a < $PROXYCACHEOUT > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "Comparison failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "" +echo "Testing cache refresh" + +CNT=`expr $CNT + 1` +FILTER="(&(objectclass=person)(uid=dots))" +ATTRS="cn mail telephonenumber" +echo "Query $CNT: filter:$FILTER attrs:$ATTRS" +echo "# Query $CNT: filter:$FILTER attrs:$ATTRS" >> $SEARCHOUT +$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPMODIFY -x -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD <<EOF \ + > /dev/null 2>&1 +dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com +changetype: modify +replace: mail +mail: dots@admin.example2.com +- + +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +SLEEP=`expr $PCACHETTR + $PCACHE_CCPERIOD + 1` +echo "Waiting $SLEEP seconds for cache to refresh" + +sleep $SLEEP + +echo "Checking entry again" +$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + "$FILTER" $ATTRS >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +grep "^mail: dots@admin" $SEARCHOUT > /dev/null +RC=$? +if test $RC != 0 ; then + echo "Refresh failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait + exit 1 +fi + +echo "" +echo "Testing Bind caching" + +CNT=`expr $CNT + 1` +USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com" +UPASSWD="jaj" +echo "Query $CNT: $USERDN" +echo "# Query $CNT: $USERDN" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 \ + -D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +grep "CACHING BIND" $LOG2 > /dev/null +RC=$? +if test $RC != 0 ; then + echo "Refresh failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait + exit 1 +fi + +CNT=`expr $CNT + 1` +USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com" +UPASSWD="jaj" +echo "Query $CNT: (Bind should be cached)" +echo "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 \ + -D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +grep "CACHED BIND" $LOG2 > /dev/null +RC=$? +if test $RC != 0 ; then + echo "Refresh failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait + exit 1 +fi + +echo "" +echo "Testing pwdModify" +$LDAPPASSWD -h $LOCALHOST -p $PORT2 \ + -D "$MANAGERDN" -w "$PASSWD" -s newpw "$USERDN" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldappasswd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +RC=`grep "CACH.* BIND" $LOG2 | wc -l` +if test $RC != 3 ; then + echo "ldappasswd didn't update the cache" + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait + exit 1 +fi + +CNT=`expr $CNT + 1` +USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com" +UPASSWD=newpw +echo "Query $CNT: (Bind should be cached)" +echo "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "" -s base -h $LOCALHOST -p $PORT2 \ + -D "$USERDN" -w "$UPASSWD" >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +RC=`grep "CACH.* BIND" $LOG2 | wc -l` +if test $RC != 4 ; then + echo "Bind wasn't answered from cache" + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait + exit 1 +fi +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test021-certificate b/tests/scripts/test021-certificate new file mode 100755 index 0000000..dc29ac7 --- /dev/null +++ b/tests/scripts/test021-certificate @@ -0,0 +1,325 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1 +#echo $SLAPADD -f $CONF1 -l $LDIFORDERED +$SLAPADD -f $CONF1 -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +#valgrind -v --gdb-attach=yes --logfile=info --num-callers=16 --leak-check=yes --leak-resolution=high $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING </dev/tty > $LOG1 2>&1 & +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +echo "Testing certificate handling..." + +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 + +echo "Add certificates..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +version: 1 + +# LEADING COMMENT AND WHITE SPACE + +# should use certificationAuthority instead of extensibleObject +dn: dc=example,dc=com +changetype: modify +add: objectClass +objectClass: extensibleObject +- +add: cAcertificate;binary +cAcertificate;binary:: + MIIDVDCCAr2gAwIBAgIBADANBgkqhkiG9w0BAQQFADB3MQswCQYDVQQGEwJVUzET + MBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwg + THRkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhh + bXBsZS5jb20wHhcNMDMxMDE3MTYzMDQxWhcNMDQxMDE2MTYzMDQxWjB3MQswCQYD + VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAg + RXhhbXBsZSwgTHRkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJ + ARYOY2FAZXhhbXBsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANlj + UGxiisAzEiALukzt3Gj/24MRw1J0AZx6GncXLhpNJsAFyA0bYZdAzgvydKeq/uX0 + i5o/4Byc3G71XAAcbJZxDPtrLwpDAdMNOBvKV2r67yTgnpatFLfGRt/FWazj5EbF + YkorWWTe+4eEBd9VPzebHdIm+DPHipUfIAzRoNejAgMBAAGjge8wgewwHQYDVR0O + BBYEFEtvIRo2JNKQ+UOwU0ctfeHA5pgjMIGhBgNVHSMEgZkwgZaAFEtvIRo2JNKQ + +UOwU0ctfeHA5pgjoXukeTB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv + cm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwgTHRkLjETMBEGA1UEAxMK + RXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhhbXBsZS5jb22CAQAwDAYD + VR0TBAUwAwEB/zAZBgNVHREEEjAQgQ5jYUBleGFtcGxlLmNvbTANBgkqhkiG9w0B + AQQFAAOBgQCgXD/+28El3GXi/uxMNEKqtnIhQdTnNU4il0fZ6pcmHPFC+61Bddow + 90ZZZh5Gbg5ZBxFRhDXN8K/fix3ewRSjASt40dGlEODkE+FsLMt04sYl6kX7RGKg + 9a46DkeG+uzZnN/3252uCgh+rjNMFAglueUTERv3EtUB1iXEoU3GyA== + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +changetype: modify +add: objectClass +objectClass: strongAuthenticationUser +- +add: userCertificate;binary +userCertificate;binary:: + MIIDazCCAtSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB3MQswCQYDVQQGEwJVUzET + MBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwg + THRkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhh + bXBsZS5jb20wHhcNMDMxMDE3MTYzMzE5WhcNMDQxMDE2MTYzMzE5WjB+MQswCQYD + VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAg + RXhhbXBsZSwgTHRkLjEYMBYGA1UEAxMPVXJzdWxhIEhhbXBzdGVyMR8wHQYJKoZI + hvcNAQkBFhB1aGFtQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB + iQKBgQDuxgp5ELV9LmhxWMpV7qc4028QQT3+zzFDXhruuXE7ji2n3S3ea8bOwDtJ + h+qnsDe561DhHHHlgIjMKCiDEizYMpxvJPYEXmvp0huRkMgpKZgmel95BSkt6TYm + J0erS3aoimOHLEFimmnTLolNRMiWqNBvqwobx940PGwUWEePKQIDAQABo4H/MIH8 + MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENl + cnRpZmljYXRlMB0GA1UdDgQWBBSjI94TbBmuDEeUUOiC37EK0Uf0XjCBoQYDVR0j + BIGZMIGWgBRLbyEaNiTSkPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1UEBhMCVVMx + EzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUs + IEx0ZC4xEzARBgNVBAMTCkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4 + YW1wbGUuY29tggEAMA0GCSqGSIb3DQEBBAUAA4GBAIgUcARb3OlWYNbmr1nmqESu + xLn16uqI1Ot6WkcICvpkdQ+Bo+R9AP05xpoXocZtKdNvBu3FNxB/jFkiOcLU2lX7 + Px1Ijnsjh60qVRy9HOsHCungIKlGcnXLKHmKu0y//5jds/HnaJsGcHI5JRG7CBJb + W+wrwge3trJ1xHJI8prN + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +changetype: modify +add: objectClass +objectClass: strongAuthenticationUser +- +add: userCertificate;binary +userCertificate;binary:: + MIIDcDCCAtmgAwIBAgIBATANBgkqhkiG9w0BAQQFADB3MQswCQYDVQQGEwJVUzET + MBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwg + THRkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhh + bXBsZS5jb20wHhcNMDMxMDE3MTYzMTQwWhcNMDQxMDE2MTYzMTQwWjCBgjELMAkG + A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQ + IEV4YW1wbGUsIEx0ZC4xHTAbBgNVBAMUFEplbm5pZmVyICJKZW4iIFNtaXRoMR4w + HAYJKoZIhvcNAQkBFg9qZW5AZXhhbXBsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD + gY0AMIGJAoGBANUgO8cP/SjqgCVxxsRYv36AP0+QL81iEkGvR4gG6jbtDDBdVYDC + YbS2oKKNJ5e99NxGMIjOYfmKcAwmkV46IhdzUtkutgjHEG9vl5ajSwc1KSsbTMTy + NtuG3k5k02JYFbP+FrGyUE8iPqK4+i7mVjW4bh/MBCHW88FptnpDJiuHAgMBAAGj + gf8wgfwwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0 + ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFEdo4jpxCQXJ1sh/E1O3ZBkLTbHkMIGh + BgNVHSMEgZkwgZaAFEtvIRo2JNKQ+UOwU0ctfeHA5pgjoXukeTB3MQswCQYDVQQG + EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhh + bXBsZSwgTHRkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYO + Y2FAZXhhbXBsZS5jb22CAQAwDQYJKoZIhvcNAQEEBQADgYEAFpHsQUtSZQzmm9k2 + Vrfs0h7tdkWF3LcHzHk4a/t3k4EXcqlHBxh4f0tmb4XNP9QupRgm6ggr8t3Rq0Vt + T8k50x4C7oE8HwZuEEB4FM7S1Zig3dfeJ8MJgdaLqt5/U9Ip/hZdzG2dsUsIceH/ + 5MCKLu9bGJUjsKnGdm/KpaNwaNo= + +dn: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com +changetype: modify +add: userCertificate;binary +userCertificate;binary:: + MIIDjDCCAvWgAwIBAgIBAzANBgkqhkiG9w0BAQQFADB3MQswCQYDVQQGEwJVUzET + MBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwg + THRkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhh + bXBsZS5jb20wHhcNMDMxMDE3MTYzNTM1WhcNMDQxMDE2MTYzNTM1WjCBnjELMAkG + A1UEBhMCVVMxETAPBgNVBAgTCE1pY2hpZ2FuMR8wHQYDVQQKExZPcGVuTERBUCBF + eGFtcGxlLCBMdGQuMRswGQYDVQQLExJBbHVtbmkgQXNzb2ljYXRpb24xEjAQBgNV + BAMTCUplbiBTbWl0aDEqMCgGCSqGSIb3DQEJARYbamVuQG1haWwuYWx1bW5pLmV4 + YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDpnXWAL0VkROGO + 1Rg8J3u6F4F7yMqQCbUMsV9rxQisYj45+pmqiHV5urogvT4MGD6eLNFZKBn+0KRn + i++uu7gbartzpmBaHOlzRII9ZdVMFfrT2xYNgAlkne6pb6IZIN9UONuH/httENCD + J5WEpjZ48D1Lrml/HYO/W+SAMkpEqQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJ + YIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1Ud + DgQWBBTB2saht/od/nis76b9m+pjxfhSPjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTS + kPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlm + b3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0ZC4xEzARBgNVBAMT + CkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAMA0G + CSqGSIb3DQEBBAUAA4GBAIoGPc/AS0cNkMRDNoMIzcFdF9lONMduKBiSuFvv+x8n + Cek+LUdXxF59V2NPKh2V5gFh5xbAchyv6FVBnpVtPdB5akCr5tdFQhuBLUXXDk/t + THGpIWt7OAjEmpuMzsz3GUB8Zf9rioHOs1DMw+GpzWdnFITxXhAqEDc3quqPrpxZ +- +delete: userCertificate;binary +userCertificate;binary:: + MIIDcDCCAtmgAwIBAgIBATANBgkqhkiG9w0BAQQFADB3MQswCQYDVQQGEwJVUzET + MBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwg + THRkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhh + bXBsZS5jb20wHhcNMDMxMDE3MTYzMTQwWhcNMDQxMDE2MTYzMTQwWjCBgjELMAkG + A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHzAdBgNVBAoTFk9wZW5MREFQ + IEV4YW1wbGUsIEx0ZC4xHTAbBgNVBAMUFEplbm5pZmVyICJKZW4iIFNtaXRoMR4w + HAYJKoZIhvcNAQkBFg9qZW5AZXhhbXBsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD + gY0AMIGJAoGBANUgO8cP/SjqgCVxxsRYv36AP0+QL81iEkGvR4gG6jbtDDBdVYDC + YbS2oKKNJ5e99NxGMIjOYfmKcAwmkV46IhdzUtkutgjHEG9vl5ajSwc1KSsbTMTy + NtuG3k5k02JYFbP+FrGyUE8iPqK4+i7mVjW4bh/MBCHW88FptnpDJiuHAgMBAAGj + gf8wgfwwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0 + ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFEdo4jpxCQXJ1sh/E1O3ZBkLTbHkMIGh + BgNVHSMEgZkwgZaAFEtvIRo2JNKQ+UOwU0ctfeHA5pgjoXukeTB3MQswCQYDVQQG + EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhh + bXBsZSwgTHRkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYO + Y2FAZXhhbXBsZS5jb22CAQAwDQYJKoZIhvcNAQEEBQADgYEAFpHsQUtSZQzmm9k2 + Vrfs0h7tdkWF3LcHzHk4a/t3k4EXcqlHBxh4f0tmb4XNP9QupRgm6ggr8t3Rq0Vt + T8k50x4C7oE8HwZuEEB4FM7S1Zig3dfeJ8MJgdaLqt5/U9Ip/hZdzG2dsUsIceH/ + 5MCKLu9bGJUjsKnGdm/KpaNwaNo= + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +changetype: modify +replace: userCertificate;binary +userCertificate;binary:: + MIIDjDCCAvWgAwIBAgIBAzANBgkqhkiG9w0BAQQFADB3MQswCQYDVQQGEwJVUzET + MBEGA1UECBMKQ2FsaWZvcm5pYTEfMB0GA1UEChMWT3BlbkxEQVAgRXhhbXBsZSwg + THRkLjETMBEGA1UEAxMKRXhhbXBsZSBDQTEdMBsGCSqGSIb3DQEJARYOY2FAZXhh + bXBsZS5jb20wHhcNMDMxMDE3MTYzNTM1WhcNMDQxMDE2MTYzNTM1WjCBnjELMAkG + A1UEBhMCVVMxETAPBgNVBAgTCE1pY2hpZ2FuMR8wHQYDVQQKExZPcGVuTERBUCBF + eGFtcGxlLCBMdGQuMRswGQYDVQQLExJBbHVtbmkgQXNzb2ljYXRpb24xEjAQBgNV + BAMTCUplbiBTbWl0aDEqMCgGCSqGSIb3DQEJARYbamVuQG1haWwuYWx1bW5pLmV4 + YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDpnXWAL0VkROGO + 1Rg8J3u6F4F7yMqQCbUMsV9rxQisYj45+pmqiHV5urogvT4MGD6eLNFZKBn+0KRn + i++uu7gbartzpmBaHOlzRII9ZdVMFfrT2xYNgAlkne6pb6IZIN9UONuH/httENCD + J5WEpjZ48D1Lrml/HYO/W+SAMkpEqQIDAQABo4H/MIH8MAkGA1UdEwQCMAAwLAYJ + YIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1Ud + DgQWBBTB2saht/od/nis76b9m+pjxfhSPjCBoQYDVR0jBIGZMIGWgBRLbyEaNiTS + kPlDsFNHLX3hwOaYI6F7pHkwdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlm + b3JuaWExHzAdBgNVBAoTFk9wZW5MREFQIEV4YW1wbGUsIEx0ZC4xEzARBgNVBAMT + CkV4YW1wbGUgQ0ExHTAbBgkqhkiG9w0BCQEWDmNhQGV4YW1wbGUuY29tggEAMA0G + CSqGSIb3DQEBBAUAA4GBAIoGPc/AS0cNkMRDNoMIzcFdF9lONMduKBiSuFvv+x8n + Cek+LUdXxF59V2NPKh2V5gFh5xbAchyv6FVBnpVtPdB5akCr5tdFQhuBLUXXDk/t + THGpIWt7OAjEmpuMzsz3GUB8Zf9rioHOs1DMw+GpzWdnFITxXhAqEDc3quqPrpxZ +- +delete: userCertificate;binary + +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo 'Using ldapsearch to retrieve (userCertificate;binary=*) ...' +echo "# (userCertificate;binary=*)" > $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(userCertificate;binary=*)' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo 'Using ldapsearch to retrieve (cAcertificate=*) ...' +echo "# (cAcertificate=*)" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(cAcertificate=*)' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +SNAI='2$EMAIL=ca@example.com,CN=Example CA,O=Openldap Example\5C, Ltd.,ST=California,C=US' + +echo 'Using ldapsearch to retrieve (userCertificate=serialNumberAndIssuer) [old format] ...' +echo "# (userCertificate=$SNAI)" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "(userCertificate=$SNAI)" >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +SNAI='{ serialNumber 2, issuer "EMAIL=ca@example.com,CN=Example CA,O=Openldap Example\5C, Ltd.,ST=California,C=US" }' + +echo 'Using ldapsearch to retrieve (userCertificate=serialNumberAndIssuer) [new format] ...' +echo "# (userCertificate=$SNAI)" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "(userCertificate=$SNAI)" >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +SNAI='3$EMAIL=ca@example.com,CN=Example CA,O=Openldap Example\5C, Ltd.,ST=California,C=US' + +echo 'Using ldapsearch to retrieve (userCertificate:certificateExactMatch:=serialNumberAndIssuer) [old format] ...' +echo "# (userCertificate:certificateExactMatch:=$SNAI)" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "(userCertificate:certificateExactMatch:=$SNAI)" >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +SNAI='{ issuer "EMAIL=ca@example.com,CN=Example CA,O=Openldap Example\5C, Ltd.,ST=California,C=US", serialNumber 3 }' + +echo 'Using ldapsearch to retrieve (userCertificate:certificateExactMatch:=serialNumberAndIssuer) [new format]...' +echo "# (userCertificate:certificateExactMatch:=$SNAI)" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "(userCertificate:certificateExactMatch:=$SNAI)" >> $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=$CERTIFICATETLS + +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 - certificate operations did not complete correctly" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test022-ppolicy b/tests/scripts/test022-ppolicy new file mode 100755 index 0000000..ab6a60d --- /dev/null +++ b/tests/scripts/test022-ppolicy @@ -0,0 +1,566 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $PPOLICY = ppolicyno; then + echo "Password policy overlay not available, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 + +$SLAPPASSWD -g -n >$CONFIGPWF +echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $PPOLICYCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +USER="uid=nd, ou=People, dc=example, dc=com" +PASS=testpassword + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo /dev/null > $TESTOUT + +echo "Using ldapadd to populate the database..." +# may need "-e relax" for draft 09, but not yet. +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFPPOLICY >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing account lockout..." +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -D "$USER" -w wrongpw >$SEARCHOUT 2>&1 +sleep 2 +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -D "$USER" -w wrongpw >>$SEARCHOUT 2>&1 +sleep 2 +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -D "$USER" -w wrongpw >>$SEARCHOUT 2>&1 +sleep 2 +$LDAPSEARCH -e ppolicy -h $LOCALHOST -p $PORT1 -D "$USER" -w wrongpw >> $SEARCHOUT 2>&1 +$LDAPSEARCH -e ppolicy -h $LOCALHOST -p $PORT1 -D "$USER" -w $PASS >> $SEARCHOUT 2>&1 +COUNT=`grep "Account locked" $SEARCHOUT | wc -l` +if test $COUNT != 2 ; then + echo "Account lockout test failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Waiting 20 seconds for lockout to reset..." +sleep 20 + +$LDAPSEARCH -e ppolicy -h $LOCALHOST -p $PORT1 -D "$USER" -w $PASS \ + -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing password expiration" +echo "Waiting 20 seconds for password to expire..." +sleep 20 + +$LDAPSEARCH -e ppolicy -h $LOCALHOST -p $PORT1 -D "$USER" -w $PASS \ + -b "$BASEDN" -s base > $SEARCHOUT 2>&1 +sleep 2 +$LDAPSEARCH -e ppolicy -h $LOCALHOST -p $PORT1 -D "$USER" -w $PASS \ + -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 +sleep 2 +$LDAPSEARCH -e ppolicy -h $LOCALHOST -p $PORT1 -D "$USER" -w $PASS \ + -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 +sleep 2 +$LDAPSEARCH -e ppolicy -h $LOCALHOST -p $PORT1 -D "$USER" -w $PASS \ + -b "$BASEDN" -s base >> $SEARCHOUT 2>&1 +RC=$? +if test $RC = 0 ; then + echo "Password expiration failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +COUNT=`grep "grace logins" $SEARCHOUT | wc -l` +if test $COUNT != 3 ; then + echo "Password expiration test failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Resetting password to clear expired status" +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w secret -s $PASS \ + -D "$MANAGERDN" "$USER" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldappasswd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filling password history..." +$LDAPMODIFY -v -D "$USER" -h $LOCALHOST -p $PORT1 -w $PASS >> \ + $TESTOUT 2>&1 << EOMODS +dn: uid=nd, ou=People, dc=example, dc=com +changetype: modify +delete: userpassword +userpassword: $PASS +- +replace: userpassword +userpassword: 20urgle12-1 + +dn: uid=nd, ou=People, dc=example, dc=com +changetype: modify +delete: userpassword +userpassword: 20urgle12-1 +- +replace: userpassword +userpassword: 20urgle12-2 + +dn: uid=nd, ou=People, dc=example, dc=com +changetype: modify +delete: userpassword +userpassword: 20urgle12-2 +- +replace: userpassword +userpassword: 20urgle12-3 + +dn: uid=nd, ou=People, dc=example, dc=com +changetype: modify +delete: userpassword +userpassword: 20urgle12-3 +- +replace: userpassword +userpassword: 20urgle12-4 + +dn: uid=nd, ou=People, dc=example, dc=com +changetype: modify +delete: userpassword +userpassword: 20urgle12-4 +- +replace: userpassword +userpassword: 20urgle12-5 + +dn: uid=nd, ou=People, dc=example, dc=com +changetype: modify +delete: userpassword +userpassword: 20urgle12-5 +- +replace: userpassword +userpassword: 20urgle12-6 + +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +echo "Testing password history..." +$LDAPMODIFY -v -D "$USER" -h $LOCALHOST -p $PORT1 -w 20urgle12-6 >> \ + $TESTOUT 2>&1 << EOMODS +dn: uid=nd, ou=People, dc=example, dc=com +changetype: modify +delete: userPassword +userPassword: 20urgle12-6 +- +replace: userPassword +userPassword: 20urgle12-2 + +EOMODS +RC=$? +if test $RC = 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing forced reset..." + +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD >> \ + $TESTOUT 2>&1 << EOMODS +dn: uid=nd, ou=People, dc=example, dc=com +changetype: modify +replace: userPassword +userPassword: $PASS +- +replace: pwdReset +pwdReset: TRUE + +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPSEARCH -e ppolicy -h $LOCALHOST -p $PORT1 -D "$USER" -w $PASS \ + -b "$BASEDN" -s base > $SEARCHOUT 2>&1 +RC=$? +if test $RC = 0 ; then + echo "Forced reset failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +COUNT=`grep "Operations are restricted" $SEARCHOUT | wc -l` +if test $COUNT != 1 ; then + echo "Forced reset test failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Clearing forced reset..." + +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD >> \ + $TESTOUT 2>&1 << EOMODS +dn: uid=nd, ou=People, dc=example, dc=com +changetype: modify +delete: pwdReset + +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPSEARCH -e ppolicy -h $LOCALHOST -p $PORT1 -D "$USER" -w $PASS \ + -b "$BASEDN" -s base > $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Clearing forced reset failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing Safe modify..." + +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w $PASS -s failexpect \ + -D "$USER" >> $TESTOUT 2>&1 +RC=$? +if test $RC = 0 ; then + echo "Safe modify test 1 failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +sleep 2 + +OLDPASS=$PASS +PASS=successexpect + +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w $OLDPASS -s $PASS -a $OLDPASS \ + -D "$USER" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Safe modify test 2 failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing length requirement..." +# check control in response (ITS#5711) +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w $PASS -a $PASS -s 2shr \ + -D "$USER" -e ppolicy > ${TESTOUT}.2 2>&1 +RC=$? +cat ${TESTOUT}.2 >> $TESTOUT +if test $RC = 0 ; then + echo "Length requirement test failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi +COUNT=`grep "Password fails quality" ${TESTOUT}.2 | wc -l` +if test $COUNT != 1 ; then + echo "Length requirement test failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi +COUNT=`grep "Password is too short for policy" ${TESTOUT}.2 | wc -l` +if test $COUNT != 1 ; then + echo "Control not returned in response" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing hashed length requirement..." + +$LDAPMODIFY -h $LOCALHOST -p $PORT1 -D "$USER" -w $PASS > \ + ${TESTOUT}.2 2>&1 << EOMODS +dn: $USER +changetype: modify +delete: userPassword +userPassword: $PASS +- +add: userPassword +userPassword: {MD5}xxxxxx + +EOMODS +RC=$? +cat ${TESTOUT}.2 >> $TESTOUT +if test $RC = 0 ; then + echo "Hashed length requirement test failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi +COUNT=`grep "Password fails quality" ${TESTOUT}.2 | wc -l` +if test $COUNT != 1 ; then + echo "Hashed length requirement test failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing multiple password add/modify checks..." + +$LDAPMODIFY -h $LOCALHOST -p $PORT1 -D "$MANAGERDN" -w $PASSWD >> \ + $TESTOUT 2>&1 << EOMODS +dn: cn=Add Should Fail, ou=People, dc=example, dc=com +changetype: add +objectClass: inetOrgPerson +cn: Add Should Fail +sn: Fail +userPassword: firstpw +userPassword: secondpw +EOMODS +RC=$? +if test $RC = 0 ; then + echo "Multiple password add test failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +$LDAPMODIFY -h $LOCALHOST -p $PORT1 -D "$MANAGERDN" -w $PASSWD >> \ + $TESTOUT 2>&1 << EOMODS +dn: $USER +changetype: modify +add: userPassword +userPassword: firstpw +userPassword: secondpw +EOMODS +RC=$? +if test $RC = 0 ; then + echo "Multiple password modify add test failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +$LDAPMODIFY -h $LOCALHOST -p $PORT1 -D "$MANAGERDN" -w $PASSWD >> \ + $TESTOUT 2>&1 << EOMODS +dn: $USER +changetype: modify +replace: userPassword +userPassword: firstpw +userPassword: secondpw +EOMODS +RC=$? +if test $RC = 0 ; then + echo "Multiple password modify replace test failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +if test "$BACKLDAP" != "ldapno" && test "$SYNCPROV" != "syncprovno" ; then +echo "" +echo "Setting up policy state forwarding test..." + +mkdir $DBDIR2 +sed -e "s,$DBDIR1,$DBDIR2," < $CONF1 > $CONF2 +echo "Starting slapd consumer on TCP/IP port $PORT2..." +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$KILLPIDS $PID" + +echo "Configuring syncprov on provider..." +if [ "$SYNCPROV" = syncprovmod ]; then + $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 +dn: cn=module,cn=config +objectclass: olcModuleList +cn: module +olcModulePath: $TESTWD/../servers/slapd/overlays +olcModuleLoad: syncprov.la + +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed for moduleLoad ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi +fi + +$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 +dn: olcOverlay={1}syncprov,olcDatabase={1}$BACKEND,cn=config +objectClass: olcOverlayConfig +objectClass: olcSyncProvConfig +olcOverlay: {1}syncprov + +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed for provider database config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to check that slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -H $URI2 \ + '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 + +echo "Configuring syncrepl on consumer..." +if [ "$BACKLDAP" = ldapmod ]; then + $LDAPADD -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 +dn: cn=module,cn=config +objectclass: olcModuleList +cn: module +olcModulePath: $TESTWD/../servers/slapd/back-ldap +olcModuleLoad: back_ldap.la + +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed for moduleLoad ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi +fi +$LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 +dn: olcOverlay={0}chain,olcDatabase={-1}frontend,cn=config +changetype: add +objectClass: olcOverlayConfig +objectClass: olcChainConfig +olcOverlay: {0}chain + +dn: olcDatabase=ldap,olcOverlay={0}chain,olcDatabase={-1}frontend,cn=config +changetype: add +objectClass: olcLDAPConfig +objectClass: olcChainDatabase +olcDBURI: $URI1 +olcDbIDAssertBind: bindmethod=simple + binddn="cn=manager,dc=example,dc=com" + credentials=secret + mode=self + +dn: olcDatabase={1}$BACKEND,cn=config +changetype: modify +add: olcSyncrepl +olcSyncrepl: rid=1 + provider=$URI1 + binddn="cn=manager,dc=example,dc=com" + bindmethod=simple + credentials=secret + searchbase="dc=example,dc=com" + type=refreshAndPersist + retry="3 5 300 5" +- +add: olcUpdateref +olcUpdateref: $URI1 +- + +dn: olcOverlay={0}ppolicy,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcPPolicyForwardUpdates +olcPPolicyForwardUpdates: TRUE +- + +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting for consumer to sync..." +sleep $SLEEP1 + +echo "Testing policy state forwarding..." +$LDAPSEARCH -H $URI2 -D "$USER" -w wrongpw >$SEARCHOUT 2>&1 +RC=$? +if test $RC != 49 ; then + echo "ldapsearch should have failed with 49, got ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +$LDAPSEARCH -H $URI1 -D "$MANAGERDN" -w $PASSWD -b "$USER" \* \+ >> $SEARCHOUT 2>&1 +COUNT=`grep "pwdFailureTime" $SEARCHOUT | wc -l` +if test $COUNT != 1 ; then + echo "Policy state forwarding failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +# End of chaining test + +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test023-refint b/tests/scripts/test023-refint new file mode 100755 index 0000000..84e2703 --- /dev/null +++ b/tests/scripts/test023-refint @@ -0,0 +1,273 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 2004-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $REFINT = refintno; then + echo "Referential Integrity overlay not available, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $REFINTCONF > $CONF1 +$SLAPADD -f $CONF1 -l $LDIFREFINT +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd referential integrity operations..." +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 + +echo "Searching unmodified database..." + +$LDAPSEARCH -S "" -b "o=refint" -h $LOCALHOST -p $PORT1 > $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$EGREP_CMD "(manager|secretary):" $SEARCHOUT | sed "s/george/foster/g" | \ + sort > $TESTOUT 2>&1 + +echo "Testing modrdn..." +$LDAPMODRDN -D "$REFINTDN" -r -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + /dev/null 2>&1 'uid=george,ou=users,o=refint' 'uid=foster' +#$LDAPMODRDN -D "$REFINTDN" -r -h $LOCALHOST -p $PORT1 -w $PASSWD \ +# 'uid=george,ou=users,o=refint' 'uid=foster' + +RC=$? +if test $RC != 0 ; then + echo "ldapmodrdn failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +sleep 1; + +echo "Using ldapsearch to check dependents new rdn..." + +$LDAPSEARCH -S "" -b "o=refint" -h $LOCALHOST -p $PORT1 > $SEARCHOUT 2>&1 + +RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$EGREP_CMD "(manager|secretary):" $SEARCHOUT | sort > $SEARCHFLT 2>&1 + +echo "Comparing ldapsearch results against original..." +$CMP $TESTOUT $SEARCHFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - modify operations did not complete correctly" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing delete..." +$LDAPMODIFY -v -D "$REFINTDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EDEL +version: 1 +dn: uid=foster,ou=users,o=refint +changetype: delete +EDEL + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +sleep 1; + +echo "Using ldapsearch to verify dependents have been deleted..." +$LDAPSEARCH -S "" -b "o=refint" -h $LOCALHOST -p $PORT1 > $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$EGREP_CMD "(manager|secretary):" $SEARCHOUT > $SEARCHFLT 2>&1 + +RC=`grep -c foster $SEARCHFLT` +if test $RC != 0 ; then + echo "dependent modify failed - dependents were not deleted" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Additional test records..." + +$LDAPADD -D "$REFINTDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << ETEST +dn: uid=special,ou=users,o=refint +objectClass: inetOrgPerson +objectClass: extensibleObject +uid: special +sn: special +cn: special +businessCategory: nothing +carLicense: FOO +departmentNumber: 933 +displayName: special +employeeNumber: 41491 +employeeType: vendor +givenName: special +member: uid=alice,ou=users,o=refint +ETEST + +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing delete when referential attribute is a MUST..." +$LDAPMODIFY -v -D "$REFINTDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EDEL +version: 1 +dn: uid=alice,ou=users,o=refint +changetype: delete +EDEL + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +if test $BACKEND != "bdb" ; then + $LDAPMODIFY -v -D "$REFINTDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EDEL +version: 1 +dn: cn=group,o=refint +changetype: add +objectClass: groupOfNames +cn: group +member: uid=bill,ou=users,o=refint +member: uid=bob,ou=users,o=refint +member: uid=dave,ou=users,o=refint +member: uid=jorge,ou=users,o=refint +member: uid=theman,ou=users,o=refint +member: uid=richard,ou=users,o=refint +EDEL + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + sleep 1; + + $LDAPSEARCH -S "" -b "o=refint" -h $LOCALHOST -p $PORT1 \ + manager member secretary > $SEARCHOUT 2>&1 + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + $EGREP_CMD "(manager|member|secretary):" $SEARCHOUT \ + | sed "s/ou=users/ou=people/g" | \ + sort > $TESTOUT 2>&1 + + echo "testing subtree rename" + $LDAPMODRDN -D "$REFINTDN" -r -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + /dev/null 2>&1 'ou=users,o=refint' 'ou=people' + RC=$? + if test $RC != 0 ; then + echo "ldapmodrdn failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + sleep 1; + + echo "Using ldapsearch to check dependents new rdn..." + + $LDAPSEARCH -S "" -b "o=refint" -h $LOCALHOST -p $PORT1 \ + manager member secretary > $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + $EGREP_CMD "(manager|member|secretary):" $SEARCHOUT \ + | sort > $SEARCHFLT 2>&1 + + echo "Comparing ldapsearch results against original..." + $CMP $TESTOUT $SEARCHFLT > $CMPOUT + + if test $? != 0 ; then + echo "comparison failed - subtree rename operations did not complete correctly" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test024-unique b/tests/scripts/test024-unique new file mode 100755 index 0000000..03edc36 --- /dev/null +++ b/tests/scripts/test024-unique @@ -0,0 +1,797 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 2004-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $UNIQUE = uniqueno; then + echo "Attribute Uniqueness overlay not available, test skipped" + exit 0 +fi + +RCODEconstraint=19 +test $BACKEND = null && RCODEconstraint=0 + +mkdir -p $TESTDIR $DBDIR1 + +$SLAPPASSWD -g -n >$CONFIGPWF +echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $UNIQUECONF > $CONF1 +$SLAPADD -f $CONF1 -l $LDIFUNIQUE +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +mkdir $TESTDIR/confdir +$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 + +echo "Testing slapd attribute uniqueness operations..." +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 + +echo "Adding a unique record..." +$LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + > /dev/null << EOTUNIQ1 +dn: uid=dave,ou=users,o=unique +objectClass: inetOrgPerson +objectClass: simpleSecurityObject +uid: dave +sn: nothere +cn: dave +businessCategory: otest +carLicense: TEST +departmentNumber: 42 +# NOTE: use special chars in attr value to be used +# in internal searches ITS#4212 +displayName: Dave (ITS#4212) +employeeNumber: 69 +employeeType: contractor +givenName: Dave +userpassword: $PASSWD +EOTUNIQ1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Adding a non-unique record..." +$LDAPADD -D "uid=dave,ou=users,o=unique" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOTUNIQ2 +dn: uid=bill,ou=users,o=unique +objectClass: inetOrgPerson +uid: bill +sn: johnson +cn: bill +businessCategory: rtest +carLicense: ABC123 +departmentNumber: 42 +displayName: Bill +employeeNumber: 5150 +employeeType: contractor +givenName: Bill +EOTUNIQ2 +RC=$? +if test $RC != $RCODEconstraint ; then + echo "unique check failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +# ITS#6641/8057 +echo "Trying to bypass uniqueness as a normal user..." +$LDAPADD -M -D "uid=dave,ou=users,o=unique" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOTUNIQ2 +dn: uid=bill,ou=users,o=unique +objectClass: inetOrgPerson +uid: bill +sn: johnson +cn: bill +businessCategory: rtest +carLicense: ABC123 +departmentNumber: 42 +displayName: Bill +employeeNumber: 5150 +employeeType: contractor +givenName: Bill +EOTUNIQ2 +RC=$? +if test $RC != $RCODEconstraint ; then + echo "unique check failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +# ITS#6641/8057 +echo "Bypassing uniqueness as an admin user..." +$LDAPADD -M -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOTUNIQ2 +dn: uid=bill,ou=users,o=unique +objectClass: inetOrgPerson +uid: bill +sn: johnson +cn: bill +businessCategory: rtest +carLicense: ABC123 +departmentNumber: 42 +displayName: Bill +employeeNumber: 5150 +employeeType: contractor +givenName: Bill +EOTUNIQ2 +RC=$? +if test $RC != 0 ; then + echo "spurious unique error ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Cleaning up" +$LDAPDELETE -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + "uid=bill,ou=users,o=unique" > $TESTOUT 2>&1 +RC=$? +if test $RC != 0; then + echo "ldapdelete failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo Dynamically retrieving initial configuration... +$LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/initial-config.ldif +cat <<EOF >$TESTDIR/initial-reference.ldif +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +objectClass: olcOverlayConfig +objectClass: olcUniqueConfig +olcOverlay: {0}unique +olcUniqueBase: o=unique +olcUniqueAttribute: employeeNumber +olcUniqueAttribute: displayName + +EOF +diff $TESTDIR/initial-config.ldif $TESTDIR/initial-reference.ldif > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Initial configuration is not reported correctly." + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo Dynamically trying to add a URI with legacy attrs present... +$LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \ + > $TESTOUT 2>&1 <<EOF +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +changetype: modify +add: olcUniqueURI +olcUniqueURI: ldap:///?employeeNumber,displayName?sub +EOF +RC=$? +if test $RC != 80 ; then + echo "legacy and unique_uri allowed together" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo Dynamically trying to add legacy ignored attrs with legacy attrs present... +$LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \ + > $TESTOUT 2>&1 <<EOF +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +changetype: modify +add: olcUniqueIgnore +olcUniqueIgnore: objectClass +EOF +RC=$? +if test $RC != 80 ; then + echo "legacy attrs and legacy ignore attrs allowed together" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo Verifying initial configuration intact... +$LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/initial-config-recheck.ldif +diff $TESTDIR/initial-config-recheck.ldif $TESTDIR/initial-reference.ldif > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Initial configuration damaged by unsuccessful modifies." + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo Dynamically removing legacy base... +$LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \ + > $TESTOUT 2>&1 <<EOF +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +changetype: modify +delete: olcUniqueBase +EOF +RC=$? +if test $RC != 0 ; then + echo "base removal failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo Verifying base removal... +$LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/baseremoval-config.ldif +cat >$TESTDIR/baseremoval-reference.ldif <<EOF +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +objectClass: olcOverlayConfig +objectClass: olcUniqueConfig +olcOverlay: {0}unique +olcUniqueAttribute: employeeNumber +olcUniqueAttribute: displayName + +EOF +diff $TESTDIR/baseremoval-config.ldif $TESTDIR/baseremoval-reference.ldif > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Configuration damaged by base removal" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo "Adding a non-unique record..." +$LDAPADD -D "uid=dave,ou=users,o=unique" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOTUNIQ2 +dn: uid=bill,ou=users,o=unique +objectClass: inetOrgPerson +uid: bill +sn: johnson +cn: bill +businessCategory: rtest +carLicense: ABC123 +departmentNumber: 42 +displayName: Bill +employeeNumber: 5150 +employeeType: contractor +givenName: Bill +EOTUNIQ2 +RC=$? +if test $RC != $RCODEconstraint ; then + echo "unique check failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo Trying a legacy base outside of the backend... +$LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \ + > $TESTOUT 2>&1 <<EOF +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +changetype: modify +add: olcUniqueBase +olcUniqueBase: cn=config +EOF +RC=$? +if test $RC != 80 ; then + echo "out of backend scope base allowed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo "Adding and removing attrs..." +$LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \ + > $TESTOUT 2>&1 <<EOF +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +changetype: modify +add: olcUniqueAttribute +olcUniqueAttribute: description +olcUniqueAttribute: telephoneNumber +- +delete: olcUniqueAttribute +olcUniqueAttribute: displayName +EOF +RC=$? +if test $RC != 0 ; then + echo "Unable to remove an attribute" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo "Verifying we removed the right attr..." +$LDAPADD -D "uid=dave,ou=users,o=unique" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOTUNIQ2 +dn: uid=bill,ou=users,o=unique +objectClass: inetOrgPerson +uid: bill +sn: johnson +cn: bill +businessCategory: rtest +carLicense: ABC123 +departmentNumber: 42 +displayName: Bill +employeeNumber: 5150 +employeeType: contractor +givenName: Bill +EOTUNIQ2 +RC=$? +if test $RC != $RCODEconstraint ; then + echo "olcUniqueAttribtue single deletion hit the wrong value" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo Removing legacy config and adding URIs... +$LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \ + > $TESTOUT 2>&1 <<EOF +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +changetype: modify +delete: olcUniqueAttribute +- +add: olcUniqueURI +olcUniqueURI: ldap:///?employeeNumber,displayName?sub +olcUniqueURI: ldap:///?description?one +EOF +RC=$? +if test $RC != 0 ; then + echo "Reconfiguration to URIs failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo Dynamically retrieving second configuration... +$LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/second-config.ldif +cat >$TESTDIR/second-reference.ldif <<EOF +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +objectClass: olcOverlayConfig +objectClass: olcUniqueConfig +olcOverlay: {0}unique +olcUniqueURI: ldap:///?employeeNumber,displayName?sub +olcUniqueURI: ldap:///?description?one + +EOF +diff $TESTDIR/second-config.ldif $TESTDIR/second-reference.ldif > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Second configuration is not reported correctly." + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo "Adding a non-unique record..." +$LDAPADD -D "uid=dave,ou=users,o=unique" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOTUNIQ2 +dn: uid=bill,ou=users,o=unique +objectClass: inetOrgPerson +uid: bill +sn: johnson +cn: bill +businessCategory: rtest +carLicense: ABC123 +departmentNumber: 42 +displayName: Bill +employeeNumber: 5150 +employeeType: contractor +givenName: Bill +EOTUNIQ2 +RC=$? +if test $RC != $RCODEconstraint ; then + echo "unique check failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo Dynamically trying to add legacy base +$LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \ + > $TESTOUT 2>&1 <<EOF +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +changetype: modify +add: olcUniqueBase +olcUniqueBase: o=unique +EOF +RC=$? +if test $RC != 80 ; then + echo "legacy base allowed with URIs" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo Dynamically trying to add legacy attrs +$LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \ + > $TESTOUT 2>&1 <<EOF +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +changetype: modify +add: olcUniqueAttribute +olcUniqueAttribute: description +EOF +RC=$? +if test $RC != 80 ; then + echo "legacy attributes allowed with URIs" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo Dynamically trying to add legacy strictness +$LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \ + > $TESTOUT 2>&1 <<EOF +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +changetype: modify +add: olcUniqueStrict +olcUniqueStrict: TRUE +EOF +RC=$? +if test $RC != 80 ; then + echo "legacy strictness allowed with URIs" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +#echo ---------------------- +echo Dynamically trying a bad filter... +$LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \ + > $TESTOUT 2>&1 <<EOF +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcUniqueURI +olcUniqueURI: ldap:///?sn?sub?((cn=e*)) +EOF +RC=$? +if test $RC != 80 ; then + echo "bad filter allowed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo Verifying second configuration intact... +$LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/second-config-recheck.ldif +diff $TESTDIR/second-config-recheck.ldif $TESTDIR/second-reference.ldif > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Second configuration damaged by rejected modifies." + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +#echo ---------------------- +echo Dynamically reconfiguring to use different URIs... +$LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \ + > $TESTOUT 2>&1 <<EOF +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +changetype: modify +add: olcUniqueURI +olcUniqueURI: ldap:///?sn?sub?(cn=e*) +olcUniqueURI: ldap:///?uid?sub?(cn=edgar) +- +delete: olcUniqueURI +olcUniqueURI: ldap:///?description?one +EOF +RC=$? +if test $RC != 0 ; then + echo "unable to reconfigure" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo Dynamically retrieving third configuration... +$LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/third-config.ldif +cat >$TESTDIR/third-reference.ldif <<EOF +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +objectClass: olcOverlayConfig +objectClass: olcUniqueConfig +olcOverlay: {0}unique +olcUniqueURI: ldap:///?employeeNumber,displayName?sub +olcUniqueURI: ldap:///?sn?sub?(cn=e*) +olcUniqueURI: ldap:///?uid?sub?(cn=edgar) + +EOF +diff $TESTDIR/third-config.ldif $TESTDIR/third-reference.ldif > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Third configuration is not reported correctly." + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo "Adding a record unique in both domains if filtered..." + +$LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF +dn: uid=edgar,ou=users,o=unique +objectClass: inetOrgPerson +uid: edgar +sn: johnson +cn: edgar +EOF + +RC=$? +if test $RC != 0 ; then + echo "unique check failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo "Adding a record unique in all domains because of filter conditions " +$LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF +dn: uid=empty,ou=users,o=unique +objectClass: inetOrgPerson +uid: edgar +cn: empty +sn: empty +EOF + +RC=$? +if test $RC != 0 ; then + echo "spurious unique error ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo "Sending an empty modification" + +$LDAPMODIFY -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF +dn: uid=empty,ou=users,o=unique +changetype: modify +EOF + +RC=$? +if test $RC != 0 ; then + echo "spurious unique error ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo "Making a record non-unique" +$LDAPMODIFY -D "uid=dave,ou=users,o=unique" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF +dn: uid=empty,ou=users,o=unique +changetype: modify +replace: sn +sn: johnson +EOF + +RC=$? +if test $RC != $RCODEconstraint ; then + echo "unique check failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +# ITS#6641/8057 +echo "Trying to bypass uniqueness as a normal user..." +$LDAPMODIFY -M -D "uid=dave,ou=users,o=unique" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF +dn: uid=empty,ou=users,o=unique +changetype: modify +replace: sn +sn: johnson +EOF + +RC=$? +if test $RC != $RCODEconstraint ; then + echo "unique check failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +# ITS#6641/8057 +echo "Bypassing uniqueness as an admin user..." +$LDAPMODIFY -M -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF +dn: uid=empty,ou=users,o=unique +changetype: modify +replace: sn +sn: johnson +EOF + +RC=$? +if test $RC != 0 ; then + echo "spurious unique error ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Cleaning up" +$LDAPMODIFY -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF +dn: uid=empty,ou=users,o=unique +changetype: modify +replace: sn +sn: empty +EOF + +RC=$? +if test $RC != 0; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Adding another unique record..." +$LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF +dn: uid=not edgar,uid=edgar,ou=users,o=unique +objectClass: inetOrgPerson +uid: not edgar +sn: Alan +cn: not edgar +EOF + +RC=$? +if test $RC != 0 ; then + echo "unique check failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo "Making the record non-unique with modrdn..." +$LDAPMODRDN -D "uid=dave,ou=users,o=unique" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + "uid=not edgar,uid=edgar,ou=users,o=unique" "uid=edgar" > $TESTOUT 2>&1 + +RC=$? +if test $RC != $RCODEconstraint ; then + echo "unique check failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +# ITS#6641/8057 +echo "Trying to bypass uniqueness as a normal user..." +$LDAPMODRDN -M -D "uid=dave,ou=users,o=unique" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + "uid=not edgar,uid=edgar,ou=users,o=unique" "uid=edgar" > $TESTOUT 2>&1 + +RC=$? +if test $RC != $RCODEconstraint ; then + echo "unique check failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +# ITS#6641/8057 +echo "Bypassing uniqueness as an admin user..." +$LDAPMODRDN -M -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + "uid=not edgar,uid=edgar,ou=users,o=unique" "uid=edgar" > $TESTOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "spurious unique error ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Cleaning up" +$LDAPDELETE -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + "uid=edgar,uid=edgar,ou=users,o=unique" > $TESTOUT 2>&1 +RC=$? +if test $RC != 0; then + echo "ldapdelete failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Adding a record unique in one domain, non-unique in the filtered domain..." + +$LDAPADD -D "uid=dave,ou=users,o=unique" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF +dn: uid=elvis,ou=users,o=unique +objectClass: inetOrgPerson +uid: elvis +sn: johnson +cn: elvis +EOF + +RC=$? +if test $RC != $RCODEconstraint ; then + echo "unique check failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +#echo ---------------------- +echo Dynamically reconfiguring to use attribute-ignore URIs... +$LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \ + > $TESTOUT 2>&1 <<EOF +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcUniqueURI +olcUniqueURI: ignore ldap:///?objectClass,uid,cn,sn?sub +EOF +RC=$? +if test $RC != 0 ; then + echo "unable to reconfigure" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo Dynamically retrieving fourth configuration... +$LDAPSEARCH -S "" -b olcOverlay='{0}'unique,olcDatabase='{1}'$BACKEND,cn=config -D cn=config -y $CONFIGPWF -h $LOCALHOST -p $PORT1 -LLL | tr -d \\r >$TESTDIR/fourth-config.ldif +cat >$TESTDIR/fourth-reference.ldif <<EOF +dn: olcOverlay={0}unique,olcDatabase={1}$BACKEND,cn=config +objectClass: olcOverlayConfig +objectClass: olcUniqueConfig +olcOverlay: {0}unique +olcUniqueURI: ignore ldap:///?objectClass,uid,cn,sn?sub + +EOF +diff $TESTDIR/fourth-config.ldif $TESTDIR/fourth-reference.ldif > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "Fourth configuration is not reported correctly." + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo "Adding a record unique in the ignore-domain..." + +$LDAPADD -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF +dn: uid=elvis,ou=users,o=unique +objectClass: inetOrgPerson +uid: elvis +sn: johnson +cn: elvis +description: left the building +EOF + +RC=$? +if test $RC != 0 ; then + echo "unique check failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo "Adding a record non-unique in the ignore-domain..." + +$LDAPADD -D "uid=dave,ou=users,o=unique" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF +dn: uid=harry,ou=users,o=unique +objectClass: inetOrgPerson +uid: harry +sn: johnson +cn: harry +description: left the building +EOF + +RC=$? +if test $RC != $RCODEconstraint ; then + echo "unique check failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test025-limits b/tests/scripts/test025-limits new file mode 100755 index 0000000..5a232f6 --- /dev/null +++ b/tests/scripts/test025-limits @@ -0,0 +1,1420 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +## FIXME: need to exclude legal but wrong results... + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $BACKEND = null; then + echo "Limits irrelevant to $BACKEND backend, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $LIMITSCONF > $ADDCONF +$SLAPADD -f $ADDCONF -l $LDIFLIMITS +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Running slapindex to index slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $LIMITSCONF > $CONF1 +$SLAPINDEX -f $CONF1 +RC=$? +if test $RC != 0 ; then + echo "warning: slapindex failed ($RC)" + echo " assuming no indexing support" +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd searching..." +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 > $SEARCHOUT + +echo "" +echo "Testing regular search limits" +echo "" + +echo "Testing no limits requested for unlimited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Unlimited User,ou=People,dc=example,dc=com' \ + '(objectClass=*)' >$SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...success (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing no limits requested for rootdn=$MANAGERDN..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D "$MANAGERDN" \ + '(objectClass=*)' >$SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...success (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +SIZELIMIT=4 +echo "Testing limit requested for rootdn=$MANAGERDN..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \ + -D "$MANAGERDN" \ + '(objectClass=*)' >$SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + if test "$COUNT" -gt "$SIZELIMIT" ; then + echo "...error: got $COUNT entries instead of the requested $SIZELIMIT" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + echo "...didn't bump into the requested size limit ($SIZELIMIT; got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test x"$COUNT" != x ; then + if test "$COUNT" = "$SIZELIMIT" ; then + echo "...bumped into requested size limit ($SIZELIMIT)" + else + echo "...error: got $COUNT entries with a requested sizelimit of $SIZELIMIT" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +SIZELIMIT=2 +echo "Testing size limit request ($SIZELIMIT) for unlimited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \ + -D 'cn=Unlimited User,ou=People,dc=example,dc=com' \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + if test "$COUNT" -gt "$SIZELIMIT" ; then + echo "...error: got $COUNT entries instead of the requested $SIZELIMIT" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + echo "...didn't bump into the requested size limit ($SIZELIMIT; got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test x"$COUNT" != x ; then + if test "$COUNT" = "$SIZELIMIT" ; then + echo "...bumped into requested size limit ($SIZELIMIT)" + else + echo "...error: got $COUNT entries with a requested sizelimit of $SIZELIMIT" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +TIMELIMIT=10 +echo "Testing time limit request ($TIMELIMIT s) for unlimited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -l $TIMELIMIT \ + -D 'cn=Unlimited User,ou=People,dc=example,dc=com' \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...didn't bump into the requested time limit ($TIMELIMIT s; got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 3) + if test x"$COUNT" != x ; then + COUNT=0 + fi + echo "...bumped into requested time limit ($TIMELIMIT s; got $COUNT entries)" + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing no limits requested for soft limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Soft Limited User,ou=People,dc=example,dc=com' \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...didn't bump into server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test x"$COUNT" != x ; then + echo "...bumped into server-side size limit (got $COUNT entries)" + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +SIZELIMIT=2 +echo "Testing lower than soft limit request ($SIZELIMIT) for soft limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \ + -D 'cn=Soft Limited User,ou=People,dc=example,dc=com' \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + if test "$COUNT" -gt "$SIZELIMIT" ; then + echo "...error: got $COUNT entries instead of the requested $SIZELIMIT" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test "x$COUNT" != "x" ; then + if test "x$SIZELIMIT" = "x$COUNT" ; then + echo "...bumped into requested ($SIZELIMIT) size limit" + else + echo "...bumped into server-side size limit ($COUNT)" + fi + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +SIZELIMIT=100 +echo "Testing higher than soft limit request ($SIZELIMIT) for soft limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \ + -D 'cn=Soft Limited User,ou=People,dc=example,dc=com' \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + if test "$COUNT" -gt "$SIZELIMIT" ; then + echo "...error: got $COUNT entries instead of the requested $SIZELIMIT" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test "x$COUNT" != "x" ; then + if test "x$SIZELIMIT" = "x$COUNT" ; then + echo "...bumped into requested ($SIZELIMIT) size limit" + else + echo "...bumped into server-side size limit ($COUNT)" + fi + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +SIZELIMIT=2 +echo "Testing lower than hard limit request ($SIZELIMIT) for hard limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \ + -D 'cn=Hard Limited User,ou=People,dc=example,dc=com' \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + if test "$COUNT" -gt "$SIZELIMIT" ; then + echo "...error: got $COUNT entries instead of the requested $SIZELIMIT" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + echo "...bumped into requested ($SIZELIMIT) size limit" + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +SIZELIMIT=100 +echo "Testing higher than hard limit request ($SIZELIMIT) for hard limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \ + -D 'cn=Hard Limited User,ou=People,dc=example,dc=com' \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + if test "$COUNT" -gt "$SIZELIMIT" ; then + echo "...error: got $COUNT entries instead of the requested $SIZELIMIT" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test x"$COUNT" != x ; then + if test "$COUNT" = "$SIZELIMIT" ; then + echo "...error: bumped into requested ($SIZELIMIT) size limit" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + else + echo "...got size limit $COUNT instead of requested $SIZELIMIT entries" + fi + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; +# 11) +# echo "...bumped into server-side hard size administrative limit" +# ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +SIZELIMIT=max +echo "Testing max limit request ($SIZELIMIT) for hard limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \ + -D 'cn=Hard Limited User,ou=People,dc=example,dc=com' \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test x"$COUNT" != x ; then + echo "...bumped into requested ($SIZELIMIT=$COUNT) size limit" + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; +# 11) +# echo "...bumped into server-side hard size administrative limit" +# ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing lower than unchecked limit request for unchecked limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Unchecked Limited User,ou=People,dc=example,dc=com' \ + '(uid=uncheckedlimited)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...success; didn't bump into server-side unchecked limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 11) + echo "...error: bumped into unchecked administrative limit" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +if test $INDEXDB = indexdb ; then + +echo "Testing higher than unchecked limit requested for unchecked limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Unchecked Limited User,ou=People,dc=example,dc=com' \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...error: didn't bump into server-side unchecked limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + fi + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + ;; + 11) + echo "...bumped into unchecked administrative limit" + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing no limits requested for unchecked limited group..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Unchecked Limited User 2,ou=People,dc=example,dc=com' \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...error: didn't bump into server-side unchecked limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + fi + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + ;; + 11) + echo "...bumped into unchecked administrative limit" + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac +else + echo "Skipping test for unchecked limit with $BACKEND backend." +fi + +echo "Testing no limits requested for limited regex..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Foo User,ou=People,dc=example,dc=com' \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...didn't bump into server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test "x$COUNT" != "x" ; then + echo "...bumped into server-side size limit ($COUNT)" + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing no limits requested for limited onelevel..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Bar User,ou=People,dc=example,dc=com' \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...didn't bump into server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test "x$COUNT" != "x" ; then + echo "...bumped into server-side size limit ($COUNT)" + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing no limit requested for limited children..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Unchecked Limited Users,ou=Groups,dc=example,dc=com' \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...didn't bump into server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test "x$COUNT" != "x" ; then + echo "...bumped into server-side size limit ($COUNT)" + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing no limit requested for limited subtree..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Unchecked Limited User 3,ou=Admin,dc=example,dc=com' \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...didn't bump into server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test "x$COUNT" != "x" ; then + echo "...bumped into server-side size limit ($COUNT)" + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing no limit requested for limited users..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Special User,dc=example,dc=com' \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...didn't bump into server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test "x$COUNT" != "x" ; then + echo "...bumped into server-side size limit ($COUNT)" + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing no limit requested for limited anonymous..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...didn't bump into server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test "x$COUNT" != "x" ; then + echo "...bumped into server-side size limit ($COUNT)" + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +if test $MAINDB != maindb ; then + # only bdb|hdb|mdb currently supports pagedResults control + test $KILLSERVERS != no && kill -HUP $KILLPIDS + + echo ">>>>> Test succeeded" + exit 0 +fi + +if test x"$SLAPD_PAGE_SIZE" != x ; then + PAGESIZE="$SLAPD_PAGE_SIZE" + if test "$PAGESIZE" -le 0 ; then + test $KILLSERVERS != no && kill -HUP $KILLPIDS + + echo "" + echo "Testing with pagedResults control disabled" + echo "" + echo ">>>>> Test succeeded" + exit 0 + fi +else + PAGESIZE=5 +fi + +echo "" +echo "Testing regular search limits with pagedResults control (page size $PAGESIZE)" +echo "" + +echo "Testing no limits requested for unlimited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Unlimited User,ou=People,dc=example,dc=com' \ + -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' >$SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...success (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +SIZELIMIT=2 +echo "Testing size limit request ($SIZELIMIT) for unlimited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \ + -D 'cn=Unlimited User,ou=People,dc=example,dc=com' \ + -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + if test "$COUNT" -gt "$SIZELIMIT" ; then + echo "...error: got $COUNT entries instead of the requested $SIZELIMIT" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + echo "...didn't bump into the requested size limit ($SIZELIMIT; got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test x"$COUNT" != x ; then + if test $COUNT = $SIZELIMIT ; then + echo "...bumped into requested size limit ($SIZELIMIT)" + else + echo "...error: got $COUNT entries while requesting $SIZELIMIT..." + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +TIMELIMIT=10 +echo "Testing time limit request ($TIMELIMIT s) for unlimited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -l $TIMELIMIT \ + -D 'cn=Unlimited User,ou=People,dc=example,dc=com' \ + -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...didn't bump into the requested time limit ($TIMELIMIT s; got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 3) + if test x"$COUNT" = x ; then + COUNT=0 + fi + echo "...bumped into requested time limit ($TIMELIMIT s; got $COUNT entries)" + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing no limits requested for soft limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Soft Limited User,ou=People,dc=example,dc=com' \ + -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...didn't bump into server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test x"$COUNT" != x ; then + echo "...bumped into server-side size limit (got $COUNT entries)" + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +SIZELIMIT=2 +echo "Testing lower than soft limit request ($SIZELIMIT) for soft limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \ + -D 'cn=Soft Limited User,ou=People,dc=example,dc=com' \ + -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + if test "$COUNT" -gt "$SIZELIMIT" ; then + echo "...error: got $COUNT entries instead of the requested $SIZELIMIT" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test "x$COUNT" != "x" ; then + if test "x$SIZELIMIT" = "x$COUNT" ; then + echo "...bumped into requested ($SIZELIMIT) size limit" + else + echo "...bumped into server-side size limit ($COUNT)" + fi + else + echo "...bumped into either requested ($SIZELIMIT) or server-side size limit" + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +SIZELIMIT=100 +echo "Testing higher than soft limit request ($SIZELIMIT) for soft limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \ + -D 'cn=Soft Limited User,ou=People,dc=example,dc=com' \ + -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + if test "$COUNT" -gt "$SIZELIMIT" ; then + echo "...error: got $COUNT entries instead of the requested $SIZELIMIT" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test "x$COUNT" != "x" ; then + if test "x$SIZELIMIT" = "x$COUNT" ; then + echo "...bumped into requested ($SIZELIMIT) size limit" + else + echo "...bumped into server-side size limit ($COUNT)" + fi + else + echo "...bumped into either requested ($SIZELIMIT) or server-side size limit" + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +SIZELIMIT=2 +echo "Testing lower than hard limit request ($SIZELIMIT) for hard limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \ + -D 'cn=Hard Limited User,ou=People,dc=example,dc=com' \ + -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + if test "$COUNT" -gt "$SIZELIMIT" ; then + echo "...error: got $COUNT entries instead of the requested $SIZELIMIT" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test x"$COUNT" != x ; then + if test "$COUNT" = "$SIZELIMIT" ; then + echo "...bumped into requested ($SIZELIMIT) size limit" + else + echo "...error: got size limit $SIZELIMIT but $COUNT entries" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +SIZELIMIT=100 +echo "Testing higher than hard limit request ($SIZELIMIT) for hard limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \ + -D 'cn=Hard Limited User,ou=People,dc=example,dc=com' \ + -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + if test "$COUNT" -gt "$SIZELIMIT" ; then + echo "...error: got $COUNT entries instead of the requested $SIZELIMIT" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test x"$COUNT" != x ; then + if test "$COUNT" = "$SIZELIMIT" ; then + echo "...error: bumped into requested ($SIZELIMIT) size limit" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + else + echo "...got size limit $COUNT instead of requested $SIZELIMIT entries" + fi + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; +# 11) +# echo "...bumped into hard size administrative limit" +# ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +SIZELIMIT=max +echo "Testing max limit request ($SIZELIMIT) for hard limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \ + -D 'cn=Hard Limited User,ou=People,dc=example,dc=com' \ + -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...didn't bump into either requested ($SIZELIMIT) or server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test x"$COUNT" != x ; then + echo "...bumped into requested ($SIZELIMIT=$COUNT) size limit" + else + echo "...error: bumped into size limit but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; +# 11) +# echo "...bumped into hard size administrative limit" +# ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing lower than unchecked limit request for unchecked limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Unchecked Limited User,ou=People,dc=example,dc=com' \ + -E '!pr='$PAGESIZE'/noprompt' '(uid=uncheckedlimited)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...success; didn't bump into server-side unchecked limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; +# 11) +# echo "...bumped into unchecked administrative limit" +# ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing higher than unchecked limit requested for unchecked limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Unchecked Limited User,ou=People,dc=example,dc=com' \ + -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...error: didn't bump into server-side unchecked limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + fi + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + ;; + 11) + echo "...bumped into unchecked administrative limit" + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "" +echo "Testing specific search limits with pagedResults control" +echo "" + +echo "Testing no limit requested for unlimited page size ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Unlimited User,ou=Paged Results Users,dc=example,dc=com' \ + -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + echo "...success; didn't bump into server-side size limit (got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test x"$COUNT" != x ; then + echo "...bumped into server-side size limit (got $COUNT entries)" + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing no limit requested for limited page size ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Page Size Limited User,ou=Paged Results Users,dc=example,dc=com' \ + -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + echo "...success; didn't bump into server-side page size limit (got $COUNT entries)" + ;; + 4) + echo "...bumped into page size limit ($COUNT)" + ;; + 11) + echo "...bumped into page size administrative limit" + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing no limit requested for pagedResults disabled ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Paged Results Disabled User,ou=Paged Results Users,dc=example,dc=com' \ + -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + echo "...success; didn't bump into server-side unchecked limit (got $COUNT entries)" + ;; + 4) + echo "...bumped into server-side size limit ($COUNT)" + ;; + 11) + echo "...bumped into pagedResults disabled administrative limit" + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Testing no limit requested for pagedResults total count limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Paged Results Limited User,ou=Paged Results Users,dc=example,dc=com' \ + -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + echo "...success; didn't bump into server-side unchecked limit (got $COUNT entries)" + ;; + 4) + echo "...bumped into server-side size limit ($COUNT)" + ;; + 11) + echo "...bumped into pagedResults total count administrative limit" + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +SIZELIMIT=8 +echo "Testing higher than hard but lower then total count limit requested for pagedResults total count limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Paged Results Limited User,ou=Paged Results Users,dc=example,dc=com' \ + -z $SIZELIMIT -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + echo "...success; didn't bump into either requested ($SIZELIMIT) or server-side unchecked limit (got $COUNT entries)" + ;; + 4) + if test "x$COUNT" != "x" ; then + if test "x$SIZELIMIT" = "x$COUNT" ; then + echo "...bumped into requested ($SIZELIMIT) size limit" + else + echo "...bumped into server-side size limit ($COUNT)" + fi + else + echo "...bumped into either requested ($SIZELIMIT) or server-side size limit" + fi + ;; + 11) + echo "...bumped into either hard size or pagedResults total count administrative limit" + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +SIZELIMIT=15 +echo "Testing higher than total count limit requested for pagedResults total count limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Paged Results Limited User,ou=Paged Results Users,dc=example,dc=com' \ + -z $SIZELIMIT -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + echo "...success; didn't bump into either requested ($SIZELIMIT) or server-side unchecked limit (got $COUNT entries)" + ;; + 4) + if test "x$COUNT" != "x" ; then + if test "x$SIZELIMIT" = "x$COUNT" ; then + echo "...bumped into requested ($SIZELIMIT) size limit" + else + echo "...bumped into server-side size limit ($COUNT)" + fi + else + echo "...bumped into either requested ($SIZELIMIT) or server-side size limit" + fi + ;; + 11) + echo "...bumped into pagedResults total count administrative limit" + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +SIZELIMIT=max +echo "Testing max limit requested for pagedResults total count limited ID..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret \ + -D 'cn=Paged Results Limited User,ou=Paged Results Users,dc=example,dc=com' \ + -z $SIZELIMIT -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + echo "...success; didn't bump into either requested ($SIZELIMIT) or server-side unchecked limit (got $COUNT entries)" + ;; + 4) + if test "x$COUNT" != "x" ; then + if test "x$SIZELIMIT" = "x$COUNT" ; then + echo "...bumped into requested ($SIZELIMIT) size limit" + else + echo "...bumped into server-side size limit ($COUNT)" + fi + else + echo "...bumped into either requested ($SIZELIMIT) or server-side size limit" + fi + ;; + 11) + echo "...bumped into pagedResults total count administrative limit" + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +# ITS#4479 +PAGESIZE=1 +SIZELIMIT=2 +echo "Testing size limit request ($SIZELIMIT) for unlimited ID and pagesize=$PAGESIZE..." +$LDAPRSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 -w secret -z $SIZELIMIT \ + -D 'cn=Unlimited User,ou=People,dc=example,dc=com' \ + -E '!pr='$PAGESIZE'/noprompt' '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? +COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHOUT` +case $RC in + 0) + if test x"$COUNT" != x ; then + if test "$COUNT" -gt "$SIZELIMIT" ; then + echo "...error: got $COUNT entries instead of the requested $SIZELIMIT" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + echo "...didn't bump into the requested size limit ($SIZELIMIT; got $COUNT entries)" + else + echo "...error: did not expect ldapsearch success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + ;; + 4) + if test x"$COUNT" != x ; then + if test $COUNT = $SIZELIMIT ; then + echo "...bumped into requested size limit ($SIZELIMIT)" + else + echo "...error: got $COUNT entries while requesting $SIZELIMIT..." + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + else + echo "...error: bumped into server-side size limit, but got no entries!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + ;; + *) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test026-dn b/tests/scripts/test026-dn new file mode 100755 index 0000000..e3f9dd4 --- /dev/null +++ b/tests/scripts/test026-dn @@ -0,0 +1,180 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 2004-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +. $CONFFILTER $BACKEND $MONITORDB < $DNCONF > $CONF1 +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd DN parsing..." +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 + +echo "Loading database..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD -c -f $LDIFDN > \ + $TESTOUT 2>&1 + +cat /dev/null > $SEARCHOUT + +echo "Searching database..." +echo "# Searching database..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +DN="OU=Sales+CN=J. Smith,DC=example,DC=net" +echo "Searching database for DN=\"$DN\"..." +echo "# Searching database for DN=\"$DN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "(member=$DN)" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +DN="testUUID=597ae2f6-16a6-1027-98f4-ABCDEFabcdef,DC=Example" +echo "Searching database for entryUUID-named DN=\"$DN\"..." +echo "# Searching database for entryUUID-named DN=\"$DN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "(member=$DN)" \ + >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +DN="dc=example,dc=com" +echo "Searching database for nameAndOptionalUID=\"$DN\"..." +echo "# Searching database for nameAndOptionalUID=\"$DN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "(uniqueMember=$DN)" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +DN="dc=example,dc=com#'001000'B" +echo "Searching database for nameAndOptionalUID=\"$DN\"..." +echo "# Searching database for nameAndOptionalUID=\"$DN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "(uniqueMember=$DN)" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +DN="dc=example,dc=com#'1000'B" +echo "Searching database for nameAndOptionalUID=\"$DN\"..." +echo "# Searching database for nameAndOptionalUID=\"$DN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "(uniqueMember=$DN)" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +DN="dc=example,dc=com" +echo "Searching database for uniqueMember~=\"$DN\" (approx)..." +echo "# Searching database for uniqueMember~=\"$DN\" (approx)..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "(uniqueMember~=)" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +DN="dc=example,dc=com#'1000'B" +echo "Searching database for uniqueMember~=\"$DN\" (approx)..." +echo "# Searching database for uniqueMember~=\"$DN\" (approx)..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "(uniqueMember~=$DN)" >> $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 + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering original data..." +$LDIFFILTER < $DNOUT > $LDIFFLT +echo "Comparing ldapsearch results against original..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - DN write operations did not complete correctly" + exit 1 +fi + +##### + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test027-emptydn b/tests/scripts/test027-emptydn new file mode 100755 index 0000000..9d11e16 --- /dev/null +++ b/tests/scripts/test027-emptydn @@ -0,0 +1,175 @@ +#! /bin/sh +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 2004-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 + +. $CONFFILTER $BACKEND $MONITORDB < $EMPTYDNCONF > $CONF1 + +echo "Running slapadd to build \"dc=example,dc=com\" slapd database..." +$SLAPADD -f $CONF1 -n 1 -l $LDIFEMPTYDN1 +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Running slapadd to build empty DN slapd database..." +$SLAPADD -f $CONF1 -b "" -l $LDIFEMPTYDN2 +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd empty DN handling..." +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 + +echo "Searching database..." + +$LDAPSEARCH -S "" -b "" -h $LOCALHOST -p $PORT1 > $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +kill -HUP $KILLPIDS +wait + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering expected results..." +$LDIFFILTER < $EMPTYDNOUT1 > $LDIFFLT +echo "Comparing ldapsearch results against original..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - empty DN write operations did not complete correctly" + exit 1 +fi + +echo "Comparison of database generated via slapadd succeeded" + +echo "Cleaning up database directories..." +/bin/rm -rf $TESTDIR/db.* + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd empty DN handling..." +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 + +echo "Loading database..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + -f $LDIFEMPTYDN1 > /dev/null 2>&1 +$LDAPADD -D "$EMPTYDNDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + -f $LDIFEMPTYDN2 > /dev/null 2>&1 + +$LDAPMODIFY -D "$EMPTYDNDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + > /dev/null 2>&1 << EOF +dn: o=Beispiel,c=DE +changetype: delete + +dn: c=DE +changetype: delete +EOF + +echo "Searching database..." + +$LDAPSEARCH -S "" -b "" -h $LOCALHOST -p $PORT1 > $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 + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering expected results..." +$LDIFFILTER < $EMPTYDNOUT2 > $LDIFFLT +echo "Comparing ldapsearch results against original..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - empty DN write operations did not complete correctly" + exit 1 +fi + +##### + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test028-idassert b/tests/scripts/test028-idassert new file mode 100755 index 0000000..198d45b --- /dev/null +++ b/tests/scripts/test028-idassert @@ -0,0 +1,254 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +echo "### This test requires the LDAP backend and the rwm overlay." +echo "### If available, and explicitly requested, it can use SASL bind;" +echo "### note that SASL must be properly set up, and the requested" +echo "### mechanism must be available. Define SLAPD_USE_SASL={yes|<mech>}," +echo "### with \"yes\" defaulting to DIGEST-MD5 to enable SASL authc[/authz]." + +if test $BACKLDAP = "ldapno" ; then + echo "LDAP backend not available, test skipped" + exit 0 +fi + +if test $RWM = "rwmno" ; then + echo "Rewrite/remap overlay not available, test skipped" + exit 0 +fi + +if test $THREADS = "threadsno" ; then + echo "Need threads support, test skipped" + exit 0 +fi + +if test $WITH_SASL = "yes" ; then + if test $USE_SASL != "no" ; then + if test $USE_SASL = "yes" ; then + MECH="DIGEST-MD5" + else + MECH="$USE_SASL" + fi + echo "Using SASL authc[/authz] with mech=$MECH; unset SLAPD_USE_SASL to disable" + else + echo "Using proxyAuthz with simple authc..." + fi +else + echo "SASL not available; using proxyAuthz with simple authc..." +fi + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $IDASSERTCONF > $ADDCONF +$SLAPADD -f $ADDCONF -l $LDIFIDASSERT1 -n 1 +RC=$? +if test $RC != 0 ; then + echo "slapadd -n 1 failed ($RC)!" + exit $RC +fi +$SLAPADD -f $ADDCONF -l $LDIFIDASSERT2 -n 2 +RC=$? +if test $RC != 0 ; then + echo "slapadd -n 2 failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT..." +. $CONFFILTER $BACKEND $MONITORDB < $IDASSERTCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Testing ldapwhoami as proxy US..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy US,ou=Admin,dc=example,dc=com" -w proxy +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +AUTHZID="u:it/jaj" +echo "Testing ldapwhoami as proxy US, $AUTHZID..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy US,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID" +RC=$? +if test $RC != 0 && test $BACKEND != null ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +AUTHZID="u:bjorn" +echo "Testing ldapwhoami as proxy US, $AUTHZID... (should fail)" +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy US,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID" +RC=$? +if test $RC != 1 ; then + echo "ldapwhoami should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +AUTHZID="u:bjensen" +echo "Testing ldapwhoami as proxy US, $AUTHZID... (should fail)" +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy US,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID" +RC=$? +if test $RC != 1 ; then + echo "ldapwhoami should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing ldapwhoami as proxy IT..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy IT,ou=Admin,dc=example,dc=com" -w proxy +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +AUTHZID="u:it/jaj" +echo "Testing ldapwhoami as proxy IT, $AUTHZID... (should fail)" +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy IT,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID" +RC=$? +if test $RC != 1 ; then + echo "ldapwhoami should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +AUTHZID="u:bjorn" +echo "Testing ldapwhoami as proxy IT, $AUTHZID... (should fail)" +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy IT,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID" +RC=$? +if test $RC != 1 ; then + echo "ldapwhoami should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +AUTHZID="dn:cn=Sandbox,ou=Admin,dc=example,dc=com" +echo "Testing ldapwhoami as proxy IT, $AUTHZID..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "cn=proxy IT,ou=Admin,dc=example,dc=com" -w proxy -e\!"authzid=$AUTHZID" +RC=$? +if test $RC != 0 && test $BACKEND != null ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +AUTHZID="dn:uid=bjorn,ou=People,o=Example,c=US" +echo "Testing ldapwhoami as bjorn, $AUTHZID..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "uid=bjorn,ou=people,dc=example,dc=com" -w bjorn -e\!"authzid=$AUTHZID" +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +AUTHZID="dn:uid=bjorn,ou=People,o=Esempio,c=IT" +echo "Testing ldapwhoami as bjorn, $AUTHZID..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "uid=bjorn,ou=people,dc=example,dc=com" -w bjorn -e\!"authzid=$AUTHZID" +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +ID="uid=jaj,ou=People,dc=example,dc=it" +BASE="o=Example,c=US" +echo "Testing ldapsearch as $ID for \"$BASE\"..." +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASE" \ + -D "$ID" -w jaj > $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 && test $BACKEND != null ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering ldapsearch results..." +$LDIFFILTER -s ldif=e < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif used to create database..." +$LDIFFILTER -s ldif=e < $IDASSERTOUT > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - search with identity assertion didn't succeed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +if test $USE_SASL != "no" ; then + ID="it/jaj" + BASE="o=Example,c=US" + echo "Testing ldapsearch as $ID for \"$BASE\" with SASL bind and identity assertion..." + $LDAPSASLSEARCH -h $LOCALHOST -p $PORT1 -b "$BASE" \ + -Q -U "$ID" -w jaj -Y $MECH > $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Filtering ldapsearch results..." + $LDIFFILTER < $SEARCHOUT > $SEARCHFLT + echo "Filtering original ldif used to create database..." + $LDIFFILTER < $IDASSERTOUT > $LDIFFLT + echo "Comparing filter output..." + $CMP $SEARCHFLT $LDIFFLT > $CMPOUT + + if test $? != 0 ; then + echo "comparison failed - search with SASL bind and identity assertion didn't succeed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test029-ldapglue b/tests/scripts/test029-ldapglue new file mode 100755 index 0000000..9469a7e --- /dev/null +++ b/tests/scripts/test029-ldapglue @@ -0,0 +1,224 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +echo "### This test requires the ldap backend and glue overlay." +echo "### If available, and explicitly requested, it can use SASL bind;" +echo "### note that SASL must be properly set up, and the requested" +echo "### mechanism must be available. Define SLAPD_USE_SASL={yes|<mech>}," +echo "### with \"yes\" defaulting to DIGEST-MD5 to enable SASL authc[/authz]." + +if test $BACKLDAP = "ldapno" ; then + echo "LDAP backend not available, test skipped" + exit 0 +fi + +if test $WITH_SASL = "yes" ; then + if test $USE_SASL != "no" ; then + if test $USE_SASL = "yes" ; then + MECH="DIGEST-MD5" + else + MECH="$USE_SASL" + fi + echo "Using SASL authc[/authz] with mech=$MECH; unset SLAPD_USE_SASL to disable" + else + echo "Using proxyAuthz with simple authc..." + fi +else + echo "SASL not available; using proxyAuthz with simple authc..." +fi + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 $DBDIR3 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $LDAPGLUECONF1 > $ADDCONF +$SLAPADD -f $ADDCONF -l $LDIFLDAPGLUE1 +RC=$? +if test $RC != 0 ; then + echo "slapadd 1 failed ($RC)!" + exit $RC +fi + +. $CONFFILTER $BACKEND $MONITORDB < $LDAPGLUECONF2 > $ADDCONF +$SLAPADD -f $ADDCONF -l $LDIFLDAPGLUE2 +RC=$? +if test $RC != 0 ; then + echo "slapadd 2 failed ($RC)!" + exit $RC +fi + +. $CONFFILTER $BACKEND $MONITORDB < $LDAPGLUECONF3 > $ADDCONF +$SLAPADD -f $ADDCONF -l $LDIFLDAPGLUE3 +RC=$? +if test $RC != 0 ; then + echo "slapadd 3 failed ($RC)!" + exit $RC +fi + +echo "Starting local slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $LDAPGLUECONF1 > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID1=$! +if test $WAIT != 0 ; then + echo PID $PID1 + read foo +fi + +echo "Starting remote slapd 1 on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $LDAPGLUECONF2 > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +PID2=$! +if test $WAIT != 0 ; then + echo PID $PID2 + read foo +fi + +echo "Starting remote slapd 2 on TCP/IP port $PORT3..." +. $CONFFILTER $BACKEND $MONITORDB < $LDAPGLUECONF3 > $CONF3 +$SLAPD -f $CONF3 -h $URI3 -d $LVL $TIMING > $LOG3 2>&1 & +PID3=$! +if test $WAIT != 0 ; then + echo PID $PID3 + read foo +fi +KILLPIDS="$PID1 $PID2 $PID3" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Using ldapsearch to check that slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + if test $RC = 0 ; then + break + fi + echo "Waiting 5 seconds for slapd to start..." + sleep 5 +done + +echo "Using ldapsearch to check that slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT3 \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + if test $RC = 0 ; then + break + fi + echo "Waiting 5 seconds for slapd to start..." + sleep 5 +done + +ID="uid=bjorn,ou=People,dc=example,dc=com" +BASE="dc=example,dc=com" +echo "Testing ldapsearch as $ID for \"$BASE\"..." +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASE" \ + -D "$ID" -w bjorn > $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering ldapsearch results..." +$LDIFFILTER -s ldif=e < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif used to create database..." +$LDIFFILTER -s ldif=e < $LDAPGLUEOUT > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - glued search with identity assertion didn't succeed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +BASE="dc=example,dc=com" +echo "Testing ldapsearch as anonymous for \"$BASE\"..." +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASE" \ + > $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif used to create database..." +$LDIFFILTER < $LDAPGLUEANONYMOUSOUT > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - anonymous glued search with identity assertion didn't succeed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +# FIXME: this cannot work as is, because SASL bind cannot be proxied! +if test $USE_SASL != "no" ; then + ID="bjorn" + BASE="dc=example,dc=com" + echo "Testing ldapsearch as $ID for \"$BASE\" with SASL bind and identity assertion..." + $LDAPSASLSEARCH -h $LOCALHOST -p $PORT1 -b "$BASE" \ + -Q -U "$ID" -w bjorn -Y $MECH > $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Filtering ldapsearch results..." + $LDIFFILTER < $SEARCHOUT > $SEARCHFLT + echo "Filtering original ldif used to create database..." + $LDIFFILTER < $LDAPGLUEOUT > $LDIFFLT + echo "Comparing filter output..." + $CMP $SEARCHFLT $LDIFFLT > $CMPOUT + + if test $? != 0 ; then + echo "comparison failed - glued search with SASL bind and identity assertion didn't succeed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test030-relay b/tests/scripts/test030-relay new file mode 100755 index 0000000..407f75d --- /dev/null +++ b/tests/scripts/test030-relay @@ -0,0 +1,118 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $RWM = rwmno ; then + echo "rwm (Rewrite/remap) overlay not available, test skipped" + exit 0 +fi + +echo "" + +if test "x$RELAYS" = "x" ; then + RELAYS= + # back-relay + if test $BACKRELAY = relayno ; then + echo "relay backend not available, test skipped" + else + if test "x$RELAYS" != "x" ; then + RELAYS="${RELAYS} " + fi + RELAYS="${RELAYS}relay" + fi + + # back-ldap + if test $BACKLDAP = ldapno ; then + echo "ldap backend not available, test skipped" + else + if test $THREADS = "threadsno" ; then + echo "Need threads support, test skipped" + else + if test "x$RELAYS" != "x" ; then + RELAYS="${RELAYS} " + fi + RELAYS="${RELAYS}ldap" + fi + fi + + # back-meta + if test $BACKMETA = metano ; then + echo "meta backend not available, test skipped" + else + if test $THREADS = "threadsno" ; then + echo "Need threads support, test skipped" + else + if test "x$RELAYS" != "x" ; then + RELAYS="${RELAYS} " + fi + RELAYS="${RELAYS}meta" + fi + fi +fi + +if test "x$RELAYS" = "x" ; then + echo "no relaying capable backend is available" + echo ">>>>> Test succeeded" + exit 0 +fi + +echo "Testing virtual naming context mapping with $RELAYS backend(s)..." +echo "" + +tmpfile=savelog.log +if test -f $tmpfile ; then + rm -f $tmpfile +fi +first=1 +for RELAY in $RELAYS ; do + RUNIT=yes + if test $THREADS = "threadsno" ; then + case $RELAY in + ldap|meta) + echo "Need threads support, test skipped" + RUNIT=no + ;; + esac + fi + + if test $RUNIT = yes ; then + if test $first = 1 ; then + first=0 + else + echo ">>>>> waiting for things to exit" + test $KILLSERVERS != no && wait + echo "" + + mv -f $LOG1 $tmpfile + rm -rf $TESTDIR + fi + + mkdir -p $TESTDIR $DBDIR1 + + if test -f $tmpfile ; then + mv $tmpfile $LOG1 + fi + + . $SRCDIR/scripts/relay + fi +done + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test031-component-filter b/tests/scripts/test031-component-filter new file mode 100755 index 0000000..ec887b1 --- /dev/null +++ b/tests/scripts/test031-component-filter @@ -0,0 +1,330 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +## If you use this script then +## Make sure that you turn on LDAP_COMP_MATCH in slapd source codes +## and --enable-modules is configured yes +if test "$AC_WITH_MODULES_ENABLED" != "yes" ; then + echo "dynamic module disabled, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 + +## Make sure that you set a proper path to component matching +## module directory in $COMPCONF +## moduleload path/to/component/library/compmatch.la +## otherwise it fails to execute slapd +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $COMPCONF > $ADDCONF +$SLAPADD -f $ADDCONF -l $LDIFCOMPMATCH +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + echo "Be sure to have a certificate module in tests/data/comp_libs " + echo "The module is in openldap/contrib/slapd-modules/comp_match" + echo "Test skipped." + exit 0 +fi + +echo "Running slapindex to index slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1 +$SLAPINDEX -f $CONF1 +RC=$? +if test $RC != 0 ; then + echo "warning: slapindex failed ($RC)" + echo " assuming no indexing support" +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $ADDCONF -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd searching..." +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 > $SEARCHOUT + +echo "Testing Component Filter Match RFC3687 Certificate searching:" +echo "# Testing Component Filter Match RFC3687 Certificate searching:" >> $SEARCHOUT + +FILTER="(userCertificate:componentFilterMatch:=item:{ component \"toBeSigned.serialNumber\", rule allComponentsMatch, value 0 })" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(userCertificate:componentFilterMatch:=item:{ component \"toBeSigned.version\", rule allComponentsMatch, value 2 })" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(userCertificate:componentFilterMatch:=item:{ component \"toBeSigned.issuer.rdnSequence.1.1.value\", rule caseExactMatch, value \"US\" })" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(userCertificate:componentFilterMatch:=item:{ component \"toBeSigned.issuer.rdnSequence.1.1.value\", rule allComponentsMatch, value \"US\" })" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(userCertificate:componentFilterMatch:=item:{ component \"toBeSigned.issuer.rdnSequence\", rule allComponentsMatch, value { { { type 2.5.4.6 , value \"US\" } } } })" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(userCertificate:componentFilterMatch:=item:{ component \"toBeSigned.extensions.0\", rule integerMatch, value 3 })" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(userCertificate:componentFilterMatch:=item:{ component \"toBeSigned.extensions.\2a.extnID\", rule allComponentsMatch, value 2.5.29.14 })" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(userCertificate:componentFilterMatch:=not:item:{ component \"toBeSigned.extensions.\2a\", rule allComponentsMatch, value { extnID 2.5.29.19 , extnValue '30030101FF'H })" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(userCertificate:componentFilterMatch:=item:{ component \"toBeSigned.issuer.rdnSequence\", rule distinguishedNameMatch, value \"c=US\" })" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(userCertificate:componentFilterMatch:=item:{ component \"toBeSigned.issuer.rdnSequence.1\", rule rdnMatch, value \"c=US\" })" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(userCertificate:componentFilterMatch:=item:{ component \"toBeSigned.extensions.\2a.extnValue.content.\282.5.29.35\29.authorityCertSerialNumber\", rule integerMatch, value 0 })" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + + +FILTER="(userCertificate:componentFilterMatch:=item:{ component \"toBeSigned.subject.rdnSequence.\2a\", rule rdnMatch, value \"c=US\" })" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(userCertificate:componentFilterMatch:=item:{ component \"toBeSigned.subject.rdnSequence.\2a.\2a.value.\282.5.4.6\29\", rule caseExactMatch, value \"US\" })" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# extraction filter +FILTER="(x509CertificateIssuer=c=US)" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# extraction filter +FILTER="(x509CertificateSerial=0)" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# extraction filter +FILTER="(x509CertificateSerialAndIssuer:certificateExactMatch:=0\$c=US)" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +FILTER="(certificateRevocationList:componentFilterMatch:=item:{ component \"tbsCertList.revokedCertificates.\2a.userCertificate\", rule integerMatch, value 952069669 })" +echo " f=$FILTER ..." +echo "# f=$FILTER ..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" >> $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 + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $COMPSEARCHOUT > $CMPOUT + +if test $? != 0 ; then + echo "Comparison failed" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test032-chain b/tests/scripts/test032-chain new file mode 100755 index 0000000..3254d2e --- /dev/null +++ b/tests/scripts/test032-chain @@ -0,0 +1,338 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $BACKLDAP = "ldapno" ; then + echo "LDAP backend not available, test skipped" + exit 0 +fi + +rm -rf $TESTDIR + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $CHAINCONF1 > $ADDCONF +. $CONFFILTER < $LDIFCHAIN1 > $SEARCHOUT +$SLAPADD -f $ADDCONF -l $SEARCHOUT +RC=$? +if test $RC != 0 ; then + echo "slapadd 1 failed ($RC)!" + exit $RC +fi + +. $CONFFILTER $BACKEND $MONITORDB < $CHAINCONF2 > $ADDCONF +. $CONFFILTER < $LDIFCHAIN2 > $SEARCHOUT +$SLAPADD -f $ADDCONF -l $SEARCHOUT +RC=$? +if test $RC != 0 ; then + echo "slapadd 2 failed ($RC)!" + exit $RC +fi + +echo "Starting first slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $CHAINCONF1 > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID1=$! +if test $WAIT != 0 ; then + echo PID $PID1 + read foo +fi +KILLPIDS="$PID1" + +echo "Starting second slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $CHAINCONF2 > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +PID2=$! +if test $WAIT != 0 ; then + echo PID $PID2 + read foo +fi + +KILLPIDS="$KILLPIDS $PID2" + +sleep 1 + +echo "Using ldapsearch to check that first slapd is running..." +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 + +echo "Using ldapsearch to check that second slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + '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 + +for P in $PORT1 $PORT2 ; do + echo "Testing ldapsearch as anonymous for \"$BASEDN\" on port $P..." + $LDAPSEARCH -h $LOCALHOST -p $P -b "$BASEDN" -S "" \ + > $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Filtering ldapsearch results..." + $LDIFFILTER < $SEARCHOUT > $SEARCHFLT + echo "Filtering original ldif used to create database..." + $LDIFFILTER < $CHAINOUT > $LDIFFLT + echo "Comparing filter output..." + $CMP $SEARCHFLT $LDIFFLT > $CMPOUT + + if test $? != 0 ; then + echo "comparison failed - chained search didn't succeed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + + echo "Reading the referral entry \"ou=Other,$BASEDN\" as anonymous on port $P..." + $LDAPSEARCH -h $LOCALHOST -p $P -b "ou=Other,$BASEDN" -S "" \ + > $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Filtering ldapsearch results..." + $LDIFFILTER < $SEARCHOUT > $SEARCHFLT + echo "Filtering original ldif used to create database..." + $LDIFFILTER < $CHAINREFOUT > $LDIFFLT + echo "Comparing filter output..." + $CMP $SEARCHFLT $LDIFFLT > $CMPOUT + + if test $? != 0 ; then + echo "comparison failed - chained search didn't succeed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + + DN="cn=Mark Elliot,ou=Alumni Association,ou=People,$BASEDN" + echo "Comparing \"$DN\" on port $P..." + $LDAPCOMPARE -h $LOCALHOST -p $P "$DN" "cn:Mark Elliot" \ + > $TESTOUT 2>&1 + + RC=$? + if test $RC != 6 && test $RC,$BACKEND != 5,null ; then + echo "ldapcompare failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + + DN="ou=Other,$BASEDN" + echo "Comparing \"$DN\" on port $P with manageDSAit control..." + $LDAPCOMPARE -h $LOCALHOST -p $P -M "$DN" "ou:Other" \ + > $TESTOUT 2>&1 + + RC=$? + if test $RC != 6 && test $RC,$BACKEND != 5,null ; then + echo "ldapcompare failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi +done + +# +# Testing writes to first server +# +echo "Writing to first server with scope on second server..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: cn=New Group,ou=Groups,dc=example,dc=com +changetype: add +objectClass: groupOfNames +cn: New Group +member: + +dn: cn=New Group,ou=Groups,dc=example,dc=com +changetype: modify +add: description +description: testing chain overlay writes... +- +replace: member +member: cn=New Group,ou=Groups,dc=example,dc=com +member: cn=Manager,dc=example,dc=com +- +add: owner +owner: cn=Manager,dc=example,dc=com +- + +dn: cn=New Group,ou=Groups,dc=example,dc=com +changetype: modrdn +newrdn: cn=Renamed Group +deleteoldrdn: 1 + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +changetype: delete +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# +# Testing writes to second server +# +echo "Writing to second server with scope on first server..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: cn=New User,ou=People,dc=example,dc=com +changetype: add +objectClass: person +cn: New User +sn: User +seeAlso: cn=New Group,ou=Groups,dc=example,dc=com + +dn: cn=New User,ou=People,dc=example,dc=com +changetype: modify +add: description +description: testing chain overlay writes... +- +replace: seeAlso +seeAlso: cn=Renamed Group,ou=Groups,dc=example,dc=com +- + +dn: cn=New User,ou=People,dc=example,dc=com +changetype: modrdn +newrdn: cn=Renamed User +deleteoldrdn: 1 + +dn: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com +changetype: delete +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +for P in $PORT1 $PORT2 ; do + echo "Testing ldapsearch as anonymous for \"$BASEDN\" on port $P..." + $LDAPSEARCH -h $LOCALHOST -p $P -b "$BASEDN" -S "" \ + > $SEARCHOUT 2>&1 + + RC=$? + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Filtering ldapsearch results..." + $LDIFFILTER < $SEARCHOUT > $SEARCHFLT + echo "Filtering original ldif used to create database..." + $LDIFFILTER < $CHAINMODOUT > $LDIFFLT + echo "Comparing filter output..." + $CMP $SEARCHFLT $LDIFFLT > $CMPOUT + + if test $? != 0 ; then + echo "comparison failed - chained search didn't succeed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi +done + +NEWPW=newsecret +echo "Using ldappasswd on second server with scope on first server..." +$LDAPPASSWD -h $LOCALHOST -p $PORT2 \ + -w secret -s $NEWPW \ + -D "$MANAGERDN" "$BJORNSDN" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldappasswd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Binding with newly changed password on first server..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 \ + -D "$BJORNSDN" -w $NEWPW +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# ITS#57?? +$LDAPADD -h $LOCALHOST -p $PORT1 \ + -D "$MANAGERDN" -w secret \ + >> $TESTOUT 2>&1 \ + << EOMODS +dn: ou=Can't Contact,dc=example,dc=com +changetype: add +objectclass: referral +objectclass: extensibleobject +ou: Can't Contact +# invalid URI to test broken connectivity handling (search only) +ref: ${URI3}ou=Can't%20Contact,dc=example,dc=com +EOMODS + +echo "Reading the referral entry \"ou=Can't Contact,$BASEDN\" as anonymous on port $PORT1..." +$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(cn=Can't Contact)" \ + > $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 + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test033-glue-syncrepl b/tests/scripts/test033-glue-syncrepl new file mode 100755 index 0000000..54aef28 --- /dev/null +++ b/tests/scripts/test033-glue-syncrepl @@ -0,0 +1,188 @@ +#! /bin/sh +# $OpenLDAP$ */ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1A $DBDIR1B $DBDIR1C $DBDIR2A $DBDIR2B + +echo "Running slapadd to build glued slapd databases..." +. $CONFFILTER $BACKEND $MONITORDB < $GLUECONF > $CONF1 +$SLAPADD -d $LVL -f $CONF1 -l $LDIFORDERED > $SLAPADDLOG1 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +rm -rf $DBDIR1A/* $DBDIR1B/* +cp -pr $DBDIR1C $DBDIR2C + +echo "Starting slapd 1 on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $GLUESYNCCONF1 > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd 1 is running..." +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 + +echo "Starting slapd 2 on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $GLUESYNCCONF2 > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$KILLPIDS $PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd 2 is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + '(objectclass=*)' > /dev/null 2>&1 + RC=$? + if test $RC = 0 ; then + break + fi + echo "Waiting 5 seconds for slapd to start..." + sleep 5 +done + +SUBTREE1="ou=Information Technology Division,ou=People,dc=example,dc=com" +SUBTREE2="ou=Groups,dc=example,dc=com" + +echo "Using ldapadd to populate subtree=\"${SUBTREE1}\" on port $PORT1..." +$LDAPADD -D "cn=Manager 1,$BASEDN" -w $PASSWD -h $LOCALHOST -p $PORT1 \ + -f $LDIFORDERED -c \ + > /dev/null 2>&1 +RC=$? +case $RC in +0) + echo "ldapadd should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +10|68) + # Fine if we get alreadyExists or referrals + ;; +*) + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Using ldapadd to populate subtree=\"${SUBTREE2}\" on port $PORT2..." +$LDAPADD -D "cn=Manager 2,$BASEDN" -w $PASSWD -h $LOCALHOST -p $PORT2 \ + -f $LDIFORDERED -c \ + > /dev/null 2>&1 +RC=$? +case $RC in +0) + echo "ldapadd should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +10|68) + # Fine if we get alreadyExists or referrals + ;; +*) + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Waiting $SLEEP1 seconds for shadow subtrees to sync..." +sleep $SLEEP1 + +echo "Filtering original ldif used to create database..." +$LDIFFILTER < $GLUESYNCOUT > $LDIFFLT + +for P in $PORT1 $PORT2 ; do + echo "Using ldapsearch to read all the entries from port $P..." + $LDAPSEARCH -b "$BASEDN" -h $LOCALHOST -p $P \ + -S "" '(objectclass=*)' > "${SEARCHOUT}.${P}" 2>&1 + RC=$? + + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Filtering ldapsearch results..." + $LDIFFILTER < "${SEARCHOUT}.${P}" > $SEARCHFLT + echo "Comparing filter output..." + $CMP $SEARCHFLT $LDIFFLT > $CMPOUT + + if test $? != 0 ; then + echo "comparison failed - database was not created correctly" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi +done + +echo "Testing ldapdelete propagation..." +$LDAPDELETE -D "cn=Manager 1,$BASEDN" -w $PASSWD -H $URI1 "$BABSDN" \ + > $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapdelete failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# This usually propagates immediately +sleep 1 + +$LDAPSEARCH -H $URI2 -b "$BABSDN" > $TESTOUT 2>&1 +RC=$? +if test $RC = 0 && test $BACKEND != null ; then + echo "ldapsearch should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test034-translucent b/tests/scripts/test034-translucent new file mode 100755 index 0000000..db7847a --- /dev/null +++ b/tests/scripts/test034-translucent @@ -0,0 +1,803 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 2004-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +PERSONAL="(objectClass=inetOrgPerson)" +NOWHERE="/dev/null" +FAILURE="additional info:" + +if test $TRANSLUCENT = translucentno ; then + echo "Translucent Proxy overlay not available, test skipped" + exit 0 +fi + +if test $AC_ldap = ldapno ; then + echo "Translucent Proxy overlay requires back-ldap backend, test skipped" + exit 0 +fi + +# configure backside +mkdir -p $TESTDIR $DBDIR1 + +$SLAPPASSWD -g -n >$CONFIGPWF +echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf + +if test $MONITORDB != no ; then + DBIX=2 +else + DBIX=1 +fi + +. $CONFFILTER $BACKEND $MONITORDB < $TRANSLUCENTREMOTECONF > $CONF1 +echo "Running slapadd to build remote slapd database..." +$SLAPADD -f $CONF1 -l $LDIFTRANSLUCENTCONFIG +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting remote slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +REMOTEPID="$PID" +KILLPIDS="$PID" + +sleep 1 + +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + if test $RC = 0 ; then + break + fi + echo "Waiting 5 seconds for remote slapd to start..." + sleep 5 +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# configure frontside +mkdir -p $DBDIR2 + +. $CONFFILTER $BACKEND $MONITORDB < $TRANSLUCENTLOCALCONF > $CONF2 + +echo "Starting local slapd on TCP/IP port $PORT2..." +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +LOCALPID="$PID" +KILLPIDS="$LOCALPID $REMOTEPID" + +sleep 1 + +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -H $URI2 \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + if test $RC = 0 ; then + break + fi + echo "Waiting 5 seconds for local slapd to start..." + sleep 5 +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing slapd Translucent Proxy operations..." + +echo "Testing search: no remote data defined..." + +$LDAPSEARCH -H $URI2 -b "$TRANSLUCENTUSER" "$PERSONAL" >$SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +if test -s $SEARCHOUT; then + echo "ldapsearch should have returned no records!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Populating remote database..." + +$LDAPADD -D "$TRANSLUCENTROOT" -H $URI1 \ + -w $PASSWD < $LDIFTRANSLUCENTDATA > $NOWHERE 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing search: remote database via local slapd..." + +$LDAPSEARCH -H $URI2 -b "$TRANSLUCENTUSER" "$PERSONAL" > $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +$LDIFFILTER < $LDIFTRANSLUCENTDATA > $LDIFFLT +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "Comparison failed -- corruption from remote to local!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing add: prohibited local record..." + +$LDAPADD -D "$TRANSLUCENTDN" -H $URI2 \ + -w $TRANSLUCENTPASSWD < $LDIFTRANSLUCENTADD > $TESTOUT 2>&1 + +RC=$? +if test $RC != 50 ; then + echo "ldapadd failed ($RC), expected INSUFFICIENT ACCESS!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing add: valid local record, no_glue..." + +$LDAPADD -v -v -v -D "$TRANSLUCENTROOT" -H $URI2 \ + -w $PASSWD < $LDIFTRANSLUCENTADD > $TESTOUT 2>&1 + +RC=$? +if test $RC != 32 && test $RC,$BACKEND != 0,null ; then + echo "ldapadd failed ($RC), expected NO SUCH OBJECT!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing modrdn: valid local record, no_glue..." + +$LDAPMODRDN -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \ + $TESTOUT 2>&1 'uid=fred,ou=users,o=translucent' 'uid=someguy' + +RC=$? +if test $RC != 32 && test $RC,$BACKEND != 0,null ; then + echo "ldapmodrdn failed ($RC), expected NO SUCH OBJECT!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Dynamically configuring local slapd without translucent_no_glue..." + +$LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF +dn: olcOverlay={0}translucent,olcDatabase={$DBIX}$BACKEND,cn=config +changetype: modify +replace: olcTranslucentNoGlue +olcTranslucentNoGlue: FALSE +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify of dynamic config failed ($RC)" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing add: valid local record..." + +$LDAPADD -D "$TRANSLUCENTROOT" -H $URI2 \ + -w $PASSWD < $LDIFTRANSLUCENTADD > $TESTOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing search: data merging..." + +$LDAPSEARCH -H $URI2 -b "$TRANSLUCENTUSER" "$PERSONAL" > $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +$LDIFFILTER < $LDIFTRANSLUCENTMERGED > $LDIFFLT +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "Comparison failed -- local data failed to merge with remote!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing compare: valid local..." + +$LDAPCOMPARE -z -H $URI2 -w $TRANSLUCENTPASSWD -D $TRANSLUCENTDN \ + "uid=danger,ou=users,o=translucent" "carLicense:LIVID" + +RC=$? +if test $RC != 6 ; then + echo "ldapcompare failed ($RC), expected TRUE!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing compare: valid remote..." + +$LDAPCOMPARE -z -x -H $URI2 -w $TRANSLUCENTPASSWD -D $TRANSLUCENTDN \ + "uid=binder,o=translucent" "businessCategory:binder-test-user" + +RC=$? +if test $RC != 6 ; then + echo "ldapcompare failed ($RC), expected TRUE!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing compare: bogus local..." + +$LDAPCOMPARE -z -x -H $URI2 -w $TRANSLUCENTPASSWD -D $TRANSLUCENTDN \ + "uid=danger,ou=users,o=translucent" "businessCategory:invalid-test-value" + +RC=$? +if test $RC != 5 ; then + echo "ldapcompare failed ($RC), expected FALSE!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing compare: bogus remote..." + +$LDAPCOMPARE -z -x -H $URI2 -w $TRANSLUCENTPASSWD -D $TRANSLUCENTDN \ + "uid=binder,o=translucent" "businessCategory:invalid-test-value" + +RC=$? +if test $RC != 5 ; then + echo "ldapcompare failed ($RC), expected FALSE!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing modify: nonexistent record..." + +$LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF_MOD +version: 1 +dn: uid=bogus,ou=users,o=translucent +changetype: modify +replace: roomNumber +roomNumber: 31J-2112 +EOF_MOD + +RC=$? +if test $RC != 32 ; then + echo "ldapmodify failed ($RC), expected NO SUCH OBJECT!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing modify: valid local record, nonexistent attribute..." + +$LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF_MOD1 +version: 1 +dn: uid=danger,ou=users,o=translucent +changetype: modify +replace: roomNumber +roomNumber: 9N-21 +EOF_MOD1 + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPSEARCH -H $URI2 -b "uid=danger,ou=users,o=translucent" > $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +ATTR=`grep roomNumber $SEARCHOUT` > $NOWHERE 2>&1 +if test "$ATTR" != "roomNumber: 9N-21" ; then + echo "modification failed!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing search: specific nonexistent remote attribute..." + +$LDAPSEARCH -H $URI2 -b "uid=danger,ou=users,o=translucent" roomNumber > $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing modify: nonexistent local record, nonexistent attribute..." + +$LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF_MOD2 +version: 1 +dn: uid=fred,ou=users,o=translucent +changetype: modify +replace: roomNumber +roomNumber: 31J-2112 +EOF_MOD2 + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPSEARCH -H $URI2 -b "uid=fred,ou=users,o=translucent" > $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +ATTR=`grep roomNumber $SEARCHOUT` > $NOWHERE 2>&1 +if test "$ATTR" != "roomNumber: 31J-2112" ; then + echo "modification failed!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing modify: valid remote record, nonexistent attribute..." + +$LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF_MOD9 +version: 1 +dn: uid=fred,ou=users,o=translucent +changetype: modify +delete: preferredLanguage +EOF_MOD9 + +RC=$? +if test $RC != 16 ; then + echo "ldapmodify failed ($RC), expected NO SUCH ATTRIBUTE!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing delete: valid local record, nonexistent attribute..." + +$LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF_MOD4 +version: 1 +dn: uid=fred,ou=users,o=translucent +changetype: modify +delete: roomNumber +EOF_MOD4 + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing modrdn: prohibited local record..." + +$LDAPMODRDN -D "$TRANSLUCENTDN" -H $URI2 -w $TRANSLUCENTPASSWD > \ + $TESTOUT 2>&1 'uid=fred,ou=users,o=translucent' 'uid=someguy' + +RC=$? +if test $RC != 50 ; then + echo "ldapmodrdn failed ($RC), expected INSUFFICIENT ACCESS!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing modrdn: valid local record..." + +$LDAPMODRDN -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \ + $TESTOUT 2>&1 'uid=fred,ou=users,o=translucent' 'uid=someguy' + +RC=$? +if test $RC != 0 ; then + echo "ldapmodrdn failed ($RC)!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing delete: prohibited local record..." + +$LDAPMODIFY -v -D "$TRANSLUCENTDN" -H $URI2 -w $TRANSLUCENTPASSWD > \ + $TESTOUT 2>&1 << EOF_DEL2 +version: 1 +dn: uid=someguy,ou=users,o=translucent +changetype: delete +EOF_DEL2 + +RC=$? +if test $RC != 50 ; then + echo "ldapadd failed ($RC), expected INSUFFICIENT ACCESS!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing delete: valid local record..." + +$LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF_DEL3 +version: 1 +dn: uid=someguy,ou=users,o=translucent +changetype: delete +EOF_DEL3 + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing delete: valid remote record..." + +$LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF_DEL8 +version: 1 +dn: uid=fred,ou=users,o=translucent +changetype: delete +EOF_DEL8 + +RC=$? +if test $RC != 32 ; then + echo "ldapmodify failed ($RC), expected NO SUCH OBJECT!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing delete: nonexistent local record, nonexistent attribute..." + +$LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF_DEL1 +version: 1 +dn: uid=fred,ou=users,o=translucent +changetype: modify +delete: roomNumber +EOF_DEL1 + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPSEARCH -H $URI2 -b "uid=fred,ou=users,o=translucent" > $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing delete: valid local record, nonexistent attribute..." + +$LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF_MOD8 +version: 1 +dn: uid=danger,ou=users,o=translucent +changetype: modify +delete: preferredLanguage +EOF_MOD8 + +RC=$? +if test $RC != 16 ; then + echo "ldapmodify failed ($RC), expected NO SUCH ATTRIBUTE!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing delete: valid local record, remote attribute..." + +$LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF_MOD8 +version: 1 +dn: uid=danger,ou=users,o=translucent +changetype: modify +delete: initials +EOF_MOD8 + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing modify: valid remote record, combination add-modify-delete..." + +$LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF_MOD6 +version: 1 +dn: uid=fred,ou=users,o=translucent +changetype: modify +delete: carLicense +- +add: preferredLanguage +preferredLanguage: ISO8859-1 +- +replace: employeeType +employeeType: consultant +EOF_MOD6 + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPSEARCH -H $URI2 -b "uid=fred,ou=users,o=translucent" > $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +ATTR=`grep employeeType $SEARCHOUT` > $NOWHERE 2>&1 +if test "$ATTR" != "employeeType: consultant" ; then + echo "modification failed!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +ATTR=`grep preferredLanguage $SEARCHOUT` > $NOWHERE 2>&1 +if test "$ATTR" != "preferredLanguage: ISO8859-1" ; then + echo "modification failed!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Dynamically configuring local slapd with translucent_no_glue and translucent_strict..." + +$LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF +dn: olcOverlay={0}translucent,olcDatabase={$DBIX}$BACKEND,cn=config +changetype: modify +replace: olcTranslucentNoGlue +olcTranslucentNoGlue: TRUE +- +replace: olcTranslucentStrict +olcTranslucentStrict: TRUE +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify of dynamic config failed ($RC)" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing strict mode delete: nonexistent local attribute..." + +$LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF_MOD5 +version: 1 +dn: uid=example,ou=users,o=translucent +changetype: modify +delete: preferredLanguage +EOF_MOD5 + +RC=$? +if test $RC != 19 ; then + echo "ldapmodify failed ($RC), expected CONSTRAINT VIOLATION!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing strict mode delete: nonexistent remote attribute..." + +$LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF_MOD3 +version: 1 +dn: uid=danger,ou=users,o=translucent +changetype: modify +delete: displayName +EOF_MOD3 + +RC=$? +if test $RC != 19 ; then + echo "ldapmodify failed ($RC), expected CONSTRAINT VIOLATION!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing strict mode modify: combination add-modify-delete..." + +$LDAPMODIFY -v -D "$TRANSLUCENTROOT" -H $URI2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOF_MOD6 +version: 1 +dn: uid=example,ou=users,o=translucent +changetype: modify +delete: carLicense +- +add: preferredLanguage +preferredLanguage: ISO8859-1 +- +replace: employeeType +employeeType: consultant +EOF_MOD6 + +RC=$? +if test $RC != 19 ; then + echo "ldapmodify failed ($RC), expected CONSTRAINT VIOLATION!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing invalid Bind request..." +$LDAPWHOAMI -D "$TRANSLUCENTDN" -H $URI2 -w Wrong"$TRANSLUCENTPASSWD" > \ + $TESTOUT 2>&1 +RC=$? +if test $RC != 49 ; then + echo "ldapwhoami failed ($RC), expected INVALID CREDENTIALS!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +$LDAPWHOAMI -D "$TRANSLUCENTDN" -H $URI2 -w "$TRANSLUCENTPASSWD" > \ + $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC), expected SUCCESS!" + grep "$FAILURE" $TESTOUT + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing search: unconfigured local filter..." +$LDAPSEARCH -H $URI2 -b "o=translucent" "(employeeType=consultant)" > $SEARCHOUT 2>&1 + +ATTR=`grep dn: $SEARCHOUT` > $NOWHERE 2>&1 +if test -n "$ATTR" ; then + echo "got result $ATTR, should have been no result" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Dynamically configuring local slapd with translucent_local..." + +$LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF +dn: olcOverlay={0}translucent,olcDatabase={$DBIX}$BACKEND,cn=config +changetype: modify +add: olcTranslucentLocal +olcTranslucentLocal: employeeType +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify of dynamic config failed ($RC)" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing search: configured local filter..." +$LDAPSEARCH -H $URI2 -b "o=translucent" "(employeeType=consultant)" > $SEARCHOUT 2>&1 + +ATTR=`grep dn: $SEARCHOUT` > $NOWHERE 2>&1 +if test -z "$ATTR" ; then + echo "got no result, should have found entry" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing search: unconfigured remote filter..." +$LDAPSEARCH -H $URI2 -b "o=translucent" "(|(employeeType=foo)(carlicense=right))" > $SEARCHOUT 2>&1 + +ATTR=`grep dn: $SEARCHOUT` > $NOWHERE 2>&1 +if test -n "$ATTR" ; then + echo "got result $ATTR, should have been no result" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Dynamically configuring local slapd with translucent_remote..." + +$LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF +dn: olcOverlay={0}translucent,olcDatabase={$DBIX}$BACKEND,cn=config +changetype: modify +add: olcTranslucentRemote +olcTranslucentRemote: carLicense +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify of dynamic config failed ($RC)" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing search: configured remote filter..." +$LDAPSEARCH -H $URI2 -b "o=translucent" "(|(employeeType=foo)(carlicense=right))" > $SEARCHOUT 2>&1 + +ATTR=`grep dn: $SEARCHOUT` > $NOWHERE 2>&1 +if test -z "$ATTR" ; then + echo "got no result, should have found entry" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test035-meta b/tests/scripts/test035-meta new file mode 100755 index 0000000..2de95a6 --- /dev/null +++ b/tests/scripts/test035-meta @@ -0,0 +1,739 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +echo "" + +if test $BACKMETA = metano ; then + echo "meta backend not available, test skipped" + exit 0 +fi + +if test $BACKLDAP = ldapno ; then + echo "ldap backend not available, test skipped" + exit 0 +fi + +rm -rf $TESTDIR + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $METACONF1 > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Using ldapadd to populate the database..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDERED > $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $METACONF2 > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$KILLPIDS $PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + '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 + +echo "Using ldapadd to populate the database..." +$LDAPADD -D "$METAMANAGERDN" -h $LOCALHOST -p $PORT2 -w $PASSWD < \ + $LDIFMETA >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT3..." +. $CONFFILTER $BACKEND $MONITORDB < $METACONF > $CONF3 +$SLAPD -f $CONF3 -h $URI3 -d $LVL $TIMING > $LOG3 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$KILLPIDS $PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT3 \ + '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 > $SEARCHOUT + +BASEDN="o=Example,c=US" +echo "Searching base=\"$BASEDN\"..." +echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 -b "$BASEDN" >> $SEARCHOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Search failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +# ITS#4195: spurious matchedDN when the search scopes the main target, +# and the searchBase is not present, so that target returns noSuchObject +BASEDN="ou=Meta,o=Example,c=US" +echo "Searching base=\"$BASEDN\"..." +echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 -b "$BASEDN" >> $SEARCHOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Search failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +# +# Do some modifications +# + +BASEDN="o=Example,c=US" +echo "Modifying database \"$BASEDN\"..." +$LDAPMODIFY -v -D "cn=Manager,$BASEDN" -h $LOCALHOST -p $PORT3 -w $PASSWD \ + -M >> $TESTOUT 2>&1 << EOMODS +# These operations (updates with objectClass mapping) triggered ITS#3499 +dn: cn=Added Group,ou=Groups,$BASEDN +changetype: add +objectClass: groupOfNames +objectClass: uidObject +cn: Added Group +member: cn=Added Group,ou=Groups,$BASEDN +uid: added + +dn: cn=Another Added Group,ou=Groups,$BASEDN +changetype: add +objectClass: groupOfNames +cn: Another Added Group +member: cn=Added Group,ou=Groups,$BASEDN +member: cn=Another Added Group,ou=Groups,$BASEDN + +dn: cn=Another Added Group,ou=Groups,$BASEDN +changetype: modify +add: objectClass +objectClass: uidObject +- +add: uid +uid: added +- + +dn: cn=Added Group,ou=Groups,$BASEDN +changetype: modify +delete: objectClass +objectClass: uidObject +- +delete: uid +- + +dn: ou=Meta,$BASEDN +changetype: modify +add: description +description: added to "ou=Meta,$BASEDN" +- + +dn: ou=Who's going to handle this?,$BASEDN +changetype: add +objectClass: organizationalUnit +ou: Who's going to handle this? +description: added +description: will be deleted + +dn: ou=Same as above,$BASEDN +changetype: add +objectClass: organizationalUnit +ou: Same as above +description: added right after "Who's going to handle this?" +description: will be preserved + +dn: ou=Who's going to handle this?,$BASEDN +changetype: delete + +dn: ou=Who's going to handle this?,ou=Meta,$BASEDN +changetype: add +objectClass: organizationalUnit +ou: Who's going to handle this? +description: added +description: will be deleted + +dn: ou=Same as above,ou=Meta,$BASEDN +changetype: add +objectClass: organizationalUnit +ou: Same as above +description: added right after "Who's going to handle this?" +description: will be preserved + +dn: cn=Added User,ou=Same as above,ou=Meta,$BASEDN +changetype: add +objectClass: inetOrgPerson +cn: Added User +sn: User +userPassword: secret + +dn: ou=Who's going to handle this?,ou=Meta,$BASEDN +changetype: delete +EOMODS + +RC=$? +#if test $RC != 0 ; then +# echo "Modify failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Modify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Searching base=\"$BASEDN\"..." +echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 -b "$BASEDN" >> $SEARCHOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Search failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +BASEDN="o=Example,c=US" +echo " base=\"$BASEDN\"..." +echo "# base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 -b "$BASEDN" -M "$FILTER" '*' ref \ + >> $SEARCHOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Search failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +BASEDN="o=Example,c=US" +FILTER="(seeAlso=cn=all staff,ou=Groups,$BASEDN)" +echo "Searching filter=\"$FILTER\"" +echo " attrs=\"seeAlso\"" +echo " base=\"$BASEDN\"..." +echo "# searching filter=\"$FILTER\"" >> $SEARCHOUT +echo "# attrs=\"seeAlso\"" >> $SEARCHOUT +echo "# base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 -b "$BASEDN" "$FILTER" seeAlso \ + >> $SEARCHOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Search failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +FILTER="(uid=example)" +echo "Searching filter=\"$FILTER\"" +echo " attrs=\"uid\"" +echo " base=\"$BASEDN\"..." +echo "# searching filter=\"$FILTER\"" >> $SEARCHOUT +echo "# attrs=\"uid\"" >> $SEARCHOUT +echo "# base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 -b "$BASEDN" "$FILTER" uid \ + >> $SEARCHOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Search failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +FILTER="(member=cn=Another Added Group,ou=Groups,$BASEDN)" +echo "Searching filter=\"$FILTER\"" +echo " attrs=\"member\"" +echo " base=\"$BASEDN\"..." +echo "# searching filter=\"$FILTER\"" >> $SEARCHOUT +echo "# attrs=\"member\"" >> $SEARCHOUT +echo "# base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 -b "$BASEDN" "$FILTER" member \ + >> $SEARCHOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Search failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Waiting 10 seconds for cached connections to timeout..." +sleep 10 + +echo "Searching with a timed out connection..." +echo "# searching filter=\"$FILTER\"" >> $SEARCHOUT +echo "# attrs=\"member\"" >> $SEARCHOUT +echo "# base=\"$BASEDN\"" >> $SEARCHOUT +echo "# with a timed out connection..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 -D "cn=Manager,$BASEDN" -w $PASSWD \ + -b "$BASEDN" "$FILTER" member \ + >> $SEARCHOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Search failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +# NOTE: cannot send to $SEARCHOUT because the returned entries +# are not predictable... +echo "Checking server-enforced size limit..." +echo "# Checking server-enforced size limit..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 \ + -D "cn=Bjorn Jensen,ou=Information Technology Division,ou=People,$BASEDN" -w bjorn \ + -b "$BASEDN" "(objectClass=*)" 1.1 \ + >> $TESTOUT 2>&1 +RC=$? +case $RC,$BACKEND in + 4,* | 0,null) + ;; + 0,*) + echo "Search should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +# NOTE: cannot send to $SEARCHOUT because the returned entries +# are not predictable... +echo "Checking client-requested size limit..." +echo "# Checking client-requested size limit..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 \ + -D "cn=Bjorn Jensen,ou=Information Technology Division,ou=People,$BASEDN" -w bjorn \ + -b "$BASEDN" -z 2 "(objectClass=*)" 1.1 \ + >> $TESTOUT 2>&1 +RC=$? +case $RC,$BACKEND in + 4,* | 0,null) + ;; + 0,*) + echo "Search should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif used to create database..." +$LDIFFILTER < $METAOUT > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - meta search/modification didn't succeed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +BASEDN="o=Example,c=US" +echo "Changing password to database \"$BASEDN\"..." +$LDAPPASSWD -h $LOCALHOST -p $PORT3 -D "cn=Manager,$BASEDN" -w $PASSWD \ + -s $PASSWD "cn=Ursula Hampster,ou=Alumni Association,ou=People,$BASEDN" \ + >> $TESTOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Passwd ExOp failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Passwd ExOp failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Binding with newly changed password to database \"$BASEDN\"..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT3 \ + -D "cn=Ursula Hampster,ou=Alumni Association,ou=People,$BASEDN" \ + -w $PASSWD >> $TESTOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "WhoAmI failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + ;; + *) + echo "WhoAmI failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Binding as newly added user to database \"$BASEDN\"..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT3 \ + -D "cn=Added User,ou=Same as above,ou=Meta,$BASEDN" \ + -w $PASSWD >> $TESTOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "WhoAmI failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + ;; + *) + echo "WhoAmI failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Changing password to database \"$BASEDN\"..." +$LDAPPASSWD -h $LOCALHOST -p $PORT3 -D "cn=Manager,$BASEDN" -w $PASSWD \ + -s meta "cn=Added User,ou=Same as above,ou=Meta,$BASEDN" \ + >> $TESTOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Passwd ExOp failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Passwd ExOp failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Binding with newly changed password to database \"$BASEDN\"..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT3 \ + -D "cn=Added User,ou=Same as above,ou=Meta,$BASEDN" \ + -w meta >> $TESTOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "WhoAmI failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + ;; + *) + echo "WhoAmI failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Binding with incorrect password to database \"$BASEDN\"..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT3 \ + -D "cn=Added User,ou=Same as above,ou=Meta,$BASEDN" \ + -w bogus >> $TESTOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "WhoAmI failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC,$BACKEND in + 0,null) + ;; + 0,*) + echo "WhoAmI should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; + 51,*) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + ;; + *) + ;; +esac + +echo "Binding with non-existing user to database \"$BASEDN\"..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT3 \ + -D "cn=Non-existing User,ou=Same as above,ou=Meta,$BASEDN" \ + -w bogus >> $TESTOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "WhoAmI failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC,$BACKEND in + 0,null) + ;; + 0,*) + echo "WhoAmI should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; + 51,*) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + ;; + *) + ;; +esac + +echo "Comparing to database \"$BASEDN\"..." +$LDAPCOMPARE -h $LOCALHOST -p $PORT3 \ + "cn=Another Added Group,ou=Groups,$BASEDN" \ + "member:cn=Added Group,ou=Groups,$BASEDN" >> $TESTOUT 2>&1 +RC=$? +#if test $RC != 6 ; then +# echo "Compare failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit -1 +#fi +case $RC,$BACKEND in + 6,* | 5,null) + ;; + 51,*) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + ;; + *) + echo "Compare failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + ;; +esac + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test036-meta-concurrency b/tests/scripts/test036-meta-concurrency new file mode 100755 index 0000000..f2df862 --- /dev/null +++ b/tests/scripts/test036-meta-concurrency @@ -0,0 +1,242 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +echo "" + +if test $BACKMETA = metano ; then + echo "meta backend not available, test skipped" + exit 0 +fi + +if test $BACKLDAP = ldapno ; then + echo "ldap backend not available, test skipped" + exit 0 +fi + +if test x$TESTLOOPS = x ; then + TESTLOOPS=50 +fi + +if test x$TESTCHILDREN = x ; then + TESTCHILDREN=20 +fi + +rm -rf $TESTDIR + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 + +# NOTE: this could be added to all tests... +if test "$BACKEND" = "bdb" || test "$BACKEND" = "hdb" ; then + if test "x$DB_CONFIG" != "x" ; then \ + if test -f $DB_CONFIG ; then + echo "==> using DB_CONFIG \"$DB_CONFIG\"" + cp $DB_CONFIG $DBDIR1 + cp $DB_CONFIG $DBDIR2 + else + echo "==> DB_CONFIG must point to a valid file (ignored)" + fi + else + echo "==> set \"DB_CONFIG\" to the DB_CONFIG file you want to use for the test." + fi + echo "" +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $METACONF1 > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Using ldapadd to populate the database..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDERED > $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $METACONF2 > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$KILLPIDS $PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + '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 + +echo "Using ldapadd to populate the database..." +$LDAPADD -D "$METAMANAGERDN" -h $LOCALHOST -p $PORT2 -w $PASSWD < \ + $LDIFMETA >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT3..." +. $CONFFILTER $BACKEND $MONITORDB < $METACONF > $CONF3 +$SLAPD -f $CONF3 -h $URI3 -d $LVL $TIMING > $LOG3 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$KILLPIDS $PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT3 \ + '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 > $SEARCHOUT + +mkdir -p $TESTDIR/$DATADIR +METABASEDN="o=Example,c=US" +for f in $DATADIR/do_* ; do + sed -e "s;$BASEDN;$METABASEDN;" $f > $TESTDIR/$f +done + +# add a read that matches only the local database, but selects +# also the remote as candidate; this should be removed to compare +# execution times with test008... +for f in $TESTDIR/$DATADIR/do_read.* ; do + echo "ou=Meta,$METABASEDN" >> $f +done + +# add a read that matches a referral in the local database only, +# but selects also the remote as candidate; this should be removed +# to compare execution times with test008... +for f in $TESTDIR/$DATADIR/do_read.* ; do + echo "cn=Somewhere,ou=Meta,$METABASEDN" >> $f +done + +# add a bind that resolves to a referral +for f in $TESTDIR/$DATADIR/do_bind.* ; do + echo "cn=Foo,ou=Meta,$METABASEDN" >> $f + echo "bar" >> $f + echo "" >> $f + echo "" >> $f +done + +# fix test data to include back-monitor, if available +# NOTE: copies do_* files from $TESTDIR/$DATADIR to $TESTDIR +$MONITORDATA "$MONITORDB" "$TESTDIR/$DATADIR" "$TESTDIR" + +BINDDN="cn=Manager,o=Local" +PASSWD="secret" +echo "Using tester for concurrent server access..." +$SLAPDTESTER -P "$PROGDIR" -d "$TESTDIR" -h $LOCALHOST -p $PORT3 \ + -D "$BINDDN" -w $PASSWD -l $TESTLOOPS -j $TESTCHILDREN \ + -r 20 -i '!REFERRAL' -i '*INVALID_CREDENTIALS' -SS +RC=$? + +if test $RC != 0 ; then + echo "slapd-tester failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to retrieve all the entries..." +$LDAPSEARCH -S "" -b "$METABASEDN" -h $LOCALHOST -p $PORT3 \ + 'objectClass=*' > $SEARCHOUT 2>&1 +RC=$? + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif used to create database..." +$LDIFFILTER < $METACONCURRENCYOUT > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - slapd-meta search/modification didn't succeed" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test037-manage b/tests/scripts/test037-manage new file mode 100755 index 0000000..eb7e8c6 --- /dev/null +++ b/tests/scripts/test037-manage @@ -0,0 +1,219 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $BACKEND = "ldif" ; then + echo "LDIF backend does not support relax control, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1 +$SLAPADD -f $CONF1 -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd Manage operations..." +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 + +echo "Testing modify, add, and delete..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + -e \!relax > \ + $TESTOUT 2>&1 << EOMODS +version: 1 +# +# Working Tests +# + +# +# ObjectClass tests +# + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +# add obsolete auxiliary objectclass +changetype: modify +add: objectClass +objectClass: obsoletePerson + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +# add obsolete attribute +changetype: modify +add: testObsolete +testObsolete: TRUE + +# +# create/modify timestamp test +# + +dn: ou=Groups,dc=example,dc=com +# change creatorsName +changetype: modify +replace: creatorsName +creatorsName: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +# change modifiersName +changetype: modify +replace: modifiersName +modifiersName: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com + +dn: dc=example,dc=com +# change timestamps +changetype: modify +replace: modifyTimestamp +modifyTimestamp: 19700101000000Z +- +replace: createTimestamp +createTimestamp: 19700101000000Z +- + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +# change entryUUID +changetype: modify +replace: entryUUID +entryUUID: badbadba-dbad-1029-92f7-badbadbadbad + +dn: cn=All Staff,dc=example,dc=com +changetype: add +objectClass: groupOfNames +cn: All Staff +member: +creatorsName: cn=Someone +createTimestamp: 19700101000000Z +modifiersName: cn=Someone Else +modifyTimestamp: 19700101000000Z +entryUUID: badbadef-dbad-1029-92f7-badbadbadbad + +# +# Tests that did not work until ITS#5792 +# + +dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example, + dc=com +# update structural object class of entry via objectClass replace +changetype: modify +replace: objectClass +objectClass: obsoletePerson +objectClass: testPerson +- + +dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com +# update structural object class of entry via objectClass add +changetype: modify +add: objectClass +objectClass: testPerson +- + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com +# update structural object class of entry via objectClass delete/add +changetype: modify +delete: objectClass +objectClass: OpenLDAPperson +- +add: objectClass +objectClass: testPerson +- +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to retrieve all the entries..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + 'objectClass=*' '*' creatorsName modifiersName > $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + test $KILLSERVERS != no && kill -HUP $KILLPIDS + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +$LDAPSEARCH -S "" -b "$BASEDN" -s base -h $LOCALHOST -p $PORT1 \ + 'objectClass=*' '*' creatorsName createTimestamp \ + modifiersName modifyTimestamp >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + test $KILLSERVERS != no && kill -HUP $KILLPIDS + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(cn=All Staff)' '*' entryUUID >> $SEARCHOUT 2>&1 +RC=$? +test $KILLSERVERS != no && kill -HUP $KILLPIDS +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +LDIF=$MANAGEOUT + +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 - manage operations did not complete correctly" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test038-retcode b/tests/scripts/test038-retcode new file mode 100755 index 0000000..e4eebbf --- /dev/null +++ b/tests/scripts/test038-retcode @@ -0,0 +1,112 @@ +#! /bin/sh +# $Header$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $RETCODE = retcodeno; then + echo "Retcode overlay not available, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $MCONF > $ADDCONF +$SLAPADD -f $ADDCONF -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Running slapindex to index slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $RETCODECONF > $CONF1 +$SLAPINDEX -f $CONF1 +RC=$? +if test $RC != 0 ; then + echo "warning: slapindex failed ($RC)" + echo " assuming no indexing support" +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd searching..." +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 + +echo "Testing search for timelimitExceeded..." +$LDAPSEARCH -b "cn=timelimitExceeded,ou=RetCodes,$BASEDN" \ + -h $LOCALHOST -p $PORT1 '(objectClass=*)' >> $TESTOUT 2>&1 +RC=$? +if test $RC != 3 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing modify for unwillingToPerform..." +$LDAPMODIFY -D "$MANAGERDN" -w $PASSWD \ + -h $LOCALHOST -p $PORT1 >> $TESTOUT 2>&1 << EOMODS +dn: cn=unwillingToPerform,ou=RetCodes,$BASEDN +changetype: delete +EOMODS +RC=$? +if test $RC != 53 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Testing compare for success after sleep (2 s)..." +$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \ + "cn=Success w/ Delay,ou=RetCodes,$BASEDN" "cn:foo" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapcompare failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test039-glue-ldap-concurrency b/tests/scripts/test039-glue-ldap-concurrency new file mode 100755 index 0000000..b77c89d --- /dev/null +++ b/tests/scripts/test039-glue-ldap-concurrency @@ -0,0 +1,231 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +echo "" + +if test $BACKLDAP = ldapno ; then + echo "ldap backend not available, test skipped" + exit 0 +fi + +if test $RWM = rwmno ; then + echo "rwm (rewrite/remap) overlay not available, test skipped" + exit 0 +fi + +if test x$TESTLOOPS = x ; then + TESTLOOPS=50 +fi + +if test x$TESTOLOOPS = x ; then + TESTOLOOPS=1 +fi + +if test x$TESTCHILDREN = x ; then + TESTCHILDREN=20 +fi + +rm -rf $TESTDIR + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $METACONF1 > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Using ldapadd to populate the database..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDERED > $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $METACONF2 > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$KILLPIDS $PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + '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 + +echo "Using ldapadd to populate the database..." +$LDAPADD -D "$METAMANAGERDN" -h $LOCALHOST -p $PORT2 -w $PASSWD < \ + $LDIFMETA >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT3..." +. $CONFFILTER $BACKEND $MONITORDB < $GLUELDAPCONF > $CONF3 +$SLAPD -f $CONF3 -h $URI3 -d $LVL $TIMING > $LOG3 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$KILLPIDS $PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT3 \ + '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 > $SEARCHOUT + +mkdir -p $TESTDIR/$DATADIR +METABASEDN="o=Example,c=US" +for f in $DATADIR/do_* ; do + sed -e "s;$BASEDN;$METABASEDN;" $f > $TESTDIR/$f +done + +# add a read that matches only the local database, but selects +# also the remote as candidate; this should be removed to compare +# execution times with test008... +for f in $TESTDIR/$DATADIR/do_read.* ; do + echo "ou=Meta,$METABASEDN" >> $f +done + +# add a read that matches a referral in the local database only, +# but selects also the remote as candidate; this should be removed +# to compare execution times with test008... +for f in $TESTDIR/$DATADIR/do_read.* ; do + echo "cn=Somewhere,ou=Meta,$METABASEDN" >> $f +done + +# add a bind that resolves to a referral +for f in $TESTDIR/$DATADIR/do_bind.* ; do + echo "cn=Foo,ou=Meta,$METABASEDN" >> $f + echo "bar" >> $f + echo "" >> $f + echo "" >> $f +done + +# fix test data to include back-monitor, if available +# NOTE: copies do_* files from $TESTDIR/$DATADIR to $TESTDIR +$MONITORDATA "$MONITORDB" "$TESTDIR/$DATADIR" "$TESTDIR" + +echo "Using tester for concurrent server access..." +BINDDN="cn=Manager,o=Local" +PASSWD="secret" +$SLAPDTESTER -P "$PROGDIR" -d "$TESTDIR" -h $LOCALHOST -p $PORT3 \ + -D "$BINDDN" -w $PASSWD \ + -l $TESTLOOPS -L $TESTOLOOPS -j $TESTCHILDREN -r 20 \ + -i '!REFERRAL' -i '*INVALID_CREDENTIALS' -SS +RC=$? + +if test $RC != 0 ; then + echo "slapd-tester failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to retrieve all the entries..." +$LDAPSEARCH -S "" -b "$METABASEDN" -h $LOCALHOST -p $PORT3 \ + '(objectClass=*)' > $SEARCHOUT 2>&1 +RC=$? + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + exit $RC +fi + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif used to create database..." +$LDIFFILTER < $METACONCURRENCYOUT > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - slapd-ldap search/modification didn't succeed" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test040-subtree-rename b/tests/scripts/test040-subtree-rename new file mode 100755 index 0000000..82bf38f --- /dev/null +++ b/tests/scripts/test040-subtree-rename @@ -0,0 +1,209 @@ +#! /bin/sh +# $OpenLDAP$ */ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $BACKEND = bdb ; then + echo "subtree rename not supported by back-$BACKEND" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd searching..." +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 +cat /dev/null > $SEARCHOUT + +# Add +echo "Populating the database..." +echo "# Populating the database..." >> $TESTOUT +$LDAPADD -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + >> $TESTOUT 2>&1 << EOMODS0 +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +o: Example, Inc. +dc: example + +dn: ou=Parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Parent + +dn: ou=Another parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Another parent + +dn: ou=Child,ou=Parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Child + +dn: ou=Grandchild,ou=Child,ou=Parent,dc=example,dc=com +objectClass: organizationalUnit +ou: Grandchild +EOMODS0 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Searching all database..." +echo "# Searching all database (after add)..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Rename (PASS1) +echo "Renaming (PASS1)..." +echo "# Renaming (PASS1)..." >> $TESTOUT +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + >> $TESTOUT 2>&1 << EOMODS1 +dn: ou=Child,ou=Parent,dc=example,dc=com +changetype: modrdn +newrdn: ou=Renamed child +deleteoldrdn: 0 +EOMODS1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Searching all database..." +echo "# Searching all database (after PASS1)..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Rename (PASS2) +echo "Renaming (PASS2)..." +echo "# Renaming (PASS2)..." >> $TESTOUT +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + >> $TESTOUT 2>&1 << EOMODS2 +dn: ou=Parent,dc=example,dc=com +changetype: modrdn +newrdn: ou=Renamed parent +deleteoldrdn: 0 +EOMODS2 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Searching all database..." +echo "# Searching all database (after PASS2)..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Rename (PASS3) +echo "Renaming (PASS3)..." +echo "# Renaming (PASS3)..." >> $TESTOUT +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + >> $TESTOUT 2>&1 << EOMODS3 +dn: ou=Renamed child,ou=Renamed parent,dc=example,dc=com +changetype: modrdn +newrdn: ou=Renamed child +deleteoldrdn: 0 +newsuperior: ou=Another parent,dc=example,dc=com +EOMODS3 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Searching all database..." +echo "# Searching all database (after PASS3)..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' >> $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=$SUBTREERENAMEOUT + +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 diff --git a/tests/scripts/test041-aci b/tests/scripts/test041-aci new file mode 100755 index 0000000..706ec9a --- /dev/null +++ b/tests/scripts/test041-aci @@ -0,0 +1,258 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +case "$BACKEND" in ldif | null) + echo "$BACKEND backend does not support access controls, test skipped" + exit 0 + ;; +esac + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test "$ACI" = "acino" ; then + echo "ACI not enabled, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $ACICONF > $CONF1 +$SLAPADD -f $CONF1 -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd ACI access control..." +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 > $SEARCHOUT +cat /dev/null > $TESTOUT + +# Search must fail +BASEDN="dc=example,dc=com" +echo "Searching \"$BASEDN\" (should fail)..." +echo "# Searching \"$BASEDN\" (should fail)..." >> $SEARCHOUT +$LDAPSEARCH -s base -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectclass=*)' >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 32 ; then + echo "ldapsearch should have failed with noSuchObject ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + if test $RC = 0 ; then + exit -1 + fi + exit $RC +fi + +# Bind must fail +BINDDN="cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjensen +echo "Testing ldapwhoami as ${BINDDN} (should fail)..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW +RC=$? +if test $RC = 0 ; then + echo "ldapwhoami should have failed!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +# Populate ACIs +echo "Writing ACIs as \"$MANAGERDN\"..." +$LDAPMODIFY -D "$MANAGERDN" -w $PASSWD -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS0 +dn: dc=example,dc=com +changetype: modify +add: OpenLDAPaci +OpenLDAPaci: 0#subtree#grant;d,c,s,r;[all]#group/groupOfUniqueNames/uniqueMe + mber#cn=ITD Staff,ou=Groups,dc=example,dc=com +OpenLDAPaci: 1#entry#grant;d;[all]#public# + +dn: ou=People,dc=example,dc=com +changetype: modify +add: OpenLDAPaci +OpenLDAPaci: 0#subtree#grant;x;userPassword#public# +OpenLDAPaci: 1#subtree#grant;w;userPassword#self# +OpenLDAPaci: 2#subtree#grant;w;userPassword#access-id#cn=Bjorn Jensen,ou=Inf + ormation Technology Division,ou=People,dc=example,dc=com + +dn: ou=Groups,dc=example,dc=com +changetype: modify +add: OpenLDAPaci +OpenLDAPaci: 0#entry#grant;s;[all]#public# +OpenLDAPaci: 1#children#grant;r;member;r;uniqueMember#access-id#cn=Bjorn Jen + sen,ou=Information Technology Division,ou=People,dc=example,dc=com +EOMODS0 +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Search must succeed with no results +BASEDN="dc=example,dc=com" +echo "Searching \"$BASEDN\" (should succeed with no results)..." +echo "# Searching \"$BASEDN\" (should succeed with no results)..." >> $SEARCHOUT +$LDAPSEARCH -s base -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectclass=*)' >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + ### TEMPORARY (see ITS#3963) + echo "ldapsearch failed ($RC)! IGNORED..." + ###echo "ldapsearch failed ($RC)!" + ###test $KILLSERVERS != no && kill -HUP $KILLPIDS + ###exit $RC +fi + +BINDDN="cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjensen +echo "Testing ldapwhoami as ${BINDDN}..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Search must succeed +BINDDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjorn +BASEDN="dc=example,dc=com" +echo "Searching \"$BASEDN\" as \"$BINDDN\" (should succeed)..." +echo "# Searching \"$BASEDN\" as \"$BINDDN\" (should succeed)..." >> $SEARCHOUT +$LDAPSEARCH -s base -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + -D "$BINDDN" -w "$BINDPW" \ + '(objectClass=*)' >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Passwd must succeed +BINDDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjorn +TGT="cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com" +NEWPW=jdoe +echo "Setting \"$TGT\" password..." +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w "$BINDPW" -s "$NEWPW" \ + -D "$BINDDN" "$TGT" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldappasswd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Re-change as self... +echo "Changing self password..." +BINDDN="$TGT" +BINDPW=$NEWPW +TGT="cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com" +NEWPW=newcred +$LDAPPASSWD -h $LOCALHOST -p $PORT1 \ + -w "$BINDPW" -s "$NEWPW" \ + -D "$BINDDN" "$TGT" >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldappasswd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Searching groups +BINDPW=$NEWPW +BASEDN="ou=Groups,dc=example,dc=com" +echo "Searching \"$BASEDN\" as \"$BINDDN\" (should succeed)..." +echo "# Searching \"$BASEDN\" as \"$BINDDN\" (should succeed)..." >> $SEARCHOUT +$LDAPSEARCH -s one -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + -D "$BINDDN" -w "$BINDPW" \ + '(objectClass=*)' >> $SEARCHOUT 2>> $TESTOUT +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Search must fail +BINDDN="cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com" +BINDPW=bjensen +echo "Searching \"$BASEDN\" as \"$BINDDN\" (should succeed with no results)..." +echo "# Searching \"$BASEDN\" as \"$BINDDN\" (should succeed with no results)..." >> $SEARCHOUT +$LDAPSEARCH -s one -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + -D "$BINDDN" -w "$BINDPW" \ + '(objectClass=*)' >> $SEARCHOUT 2>> $TESTOUT +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=$ACIOUT + +echo "Filtering ldapsearch results..." +$LDIFFILTER -s mdb=e < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif used to create database..." +$LDIFFILTER -s mdb=e < $LDIF > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - operations did not complete correctly" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test042-valsort b/tests/scripts/test042-valsort new file mode 100755 index 0000000..8f5eb24 --- /dev/null +++ b/tests/scripts/test042-valsort @@ -0,0 +1,229 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 2004-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $VALSORT = valsortno; then + echo "Valsort overlay not available, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 + +$SLAPPASSWD -g -n >$CONFIGPWF +echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $VALSORTCONF > $CONF1 +$SLAPADD -f $CONF1 -l $LDIFVALSORT +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd sorted values operations..." +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 + +echo "Testing ascending and weighted sort" + +FILTER="objectClass=*" +$LDAPSEARCH -b "$VALSORTBASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" > $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering expected ldif..." +$LDIFFILTER < $VALSORTOUT1 > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "Comparison failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Reconfiguring slapd to test valsort descending" + +$LDAPMODIFY -x -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF > \ + $TESTOUT 2>&1 << EOMODS +version: 1 +dn: olcOverlay={0}valsort,olcDatabase={1}$BACKEND,cn=config +changetype: modify +replace: olcValSortAttr +olcValSortAttr: employeeType "ou=users,o=valsort" weighted alpha-descend +olcValSortAttr: ou "ou=users,o=valsort" weighted +olcValSortAttr: mailPreferenceOption "ou=users,o=valsort" numeric-descend +olcValSortAttr: departmentNumber "ou=users,o=valsort" alpha-descend +olcValSortAttr: sn "ou=users,o=valsort" alpha-descend + +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing descending and weighted sort" + +$LDAPSEARCH -b "$VALSORTBASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" > $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering expected ldif..." +$LDIFFILTER < $VALSORTOUT2 > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "Comparison failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Adding a valsort record with weighted ou..." + +$LDAPADD -D "$VALSORTDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + > /dev/null << EOTVALSORT1 +dn: uid=dave,ou=users,o=valsort +objectClass: OpenLDAPperson +uid: dave +sn: nothere +cn: dave +businessCategory: otest +carLicense: TEST +departmentNumber: 42 +displayName: Dave +employeeNumber: 69 +employeeType: {1}contractor +givenName: Dave +ou: {1}Test +ou: {3}Okay +ou: {2}Is +EOTVALSORT1 + +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo ---------------------- +#$LDAPSEARCH -b "o=valsort" -h $LOCALHOST -p $PORT1 + +echo "Adding a non-weighted valsort record with ou..." + +$LDAPADD -D "$VALSORTDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOTVALSORT2 +dn: uid=bill,ou=users,o=valsort +objectClass: OpenLDAPperson +uid: bill +sn: johnson +cn: bill +businessCategory: rtest +carLicense: ABC123 +departmentNumber: 42 +displayName: Bill +employeeNumber: 5150 +employeeType: {1}contractor +givenName: Bill +ou: Test +ou: Okay +ou: Is +EOTVALSORT2 + +RC=$? +if test $RC != 19 ; then + echo "valsort check failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +$LDAPSEARCH -b "$VALSORTBASEDN" -h $LOCALHOST -p $PORT1 \ + "$FILTER" > $SEARCHOUT 2>&1 + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering ldapsearch results..." +$LDIFFILTER -s ldif=e < $SEARCHOUT > $SEARCHFLT +echo "Filtering expected ldif..." +$LDIFFILTER -s ldif=e < $VALSORTOUT3 > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "Comparison failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +test $KILLSERVERS != no && wait + +echo ">>>>> Test succeeded" + +exit 0 diff --git a/tests/scripts/test043-delta-syncrepl b/tests/scripts/test043-delta-syncrepl new file mode 100755 index 0000000..bd6f7ad --- /dev/null +++ b/tests/scripts/test043-delta-syncrepl @@ -0,0 +1,399 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi +if test $ACCESSLOG = accesslogno; then + echo "Accesslog overlay not available, test skipped" + exit 0 +fi +if test $BACKEND = ldif ; then + # Onelevel search does not return entries in order of creation or CSN. + echo "$BACKEND backend unsuitable for syncprov logdb, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1A $DBDIR1B $DBDIR2 + +SPEC="mdb=a,bdb=a,hdb=a" + +# +# Test replication: +# - start provider +# - start consumer +# - populate over ldap +# - perform some modifies and deleted +# - attempt to modify the consumer (referral or chain) +# - retrieve database over ldap and compare against expected results +# + +echo "Starting provider slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $DSRMASTERCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that provider slapd is running..." +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 + +echo "Using ldapadd to create the context prefix entries in the provider..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDEREDCP > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting consumer slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $DSRSLAVECONF > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVEPID $SLAVEPID + read foo +fi +KILLPIDS="$KILLPIDS $SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that consumer slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + '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 + +echo "Using ldapadd to populate the provider directory..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDEREDNOCP > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Stopping the provider, sleeping 10 seconds and restarting it..." +kill -HUP "$PID" +sleep 10 +echo "RESTART" >> $LOG1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID $SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that provider slapd is running..." +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 + +echo "Using ldapmodify to modify provider directory..." + +# +# Do some modifications +# + +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com +changetype: modify +add: drink +drink: Orange Juice +- +delete: sn +sn: Jones +- +add: sn +sn: Jones + +dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +replace: drink +drink: Iced Tea + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: uniquemember +uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com +uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +- +add: uniquemember +uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com +uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: description + +dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +cn: Gern Jensen +sn: Jensen +uid: gjensen +title: Chief Investigator, ITD +postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103 +seealso: cn=All Staff, ou=Groups, dc=example,dc=com +drink: Coffee +homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104 +description: Very odd +facsimiletelephonenumber: +1 313 555 7557 +telephonenumber: +1 313 555 8343 +mail: gjensen@mailgw.example.com +homephone: +1 313 555 8844 + +dn: ou=Retired, ou=People, dc=example,dc=com +changetype: add +objectclass: organizationalUnit +ou: Retired + +dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +cn: Rosco P. Coltrane +sn: Coltrane +uid: rosco +description: Fat tycoon + +dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modrdn +newrdn: cn=Rosco P. Coltrane +deleteoldrdn: 1 +newsuperior: ou=Retired, ou=People, dc=example,dc=com + +dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: delete + +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Using ldapsearch to read all the entries from the provider..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + 'objectclass=*' \* + > $MASTEROUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at provider ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the consumer..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + 'objectclass=*' \* + > $SLAVEOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at consumer ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering provider results..." +$LDIFFILTER -b $BACKEND -s $SPEC < $MASTEROUT | grep -iv "^auditcontext:" > $MASTERFLT +echo "Filtering consumer results..." +$LDIFFILTER -b $BACKEND -s $SPEC < $SLAVEOUT | grep -iv "^auditcontext:" > $SLAVEFLT + +echo "Comparing retrieved entries from provider and consumer..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - provider and consumer databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Stopping consumer to test recovery..." +kill -HUP $SLAVEPID +sleep 10 + +echo "Modifying more entries on the provider..." +$LDAPMODIFY -v -D "$BJORNSDN" -h $LOCALHOST -p $PORT1 -w bjorn >> \ + $TESTOUT 2>&1 << EOMODS +dn: cn=Rosco P. Coltrane, ou=Retired, ou=People, dc=example,dc=com +changetype: delete + +dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +add: drink +drink: Mad Dog 20/20 + +dn: cn=Rosco P. Coltrane, ou=Retired, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +sn: Coltrane +uid: rosco +cn: Rosco P. Coltrane + +dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com +changetype: modify +replace: drink +drink: Red Wine +- +replace: drink + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +changetype: modrdn +newrdn: cn=Some Staff +deleteoldrdn: 1 + +EOMODS + +echo "Restarting consumer..." +echo "RESTART" >> $LOG2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING >> $LOG2 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVEPID $SLAVEPID + read foo +fi +KILLPIDS="$PID $SLAVEPID" + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +if test ! $BACKLDAP = "ldapno" ; then + echo "Try updating the consumer slapd..." + $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com +changetype: modify +add: description +description: This write must fail because directed to a shadow context, +description: unless the chain overlay is configured appropriately ;) + +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." + sleep $SLEEP1 +fi + +echo "Using ldapsearch to read all the entries from the provider..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + 'objectclass=*' \* + > $MASTEROUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at provider ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the consumer..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + 'objectclass=*' \* + > $SLAVEOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at consumer ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo "Filtering provider results..." +$LDIFFILTER -b $BACKEND -s $SPEC < $MASTEROUT | grep -iv "^auditcontext:" > $MASTERFLT +echo "Filtering consumer results..." +$LDIFFILTER -b $BACKEND -s $SPEC < $SLAVEOUT | grep -iv "^auditcontext:" > $SLAVEFLT + +echo "Comparing retrieved entries from provider and consumer..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - provider and consumer databases differ" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test044-dynlist b/tests/scripts/test044-dynlist new file mode 100755 index 0000000..8caf50d --- /dev/null +++ b/tests/scripts/test044-dynlist @@ -0,0 +1,663 @@ +#! /bin/sh +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $DYNLIST = "dynlistno" ; then + echo "dynlist overlay not available, test skipped" + exit 0 +fi + +if test $BACKEND = ldif ; then + # dynlist+ldif fails because back-ldif lacks bi_op_compare() + echo "$BACKEND backend unsuitable for dynlist overlay, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 + +$SLAPPASSWD -g -n >$CONFIGPWF +echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf + +if test $MONITORDB != no ; then + DBIX=2 +else + DBIX=1 +fi + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $MCONF > $ADDCONF +$SLAPADD -f $ADDCONF -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +. $CONFFILTER $BACKEND $MONITORDB < $DYNLISTCONF > $CONF1 + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd searching..." +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 > $SEARCHOUT + +LISTDN="ou=Dynamic Lists,$BASEDN" +echo "Adding a dynamic list..." +$LDAPADD -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + > $TESTOUT 2>&1 << EOMODS +dn: $LISTDN +objectClass: organizationalUnit +ou: Dynamic Lists + +dn: cn=Dynamic List,$LISTDN +objectClass: groupOfURLs +cn: Dynamic List +memberURL: ldap:///ou=People,${BASEDN}?cn,mail?sub?(objectClass=person) +EOMODS + +echo "Testing list search of all attrs..." +echo "# Testing list search of all attrs..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \ + '(cn=Dynamic List)' '*' \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing list search of a listed attr..." +echo "# Testing list search of a listed attr..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \ + '(cn=Dynamic List)' mail \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing list search of a non-listed attr..." +echo "# Testing list search of a non-listed attr..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \ + '(cn=Dynamic List)' objectClass \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing list search with (critical) manageDSAit..." +echo "# Testing list search with (critical) manageDSAit..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 -MM \ + '(cn=Dynamic List)' '*' \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing list compare..." +echo "# Testing list compare..." >> $SEARCHOUT +$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \ + "cn=Dynamic List,$LISTDN" "cn:Bjorn Jensen" \ + >> $SEARCHOUT 2>&1 +RC=$? +case $RC in +5) + echo "ldapcompare returned FALSE ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +6) + echo "ldapcompare returned TRUE ($RC)" + ;; +0) + echo "ldapcompare returned success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapcompare failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac +echo "" >> $SEARCHOUT + +echo "Testing list compare (should return FALSE)..." +echo "# Testing list compare (should return FALSE)..." >> $SEARCHOUT +$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \ + "cn=Dynamic List,$LISTDN" "cn:FALSE" \ + >> $SEARCHOUT 2>&1 +RC=$? +case $RC in +5) + echo "ldapcompare returned FALSE ($RC)" + ;; +6) + echo "ldapcompare returned TRUE ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +0) + echo "ldapcompare returned success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapcompare failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac +echo "" >> $SEARCHOUT + +echo "Testing list compare (should return UNDEFINED)..." +echo "# Testing list compare (should return UNDEFINED)..." >> $SEARCHOUT +$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \ + "cn=Dynamic List,$LISTDN" "dc:UNDEFINED" \ + >> $SEARCHOUT 2>&1 +RC=$? +case $RC in +5) + echo "ldapcompare returned FALSE ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +6) + echo "ldapcompare returned TRUE ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +16|32) + echo "ldapcompare returned UNDEFINED ($RC)" + ;; +0) + echo "ldapcompare returned success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapcompare failed ($RC)" + ;; +esac +echo "" >> $SEARCHOUT + +echo "Testing list compare with manageDSAit..." +echo "# Testing list compare with manageDSAit..." >> $SEARCHOUT +$LDAPCOMPARE -h $LOCALHOST -p $PORT1 -MM \ + "cn=Dynamic List,$LISTDN" "cn:Bjorn Jensen" \ + >> $SEARCHOUT 2>&1 +RC=$? +case $RC in +5) + echo "ldapcompare returned FALSE ($RC)" + ;; +6) + echo "ldapcompare returned TRUE ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +0) + echo "ldapcompare returned success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapcompare failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac +echo "" >> $SEARCHOUT + +echo "Reconfiguring slapd..." +$LDAPMODIFY -x -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF > \ + $TESTOUT 2>&1 << EOMODS +version: 1 +dn: olcOverlay={0}dynlist,olcDatabase={$DBIX}$BACKEND,cn=config +changetype: modify +delete: olcDLattrSet +olcDLattrSet: {0} +- +add: olcDLattrSet +olcDLattrSet: groupOfURLs memberURL sn:cn mail +- +EOMODS + +echo "==========================================================" >> $LOG1 + +echo "Testing attribute mapping" + +echo "Testing list search of all (mapped) attrs..." +echo "# Testing list search of all (mapped) attrs..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \ + '(cn=Dynamic List)' '*' \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing list search of a (mapped) listed attr..." +echo "# Testing list search of a (mapped) listed attr..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \ + '(cn=Dynamic List)' sn \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing list search of a (n unmapped) listed attr..." +echo "# Testing list search of a (n unmapped) listed attr..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \ + '(cn=Dynamic List)' mail \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing list compare (mapped attrs) ..." +echo "# Testing list compare (mapped attrs) ..." >> $SEARCHOUT +$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \ + "cn=Dynamic List,$LISTDN" "sn:Bjorn Jensen" \ + >> $SEARCHOUT 2>&1 +RC=$? +case $RC in +5) + echo "ldapcompare returned FALSE ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +6) + echo "ldapcompare returned TRUE ($RC)" + ;; +0) + echo "ldapcompare returned success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapcompare failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac +echo "" >> $SEARCHOUT + +echo "Testing list compare (mapped attrs; should return FALSE)..." +echo "# Testing list compare (mapped attrs; should return FALSE)..." >> $SEARCHOUT +$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \ + "cn=Dynamic List,$LISTDN" "sn:FALSE" \ + >> $SEARCHOUT 2>&1 +RC=$? +case $RC in +5) + echo "ldapcompare returned FALSE ($RC)" + ;; +6) + echo "ldapcompare returned TRUE ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +0) + echo "ldapcompare returned success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapcompare failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac +echo "" >> $SEARCHOUT + +echo "Reconfiguring slapd..." +$LDAPMODIFY -x -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF > \ + $TESTOUT 2>&1 << EOMODS +version: 1 +dn: olcOverlay={0}dynlist,olcDatabase={$DBIX}$BACKEND,cn=config +changetype: modify +delete: olcDLattrSet +olcDLattrSet: {0} +- +add: olcDLattrSet +olcDLattrSet: groupOfURLs memberURL member +- +EOMODS + +echo "==========================================================" >> $LOG1 + +echo "Adding a dynamic list..." +$LDAPADD -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + > $TESTOUT 2>&1 << EOMODS +dn: cn=Dynamic List of Members,$LISTDN +objectClass: groupOfURLs +cn: Dynamic List of Members +memberURL: ldap:///ou=People,${BASEDN}??sub?(objectClass=person) +EOMODS + +echo "Testing list search of all attrs..." +echo "# Testing list search of all attrs..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \ + '(cn=Dynamic List of Members)' '*' \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing list search of a listed attr..." +echo "# Testing list search of a listed attr..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \ + '(cn=Dynamic List of Members)' member \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing list search of a non-listed attr..." +echo "# Testing list search of a non-listed attr..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \ + '(cn=Dynamic List of Members)' objectClass \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing list search with (critical) manageDSAit..." +echo "# Testing list search with (critical) manageDSAit..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 -MM \ + '(&(cn=Dynamic List of Members)(objectClass=groupOfURLs))' '*' \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +CMPDN="$BJORNSDN" +echo "Testing list compare..." +echo "# Testing list compare..." >> $SEARCHOUT +$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \ + "cn=Dynamic List of Members,$LISTDN" "member:$CMPDN" \ + >> $SEARCHOUT 2>&1 +RC=$? +case $RC in +5) + echo "ldapcompare returned FALSE ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +6) + echo "ldapcompare returned TRUE ($RC)" + ;; +0) + echo "ldapcompare returned success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapcompare failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac +echo "" >> $SEARCHOUT + +CMPDN="$BADBJORNSDN" +echo "Testing list compare (should return FALSE)..." +echo "# Testing list compare... (should return FALSE)" >> $SEARCHOUT +$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \ + "cn=Dynamic List of Members,$LISTDN" "member:$CMPDN" \ + >> $SEARCHOUT 2>&1 +RC=$? +case $RC in +5) + echo "ldapcompare returned FALSE ($RC)" + ;; +6) + echo "ldapcompare returned TRUE ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +0) + echo "ldapcompare returned success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapcompare failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac +echo "" >> $SEARCHOUT + +CMPDN="$BJORNSDN" +echo "Testing list compare (should return FALSE)..." +echo "# Testing list compare (should return FALSE)..." >> $SEARCHOUT +$LDAPCOMPARE -h $LOCALHOST -p $PORT1 \ + "cn=Dynamic List of Members,$LISTDN" "member:cn=Foo Bar" \ + >> $SEARCHOUT 2>&1 +RC=$? +case $RC in +5) + echo "ldapcompare returned FALSE ($RC)" + ;; +6) + echo "ldapcompare returned TRUE ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +0) + echo "ldapcompare returned success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapcompare failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac +echo "" >> $SEARCHOUT + +echo "Testing list compare with manageDSAit..." +echo "# Testing list compare with manageDSAit..." >> $SEARCHOUT +$LDAPCOMPARE -h $LOCALHOST -p $PORT1 -MM \ + "cn=Dynamic List,$LISTDN" "member:$CMPDN" \ + >> $SEARCHOUT 2>&1 +RC=$? +case $RC in +5) + echo "ldapcompare returned FALSE ($RC)" + ;; +6) + echo "ldapcompare returned TRUE ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +0) + echo "ldapcompare returned success ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +*) + echo "ldapcompare failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac +echo "" >> $SEARCHOUT + +echo "==========================================================" >> $LOG1 + +echo "Testing dgIdentity..." + +# Set ACL, require authentication to get list contents +$LDAPMODIFY -x -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF > \ + $TESTOUT 2>&1 << EOMODS +version: 1 +dn: olcDatabase={$DBIX}$BACKEND,cn=config +changetype: modify +add: olcAccess +olcAccess: to dn.base="cn=Dynamic List of Members,$LISTDN" by * read +olcAccess: to * by users read by * search +EOMODS + +echo "Testing list search without dgIdentity..." +echo "# Testing list search without dgIdentity..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \ + '(cn=Dynamic List of Members)' '*' \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + > $TESTOUT 2>&1 << EOMODS +dn: cn=Dynamic List of Members,$LISTDN +changetype: modify +add: objectClass +objectClass: dgIdentityAux +- +add: dgIdentity +dgIdentity: $CMPDN +EOMODS + +echo "Testing list search with dgIdentity..." +echo "# Testing list search with dgIdentity..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \ + '(cn=Dynamic List of Members)' '*' \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing dgAuthz..." + +CMPDN="cn=Bjorn Jensen,ou=Information Technology Division,ou=People,$BASEDN" +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + > $TESTOUT 2>&1 << EOMODS +dn: cn=Dynamic List of Members,$LISTDN +changetype: modify +add: dgAuthz +dgAuthz: dn:$BABSDN +EOMODS + +echo "Testing list search with dgIdentity and dgAuthz anonymously..." +echo "# Testing list search with dgIdentity and dgAuthz anonymously..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \ + '(cn=Dynamic List of Members)' '*' \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Testing list search with dgIdentity and dgAuthz as the authorized identity..." +echo "# Testing list search with dgIdentity and dgAuthz as the authorized identity..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$LISTDN" -h $LOCALHOST -p $PORT1 \ + -D "$BABSDN" -w bjensen \ + '(cn=Dynamic List of Members)' '*' \ + >> $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=$DYNLISTOUT + +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 diff --git a/tests/scripts/test045-syncreplication-proxied b/tests/scripts/test045-syncreplication-proxied new file mode 100755 index 0000000..c6d0399 --- /dev/null +++ b/tests/scripts/test045-syncreplication-proxied @@ -0,0 +1,872 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + + +# test now handles known issues +#if test x"$PROXYSYNC" = x ; then +# echo "Test disabled; set PROXYSYNC=yes to enable" +# exit 0 +#fi + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $BACKLDAP = ldapno; then + echo "LDAP backend not available, test skipped" + exit 0 +fi + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi + +if test $MONITORDB = no; then + echo "Monitor backend not available, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 + +# +# Test replication: +# - start master +# - start slave +# - populate over ldap +# - perform some modifies and deleted +# - attempt to modify the slave (referral or chain) +# - retrieve database over ldap and compare against expected results +# + +echo "Starting master slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $SRMASTERCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +MASTERPID=$! +if test $WAIT != 0 ; then + echo MASTERPID $MASTERPID + read foo +fi +KILLPIDS="$MASTERPID" + +sleep 1 + +echo "Using ldapsearch to check that master slapd is running..." +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 + +echo "Using ldapadd to create the context prefix entry in the master..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDEREDCP > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting slave slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $RSLAVECONF > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVEPID $SLAVEPID + read foo +fi +KILLPIDS="$MASTERPID $SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that slave slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + '(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 + +echo "Starting proxy slapd on TCP/IP port $PORT3..." +. $CONFFILTER $BACKEND $MONITORDB < $PLSRSLAVECONF > $CONF3 +$SLAPD -f $CONF3 -h $URI3 -d $LVL $TIMING > $LOG3 2>&1 & +PROXYPID=$! +if test $WAIT != 0 ; then + echo PROXYPID $PROXYPID + read foo +fi +KILLPIDS="$MASTERPID $SLAVEPID $PROXYPID" + +sleep 1 + +echo "Using ldapsearch to check that proxy slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT3 \ + '(objectClass=*)' > /dev/null 2>&1 + RC=$? + if test $RC = 0 || test $RC = 53 ; then + break + fi + echo "Waiting 5 seconds for slapd to start..." + sleep 5 +done + +case $RC in +0 ) + echo "ldapsearch should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +53) + ;; +*) + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +CHECK=1 +echo "$CHECK > Using ldapadd to populate the master directory..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDEREDNOCP > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# get master contextCSN +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + -s base '(objectClass=*)' contextCSN > "${MASTEROUT}.$CHECK" 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# check slave contextCSN +sleep 1 +for i in 1 2 3; do + $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + -s base '(objectClass=*)' contextCSN > "${SLAVEOUT}.$CHECK" 2>&1 + RC=$? + + if test $RC != 0 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + $CMP ${MASTEROUT}.$CHECK ${SLAVEOUT}.$CHECK > $CMPOUT + + if test $? = 0 ; then + break + fi + + echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." + sleep $SLEEP1 +done + +#echo "Using ldapsearch to read all the entries from the master..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' > "${MASTEROUT}.$CHECK" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Using ldapsearch to read all the entries from the slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > "${SLAVEOUT}.$CHECK" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Filtering master results..." +$LDIFFILTER < "${MASTEROUT}.$CHECK" > $MASTERFLT +#echo "Filtering slave results..." +$LDIFFILTER < "${SLAVEOUT}.$CHECK" > $SLAVEFLT + +echo "$CHECK < Comparing retrieved entries from master and slave..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and slave databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +CHECK=`expr $CHECK + 1` +echo "$CHECK > Stopping the provider, sleeping $SLEEP2 seconds and restarting it..." +kill -HUP "$MASTERPID" +wait $MASTERPID +sleep $SLEEP2 + +echo "======================= RESTART =======================" >> $LOG1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 & +MASTERPID=$! +if test $WAIT != 0 ; then + echo MASTERPID $MASTERPID + read foo +fi +KILLPIDS="$MASTERPID $SLAVEPID $PROXYPID" + +sleep 1 + +echo "Using ldapsearch to check that master slapd is running..." +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 + +echo "Using ldapmodify to modify master directory..." + +# +# Do some modifications +# + +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com +changetype: modify +add: drink +drink: Orange Juice +- +delete: sn +sn: Jones +- +add: sn +sn: Jones + +dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +replace: drink +drink: Iced Tea + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: uniquemember +uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com +uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +- +add: uniquemember +uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com +uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +changetype: modify +delete: cn +cn: Biiff Jensen + +dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +cn: Gern Jensen +sn: Jensen +uid: gjensen +title: Chief Investigator, ITD +postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103 +seealso: cn=All Staff, ou=Groups, dc=example,dc=com +drink: Coffee +homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104 +description: Very odd +facsimiletelephonenumber: +1 313 555 7557 +telephonenumber: +1 313 555 8343 +mail: gjensen@mailgw.example.com +homephone: +1 313 555 8844 + +dn: ou=Retired, ou=People, dc=example,dc=com +changetype: add +objectclass: organizationalUnit +ou: Retired + +dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +cn: Rosco P. Coltrane +sn: Coltrane +uid: rosco +description: Fat tycoon + +dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modrdn +newrdn: cn=Rosco P. Coltrane +deleteoldrdn: 1 +newsuperior: ou=Retired, ou=People, dc=example,dc=com + +dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: delete +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# get master contextCSN +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + -s base '(objectClass=*)' contextCSN > "${MASTEROUT}.$CHECK" 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# check slave contextCSN +for i in 1 2 3; do + echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." + sleep $SLEEP1 + + $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + -s base '(objectClass=*)' contextCSN > "${SLAVEOUT}.$CHECK" 2>&1 + RC=$? + + if test $RC != 0 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + $CMP ${MASTEROUT}.$CHECK ${SLAVEOUT}.$CHECK > $CMPOUT + + if test $? = 0 ; then + break + fi +done + +#echo "Using ldapsearch to read all the entries from the master..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' > "${MASTEROUT}.$CHECK" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Using ldapsearch to read all the entries from the slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > "${SLAVEOUT}.$CHECK" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Filtering master results..." +$LDIFFILTER < "${MASTEROUT}.$CHECK" > $MASTERFLT +#echo "Filtering slave results..." +$LDIFFILTER < "${SLAVEOUT}.$CHECK" > $SLAVEFLT + +echo "$CHECK < Comparing retrieved entries from master and slave..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and slave databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +CHECK=`expr $CHECK + 1` +echo "$CHECK > Stopping proxy to test recovery..." +kill -HUP $PROXYPID +wait $PROXYPID + +echo "Modifying more entries on the master..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD >> \ + $TESTOUT 2>&1 << EOMODS +dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +add: description +description: proxy is down... + +dn: cn=James T. Kirk, ou=Retired, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +sn: Kirk +uid: jtk +cn: James T. Kirk + +dn: cn=Tiberius J. Hooker, ou=Retired, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +sn: Hooker +uid: tjh +cn: Tiberius J. Hooker + +EOMODS + +echo "Restarting proxy..." +echo "======================= RESTART =======================" >> $LOG3 +$SLAPD -f $CONF3 -h $URI3 -d $LVL $TIMING >> $LOG3 2>&1 & +PROXYPID=$! +if test $WAIT != 0 ; then + echo PROXYPID $PROXYPID + read foo +fi +KILLPIDS="$MASTERPID $SLAVEPID $PROXYPID" + +# get master contextCSN +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + -s base '(objectClass=*)' contextCSN > "${MASTEROUT}.$CHECK" 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# check slave contextCSN +for i in 1 2 3 4 5; do + echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." + sleep $SLEEP1 + + $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + -s base '(objectClass=*)' contextCSN > "${SLAVEOUT}.$CHECK" 2>&1 + RC=$? + + if test $RC != 0 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + $CMP ${MASTEROUT}.$CHECK ${SLAVEOUT}.$CHECK > $CMPOUT + + if test $? = 0 ; then + break + fi +done + +#echo "Using ldapsearch to read all the entries from the master..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' > "${MASTEROUT}.$CHECK" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Using ldapsearch to read all the entries from the slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > "${SLAVEOUT}.$CHECK" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Filtering master results..." +$LDIFFILTER < "${MASTEROUT}.$CHECK" > $MASTERFLT +#echo "Filtering slave results..." +$LDIFFILTER < "${SLAVEOUT}.$CHECK" > $SLAVEFLT + +echo "$CHECK < Comparing retrieved entries from master and slave..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and slave databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +CHECK=`expr $CHECK + 1` +echo "$CHECK > Try updating the slave slapd..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com +changetype: modify +add: description +description: This write must fail because directed to a shadow context, +description: unless the chain overlay is configured appropriately ;) + +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# get master contextCSN +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + -s base '(objectClass=*)' contextCSN > "${MASTEROUT}.$CHECK" 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# check slave contextCSN +sleep 1 + +for i in 1 2 3; do + $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + -s base '(objectClass=*)' contextCSN > "${SLAVEOUT}.$CHECK" 2>&1 + RC=$? + + if test $RC != 0 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + $CMP ${MASTEROUT}.$CHECK ${SLAVEOUT}.$CHECK > $CMPOUT + + if test $? = 0 ; then + break + fi + + echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." + sleep $SLEEP1 +done + +#echo "Using ldapsearch to read all the entries from the master..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' > "${MASTEROUT}.$CHECK" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Using ldapsearch to read all the entries from the slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ +'(objectClass=*)' > "${SLAVEOUT}.$CHECK" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Filtering master results..." +$LDIFFILTER < "${MASTEROUT}.$CHECK" > $MASTERFLT +#echo "Filtering slave results..." +$LDIFFILTER < "${SLAVEOUT}.$CHECK" > $SLAVEFLT + +echo "$CHECK < Comparing retrieved entries from master and slave..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and slave databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +CHECK=`expr $CHECK + 1` +echo "$CHECK > Stopping consumer to test recovery..." +kill -HUP $SLAVEPID +wait $SLAVEPID + +echo "Modifying more entries on the master..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD >> \ + $TESTOUT 2>&1 << EOMODS +dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +add: drink +drink: Mad Dog 20/20 + +EOMODS + +echo "Waiting $SLEEP2 seconds for syncrepl to retry..." +sleep $SLEEP2 + +echo "Restarting consumer..." +echo "======================= RESTART =======================" >> $LOG2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING >> $LOG2 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVEPID $SLAVEPID + read foo +fi +KILLPIDS="$MASTERPID $SLAVEPID $PROXYPID" + +# get master contextCSN +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + -s base '(objectClass=*)' contextCSN > "${MASTEROUT}.$CHECK" 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# check slave contextCSN + +for i in 1 2 3 4 5; do + echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." + sleep $SLEEP1 + + $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + -s base '(objectClass=*)' contextCSN > "${SLAVEOUT}.$CHECK" 2>&1 + RC=$? + + if test $RC != 0 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + $CMP ${MASTEROUT}.$CHECK ${SLAVEOUT}.$CHECK > $CMPOUT + + if test $? = 0 ; then + break + fi +done + +#echo "Using ldapsearch to read all the entries from the master..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' > "${MASTEROUT}.$CHECK" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Using ldapsearch to read all the entries from the slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > "${SLAVEOUT}.$CHECK" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Filtering master results..." +$LDIFFILTER < "${MASTEROUT}.$CHECK" > $MASTERFLT +#echo "Filtering slave results..." +$LDIFFILTER < "${SLAVEOUT}.$CHECK" > $SLAVEFLT + +echo "$CHECK < Comparing retrieved entries from master and slave..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + # FIXME: keep the original workaround in place, in case we needed again + if test 1 = 1 ; then + echo "test failed - master and slave databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + + echo " test failed - master and slave databases differ (ignored by now)" + echo " Stopping proxy to see if it auto-recovers..." + kill -HUP $PROXYPID + wait $PROXYPID + + echo " ${CHECK}.1 > Restarting proxy..." + echo "======================= RESTART =======================" >> $LOG3 + $SLAPD -f $CONF3 -h $URI3 -d $LVL $TIMING >> $LOG3 2>&1 & + PROXYPID=$! + if test $WAIT != 0 ; then + echo PROXYPID $PROXYPID + read foo + fi + KILLPIDS="$MASTERPID $SLAVEPID $PROXYPID" + + echo " Waiting $SLEEP2 seconds for syncrepl to receive changes..." + sleep $SLEEP2 + + #echo "Using ldapsearch to read all the entries from the slave..." + $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > "${SLAVEOUT}.5.1" 2>&1 + RC=$? + + if test $RC != 0 ; then + echo " ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + #echo "Filtering slave results..." + $LDIFFILTER < "${SLAVEOUT}.5.1" > $SLAVEFLT + + echo " ${CHECK}.1 < Comparing retrieved entries from master and slave..." + $CMP $MASTERFLT $SLAVEFLT > $CMPOUT + + if test $? != 0 ; then + echo " test failed - master and slave databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi +fi + +# +# Modifications formerly known to fail +# +CHECK=`expr $CHECK + 1` +echo "$CHECK > Performing modifications that were formerly known to fail..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +# First, back out previous change +dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +delete: drink +drink: Mad Dog 20/20 + +# From now on, perform modifications that were formerly known to fail +dn: cn=All Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: description + +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# get master contextCSN +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + -s base '(objectClass=*)' contextCSN > "${MASTEROUT}.$CHECK" 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# check slave contextCSN +sleep 1 +for i in 1 2 3; do + $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + -s base '(objectClass=*)' contextCSN > "${SLAVEOUT}.$CHECK" 2>&1 + RC=$? + + if test $RC != 0 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + $CMP ${MASTEROUT}.$CHECK ${SLAVEOUT}.$CHECK > $CMPOUT + + if test $? = 0 ; then + break + fi + + echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." + sleep $SLEEP1 +done + +#echo "Using ldapsearch to read all the entries from the master..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' > "${MASTEROUT}.$CHECK" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Using ldapsearch to read all the entries from the slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > "${SLAVEOUT}.$CHECK" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Filtering master results..." +$LDIFFILTER < "${MASTEROUT}.$CHECK" > $MASTERFLT +#echo "Filtering slave results..." +$LDIFFILTER < "${SLAVEOUT}.$CHECK" > $SLAVEFLT + +echo "$CHECK < Comparing retrieved entries from master and slave..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and slave databases differ (ignored by now)" + #echo "test failed - master and slave databases differ" + #test $KILLSERVERS != no && kill -HUP $KILLPIDS + #exit 1 +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test046-dds b/tests/scripts/test046-dds new file mode 100755 index 0000000..708429b --- /dev/null +++ b/tests/scripts/test046-dds @@ -0,0 +1,575 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 2005-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +case $BACKEND in ldif | null) + # LDIF lacks ACL support, NULL cannot hold dynamic entries + echo "Test does not support $BACKEND backend, test skipped" + exit 0 +esac + +if test $DDS = ddsno; then + echo "Dynamic Directory Services overlay not available, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $MCONF > $ADDCONF +$SLAPADD -f $ADDCONF -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Running slapindex to index slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $DDSCONF > $CONF1 +$SLAPINDEX -f $CONF1 +RC=$? +if test $RC != 0 ; then + echo "warning: slapindex failed ($RC)" + echo " assuming no indexing support" +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing slapd searching..." +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 > $SEARCHOUT + +echo "Creating a dynamic entry..." +$LDAPADD -D $MANAGERDN -w $PASSWD -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS +dn: cn=Dynamic Object,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: dynamicObject +cn: Dynamic Object +sn: Object +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Refreshing the newly created dynamic entry..." +$LDAPEXOP -D $MANAGERDN -w $PASSWD -h $LOCALHOST -p $PORT1 \ + "refresh" "cn=Dynamic Object,dc=example,dc=com" "120" \ + >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapexop failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Modifying the newly created dynamic entry..." +$LDAPMODIFY -D $MANAGERDN -w $PASSWD -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS +dn: cn=Dynamic Object,dc=example,dc=com +changetype: modify +add: userPassword +userPassword: dynamic +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Binding as the newly created dynamic entry..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT1 \ + -D "cn=Dynamic Object,dc=example,dc=com" -w dynamic +RC=$? +if test $RC != 0 ; then + echo "ldapwhoami failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Creating a dynamic entry subordinate to another..." +$LDAPADD -D $MANAGERDN -w $PASSWD -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS +dn: cn=Subordinate Dynamic Object,cn=Dynamic Object,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: dynamicObject +cn: Subordinate Dynamic Object +sn: Object +userPassword: dynamic +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +SEARCH=0 + +SEARCH=`expr $SEARCH + 1` +sleep $SLEEP0 +echo "# [$SEARCH] Searching the dynamic portion of the database..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=dynamicObject)' '*' entryTtl \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Creating a static entry subordinate to a dynamic one (should fail)..." +$LDAPADD -D $MANAGERDN -w $PASSWD -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS +dn: cn=Subordinate Static Object,cn=Dynamic Object,dc=example,dc=com +objectClass: inetOrgPerson +cn: Subordinate Static Object +sn: Object +userPassword: static +EOMODS +RC=$? +case $RC in +0) + echo "ldapadd should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +19) + echo "ldapadd failed ($RC)" + ;; +*) + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Turning a static into a dynamic entry (should fail)..." +$LDAPMODIFY -D $MANAGERDN -w $PASSWD -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS +dn: ou=People,dc=example,dc=com +changetype: modify +add: objectClass +objectClass: dynamicObject +EOMODS +RC=$? +case $RC in +0) + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +65) + echo "ldapmodify failed ($RC)" + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Turning a dynamic into a static entry (should fail)..." +$LDAPMODIFY -D $MANAGERDN -w $PASSWD -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS +dn: cn=Dynamic Object,dc=example,dc=com +changetype: modify +delete: objectClass +objectClass: dynamicObject +EOMODS +RC=$? +case $RC in +0) + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +65) + echo "ldapmodify failed ($RC)" + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Renaming a dynamic entry..." +$LDAPMODIFY -D $MANAGERDN -w $PASSWD -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS +dn: cn=Subordinate Dynamic Object,cn=Dynamic Object,dc=example,dc=com +changetype: modrdn +newrdn: cn=Renamed Dynamic Object +deleteoldrdn: 1 +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapmodrdn failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +SEARCH=`expr $SEARCH + 1` +sleep $SLEEP0 +echo "# [$SEARCH] Searching the dynamic portion of the database..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=dynamicObject)' '*' entryTtl \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Refreshing the initial dynamic entry to make it expire earlier than the subordinate..." +$LDAPEXOP -D $MANAGERDN -w $PASSWD -h $LOCALHOST -p $PORT1 \ + "refresh" "cn=Dynamic Object,dc=example,dc=com" "1" \ + >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapexop failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +SLEEP=10 +echo "Waiting $SLEEP seconds to force a subordinate/superior expiration conflict..." +sleep $SLEEP + +echo "Re-vitalizing the initial dynamic entry..." +$LDAPEXOP -D $MANAGERDN -w $PASSWD -h $LOCALHOST -p $PORT1 \ + "refresh" "cn=Dynamic Object,dc=example,dc=com" "120" \ + >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapexop failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Re-renaming the subordinate dynamic entry (new superior)..." +$LDAPMODIFY -D $MANAGERDN -w $PASSWD -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS +dn: cn=Renamed Dynamic Object,cn=Dynamic Object,dc=example,dc=com +changetype: modrdn +newrdn: cn=Renamed Dynamic Object +deleteoldrdn: 1 +newsuperior: dc=example,dc=com +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapmodrdn failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +SEARCH=`expr $SEARCH + 1` +sleep $SLEEP0 +echo "# [$SEARCH] Searching the dynamic portion of the database..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=dynamicObject)' '*' entryTtl \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Deleting a dynamic entry..." +$LDAPMODIFY -D $MANAGERDN -w $PASSWD -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS +dn: cn=Dynamic Object,dc=example,dc=com +changetype: delete +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapdelete failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +SEARCH=`expr $SEARCH + 1` +sleep $SLEEP0 +echo "# [$SEARCH] Searching the dynamic portion of the database..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=dynamicObject)' '*' entryTtl \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Refreshing the remaining dynamic entry..." +$LDAPEXOP -D $MANAGERDN -w $PASSWD -h $LOCALHOST -p $PORT1 \ + "refresh" "cn=Renamed Dynamic Object,dc=example,dc=com" "1" \ + >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapexop failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +SEARCH=`expr $SEARCH + 1` +sleep $SLEEP0 +echo "# [$SEARCH] Searching the dynamic portion of the database..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=dynamicObject)' '*' entryTtl \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +SLEEP=15 +echo "Waiting $SLEEP seconds for remaining entry to expire..." +sleep $SLEEP + +SEARCH=`expr $SEARCH + 1` +sleep $SLEEP0 +echo "# [$SEARCH] Searching the dynamic portion of the database..." >> $SEARCHOUT +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=dynamicObject)' '*' entryTtl \ + >> $SEARCHOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Meeting +MEETINGDN="cn=Meeting,ou=Groups,dc=example,dc=com" +echo "Creating a meeting as $BJORNSDN..." +$LDAPMODIFY -D "$BJORNSDN" -w bjorn -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS +dn: $MEETINGDN +changetype: add +objectClass: groupOfNames +objectClass: dynamicObject +cn: Meeting +member: $BJORNSDN + +dn: $MEETINGDN +changetype: modify +add: member +member: $JOHNDDN +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Refreshing the meeting as $BJORNSDN..." +$LDAPEXOP -D "$BJORNSDN" -w bjorn -h $LOCALHOST -p $PORT1 \ + "refresh" "$MEETINGDN" "120" \ + >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapexop failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Joining the meeting as $BABSDN..." +$LDAPMODIFY -D "$BABSDN" -w bjensen -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS +dn: $MEETINGDN +changetype: modify +add: member +member: $BABSDN +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Trying to add a member as $BABSDN (should fail)..." +$LDAPMODIFY -D "$BABSDN" -w bjensen -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS +dn: $MEETINGDN +changetype: modify +add: member +member: $MELLIOTDN +EOMODS +RC=$? +case $RC in +0) + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +50) + echo "ldapmodify failed ($RC)" + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Refreshing the meeting as $BABSDN..." +$LDAPEXOP -D "$BABSDN" -w bjensen -h $LOCALHOST -p $PORT1 \ + "refresh" "$MEETINGDN" "180" \ + >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapexop failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Trying to refresh the meeting anonymously (should fail)..." +$LDAPEXOP -h $LOCALHOST -p $PORT1 \ + "refresh" "$MEETINGDN" "240" \ + >> $TESTOUT 2>&1 +RC=$? +if test $RC = 0 ; then + echo "ldapexop should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo "Trying to refresh the meeting as $JAJDN (should fail)..." +$LDAPEXOP -D "$JAJDN" -w "jaj" -h $LOCALHOST -p $PORT1 \ + "refresh" "$MEETINGDN" "240" \ + >> $TESTOUT 2>&1 +RC=$? +if test $RC = 0 ; then + echo "ldapexop should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo "Trying to delete the meeting as $BABSDN (should fail)..." +$LDAPMODIFY -D "$BABSDN" -w bjensen -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS +dn: $MEETINGDN +changetype: delete +EOMODS +RC=$? +case $RC in +0) + echo "ldapdelete should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; +50) + echo "ldapdelete failed ($RC)" + ;; +*) + echo "ldapdelete failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Deleting the meeting as $BJORNSDN..." +$LDAPMODIFY -D "$BJORNSDN" -w bjorn -h $LOCALHOST -p $PORT1 \ + >> $TESTOUT 2>&1 << EOMODS +dn: $MEETINGDN +changetype: delete +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapdelete failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +LDIF=$DDSOUT + +# dds removes entryTtl and re-adds it, changing the order of attributes +echo "Filtering ldapsearch results..." +$LDIFFILTER -s a < $SEARCHOUT > $SEARCHFLT +grep -i -v -e '^entryttl: ' < $SEARCHFLT > $SEARCHFLT2 +echo "Filtering original ldif used to create database..." +$LDIFFILTER -s a < $LDIF > $LDIFFLT +grep -i -v -e '^entryttl: ' < $LDIFFLT > $LDIFFLT2 +echo "Comparing filter output..." +$CMP $SEARCHFLT2 $LDIFFLT2 > $CMPOUT + +if test $? != 0 ; then + echo "Comparison failed" + exit 1 +fi + +echo "Listing entryTtl values from ldapsearch results..." +grep -i -e '^entryttl: ' < $SEARCHFLT | awk '{ print $2 }' > $SEARCHFLT2 +echo "Listing entryTtl values from original ldif used to create database..." +grep -i -e '^entryttl: ' < $LDIFFLT | awk '{ print $2 }' > $LDIFFLT2 + +if ! type paste >/dev/null 2>&1; then + echo "Cannot find 'paste' command, skipping entryTtl checks..." +else + echo "Checking entryTtl appears to decrease with time..." + paste $SEARCHFLT2 $LDIFFLT2 | while read resultTTL savedTTL; do + if [ `expr $savedTTL - $resultTTL` -lt $SLEEP0 ]; then + echo "TTL has not reduced accordingly" + exit 1 + fi + done +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test047-ldap b/tests/scripts/test047-ldap new file mode 100755 index 0000000..9df445c --- /dev/null +++ b/tests/scripts/test047-ldap @@ -0,0 +1,754 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +echo "" + +if test $BACKLDAP = ldapno ; then + echo "ldap backend not available, test skipped" + exit 0 +fi + +if test $RWM = rwmno ; then + echo "rwm (rewrite/remap) overlay not available, test skipped" + exit 0 +fi + +rm -rf $TESTDIR + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 + +echo "Starting slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $METACONF1 > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Using ldapadd to populate the database..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDERED > $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $METACONF2 > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$KILLPIDS $PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + '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 + +echo "Using ldapadd to populate the database..." +$LDAPADD -D "$METAMANAGERDN" -h $LOCALHOST -p $PORT2 -w $PASSWD < \ + $LDIFMETA >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT3..." +. $CONFFILTER $BACKEND $MONITORDB < $GLUELDAPCONF > $CONF3 +$SLAPD -f $CONF3 -h $URI3 -d $LVL $TIMING > $LOG3 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$KILLPIDS $PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT3 \ + '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 > $SEARCHOUT + +BASEDN="o=Example,c=US" +echo "Searching base=\"$BASEDN\"..." +echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 -b "$BASEDN" >> $SEARCHOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Search failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +# ITS#4195: spurious matchedDN when the search scopes the main target, +# and the searchBase is not present, so that target returns noSuchObject +BASEDN="ou=Meta,o=Example,c=US" +echo "Searching base=\"$BASEDN\"..." +echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 -b "$BASEDN" >> $SEARCHOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Search failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +# +# Do some modifications +# + +BASEDN="o=Example,c=US" +echo "Modifying database \"$BASEDN\"..." +$LDAPMODIFY -v -D "cn=Manager,$BASEDN" -h $LOCALHOST -p $PORT3 -w $PASSWD \ + -M >> $TESTOUT 2>&1 << EOMODS +# These operations (updates with objectClass mapping) triggered ITS#3499 +dn: cn=Added Group,ou=Groups,$BASEDN +changetype: add +objectClass: groupOfNames +objectClass: uidObject +cn: Added Group +member: cn=Added Group,ou=Groups,$BASEDN +uid: added + +dn: cn=Another Added Group,ou=Groups,$BASEDN +changetype: add +objectClass: groupOfNames +cn: Another Added Group +member: cn=Added Group,ou=Groups,$BASEDN +member: cn=Another Added Group,ou=Groups,$BASEDN + +dn: cn=Another Added Group,ou=Groups,$BASEDN +changetype: modify +add: objectClass +objectClass: uidObject +- +add: uid +uid: added +- + +dn: cn=Added Group,ou=Groups,$BASEDN +changetype: modify +delete: objectClass +objectClass: uidObject +- +delete: uid +- + +dn: ou=Meta,$BASEDN +changetype: modify +add: description +description: added to "ou=Meta,$BASEDN" +- + +dn: ou=Who's going to handle this?,$BASEDN +changetype: add +objectClass: organizationalUnit +ou: Who's going to handle this? +description: added +description: will be deleted + +dn: ou=Same as above,$BASEDN +changetype: add +objectClass: organizationalUnit +ou: Same as above +description: added right after "Who's going to handle this?" +description: will be preserved + +dn: ou=Who's going to handle this?,$BASEDN +changetype: delete + +dn: ou=Who's going to handle this?,ou=Meta,$BASEDN +changetype: add +objectClass: organizationalUnit +ou: Who's going to handle this? +description: added +description: will be deleted + +dn: ou=Same as above,ou=Meta,$BASEDN +changetype: add +objectClass: organizationalUnit +ou: Same as above +description: added right after "Who's going to handle this?" +description: will be preserved + +dn: cn=Added User,ou=Same as above,ou=Meta,$BASEDN +changetype: add +objectClass: inetOrgPerson +cn: Added User +sn: User +userPassword: secret + +dn: ou=Who's going to handle this?,ou=Meta,$BASEDN +changetype: delete +EOMODS + +RC=$? +#if test $RC != 0 ; then +# echo "Modify failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Modify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Searching base=\"$BASEDN\"..." +echo "# searching base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 -b "$BASEDN" >> $SEARCHOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Search failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +BASEDN="o=Example,c=US" +echo " base=\"$BASEDN\"..." +echo "# base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 -b "$BASEDN" -M "$FILTER" '*' ref \ + >> $SEARCHOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Search failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +BASEDN="o=Example,c=US" +FILTER="(seeAlso=cn=all staff,ou=Groups,$BASEDN)" +echo "Searching filter=\"$FILTER\"" +echo " attrs=\"seeAlso\"" +echo " base=\"$BASEDN\"..." +echo "# searching filter=\"$FILTER\"" >> $SEARCHOUT +echo "# attrs=\"seeAlso\"" >> $SEARCHOUT +echo "# base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 -b "$BASEDN" "$FILTER" seeAlso \ + >> $SEARCHOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Search failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +FILTER="(uid=example)" +echo "Searching filter=\"$FILTER\"" +echo " attrs=\"uid\"" +echo " base=\"$BASEDN\"..." +echo "# searching filter=\"$FILTER\"" >> $SEARCHOUT +echo "# attrs=\"uid\"" >> $SEARCHOUT +echo "# base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 -b "$BASEDN" "$FILTER" uid \ + >> $SEARCHOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Search failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +FILTER="(member=cn=Another Added Group,ou=Groups,$BASEDN)" +echo "Searching filter=\"$FILTER\"" +echo " attrs=\"member\"" +echo " base=\"$BASEDN\"..." +echo "# searching filter=\"$FILTER\"" >> $SEARCHOUT +echo "# attrs=\"member\"" >> $SEARCHOUT +echo "# base=\"$BASEDN\"..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 -b "$BASEDN" "$FILTER" member \ + >> $SEARCHOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Search failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Waiting 10 seconds for cached connections to timeout..." +sleep 10 + +echo "Searching with a timed out connection..." +echo "# searching filter=\"$FILTER\"" >> $SEARCHOUT +echo "# attrs=\"member\"" >> $SEARCHOUT +echo "# base=\"$BASEDN\"" >> $SEARCHOUT +echo "# with a timed out connection..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 -D "cn=Manager,$BASEDN" -w $PASSWD \ + -b "$BASEDN" "$FILTER" member \ + >> $SEARCHOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Search failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 0 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +# NOTE: cannot send to $SEARCHOUT because the returned entries +# are not predictable... +echo "Checking server-enforced size limit..." +echo "# Checking server-enforced size limit..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 \ + -D "cn=Bjorn Jensen,ou=Information Technology Division,ou=People,$BASEDN" -w bjorn \ + -b "$BASEDN" "(objectClass=*)" 1.1 \ + >> $TESTOUT 2>&1 +RC=$? +case $RC,$BACKEND in + 4,* | 0,null) + ;; + 0,*) + echo "Search should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +# NOTE: cannot send to $SEARCHOUT because the returned entries +# are not predictable... +echo "Checking client-requested size limit..." +echo "# Checking client-requested size limit..." >> $SEARCHOUT +$LDAPSEARCH -S "" -h $LOCALHOST -p $PORT3 \ + -D "cn=Bjorn Jensen,ou=Information Technology Division,ou=People,$BASEDN" -w bjorn \ + -b "$BASEDN" -z 2 "(objectClass=*)" 1.1 \ + >> $TESTOUT 2>&1 +RC=$? +case $RC,$BACKEND in + 4,* | 0,null) + ;; + 0,*) + echo "Search should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; + *) + echo "Search failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Filtering ldapsearch results..." +$LDIFFILTER < $SEARCHOUT > $SEARCHFLT +echo "Filtering original ldif used to create database..." +$LDIFFILTER < $METAOUT > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - meta search/modification didn't succeed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +# ITS#4458 needs patch to slapo-rwm for global rewriting of passwd_exop +BASEDN="o=Example,c=US" +echo "Changing password to database \"$BASEDN\"..." +$LDAPPASSWD -h $LOCALHOST -p $PORT3 -D "cn=Manager,$BASEDN" -w $PASSWD \ + -s $PASSWD "cn=Ursula Hampster,ou=Alumni Association,ou=People,$BASEDN" \ + >> $TESTOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Passwd ExOp failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; +# 51) +# echo "### Hit LDAP_BUSY problem; you may want to re-run the test" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit 0 +# ;; +# 80) + 1) + echo "Passwd ExOp failed ($RC)! ITS#4458?" + ;; + *) + echo "Passwd ExOp failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +if test $RC = 0 ; then + echo "Binding with newly changed password to database \"$BASEDN\"..." + $LDAPWHOAMI -h $LOCALHOST -p $PORT3 \ + -D "cn=Ursula Hampster,ou=Alumni Association,ou=People,$BASEDN" \ + -w $PASSWD >> $TESTOUT 2>&1 + RC=$? + #if test $RC != 0 ; then + # echo "WhoAmI failed ($RC)!" + # test $KILLSERVERS != no && kill -HUP $KILLPIDS + # exit $RC + #fi + case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + ;; + *) + echo "WhoAmI failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; + esac +fi + +echo "Binding as newly added user to database \"$BASEDN\"..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT3 \ + -D "cn=Added User,ou=Same as above,ou=Meta,$BASEDN" \ + -w $PASSWD >> $TESTOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "WhoAmI failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + ;; + *) + echo "WhoAmI failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "Changing password to database \"$BASEDN\"..." +$LDAPPASSWD -h $LOCALHOST -p $PORT3 -D "cn=Manager,$BASEDN" -w $PASSWD \ + -s meta "cn=Added User,ou=Same as above,ou=Meta,$BASEDN" \ + >> $TESTOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "Passwd ExOp failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC in + 0) + ;; +# 51) +# echo "### Hit LDAP_BUSY problem; you may want to re-run the test" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit 0 +# ;; +# 80) + 1) + echo "Passwd ExOp failed ($RC)! ITS#4458?" + ;; + *) + echo "Passwd ExOp failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +if test $RC = 0 ; then + echo "Binding with newly changed password to database \"$BASEDN\"..." + $LDAPWHOAMI -h $LOCALHOST -p $PORT3 \ + -D "cn=Added User,ou=Same as above,ou=Meta,$BASEDN" \ + -w meta >> $TESTOUT 2>&1 + RC=$? + #if test $RC != 0 ; then + # echo "WhoAmI failed ($RC)!" + # test $KILLSERVERS != no && kill -HUP $KILLPIDS + # exit $RC + #fi + case $RC in + 0) + ;; + 51) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + ;; + *) + echo "WhoAmI failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; + esac +fi + +echo "Binding with incorrect password to database \"$BASEDN\"..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT3 \ + -D "cn=Added User,ou=Same as above,ou=Meta,$BASEDN" \ + -w bogus >> $TESTOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "WhoAmI failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC,$BACKEND in + 0,null) + ;; + 0,*) + echo "WhoAmI should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; + 51,*) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + ;; + *) + ;; +esac + +echo "Binding with non-existing user to database \"$BASEDN\"..." +$LDAPWHOAMI -h $LOCALHOST -p $PORT3 \ + -D "cn=Non-existing User,ou=Same as above,ou=Meta,$BASEDN" \ + -w bogus >> $TESTOUT 2>&1 +RC=$? +#if test $RC != 0 ; then +# echo "WhoAmI failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit $RC +#fi +case $RC,$BACKEND in + 0,null) + ;; + 0,*) + echo "WhoAmI should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + ;; + 51,*) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + ;; + *) + ;; +esac + +echo "Comparing to database \"$BASEDN\"..." +$LDAPCOMPARE -h $LOCALHOST -p $PORT3 \ + "cn=Another Added Group,ou=Groups,$BASEDN" \ + "member:cn=Added Group,ou=Groups,$BASEDN" >> $TESTOUT 2>&1 +RC=$? +#if test $RC != 6 ; then +# echo "Compare failed ($RC)!" +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +# exit -1 +#fi +case $RC,$BACKEND in + 5,null) + ;; + 6,*) + ;; + 51,*) + echo "### Hit LDAP_BUSY problem; you may want to re-run the test" + ;; + *) + echo "Compare failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + ;; +esac + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test048-syncrepl-multiproxy b/tests/scripts/test048-syncrepl-multiproxy new file mode 100755 index 0000000..da74ef1 --- /dev/null +++ b/tests/scripts/test048-syncrepl-multiproxy @@ -0,0 +1,606 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $BACKLDAP = ldapno; then + echo "LDAP backend not available, test skipped" + exit 0 +fi + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi + +if test $MONITORDB = no; then + echo "Monitor backend not available, test skipped" + exit 0 +fi + +if test $THREADS = threadsno ; then + echo "Need threads support, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 $DBDIR3 + +# +# Test replication: +# - start master +# - start slave +# - populate over ldap +# - perform some modifies and deleted +# - attempt to modify the slave (referral or chain) +# - retrieve database over ldap and compare against expected results +# + +echo "Starting master slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $PLSRMASTERCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +MASTERPID=$! +if test $WAIT != 0 ; then + echo MASTERPID $MASTERPID + read foo +fi +KILLPIDS="$MASTERPID" + +sleep 1 + +echo "Using ldapsearch to check that master slapd is running..." +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 + +echo "Using ldapadd to create the context prefix entry in the master..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDEREDCP > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting P1 slave slapd on TCP/IP port $PORT2..." +. $CONFFILTER $BACKEND $MONITORDB < $RSLAVECONF > $CONF2 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +P1SLAVEPID=$! +if test $WAIT != 0 ; then + echo P1SLAVEPID $P1SLAVEPID + read foo +fi +KILLPIDS="$MASTERPID $P1SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that P1 slave slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + '(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 + +echo "Starting R1 slave slapd on TCP/IP port $PORT3..." +. $CONFFILTER $BACKEND $MONITORDB < $RSLAVECONF | sed -e 's;\.2\.\([^/]*\)$;.3.\1;' > $CONF3 +$SLAPD -f $CONF3 -h $URI3 -d $LVL $TIMING > $LOG3 2>&1 & +R1SLAVEPID=$! +if test $WAIT != 0 ; then + echo R1SLAVEPID $R1SLAVEPID + read foo +fi +KILLPIDS="$MASTERPID $P1SLAVEPID $R1SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that R1 slave slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT3 \ + '(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 + +CHECK=1 +echo "$CHECK > Using ldapadd to populate the master directory..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDEREDNOCP > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +#echo "Using ldapsearch to read all the entries from the master..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' > "${MASTEROUT}.1" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Using ldapsearch to read all the entries from the P1 slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > "${SLAVEOUT}.1" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at P1 slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Filtering master results..." +$LDIFFILTER < "${MASTEROUT}.1" > $MASTERFLT +#echo "Filtering slave results..." +$LDIFFILTER < "${SLAVEOUT}.1" > $SLAVEFLT + +echo "$CHECK < Comparing retrieved entries from master and P1 slave..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and P1 slave databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +#echo "Using ldapsearch to read all the entries from the R1 slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT3 \ + '(objectClass=*)' > "${SLAVEOUT}.1" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at R1 slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Filtering slave results..." +$LDIFFILTER < "${SLAVEOUT}.1" > $SLAVEFLT + +echo "$CHECK < Comparing retrieved entries from master and R1 slave..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and R1 slave databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +CHECK=`expr $CHECK + 1` +echo "$CHECK > Stopping the provider, sleeping $SLEEP2 seconds and restarting it..." +kill -HUP "$MASTERPID" +wait $MASTERPID +sleep $SLEEP2 + +echo "======================= RESTART =======================" >> $LOG1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 & +MASTERPID=$! +if test $WAIT != 0 ; then + echo MASTERPID $MASTERPID + read foo +fi +KILLPIDS="$MASTERPID $P1SLAVEPID $R1SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that master slapd is running..." +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 + +echo "Using ldapmodify to modify master directory..." + +# +# Do some modifications +# + +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com +changetype: modify +add: drink +drink: Orange Juice +- +delete: sn +sn: Jones +- +add: sn +sn: Jones + +dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +replace: drink +drink: Iced Tea + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: uniquemember +uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com +uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +- +add: uniquemember +uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com +uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com + +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc + =com +changetype: modify +delete: cn +cn: Biiff Jensen + +dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +cn: Gern Jensen +sn: Jensen +uid: gjensen +title: Chief Investigator, ITD +postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103 +seealso: cn=All Staff, ou=Groups, dc=example,dc=com +drink: Coffee +homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104 +description: Very odd +facsimiletelephonenumber: +1 313 555 7557 +telephonenumber: +1 313 555 8343 +mail: gjensen@mailgw.example.com +homephone: +1 313 555 8844 + +dn: ou=Retired, ou=People, dc=example,dc=com +changetype: add +objectclass: organizationalUnit +ou: Retired + +dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +cn: Rosco P. Coltrane +sn: Coltrane +uid: rosco +description: Fat tycoon + +dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modrdn +newrdn: cn=Rosco P. Coltrane +deleteoldrdn: 1 +newsuperior: ou=Retired, ou=People, dc=example,dc=com + +dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: delete +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +#echo "Using ldapsearch to read all the entries from the master..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' > "${MASTEROUT}.2" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Using ldapsearch to read all the entries from the P1 slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > "${SLAVEOUT}.2" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at P1 slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Filtering master results..." +$LDIFFILTER < "${MASTEROUT}.2" > $MASTERFLT +#echo "Filtering P1 slave results..." +$LDIFFILTER < "${SLAVEOUT}.2" > $SLAVEFLT + +echo "$CHECK < Comparing retrieved entries from master and P1 slave..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and P1 slave databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +#echo "Using ldapsearch to read all the entries from the R1 slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT3 \ + '(objectClass=*)' > "${SLAVEOUT}.2" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at R1 slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Filtering slave results..." +$LDIFFILTER < "${SLAVEOUT}.2" > $SLAVEFLT + +echo "$CHECK < Comparing retrieved entries from master and R1 slave..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and R1 slave databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +CHECK=`expr $CHECK + 1` +echo "$CHECK > Stopping slaves to test recovery..." +kill -HUP $P1SLAVEPID $R1SLAVEPID +wait $P1SLAVEPID +wait $R1SLAVEPID + +echo "Modifying more entries on the master..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD >> \ + $TESTOUT 2>&1 << EOMODS +dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +add: description +description: r1 slave is down... + +dn: cn=James T. Kirk, ou=Retired, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +sn: Kirk +uid: jtk +cn: James T. Kirk + +dn: cn=Tiberius J. Hooker, ou=Retired, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +sn: Hooker +uid: tjh +cn: Tiberius J. Hooker + +EOMODS + +echo "Restarting P1 slave..." +echo "======================= RESTART =======================" >> $LOG3 +$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING >> $LOG2 2>&1 & +P1SLAVEPID=$! +if test $WAIT != 0 ; then + echo P1SLAVEPID $P1SLAVEPID + read foo +fi + +echo "Restarting R1 slave..." +echo "======================= RESTART =======================" >> $LOG3 +$SLAPD -f $CONF3 -h $URI3 -d $LVL $TIMING >> $LOG3 2>&1 & +R1SLAVEPID=$! +if test $WAIT != 0 ; then + echo R1SLAVEPID $R1SLAVEPID + read foo +fi +KILLPIDS="$MASTERPID $P1SLAVEPID $R1SLAVEPID" + +echo "Waiting $SLEEP2 seconds for syncrepl to receive changes..." +sleep $SLEEP2 + +#echo "Using ldapsearch to read all the entries from the master..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' > "${MASTEROUT}.3" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Using ldapsearch to read all the entries from the P1 slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ + '(objectClass=*)' > "${SLAVEOUT}.3" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Filtering master results..." +$LDIFFILTER < "${MASTEROUT}.3" > $MASTERFLT +#echo "Filtering slave results..." +$LDIFFILTER < "${SLAVEOUT}.3" > $SLAVEFLT + +echo "$CHECK < Comparing retrieved entries from master and P1 slave..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and slave databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +#echo "Using ldapsearch to read all the entries from the R1 slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT3 \ + '(objectClass=*)' > "${SLAVEOUT}.3" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Filtering slave results..." +$LDIFFILTER < "${SLAVEOUT}.3" > $SLAVEFLT + +echo "$CHECK < Comparing retrieved entries from master and R1 slave..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and slave databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +CHECK=`expr $CHECK + 1` +echo "$CHECK > Try updating the P1 slave slapd..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT2 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com +changetype: modify +add: description +description: This write must fail because directed to a shadow context, +description: unless the chain overlay is configured appropriately ;) + +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +#echo "Using ldapsearch to read all the entries from the master..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectClass=*)' > "${MASTEROUT}.4" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at master ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Using ldapsearch to read all the entries from the P1 slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \ +'(objectClass=*)' > "${SLAVEOUT}.4" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Filtering master results..." +$LDIFFILTER < "${MASTEROUT}.4" > $MASTERFLT +#echo "Filtering slave results..." +$LDIFFILTER < "${SLAVEOUT}.4" > $SLAVEFLT + +echo "$CHECK < Comparing retrieved entries from master and P1 slave..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and P1 slave databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +#echo "Using ldapsearch to read all the entries from the R1 slave..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT3 \ +'(objectClass=*)' > "${SLAVEOUT}.4" 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +#echo "Filtering slave results..." +$LDIFFILTER < "${SLAVEOUT}.4" > $SLAVEFLT + +echo "$CHECK < Comparing retrieved entries from master and R1 slave..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - master and R1 slave databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test049-sync-config b/tests/scripts/test049-sync-config new file mode 100755 index 0000000..6a51e7a --- /dev/null +++ b/tests/scripts/test049-sync-config @@ -0,0 +1,406 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi + +PRODIR=$TESTDIR/pro +CONDIR=$TESTDIR/con1 +DBPRO=$PRODIR/db +DBCON=$CONDIR/db +CFPRO=$PRODIR/slapd.d +CFCON=$CONDIR/slapd.d + +mkdir -p $TESTDIR $PRODIR $CONDIR $DBPRO $DBCON $CFPRO $CFCON + +$SLAPPASSWD -g -n >$CONFIGPWF + +if test x"$SYNCMODE" = x ; then + SYNCMODE=rp +fi +case "$SYNCMODE" in + ro) + SYNCTYPE="type=refreshOnly interval=00:00:00:03" + ;; + rp) + SYNCTYPE="type=refreshAndPersist" + ;; + *) + echo "unknown sync mode $SYNCMODE" + exit 1; + ;; +esac + +# +# Test replication of dynamic config: +# - start provider +# - start consumer +# - configure over ldap +# - populate over ldap +# - configure syncrepl over ldap +# - retrieve database over ldap and compare against expected results +# + +echo "Starting provider slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $DYNAMICCONF > $CONFLDIF +$SLAPADD -F $CFPRO -n 0 -l $CONFLDIF +cd $PRODIR +$SLAPD -F ./slapd.d -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" +cd $TESTWD + +sleep 1 + +echo "Using ldapsearch to check that provider slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $URI1 \ + '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 + +echo "Inserting syncprov overlay on provider..." +if [ "$SYNCPROV" = syncprovmod ]; then + $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1 +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModulePath: $TESTWD/../servers/slapd/overlays +olcModuleLoad: syncprov.la +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed for moduleLoad ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi +fi +read CONFIGPW < $CONFIGPWF +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 +dn: olcDatabase={0}config,cn=config +changetype: modify +add: olcSyncRepl +olcSyncRepl: rid=001 provider=$URI1 binddn="cn=config" bindmethod=simple + credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist + retry="3 5 300 5" timeout=3 +- +add: olcUpdateRef +olcUpdateRef: $URI1 + +dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config +changetype: add +objectClass: olcOverlayConfig +objectClass: olcSyncProvConfig +olcOverlay: syncprov +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for syncrepl config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting consumer slapd on TCP/IP port $PORT2..." +$SLAPADD -F $CFCON -n 0 -l $CONFLDIF +cd $CONDIR +$SLAPD -F ./slapd.d -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVEPID $SLAVEPID + read foo +fi +KILLPIDS="$KILLPIDS $SLAVEPID" +cd $TESTWD + +sleep 1 + +echo "Using ldapsearch to check that consumer slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $URI2 \ + '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 + +echo "Configuring syncrepl on consumer..." +$LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcDatabase={0}config,cn=config +changetype: modify +add: olcSyncRepl +olcSyncRepl: rid=001 provider=$URI1 binddn="cn=config" bindmethod=simple + credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist + retry="3 5 300 5" timeout=3 +- +add: olcUpdateRef +olcUpdateRef: $URI1 +EOF + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Using ldapsearch to check that syncrepl received config changes..." +RC=32 +for i in 0 1 2 3 4 5; do + RESULT=`$LDAPSEARCH -H $URI2 -D cn=config -y $CONFIGPWF \ + -s base -b "olcDatabase={0}config,cn=config" \ + '(olcUpdateRef=*)' 2>&1 | awk '/^dn:/ {print "OK"}'` + if test "x$RESULT" = "xOK" ; then + RC=0 + break + fi + echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." + sleep $SLEEP1 +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Adding schema and databases on provider..." +$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +include: file://$ABS_SCHEMADIR/core.ldif + +include: file://$ABS_SCHEMADIR/cosine.ldif + +include: file://$ABS_SCHEMADIR/inetorgperson.ldif + +include: file://$ABS_SCHEMADIR/openldap.ldif + +include: file://$ABS_SCHEMADIR/nis.ldif +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed for schema config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +nullExclude="" nullOK="" +test $BACKEND = null && nullExclude="# " nullOK="OK" + +if [ "$BACKENDTYPE" = mod ]; then + $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModulePath: $TESTWD/../servers/slapd/back-$BACKEND +olcModuleLoad: back_$BACKEND.la +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed for backend config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi +fi + +$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcDatabase={1}$BACKEND,cn=config +objectClass: olcDatabaseConfig +${nullExclude}objectClass: olc${BACKEND}Config +olcDatabase: {1}$BACKEND +olcSuffix: $BASEDN +${nullExclude}olcDbDirectory: ./db +olcRootDN: $MANAGERDN +olcRootPW: $PASSWD +olcSyncRepl: rid=002 provider=$URI1 binddn="$MANAGERDN" bindmethod=simple + credentials=$PASSWD searchbase="$BASEDN" $SYNCTYPE + retry="3 5 300 5" timeout=3 +olcUpdateRef: $URI1 + +dn: olcOverlay=syncprov,olcDatabase={1}${BACKEND},cn=config +changetype: add +objectClass: olcOverlayConfig +objectClass: olcSyncProvConfig +olcOverlay: syncprov +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed for database config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +if test $INDEXDB = indexdb ; then + $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcDatabase={1}$BACKEND,cn=config +changetype: modify +add: olcDbIndex +olcDbIndex: objectClass,entryUUID,entryCSN eq +olcDbIndex: cn,uid pres,eq,sub +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd modify for database config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi +fi + +echo "Using ldapadd to populate provider..." +$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD -f $LDIFORDERED \ + >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed for database config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Using ldapsearch to check that syncrepl received database changes..." +RC=32 +for i in 0 1 2 3 4 5; do + RESULT=`$LDAPSEARCH -H $URI2 \ + -s base -b "cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com" \ + '(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'` + if test "x$RESULT$nullOK" = "xOK" ; then + RC=0 + break + fi + echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." + sleep $SLEEP1 +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Replacing olcSyncrepl on provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 +dn: olcDatabase={0}config,cn=config +changetype: modify +replace: olcSyncRepl +olcSyncRepl: rid=002 provider=$URI1 binddn="cn=config" bindmethod=simple + credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist + retry="3 5 300 5" timeout=3 +EOF +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Using ldapsearch to read config from the provider..." +$LDAPSEARCH -b cn=config -D cn=config -H $URI1 -y $CONFIGPWF \ + 'objectclass=*' > $MASTEROUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at provider ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read config from the consumer..." +$LDAPSEARCH -b cn=config -D cn=config -H $URI2 -y $CONFIGPWF \ + 'objectclass=*' > $SLAVEOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at consumer ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering provider results..." +$LDIFFILTER < $MASTEROUT > $MASTERFLT +echo "Filtering consumer results..." +$LDIFFILTER < $SLAVEOUT > $SLAVEFLT + +echo "Comparing retrieved configs from provider and consumer..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - provider and consumer configs differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Using ldapsearch to read all the entries from the provider..." +$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI1 -w $PASSWD \ + 'objectclass=*' > $MASTEROUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at provider ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the consumer..." +$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI2 -w $PASSWD \ + 'objectclass=*' > $SLAVEOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at consumer ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo "Filtering provider results..." +$LDIFFILTER < $MASTEROUT > $MASTERFLT +echo "Filtering consumer results..." +$LDIFFILTER < $SLAVEOUT > $SLAVEFLT + +echo "Comparing retrieved entries from provider and consumer..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - provider and consumer databases differ" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test050-syncrepl-multimaster b/tests/scripts/test050-syncrepl-multimaster new file mode 100755 index 0000000..a7ef366 --- /dev/null +++ b/tests/scripts/test050-syncrepl-multimaster @@ -0,0 +1,789 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi + +MMR=${MMR-4} + +if [ $MMR -gt 9 ]; then +MMR=9 +fi + +XDIR=$TESTDIR/srv +TMP=$TESTDIR/tmp + +mkdir -p $TESTDIR + +$SLAPPASSWD -g -n >$CONFIGPWF + +if test x"$SYNCMODE" = x ; then + SYNCMODE=rp +fi +case "$SYNCMODE" in + ro) + SYNCTYPE="type=refreshOnly interval=00:00:00:03" + ;; + rp) + SYNCTYPE="type=refreshAndPersist" + ;; + *) + echo "unknown sync mode $SYNCMODE" + exit 1; + ;; +esac + +# +# Test replication of dynamic config: +# - start servers +# - configure over ldap +# - populate over ldap +# - configure syncrepl over ldap +# - retrieve database over ldap and compare against expected results +# + +echo "Initializing server configurations..." +n=1 +while [ $n -le $MMR ]; do + +DBDIR=${XDIR}$n/db +CFDIR=${XDIR}$n/slapd.d + +mkdir -p ${XDIR}$n $DBDIR $CFDIR + +$SLAPADD -F $CFDIR -n 0 <<EOF +dn: cn=config +objectClass: olcGlobal +cn: config +olcServerID: $n + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcRootPW:< file://$CONFIGPWF +EOF + +n=`expr $n + 1` +done + +echo "Starting server 1 on TCP/IP port $PORT1..." +cd ${XDIR}1 +$SLAPD -F slapd.d -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" +cd $TESTWD + +sleep 1 + +echo "Using ldapsearch to check that server 1 is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $URI1 \ + '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 + +echo "Inserting syncprov overlay on server 1..." +echo "" > $TMP +if [ "$SYNCPROV" = syncprovmod ]; then +cat <<EOF >> $TMP +dn: cn=module,cn=config +changetype: add +objectClass: olcModuleList +cn: module +olcModulePath: $TESTWD/../servers/slapd/overlays +olcModuleLoad: syncprov.la + +EOF +fi +# +# Note that we configure a timeout here; it's possible for both +# servers to attempt to bind to each other while a modify to +# cn=config is in progress. When the modify pauses the thread pool +# neither server will progress. The timeout will drop the syncrepl +# attempt and allow the modifies to complete. +# +read CONFIGPW < $CONFIGPWF +echo "dn: cn=config" >> $TMP +echo "changetype: modify" >> $TMP +echo "replace: olcServerID" >> $TMP +n=1 +while [ $n -le $MMR ]; do +PORT=`expr $BASEPORT + $n` +URI="ldap://${LOCALHOST}:$PORT/" +echo "olcServerID: $n $URI" >> $TMP +n=`expr $n + 1` +done + +cat <<EOF >> $TMP + +dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config +changetype: add +objectClass: olcOverlayConfig +objectClass: olcSyncProvConfig +olcOverlay: syncprov + +dn: olcDatabase={0}config,cn=config +changetype: modify +add: olcSyncRepl +EOF + +n=1 +while [ $n -le $MMR ]; do +PORT=`expr $BASEPORT + $n` +URI="ldap://${LOCALHOST}:$PORT/" +echo "olcSyncRepl: rid=00$n provider=$URI binddn=\"cn=config\" bindmethod=simple" >> $TMP +echo " credentials=$CONFIGPW searchbase=\"cn=config\" type=refreshAndPersist" >> $TMP +echo " retry=\"3 10 300 5\" timeout=3" >> $TMP +n=`expr $n + 1` +done +echo "-" >> $TMP +echo "add: olcMirrorMode" >> $TMP +echo "olcMirrorMode: TRUE" >> $TMP +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF < $TMP >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for syncrepl config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +n=2 +while [ $n -le $MMR ]; do +PORT=`expr $BASEPORT + $n` +URI="ldap://${LOCALHOST}:$PORT/" +LOG=$TESTDIR/slapd.$n.log +echo "Starting server $n on TCP/IP port $PORT..." +cd ${XDIR}$n +$SLAPD -F ./slapd.d -h $URI -d $LVL $TIMING > $LOG 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVEPID $SLAVEPID + read foo +fi +KILLPIDS="$KILLPIDS $SLAVEPID" +cd $TESTWD + +sleep 1 + +echo "Using ldapsearch to check that server $n is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $URI \ + '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 + +echo "Configuring syncrepl on server $n..." +cat <<EOF > $TMP +dn: olcDatabase={0}config,cn=config +changetype: modify +add: olcSyncRepl +EOF +j=1 +while [ $j -le $MMR ]; do +P2=`expr $BASEPORT + $j` +U2="ldap://${LOCALHOST}:$P2/" +echo "olcSyncRepl: rid=00$j provider=$U2 binddn=\"cn=config\" bindmethod=simple" >> $TMP +echo " credentials=$CONFIGPW searchbase=\"cn=config\" type=refreshAndPersist" >> $TMP +echo " retry=\"3 10 300 5\" timeout=3" >> $TMP +j=`expr $j + 1` +done +cat <<EOF >> $TMP +- +add: olcMirrorMode +olcMirrorMode: TRUE +EOF +$LDAPMODIFY -D cn=config -H $URI -y $CONFIGPWF < $TMP >>$TESTOUT 2>&1 +n=`expr $n + 1` +done + +echo "Adding schema and databases on server 1..." +$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +include: file://$ABS_SCHEMADIR/core.ldif + +include: file://$ABS_SCHEMADIR/cosine.ldif + +include: file://$ABS_SCHEMADIR/inetorgperson.ldif + +include: file://$ABS_SCHEMADIR/openldap.ldif + +include: file://$ABS_SCHEMADIR/nis.ldif +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed for schema config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +nullExclude="" +test $BACKEND = null && nullExclude="# " + +echo "" > $TMP +if [ "$BACKENDTYPE" = mod ]; then +cat <<EOF >> $TMP +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModulePath: $TESTWD/../servers/slapd/back-$BACKEND +olcModuleLoad: back_$BACKEND.la + +EOF +fi + +cat <<EOF >> $TMP +dn: olcDatabase={1}$BACKEND,cn=config +objectClass: olcDatabaseConfig +${nullExclude}objectClass: olc${BACKEND}Config +olcDatabase: {1}$BACKEND +olcSuffix: $BASEDN +${nullExclude}olcDbDirectory: ./db +olcRootDN: $MANAGERDN +olcRootPW: $PASSWD +EOF + +n=1 +while [ $n -le $MMR ]; do +PORT=`expr $BASEPORT + $n` +URI="ldap://${LOCALHOST}:$PORT/" + +echo "olcSyncRepl: rid=01$n provider=$URI binddn=\"$MANAGERDN\" bindmethod=simple" >> $TMP +echo " credentials=$PASSWD searchbase=\"$BASEDN\" $SYNCTYPE" >> $TMP +echo " retry=\"3 10 300 5\" timeout=3" >> $TMP +n=`expr $n + 1` +done + +cat <<EOF >> $TMP +olcMirrorMode: TRUE + +dn: olcOverlay=syncprov,olcDatabase={1}${BACKEND},cn=config +objectClass: olcOverlayConfig +objectClass: olcSyncProvConfig +olcOverlay: syncprov +EOF +$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF < $TMP >>$TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed for database config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +if test $INDEXDB = indexdb ; then + $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcDatabase={1}$BACKEND,cn=config +changetype: modify +add: olcDbIndex +olcDbIndex: objectClass,entryUUID,entryCSN eq +olcDbIndex: cn,uid pres,eq,sub +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd modify for database config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi +fi + +echo "Using ldapadd to populate server 1..." +$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD -f $LDIFORDERED \ + >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed for server 1 database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP2 seconds for syncrepl to receive changes..." +sleep $SLEEP2 + +n=1 +while [ $n -le $MMR ]; do +PORT=`expr $BASEPORT + $n` +URI="ldap://${LOCALHOST}:$PORT/" + +echo "Using ldapsearch to read config from server $n..." +$LDAPSEARCH -b cn=config -D cn=config -H $URI -y $CONFIGPWF \ + 'objectclass=*' > $TESTDIR/server$n.out 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at server $n ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt + +n=`expr $n + 1` +done + +n=2 +while [ $n -le $MMR ]; do +echo "Comparing retrieved configs from server 1 and server $n..." +$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT + +if test $? != 0 ; then + echo "test failed - server 1 and server $n configs differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi +n=`expr $n + 1` +done + +n=1 +while [ $n -le $MMR ]; do +PORT=`expr $BASEPORT + $n` +URI="ldap://${LOCALHOST}:$PORT/" + +echo "Using ldapsearch to read all the entries from server $n..." +$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \ + 'objectclass=*' > $TESTDIR/server$n.out 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at server $n ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +$LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt +n=`expr $n + 1` +done + +n=2 +while [ $n -le $MMR ]; do +echo "Comparing retrieved entries from server 1 and server $n..." +$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT + +if test $? != 0 ; then + echo "test failed - server 1 and server $n databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi +n=`expr $n + 1` +done + +echo "Using ldapadd to populate server 2..." +$LDAPADD -D "$MANAGERDN" -H $URI2 -w $PASSWD -f $LDIFADD1 \ + >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed for server 2 database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +n=1 +while [ $n -le $MMR ]; do +PORT=`expr $BASEPORT + $n` +URI="ldap://${LOCALHOST}:$PORT/" + +echo "Using ldapsearch to read all the entries from server $n..." +$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \ + 'objectclass=*' > $TESTDIR/server$n.out 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at server $n ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +$LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt +n=`expr $n + 1` +done + +n=2 +while [ $n -le $MMR ]; do +echo "Comparing retrieved entries from server 1 and server $n..." +$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT + +if test $? != 0 ; then + echo "test failed - server 1 and server $n databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi +n=`expr $n + 1` +done + +echo "Using ldapadd to populate server 3..." +$LDAPADD -D "$MANAGERDN" -H $URI3 -w $PASSWD \ + << EOMODS >> $TESTOUT 2>&1 +dn: cn=Server 3 Test,dc=example,dc=com +changetype: add +objectClass: device +cn: Server 3 Test +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed for server 3 database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +n=1 +while [ $n -le $MMR ]; do +PORT=`expr $BASEPORT + $n` +URI="ldap://${LOCALHOST}:$PORT/" + +echo "Using ldapsearch to read all the entries from server $n..." +$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \ + 'objectclass=*' > $TESTDIR/server$n.out 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at server $n ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +$LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt +n=`expr $n + 1` +done + +n=2 +while [ $n -le $MMR ]; do +echo "Comparing retrieved entries from server 1 and server $n..." +$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT + +if test $? != 0 ; then + echo "test failed - server 1 and server $n databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi +n=`expr $n + 1` +done + +echo "Using ldapmodify to add to server 1 entries that will be deleted..." +$LDAPMODIFY -D "$MANAGERDN" -H $URI1 -w $PASSWD \ + >> $TESTOUT 2>&1 << EOADDS +dn: cn=To be deleted by server 1,dc=example,dc=com +changetype: add +objectClass: device +# no distinguished values, will be added by DSA + +dn: cn=To be deleted by server 2,dc=example,dc=com +changetype: add +objectClass: device +# no distinguished values, will be added by DSA + +dn: cn=To be deleted by server 3,dc=example,dc=com +changetype: add +objectClass: device +# no distinguished values, will be added by DSA + +dn: cn=To be deleted by server 1,dc=example,dc=com +changetype: delete +EOADDS +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for server 1 database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +n=1 +while [ $n -le $MMR ]; do +PORT=`expr $BASEPORT + $n` +URI="ldap://${LOCALHOST}:$PORT/" + +echo "Using ldapsearch to read all the entries from server $n..." +$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \ + 'objectclass=*' > $TESTDIR/server$n.out 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at server $n ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +$LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt +n=`expr $n + 1` +done + +n=2 +while [ $n -le $MMR ]; do +echo "Comparing retrieved entries from server 1 and server $n..." +$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT + +if test $? != 0 ; then + echo "test failed - server 1 and server $n databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi +n=`expr $n + 1` +done + +echo "Using ldapmodify to delete entries from server 2..." +$LDAPMODIFY -D "$MANAGERDN" -H $URI2 -w $PASSWD \ + >> $TESTOUT 2>&1 << EOADDS +dn: cn=To be deleted by server 2,dc=example,dc=com +changetype: delete +EOADDS +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for server 2 database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Using ldapmodify to delete entries from server 3..." +$LDAPMODIFY -D "$MANAGERDN" -H $URI3 -w $PASSWD \ + >> $TESTOUT 2>&1 << EOADDS +dn: cn=To be deleted by server 3,dc=example,dc=com +changetype: delete +EOADDS +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for server 3 database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +n=1 +while [ $n -le $MMR ]; do +PORT=`expr $BASEPORT + $n` +URI="ldap://${LOCALHOST}:$PORT/" + +echo "Using ldapsearch to read all the entries from server $n..." +$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \ + 'objectclass=*' > $TESTDIR/server$n.out 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at server $n ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +$LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt +n=`expr $n + 1` +done + +n=2 +while [ $n -le $MMR ]; do +echo "Comparing retrieved entries from server 1 and server $n..." +$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT + +if test $? != 0 ; then + echo "test failed - server 1 and server $n databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi +n=`expr $n + 1` +done + +# kill! +# test $KILLSERVERS != no && kill -HUP $KILLPIDS +kill -HUP $KILLPIDS + +# kill! +# test $KILLSERVERS != no && wait +wait + +echo "Restarting servers..." +KILLPIDS="" + +echo "Starting server 1 on TCP/IP port $PORT1..." +echo "======================= RESTART =======================" >> $LOG1 +cd ${XDIR}1 +$SLAPD -F slapd.d -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" +cd $TESTWD + +sleep 1 + +echo "Using ldapsearch to check that server 1 is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $URI1 \ + '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 + +n=2 +while [ $n -le $MMR ]; do +PORT=`expr $BASEPORT + $n` +URI="ldap://${LOCALHOST}:$PORT/" +LOG=$TESTDIR/slapd.$n.log +echo "Starting server $n on TCP/IP port $PORT..." +cd ${XDIR}$n +echo "======================= RESTART =======================" >> $LOG +$SLAPD -F ./slapd.d -h $URI -d $LVL $TIMING >> $LOG 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$KILLPIDS $PID" +cd $TESTWD +n=`expr $n + 1` +done + +n=2 +while [ $n -le $MMR ]; do +PORT=`expr $BASEPORT + $n` +URI="ldap://${LOCALHOST}:$PORT/" +echo "Using ldapsearch to check that server $n is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $URI \ + '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 +n=`expr $n + 1` +done + +# Insert modifications and more tests here. +echo "Waiting $SLEEP1 seconds for servers to resync..." +sleep $SLEEP1 + +echo "Using ldapmodify to add/modify/delete entries from server 1..." +for i in 1 2 3 4 5 6 7 8 9 10; do +echo " iteration $i" +$LDAPMODIFY -D "$MANAGERDN" -H $URI1 -w $PASSWD \ + >> $TESTOUT 2>&1 << EOMODS +dn: cn=Add-Mod-Del,dc=example,dc=com +changetype: add +cn: Add-Mod-Del +objectclass: organizationalRole + +dn: cn=Add-Mod-Del,dc=example,dc=com +changetype: modify +replace: description +description: guinea pig +- + +dn: cn=Add-Mod-Del,dc=example,dc=com +changetype: delete +EOMODS +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for server 1 database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +done + +echo "Waiting $SLEEP1 seconds for servers to resync..." +sleep $SLEEP1 + +n=1 +while [ $n -le $MMR ]; do +PORT=`expr $BASEPORT + $n` +URI="ldap://${LOCALHOST}:$PORT/" + +echo "Using ldapsearch to read all the entries from server $n..." +$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \ + 'objectclass=*' > $TESTDIR/server$n.out 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at server $n ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +$LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt +n=`expr $n + 1` +done + +n=2 +while [ $n -le $MMR ]; do +echo "Comparing retrieved entries from server 1 and server $n..." +$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT + +if test $? != 0 ; then + echo "test failed - server 1 and server $n databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi +n=`expr $n + 1` +done + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test051-config-undo b/tests/scripts/test051-config-undo new file mode 100755 index 0000000..02f2c0a --- /dev/null +++ b/tests/scripts/test051-config-undo @@ -0,0 +1,117 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +$SLAPPASSWD -g -n >$CONFIGPWF +echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $UNDOCONF > $CONF1 +$SLAPADD -f $CONF1 <<EOF +dn: o=undo +objectClass: organization +o: undo + +EOF +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +mkdir $TESTDIR/confdir +$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 + +echo Dynamically assaulting the schema +$LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \ + > $TESTOUT 2>&1 <<EOF +dn: cn={0}core,cn=schema,cn=config +changetype: modify +replace: olcObjectClasses +olcObjectClasses: ( rawr ) +- +EOF +RC=$? +if test $RC != 80 ; then + echo "invalid objectclass modify allowed ($RC)" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +$LDAPMODIFY -D cn=config -h $LOCALHOST -p $PORT1 -y $CONFIGPWF \ + > $TESTOUT 2>&1 <<EOF +dn: cn={0}core,cn=schema,cn=config +changetype: modify +replace: olcAttributeTypes +olcAttributeTypes: ( rawr ) +- +EOF +RC=$? +if test $RC != 80 ; then + echo "invalid attributeType modify allowed ($RC)" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +echo Surveying the damage +$LDAPMODIFY -D "cn=manager,o=undo" -w secret -h $LOCALHOST -p $PORT1 <<EOF +dn: o=foo,o=undo +changetype: add +objectClass: organization +o: foo + +EOF +RC=$? +if test $RC != 0 ; then + echo "schema destroyed by an unsuccessful operation" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test052-memberof b/tests/scripts/test052-memberof new file mode 100755 index 0000000..7f86a16 --- /dev/null +++ b/tests/scripts/test052-memberof @@ -0,0 +1,414 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <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 + +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 provider..." + $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 +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed for moduleLoad ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi +fi + +indexInclude="" mainInclude="" bdbInclude="# " nullExclude="" +test $INDEXDB = indexdb || indexInclude="# " +test $MAINDB = maindb || mainInclude="# " +case $BACKEND in +bdb | hdb) bdbInclude="" ;; +null) nullExclude="# " ;; +esac + +echo "Running ldapadd to build slapd config database..." +$LDAPADD -h $LOCALHOST -p $PORT1 -D 'cn=config' -w `cat $CONFIGPWF` \ + >> $TESTOUT 2>&1 <<EOF +dn: cn=symas group example,cn=schema,cn=config +objectClass: olcSchemaConfig +cn: symas group example +olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.1 + NAME 'memberA' SUP distinguishedName ) +olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.2 + NAME 'memberOfA' SUP distinguishedName ) +olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.3 + NAME 'memberB' SUP distinguishedName ) +olcAttributeTypes: ( 1.3.6.1.4.1.4754.31.1.4 + NAME 'memberOfB' SUP distinguishedName ) +olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.1 + NAME 'groupA' SUP top STRUCTURAL MUST cn MAY memberA ) +olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.2 + NAME 'groupMemberA' SUP top AUXILIARY MAY memberOfA ) +olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.3 + NAME 'groupB' SUP top STRUCTURAL MUST cn MAY memberB ) +olcObjectClasses: ( 1.3.6.1.4.1.4754.31.2.4 + NAME 'groupMemberB' SUP top AUXILIARY MAY memberOfB ) + +dn: olcDatabase={1}$BACKEND,cn=config +objectClass: olcDatabaseConfig +${nullExclude}objectClass: olc${BACKEND}Config +olcDatabase: {1}$BACKEND +olcSuffix: $BASEDN +olcRootDN: cn=Manager,$BASEDN +olcRootPW:: c2VjcmV0 +olcMonitoring: TRUE +${nullExclude}olcDbDirectory: $TESTDIR/db.1.a/ +${bdbInclude}olcDbCacheSize: 1000 +${indexInclude}olcDbIndex: objectClass eq +${indexInclude}olcDbIndex: cn pres,eq,sub +${indexInclude}olcDbIndex: uid pres,eq,sub +${indexInclude}olcDbIndex: sn pres,eq,sub +${mainInclude}olcDbMode: 384" + +dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config +objectClass: olcOverlayConfig +objectClass: olcMemberOf +olcOverlay: {0}memberof +olcMemberOfRefInt: TRUE +olcMemberOfGroupOC: groupOfNames +olcMemberOfMemberAD: member +olcMemberOfMemberOfAD: memberOf + +dn: olcOverlay={1}memberof,olcDatabase={1}$BACKEND,cn=config +objectClass: olcOverlayConfig +objectClass: olcMemberOf +olcOverlay: {1}memberof +olcMemberOfRefInt: TRUE +olcMemberOfGroupOC: groupA +olcMemberOfMemberAD: memberA +olcMemberOfMemberOfAD: memberOfA + +dn: olcOverlay={2}memberof,olcDatabase={1}$BACKEND,cn=config +objectClass: olcOverlayConfig +objectClass: olcMemberOf +olcOverlay: {2}memberof +olcMemberOfRefInt: TRUE +olcMemberOfGroupOC: groupB +olcMemberOfMemberAD: memberB +olcMemberOfMemberOfAD: memberOfB + +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 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 after adding Jessica Rabbit and Cartoonia..." >> $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 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: modrdn +newrdn: cn=Baby Herman Jr +deleteoldrdn: 1 +EOF + +echo "Re-search the entire database..." +echo "# Re-search the entire database after renaming Baby Herman..." >> $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 a group..." +$LDAPMODIFY -h $LOCALHOST -p $PORT1 \ + -D "cn=Manager,$BASEDN" -w secret \ + >> $TESTOUT 2>&1 << EOF +dn: cn=Cartoonia,ou=Groups,$BASEDN +changetype: modrdn +newrdn: cn=Toon Town +deleteoldrdn: 1 +EOF + +echo "Re-search the entire database..." +echo "# Re-search the entire database after renaming Cartoonia..." >> $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=Toon Town,ou=Groups,$BASEDN +changetype: modify +add: member +member: cn=Toon Town,ou=Groups,$BASEDN +EOF + +echo "Re-search the entire database..." +echo "# Re-search the entire database after adding Toon Town to self..." >> $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 Jr,ou=People,$BASEDN +changetype: delete +EOF + +echo "Re-search the entire database..." +echo "# Re-search the entire database after deleting Baby Herman..." >> $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 group..." +$LDAPMODIFY -h $LOCALHOST -p $PORT1 \ + -D "cn=Manager,$BASEDN" -w secret \ + >> $TESTOUT 2>&1 << EOF +dn: cn=Toon Town,ou=Groups,$BASEDN +changetype: delete +EOF + +echo "Re-search the entire database..." +echo "# Re-search the entire database after deleting Toon Town..." >> $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 "Adding groups with MAY member type schemas..." +$LDAPMODIFY -h $LOCALHOST -p $PORT1 \ + -D "cn=Manager,$BASEDN" -w secret \ + >> $TESTOUT 2>&1 <<EOF +dn: cn=Roger Rabbit,ou=People,$BASEDN +changetype: delete + +dn: cn=Jessica Rabbit,ou=People,$BASEDN +changetype: delete + +dn: cn=person1,ou=People,$BASEDN +changetype: add +objectClass: person +objectClass: groupMemberA +objectClass: groupMemberB +cn: person1 +sn: person1 + +dn: cn=person2,ou=People,$BASEDN +changetype: add +objectClass: person +objectClass: groupMemberA +objectClass: groupMemberB +cn: person2 +sn: person2 + +dn: cn=group1,ou=Groups,$BASEDN +changetype: add +objectclass: groupA +cn: group1 +memberA: cn=person1,ou=People,$BASEDN +memberA: cn=person2,ou=People,$BASEDN + +dn: cn=group2,ou=Groups,$BASEDN +changetype: add +objectclass: groupB +cn: group2 +memberB: cn=person1,ou=People,$BASEDN +memberB: cn=person2,ou=People,$BASEDN + +dn: cn=group1,ou=Groups,$BASEDN +changetype: modify +delete: memberA + +EOF + +echo "Re-search the entire database..." +echo "# Re-search the entire database after adding groups with MAY member type schemas..." >> $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 diff --git a/tests/scripts/test054-syncreplication-parallel-load b/tests/scripts/test054-syncreplication-parallel-load new file mode 100755 index 0000000..01f1477 --- /dev/null +++ b/tests/scripts/test054-syncreplication-parallel-load @@ -0,0 +1,377 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 $DBDIR4 + +# +# Test replication: +# - start provider +# - start consumer +# - populate over ldap +# - perform some modifies and deleted +# - attempt to modify the consumer (referral or chain) +# - retrieve database over ldap and compare against expected results +# + +echo "Starting provider slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $SRMASTERCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that provider slapd is running..." +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 + +echo "Using ldapadd to create the context prefix entry in the provider..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDEREDCP > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting consumer slapd on TCP/IP port $PORT4..." +. $CONFFILTER $BACKEND $MONITORDB < $P1SRSLAVECONF > $CONF4 +$SLAPD -f $CONF4 -h $URI4 -d $LVL $TIMING > $LOG4 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVEPID $SLAVEPID + read foo +fi +KILLPIDS="$KILLPIDS $SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that consumer slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT4 \ + '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 + +MORELDIF=$TESTDIR/more.ldif +TESTOUT1=$TESTDIR/testout1.out +TESTOUT2=$TESTDIR/testout2.out +sed -e 's/[Oo][Uu]=/ou=More /g' -e 's/^[Oo][Uu]: /ou: More /' \ + -e 's/cn=Manager/cn=More Manager/g' \ + -e 's/^cn: Manager/cn: More Manager/' \ + $LDIFORDEREDNOCP > $MORELDIF + +echo "Using ldapadd to populate the provider directory..." +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDEREDNOCP > $TESTOUT1 2>&1 & +C1PID=$! +$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $MORELDIF > $TESTOUT2 2>&1 & +C2PID=$! +wait $C1PID $C2PID + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Stopping the provider, sleeping 10 seconds and restarting it..." +kill -HUP "$PID" +wait $PID +sleep 10 +echo "RESTART" >> $LOG1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID $SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that provider slapd is running..." +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 + +echo "Waiting 10 seconds to let the system catch up" +sleep 10 + +echo "Using ldapmodify to modify provider directory..." + +# +# Do some modifications +# + +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com +changetype: modify +add: drink +drink: Orange Juice +- +delete: sn +sn: Jones +- +add: sn +sn: Jones + +dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +replace: drink +drink: Iced Tea + +dn: cn=ITD Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: uniquemember +uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com +uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +- +add: uniquemember +uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com +uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com + +dn: cn=All Staff,ou=Groups,dc=example,dc=com +changetype: modify +delete: description + +dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +cn: Gern Jensen +sn: Jensen +uid: gjensen +title: Chief Investigator, ITD +postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103 +seealso: cn=All Staff, ou=Groups, dc=example,dc=com +drink: Coffee +homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104 +description: Very odd +facsimiletelephonenumber: +1 313 555 7557 +telephonenumber: +1 313 555 8343 +mail: gjensen@mailgw.example.com +homephone: +1 313 555 8844 + +dn: ou=Retired, ou=People, dc=example,dc=com +changetype: add +objectclass: organizationalUnit +ou: Retired + +dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +cn: Rosco P. Coltrane +sn: Coltrane +uid: rosco +description: Fat tycoon + +dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modrdn +newrdn: cn=Rosco P. Coltrane +deleteoldrdn: 1 +newsuperior: ou=Retired, ou=People, dc=example,dc=com + +dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: delete + +EOMODS + +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldappasswd to change some passwords..." +$LDAPPASSWD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \ + 'cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com' \ + > $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Stopping consumer to test recovery..." +kill -HUP $SLAVEPID +wait $SLAVEPID + +echo "Modifying more entries on the provider..." +$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD >> \ + $TESTOUT 2>&1 << EOMODS +dn: cn=Rosco P. Coltrane, ou=Retired, ou=People, dc=example,dc=com +changetype: delete + +dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com +changetype: modify +add: drink +drink: Mad Dog 20/20 + +dn: cn=Rosco P. Coltrane, ou=Retired, ou=People, dc=example,dc=com +changetype: add +objectclass: OpenLDAPperson +sn: Coltrane +uid: rosco +cn: Rosco P. Coltrane + +EOMODS + +echo "Restarting consumer..." +echo "RESTART" >> $LOG4 +$SLAPD -f $CONF4 -h $URI4 -d $LVL $TIMING >> $LOG4 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVEPID $SLAVEPID + read foo +fi +KILLPIDS="$PID $SLAVEPID" + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +if test ! $BACKLDAP = "ldapno" ; then + echo "Try updating the consumer slapd..." + $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT4 -w $PASSWD > \ + $TESTOUT 2>&1 << EOMODS +dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com +changetype: modify +add: description +description: This write must fail because directed to a shadow context, +description: unless the chain overlay is configured appropriately ;) + +EOMODS + + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + # ITS#4964 + echo "Trying to change some passwords on the consumer..." + $LDAPPASSWD -D "$MANAGERDN" -h $LOCALHOST -p $PORT4 -w $PASSWD \ + 'cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com' \ + > $TESTOUT 2>&1 + RC=$? + if test $RC != 0 ; then + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." + sleep $SLEEP1 +fi + +OPATTRS="entryUUID creatorsName createTimestamp modifiersName modifyTimestamp" + +echo "Using ldapsearch to read all the entries from the provider..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \ + '(objectclass=*)' '*' $OPATTRS > $MASTEROUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at provider ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the consumer..." +$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT4 \ + '(objectclass=*)' '*' $OPATTRS > $SLAVEOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at consumer ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo "Filtering provider results..." +$LDIFFILTER < $MASTEROUT > $MASTERFLT +echo "Filtering consumer results..." +$LDIFFILTER < $SLAVEOUT > $SLAVEFLT + +echo "Comparing retrieved entries from provider and consumer..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - provider and consumer databases differ" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test055-valregex b/tests/scripts/test055-valregex new file mode 100755 index 0000000..a7d4501 --- /dev/null +++ b/tests/scripts/test055-valregex @@ -0,0 +1,117 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh +LVL=acl + +mkdir -p $TESTDIR $DBDIR1 + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $VALREGEXCONF > $CONF1 +$SLAPADD -f $CONF1 -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Testing attribute value regex subsitution..." +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 > $SEARCHOUT + +echo "# Try an attribute vale regex that match, but substitute does not" +echo "# this should fail" +$LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT1 -w jaj >> \ + $TESTOUT 2>&1 << EOMODS +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com +changetype: modify +replace: sn +sn: foobarbuz +EOMODS +RC=$? +case $RC in +50) + echo "ldapmodify failed as expected" + ;; +0) + if test $BACKEND != null ; then + echo "ldapmodify should have failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit -1 + fi + ;; +*) + echo "ldapmodify failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + ;; +esac + +echo "# Try an attribute vale regex that match and substitute does" +echo "# this should succeed" +$LDAPMODIFY -D "$JAJDN" -h $LOCALHOST -p $PORT1 -w jaj >> \ + $TESTOUT 2>&1 << EOMODS +dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com +changetype: modify +replace: sn +sn: James A Jones 1 +EOMODS +RC=$? + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +case $RC in +0) + echo "ldapmodify succeed as expected" + ;; +*) + echo "ldapmodify failed ($RC)!" + exit $RC + ;; +esac + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test056-monitor b/tests/scripts/test056-monitor new file mode 100755 index 0000000..191a42f --- /dev/null +++ b/tests/scripts/test056-monitor @@ -0,0 +1,178 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $MONITORDB = "no" ; then + echo "Monitor backend not available, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 + +echo "Starting slapd on TCP/IP port $PORT..." +. $CONFFILTER $BACKEND $MONITORDB < $SCHEMACONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Using ldapsearch to read connection monitor entries..." +$LDAPSEARCH -S "" -b "$CONNECTIONSMONITORDN" -h $LOCALHOST -p $PORT1 \ + 'objectclass=*' \ + structuralObjectClass entryDN \ + monitorConnectionProtocol monitorConnectionOpsReceived \ + monitorConnectionOpsExecuting monitorConnectionOpsPending \ + monitorConnectionOpsCompleted monitorConnectionGet \ + monitorConnectionRead monitorConnectionWrite \ + monitorConnectionMask monitorConnectionAuthzDN \ + monitorConnectionListener monitorConnectionLocalAddress \ + > $SEARCHOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Compare results, ignoring possible difference of IPv4/IPv6 localhost address +localrewrite='s/=127\.0\.0\.1:/=LOCAL:/; s/=\[::1\]:/=LOCAL:/' +echo "Filtering ldapsearch results..." +sed -e "$localrewrite" < $SEARCHOUT | $LDIFFILTER > $SEARCHFLT +echo "Filtering expected data..." +. $CONFFILTER < $MONITOROUT1 | sed -e "$localrewrite" | $LDIFFILTER > $LDIFFLT +echo "Comparing filter output..." +$CMP $SEARCHFLT $LDIFFLT > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - connection monitor output is not correct" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Using ldapsearch to read database monitor entries..." +$LDAPSEARCH -S "" -b "$DATABASESMONITORDN" -h $LOCALHOST -p $PORT1 \ + 'objectclass=*' \ + structuralObjectClass entryDN namingContexts readOnly \ + monitorIsShadow monitorContext \ + olmBDBEntryCache olmBDBDNCache olmBDBIDLCache \ + > $SEARCHOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering ldapsearch results..." +$LDIFFILTER -b monitor < $SEARCHOUT > $SEARCHFLT + +TMPMONITOROUT2=$MONITOROUT2 +case $BACKEND in +bdb|hdb) + ;; +*) + TMPMONITOROUT2=$TESTDIR/monitor2.out + grep -v "olmBDB" $MONITOROUT2 > $TMPMONITOROUT2 + ;; +esac + +echo "Comparing filter output..." +$CMP $SEARCHFLT $TMPMONITOROUT2 > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - database monitor output is not correct" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Using ldapsearch to read statistics monitor entries..." +$LDAPSEARCH -S "" -b "$STATISTICSMONITORDN" -h $LOCALHOST -p $PORT1 \ + '(|(cn=Entries)(cn=PDU)(cn=Referrals))' \ + structuralObjectClass monitorCounter entryDN \ + > $SEARCHOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering ldapsearch results..." +$LDIFFILTER -b monitor < $SEARCHOUT > $SEARCHFLT + +echo "Comparing filter output..." +$CMP $SEARCHFLT $MONITOROUT3 > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - statistics monitor output is not correct" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Using ldapsearch to read operation monitor entries..." +$LDAPSEARCH -S "" -b "$OPERATIONSMONITORDN" -h $LOCALHOST -p $PORT1 \ + 'objectclass=*' \ + structuralObjectClass monitorOpInitiated monitorOpCompleted entryDN \ + > $SEARCHOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering ldapsearch results..." +$LDIFFILTER -b monitor < $SEARCHOUT > $SEARCHFLT + +echo "Comparing filter output..." +$CMP $SEARCHFLT $MONITOROUT4 > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - operations monitor output is not correct" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 + diff --git a/tests/scripts/test057-memberof-refint b/tests/scripts/test057-memberof-refint new file mode 100755 index 0000000..6016845 --- /dev/null +++ b/tests/scripts/test057-memberof-refint @@ -0,0 +1,282 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 The OpenLDAP Foundation. +## Portions 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 $REFINT = refintno; then + echo "Referential Integrity overlay not available, test skipped" + exit 0 +fi + +if test $BACKEND = bdb; then + echo "$BACKEND backend does not support subtree rename, 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 + +indexInclude="" mainInclude="" bdbInclude="# " nullExclude="" +test $INDEXDB = indexdb || indexInclude="# " +test $MAINDB = maindb || mainInclude="# " +case $BACKEND in +bdb | hdb) bdbInclude="" ;; +null) nullExclude="# " ;; +esac + +if [ "$MEMBEROF" = memberofmod ]; then + echo "Inserting memberof overlay on provider..." + $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 +${nullExclude}objectClass: olc${BACKEND}Config +olcDatabase: {1}$BACKEND +olcSuffix: $BASEDN +olcRootDN: cn=Manager,$BASEDN +olcRootPW:: c2VjcmV0 +olcMonitoring: TRUE +${nullExclude}olcDbDirectory: $TESTDIR/db.1.a/ +${bdbInclude}olcDbCacheSize: 1000 +${indexInclude}olcDbIndex: objectClass eq +${indexInclude}olcDbIndex: cn pres,eq,sub +${indexInclude}olcDbIndex: uid pres,eq,sub +${indexInclude}olcDbIndex: sn pres,eq,sub +${mainInclude}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 + +# refint runs in a background thread, so it most likely won't complete +# before the modify returns. Give it some time to execute. +sleep $SLEEP0 + +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 + +sleep $SLEEP0 + +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 + +sleep $SLEEP0 + +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 diff --git a/tests/scripts/test059-slave-config b/tests/scripts/test059-slave-config new file mode 100755 index 0000000..134b2e6 --- /dev/null +++ b/tests/scripts/test059-slave-config @@ -0,0 +1,444 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi + +CFPRO=$TESTDIR/cfpro.d +CFCON=$TESTDIR/cfcon.d + +mkdir -p $TESTDIR $DBDIR1A $DBDIR1B $DBDIR2A $CFPRO $CFCON + +$SLAPPASSWD -g -n >$CONFIGPWF + +if test x"$SYNCMODE" = x ; then + SYNCMODE=rp +fi +case "$SYNCMODE" in + ro) + SYNCTYPE="type=refreshOnly interval=00:00:00:03" + ;; + rp) + SYNCTYPE="type=refreshAndPersist" + ;; + *) + echo "unknown sync mode $SYNCMODE" + exit 1; + ;; +esac + +# +# Test replication of dynamic config with alternate slave config: +# - start provider +# - start consumer +# - configure over ldap +# - populate over ldap +# - configure syncrepl over ldap +# - retrieve database over ldap and compare against expected results +# + +echo "Starting provider slapd on TCP/IP port $PORT1..." +. $CONFFILTER $BACKEND $MONITORDB < $DYNAMICCONF > $CONFLDIF +$SLAPADD -F $CFPRO -n 0 -l $CONFLDIF +$SLAPD -F $CFPRO -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that provider slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $URI1 \ + '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 + +echo "Inserting syncprov overlay on provider..." +if [ "$SYNCPROV" = syncprovmod ]; then + $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: syncprov.la +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed for moduleLoad ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi +fi +read CONFIGPW < $CONFIGPWF +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 +dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config +changetype: add +objectClass: olcOverlayConfig +objectClass: olcSyncProvConfig +olcOverlay: syncprov +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for syncprov config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Slaves will not replicate the master's actual cn=config. +# Instead, they will use an alternate DB so that they may be +# configured differently from the master. This alternate DB +# will also be a consumer for the real cn=schema,cn=config tree. +# It has MirrorMode enabled so that it can be written directly +# while being a slave of the main schema. +echo "Configuring slave config DB on provider..." +$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1 +dn: cn=config +changetype: modify +add: olcServerID +olcServerID: 1 + +dn: olcDatabase={1}ldif,cn=config +changetype: add +objectClass: olcDatabaseConfig +objectClass: olcLdifConfig +olcDatabase: {1}ldif +olcDbDirectory: $DBDIR1A +olcSuffix: cn=config,cn=slave +olcRootDN: cn=config,cn=slave +olcRootPW: repsecret +olcAccess: to * by dn.base="cn=config" write + +dn: olcOverlay=syncprov,olcDatabase={1}ldif,cn=config +changetype: add +objectClass: olcOverlayConfig +objectClass: olcSyncProvConfig +olcOverlay: syncprov + +dn: cn=config,cn=slave +changetype: add +objectClass: olcGlobal +cn: slaveconfig + +dn: cn=schema,cn=config,cn=slave +changetype: add +objectClass: olcSchemaConfig +cn: schema + +dn: olcDatabase={0}config,cn=config,cn=slave +changetype: add +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcRootPW: topsecret +olcSyncrepl: {0}rid=001 provider=$URI1 binddn="cn=config,cn=slave" + bindmethod=simple credentials=repsecret searchbase="cn=config,cn=slave" + $SYNCTYPE retry="3 5 300 5" timeout=3 suffixmassage="cn=config" +olcUpdateRef: $URI1 + +dn: olcDatabase={1}ldif,cn=config +changetype: modify +add: olcSyncrepl +olcSyncrepl: {0}rid=001 provider=$URI1 binddn="cn=config" + bindmethod=simple credentials=$CONFIGPW searchbase="cn=schema,cn=config" + $SYNCTYPE retry="3 5 300 5" timeout=3 + suffixmassage="cn=schema,cn=config,cn=slave" +- +add: olcMirrorMode +olcMirrorMode: TRUE + +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for slave DB config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting consumer slapd on TCP/IP port $PORT2..." +$SLAPADD -F $CFCON -n 0 -l $CONFLDIF +$SLAPD -F $CFCON -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 & +SLAVEPID=$! +if test $WAIT != 0 ; then + echo SLAVEPID $SLAVEPID + read foo +fi +KILLPIDS="$KILLPIDS $SLAVEPID" + +sleep 1 + +echo "Using ldapsearch to check that consumer slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $URI2 \ + '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 + +echo "Configuring syncrepl on consumer..." +$LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcDatabase={0}config,cn=config +changetype: modify +add: olcSyncRepl +olcSyncRepl: rid=001 provider=$URI1 binddn="cn=config,cn=slave" + bindmethod=simple credentials=repsecret searchbase="cn=config,cn=slave" + $SYNCTYPE retry="3 5 300 5" timeout=3 + suffixmassage="cn=config" +- +add: olcUpdateRef +olcUpdateRef: $URI1 +EOF + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Using ldapsearch to check that syncrepl received config changes..." +RC=32 +for i in 0 1 2 3 4 5; do + RESULT=`$LDAPSEARCH -H $URI2 -D cn=config -y $CONFIGPWF \ + -s base -b "olcDatabase={0}config,cn=config" \ + '(olcUpdateRef=*)' 2>&1 | awk '/^dn:/ {print "OK"}'` + if test "x$RESULT" = "xOK" ; then + RC=0 + break + fi + echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." + sleep $SLEEP1 +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Adding schema and databases on provider..." +$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +include: file://$ABS_SCHEMADIR/core.ldif + +include: file://$ABS_SCHEMADIR/cosine.ldif + +include: file://$ABS_SCHEMADIR/inetorgperson.ldif + +include: file://$ABS_SCHEMADIR/openldap.ldif + +include: file://$ABS_SCHEMADIR/nis.ldif +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed for schema config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to check that syncrepl received the schema changes..." +RC=32 +for i in 0 1 2 3 4 5; do + RESULT=`$LDAPSEARCH -H $URI2 -D cn=config -y $CONFIGPWF \ + -s base -b "cn=schema,cn=config" \ + '(cn=openldap)' 2>&1 | awk '/^dn:/ {print "OK"}'` + if test "x$RESULT" = "xOK" ; then + RC=0 + break + fi + echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." + sleep $SLEEP1 +done + +nullExclude="" nullOK="" +test $BACKEND = null && nullExclude="# " nullOK="OK" + +if [ "$BACKENDTYPE" = mod ]; then + $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModulePath: ../servers/slapd/back-$BACKEND +olcModuleLoad: back_$BACKEND.la + +dn: cn=module,cn=config,cn=slave +objectClass: olcModuleList +cn: module +olcModulePath: ../servers/slapd/back-$BACKEND +olcModuleLoad: back_$BACKEND.la +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed for backend config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi +fi + +$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcDatabase={2}$BACKEND,cn=config +objectClass: olcDatabaseConfig +${nullExclude}objectClass: olc${BACKEND}Config +olcDatabase: {2}$BACKEND +olcSuffix: $BASEDN +${nullExclude}olcDbDirectory: $DBDIR1B +olcRootDN: $MANAGERDN +olcRootPW: $PASSWD +olcSyncRepl: rid=002 provider=$URI1 binddn="$MANAGERDN" bindmethod=simple + credentials=$PASSWD searchbase="$BASEDN" $SYNCTYPE + retry="3 5 300 5" timeout=3 +olcUpdateRef: $URI1 + +dn: olcOverlay=syncprov,olcDatabase={2}${BACKEND},cn=config +changetype: add +objectClass: olcOverlayConfig +objectClass: olcSyncProvConfig +olcOverlay: syncprov + +dn: olcDatabase={1}$BACKEND,cn=config,cn=slave +objectClass: olcDatabaseConfig +${nullExclude}objectClass: olc${BACKEND}Config +olcDatabase: {1}$BACKEND +olcSuffix: $BASEDN +${nullExclude}olcDbDirectory: $DBDIR2A +olcRootDN: $MANAGERDN +olcRootPW: $PASSWD +olcSyncRepl: rid=002 provider=$URI1 binddn="$MANAGERDN" bindmethod=simple + credentials=$PASSWD searchbase="$BASEDN" $SYNCTYPE + retry="3 5 300 5" timeout=3 +olcUpdateRef: $URI1 + +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed for database config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +if test $INDEXDB = indexdb ; then + $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: olcDatabase={2}$BACKEND,cn=config +changetype: modify +add: olcDbIndex +olcDbIndex: objectClass,entryUUID,entryCSN eq +olcDbIndex: cn,uid pres,eq,sub +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd modify for database config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi +fi + +echo "Using ldapadd to populate provider..." +$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD -f $LDIFORDERED \ + >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed for database config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +echo "Using ldapsearch to check that syncrepl received database changes..." +RC=32 +for i in 0 1 2 3 4 5; do + RESULT=`$LDAPSEARCH -H $URI2 \ + -s base -b "cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com" \ + '(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'` + if test "x$RESULT$nullOK" = "xOK" ; then + RC=0 + break + fi + echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." + sleep $SLEEP1 +done + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the provider..." +$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI1 -w $PASSWD \ + 'objectclass=*' > $MASTEROUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at provider ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Using ldapsearch to read all the entries from the consumer..." +$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI2 -w $PASSWD \ + 'objectclass=*' > $SLAVEOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at consumer ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo "Filtering provider results..." +$LDIFFILTER < $MASTEROUT > $MASTERFLT +echo "Filtering consumer results..." +$LDIFFILTER < $SLAVEOUT > $SLAVEFLT + +echo "Comparing retrieved entries from provider and consumer..." +$CMP $MASTERFLT $SLAVEFLT > $CMPOUT + +if test $? != 0 ; then + echo "test failed - provider and consumer databases differ" + exit 1 +fi + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test060-mt-hot b/tests/scripts/test060-mt-hot new file mode 100755 index 0000000..89a5ff6 --- /dev/null +++ b/tests/scripts/test060-mt-hot @@ -0,0 +1,304 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +# The default debug level logs more than 1Gb: +case "$SLAPD_DEBUG_MT_HOT/$SLAPD_DEBUG" in +/0 | /0x0 | /0X0 | /none | /NONE | /32768 | /0x8000 | 0X8000 | /0100000) :;; +*) SLAPD_DEBUG=${SLAPD_DEBUG_MT_HOT-stats} ;; +esac + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $MONITORDB = "no" ; then + echo "Monitor backend not available, test skipped" + exit 0 +fi + +if test x$TESTLOOPS = x ; then + TESTLOOPS=50 +fi + +mkdir -p $TESTDIR $DBDIR1 + +# +# Populate and start up slapd server with some random data +# + +echo "Running slapadd to build slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $MCONF > $ADDCONF +$SLAPADD -f $ADDCONF -l $LDIFORDERED +RC=$? +if test $RC != 0 ; then + echo "slapadd failed ($RC)!" + exit $RC +fi + +echo "Running slapindex to index slapd database..." +. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1 +$SLAPINDEX -f $CONF1 +RC=$? +if test $RC != 0 ; then + echo "warning: slapindex failed ($RC)" + echo " assuming no indexing support" +fi + +echo "Starting slapd on TCP/IP port $PORT1..." +echo $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +# Perform a basic search, make sure of a functional setup +echo "Testing basic monitor search..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITORDN" -H $URI1 \ + '(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 "mt-hot read failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +cat /dev/null > $MTREADOUT + +echo "Monitor searches" +# Perform a basic single threaded search on a single connection +THR=1 +OUTER=1 +INNER=`expr $TESTLOOPS \* 1000` +echo "Testing basic mt-hot search: $THR threads ($OUTER x $INNER) loops..." +echo $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$MONITORDN" \ + -m $THR -L $OUTER -l $INNER +$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$MONITORDN" -f "(objectclass=*)" \ + -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapd-mtread failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Perform a basic multi-threaded search on a single connection +THR=5 +OUTER=1 +INNER=`expr $TESTLOOPS \* 200` +echo "Testing basic mt-hot search: $THR threads ($OUTER x $INNER) loops..." +echo $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$MONITORDN" \ + -m $THR -L $OUTER -l $INNER +$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$MONITORDN" -f "(objectclass=*)" \ + -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapd-mtread failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Perform a basic multi-threaded search on a single connection +THR=100 +OUTER=5 +INNER=`expr $TESTLOOPS \* 2` +echo "Testing basic mt-hot search: $THR threads ($OUTER x $INNER) loops..." +echo $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$MONITORDN" \ + -m $THR -L $OUTER -l $INNER +$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$MONITORDN" -f "(objectclass=*)" \ + -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapd-mtread failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Perform a single threaded random DB search on a single connection +echo "Random searches" +THR=1 +OUTER=1 +INNER=`expr $TESTLOOPS \* 1000` +echo "Testing random mt-hot search: $THR threads ($OUTER x $INNER) loops..." +echo $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$BASEDN" -f "(objectclass=*)" \ + -m $THR -L $OUTER -l $INNER +$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$BASEDN" -f "(objectclass=*)" \ + -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapd-mtread failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Perform a multi-threaded random DB search on a single connection +THR=5 +OUTER=1 +INNER=`expr $TESTLOOPS \* 200` +echo "Testing random mt-hot search: $THR threads ($OUTER x $INNER) loops..." +echo $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$BASEDN" -f "(objectclass=*)" \ + -m $THR -L $OUTER -l $INNER +$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$BASEDN" -f "(objectclass=*)" \ + -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapd-mtread failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Perform a multi-threaded random DB search on a single connection +THR=100 +OUTER=5 +INNER=`expr $TESTLOOPS \* 2` +echo "Testing random mt-hot search: $THR threads ($OUTER x $INNER) loops..." +echo $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$BASEDN" -f "(objectclass=*)" \ + -m $THR -L $OUTER -l $INNER +$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$BASEDN" -f "(objectclass=*)" \ + -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapd-mtread failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Perform a basic multi-threaded search using multiple connections +echo "Multiple threads and connection searches" +CONN=5 +THR=5 +OUTER=1 +INNER=`expr $TESTLOOPS \* 200` +echo "Testing basic mt-hot search: $THR threads $CONN conns ($OUTER x $INNER) loops..." +echo $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$MONITORDN" \ + -c $CONN -m $THR -L $OUTER -l $INNER +$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$MONITORDN" -f "(objectclass=*)" \ + -c $CONN -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapd-mtread failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Perform a basic multi-threaded search using multiple connections +CONN=5 +THR=50 +OUTER=5 +INNER=`expr $TESTLOOPS \* 20` +echo "Testing basic mt-hot search: $THR threads $CONN conns ($OUTER x $INNER) loops..." +echo $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$MONITORDN" \ + -c $CONN -m $THR -L $OUTER -l $INNER +$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$MONITORDN" -f "(objectclass=*)" \ + -c $CONN -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapd-mtread failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Perform a multi-threaded random DB search using multiple connections +CONN=5 +THR=100 +OUTER=5 +INNER=`expr $TESTLOOPS \* 2` +echo "Testing random mt-hot search: $THR threads $CONN conns ($OUTER x $INNER) loops..." +echo $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$BASEDN" -f "(objectclass=*)" \ + -c $CONN -m $THR -L $OUTER -l $INNER +$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$BASEDN" -f "(objectclass=*)" \ + -c $CONN -m $THR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapd-mtread failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Perform a multi-threaded random reads and writes using single connection +CONN=1 +THR=10 +WTHR=10 +OUTER=5 +INNER=`expr $TESTLOOPS \* 2` +echo "Testing random mt-hot r/w search: $THR read threads $WTHR write threads $CONN conns ($OUTER x $INNER) loops..." +echo $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$BASEDN" -f "(&(!(cn=rwtest*))(objectclass=*))" \ + -c $CONN -m $THR -M $WTHR -L $OUTER -l $INNER +$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$BASEDN" -f "(&(!(cn=rwtest*))(objectclass=*))" \ + -c $CONN -m $THR -M $WTHR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapd-mtread failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Perform a multi-threaded random reads and writes using multiple connections +CONN=5 +THR=10 +WTHR=10 +OUTER=5 +INNER=`expr $TESTLOOPS \* 2` +echo "Testing random mt-hot r/w search: $THR read threads $WTHR write threads $CONN conns ($OUTER x $INNER) loops..." +echo $SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$BASEDN" -f "(&(!(cn=rwtest*))(objectclass=*))" \ + -c $CONN -m $THR -M $WTHR -L $OUTER -l $INNER +$SLAPDMTREAD -H $URI1 -D "$MANAGERDN" -w $PASSWD \ + -e "$BASEDN" -f "(&(!(cn=rwtest*))(objectclass=*))" \ + -c $CONN -m $THR -M $WTHR -L $OUTER -l $INNER >> $MTREADOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "slapd-mtread failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +exit 0 diff --git a/tests/scripts/test061-syncreplication-initiation b/tests/scripts/test061-syncreplication-initiation new file mode 100755 index 0000000..eaf82db --- /dev/null +++ b/tests/scripts/test061-syncreplication-initiation @@ -0,0 +1,669 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +# This script tests race conditions related to setting up the syncrepl +# refresh phase, especially when the provider is itself a consumer +# refreshing from its provider again. + +# The configuration used is a provider->forwarder->consumer chain, where +# the forwarder is restarted between add/delete of entries on the provider. + +echo "Running defines.sh" +. $SRCDIR/scripts/defines.sh + +test "x$INITIATION_RACE_TESTS" = "x" && INITIATION_RACE_TESTS=1 + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi + +RETRY="1 +" + +PROV_DIR=$TESTDIR/prov +CONS_DIR=$TESTDIR/cons +FWD1_DIR=$TESTDIR/fwd1 +FWD2_DIR=$TESTDIR/fwd2 + +PROV_URI=$URI1 +CONS_URI=$URI2 +FWD1_URI=$URI3 + +PROV_LOG=$LOG1 +CONS_LOG=$LOG2 +FWD1_LOG=$LOG3 + +DIRS="$PROV_DIR $CONS_DIR $FWD1_DIR" +URIS="$PROV_URI $CONS_URI $FWD1_URI" + +noObj=32 +nullExclude="" nullOK="" +test $BACKEND = null && nullExclude="# " nullOK="OK" noObj=0 + +mkdir -p $TESTDIR + +for dir in $DIRS; do + mkdir -p $dir $dir/slapd.d $dir/db +done + +KILLPIDS= + +$SLAPPASSWD -g -n >$CONFIGPWF + +case "$BACKEND" in + bdb|hdb) olcDbCheckpoint="olcDbCheckpoint";; + *) olcDbCheckpoint="# olcDbCheckpoint";; +esac + +echo "Initializing server configurations" +for dir in $DIRS; do + $SLAPADD -F $dir/slapd.d -n 0 <<EOF +dn: cn=config +objectClass: olcGlobal +cn: config +olcServerID: 1 $PROV_URI +olcServerID: 2 $CONS_URI +olcServerID: 3 $FWD1_URI + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcRootPW:< file://$CONFIGPWF + +EOF +done + +echo "Starting provider slapd on $PROV_URI" +cd $PROV_DIR +$SLAPD -F slapd.d -h $PROV_URI -d $LVL $TIMING >> $PROV_LOG 2>&1 & +PROV_PID=$! +if test $WAIT != 0 ; then + echo PID $PROV_PID + read foo +fi +KILLPIDS="$KILLPIDS $PROV_PID" +cd $TESTWD +sleep 1 +for i in 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $PROV_URI \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + test $RC = 0 && break + echo "Waiting $i seconds for slapd to start..." + sleep $i +done +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting forward1 slapd on $FWD1_URI" +cd $FWD1_DIR +$SLAPD -F slapd.d -h $FWD1_URI -d $LVL $TIMING >> $FWD1_LOG 2>&1 & +FWD1_PID=$! +if test $WAIT != 0 ; then + echo PID $FWD1_PID + read foo +fi +KILLPIDS="$KILLPIDS $FWD1_PID" +cd $TESTWD +sleep 1 +for i in 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $FWD1_URI \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + test $RC = 0 && break + echo "Waiting $i seconds for slapd to start..." + sleep $i +done +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting consumer slapd on $CONS_URI" +cd $CONS_DIR +$SLAPD -F slapd.d -h $CONS_URI -d $LVL $TIMING >> $CONS_LOG 2>&1 & +CONS_PID=$! +if test $WAIT != 0 ; then + echo PID $CONS_PID + read foo +fi +KILLPIDS="$KILLPIDS $CONS_PID" +cd $TESTWD +sleep 1 +for i in 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $CONS_URI \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + test $RC = 0 && break + echo "Waiting $i seconds for slapd to start..." + sleep $i +done +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +for uri in $URIS; do + echo "Adding schema on $uri" + $LDAPADD -D cn=config -H $uri -y $CONFIGPWF <<EOF > $TESTOUT 2>&1 +include: file://$ABS_SCHEMADIR/core.ldif + +include: file://$ABS_SCHEMADIR/cosine.ldif + +include: file://$ABS_SCHEMADIR/inetorgperson.ldif + +include: file://$ABS_SCHEMADIR/openldap.ldif + +include: file://$ABS_SCHEMADIR/nis.ldif + +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + [ "$BACKENDTYPE" = mod ] || continue + + echo "Adding backend module on $uri..." + $LDAPADD -D cn=config -H $uri -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1 +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModulePath: $TESTWD/../servers/slapd/back-$BACKEND +olcModuleLoad: back_$BACKEND.la + +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed for backend module ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi +done + +syncprov_module='' +[ "$AC_syncprov" = syncprovmod ] && syncprov_module=" +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModulePath: $TESTWD/../servers/slapd/overlays +olcModuleLoad: syncprov.la" + +for uri in $PROV_URI; do + echo "Adding database configuration on $uri" + $LDAPADD -D cn=config -H $uri -y $CONFIGPWF <<EOF > $TESTOUT 2>&1 +dn: olcDatabase={1}$BACKEND,cn=config +objectClass: olcDatabaseConfig +objectClass: olc${BACKEND}Config +olcDatabase: {1}$BACKEND +${nullExclude}olcDbDirectory: ./db +$olcDbCheckpoint: 1024 5 +olcSuffix: $BASEDN +olcRootDN: $MANAGERDN +olcRootPW: $PASSWD + +$syncprov_module + +dn: olcOverlay={0}syncprov,olcDatabase={1}$BACKEND,cn=config +objectClass: olcOverlayConfig +objectClass: olcSyncProvConfig +olcOverlay: {0}syncprov +olcSpCheckpoint: 1 1 + +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Populating provider on $uri" + $LDAPADD -D "$MANAGERDN" -H $PROV_URI -w $PASSWD <<EOF >> $TESTOUT 2>&1 +dn: $BASEDN +objectClass: top +objectClass: organization +objectClass: dcObject +dc: example +o: Example, Inc + +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi +done + +for uri in $FWD1_URI; do + echo "Adding database configuration on $uri" + $LDAPADD -D cn=config -H $uri -y $CONFIGPWF <<EOF > $TESTOUT 2>&1 +dn: olcDatabase={1}$BACKEND,cn=config +objectClass: olcDatabaseConfig +objectClass: olc${BACKEND}Config +olcDatabase: {1}$BACKEND +${nullExclude}olcDbDirectory: ./db +$olcDbCheckpoint: 1024 5 +olcSuffix: $BASEDN +olcRootDN: $MANAGERDN +olcRootPW: $PASSWD +olcSyncRepl: rid=1 provider=$PROV_URI searchbase="$BASEDN" + binddn="$MANAGERDN" bindmethod=simple credentials=$PASSWD + type=refreshAndPersist retry="$RETRY" timeout=1 + +$syncprov_module + +dn: olcOverlay={0}syncprov,olcDatabase={1}$BACKEND,cn=config +objectClass: olcOverlayConfig +objectClass: olcSyncProvConfig +olcOverlay: {0}syncprov +olcSpCheckpoint: 1 1 + +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi +done + +for uri in $CONS_URI; do + echo "Adding database configuration on $uri" + $LDAPADD -D cn=config -H $uri -y $CONFIGPWF <<EOF > $TESTOUT 2>&1 +dn: olcDatabase={1}$BACKEND,cn=config +objectClass: olcDatabaseConfig +objectClass: olc${BACKEND}Config +olcDatabase: {1}$BACKEND +${nullExclude}olcDbDirectory: ./db +$olcDbCheckpoint: 1024 5 +olcSuffix: $BASEDN +olcRootDN: $MANAGERDN +olcRootPW: $PASSWD +olcSyncRepl: rid=1 provider=$FWD1_URI searchbase="$BASEDN" + binddn="$MANAGERDN" bindmethod=simple credentials=$PASSWD + type=refreshAndPersist retry="$RETRY" timeout=1 + +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi +done + +for uri in $FWD1_URI $CONS_URI; do + echo "Using ldapsearch to check that $uri received database..." + for i in 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$BASEDN" -H $uri \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + test $RC = 0 && break + echo "Waiting $i seconds for slapd to receive database..." + sleep $i + done + if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi +done + +RACE_NUM=0 +ERROR=0 + +nEntries=10 + +addEnd=1 +delEnd=1 + +addIdx=1 +delIdx=1 + +while test $ERROR -eq 0 -a $RACE_NUM -lt $INITIATION_RACE_TESTS ; do + RACE_NUM=`expr $RACE_NUM + 1` + echo "Running $RACE_NUM of $INITIATION_RACE_TESTS syncrepl initiation race tests..." + + echo "Stopping forwarders for add test" + for pid in $FWD1_PID; do + kill -HUP $pid + wait $pid + KILLPIDS=`echo "$KILLPIDS " | sed -e "s/ $pid / /"`; + done + + addStart=$addEnd + addEnd=`expr $addEnd + $nEntries` + + echo "Using ldapadd to add $nEntries entries on provider" + while test $addIdx -lt $addEnd; do + $LDAPADD -D "$MANAGERDN" -H $PROV_URI -w $PASSWD <<EOF >> $TESTOUT 2>&1 +dn: ou=$addIdx,$BASEDN +objectClass: top +objectClass: organizationalUnit +ou: $addIdx + +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed for entry $addIdx ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + addIdx=`expr $addIdx + 1` + done + + echo "Starting forwarders again" + cd $FWD1_DIR + $SLAPD -F slapd.d -h $FWD1_URI -d $LVL $TIMING >> $FWD1_LOG 2>&1 & + FWD1_PID=$! + KILLPIDS="$KILLPIDS $FWD1_PID" + cd $TESTWD + + addEnd=`expr $addEnd + $nEntries` + + echo "Using ldapadd to add $nEntries more entries on provider" + while test $addIdx -lt $addEnd; do + $LDAPADD -D "$MANAGERDN" -H $PROV_URI -w $PASSWD <<EOF >> $TESTOUT 2>&1 +dn: ou=$addIdx,$BASEDN +objectClass: top +objectClass: organizationalUnit +ou: $addIdx + +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed for entry $addIdx ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + addIdx=`expr $addIdx + 1` + done + + for uri in $FWD1_URI $CONS_URI; do + echo "Checking replication to $uri" + RC=32 + i=$addStart + while test $i -lt $addEnd; do + for j in 1 2 3 4 5; do + RESULT=`$LDAPSEARCH -H $uri -s base -b "ou=$i,$BASEDN" 2>&1 \ + | awk '/^dn:/ {print "OK"}'` + if test "x$RESULT$nullOK" = "xOK" ; then + RC=0 + break + fi + echo "Waiting $j seconds for $uri to receive entry $i..." + sleep $j + done + if test $RC != 0 ; then + echo "ERROR: Entry $i not replicated to $uri! ($RC)!" + ERROR=1 + break + fi + i=`expr $i + 1` + done + if test $ERROR != 0; then break; fi + done + if test $ERROR != 0; then break; fi + + echo "Stopping forwarders for add/delete test" + for pid in $FWD1_PID; do + kill -HUP $pid + wait $pid + KILLPIDS=`echo "$KILLPIDS " | sed -e "s/ $pid / /"`; + done + + addStart=$addEnd + addEnd=`expr $addEnd + $nEntries` + + echo "Using ldapadd to add $nEntries entries on provider" + while test $addIdx -lt $addEnd; do + $LDAPADD -D "$MANAGERDN" -H $PROV_URI -w $PASSWD <<EOF >> $TESTOUT 2>&1 +dn: ou=$addIdx,$BASEDN +objectClass: top +objectClass: organizationalUnit +ou: $addIdx + +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed for entry $addIdx ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + addIdx=`expr $addIdx + 1` + done + + delStart=$delEnd + delEnd=`expr $delEnd + $nEntries` + + echo "Using ldapdelete to delete $nEntries entries on provider" + while test $delIdx -lt $delEnd; do + $LDAPDELETE -D "$MANAGERDN" -H $PROV_URI -w $PASSWD "ou=$delIdx,$BASEDN" + RC=$? + if test $RC != 0 ; then + echo "ldapdelete failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + delIdx=`expr $delIdx + 1` + done + + echo "Starting forwarders again" + cd $FWD1_DIR + $SLAPD -F slapd.d -h $FWD1_URI -d $LVL $TIMING >> $FWD1_LOG 2>&1 & + FWD1_PID=$! + KILLPIDS="$KILLPIDS $FWD1_PID" + cd $TESTWD + + addEnd=`expr $addEnd + $nEntries` + delEnd=`expr $delEnd + $nEntries` + + echo "Using ldapadd to add $nEntries more entries on provider" + while test $addIdx -lt $addEnd; do + $LDAPADD -D "$MANAGERDN" -H $PROV_URI -w $PASSWD <<EOF >> $TESTOUT 2>&1 +dn: ou=$addIdx,$BASEDN +objectClass: top +objectClass: organizationalUnit +ou: $addIdx + +EOF + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed for entry $addIdx ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + addIdx=`expr $addIdx + 1` + done + + echo "Using ldapdelete to delete $nEntries more entries on provider" + while test $delIdx -lt $delEnd; do + $LDAPDELETE -D "$MANAGERDN" -H $PROV_URI -w $PASSWD "ou=$delIdx,$BASEDN" + RC=$? + if test $RC != 0 ; then + echo "ldapdelete failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + delIdx=`expr $delIdx + 1` + done + + for uri in $FWD1_URI $CONS_URI; do + echo "Checking replication to $uri" + RC=32 + i=$addStart + while test $i -lt $addEnd; do + for j in 1 2 3 4 5; do + RESULT=`$LDAPSEARCH -H $uri -s base -b "ou=$i,$BASEDN" 2>&1 \ + | awk '/^dn:/ {print "OK"}'` + if test "x$RESULT$nullOK" = "xOK" ; then + RC=0 + break + fi + echo "Waiting $j seconds for $uri to receive entry $i..." + sleep $j + done + if test $RC != 0 ; then + echo "ERROR: Entry $i not replicated to $uri! ($RC)!" + ERROR=1 + break + fi + i=`expr $i + 1` + done + if test $ERROR != 0; then break; fi + + i=$delStart + while test $i -lt $delEnd; do + for j in 1 2 3 4 5; do + $LDAPSEARCH -s base -b "ou=$i,$BASEDN" -H $uri > /dev/null 2>&1 + RC=$? + if test $RC = $noObj; then break; fi + echo "Waiting $j seconds for $uri to delete entry $i..." + sleep $j + done + if test $RC != $noObj; then + echo "ERROR: Entry $i not removed on $uri! (RC=$RC)" + ERROR=1 + break + fi + i=`expr $i + 1` + done + if test $ERROR != 0; then break; fi + done + if test $ERROR != 0; then break; fi + + echo "Stopping forwarders for delete test" + for pid in $FWD1_PID; do + kill -HUP $pid + wait $pid + KILLPIDS=`echo "$KILLPIDS " | sed -e "s/ $pid / /"`; + done + + delStart=$delEnd + delEnd=`expr $delEnd + $nEntries` + + echo "Using ldapdelete to delete entries on provider" + while test $delIdx -lt $delEnd; do + $LDAPDELETE -D "$MANAGERDN" -H $PROV_URI -w $PASSWD "ou=$delIdx,$BASEDN" + RC=$? + if test $RC != 0 ; then + echo "ldapdelete failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + delIdx=`expr $delIdx + 1` + done + + echo "Starting forwarders again" + cd $FWD1_DIR + $SLAPD -F slapd.d -h $FWD1_URI -d $LVL $TIMING >> $FWD1_LOG 2>&1 & + FWD1_PID=$! + KILLPIDS="$KILLPIDS $FWD1_PID" + cd $TESTWD + + delEnd=`expr $delEnd + $nEntries` + + echo "Using ldapdelete to delete $nEntries more entries on provider" + while test $delIdx -lt $delEnd; do + $LDAPDELETE -D "$MANAGERDN" -H $PROV_URI -w $PASSWD "ou=$delIdx,$BASEDN" + RC=$? + if test $RC != 0 ; then + echo "ldapdelete failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + delIdx=`expr $delIdx + 1` + done + + for uri in $FWD1_URI $CONS_URI; do + echo "Checking replication to $uri" + RC=0 + i=$delStart + while test $i -lt $delEnd; do + for j in 1 2 3 4 5; do + $LDAPSEARCH -s base -b "ou=$i,$BASEDN" -H $uri > /dev/null 2>&1 + RC=$? + if test $RC = $noObj; then break; fi + echo "Waiting $j seconds for $uri to delete entry $i..." + sleep $j + done + if test $RC != $noObj; then + echo "ERROR: Entry $i not removed on $uri! (RC=$RC)" + ERROR=1 + break + fi + i=`expr $i + 1` + done + if test $ERROR != 0; then break; fi + done + if test $ERROR != 0; then break; fi + + sleep 1 + echo "Checking contextCSN" + CSN_ERRORS=0 + CSN1=`$LDAPSEARCH -H $URI1 -b $BASEDN -s base contextCSN | grep contextCSN` + CSN2=`$LDAPSEARCH -H $URI2 -b $BASEDN -s base contextCSN | grep contextCSN` + CSN3=`$LDAPSEARCH -H $URI3 -b $BASEDN -s base contextCSN | grep contextCSN` + + if test -z "$CSN1" ; then + test $BACKEND = null && break + echo "ERROR: contextCSN empty on provider" + ERROR=1 + break + fi + nCSN=`echo "$CSN1" | wc -l` + if test "$nCSN" -ne 1 ; then + echo "ERROR: Wrong contextCSN count on provder, should be 1" + echo "$CSN1" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 + fi + if test -z "$CSN2" -o "$CSN1" != "$CSN2" ; then + echo "ERROR: contextCSN mismatch between provider and consumer" + echo "contextCSN on provider: $CSN1" + echo "contextCSN on consumer: $CSN2" + ERROR=1 + break + fi + if test -z "$CSN3" -o "$CSN1" != "$CSN3" ; then + echo "ERROR: contextCSN mismatch between provider and forward1" + echo "contextCSN on provider: $CSN1" + echo "contextCSN on forward1: $CSN3" + ERROR=1 + break + fi +done + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +if test $ERROR != 0; then + echo "Error found after $RACE_NUM of $INITIATION_RACE_TESTS iterations" + exit 1 +else + echo "No race errors found after $INITIATION_RACE_TESTS iterations" +fi + +echo ">>>>> Test succeeded" + +exit 0 diff --git a/tests/scripts/test063-delta-multimaster b/tests/scripts/test063-delta-multimaster new file mode 100755 index 0000000..6152913 --- /dev/null +++ b/tests/scripts/test063-delta-multimaster @@ -0,0 +1,563 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $SYNCPROV = syncprovno; then + echo "Syncrepl provider overlay not available, test skipped" + exit 0 +fi +if test $ACCESSLOG = accesslogno; then + echo "Accesslog overlay not available, test skipped" + exit 0 +fi + +MMR=2 + +XDIR=$TESTDIR/srv +TMP=$TESTDIR/tmp + +mkdir -p $TESTDIR + +$SLAPPASSWD -g -n >$CONFIGPWF + +if test x"$SYNCMODE" = x ; then + SYNCMODE=rp +fi +case "$SYNCMODE" in + ro) + SYNCTYPE="type=refreshOnly interval=00:00:00:03" + ;; + rp) + SYNCTYPE="type=refreshAndPersist interval=00:00:00:03" + ;; + *) + echo "unknown sync mode $SYNCMODE" + exit 1; + ;; +esac + +# +# Test delta-sync mmr +# - start servers +# - configure over ldap +# - populate over ldap +# - configure syncrepl over ldap +# - break replication +# - modify each server separately +# - restore replication +# - compare results +# + +nullExclude="" +test $BACKEND = null && nullExclude="# " + +KILLPIDS= + +echo "Initializing server configurations..." +n=1 +while [ $n -le $MMR ]; do + +DBDIR=${XDIR}$n/db +CFDIR=${XDIR}$n/slapd.d + +mkdir -p ${XDIR}$n $DBDIR.1 $DBDIR.2 $CFDIR + +o=`expr 3 - $n` +cat > $TMP <<EOF +dn: cn=config +objectClass: olcGlobal +cn: config +olcServerID: $n + +EOF + +if [ "$SYNCPROV" = syncprovmod -o "$ACCESSLOG" = accesslogmod ]; then + cat <<EOF >> $TMP +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModulePath: $TESTWD/../servers/slapd/overlays +EOF + if [ "$SYNCPROV" = syncprovmod ]; then + echo "olcModuleLoad: syncprov.la" >> $TMP + fi + if [ "$ACCESSLOG" = accesslogmod ]; then + echo "olcModuleLoad: accesslog.la" >> $TMP + fi + echo "" >> $TMP +fi + +if [ "$BACKENDTYPE" = mod ]; then +cat <<EOF >> $TMP +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModulePath: $TESTWD/../servers/slapd/back-$BACKEND +olcModuleLoad: back_$BACKEND.la + +EOF +fi +MYURI=`eval echo '$URI'$n` +PROVIDERURI=`eval echo '$URI'$o` +if test $INDEXDB = indexdb ; then +INDEX1="olcDbIndex: objectClass,entryCSN,reqStart,reqDN,reqResult eq" +INDEX2="olcDbIndex: objectClass,entryCSN,entryUUID eq" +else +INDEX1= +INDEX2= +fi +cat >> $TMP <<EOF +dn: cn=schema,cn=config +objectclass: olcSchemaconfig +cn: schema + +include: file://$ABS_SCHEMADIR/core.ldif + +include: file://$ABS_SCHEMADIR/cosine.ldif + +include: file://$ABS_SCHEMADIR/inetorgperson.ldif + +include: file://$ABS_SCHEMADIR/openldap.ldif + +include: file://$ABS_SCHEMADIR/nis.ldif + +dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcRootPW:< file://$CONFIGPWF + +dn: olcDatabase={1}$BACKEND,cn=config +objectClass: olcDatabaseConfig +${nullExclude}objectClass: olc${BACKEND}Config +olcDatabase: {1}$BACKEND +olcSuffix: cn=log +${nullExclude}olcDbDirectory: ${DBDIR}.1 +olcRootDN: $MANAGERDN +$INDEX1 + +dn: olcOverlay=syncprov,olcDatabase={1}$BACKEND,cn=config +objectClass: olcOverlayConfig +objectClass: olcSyncProvConfig +olcOverlay: syncprov +olcSpNoPresent: TRUE +olcSpReloadHint: TRUE + +dn: olcDatabase={2}$BACKEND,cn=config +objectClass: olcDatabaseConfig +${nullExclude}objectClass: olc${BACKEND}Config +olcDatabase: {2}$BACKEND +olcSuffix: $BASEDN +${nullExclude}olcDbDirectory: ${DBDIR}.2 +olcRootDN: $MANAGERDN +olcRootPW: $PASSWD +olcSyncRepl: rid=001 provider=$PROVIDERURI binddn="$MANAGERDN" bindmethod=simple + credentials=$PASSWD searchbase="$BASEDN" $SYNCTYPE + retry="3 +" timeout=3 logbase="cn=log" + logfilter="(&(objectclass=auditWriteObject)(reqresult=0))" + syncdata=accesslog +olcMirrorMode: TRUE +$INDEX2 + +dn: olcOverlay=syncprov,olcDatabase={2}$BACKEND,cn=config +objectClass: olcOverlayConfig +objectClass: olcSyncProvConfig +olcOverlay: syncprov + +dn: olcOverlay=accesslog,olcDatabase={2}$BACKEND,cn=config +objectClass: olcOverlayConfig +objectClass: olcAccessLogConfig +olcOverlay: accesslog +olcAccessLogDB: cn=log +olcAccessLogOps: writes +olcAccessLogSuccess: TRUE + +EOF +$SLAPADD -F $CFDIR -n 0 -d-1< $TMP > $TESTOUT 2>&1 +PORT=`eval echo '$PORT'$n` +echo "Starting server $n on TCP/IP port $PORT..." +cd ${XDIR}${n} +LOG=`eval echo '$LOG'$n` +$SLAPD -F slapd.d -h $MYURI -d $LVL $TIMING > $LOG 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID $KILLPIDS" +cd $TESTWD + +echo "Using ldapsearch to check that server $n is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "" -H $MYURI \ + '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 + +if [ $n = 1 ]; then +echo "Using ldapadd for context on server 1..." +$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD -f $LDIFORDEREDCP \ + >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed for server $n database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +fi + +n=`expr $n + 1` +done + +echo "Using ldapadd to populate server 1..." +$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD -f $LDIFORDEREDNOCP \ + >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed for server $n database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +n=1 +while [ $n -le $MMR ]; do +PORT=`expr $BASEPORT + $n` +URI="ldap://${LOCALHOST}:$PORT/" + +echo "Using ldapsearch to read all the entries from server $n..." +$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \ + 'objectclass=*' > $TESTDIR/server$n.out 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at server $n ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +$LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt +n=`expr $n + 1` +done + +n=2 +while [ $n -le $MMR ]; do +echo "Comparing retrieved entries from server 1 and server $n..." +$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT + +if test $? != 0 ; then + echo "test failed - server 1 and server $n databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi +n=`expr $n + 1` +done + +echo "Using ldapadd to populate server 2..." +$LDAPADD -D "$MANAGERDN" -H $URI2 -w $PASSWD -f $LDIFADD1 \ + >> $TESTOUT 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed for server 2 database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +THEDN="cn=James A Jones 2,ou=Alumni Association,ou=People,dc=example,dc=com" +sleep 1 +for i in 1 2 3; do + $LDAPSEARCH -S "" -b "$THEDN" -H $URI1 \ + -s base '(objectClass=*)' entryCSN > "${MASTEROUT}.$i" 2>&1 + RC=$? + + if test $RC = 0 ; then + break + fi + + if test $RC != 32 ; then + echo "ldapsearch failed at slave ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC + fi + + echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." + sleep $SLEEP1 +done + +n=1 +while [ $n -le $MMR ]; do +PORT=`expr $BASEPORT + $n` +URI="ldap://${LOCALHOST}:$PORT/" + +echo "Using ldapsearch to read all the entries from server $n..." +$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \ + 'objectclass=*' > $TESTDIR/server$n.out 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at server $n ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +$LDIFFILTER < $TESTDIR/server$n.out > $TESTDIR/server$n.flt +n=`expr $n + 1` +done + +n=2 +while [ $n -le $MMR ]; do +echo "Comparing retrieved entries from server 1 and server $n..." +$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT + +if test $? != 0 ; then + echo "test failed - server 1 and server $n databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi +n=`expr $n + 1` +done + +echo "Breaking replication between server 1 and 2..." +n=1 +while [ $n -le $MMR ]; do +o=`expr 3 - $n` +MYURI=`eval echo '$URI'$n` +PROVIDERURI=`eval echo '$URI'$o` +$LDAPMODIFY -D cn=config -H $MYURI -y $CONFIGPWF > $TESTOUT 2>&1 <<EOF +dn: olcDatabase={2}$BACKEND,cn=config +changetype: modify +replace: olcSyncRepl +olcSyncRepl: rid=001 provider=$PROVIDERURI binddn="$MANAGERDN" bindmethod=simple + credentials=InvalidPw searchbase="$BASEDN" $SYNCTYPE + retry="3 +" timeout=3 logbase="cn=log" + logfilter="(&(objectclass=auditWriteObject)(reqresult=0))" + syncdata=accesslog +- +replace: olcMirrorMode +olcMirrorMode: TRUE + +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for server $n config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +n=`expr $n + 1` +done + +echo "Using ldapmodify to force conflicts between server 1 and 2..." +$LDAPMODIFY -D "$MANAGERDN" -H $URI1 -w $PASSWD \ + >> $TESTOUT 2>&1 << EOF +dn: $THEDN +changetype: modify +add: description +description: Amazing + +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for server 1 database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPMODIFY -D "$MANAGERDN" -H $URI2 -w $PASSWD \ + >> $TESTOUT 2>&1 << EOF +dn: $THEDN +changetype: modify +add: description +description: Stupendous + +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for server 2 database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPMODIFY -D "$MANAGERDN" -H $URI1 -w $PASSWD \ + >> $TESTOUT 2>&1 << EOF +dn: $THEDN +changetype: modify +delete: description +description: Outstanding +- +add: description +description: Mindboggling + +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for server 1 database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPMODIFY -D "$MANAGERDN" -H $URI2 -w $PASSWD \ + >> $TESTOUT 2>&1 << EOF +dn: $THEDN +changetype: modify +delete: description +description: OutStanding +- +add: description +description: Bizarre + +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for server 2 database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPMODIFY -D "$MANAGERDN" -H $URI1 -w $PASSWD \ + >> $TESTOUT 2>&1 << EOF +dn: $THEDN +changetype: modify +add: carLicense +carLicense: 123-XYZ +- +add: employeeNumber +employeeNumber: 32 + +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for server 1 database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPMODIFY -D "$MANAGERDN" -H $URI2 -w $PASSWD \ + >> $TESTOUT 2>&1 << EOF +dn: $THEDN +changetype: modify +add: employeeType +employeeType: deadwood +- +add: employeeNumber +employeeNumber: 64 + +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for server 2 database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +$LDAPMODIFY -D "$MANAGERDN" -H $URI1 -w $PASSWD \ + >> $TESTOUT 2>&1 << EOF +dn: $THEDN +changetype: modify +replace: sn +sn: Replaced later +- +replace: sn +sn: Surname +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for server 1 database ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Restoring replication between server 1 and 2..." +n=1 +while [ $n -le $MMR ]; do +o=`expr 3 - $n` +MYURI=`eval echo '$URI'$n` +PROVIDERURI=`eval echo '$URI'$o` +$LDAPMODIFY -D cn=config -H $MYURI -y $CONFIGPWF > $TESTOUT 2>&1 <<EOF +dn: olcDatabase={2}$BACKEND,cn=config +changetype: modify +replace: olcSyncRepl +olcSyncRepl: rid=001 provider=$PROVIDERURI binddn="$MANAGERDN" bindmethod=simple + credentials=$PASSWD searchbase="$BASEDN" $SYNCTYPE + retry="3 +" timeout=3 logbase="cn=log" + logfilter="(&(objectclass=auditWriteObject)(reqresult=0))" + syncdata=accesslog +- +replace: olcMirrorMode +olcMirrorMode: TRUE + +EOF +RC=$? +if test $RC != 0 ; then + echo "ldapmodify failed for server $n config ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +n=`expr $n + 1` +done + +echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..." +sleep $SLEEP1 + +n=1 +while [ $n -le $MMR ]; do +PORT=`expr $BASEPORT + $n` +URI="ldap://${LOCALHOST}:$PORT/" + +echo "Using ldapsearch to read all the entries from server $n..." +$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI -w $PASSWD \ + 'objectclass=*' > $TESTDIR/server$n.out 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed at server $n ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi +$LDIFFILTER -s a < $TESTDIR/server$n.out > $TESTDIR/server$n.flt +n=`expr $n + 1` +done + +n=2 +while [ $n -le $MMR ]; do +echo "Comparing retrieved entries from server 1 and server $n..." +$CMP $MASTERFLT $TESTDIR/server$n.flt > $CMPOUT + +if test $? != 0 ; then + echo "test failed - server 1 and server $n databases differ" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi +n=`expr $n + 1` +done + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test064-constraint b/tests/scripts/test064-constraint new file mode 100755 index 0000000..f0a68c4 --- /dev/null +++ b/tests/scripts/test064-constraint @@ -0,0 +1,202 @@ +#!/bin/bash + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +if test $CONSTRAINT = constraintno; then + echo "Constraint overlay not available, test skipped" + exit 0 +fi + +CONSTRAINTDIR="$DATADIR/constraint" +ROOTLDIF="$CONSTRAINTDIR/root.ldif" +USERLDIF="$CONSTRAINTDIR/user.ldif" +RESULTOUT="$CONSTRAINTDIR/constraint.out" +SCRIPTOUT="$TESTDIR/constraint.out" +USERDN="cn=John Doe,ou=users,$BASEDN" + +CONFDIR=$TESTDIR/slapd.d +mkdir -p $TESTDIR $CONFDIR $DBDIR1 + +$SLAPPASSWD -g -n >$CONFIGPWF + +cat > $TESTDIR/config.ldif <<EOF +dn: cn=config +objectClass: olcGlobal +cn: config +olcArgsFile: $TESTDIR/slapd.args +olcPidFile: $TESTDIR/slapd.pid + +dn: cn=schema,cn=config +objectClass: olcSchemaConfig +cn: schema + +include: file://$TESTWD/schema/core.ldif +include: file://$TESTWD/schema/cosine.ldif +include: file://$TESTWD/schema/inetorgperson.ldif + +dn: olcDatabase=config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: config +olcRootPW:< file://$CONFIGPWF +EOF + +if [ "$BACKENDTYPE" = mod ]; then + cat >> $TESTDIR/config.ldif <<EOF + +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModulePath: $TESTWD/../servers/slapd/back-$BACKEND +olcModuleLoad: back_$BACKEND.la +EOF +fi + +if [ "$CONSTRAINT" = constraintmod ]; then + cat >> $TESTDIR/config.ldif <<EOF + +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModulePath: $TESTWD/../servers/slapd/overlays +olcModuleLoad: constraint.la +EOF +fi + +cat >> $TESTDIR/config.ldif <<EOF + +dn: olcDatabase={1}$BACKEND,cn=config +objectClass: olcDatabaseConfig +objectClass: olc${BACKEND}Config +olcDatabase: $BACKEND +olcSuffix: $BASEDN +olcRootDN: $MANAGERDN +olcRootPW: $PASSWD +olcDbDirectory: $TESTDIR/db.1.a +EOF + +if [ "$INDEXDB" = indexdb ]; then + cat >> $TESTDIR/config.ldif <<EOF +olcDbIndex: objectClass eq,pres +olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub +EOF +fi + +cat >> $TESTDIR/config.ldif <<EOF + +dn: olcOverlay=constraint,olcDatabase={1}$BACKEND,cn=config +objectClass: olcOverlayConfig +objectClass: olcConstraintConfig +olcOverlay: constraint +olcConstraintAttribute: mail + count 3 + restrict="ldap:///ou=users,$BASEDN??one?(objectClass=inetOrgPerson)" +# check if restrict works (if not, this will apply to ou=users subtree as well +# and some tests will fail) +olcConstraintAttribute: mail count 1 restrict="ldap:///ou=groups,$BASEDN??one" +olcConstraintAttribute: mail regex ^[[:alnum:]]+@example.com$ +olcConstraintAttribute: description count 2 +olcConstraintAttribute: jpegPhoto count 0 +# cn value has to be concatenated givenName SP sn +olcConstraintAttribute: cn,sn,givenName + set "(this/givenName + [ ] + this/sn) & this/cn" + restrict="ldap:///$USERDN??sub?(objectClass=inetOrgPerson)" +olcConstraintAttribute: uid + uri "ldap:///ou=groups,$BASEDN?uid?one?(objectClass=inetOrgPerson)" + restrict="ldap:///ou=users,$BASEDN??one" +EOF + +$SLAPADD -F $CONFDIR -n 0 -l $TESTDIR/config.ldif + +echo "Starting slapd on TCP/IP port $PORT1..." +$SLAPD -F $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 + +echo "Using ldapsearch to check that slapd is running..." +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 + +echo "Adding basic structure..." +$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD -f $ROOTLDIF &>/dev/null +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $PID + exit $RC +fi +$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD -f $USERLDIF &>/dev/null +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $PID + exit $RC +fi + +echo "Running constraint tests..." +for ldif in $SRCDIR/data/constraint/{*ok*,*fail*}.ldif; do + ### reload + $LDAPDELETE -D "$MANAGERDN" -H $URI1 -w $PASSWD "$USERDN" &>/dev/null + RC=$? + if test $RC != 0 ; then + echo "ldapdelete failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $PID + exit $RC + fi + $LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD -f $USERLDIF &>/dev/null + RC=$? + if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $PID + exit $RC + fi + + ### info + echo -n " [$ldif]: " + + ### modify + $LDAPMODIFY -H $URI1 -x -D "$MANAGERDN" -f $ldif -w $PASSWD &>/dev/null + RC=$? + if test $RC == 0 ; then + echo "OK" | tee -a $SCRIPTOUT + elif test $RC == 19 ; then + echo "FAIL" | tee -a $SCRIPTOUT + else + echo "UNEXPECTED ($RC)" + fi +done + +echo "Comparing output..." +$DIFF $SCRIPTOUT $RESULTOUT > $CMPOUT +RC=$? +if test $RC != 0 ; then + echo "Comparison failed" + test $KILLSERVERS != no && kill -HUP $PID + exit $RC +fi + +test $KILLSERVERS != no && kill -HUP $PID + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 diff --git a/tests/scripts/test065-proxyauthz b/tests/scripts/test065-proxyauthz new file mode 100755 index 0000000..b2b4673 --- /dev/null +++ b/tests/scripts/test065-proxyauthz @@ -0,0 +1,255 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 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 +## <http://www.OpenLDAP.org/license.html>. + +PCACHETTL=${PCACHETTL-"1m"} +PCACHENTTL=${PCACHENTTL-"1m"} +PCACHESTTL=${PCACHESTTL-"1m"} +PCACHE_ENTRY_LIMIT=${PCACHE_ENTRY_LIMIT-"6"} +PCACHE_CCPERIOD=${PCACHE_CCPERIOD-"2"} +PCACHETTR=${PCACHETTR-"2"} +PCACHEBTTR=${PCACHEBTTR-"5"} + +. $SRCDIR/scripts/defines.sh + +LVL=0x100 + +if test $PROXYCACHE = pcacheno; then + echo "Proxy cache overlay not available, test skipped" + exit 0 +fi + +if test $BACKLDAP = "ldapno" ; then + echo "LDAP backend not available, test skipped" + exit 0 +fi + +if test $BACKEND = ldif ; then + # The (mail=example.com*) queries hit a sizelimit, so which + # entry is returned depends on the ordering in the backend. + echo "Test does not support $BACKEND backend, test skipped" + exit 0 +fi + +mkdir -p $TESTDIR $DBDIR1 $DBDIR2 + +# Test proxy caching: +# - start master +# - start proxy cache +# - populate master +# - perform a first search +# - verify cacheability +# - perform a second search with the same filter and same user +# - verify answerability and cacheability of the bind +# - perform a third search with the same user but a different filter +# - verify cacheability of the bind and the non-answerability of the result + +echo "Starting master slapd on TCP/IP port $PORT1..." +. $CONFFILTER < $PROXYAUTHZMASTERCONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that master slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \ + -D "cn=Manager,dc=example,dc=com" -w secret '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 + +echo "Using ldapadd to populate the master directory..." +$LDAPADD -x -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \ + $LDIFORDERED > /dev/null 2>&1 +RC=$? +if test $RC != 0 ; then + echo "ldapadd failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Starting proxy cache on TCP/IP port $PORT2..." +. $CONFFILTER < $PROXYAUTHZCONF | sed \ + -e "s/@TTL@/${PCACHETTL}/" \ + -e "s/@NTTL@/${PCACHENTTL}/" \ + -e "s/@STTL@/${PCACHENTTL}/" \ + -e "s/@TTR@/${PCACHETTR}/" \ + -e "s/@ENTRY_LIMIT@/${PCACHE_ENTRY_LIMIT}/" \ + -e "s/@CCPERIOD@/${PCACHE_CCPERIOD}/" \ + -e "s/@BTTR@/${PCACHEBTTR}/" \ + > $CONF2 + +$SLAPD -f $CONF2 -h $URI2 -d $LVL -d pcache > $LOG2 2>&1 & +CACHEPID=$! +if test $WAIT != 0 ; then + echo CACHEPID $CACHEPID + read foo +fi +KILLPIDS="$KILLPIDS $CACHEPID" + +sleep 1 + +echo "Using ldapsearch to check that proxy slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \ + -D "cn=Manager,dc=example,dc=com" -w secret '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 > $SEARCHOUT + +echo "Making queries on the proxy cache..." +CNT=0 + + +CNT=`expr $CNT + 1` +USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com" +UPASSWD="jaj" +echo "Query $CNT: $USERDN" +echo "# Query $CNT: $USERDN" >> $SEARCHOUT + +$LDAPSEARCH -S "" -b "dc=example,dc=com" -s SUB -h $LOCALHOST -p $PORT2 \ + -D "$USERDN" -w "$UPASSWD" "(sn=je*)" sn >> $SEARCHOUT 2>> $TESTOUT +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +# Check that the bind is cached +grep "CACHING BIND for $USERDN" $LOG2 > /dev/null + +RC=$? +if test $RC != 0 ; then + echo "Refresh failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait + exit 1 +fi + +CNT=`expr $CNT + 1` +USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com" +UPASSWD="jaj" +echo "Query $CNT: (Bind should be cached)" +echo "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT + +$LDAPSEARCH -S "" -b "dc=example,dc=com" -s SUB -h $LOCALHOST -p $PORT2 \ + -D "$USERDN" -w "$UPASSWD" "(sn=je*)" sn >> $SEARCHOUT 2>> $TESTOUT + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +grep "CACHED BIND for $USERDN" $LOG2 > /dev/null +RC=$? +if test $RC != 0 ; then + echo "Refresh failed" + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait + exit 1 +fi + +CNT=`expr $CNT + 1` +USERDN="cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com" + +echo "Query $CNT: (Bind should be cached)" +echo "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "dc=example,dc=com" -s SUB -h $LOCALHOST -p $PORT2 \ + -D "$USERDN" -w "$UPASSWD" "(sn=je*)" sn >> $SEARCHOUT 2>> $TESTOUT + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +RC=`grep "CACHED BIND for $USERDN" $LOG2 | wc -l` +if test $RC != 2 ; then + echo "Bind wasn't answered from cache" + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait + exit 1 +fi + +echo "=== New search on (sn=jo*)" +cat /dev/null > $SEARCHOUT +echo "# Query $CNT: (Bind should be cached)" >> $SEARCHOUT +$LDAPSEARCH -S "" -b "dc=example,dc=com" -s SUB -h $LOCALHOST -p $PORT2 \ + -D "$USERDN" -w "$UPASSWD" "(sn=jo*)" sn >> $SEARCHOUT 2>> $TESTOUT + +RC=$? +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +RC=`grep "CACHED BIND for $USERDN" $LOG2 | wc -l` +if test $RC != 3 ; then + echo "Bind wasn't answered from cache" + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait + exit 1 +fi + +RC=`grep "QUERY NOT ANSWERABLE" $LOG2 | wc -l` +if test $RC != 3 ; then + echo "Search wasn't searched on remote peer" + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait + exit 1 +fi + +RC=`grep "dn: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com" $SEARCHOUT | wc -l` +if test $RC != 1 ; then + echo "Search wasn't retrieved on remote peer" + test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait + exit 1 +fi + +echo "Test succeeded" + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +test $KILLSERVERS != no && wait + +exit 0 |