Basic LDAPv3 Interoperability Test Suite (BLITS)

Issue 2.4 Draft 1

June 16th, 2000

Original Issue Produced by: Chris Apple, AT&T Labs

This Issue Edited by: Chris Harding, The Open Group

Changes for This Version

Changes for Version 3.2

 

Changes for Version 2.2

An LDIF addendum file has been created for the certificates tests, which do not use any of the previous test data. The new entries are in three new subtrees of the DIT: Certificates, CertificateAdd and CertificateModify. The previous entries are left undisturbed. The CertificateAdd and CertificateModify subtrees are structured in a similar way to the Add and Modify subtrees to allow up to 20 vendors, each with up to 10 clients, to participate in the tests.

Changes for version 2.1 Draft 2

Edited by Ludovic Poitou, Sun Microsystems Inc. The LDIF files have been updated to include the entry for Test 3.3.2.3 (Search for Entry with Multi-Valued RDN).

Changes for version 2.1 Draft 0

Edited by Ludovic Poitou, Sun Microsystems Inc. The LDIF files have been edited to remove all "ou=New Subtree" entries from the ModifyDN subtree.

Changes for version 2.0

Edited by Chris Harding, the Open Group

An LDIF addendum file has been created for the extensions tests, which do not use any of the previous test data. The new entries are in four new subtrees of the DIT: ExtendedSearch, ExtendedAdd, ExtendedModify and Security. The previous entries are left undisturbed. The ExtendedSearch subtree contains subtrees "Corporate" and "Languages". The ExtendedAdd and ExtendedModify subtrees are structured in a similar way to the Add and Modify subtrees to allow up to 20 vendors, each with up to 10 clients, to participate in the tests.

 


BLITS Table of Contents

1. Introduction
1.1. Test Objectives
1.2 Judging Test Results
2. Organization of Test Suite
3. General Tests
3.1. Functionality Addressed by Tests
3.2 BLITS Directory Information Tree (DIT) and Content
3.2.1 Entries for Use with BLITS
3.3 The Tests
3.3.1 Bind/Unbind Tests
3.3.1.1 Anonymous Bind
3.3.1.2 Unbind
3.3.1.3 Bind With Correct Credentials
3.3.1.3.1 Bind With Simple Password
3.3.1.3.2 Bind With CRAM-MD5 Password Exchange
3.3.1.4 Bind Errors
3.3.1.4.1 Bind with Incorrect Credentials
3.3.1.4.2 Bind With Missing Password
3.3.1.4.3 BIND with Invalid DN Syntax
3.3.1.4.4 BIND with Inappropriate Authentication
3.3.1.4.5 BIND with Unsupported Protocol Version
3.3.1.4.6 Bind with Incorrect Credentials using CRAM-MD5
3.3.2 Search Tests
3.3.2.1 Simple Search Filters
3.3.2.2 Complex Search Filters
3.3.2.3 Search for Entry with Multi-Valued RDN
3.3.2.4 Three-Valued Logic Search Filter Evalutation
3.3.2.4.1 Filter of "AND" Choice with an Undefined Attribute Type (Evaluates to UNDEFINED)
3.3.2.4.2 Filter of "OR" Choice with an Undefined Attribute Type (Evaluates to TRUE)
3.3.2.4.3 Filter of "NOT" Choice with an Undefined Attribute Type (Evaluates to UNDEFINED)
3.3.2.5 Unrecognized Option in Attribute Description List
3.3.2.6 Retrieve Operational Attributes for an Entry
3.3.2.7 Alias Dereferencing
3.3.2.8 Miscellaneous Searching Feature Tests
3.3.2.9 Search Operation Errors
3.3.3 Modify Operation Tests
3.3.3.1 Modify-Add Tests
3.3.3.2 Modify-Delete Tests
3.3.3.3 Modify-Replace Tests
3.3.4 Add Operation Tests
3.3.4.1 Add New Entry
3.3.4.2 Add Errors
3.3.5 Delete Operation Tests
3.3.5.1 Delete Existing Object
3.3.5.2 Delete Errors
3.3.6 ModifyDN Operation Tests
3.3.6.1 Rename a Leaf Entry
3.3.6.2 Move a Leaf Entry to A New Parent
3.3.6.3 Move a Renamed Leaf Entry to A New Parent
3.3.6.4 Rename Subtree of Entries
3.3.6.5 Move Subtree of Entries
3.3.6.6 Move a Renamed Subtree of Entries to a New Parent
3.3.6.7 Modify DN Errors
3.3.7 Compare Operation Tests
3.3.7.1 Comparison with FALSE Return Code
3.3.7.2 Comparison with TRUE Return Code
3.3.7.3 Compare Errors
3.3.8 Extended Operations Tests
3.3.9 Charset-Related Tests
3.3.10 DN Quoting Form Tests
3.3.11 Certificate Storage, Retrieval, and Comparison
3.3.11.1 Search
3.3.11.1.1 Search for Entry Containing a User Certificate
3.3.11.1.2 Search for Entry not Containing a User Certificate
3.3.11.1.3 Search for Entry Containing a CA Certificate
3.3.11.1.4 Search for Entry not Containing a CA Certificate
3.3.11.1.5 Search for Entry Containing a CRL
3.3.11.2 Compare
3.3.11.3 Add and Modify Entries
3.3.11.3.1 Add Entry with Certificate
3.3.11.3.2 Modify-add tests
3.3.11.3.2.1 Create userCertificate Attribute
3.3.11.3.2.2 Add userCertificate Value to Existing Attribute
3.3.11.3.2.3 Create cACertificate Attribute
3.3.11.3.2.4 Create certificateRevocationList Attribute
3.3.11.3.3 Modify-Delete Tests
3.3.11.3.3.1 Delete One Value of a Multi-valued userCertificate Attribute
3.3.11.3.3.2 Delete Single-Valued userCertificate Attribute
3.3.11.3.4 Replace userCertificate Attribute
3.3.12 LDAP Extension Tests
3.3.12.1 Paged Results
3.3.12.1.1 Page completely through a set
3.3.12.1.2 Abort paging part-way through a set.
3.3.12.2 Server-Side Sorting
3.3.12.2.1 Sort on Single Numeric Attribute
3.3.12.2.2 Sort on Single Alphabetic Attribute
3.3.12.2.3 Sort on Multiple Attributes
3.3.12.2.4 Sort in reverse order
3.3.12.3 Feature Interactions with Paged and Sorted Results
3.3.12.3.1 Page a Sorted Set.
3.3.12.4 Scrolling View Browsing of Search Results
3.3.12.4.1 Scroll Completely Through Large Set of Results
3.3.12.4.2 Scroll Incrementally through Set of Results
3.3.12.4.3 Scroll Part Way Through Large Set of Results
3.3.12.4.4 Go to Arbitrary Place in Large Set of Results
3.3.12.5 Language Tags
3.3.12.5.1 Search for Language Tagged Attributes
3.3.12.5.2 Check Attribute Subtype Matching
3.3.12.5.3 Search Without Specifying Language Tags
3.3.12.5.4 Comparison with TRUE Return Code
3.3.12.5.5 Comparison with noSuchAttribute Return Code
3.3.12.5.6 Search for Tagged Attribute Types
3.3.12.5.7 Add and Modify Entries
3.3.12.5.7.1 Add Entry with Language Tags
3.3.12.5.7.2 Modify Entry with Language Tags
3.3.13 Schema-Related Tests
3.3.13.1 Schema Access tests.
3.3.13.2 Schema Modification tests.
3.3.14 Refererral Tests
3.3.14.1 Superior Reference
3.3.14.2 Subordinate Reference
3.3.14.3 Named Refererrals
3.3.14.3.1 Base Contains Ref Attribute
3.3.14.3.2 Target Contains Ref Attribute
3.3.14.3.3 Base Subordinate to Entry that Contains Ref Attribute
3.3.14.3.4 Target Subordinate to Entry that Contains Ref Attribute
3.3.14.3.5 Single-Level Search
3.3.14.3.6 Subtree Search
3.3.15 Transport Security
3.3.15.1 START TLS
3.3.15.1.1 Anonymous Bind over TLS
3.3.15.1.2 Bind With Password Exchange over TLS
3.3.15.1.3 TLS with Certificates
3.3.15.1.3.1 TLS Bind with Valid Certificate
3.3.15.1.3.2 TLS Bind with Expired Certificate
3.3.15.1.3.3 TLS Bind with Certificate Validated via Non-Trivial Path
3.3.15.1.3.4 TLS Bind with Revoked Certificate in Validation Path
3.3.15.1.4 Bind with Incorrect Credentials over TLS
3.3.15.1.5 Bind With Insufficiently Strong Authentication
3.3.15.1.6 Abort TLS Session
3.3.15.2 Port 636
3.3.15.2.1 Anonymous Bind over TLS
3.3.15.2.2 Bind With Password Exchange over TLS
3.3.15.2.3 TLS with Certificates
3.3.15.2.3.1 TLS Bind with Valid Certificate
3.3.15.2.3.2 TLS Bind with Expired Certificate
3.3.15.2.3.3 TLS Bind with Certificate Validated via Non-Trivial Path
3.3.15.2.3.4 TLS Bind with Revoked Certificate in Validation Path
3.3.15.2.4 Bind with Incorrect Credentials over TLS
3.3.15.2.5 Bind With Insufficiently Strong Authentication
3.3.15.2.6 Abort TLS Session
3.3.16 Server Location
3.3.16.1 Locate Server
3.4 Other Potential Testing Areas
4. Application-Specific Tests
5. Acknowledgements
6. Authors' Addresses
7. Bibliography

1. Introduction

This document defines a basic LDAP Interoperability Test suite for use by any individual, organization, or group. The purpose of this document is to provide the information required for testers to prepare for and perform tests which are designed to gauge interoperability between LDAP clients and servers.

This document may be copied in whole or in part for use in other documents if acknowledgement of the source is provided in those documents.

1.1 Test Objectives

The tests are designed to demonstrate interoperability between LDAP client/server pairs.

The tests are designed to be performed in a multi-vendor environment, permitting LDAPv3 implementers to verify the degree to which basic LDAPv3 client/server interaction features of their implementations are interoperable with other implementations. This test suite is not designed for use in processes intended certify full LDAPv3 protocol conformance.

1.2 Judging Test Results

Criteria for determining the success or failure of a particular test are described in each test specification. Depending upon the test, success criteria can include: receipt of a particular return code from a server (often expressed as an error message), getting a response from the server being tested, a client reacting in a particular way to such a response, or displaying search results correctly on the requesting LDAP client. Specific success criteria for each test are indicated along with the description of how to perform each test. If the criteria are not met for a given test, it is deemed to have failed.

2. Organization of the Test Suite

Section 3 contains general tests. Section 4 contains tests that are specific to particular applications.

3. General Tests

3.1. Functionality Addressed by Tests

Tests for LDAPv3 operations (Bind, Unbind, Search, Modify, ModifyDN, Add, Delete, Compare, and Abandon) are defined in this document. The functionality of these operations is specified in the core LDAPv3 protocol specification [RFC 2251]. Tests for more granular LDAPv3 functionality such as aliases/alias dereferencing, referrals, referral loop detects, error detection/generation, and other logical functions performed via particular configurations of operational parameters are defined within the context of operations to which they are relevant. Miscellaneous testing topics which do not currently have tests defined for them are listed in various sections throughout the document.

3.2 BLITS Directory Information Tree (DIT) and Content

Figure 3-1: BLITS Directory Information Tree (DIT)

The BLITS DIT is available in two forms: one rooted at o=IMC, c=US (for clients and servers supporting X.500-style entry naming) and one rooted at dc=Relative, dc=IMC, dc=org (for clients and servers supporting domain-component-based naming [RFC 2247]). References to DNs found in the text of this document are described in terms of X.500-style naming. Search bases intended for use during testing are specified using both the domain-component- and X.500-based naming conventions. Readers of this draft should understand that for translating from X.500 style names to the domain-component-style names they must:

The BLITS DIT has several branches designed to allow simultaneous vendor testing based on the tests defined below. Individual branches for LDAPv3 operations specified in [RFC 2251] are defined with the exception of Bind, Unbind, Abandon, and Compare. Tests related to these four operations are performed using the entries located in the subtree rooted at ou=Search, o=IMC, c=US. The entries constructed using the Microsoft-provided data fall under this subtree as leaf entries of object class inetOrgPerson [7]. Subtrees for the Add, Delete, Modify, and ModifyDN operations tests are partitioned into additional organizational units to support parallel multiple-vendor test performance. The generic subtree structure for making such changes to directory information is shown in Figure 3-3. In particular, the LDIF [16] file constructed for use during the testing event includes organizational units sufficient for 20 vendors, each testing 10 different clients. Modifications to this LDIF file should be made if support for more than 20 vendors or more than 10 clients per vendor are to be tested simultaneously. The subtrees used for testing Certificates storage, retrieval, etc. are shown in Figure 3-4. There is a certificates subtree for tests not requiring changes to the directory content. There are also CertificateAdd and CertificateModify subtrees, each of which is structured to allow testing by up to 20 LDAP vendors, each with up to 10 client products, in a similar way to the subtrees for the non-certificate Add, Delete, Modify, and ModifyDN operations tests described above. The DIT also has a CAs subtree, which contains a set of subtrees which can be used for certificates provided by different certificate generation products. Each of these subtrees contains a Certificates, a CertificateAdd and a CertificateModify subtree.

The subordinate structure of the subtrees intended for use in testing schema-related features (ou=Schema), charset support (ou=Charset), and referrals (ou=Referrals) are TBD.

Figure 3-2: BLITS Search Subtree Structure

Figure 3-3: BLITS Add/Delete/Modify/ModifyDN Subtree Structure

Figure 3-4: BLITS Certificates Subtree Structure

Only the following attribute sub-set will be used in this suite:

Only the following object class sub-set will be used in this suite:

Access controls should be set up on each LDAP server in such a way that users binding anonymously, or, with one exception (Directory Manager), giving names but not passwords, can read and search all the data. Additional access controls should be set up such that an entry for a Directory Manager is present with a password, controller:

dn: cn=Directory Manager, o=IMC, c=US
cn: Directory Manager
objectclass: top
objectclass: person
objectclass: organizationalperson
userpassword: controller
Users binding as Directory Manager should not be allowed to bind at all unless they specify the correct password.

3.2.1 Entries for Use with BLITS

Chris Weider of Microsoft, provided a sample of a test database which Microsoft has used in the past. Each database record was a CSV-formatted list of employee ame, employee ID, telephone number, and various organizational unit container names. Database records were converted from CSV to LDIF using the inetOrgPerson [7] object class as a template. Some attributes, such as e-mail address and user password were generated for each entry. These leaf entries were used as a seed data set for populating the BLITS DIT. Other entries were created to enable the testing of aliases/alias dereferencing, referrals, schema-related features, character set support, and other features. LDIF files of the entire BLITS DIT (one using domain-component-style names, one using dc-relative-style names, and one using X.500-style names) are available. Each LDIF file is in three parts: one for the basic tests, one for the extended tests, and one for the Certificates tests. The Certificates tests LDIF files reference further files that contain the certificates used in the tests.

 

  dc names dc-relative names X500 names
