There is a huge problem with attributes. They are supposed to be case insensitive (RFC 2251, par. 2.5.1: "... they must be IA5 (ASCII) strings, and they are case insensitive (e.g. "
foo@bar.com" will match "
FOO@BAR.COM")")
If we use the BasicAttribute class (javax.naming.directory.BasicAttribute) without lowercasing the attribute's name, there is no way to guarantee that we could do a attributes.get( <name>.toLowerCase() ) with a correct response.
This usage is spreaded all over the code and need to be fixed.
As an example, here is a snapshot of a working code :
/*
* create objectClass=top, objectClass=organizationalUnit
*/
Attributes attributes = new BasicAttributes();
Attribute attribute = new BasicAttribute( "objectClass".toLowerCase() ); // we MUST lowercase the attribute's name
attribute.add( "top" );
attribute.add( "organizationalUnit" );
attributes.put( attribute );
Attribute attr = attributes.get("objectclass".toLowerCase());
Attribute attr2 = attributes.get("objectClass".toLowerCase());
Assert.assertTrue( attr == attr2 ); // no problem, they are equal.
/*
* The same piece of code, without the lowerCase()
*/
Attributes attributes = new BasicAttributes();
Attribute attribute = new BasicAttribute( "objectClass");
attribute.add( "top" );
attribute.add( "organizationalUnit" );
attributes.put( attribute );
Attribute attr = attributes.get("objectclass");
Attribute attr2 = attributes.get("objectClass");
Assert.assertTrue( attr == attr2 ); // they are different, as attr is null.