Issue Details (XML | Word | Printable)

Key: DIRSERVER-194
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Vincent Tence
Reporter: Emmanuel Lecharny
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Directory ApacheDS

LdapName comparison must be case-insensitive for attibutType

Created: 05/Feb/05 12:55 PM   Updated: 07/Feb/06 02:41 PM
Return to search
Component/s: ldap
Affects Version/s: pre-1.0
Fix Version/s: pre-1.0

Time Tracking:
Not Specified

Resolution Date: 23/Oct/05 02:22 AM


 Description  « Hide
While comparing two DNs, the AttributeType of each RDN must be compared in a case-insensitive way : RFC 2251, chap. 4.1.4, par.4.

It could be tricky to perform a valid comparison :

A=V1+B=V2,C=GB and A=V1+b=V2,C=GB are equals in regards with the RFC,
A=V1+B=V2,C=GB and A=V1+C=V2,C=GB are differents in regards with the RFC.

LdapName.compareTo function does not return a valid result :

        Name n1 = new DnParser().parse("A=V");
        Name n2 = new DnParser().parse("a=V");

        int val = n1.compareTo(n2); // val = 0xffffffe0 instead of 0





 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Alan Cabrera added a comment - 05/Feb/05 11:16 PM
Good catch. Do you have the unit tests for this?

Emmanuel Lecharny added a comment - 06/Feb/05 09:10 AM
Two test case to illustrate the problem (class org.apache.ldap.common.name.LdapNameTest) :

    /**
     * Test the equivalence of two DNs, attributeType are not case sensitive
     * They MUST be equals.
     *
     * @throws NamingException if anything goes wrong.
     */
    public void testInsensitiveTypeAttribut() throws NamingException
    {

        Name name1 = new LdapName("cn=HomeDir");
        Name name2 = new LdapName("CN=HomeDir");

        assertEquals(name1.compareTo(name2), 0);
    }

    /**
     * Test the equivalence of two DNs with multi-valued RDN. AttributeType are
     * not case sensitive. Each attribute type MUST be compared. They MUST be
     * equals.
     *
     * @throws NamingException if anything goes wrong.
     */
    public void testInsensitiveTypeMultiValuedAttribut() throws NamingException
    {

        Name name1 = new LdapName("cn=HomeDir+cn=WorkDir");
        Name name2 = new LdapName("cn=HomeDir+CN=WorkDir");

        assertEquals(name1.compareTo(name2), 0);
    }


Vincent Tence added a comment - 20/Feb/05 03:31 AM
This should be fixed now in the trunk thanks to your TestCase. Good work Emmanuel!

Vincent Tence added a comment - 20/Feb/05 04:09 AM
After reading the Name RFC, I realize I got it all wrong. It's not as trivial as I thought.

Emmanuel Lecharny added a comment - 23/Oct/05 02:22 AM
I think that this issue has been fixed by Alex a month ago. However, some test cases in LdapNameTest show that it's not anymore an issue.