Basic tests dc-names.ldif dc-names_relative.ldif X500-names.ldif
Extended tests new-dc-names.ldif new-dc-names_relative.ldif new-X500-names.ldif
Certificates tests cert-dc-names.ldif cert-dc-names_relative.ldif cert-X500-names.ldif
New Certificates tests new-cert-dc-names.ldif new-cert-dc-names_relative.ldif new-cert-X500-names.ldif

 

3.3 The Tests

The tests are defined in terms of client/server interaction features of the LDAPv3 protocol operations. Some features are specifically associated with a particular LDAP operation, such as the use of search filters, scope, and base. Other features, such as the generation of LDAP return codes that correspond to error conditions, are often associated with more than one protocol operation. Another set of features, such as support for character sets, referrals, valid forms of DN quoting, and others are complicated enough to warrant treatment in a section separate from the operation(s) with which they are associated. Tests for all three types of features are defined in the sub-paragraphs found below.

TIPS:

3.3.1 Bind/Unbind Tests

3.3.1.1 Anonymous Bind

Purpose Bind Anonymously to an LDAP server.
Reference [RFC 2251] (paragraph 4.2, pp. 20-23)
Procedure Issues a Bind request to an LDAP server with null credentials (anonymous bind)
Expected Results The test is successful if the LDAP connection can be established without errors. Search requests should now be accepted and processed by the server.

3.3.1.2 Unbind

Purpose Unbind from an LDAP server.
Reference [RFC 2251] (paragraph 4.3, pp. 19-20 )
Procedure An UNBIND operation must be issued to the responding LDAP server.
Expected Results The test is successful if the association is released gracefully.

3.3.1.3 Bind With Correct Credentials

3.3.1.3.1 Bind With Simple Password

Purpose Test authenticated unprotected simple bind with correct credentials.
Reference [RFC 2251] (paragraph 4.2)
Procedure Test simple authenticated Bind as 'Paul Cezanne' with a correct password ('Paul0005').
DN cn=Paul Cezanne, ou=Americas, ou=Search, o=IMC, c=US
DN (dc-naming) cn=Paul Cezanne, dc=Americas, dc=Search, dc=Relative,  dc=IMC, dc=ORG
Password Paul0005
Expected results The test is successful if the Bind is successful. Search requests should now be accepted and processed by the server.

3.3.1.3.2 Bind With DIGEST-MD5 Password Exchange

Purpose Test authenticated DIGEST-MD5 bind with correct credentials.
Reference [RFC 2829] (paragraph 6.1), [RFC 2251] (paragraph 4.2)
Procedure Configure client to use DIGEST-MD5 authentication. Test authenticated Bind as 'Marc Chagall' with a correct password ('Marc0001').
DN cn= Marc Chagall, ou=Security, o=IMC, c=US
DN (dc-naming) cn= Marc Chagall, dc=Security, dc=Relative,  dc=IMC, dc=ORG
Password Marc0001
Expected results The test is successful if the Bind is successful. Search requests should now be accepted and processed by the server.

3.3.1.4 Bind Errors

3.3.1.4.1 Bind with Incorrect Credentials

Purpose Test authenticated unprotected simple bind with incorrect credentials.
Reference [RFC 2251] (paragraphs 4.1.10, 4.2)
Procedure Attempt to Bind as a DN which has a userPassword attribute, but specify the wrong password.
DN cn=Paul Cezanne, ou=Americas, ou=Search, o=IMC, c=US
DN (dc-naming) cn=Paul Cezanne, dc=Americas, dc=Search, dc=Relative,  dc=IMC, dc=ORG
Password Wrong (The correct password is Paul0005)
Expected results Result code 49 (invalidCredentials) should be returned. The Bind should fail. The server may not accept and process requests; if they are accepted, they should be treated as anonymous requests.

3.3.1.4.2 Bind With Missing Password

Purpose Test authenticated unprotected simple Bind with missing password.
Reference [RFC 2251] (paragraphs 4.1.10, 4.2)
Procedure Test authenticated unprotected simple Bind as 'Paul Cezanne' with a null password.
DN cn=Paul Cezanne, ou=Americas, ou=Search, o=IMC, c=US
DN (dc-naming) cn=Paul Cezanne, dc=Americas, dc=Search, dc=Relative,  dc=IMC, dc=ORG
Password <unspecified>
Expected results The test is successful if the connection attempt is accepted, but established as an anonymous bind. Search requests should now be accepted and processed by the server.

3.3.1.4.3 BIND with Invalid DN Syntax

Purpose Verify correct behavior when a DN of invalid syntax is included in a Bind attempt.
Reference [RFC 2251] (paragraphs 4.1.10, 4.2)
Procedure Bind supplying a DN with an invalid syntax and an arbitrary value for the userPassword attribute.
DN cn, ou=Americas, ou=Search, o=IMC, c=US
DN (dc-naming) cn, dc=Americas, dc=Search,  dc=Relative, dc=IMC, dc=ORG
Password AnythingYouWant
Expected results The Bind should fail. Requests may not be accepted and processed by the server; if they are accepted, they should be treated as anonymous requests. 

3.3.1.4.4 BIND with Inappropriate Authentication

Purpose Verify correct behavior when inappropriate authentication is used on a Bind attempt.
Reference [RFC 2251] (paragraphs 4.1.10, 4.2)
Procedure Test authenticated unprotected simple Bind as 'Directory Manager' with a null password.
DN cn=Directory Manager, o=IMC, c=US
DN (dc-naming) cn=Directory Manager,  dc=Relative, dc=IMC, dc=ORG
Password (None)
Expected results Result code 48 (inappropriateAuthentication) should be returned. The Bind should fail. Requests may not be accepted and processed by the server.

3.3.1.4.5 BIND with Unsupported Protocol Version

Purpose Verify correct behavior when an unsupported protocol version parameter value is supplied on a Bind attempt.
Reference [RFC 2251] (paragraphs 4.1.10, 4.2)
Procedure Bind, anonymously with a null DN, supplying a version number of 4.
DN null
Password null
Expected results Result code 2 (protocolError) should be returned. The Bind should fail. Requests may not be accepted and processed by the server; if they are accepted, they should be treated as anonymous requests.

3.3.1.4.6 Bind with Incorrect Credentials using DIGEST-MD5

Purpose Test authenticated DIGEST-MD5 bind with incorrect credentials.
Reference [RFC 2829] (paragraph 6.1), [RFC 2251] (paragraphs 4.1.10, 4.2)
Procedure Configure client to use DIGEST-MD5 authentication. Test authenticated Bind as 'Marc Chagall' with incorrect password ('Marc1110').
DN cn=Marc Chagall, ou=Security, o=IMC, c=US
DN (dc-naming) cn=Marc Chagall, dc=Security,  dc=Relative, dc=IMC, dc=ORG
Password Marc1110
Expected results Result code 49 (invalidCredentials) should be returned. The Bind should fail. The server may not accept and process requests; if they are accepted, they should be treated as anonymous requests.

3.3.2 Search Tests

3.3.2.1 Simple Search Filters

3.3.2.1.1 Equality Matching

Purpose Test equality matching in simple search filter.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Submit a Search request with a filter, base, and scope as indicated below.
Base ou=Search, o=IMC, c=US
Base (dc-naming) dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter cn=Pat Bakers
Expected results The following entry should be returned: Pat Bakers

3.3.2.1.2 Substring Matching

Purpose Test substring matching in simple search filter.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Submit a Search request with a filter, base, and scope as indicated below.
Base ou=Search, o=IMC, c=US
Base (dc-naming) dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter cn=p*smith
Expected results The following entries should be returned: Peter Smith Paulette Smith

3.3.2.1.3 Approximate Matching

Purpose Test approximate matching in simple search filter.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Submit a Search request with a filter, base, and scope as indicated below.
Base ou=Search, o=IMC, c=US
Base (dc-naming) dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter cn~=clint
Expected results The following entries should be returned: Clint Eastwood Bill Clinton Hillory Clinton

3.3.2.1.4 Less-Than-Or-Equal-To Matching

Purpose Test less-than-or-equal-to matching in simple search filter.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Submit a Search request with a filter, base, and scope as indicated below.
Base ou=Search, o=IMC, c=US
Base (dc-naming) dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter employeenumber<=1100008
Expected results The 5 following entries should be returned: Paul Cezanne, Johan Jongkind, Johan Jongkind (No Title), Milton Berle, Clint Eastwood

3.3.2.1.5 Greater-Than-Or-Equal-To Matching

Purpose Test greater-than-or-equal-to matching in simple search filter.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=Search, o=IMC, c=US
Base (dc-naming) dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter employeenumber>=2200500
Expected results The following entries should be returned: Kip Barker, Larry Barker, Leslie Barker, Lincoln Barker, Linda Barker

3.3.2.1.6 Presence Matching

Purpose Test presence matching in simple search filter.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=Fin-Accounting, ou=Americas, ou=Search, o=IMC, c=US
Base (dc-naming) dc=Fin-Accounting, dc=Americas, dc=Search, dc=Relative, dc=IMC, dc=org
Scope single-level
Filter title=*
Expected results The following entry should be returned: Johan Jongkind (title VP)

3.3.2.1.7 Extensible Matching

TBD, but to be based on extensible matching rules listed in [RFC 2252] and the description of extensible matching in searchRequest [RFC 2251].

3.3.2.2 Complex Search Filters

3.3.2.2.1 Unnested Boolean AVA Combinations

3.3.2.2.1.1 Equality AND Presence

Purpose Test equality and presence matching combination in complex search filter.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=Search, o=IMC, c=US
Base (dc-naming) dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (&(sn=thatcher)(title=*))
Expected results The following entry should be returned: Margaret Thatcher (title: Director)

3.3.2.2.1.2 Substring AND Presence

Purpose Test substring and presence matching combination in complex search filter.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=Search, o=IMC, c=US
Base (dc-naming) dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (&(cn=cl*ews)(title=*))
Expected results The following entry should be returned: Cliff Andrews (title: Associate)

3.3.2.2.1.3 Substring OR Substring

Purpose Test multiple substring matching combination in complex search filter.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=Search, o=IMC, c=US
Base (dc-naming) dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (|(cn=*od)(cn=*ad))
Expected results The following entries should be returned: Clint Eastwood, Charlie Abood, Henry Atwood, Alice Frostad

3.3.2.2.1.4 Substring OR Approximate

Purpose Test substring and approximate matching combination in complex search filter.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=Search, o=IMC, c=US
Base (dc-naming) dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (|(cn=*homer*)(cn~=body))
Expected results The following entries should be returned: Homer Winslow, Bette Davis, Buddy Holly

3.3.2.2.2 Negation of AVAs

3.3.2.2.2.1 NOT Presence (for person objects)

Purpose Test presence (for person objects) matching in search filter that includes negation.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=Europe, ou=Search, o=IMC, c=US
Base (dc-naming) dc=Europe, dc=Search, dc=Relative, dc=IMC, dc=org
Scope single-level
Filter (&(!(description=*))(objectclass=person))
Expected results The following entry should be returned: Jonathan Adams

3.3.2.2.2.2 NOT Substring (for person objects)

Purpose Test presence (for person objects) matching in search filter that includes negation.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=Sales, ou=Europe,ou=Search, o=IMC, c=US
Base (dc-naming) dc=Sales, dc=Europe,dc=Search, dc=Relative, dc=IMC, dc=org
Scope single-level
Filter (&(!(sn=wa*))(objectclass=person))
Expected results The following entry should be returned: Paulette Smith

3.3.2.2.3 Nested Boolean AVA Combinations

3.3.2.2.3.1 (Substring OR Substring) AND (Presence AND Presence)

Purpose Test a search filter with AVAs having the following combination of match type operators (Substring OR Substring) AND (Presence AND Presence)
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=Search, o=IMC, c=US
Base (dc-naming) dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (& (|(sn=*ood*)(sn=*woo*)) (&(telephonenumber=*)(title=*)) )
Expected results The following entries should be returned: Clint Eastwood, Merry Aboods, Charlie Abood, Brian Atwoods, Henry Atwoods, Henry Atwood

3.3.2.2.3.2 (Approximate AND Substring) OR (Approximate AND Substring)

Purpose (Approximate AND Sub-string) OR (Approximate AND Sub-string)
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=Search, o=IMC, c=US
Base (dc-naming) dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (| (&(cn~=body)(telephonenumber=*825*)) (&(cn~=smythe)(telephonenumber=*720*)) )
Expected results The following entries should be returned: Peter Smith, Paulette Smith, Bette Davis, Buddy Holly

3.3.2.2.3.3 NOT (Presence OR Presence) (for person objects)

Purpose NOT (Presence OR Presence) (for person objects)
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=Americas, ou=Search, o=IMC, c=US
Base (dc-naming) dc=Americas, dc=Search, dc=Relative, dc=IMC, dc=org
Scope single-level
Filter (&(!(|(internationaliSDNNumber=*)(description=*))) (objectclass=person))
Expected results The following entry should be returned: Paul Cezanne

3.3.2.3 Search for Entry with Multi-Valued RDN

Purpose Read the entry with the common name of 'cn=Pablo Picasso' and the user identifier of 'uid=00123456789', to check that an entry with a multi-valued RDN can be retrieved correctly
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28), [RFC 2253]
Procedure Instruct the LDAP user agent to locate and display all the attributes for the entry with the common name 'Pablo Picasso' and the user identifier of '00123456789'.
Base cn=Pablo Picasso + uid=00123456789, ou=Search, o=IMC, c=US
Base (dc-naming) cn=Pablo Picasso + uid=00123456789, dc=Search, dc=Relative, dc=IMC, dc=org
Scope base
Filter (objectclass=*)
Expected Results The test is successful if the entry is returned and all the attributes are displayed.

3.3.2.4 Three-Valued Logic Search Filter Evaluation

3.3.2.4.1 Filter of "AND" Choice with an Undefined Attribute Type (Evaluates to UNDEFINED)

Purpose Search for entries with a common name value of "Margaret Thatcher" and include an unrecognized attribute type in the search filter.
Reference [RFC 2251] (paragraph 4.5.1, pp. 27-28)
Procedure Instruct the LDAP user agent to search for and display all entries matching the search filter below.
Base ou=Americas, ou=Search, o=IMC, c=US
Base (dc-naming) dc=Americas, dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (&(cn=Margaret Thatcher)(foo=bar))
Expected Results The test is successful if no entries are displayed because the search filter evaluates to UNDEFINED.

3.3.2.4.2 Filter of "OR" Choice with an Undefined Attribute Type (Evaluates to TRUE)

Purpose Search for entries with a common name value of "Margaret Thatcher" and include an unrecognized attribute type in the search filter.
Reference [RFC 2251] (paragraph 4.5.1, pp. 27-28)
Procedure Instruct the LDAP user agent to search for and display all entries matching the search filter below.
Base ou=Americas, ou=Search, o=IMC, c=US
Base (dc-naming) dc=Americas, dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (|(cn=Margaret Thatcher)(foo=bar))
Expected Results The test is successful if an entry for Margaret Thatcher is displayed because the search filter evaluates to TRUE.

