La operaci�n "compare" del LDAP permite a un cliente preguntarle a un servidor si la entrada nombrada tiene una pereja atributo/valor. Esto permite al servidor mantener secretas ciertas parejas atributo/valor (por ejemplo, no expuestas para accesos de "search" generales) mientras permite que los clientes limitados las usen. Algunos servidores podr�an usar estas caracter�sticas para passwords, por ejemplo, aunque es inseguro para el cliente pasar password en texto claro en la propia operaci�n "compare".
Para conseguir esto en el JNDI, se usan argumentos convenientemente restringidos para los siguientes m�todos:
- search(Name name, String filter, SearchControls ctls)
- search(Name name, String filterExpr, Object[]filterArgs, SearchControls ctls)
Primero, el filtro debe ser de la forma "(nombe=valor)". No podemo usar comodines. Segundo, el �mbito de b�squeda debe ser SearchControls.OBJECT_SCOPE. Finalmente, debemos pedir que no se devuelvan atributos.
Aqu� tenemos un ejemplo:
// Value of the attribute
byte[] key = {(byte)0x61, (byte)0x62, (byte)0x63, (byte)0x64,
(byte)0x65, (byte)0x66, (byte)0x67};
// Set up the search controls
SearchControls ctls = new SearchControls();
ctls.setReturningAttributes(new String[0]); // Return no attrs
ctls.setSearchScope(SearchControls.OBJECT_SCOPE); // Search object only
// Perform the search
NamingEnumeration answer = ctx.search("cn=S. User, ou=NewHires",
"(mySpecialKey={0})", new Object[]{key}, ctls);
Si la comparaci�n tiene �xtio, la enumeraci�n resultante contendr� un s�lo �tem cuyo nombre es el nombre vac�o y que no contiene atributos.