Problemas con LDAP

Antonio
06 de Septiembre del 2003
Hola

Gracias por atenderme. Tengo un servicio LDAP del que quiero recuperar los atributos de un usuario del directorio CN=Users.

//Establezco el contexto inicial:
Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL,"ldap:localhost:389¨");
DirContext ctx = new InitialDirContext(env);
//Hago la búsqueda:
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.OBJECT_SCOPE);
NamingEnumeration results = ctx.search("CN=antonio,CN=Users,DC=empresa,DC=ldap,DC=server","(cn=*)",constraints);

Y no falla, pero luego le saco el results.hasMore() y me da false. Y tengo un montón de atributos.

Alguna idea. Muchas gracias.

Antonio
06 de Septiembre del 2003
Ya me respondo yo mismo. Por si a alguien le puede interesar o ha tenido el mismo fallo.

Para recuperar los atributos de un objeto, carpeta o lo que sea, primero tengo que asociar el entorno con el usuario que quiere ver esos atributos. Asi, si el usuario que paso no tiene permiso de lectura (lo debe tener denegado) sobre una carpeta u objeto la enumeración resultado de la busqueda, o la resultante de un ctx.getAttributes("....").getAll(); me dará false siempre que le haga el hasMore(). Si por el contrario, el usuario sí tiene permiso de lectura, sacará hasMore() a true y podré leer lo que me interese.
Asi pues el problema se resuelve añadiendo las líneas siguientes justo antes de hacer el contexto inicial.
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, usuario);
env.put(Context.SECURITY_CREDENTIALS, password);

Y el contexto inicial:
DirContext ctx = new InitialDirContext(env);

Y ya esta.