3.3.2.4.3 Filter of "NOT" Choice with an Undefined Attribute Type (Evaluates to UNDEFINED)

Purpose Search for entries and only include an unrecognized attribute type in the search filter.
Reference [RFC 2251] (paragraph 4.5.1, pp. 27-28)
Procedure Instruct the LDAP user agent to search for and display all entries matching the search filter below.
Base ou=Americas, ou=Search, o=IMC, c=US
Base (dc-naming) dc=Americas, dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (!(foo=bar))
Expected Results The test is successful if no entries are displayed because the search filter evaluates to UNDEFINED.

3.3.2.5 Unrecognized Option in Attribute Description List

Purpose Verify appropriate behavior when the list of attributes to be retrieved for an entry includes an unrecognized option as part of an attribute description.
Reference [RFC 2251] (paragraph 4.1.5, pg. 13), [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Submit a Search request with a search filter, base, scope, and attributes list as indicated below.
Base ou=Americas, ou=Search, o=IMC, c=US
Base (dc-naming) dc=Americas, dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Attributes cn, telephonenumber;foo, mail
Filter cn=*Margaret*
Expected results Unrecognized option should be ignored. The entry for Margaret Thatcher should be returned. (note: telephone number attribute should not be included in attributes returned, because an unknown option requires that a server treat the attribute affected by that option as an unknown attribute)

3.3.2.6 Retrieve Operational Attributes for an Entry

Purpose Verify correct behavior when all attributes, plus specific operational ones, are requested.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-29)
Procedure Submit a Search request as specified below, making sure to use a '*' character and also specific operational attribute names as the list of attributes to return for each entry.
Base ou=Americas, ou=Search, o=IMC, c=US
Base (dc-naming) dc=Americas, dc=Search, dc=Relative, dc=IMC, dc=org
Scope base-level
Attributes *, creatorsname, creatorstimestamp, modifersname, modifytimestamp
Filter objectclass=organizationalunit
Expected results The following entry should be returned with all attributes present, including requested operational attributes: ou=Americas, ou=Search, o=IMC, c=US

3.3.2.7 Alias Dereferencing

3.3.2.7.1 Never Dereference Aliases - Aliased Base Object

Purpose Verify that an aliased base object supplied on a Search request is not deferenced.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Search for a subordinate of a base object which is an alias, requesting neverDerefAliases.
Base cn=Canada, ou=Search, o=IMC, c=US
Base (dc-naming) cn=Canada, dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (sn=Thatcher)
Expected results Search base alias will not be dereferenced, entry for Margaret Thatcher will not be returned. No entries will be returned.

3.3.2.7.2 Never Dereference Aliases - Aliased Leaf Object

Purpose Verify that an aliased leaf object will not be dereferenced as a part of the Search response.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Search for a leaf entry which is an alias, requesting neverDerefAliases.
Base cn=Jonny Adams, ou=Europe, ou=Search, o=IMC, c=US
Base (dc-naming) cn=Jonny Adams, dc=Europe, dc=Search, dc=Relative, dc=IMC, dc=org
Scope base
Filter (telephonenumber=*)
Expected results Alias for Jonathan Adams will not be dereferenced. No entries will be returned.

3.3.2.7.3 Dereference Aliases in Searching - Aliased Base Object

Purpose Verify that an aliased base object will not be dereferenced when alias dereferencing during searching is enabled.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Search for a subordinate of a base object which is an alias, requesting derefInSearching
Base cn=Canada, ou=Search, o=IMC, c=US
Base (dc-naming) cn=Canada, dc=Search, dc=Relative, dc=IMC, dc=org
Scope single-level
Filter (sn=Thatcher)
Expected results Search base alias will not be dereferenced. No entries will be returned.

3.3.2.7.4 Dereference Aliases in Searching - Aliased Leaf Object

Purpose Verify that an aliased leaf object will be dereferenced as a part of the SEARCH results when alias dereferencing during searching is enabled.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Search for a leaf entry which is an alias, requesting derefInSearching.
Base cn=Jonny Adams, ou=Europe, ou=Search, o=IMC, c=US
Base (dc-naming) cn=Jonny Adams, dc=Europe, dc=Search, dc=Relative, dc=IMC, dc=org
Scope base
Filter (telephonenumber=*)
Expected results Alias for DN "cn=Jonathan Adams, ou=Europe, ou=Search, o=IMC, c=US" will be dereferenced and will be returned as a match, with telephone number +1 408 720 0000.

3.3.2.7.5 Dereference Finding Base Object - Aliased Base Object

Purpose Verify that an aliased base object will be dereferenced when alias dereferencing while finding base objects is enabled.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Search for a subordinate of a base object which is an alias, requesting derefFindingBaseObj.
Base cn=Canada, ou=Search, o=IMC, c=US
Base (dc-naming) cn=Canada, dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (sn=Thatcher)
Expected results Search base alias will be dereferenced, the entries for DN "cn=Margaret Thatcher, ou=Help Desk, ou=IT, ou=Americas, ou=Search, o=IMC, c=US" and "cn=Margaret Thatcher (No Title), ou=Help Desk, ou=IT, ou=Americas, ou=Search, o=IMC, c=US" will be returned.

3.3.2.7.6 Dereference Finding Base Object - Aliased Leaf Object

Purpose Verify that an aliased leaf object will not be dereferenced when alias dereferencing while finding base objects is enabled.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Search for a leaf entry which is an alias, derefFindingBaseObj.
Base cn=Jonny Adams, ou=Europe, ou=Search, o=IMC, c=US
Base (dc-naming) cn=Jonny Adams, dc=Europe, dc=Search, dc=Relative, dc=IMC, dc=org
Scope base
Filter (telephonenumber=*)
Expected results Alias for Jonathan Adams will not be dereferenced. No entries will be returned.

3.3.2.7.7 Always Dereference - Aliased Base Object

Purpose Verify that an aliased base object is dereferenced when full alias dereferencing is enabled.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Search for a subordinate of a base object which is an alias, requesting derefAlways.
Base cn=Canada, ou=Search, o=IMC, c=US
Base (dc-naming) cn=Canada, dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (sn=Thatcher)
Expected results Search base alias will be dereferenced, the entries for DN "cn=Margaret Thatcher, ou=Help Desk, ou=IT, ou=Americas, ou=Search, o=IMC, c=US" and "cn=Margaret Thatcher (No Title), ou=Help Desk, ou=IT, ou=Americas, ou=Search, o=IMC, c=US" will be returned.

3.3.2.7.8 Always Dereference - Aliased Leaf Object

Purpose Verify that an aliased base object is dereferenced when full alias dereferencing is enabled.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Search for a leaf entry which is an alias, requesting derefAlways.
Base cn=Jonny Adams, ou=Europe, ou=Search, o=IMC, c=US
Base (dc-naming) cn=Jonny Adams, dc=Europe, dc=Search, dc=Relative, dc=IMC, dc=org
Scope base
Filter (telephonenumber=*)
Expected results Alias for DN "cn=Jonathan Adams, ou=Europe, ou=Search, o=IMC, c=US" will be dereferenced and will be returned as a match, with telephone number +1 408 720 0000.

Purpose Verify that an aliased base object is dereferenced when full alias dereferencing is enabled, and that matches in non-dereferenced search paths are not returned..
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Search for a leaf entry which is an alias, requesting derefAlways.
Base cn=Jonny Adams, ou=Europe, ou=Search, o=IMC, c=US
Base (dc-naming) cn=Jonny Adams, dc=Europe, dc=Search, dc=Relative, dc=IMC, dc=org
Scope base
Filter (sn=Adams)
Expected results Alias for DN "cn=Jonathan Adams, ou=Europe, ou=Search, o=IMC, c=US" will be dereferenced and will be returned as a match, with telephone number +1 408 720 0000. The "Jonny Adams" alias entry is not returned.

3.3.2.8 Miscellaneous Searching Feature Tests

3.3.2.8.1 Search Result Size Limit

Purpose Verify that size limit feature works appropriately.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Set sizelimit parameter to 1. Perform a search that will return more than 1 entry.
Base ou=Search, o=IMC, c=US
Base (dc-naming) dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (cn=*)
Expected results One entry should be returned, followed by return code 4 (sizeLimitExceeded). Reset the size limit to its original value.

3.3.2.8.2 Search Time Limit

Purpose Verify that time limit feature works appropriately.
Reference [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Set timelimit parameter to 1. Perform search that should take longer than 1 second.
Base ou=Search, o=IMC, c=US
Base (dc-naming) dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (objectclass=*)
Expected results Some entries should be returned, followed by return code 3 (timeLimitExceeded). Reset the timelimit parameter to its original value.

3.3.2.8.3 Return Attribute Types Only

Purpose Verify that the feature designed to allow for returning attribute names instead of name-value pairs works appropriately.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Set typesonly parameter to TRUE. Perform a search that will return matching results.
Base ou=Search, o=IMC, c=US
Base (dc-naming) dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (cn=*)
Expected results Only attribute names should be returned.

3.3.2.9 Search Operation Errors

3.3.2.9.1 Invalid Search Filter Syntax

Purpose Verify appropriate behavior when a search filter of invalid syntax is included as a search request parameter.
Reference [RFC 2251] (paragraph TBD , pp. TBD)
Procedure Submit a Search request with a bad filter syntax.
Base ou=Americas, ou=Search, o=IMC, c=US
Base (dc-naming) dc=Americas, dc=Search, dc=Relative, dc=IMC, dc=org
Scope single-level
Filter (&(!(|internationaliSDNNumber=*(description=*
Expected results Return code TBD (codeTBD) should be returned. No matching entries should be returned. (note: there was a response code for this in LDAPv2, but I can't seem to find the equivalent requirement in LDAPv3)
The error is should be an API error since the filter string is parsed to be encoded.

3.3.2.9.2 noSuchObject Error for Subtree Search

Purpose Verify that the server will generate a noSuchObject error for a subtree search.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Perform a subtree search with a base that does not exist.
Base ou=Staff, ou=Americas, ou=Search, o=IMC, c=US
Base (dc-naming) dc=Staff, dc=Americas, dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (sn=person)
Expected results Return code 32 (noSuchObject) should be returned as an error. No entries will be returned.

3.3.2.9.3 noSuchObject for Single-Level Search

Purpose Verify that the server will generate a noSuchObject error for a single-level search.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Perform a single-level search with a base that does not exist.
Base ou=People, ou=Search, o=IMC, c=US
Base (dc-naming) dc=People, dc=Search, dc=Relative, dc=IMC, dc=org
Scope single-level
Filter (objectclass=person)
Expected results Return code 32 (noSuchObject) should be returned. No entries will be returned.

3.3.2.9.4 noSuchObject for Base-Level Search

Purpose Verify that the server will generate a noSuchObject error for a base-level search.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Perform a base-scope search with a base that does not exist.
Base cn=Madonna, ou=Search, o=IMC, c=US
Base (dc-naming) cn=Madonna, dc=Search, dc=Relative, dc=IMC, dc=org
Scope base
Filter (objectclass=*)
Expected results Return code 32 (noSuchObject) should be returned. No entries will be returned.

3.3.2.9.5 invalidDNSyntax for Subtree Search

Purpose Verify that the server will generate an invalidDNSyntax error for a subtree search.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Specify a DN with bad syntax for a subtree search.
Base cn=Tom Jones,ou, ou=Search, o=IMC, c=US
Base (dc-naming) cn=Tom Jones,ou, dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (sn=jones)
Expected results Return code 34 (invalidDNSyntax) should be returned. No entries will be returned.

3.3.2.9.6 invalidDNSyntax for Single-Level Search

Purpose Verify that the server will generate an invalidDNSyntax error for a single-level search.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Specify a DN with bad syntax for a single-level search.
Base cn=Tom Jones,ou, ou=Search, o=IMC, c=US
Base (dc-naming) cn=Tom Jones,ou, dc=Search, dc=Relative, dc=IMC, dc=org
Scope single-level
Filter (sn=jones)
Expected results Return code 34 (invalidDNSyntax) should be returned. No entries will be returned.

3.3.2.9.7 invalidDNSyntax for Base-Level Search

Purpose Verify that the server will generate an invalidDNSyntax error for a base-level search.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.5.1, pp. 25-28)
Procedure Specify a DN with bad syntax for a base-level search.
Base ou="Any Unit, ou=Americas, ou=Search, o=IMC, c=US
Base (dc-naming) dc="Any Unit, dc=Americas, dc=Search, dc=Relative, dc=IMC, dc=org
Scope base-level
Filter (sn=jones)
Expected results Return code 34 (invalidDNSyntax) should be returned. No entries will be returned.

3.3.3 Modify Operation Tests

To perform the tests in paragraph 3.3.3, you must authenticate as:

dn: cn=Directory Manager, o=IMC, c=US

with password: controller

There are two parameters in all of the DNs found in paragraph 3.3.3; definitions for these parameters are as follows:

<vendor-ID>
the vendor ID allocated to you during the testing event; "Vendor1", "Vendor2", etc.
<client-ID>
a sequence of IDs assigned by you to each client you plan on testing; "Client1", "Client2", …, "Client10"; if you have more than 10 clients you wish to test, please notify the event planners so that they can make appropriate modifications to the LDIF file intended for use during the testing event.

You should replace the bracketed place holder for these parameters in all DNs found in this paragraph prior to performing the tests.

3.3.3.1 Modify-Add Tests

3.3.3.1.1 Add Value - Create Attribute

Purpose Verify that an attribute type is created when a request for adding an attribute value for an attribute type that does not currently exist for an entry.
Reference [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Add the first value of an attribute type.
DN cn=Paul Cezanne, ou=<client-ID>, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type facsimileTelephoneNumber
Attribute value +1 908 555 1212
Expected results Entry should now have +1 908 555 1212 as a fax number.

3.3.3.1.2 Add Value to Existing Attribute

Purpose Verify that an additional value can be added to an existing attribute.
Reference [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Add a second attribute value of an attribute type.
DN cn=Paul Cezanne, ou=<client-ID>, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type title
Attribute value CEO
Expected results Entry should now have both "President" and "CEO" as titles.

3.3.3.1.3 Modify-Add Errors

3.3.3.1.3.1 attributeOrValueExists

Purpose Verify that an attributeOrValueExists error message can be generated.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Attempt to add a surname attribute value already contained within an entry.
DN cn=Paul Cezanne, ou=<client-ID>, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type sn
Attribute value Cezanne
Expected results Return code 20 (attributeOrValueExists) should be returned.

3.3.3.1.3.2 invalidAttributeSyntax

Purpose Verify that an invalid attribute syntax causes the server to generate an invalidAttributeSyntax error.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Do not supply a value for the attribute being added using a modify-add request.
DN cn=Paul Cezanne, ou=<client-ID>, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type mail
Attribute value <unspecified>
Expected results Return code 21 (invalidAttributeSyntax) should be returned. The attribute should not have been added to the entry.

3.3.3.1.3.3 invalidDNSyntax

Purpose Verify that an invalid DN syntax causes the server to generate an invalidDNSyntax error for a modify-add request.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Specify a DN with bad syntax for a modify-add.
DN cn, ou, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type cn
Attribute value Missing Person
Expected results Return code 34 (invalidDNSytnax) should be returned. The attribute should not have been added to the entry.

3.3.3.2 Modify-Delete Tests

3.3.3.2.1 Delete One Value of a Multi-valued Attribute

Purpose Verify deletion of a single value for a multi-valued attribute.
Reference [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Delete one of three attribute values for an attribute type.
DN cn=Paul Newman, ou=<client-ID>, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type title
Attribute value Head Honcho
Expected results Entry should now have "President" and "CEO" as titles.

3.3.3.2.2 Delete Single-Valued Attribute

Purpose Verify that a single-valued attribute can be deleted using the MODIFY operation.
Reference [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Delete the only attribute for an attribute type.
DN cn=Margaret Thatcher, ou=<client-ID>, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type title
Attribute value Director
Expected results Entry should now have no title attributes.

3.3.3.2.3 Delete Multi-Valued Attribute

Purpose Verify that a multi-valued attribute can be deleted using the MODIFY operation.
Reference [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Delete a multi-valued attribute.
DN cn=Emeril Lagosse, ou=<client-ID>, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type title
Attribute value <unspecified>
Expected results Entry should now have no title attributes.

3.3.3.2.4 Modify-Delete Errors

3.3.3.2.4.1 noSuchAttribute with Attribute Type Only

Purpose Verify that server will generate a noSuchAttribute error message when instructed via a modify-delete request to delete an attribute not contained within an entry.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Based on a specification of an attribute type only, attempt to delete an attribute from an entry that does not contain that attribute.
DN cn=Margaret Thatcher, ou=<client-ID>, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type facsimileTelephoneNumber
Expected results Return code 16 (noSuchAttribute) should be returned.

3.3.3.2.4.2 noSuchAttribute with Attribute Type-Value Pair

Purpose Verify that server will generate a noSuchAttribute error message when instructed via a modify-delete request to delete an attribute not contained within an entry.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Based on a specification of an attribute type-value pair, attempt to delete an attribute type-value pair from an entry that does not contain that attribute.
DN cn=Margaret Thatcher, ou=<client-ID>, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type internationaliSDNNumber
Attribute value 1 313 555 1234
Expected results Return code 16 (noSuchAttribute) should be returned.

3.3.3.2.4.3 noSuchAttribute with Incorrect Attribute Value

Purpose Verify that server will generate a noSuchAttribute error message when instructed via a modify-delete request to delete an attribute type-value pair not contained within an entry.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Based on a specification of an attribute type-value pair with an incorrect value, attempt to delete an attribute value from an entry that does not contain that attribute.
DN cn=Margaret Thatcher, ou=<client-ID>, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type telephoneNumber
Attribute value 313 555-8300
Notes Actual existing value is 825-0008
Expected results Return code 16 (noSuchAttribute) should be returned.

3.3.3.2.4.4 objectClassViolation

Purpose Verify that server will generate an objectClassViolation error message when instructed via a modify-delete request to delete a mandatory attribute.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Attempt to remove a required attribute from an entry.
DN cn=Margaret Thatcher, ou=<client-ID>, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type objectclass
Expected results Return code 65 (objectClassViolation) should be returned.

3.3.3.3 Modify-Replace Tests

3.3.3.3.1 Replace Multi-Valued Attribute with Single Value

Purpose Verify that a multi-valued attribute can be replaced by a single-valued attribute.
Reference [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Replace an attribute type which has multiple values using a Modify request.
DN cn=David Rosengarten, ou=<client-ID>, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type title
Attribute value Chief Taster
Expected results Entry should now have only "Chief Taster" as a title.

3.3.3.3.2 Replace Single-Valued Attribute

Purpose Verify that a single-valued attribute can be replaced.
Procedure Replace an attribute value for an attribute type using a Modify request.
Reference [RFC 2251] (paragraph 4.6, pp. 32-33)
DN cn=David Rosengarten, ou=<client-ID>, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type mail
Attribute value David.Rosengarten@tvfood.com
Expected results Entry should now have only "David.Rosengarten@tvfood.com" as an e-mail address.

3.3.3.3.3 Delete Attribute Using Modify-Replace

Purpose Verify that a server will remove attributes to be replaced if specified with no value.
Reference [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Do not supply a value for the attribute type being replaced using a Modify request.
DN cn=Margaret Thatcher, ou=<client-ID>, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type givenname
Attribute value <unspecified>
Expected results The givenname attribute should no longer be contained within the entry.

3.3.3.3.4 Modify-Replace Errors

3.3.3.3.4.1 noSuchObject

Purpose Verify that a modify-replace request involving a non-existent object will generate a noSuchObject error message.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Specify an entry that does not exist for a modify-replace request.
DN cn=Invisible Person, ou=<client-ID>, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type sn
Attribute value Person
Expected results Return code 32 (noSuchObject) should be returned. The operation should not succeed.

3.3.3.3.4.2 notAllowedOnRDN

Purpose Verify that a modify-replace request specified to change the naming attribute generates a notAllowedOnRDN error message.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Attempt to rename the naming attribute of an entry using a modify-replace request.
DN cn=Margaret Thatcher, ou=<client-ID>, ou=<vendor-ID>, ou=Modify, o=IMC, c=US
Attribute type cn
Attribute value Maggy Thatcher
Expected results Return code 67 (notAllowedOnRDN) should be returned. The operation should not succeed.

3.3.4 Add Operation Tests

To perform the tests in paragraph 3.3.4, you must authenticate as:

dn: cn=Directory Manager, o=IMC, c=US

with password: controller

There are two parameters in all of the DNs found in paragraph 3.4.4; definitions for these parameters are as follows:

<vendor-ID>
the vendor ID allocated to you during the testing event; "Vendor1", "Vendor2", etc.
<client-ID>
a sequence of IDs assigned by you to each client you plan on testing; "Client1", "Client2", …, "Client10" if you have more than 10 clients you wish to test, please notify the event planners so that they can make appropriate modifications to the LDIF file that will be used during the testing event.

You should replace the bracketed place holder for these parameters in all DNs found in this paragraph prior to performing the tests.

3.3.4.1 Add New Entry

Purpose Verify capability to add a new entry to the directory using the ADD operation.
Reference [RFC 2251] (paragraph 4.7 , pg. 34)
Procedure Add an entire new directory entry using the information below.
DN cn=Austin Powers, ou=<client-ID>, ou=<vendor-ID>, ou=Add, o=IMC, c=US
Attribute type objectclass
Attribute values top person organizationalPerson inetOrgPerson
Attribute type sn
Attribute value Powers
Attribute type cn
Attribute value Austin \"Danger\" Powers
Attribute type telephoneNumber
Attribute value + 44 582 10101
Attribute type mail
Attribute value secret_agent_man@imc.org
Attribute type description
Attribute value Yea Baby!!
Attribute type uid
Attribute value secret_agent_man
Attribute type description
Attribute value Behave!
Expected results A new entry should now be present in the directory with the above attributes.

3.3.4.2 Add Errors

3.3.4.2.1 noSuchObject

Purpose Verify that servers will return a noSuchObject error message in response to an Add request that includes a specification of a non-existent superior object.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.7, pp. 34-35)
Procedure Specify a non-existent organizationalUnit value in the path of the name of a new entry for an add operation.
DN cn=Dweezle Zappa, ou=Zappaland, ou=<client-ID>, ou=<vendor-ID>, ou=Add, o=IMC, c=US
Attribute type objectclass
Attribute values top person
Attribute type sn
Attribute value Person
Attribute type cn
Attribute value Not A Person
Expected results Return code 32 (noSuchObject) should be returned. The entry should not be created.

3.3.4.2.2 invalidDNSyntax

Purpose Verify that the server will generate an invalidDNSyntax error for an Add request including an improperly-formed DN.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.7, pp. 34-35)
Procedure Specify a DN with bad syntax for an add operation.
DN cn=New Person, ou=<client-ID>, ou=<vendor-ID>, =IMC, c=US
Attribute type objectclass
Attribute value top person
Attribute type sn
Attribute value Person
Attribute type cn
Attribute value New Person
Expected results Return code 34 (invalidDNSyntax) should be returned. The entry should not have been added to the directory.

3.3.4.2.3 entryAlreadyExists

Purpose Verify that the server will generate an entryAlreadyExists error for an Add request including specification of an existing entry.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.7, pp. 34-35)
Procedure Attempt to add a new entry with the same name as an existing entry.
DN ou=<client-ID>, ou=<vendor-ID>, ou=Add, o=IMC, c=US
Attribute type objectclass
Attribute values top organizationalUnit
Attribute type ou
Attribute value <client-ID>
Expected results Return code 68 (entryAlreadyExists) should be returned. The existing entry should remain in the directory, unmodified.

3.3.4.2.4 objectClassViolation

Purpose Verify that the server will generate an objectClassViolation error for an Add request that is missing the specification of a mandatory attribute.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.7, pp. 34-35)
Procedure Attempt to add an alias entry without specifying the required aliasedObjectName attribute.
DN cn=Alias Entry, ou=<client-ID>, ou=<vendor-ID>, ou=Add, o=IMC, c=US
Attribute type objectclass
Attribute values top alias
Expected results Return code 65 (objectClassViolation) should be returned. The entry should not be present in the directory.

3.3.5 Delete Operation Tests

To perform the tests in paragraph 3.3.5, you must authenticate as:

dn: cn=Directory Manager, o=IMC, c=US

with password: controller

There are two parameters in all of the DNs found in paragraph 3.4.4; definitions for these parameters are as follows:

<vendor-ID>
the vendor ID allocated to you during the testing event; "Vendor1", "Vendor2", etc.
<client-ID>
a sequence of IDs assigned by you to each client you plan on testing; "Client1", "Client2", …, "Client10" if you have more than 10 clients you wish to test, please notify the event planners so that they can make appropriate modifications to the LDIF file that will be used during the testing event.

You should replace the bracketed place holder for these parameters in all DNs found in this paragraph prior to performing the tests.

3.3.5.1 Delete Existing Object

Purpose Verify that an entry can be deleted.
Reference [RFC 2251] (paragraph 4.8, pg. 35)
Procedure Delete the entry with the DN specified below.
DN cn=Mary-Sue Milliken, ou=<client-ID>, ou=<vendor-ID>, ou=Delete, o=IMC, c=US
Expected results The entry should no longer exist.

3.3.5.2 Delete Errors

3.3.5.2.1 noSuchObject

Purpose Verify that the server will generate a noSuchObject error for a Delete request that includes a specification of a non-existent object.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.8, pg. 35)
Procedure Specify an entry that does not exist for a delete operation.
DN cn=Susan Feniger, ou=<client-ID>, ou=<vendor-ID>, ou=Delete, o=IMC, c=US
Expected results Return code 32 (noSuchObject) should be returned. No changes should have been made to the directory.

3.3.5.2.2 invalidDNSyntax

Purpose Verify that the server will generate an invalidDNSyntax error for a Delete request including an improperly-formed DN.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.8, pg. 35)
Procedure Specify a DN with bad syntax for a delete operation.
DN Sarah Thorton,<client-ID>,<vendor-ID>,Modify, IMC, US
Expected results Return code 34 (invalidDNSyntax) should be returned. The entry should not have been deleted from the directory.

3.3.5.2.3 notAllowedOnNonLeaf

Purpose Verify that the server will generate an invalidDNSyntax error for a Delete request specifying the removal of an object that has children.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.8, pg. 35)
Procedure Attempt to remove an entry which has entries below it in the tree.
DN ou=<vendor-ID>, ou=Delete, o=IMC, c=US
Expected results Return code 66 (notAllowedOnNonLeaf) should be return. The object should not have been removed from the directory.

3.3.6 ModifyDN Operation Tests

To perform the tests in paragraph 3.3.6, you must authenticate as:

dn: cn=Directory Manager, o=IMC, c=US

with password: controller

There are two parameters in all of the DNs found in paragraph 3.3.3; definitions for these parameters are as follows:

<vendor-ID>
the vendor ID allocated to you during the testing event; "Vendor1", "Vendor2", etc.
<client-ID>
a sequence of IDs assigned by you to each client you plan on testing; "Client1", "Client2", …, "Client10"; if you have more than 10 clients you wish to test, please notify the event planners so that they can make appropriate modifications to the LDIF file intended for use during the testing event.

You should replace the bracketed place holder for these parameters in all DNs found in this paragraph prior to performing the tests.

3.3.6.1 Rename a Leaf Entry

Purpose Verify that RDNs can be modified.
Reference [RFC 2251] (paragraph 4.9, pp. 36-37)
Procedure Change the RDN of the entry specified below.
DN cn=Paul Cezanne, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US
New RDN cn=Paul Newman
Expected results The new distinguished name of this entry should be cn=Paul Newman, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US

3.3.6.2 Move a Leaf Entry to A New Parent

Purpose Verify that RDNs can be modified.
Reference [RFC 2251] (paragraph 4.9, pp. 36-37)
Procedure Change the RDN of the entry specified below.
DN cn=Paul Hoffman, ou=Current Parent, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US
New RDN cn=Paul Hoffman
New Superior ou=New Parent, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US
Expected results The new distinguished name of this entry should be cn=Paul Hoffman, ou=New Parent, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US

3.3.6.3 Move a Renamed Leaf Entry to A New Parent

Purpose Verify that RDNs can be modified.
Reference [RFC 2251] (paragraph 4.9, pp. 36-37)
Procedure Change the RDN of the entry specified below.
DN cn=Paul Revere, ou=Current Parent, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US
New RDN cn=Paul McCartney
New Superior ou=New Parent, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US
Expected results The new distinguished name of this entry should be cn=Paul McCarney, ou=New Parent, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US

3.3.6.4 Rename Subtree of Entries

Purpose Verify that the parent object of a subtree can be renamed.
Reference [RFC 2251] (paragraph 4.9, pp. 36-37)
Procedure Rename the subtree based at the object specified below.
Base DN ou=Current Subtree, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US
New RDN ou=New Subtree
Delete RDN Flag FALSE
Expected results The new distinguished name of objects in this subtree are now rooted at ou=New Subtree, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US. The old base object should not exist. The attribute-value pair: ou=Current Subtree will remain associated with the entry with the base DN defined above.

3.3.6.5 Move Subtree of Entries

Purpose Verify that subtrees can be moved to a new parent.
Reference [RFC 2251] (paragraph 4.9, pp. 36-37)
Procedure Move the subtree based at the object specified below.
Base DN ou=Static, ou=Current Base, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US
New RDN ou=Static
New Superior ou=New Base, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US
Delete RDN Flag TRUE
Expected results The new distinguished name of objects in this subtree are now rooted at ou=Static, ou=New Base, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US. The old base object should not exist. The attribute-value pair: ou=TBD will remain associated with the entry with the base DN defined above.

3.3.6.6 Move a Renamed Subtree of Entries to a New Parent

Purpose Verify that subtrees can be moved to a new parent.
Reference [RFC 2251] (paragraph 4.9, pp. 36-37)
Procedure Move the subtree based at the object specified below.
Base DN ou=Old Subtree, ou=Old Parent, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US
New RDN ou=Not So Old Subtree
New Superior ou=Not So Old Parent, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US
Delete RDN Flag TRUE
Expected results The new distinguished name of objects in this subtree are now rooted at ou=Not So Old Subtree, ou=Not So Old Parent, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US. The old base object should not exist. The attribute-value pair: ou=TBD will remain associated with the entry with the base DN defined above.

3.3.6.7 ModifyDN Errors

3.3.6.7.1 entryAlreadyExists

Purpose Verify that the server will generate an entryAlreadyExists error for ModifyDN request including specification of parameters corresponding to an existing entry.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.9, pp. 36-37)
Procedure Attempt to rename an entry to a name that already exists.
DN cn=Paul Cezanne, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US
New RDN cn=Margaret Thatcher
Expected results Return code 68 (entryAlreadyExists) should be returned. Both the entry for which the change was intended and the existing entry should remain in the directory, unmodified.

3.3.6.7.2 noSuchObject

Purpose Verify that the server will generate a noSuchObject error for Modify DN request that includes a specification of a non-existant object.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.9, pp. 36-37)
Procedure Specify a name change for an entry that does not exist on this server using a Modify DN request.
DN cn=No Person, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US
New RDN cn=Does not matter
Expected results Return code 32 (noSuchObject) should be returned. No changes should have been made to the directory.

3.3.6.7.3 invalidDNSyntax with Bad DN

Purpose Verify that the server will generate an invalidDNSyntax error for a Delete request including an improperly-formed DN.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.9, pp. 36-37)
Procedure Specify a DN with bad syntax for a ModifyDN operation.
DN , ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US
New RDN cn=Missing Person
Expected results Return code 34 (invalidDNSyntax) should be returned.

3.3.6.7.4 invalidDNSyntax with Bad RDN

Purpose Verify that the server will generate an invalidDNSyntax error for a Delete request including an improperly-formed RDN.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.9, pp. 36-37)
Procedure Specify a RDN with bad syntax for a ModifyDN operation.
DN cn=Margaret Thatcher, ou=<client-ID>, ou=<vendor-ID>, ou=ModifyDN, o=IMC, c=US
New RDN Maggy Thatcher
Expected results Return code 34 (invalidDNSyntax) should be returned. The entry should not have been deleted from the directory.

3.3.7 Compare Operation Tests

3.3.7.1 Comparison with FALSE Return Code

Purpose Verify return of FALSE return code for Compare request.
Reference [RFC 2251] (paragraph 4.10, pp. 37-38)
Procedure Send a Compare request to a server constructed using the information shown below.
DN cn=Margaret Thatcher, ou=Help Desk, ou=IT, ou=Americas, ou=Search, o=IMC, c=US
Attribute type title
Attribute value Directory (correct value is Director; extra 'y' was included in purported title attribute value)
Expected results Result code 5 (compareFalse) should be returned.

3.3.7.2 Comparison with TRUE Return Code

Purpose Verify return of TRUE return code for Compare request.
Reference [RFC 2251] (paragraph 4.10, pp. 37-38)
Procedure Send a Compare request to a server constructed using the information shown below.
DN cn=Margaret Thatcher, ou=Help Desk, ou=IT, ou=Americas, ou=Search, o=IMC, c=US
Attribute type title
Attribute value Director
Expected results Result code 6 (compareTrue) should be returned.

3.3.7.3 Compare Errors

3.3.7.3.1 noSuchAttribute

Purpose Verify that server generates a noSuchAttribute error message for Compare request that includes a purported AVA not present in an entry.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.10, pp. 37-38)
Procedure Specify an AVA that will not match an existing for an entry that does not contain that attribute on a Compare request.
DN cn=Margaret Thatcher, ou=Help Desk, ou=IT, ou=Americas, ou=Search, o=IMC, c=US
Attribute type internationaliSDNNumber
Attribute value +1 810 555 3333
Expected results Return code 16 (noSuchAttribute) should be returned.

3.3.7.3.2 noSuchObject

Purpose Verify that the server will generate a noSuchObject error for a Compare request that includes a specification of a non-existant object.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.10, pp. 37-38)
Procedure Specify an AVA that will not match an existing directory entry.
DN cn=Nobody Here, ou=Americas, ou=Search, o=IMC, c=US
Attribute type sn
Attribute value Here
Expected results Return code 32 (noSuchObject) should be returned.

3.3.7.3.3 invalidDNSyntax

Purpose Verify that the server will generate an invalidDNSyntax error for a Compare request including an improperly-formed DN.
Reference [RFC 2251] (paragraph 4.1.10, pp. 16-17), [RFC 2251] (paragraph 4.10, pp. 37-38)
Procedure Specify a DN with bad syntax for a Compare request.
DN cn=Margaret Thatcher, ou=Help Desk, ouIT, ou=Americas, ou=Search, o=IMC, c=US
Attribute type telephoneNumber
Attribute value 825-0008
Expected results Return code 34 (invalidDNSyntax) should be returned.

3.3.8 Extended Operations Tests

TBD, but to be based on the following cases:

3.3.9 Charset-Related Tests

3.3.10 DN Quoting Form Tests

TBD but based on [RFC 2253].

3.3.11 Certificate Storage, Retrieval, and Comparison

The descriptions of these tests assume that the certificates generated by CA1 are used. These certificates are found in directory certs1 and are as per the CATS description. A further set of certificates that could equally well be used, generated by CA2, are provided in directory certs2. Where other certificate generators participate in testing, and are assigned ids CA3, CA4, etc., the tests can also be performed with their certificates.  For certificate generator product allocated identity <CA-ID>, the DIT subtree rooted at ou=<CA-ID>, ou=CAs, o=IMC, c=US is used (eg. for certificate generator product 3, the DIT subtree rooted at ou=CA3, ou=CAs, o=IMC, c=US is used.

Note that the certificates in directories certs1 and certs2 are in DER format. Equivalent certificates in PEM format are provided in directories certs1.pem and certs2.pem.

3.3.11.1 Search

3.3.11.1.1 Search for Entry Containing a User Certificate

Purpose Search for entry containing a user certificate.
Reference [RFC 2559] (paragraph 6.2, pp. 6-7)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=Certificates, ou=CA1, ou=CAs, o=IMC, c=US
Base (dc-naming) dc=Certificates, dc=CA1, dc=CAs, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (&(sn=Brush)(userCertificate=*))
Expected results The following entry should be returned: Basil Brush. The entry should include two certificates.

3.3.11.1.2 Search for Entry Not Containing a User Certificate

Purpose Search for entry not containing a user certificate.
Reference [RFC 2559] (paragraph 6.2, pp. 6-7)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=Certificates, ou=CA1, ou=CAs, o=IMC, c=US
Base (dc-naming) dc=Certificates, dc=CA1, dc=CAs, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (&(sn=Brush)(!(userCertificate=*)))
Expected results The following entry should be returned: Bertram Brush. The entry should not include a certificate.

3.3.11.1.3 Search for Entry Containing a CA Certificate

Purpose Search for entry containing a CA certificate.
Reference [RFC 2559] (paragraph 6.2, pp. 6-7)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=CAs, o=IMC, c=US
Base (dc-naming) dc=CAs, dc=Relative, dc=IMC, dc=org
Scope single-level
Filter cACertificate=*
Expected results Two entries - CA<n> and BadCA<n> - should be returned for each certificate generator participating in the tests. Each entry returned should include a cACertificate attribute.

3.3.11.1.4 Search for Entry Not Containing a CA Certificate

Purpose Search for entry not containing a CA certificate.
Reference [RFC 2559] (paragraph 6.2, pp. 6-7)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=Certificates, ou=CA1, ou=CAs, o=IMC, c=US
Base (dc-naming) dc=Certificates, dc=CA1, dc=CAs, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (&(sn=Brush)(!(cACertificate=*)))
Expected results Two entries should be returned: Basil Brush (This entry should include two user certificates); Bertram Brush (This entry should not include a certificate).

3.3.11.1.5 Search for Entry Containing a CRL

Purpose Search for entry containing a Certificate Revocation List.
Reference [RFC 2559] (paragraph 6.2, pp. 6-7)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=CAs, o=IMC, c=US
Base (dc-naming) dc=CAs, dc=Relative, dc=IMC, dc=org
Scope single-level
Filter certificateRevocationList=*
Expected results An entry - CA<n> - should be returned for each certificate generator participating in the tests. Each entry returned should include a certificateRevocationList attribute.

3.3.11.2 Compare

Purpose Compare using userCertificate attribute.
Reference [RFC 2251] (paragraph 4.10, pp. 37-38)
(Note that neither [LDAP_PR] nor [RFC 2559] requires the compare operation to be supported for certificate attributes.)
Procedure Send a Compare request to a server constructed using the information shown below.
DN cn=Charles Fox, ou=Certificates, ou=CA1, ou=CAs, o=IMC, c=US
Attribute type userCertificate
Attribute value The certificate in file certs1/charles_fox
Expected results Result code 6 (compareTrue) should be returned.

3.3.11.3 Add and Modify Entries

To perform the tests in paragraph 3.3.11.3, you must authenticate as:

dn: cn=Directory Manager, o=IMC, c=US

with password: controller

There are two parameters in all of the DNs found in paragraph 3.3.11.3; definitions for these parameters are as follows:

<vendor-ID>
the vendor ID allocated to you during the testing event; "Vendor1", "Vendor2", etc.
<client-ID>
a sequence of IDs assigned by you to each client you plan on testing; "Client1", "Client2", …, "Client10" if you have more than 10 clients you wish to test, please notify the event planners so that they can make appropriate modifications to the LDIF file that will be used during the testing event.

You should replace the bracketed place holder for these parameters in all DNs found in this paragraph prior to performing the tests.

3.3.11.3.1 Add Entry with Certificate

Purpose Verify capability to add a new entry to the directory with userCertificate attribute.
Reference [RFC 2251] (paragraph 4.7 , pg. 34)
Procedure Add an entire new directory entry using the information below.
DN cn=Lawrence Lamb, ou=<client-ID>, ou=<vendor-ID>, ou=CertificateAdd, ou=CA1, ou=CAs, o=IMC, c=US
Attribute type objectclass
Attribute values top person organizationalPerson inetOrgPerson
Attribute type sn
Attribute value Lamb
Attribute type cn
Attribute value Lawrence Lamb
Attribute type telephoneNumber
Attribute value + 44 1189 500 001
Attribute type mail
Attribute value lawrence@maff.gov.uk
Attribute type userCertificate
Attribute value The certificate for Lawrence Lamb in file certs1/lawrence_lamb
Expected results A new entry should now be present in the directory with the above attributes.

3.3.11.3.2 Modify-Add Tests

3.3.11.3.2.1 Create userCertificate Attribute

Purpose Verify that a userCertificate attribute type is created when a request is made for adding a userCertificate attribute value when the userCertificate attribute type does not currently exist for an entry.
Reference [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Add the first value of a userCertificate attribute type.
DN cn=Richard Bird, ou=<client-ID>, ou=<vendor-ID>, ou=CertificateModify, ou=CA1, ou=CAs, o=IMC, c=US
Attribute type userCertificate
Attribute value The certificate for Richard Bird in file certs1/richard_bird
Expected results Entry should now include the certificate for Richard Bird.

3.3.11.3.2.2 Add userCertificate Value to Existing Attribute

Purpose Verify that an additional value can be added to an existing attribute.
Reference [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Add a second attribute value of an attribute type.
DN cn=Michael Fish, ou=<client-ID>, ou=<vendor-ID>, ou=CertificateModify, ou=CA1, ou=CAs, o=IMC, c=US
Attribute type userCertificate
Attribute value The Michael Fish Current Certificate in file certs1/michael_fish_current
Expected results Entry should now have two certificates.

3.3.11.3.2.3 Create cACertificate Attribute

Purpose Verify that a cACertificate attribute type is created when a request is made for adding a cACertificate attribute value when the cACertificate attribute type does not currently exist for an entry.
Reference [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Add the first value of a cACertificate attribute type.
DN ou=Swallow Bank, ou=<client-ID>, ou=<vendor-ID>, ou=CertificateModify, ou=CA1, ou=CAs, o=IMC, c=US
Attribute type cACertificate
Attribute value The CA certificate for the Swallow Bank in file certs1/swallow_bank
Expected results Entry should now include the CA certificate for the Swallow Bank.

3.3.11.3.2.4 Create certificateRevocationList Attribute

Purpose Verify that a certificateRevocationList attribute type is created when a request is made for adding a certificateRevocationList attribute value when the certificateRevocationList attribute type does not currently exist for an entry.
Reference [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Add the first value of a certificateRevocationList attribute type.
DN ou=Swallow Bank, ou=<client-ID>, ou=<vendor-ID>, ou=CertificateModify, ou=CA1, ou=CAs, o=IMC, c=US
Attribute type certificateRevocationList
Attribute value The CA CRL in file certs1/swallow_crl
Expected results Entry should now include the CRL for the Swallow Bank.

3.3.11.3.3 Modify-Delete Tests

3.3.11.3.3.1 Delete One Value of a Multi-valued userCertificate Attribute

Purpose Verify deletion of a single value for a multi-valued attribute.
Reference [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Delete one of two attribute values for an attribute type.
DN cn=Tony Hart, ou=<client-ID>, ou=<vendor-ID>, ou=CertificateModify, ou=CA1, ou=CAs, o=IMC, c=US
Attribute type userCertificate
Attribute value The Tony Hart Expired Certificate in file certs1/tony_hart_expired
Expected results Entry should now have just the certificate contained in file certs1/tony_hart_current

3.3.11.3.3.2 Delete Single-Valued userCertificate Attribute

Purpose Verify that a single-valued userCertificate attribute can be deleted using the MODIFY operation.
Reference [RFC 2251] (paragraph 4.6, pp. 32-33)
Procedure Delete the only attribute for a userCertificate attribute type.
DN cn=Quintain Hogg, ou=<client-ID>, ou=<vendor-ID>, ou=CertificateModify, ou=CA1, ou=CAs, o=IMC, c=US
Attribute type userCertificate
Attribute value The certificate stored in certs1/quintain_hogg
Expected results Entry should now have no userCertificate attributes.

3.3.11.3.4 Replace userCertificate Attribute

Purpose Verify that a userCertificate attribute can be replaced.
Procedure Replace an attribute value for an attribute type using a Modify request.
Reference [RFC 2251] (paragraph 4.6, pp. 32-33)
DN cn=John Prescott, ou=<client-ID>, ou=<vendor-ID>, ou=CertificateModify, ou=CA1, ou=CAs, o=IMC, c=US
Attribute type userCertificate
Attribute value The John Prescott Current Certificate in file certs1/john_prescott_current
Expected results The value of the userCertificate attribute should be changed as above.

3.3.12 LDAP Extension Tests

3.3.12.1 Paged Results

3.3.12.1.1 Page completely through a set.

Purpose Page completely through a multi-page set of results.
Reference [PAGING] (paragraphs 2, 3, 4)
Procedure Make a search request asking for paged results with a page size of 3.
After initial response, request the next page.
Base ou=Corporate, ou=ExtendedSearch, o=IMC, c=US
Base (dc-naming) dc=Corporate, dc=ExtendedSearch, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter employeenumber<=91100105
Expected results Initial request results in three entries plus an indication of 5 total entries in the search result.
Second request results in a further two entries plus an indication that there are no more entries.

3.3.12.1.2 Abort paging part-way through a set.

Purpose Abort paging part-way through a multi-page set of results.
Reference [PAGING] (paragraphs 2, 3)
Procedure Make a search request asking for paged results with a page size of 3.
After initial response, request the next page.
After second page displayed, abort the search. Then make a new search with a different filter.
Base ou=Corporate, ou=ExtendedSearch, o=IMC, c=US
Base (dc-naming) dc=Corporate, dc=ExtendedSearch, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter for First Request givenname=Adam
Filter for Second Request givenname=Adrian
Expected results Initial request results in three entries plus an indication of 26 total entries in the search result.
Second request results in a further three entries plus an indication that there are more entries.
Third request indicates that there are no matching entries.

3.3.12.2 Server-Side Sorting

3.3.12.2.1 Sort on Single Numeric Attribute

Purpose Sort a set of results on a single numeric attribute.
Reference [SORTING] (paragraphs 3, 4)
Procedure Make a search request asking for sorted results.
Base ou=Corporate, ou=ExtendedSearch, o=IMC, c=US
Base (dc-naming) dc=Corporate, dc=ExtendedSearch, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter employeenumber<=91100105
Sort Key employeenumber
Expected results Five entries are displayed in order of employee number (and reverse alphabetical order of name).

3.3.12.2.2 Sort on Single Alphabetic Attribute

Purpose Sort a set of results on a single alphabetic attribute.
Reference [SORTING] (paragraphs 3, 4)
Procedure Make a search request asking for sorted results.
Base ou=Corporate, ou=ExtendedSearch, o=IMC, c=US
Base (dc-naming) dc=Corporate, dc=ExtendedSearch, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter employeenumber<=91100105
Sort Key givenname
Expected results Five entries are displayed in alphabetical order of name.

3.3.12.2.3 Sort on Multiple Attributes

Purpose Sort a set of results on multiple attributes.
Reference [SORTING] (paragraphs 3, 4)
Procedure Make a search request asking for sorted results using two sort keys.
Base ou=Corporate, ou=ExtendedSearch, o=IMC, c=US
Base (dc-naming) dc=Corporate, dc=ExtendedSearch, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (&(employeenumber>=91100125)(employeenumber<=91100128))
First Sort Key sn
Second Sort Key employeenumber
Expected results Four entries are displayed in order Zoe York, Yuri York, Belinda Zions, Adam Zions.

3.3.12.2.4 Sort in reverse order

Purpose Sort in reverse order.
Reference [SORTING] (paragraphs 3, 4)
Procedure Make a search request asking for sorted results in reverse order.
Base ou=Corporate, ou=ExtendedSearch, o=IMC, c=US
Base (dc-naming) dc=Corporate, dc=ExtendedSearch, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter employeenumber<=91100105
Sort Key employeenumber
Expected results Five entries are displayed in alphabetical order of name (but reverse order of employee number).

3.3.12.3 Feature Interactions with Paged and Sorted Results

3.3.12.3.1 Page a Sorted Set.

Purpose Test that a Paged, Sorted Set is in Correct Order.
Reference [PAGING] (paragraphs 2, 3) [SORTING] (paragraphs 3, 4, 5)
Procedure Make a search request asking for results to be sorted and paged with a page size of 3.
Page through the results.
Base ou=Corporate, ou=ExtendedSearch, o=IMC, c=US
Base (dc-naming) dc=Corporate, dc=ExtendedSearch, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter for First Request givenname=Adam
Sort Key employeenumber
Expected results Results are displayed in order of employee number (which is inverse alphabetical order) consistently across all pages, not just within each page.

3.3.12.4 Scrolling View Browsing of Search Results

3.3.12.4.1 Scroll Completely Through Large Set of Results

Purpose Scroll Completely Through Large Set of results.
Reference [SORTING] (paragraphs 3, 4), [VLV] (paragraph 5)
Procedure Make a search request asking for sorted results in reverse order. When first page of results is displayed, drag the scroll bar slider down to the bottom of its range.
Base ou=Corporate, ou=ExtendedSearch, o=IMC, c=US
Base (dc-naming) dc=Corporate, dc=ExtendedSearch, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter employeenumber>=0
Sort Key employeenumber
Expected results The first page (starting with Adam Adams) is displayed initially. When the slider is dragged down, the last page (ending with Zoe Zions) is displayed.

3.3.12.4.2 Scroll Incrementally through Set of Results

Purpose Scroll incrementally through set of results.
Reference [SORTING] (paragraphs 3, 4), [VLV] (paragraph 5)
Procedure Make a search request asking for sorted results in reverse order. When the first page of results is displayed, click on scroll bar just below slider. When a new page is displayed, click on scroll bar just above slider.
Base ou=Corporate, ou=ExtendedSearch, o=IMC, c=US
Base (dc-naming) dc=Corporate, dc=ExtendedSearch, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter employeenumber>=0
Sort Key employeenumber
Expected results The first page (starting with Adam Adams) is displayed initially. When the scroll bar is clicked below the slider, the next page is displayed. When the scroll bar is then clicked above the slider, the first page is displayed again.

3.3.12.4.3 Scroll Part Way Through Large Set of Results

Purpose Scroll Part Way Through Large Set of results.
Reference [SORTING] (paragraphs 3, 4), [VLV] (paragraph 5)
Procedure Make a search request asking for sorted results in reverse order. When first page of results is displayed, drag the scroll bar about half way down its range.
Base ou=Corporate, ou=ExtendedSearch, o=IMC, c=US
Base (dc-naming) dc=Corporate, dc=ExtendedSearch, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter employeenumber>=0
Sort Key employeenumber
Expected results The first page (starting with Adam Adams) is displayed initially. When the slider is dragged down, a page about half way through (employees with surnames starting with M, N or similar) is displayed.

3.3.12.4.4 Go to Arbitrary Place in Large Set of Results

Purpose Go to Arbitrary Place in Large Set of results.
Reference [SORTING] (paragraphs 3, 4), [VLV] (paragraph 5)
Procedure Make a search request asking for sorted results in reverse order. When first page of results is displayed, type "91100533".
Base ou=Corporate, ou=ExtendedSearch, o=IMC, c=US
Base (dc-naming) dc=Corporate, dc=ExtendedSearch, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter employeenumber>=0
Sort Key employeenumber
Expected results The first page (starting with Adam Adams) is displayed initially. After typing the number, the page of results starting with "Jacky Jones" is displayed.

3.3.12.5 Language Tags

3.3.12.5.1 Search for Language Tagged Attributes.

Purpose Search for entries with attributes having particular language tags.
Reference [RFC 2596] (paragraph 3.3)
Procedure Make a search request.
Base ou=Languages, ou=ExtendedSearch, o=IMC, c=US
Base (dc-naming) dc=Languages, dc=ExtendedSearch, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter title;lang-en-us=President
Expected results The entries for George Washington, Thomas Jefferson and Abraham Lincoln are returned.

3.3.12.5.2 Check Attribute Subtype Matching.

Purpose Search for entries with attributes that are subtypes of a tagged type.
Reference [RFC 2596] (paragraph 3.3)
Procedure Make a search request.
Base ou=Languages, ou=ExtendedSearch, o=IMC, c=US
Base (dc-naming) dc=Languages, dc=ExtendedSearch, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter name;lang-fr=*
Expected results The entries for Marie Antoinette and Thomas Jefferson are returned.

3.3.12.5.3 Search Without Specifying Language Tags.

Purpose Search entries whose attributes have language tags without specifying language tags in the search request.
Reference [RFC 2596] (paragraph 3.3)
Procedure Make a search request.
Base ou=Languages, ou=ExtendedSearch, o=IMC, c=US
Base (dc-naming) dc=Languages, dc=ExtendedSearch, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter Title=Queen
Expected results The entry for Marie Antoinette is returned.

3.3.12.5.4 Comparison with TRUE Return Code

Purpose Verify return of TRUE return code for Compare request including a language tag.
Reference [RFC 2596] (paragraph 3.4)
Procedure Send a Compare request to a server constructed using the information shown below.
DN cn=William Pitt, ou=Languages, ou=ExtendedSearch, o=IMC, c=US
Attribute type title
Attribute value lang-en-gb;Prime Minister
Expected results Result code 6 (compareTrue) should be returned.

3.3.12.5.5 Comparison with noSuchAttribute Return Code

Purpose Verify that server generates a noSuchAttribute error message for Compare request that includes a language tag not present in an entry.
Reference [RFC 2596] (paragraph 3.4)
Procedure Send a Compare request to a server constructed using the information shown below.
DN cn=William Pitt, ou=Languages, ou=ExtendedSearch, o=IMC, c=US
Attribute type title
Attribute value lang-en;Prime Minister
Expected results Result code 16 (noSuchAttribute) should be returned.

3.3.12.5.6 Search for Tagged Attribute Types

Purpose Verify appropriate behavior when the list of attributes to be retrieved for an entry includes an attribute with language tags.
Reference [RFC 2596] (paragraph 3.5)
Procedure Submit a Search request with a search filter, base, scope, and attributes list as indicated below.
Base ou=Languages, ou=ExtendedSearch, o=IMC, c=US
Base (dc-naming) dc=Languages, dc=ExtendedSearch, dc=Relative, dc=IMC, dc=org
Scope subtree
Attributes cn;lang-en-gb, cn;lang-en-us
Filter employeenumber<=91101102
Expected results The entries for George Washington and Marie Antoinette should be returned with attributes cn;lang-en-us: George Washington, cn;lang-en-GB: George Washington and cn;lang-en: Marie Antionette.

3.3.12.5.7 Add and Modify Entries

To perform the tests in paragraph 3.3.12.5.7, you must authenticate as:

dn: cn=Directory Manager, o=IMC, c=US

with password: controller

There are two parameters in all of the DNs found in paragraph 3.3.12.5.7; definitions for these parameters are as follows:

<vendor-ID>
the vendor ID allocated to you during the testing event; "Vendor1", "Vendor2", etc.
<client-ID>
a sequence of IDs assigned by you to each client you plan on testing; "Client1", "Client2", …, "Client10" if you have more than 10 clients you wish to test, please notify the event planners so that they can make appropriate modifications to the LDIF file that will be used during the testing event.

You should replace the bracketed place holder for these parameters in all DNs found in this paragraph prior to performing the tests.

3.3.12.5.7.1 Add Entry with Language Tags

Purpose Verify capability to add a new entry to the directory with attributes that have language tags.
Reference [RFC 2596] (paragraph 3.6)
Procedure Add an entire new directory entry using the information below.
DN cn=Florence Nightingale, ou=<client-ID>, ou=<vendor-ID>, ou=ExtendedAdd, o=IMC, c=US
Attribute type objectclass
Attribute values top person organizationalPerson inetOrgPerson
Attribute type sn
Attribute value Nightingale
Attribute type cn
Attribute value Florence Nightingale
Attribute type telephoneNumber
Attribute value + 44 171 999 1854
Attribute type mail
Attribute value florence@nhs.gov.uk
Attribute type description;lang-en
Attribute value The lady with the lamp
Attribute type description;lang-fr
Attribute value La femme au lumiere
Expected results A new entry should now be present in the directory with the above attributes.

3.3.12.5.7.2 Modify Entry with Language Tags

Purpose Verify that a single-valued attribute with language tags can be replaced.
Procedure Replace an attribute value for an attribute type using a Modify request.
Reference [RFC 2251] (paragraph 4.6, pp. 32-33) [RFC 2596] (paragraph 3.7)
DN cn=Tony Blair, ou=<client-ID>, ou=<vendor-ID>, ou=ExtendedModify, o=IMC, c=US
Attribute type title;lang-en-gb
Attribute value First Minister
Expected results The value of the title;lang-en-gb attribute (but not the title;lang-en-us attribute) should be changed as above.

3.3.13 Schema-Related Tests

To be completed, but to be based on some or all of the following:

3.3.13.1 Schema Access tests.

3.3.13.1.1 subSchemaSubEntry attribute in root DSE.

Purpose Verify that the subSchemaSubEntry is present in the root DSE.
Reference [RFC 2251] (paragraph 3.4)
Procedure Make a search request.
Base zero length DN ""
Scope base
Filter (objectclass=*)
Requested Attributes subschemasubentry
Expected results The attribute subschemasubentry is returned for the root DSE Entry.

3.3.13.1.2 subSchemaSubEntry attribute in any entry.

Purpose Verify that the subSchemaSubEntry is present in any entry of the Directory.
Reference [RFC 2251] (paragraph 3.2.1)
Procedure Make a search request.
Base ou=Search, o=IMC, c=us
Base (dc-naming) dc=Search, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter (cn=margaret*)
Requested Attributes subschemasubentry
Expected results 2 entries are returned with only the attribute subschemasubentry.

3.3.13.1.3 Schema publication.

Purpose Verify that the schema is accessible via LDAP.
Reference [RFC 2251] (paragraph 3.2.2)
Procedure Make a search request on root DSE to get the attribute subSchemaSubEntry. Then make a base search request with the value of subSchemaSubEntry.
Base zero length DN ""
Scope base
Filter (objectclass=*)
Requested Attributes subschemasubentry
Expected results The root DSE is returned with only the attribute subschemasubentry.
Second Search
Base The value of the subschemasubentry attribute
Scope base
Filter (objectclass=subschema)
Requested Attributes objectclasses, attributetypes
Expected results the schema entry is returned with the 2 requested attributes. Each attribute contains several values.

3.3.13.2 Schema Modification tests.

To perform the tests in paragraph 3.3.13.2, you must authenticate as:

dn: cn=Directory Manager, o=IMC, c=US

with password: controller

Note that these tests cannot be performed by several clients at the same time because the schema is in one unique entry.

3.3.13.2.1 Adding an Object class.

Purpose Verify that an objectclass can be added in the schema.
Reference [RFC 2251] (paragraph TBD)
Procedure Add an attribute value to the attribute "objectclasses" (using the modify-add operation).
DN The schema DN is read in the root DSE (attribute subschemasubentry)
Attribute type objectclasses
Attribute Value ( 1.1.1.1.1.1111 NAME 'IMCTestObject' DESC 'Useless ObjectClass for testing' SUP 'top' MUST ( cn $ telephoneNumber ) MAY ( description $ seeAlso ) )
Requested Attributes subschemasubentry
Expected results The schema entry should have one more "objectclasses" attribute value containing the above value.

3.3.13.2.2 Removing an Object class.

Purpose Verify that an objectclass can be deleted from the schema.
Reference [RFC 2251] (paragraph TBD)
Procedure Delete an attribute value to the attribute "objectclasses" (using the modify-delete operation).This test must be run just after test 3.3.13.2.1
DN The schema DN is read in the root DSE (attribute subschemasubentry)
Attribute type objectclasses
Attribute Value ( 1.1.1.1.1.1111 NAME 'IMCTestObject' DESC 'Useless ObjectClass for testing' SUP 'top' MUST ( cn $ telephoneNumber ) MAY ( description $ seeAlso ) )
Expected results The schema entry should not have the "objectclasses" attribute value for IMCTestObject.

3.3.13.2.3 Adding an Attribute definition in the schema.

Purpose Verify that an attribute definition can be added in the schema.
Reference [RFC 2251] (paragraph TBD)
Procedure Add an attribute value to the attribute "attributetypes" (using the modify-add operation).
DN The schema DN is read in the root DSE (attribute subschemasubentry)
Attribute type attributetypes
Attribute Value ( 1.1.1.1.1.1111 NAME 'IMCTestAttr' DESC 'Useless attribute type for testing' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
Requested Attributes subschemasubentry
Expected results The schema entry should have one more "attributetypes" attribute value containing the above value.

3.3.13.2.4 Removing an Attribute definition from the schema.

Purpose Verify that an attribute definition can be deleted from the schema.
Reference [RFC 2251] (paragraph TBD)
Procedure Delete an attribute value to the attribute "attributetypes" (using the modify-delete operation).This test must be run just after test 3.3.13.2.3
DN The schema DN is read in the root DSE (attribute subschemasubentry)
Attribute type attributetypes
Attribute Value ( 1.1.1.1.1.1111 NAME 'IMCTestAttr' DESC 'Useless attribute type for testing' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
Expected results The schema entry should not have the "attributetypes" attribute value for IMCTestAttr.

3.3.14 Referral Tests

3.3.14.1 Superior Reference

Note that RFC 2251 does not actually require the server to return a referral in this case, and that the referral returned (if one is returned at all) will be configuration-dependant). 

Purpose Test return of superior reference referral.
Reference [RFC 2251] (paragraphs 4.1.11, 4.5.3.1)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base o=IMC, c=US
Base (dc-naming) dc=IMC, dc=org
Scope subtree
Filter ou=Server<n>
Expected results A referral to another server should be returned.
 

3.3.14.2 Subordinate Reference

Note that RFC 2251 does not actually require the server to return a referral in this case, and that the referral returned (if one is returned at all) will be configuration-dependant). 

Purpose Test return of subordinate reference referral.
Reference [RFC 2251] (paragraphs 4.1.11, 4.5.3.1)
Procedure Submit a Search request with a search filter, base, and scope as indicated below.
Base ou=Referrals, o=IMC, c=US
Base (dc-naming) dc=Referrals, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter ou=Server<n>
Expected results A referral to another server should be returned.
 

3.3.14.3 Named Referral

3.3.14.3.1 Base Contains Ref Attribute

Purpose Test return of referral for search operation where the base contains a ref attribute.
Reference [NAMEDREF] (paragraph 5.1.1.2, case 2)
Procedure Submit a Search request with a search filter, base, and scope as indicated below, when bound to a server other than server<n>.
Base ou=Server<n>, ou=Servers, o=IMC, c=US
Base (dc-naming) dc=Server<n>, dc=Servers, dc=Relative, dc=IMC, dc=org
Scope base/single-level/subtree
Filter ou=Server<n>
Expected results The following referral should be returned:
   ldap://server<n>.dc.opengroup.org/ou=Server<n>, ou=Servers, o=IMC, c=US (x.500 naming) or
   ldap://server<n>.dc.opengroup.org/dc=Server<n>, dc=Servers, dc=Relative, dc=IMC, dc=org (dc naming)

3.3.14.3.2 Target Contains Ref Attribute

Purpose Test return of referral for modify operation where the target contains a ref attribute.
Reference [NAMEDREF] (paragraph 5.1.1.2, case 2)
Procedure Attempt to add an attribute value, when bound to a server other than server<n>.
DN (X.500 naming) ou=Server<n>, ou=Servers, o=IMC, c=US
DN (dc naming) dc=Server<n>, dc=Servers, dc=Relative, dc=IMC, dc=org
Attribute type telephoneNumber
Attribute value +33 1 234 5678
Expected results The following referral should be returned:
   ldap://server<n>.dc.opengroup.org/ (x.500 naming) or
   ldap://server<n>.dc.opengroup.org/ (dc naming)

3.3.14.3.3 Base Subordinate to Entry that Contains Ref Attribute

Purpose Test return of referral for search operation where the base is subordinate to an entry that contains a ref attribute.
Reference [NAMEDREF] (paragraph 5.1.1.2, case 3)
Procedure Submit a Search request with a search filter, base, and scope as indicated below, when bound to a server other than server<n>.
Base cn=John Humphries, ou=Server<n>, ou=Servers, o=IMC, c=US
Base (dc-naming) cn=John Humphries, dc=Server<n>, dc=Servers, dc=Relative, dc=IMC, dc=org
Scope base
Filter telephoneNumber=*
Expected results The following referral should be returned:
   ldap://server<n>.dc.opengroup.org/ou=Server<n>, ou=Servers, o=IMC, c=US (x.500 naming) or
   ldap://server<n>.dc.opengroup.org/dc=Server<n>, dc=Servers, dc=Relative, dc=IMC, dc=org (dc naming)

3.3.14.3.4 Target Subordinate to Entry that Contains Ref Attribute

Purpose Test return of referral for modify operation where the target contains a ref attribute.
Reference [NAMEDREF] (paragraph 5.1.1.2, case 3)
Procedure Attempt to add an attribute value, when bound to a server other than server<n>.
DN (X.500 naming) cn=John Humphries, ou=Server<n>, ou=Servers, o=IMC, c=US
DN (dc naming) cn=John Humphries, dc=Server<n>, dc=Servers, dc=Relative, dc=IMC, dc=org
Attribute type facsimileTelephoneNumber
Attribute value +44 181 432 2000
Expected results The following referral should be returned:
   ldap://server<n>.dc.opengroup.org/ (x.500 naming) or
   ldap://server<n>.dc.opengroup.org/ (dc naming)

3.3.14.3.5 Single-Level Search

Purpose Test return of referral for single-level search operation where an entry that contains a ref attribute is found.
Reference [NAMEDREF] (paragraph 5.1.1.3)
Procedure Submit a Search request with a search filter, base, and scope as indicated below, when bound to a server other than server<n>.
Base ou=Servers, o=IMC, c=US
Base (dc-naming) dc=Servers, dc=Relative, dc=IMC, dc=org
Scope single-level
Filter (X.500 naming) ou=Server<n>
Filter (dc naming) dc=Server<n>
Expected results The following referral should be returned:
   ldap://server<n>.dc.opengroup.org/ou=Server<n>,ou=Servers,o=IMC,c=US??base (x.500 naming) or
   ldap://server<n>.dc.opengroup.org/dc=Server<n>, dc=Servers,dc=Relative,dc=IMC,dc=org??base (dc naming)

3.3.14.3.6 Subtree Search

Purpose Test return of referral for subtree search operation where an entry that contains a ref attribute is found.
Reference [NAMEDREF] (paragraph 5.1.1.4)
Procedure Submit a Search request with a search filter, base, and scope as indicated below, when bound to a server other than server<n>.
Base ou=Servers, o=IMC, c=US
Base (dc-naming) dc=Servers, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter  cn=John Humphries
Expected results The following continuation references should be returned:
   ldap://server<n>.dc.opengroup.org/ou=Server<n>,ou=Servers,o=IMC,c=US (x.500 naming) or
   ldap://server<n>.dc.opengroup.org/dc=Server<n>, dc=Servers,dc=Relative,dc=IMC,dc=org (dc naming)

There should be 19 continuation references returned: <n>=1, . . 20, except the value of <n> for the server to which the client is bound.

3.3.15 Transport Security

The tests in this section are designed to be performed with multiple certificate generation products. Their descriptions refer to "CA1" and "CA2", but if other sets of certificates as described in CATS are available, then these could be substituted. See the description in 3.3.11.

Each participating server is allocated a unique number <n>. Server <n> should use the Server<n> certificate generated by CA1 (in file certs1/ serv<n>) to secure TLS connections.

Clients that can validate server certificates should be set up to accept certificates that can be validated by the CA1 root certificate (which is in file certs1/ca_root).

The servers should be set up as follows:

3.3.15.1 START TLS

For the tests in this section, clients should use the START TLS mechanism.

3.3.15.1.1 Anonymous Bind over TLS

Purpose Test TLS-protected simple anonymous bind.
Reference [RFC 2829] (paragraph 5.2), [RFC 2830] (paragraph 2.1) [RFC 2251] (paragraph 4.2)
Procedure Configure client to use TLS. Issue an LDAP anonymous BIND request.
Expected results The test is successful if the LDAP connection can be established without errors. Search requests should now be accepted and processed by the server..

3.3.15.1.2 Bind With Password Exchange over TLS

Purpose Test authenticated TLS-protected simple bind with correct credentials.
Reference [RFC 2829] (paragraph 6.2), [RFC 2830] (paragraph 2.1) [RFC 2251] (paragraph 4.2)
Procedure Configure client to use TLS. Test authenticated Bind as 'Henri Matisse' with a correct password ('Henri001').
DN cn=Henri Matisse, ou=Security, o=IMC, c=US
Password Henri001
Expected results The test is successful if the Bind is successful. Search requests should now be accepted and processed by the server.

3.3.15.1.3 TLS with Certificates

3.3.15.1.3.1 TLS Bind with Valid Certificate

Purpose Test TLS Certificate bind with valid certificate.
Reference [RFC 2829] (paragraph 7.1), [RFC 2830] (paragraph 2.1), [RFC 2251] (paragraph 4.2)
Procedure Configure client to use TLS with Certificate authentication. Load certificate generated by product with id CA1 for Pablo Picasso (file certs1/pablo_picasso). Configure server to use the CA1 Root Certificate (file certs1/ca_root) to authenticate clients binding as users with entries in the ou=CA1, ou=CAs, o=IMC, c=US subtree of the DIT.

Test authenticated Bind as user with DN below.

DN cn=Pablo Picasso, ou=TLS, ou=CA1, ou=CAs, o=IMC, c=US
Expected results The test is successful if the Bind is successful. Search requests should now be accepted and processed by the server.

3.3.15.1.3.2 TLS Bind with Expired Certificate

Purpose Test TLS Certificate bind with expired certificate.
Reference [RFC 2829] (paragraph 7.1), [RFC 2830] (paragraph 2.1), [RFC 2251] (paragraph 4.2)
Procedure Configure client to use TLS with Certificate authentication. Load certificate generated by product with id CA1 for John Constable (file certs1/john_constable). Configure server to use the CA1 Root Certificate (file certs1/ca_root) to authenticate clients binding as users with entries in the ou=CA1, ou=CAs, o=IMC, c=US subtree of the DIT.

Test authenticated Bind as user with DN below.

DN cn=John Constable, ou=TLS, ou=CA1, ou=CAs, o=IMC, c=US
Expected results Result code 49 (invalidCredentials) should be returned. The Bind should fail. The server may not accept and process requests; if they are accepted, they should be treated as anonymous requests.

3.3.15.1.3.3 TLS Bind with Certificate Validated via Non-Trivial Path

Purpose Test TLS Certificate bind with an end-user certificate that must be validated by a root certificate generated by a product other than that used to generate the end-user certificate.
Reference [RFC 2829] (paragraph 7.1), [RFC 2830] (paragraph 2.1), [RFC 2251] (paragraph 4.2)
Procedure Configure client to use TLS with Certificate authentication. Load certificate generated by product with id CA2 for William CA2 Turner in the CA1 branch of the DIT (file certs2/william_ca1_turner). Configure server to use the CA1 Root Certificate (file certs1/ca_root) to authenticate clients binding as users with entries in the ou=CA1, ou=CAs, o=IMC, c=US subtree of the DIT.

Test authenticated Bind as user with DN below.

DN cn=William CA2 Turner, ou=TLS, ou=CA1, ou=CAs, o=IMC, c=US
Expected results The test is successful if the Bind is successful. Search requests should now be accepted and processed by the server.

3.3.15.1.3.4 TLS Bind with Revoked Certificate in Validation Path

(NB - this test will not work with currently supplied CRLs.)

Purpose Test TLS Certificate bind when there is a revoked certificate in the certification path.
Reference [RFC 2829] (paragraph 7.1), [RFC 2830] (paragraph 2.1), [RFC 2251] (paragraph 4.2)
Procedure Configure client to use TLS with Certificate authentication. Load certificate generated by product with id CA2 for Georges CA2 Braque in the CA1 branch of the DIT  (in file certs2/georges_ca1_braque). Configure server to use the CA1 Root Certificate (file certs1/ca_root) to authenticate clients binding as users with entries in the ou=CA1, ou=CAs, o=IMC, c=US subtree of the DIT.

Test authenticated Bind as user with DN below.

DN cn=Georges CA2 Braque, ou=TLS, ou=CA1, ou=CAs, o=IMC, c=US
Expected results Result code 49 (invalidCredentials) should be returned. The Bind should fail. The server may not accept and process requests; if they are accepted, they should be treated as anonymous requests.

3.3.15.1.4 Bind with Incorrect Credentials over TLS

Purpose Test authenticated TLS-protected simple bind with incorrect credentials.
Reference [RFC 2829] (paragraph 6.2), [RFC 2830] (paragraph 2.1), [RFC 2251] (paragraphs 4.1.10, 4.2)
Procedure Configure client to use TLS. Test authenticated Bind as 'Henri Matisse' with incorrect password ('Henri111').
DN cn=Henri Matisse, ou=Security, o=IMC, c=US
Password Henri111
Expected results Result code 49 (invalidCredentials) should be returned. The Bind should fail. The server may not accept and process requests; if they are accepted, they should be treated as anonymous requests.

3.3.15.1.5 Bind With Insufficiently Strong Authentication

Purpose Test bind without using TLS when TLS is required.
Reference [RFC 2251] (paragraphs 4.1.10, 4.2.3)
Procedure Configure client to not use TLS. Test simple authenticated Bind as 'Henri Matisse' with a correct password ('Henri001').
DN cn=Henri Matisse, ou=Security, o=IMC, c=US
Password Henri001
Expected results Result code 8 (strongAuthRequired) should be returned. The Bind should fail. The server may not accept and process requests; if they are accepted, they should be treated as anonymous requests.

3.3.15.1.6 Abort TLS Session

Purpose Test abrubt closure of TLS connection.
Reference [RFC 2829] (paragraph 6.2), [RFC 2830] (paragraphs 2.1 and 4.2) [RFC 2251] (paragraph 4.2)
Procedure Configure client to use TLS and establish connection. Make any search request and await results. Take some action that will close the underlying TCP connection. Then make it possible for the TCP connection to be re-established. Make the same search request again.
Expected results The test is successful if the second search request is rejected with an indication that the service is not available or if the client is required to re-establish credentials.

3.3.15.2 Port 636

For the tests in this section, clients should use the "Port 636" mechanism. (This mechanism is not described in the standards and is expected to be phased out eventually.) Servers should be configured to use LDAP over TLS (or SSL) on connections to port 636.

3.3.15.2.1 Anonymous Bind over TLS

Purpose Test TLS-protected simple anonymous bind.
Reference [RFC 2829] (paragraph 5.2),  [RFC 2251] (paragraph 4.2)
Procedure Configure client to use TLS. Connect to server using port 636, and issue an LDAP anonymous BIND request.
Expected results The test is successful if the LDAP connection can be established without errors. Search requests should now be accepted and processed by the server..

3.3.15.2.2 Bind With Password Exchange over TLS

Purpose Test authenticated TLS-protected simple bind with correct credentials.
Reference [RFC 2829] (paragraph 6.2), [RFC 2251] (paragraph 4.2)
Procedure Configure client to use TLS. Connect to server using port 636, and test authenticated Bind as 'Henri Matisse' with a correct password ('Henri001').
DN cn=Henri Matisse, ou=Security, o=IMC, c=US
Password Henri001
Expected results The test is successful if the Bind is successful. Search requests should now be accepted and processed by the server.

3.3.15.2.3 TLS with Certificates

3.3.15.2.3.1 TLS Bind with Valid Certificate

Purpose Test TLS Certificate bind with valid certificate.
Reference [RFC 2829] (paragraph 9.1), [RFC 2251] (paragraph 4.2)
Procedure Configure client to use TLS with Certificate authentication. Load certificate generated by product with id CA1 for Pablo Picasso (file certs1/pablo_picasso). Configure server to use the CA1 Root Certificate (file certs1/ca_root) to authenticate clients binding as users with entries in the ou=CA1, ou=CAs, o=IMC, c=US subtree of the DIT.

Connect to server using port 636, and test authenticated Bind as user with DN below.

DN cn=Pablo Picasso, ou=TLS, ou=CA1, ou=CAs, o=IMC, c=US
Expected results The test is successful if the Bind is successful. Search requests should now be accepted and processed by the server.

3.3.15.2.3.2 TLS Bind with Expired Certificate

Purpose Test TLS Certificate bind with expired certificate.
Reference [RFC 2829] (paragraph 7.1), [RFC 2251] (paragraph 4.2)
Procedure Configure client to use TLS with Certificate authentication. Load certificate generated by product with id CA1 for John Constable (file certs1/john_constable). Configure server to use the CA1 Root Certificate (file certs1/ca_root) to authenticate clients binding as users with entries in the ou=CA1, ou=CAs, o=IMC, c=US subtree of the DIT.

Connect to server using port 636, and test authenticated Bind as user with DN below.

DN cn=John Constable, ou=TLS, ou=CA1, ou=CAs, o=IMC, c=US
Expected results Result code 49 (invalidCredentials) should be returned. The Bind should fail. The server may not accept and process requests; if they are accepted, they should be treated as anonymous requests.

3.3.15.2.3.3 TLS Bind with Certificate Validated via Non-Trivial Path

Purpose Test TLS Certificate bind with an end-user certificate that must be validated by a root certificate generated by a product other than that used to generate the end-user certificate.
Reference [RFC 2829] (paragraph 7.1), [RFC 2251] (paragraph 4.2)
Procedure Configure client to use TLS with Certificate authentication. Load certificate generated by product with id CA2 for William CA2 Turner in the CA1 branch of the DIT (file certs2/william_ca1_turner). Configure server to use the CA1 Root Certificate (file certs1/ca_root) to authenticate clients binding as users with entries in the ou=CA1, ou=CAs, o=IMC, c=US subtree of the DIT.

Connect to server using port 636, and test authenticated Bind as user with DN below.

DN cn=William CA2 Turner, ou=TLS, ou=CA1, ou=CAs, o=IMC, c=US
Expected results The test is successful if the Bind is successful. Search requests should now be accepted and processed by the server.

3.3.15.2.3.4 TLS Bind with Revoked Certificate in Validation Path

(NB. This test will not work with currently-supplied CRLs).

Purpose Test TLS Certificate bind when there is a revoked certificate in the certification path.
Reference [RFC 2829] (paragraph 7.1), [RFC 2251] (paragraph 4.2)
Procedure Configure client to use TLS with Certificate authentication. Load certificate generated by product with id CA2 for Georges CA2 Braque in the CA1 branch of the DIT  (in file certs2/georges_ca1_braque). Configure server to use the CA1 Root Certificate (file certs1/ca_root) to authenticate clients binding as users with entries in the ou=CA1, ou=CAs, o=IMC, c=US subtree of the DIT.

Connect to server using port 636, and test authenticated Bind as user with DN below.

DN cn=Georges CA2 Braque, ou=TLS, ou=CA1, ou=CAs, o=IMC, c=US
Expected results Result code 49 (invalidCredentials) should be returned. The Bind should fail. The server may not accept and process requests; if they are accepted, they should be treated as anonymous requests.

3.3.15.2.4 Bind with Incorrect Credentials over TLS

Purpose Test authenticated TLS-protected simple bind with incorrect credentials.
Reference [RFC 2829] (paragraph 6.2),  [RFC 2251] (paragraphs 4.1.10, 4.2)
Procedure Configure client to use TLS. Connect to server using port 636, and test authenticated Bind as 'Henri Matisse' with incorrect password ('Henri111').
DN cn=Henri Matisse, ou=Security, o=IMC, c=US
Password Henri111
Expected results Result code 49 (invalidCredentials) should be returned. The Bind should fail. The server may not accept and process requests; if they are accepted, they should be treated as anonymous requests.

3.3.15.2.5 Bind With Insufficiently Strong Authentication

Purpose Test bind without using TLS when TLS is required.
Reference [RFC 2251] (paragraphs 4.1.10, 4.2.3)
Procedure Configure client to not use TLS. Connect to server using normal LDAP port, and test simple authenticated Bind as 'Henri Matisse' with a correct password ('Henri001').
DN cn=Henri Matisse, ou=Security, o=IMC, c=US
Password Henri001
Expected results Result code 8 (strongAuthRequired) should be returned. The Bind should fail. The server may not accept and process requests; if they are accepted, they should be treated as anonymous requests.

3.3.15.2.6 Abort TLS Session

Purpose Test abrupt closure of TLS connection.
Reference [RFC 2251] (paragraph 4.2)
Procedure Configure client to use TLS and establish connection. Make any search request and await results. Take some action that will close the underlying TCP connection. Then make it possible for the TCP connection to be re-established. Make the same search request again.
Expected results The test is successful if the second search request is rejected with an indication that the service is not available or if the client is required to re-establish credentials.

3.3.16 Server Location

The tests in this section are designed to be performed in conjunction with DNS servers that implement SRV records. Each server participating in the tests is assigned a server identity server1, server2, . . through server 20. There is a specific LDIF file for each server, which should be loaded by that server prior to testing. Since the SRV record format assumes dc-naming (see [SRV] paragraph 2), these LDIF files are provided in dc format and dc-relative format only.

The tests pre-suppose that there is a DNS available that contains the following SRV records (<n>=1,  .  .  20).

_ldap_tcp.server<n>.Servers.Relative.imc.org. IN SRV 0 0 389 server<n>.dc.opengroup.org. 

3.3.16.1 Locate Server

Purpose Bind Anonymously to an LDAP server which is located by looking up SRV records in the DNS.
Reference [RFC 2251] (paragraph 4.2, pp. 20-23), [SRV] (paragraphs 3, 4).
Procedure Request to bind anonymously to the server for the DN given below. On successful bind, submit a Search request with a filter, base, and scope as indicated below.
DN (dc naming) dc=Server<n>, dc=Servers, dc=Relative, dc=imc, dc=org
Base (dc-naming) dc=Servers, dc=Relative, dc=IMC, dc=org
Scope subtree
Filter cn=John Humphreys
Requested Attributes telephonenumber
Expected Results The test is successful if the LDAP connection to server n is established without errors, and if the search request returns a telephone number that ends with <n>. Eg. the telephone number returned by server 3 will be +44 181 432103.

3.4 Other Potential Testing Areas

4. Application-Specific Tests

To be added.

5. Acknowledgments

The EuroSInet Consortium gave the IMC permission to use their test suite during the DirConnect 1 event; their test suite document was instrumental in prompting DirConnect 1 participants to verify that their implementations could support search, retrieval, and update functions as well as international character sets. The test entries that accompanied the EuroSInet test suite inspired the creation of some of the entries in this document.

The participants of DirConnect 1 deserve much thanks for pointing out deficiencies in the test suite documentation and LDIF file prepared for that event. Their comments and suggestions for improvement were incorporated into this document. (I'll list the ames of the participants if I can find them; I think they're on the IMC web site).

6. Authors' Addresses

Chris Apple, Room 2F-165
AT&T Laboratories
600 Mountain Ave.
Murray Hill, NJ 07974-0636
USA

E-Mail: capple@att.com
Voice: +1 908 582 2409
FAX: +1 908 582 3296

Chris Harding
The Open Group
Apex Plaza
Forbury Road
Reading, Berks. RG1 1AX
UK

E-Mail: c.harding@opengroup.org
Voice: +44 118 9508311 X 2262
FAX: +44 118 9500110

Ludovic Poitou
Sun Microsystems
32 chemin du vieux chene
3240 MEYLAN
FRANCE

E-Mail: ludovic.poitou@france.sun.com
Voice: +33 476 414 212
FAX: +33 476 414 241

7. Bibliography

  1. M. Smith, "Definition of the inetOrgPerson Object Class", (work-in-progress) INTERNET-DRAFT http://www.ietf.org/internet-drafts/draft-ietf-asid-inetorgperson-01.txt , July 1997.

  2. C. Weider, A. Herron, T. Howes, "LDAP Control Extension for Simple Paged Results Manipulation", (work-in-progress) INTERNET-DRAFT http://www.ietf.org/internet-drafts/draft-ietf-asid-simple-paged-01.txt , March 1997.

  3. A. Herron, T. Howes, M. Wahl, "LDAP Control Extension for Server Side Sorting of Search Results", (work-in-progress) INTERNET-DRAFT http://www.ietf.org/internet-drafts/draft-ietf-asid-ldapv3-sorting-00.txt , April 1997.

  4. T. Howes, M. Wahl, "Referrals and Knowledge References in LDAP Directories", (work-in-progress) INTERNET-DRAFT http://www.ietf.org/internet-drafts/draft-ietf-ldapext-referral-00.txt , May 1997.

  5. T. Genovese, B Jennings, "A Common Schema for the Internet White Pages Service", (work-in-progress) INTERNET-DRAFT http://www.ietf.org/internet-drafts/draft-ietf-ids-iwps-schema-spec-07.txt , September 1997.

  6. Network Applications Consortium, "Lightweight Internet Person Schema", http://www.netapps.org , May 1997.

  7. The Directory: Selected Attribute Types. ITU-T Recommendation X.520, 1993.

  8. The Directory: Selected Object Classes. ITU-T Recommendation X.521, 1993.

  9. G. Good, "Definition of an Object Class to Hold LDAP Change Records", (work-in-progress) INTERNET-DRAFT http://www.ietf.org/internet-drafts/draft-ietf-asid-ldapv3-changelog-01.txt , July 1997.

  10. G. Good, "The LDAP Data Interchange Format (LDIF) - Technical Specification", (work-in-progress) INTERNET-DRAFT http://www.ietf.org/internet-drafts/draft-ietf-asid-ldif-02.txt , July 1997.

  11. M. Wahl, "X.500 Strong Authentication Mechanism for LDAPv3", (work-in-progress) INTERNET-DRAFT http://www.ietf.org/internet-drafts/draft-ietf-asid-ldapv3-strong-00.txt , March 1997.

  12. The Unicode Consortium, "The Unicode Standard Version 2.0", Addison-Wesley Developers Press, Reading, Massachusetts, 1996.

  13. Tim Howes, M. Wahl, "Use of Language Codes in LDAPv3", (work-in-progress) INTERNET-DRAFT http://www.ietf.org/internet-drafts/draft-ietf-asid-ldapv3-lang-00.txt , June 1997.

[RFC 2247]
S. Kille, M. Wahl, A. Grimstad, R. Huber, S. Sataluri, " Using Domains in LDAP/X.500 Distinguished Names", http://www.ietf.org/rfc/rfc2247.txt, January 1998.
[RFC 2251]
T. Howes, S. Kille, M. Wahl, " Lightweight Directory Access Protocol (v3)", http://www.ietf.org/rfc/rfc2251.txt, December 1997.
[RFC 2252]
A. Coulbeck, T. Howes, S. Kille, M. Wahl, " Lightweight Directory Access Protocol (v3): Attribute Syntax Definitions", http://www.ietf.org/rfc/rfc2252.txt, December 1997.
[RFC 2253]
T. Howes, S. Kille, M. Wahl, " Lightweight Directory Access Protocol (v3): UTF-8 String Representation of Distinguished Names", http://www.ietf.org/rfc/rfc2253.txt, December 1997.
[RFC 2254]
T. Howes, " The String Representation of LDAP Search Filters", http://www.ietf.org/rfc/rfc2254.txt, December 1997.
[RFC 2255]
T. Howes, M. Smith, " The LDAP URL Format", http://www.ietf.org/rfc/rfc2255.txt, December 1997.
[RFC 2256]
M. Wahl, " A Summary of the X.500(96) User Schema for use with LDAPv3", http://www.ietf.org/rfc/rfc2256.txt, December 1997.
[RFC 2559]
S. Boeyen, T. Howes, P. Richard, "Internet X.509 Public Key Infrastructure Operational Protocols - LDAPv2", http://www.ietf.org/rfc/rfc2559.txt, April 1999.
[RFC 2596]
T. Howes, M. Wahl, "Use of Language Codes in LDAP",  http://www.ietf.org/rfc/rfc2596.txt, May 1999.
[RFC 2829]
M. Wahl, H. Alvestrand, J. Hodges, R. Morgan, "Authentication Methods for LDAP",  http://www.ietf.org/rfc/rfc2829.txt, May 2000.
[RFC 2830]
J. Hodges, R. Morgan, M. Wahl, "Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security", (work-in-progress) INTERNET-DRAFT http://www.ietf.org/internet-drafts/draft-ietf-ldapext-ldapv3-tls-02.txt, May 2000.
[PAGING]
A. Anantha, A. Herron, T. Howes, C. Weider, "LDAP Control Extension for Simple Paged Results Manipulation", (work-in-progress) INTERNET-DRAFT http://www.ietf.org/internet-drafts/draft-ietf-asid-ldapv3-simplepaged-03.txt, August 1998.
[SORTING]
A. Anantha, A. Herron, T. Howes, M. Wahl, C. Weider, "LDAP Control Extension for Server Side Sorting of Search Results", (work-in-progress) INTERNET-DRAFT http://www.ietf.org/internet-drafts/draft-ietf-ldapext-sorting-01.txt, August 1998.
[VLV]
D. Boreham, C. Weider, "LDAP Extensions for Scrolling View Browsing of Search Results", (work-in-progress) INTERNET-DRAFT http://www.ietf.org/internet-drafts/draft-ietf-ldapext-ldapv3-vlv-01.txt, March 1998.
[SRV]
M. Armijo, L.Esibov, P.Leach, R. Morgan, "Discovering LDAP Services with DNS" http://www.ietf.org/internet-drafts/draft-ietf-ldapext-locate-02.txt, April 2000.
[NAMEDREF]
C.Lucas, T.Howes, M. Roszkowski, M.Smith, M.Wahl, "Named Referrals in LDAP Directories" draft-ietf-ldapext-locate-02.txt, June 1999.
[LDAP_PR]
"LDAP Server Profiles Draft 1.0", Open Group Draft Product Standard http://www.opengroup.org/orc/DOCS/LDAP_PR/, 1998.