Corrección función getUserLDAPProperties

_tipex

Corrección aplicable al post:

http://geeks.ms/blogs/lfranco/archive/2008/07/08/accediendo-al-directorio-activo-de-la-organizaci-243-n-desde-net-iv.aspx

Ayer estuve revisando una de las funciones de la librería LDAPservices, que se encarga de devolver los nombres de las propiedades del objeto usuario dentro del AD. Hoy os publico una corrección, ya que observé que la función no devolvía correctamente todos los nombres de propiedades.

Este bug es producido porque en la función se utiliza un objeto DirectorySearcher para devolver todos los objetos de tipo usuario en el AD, a continuación lee los nombres de las propiedades del primer usuario encontrado y los inserta en una colección. A continuación la función no continúa procesando el resto de usuarios, ya que deberían tener las mismas propiedades, no? Pues no. Para mi sorpresa resulta que sólo se devuelven aquellas propiedades del usuario que han sido informadas:

public static List<string> 
    getUserLDAPProperties(string LDAPURL)
{
    List<string> properties =new List<string>();
    DirectoryEntry entries = new DirectoryEntry(LDAPURL);
    DirectorySearcher searcher = new DirectorySearcher(
        entries, "(&(objectCategory=person)(objectClass=user))");
    try
    {
        foreach (SearchResult result in searcher.FindAll())
        {
            foreach (string property in
                result.GetDirectoryEntry().Properties.PropertyNames)
            {
                properties.Add(property);
            }
            break;                    
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
    return properties;
}

Para solucionar este bug, hay que procesar las propiedades de todos los usuarios, quedando el código de la función así como sigue:

foreach (SearchResult result in searcher.FindAll())
{
    foreach (string property in
        result.GetDirectoryEntry().Properties.PropertyNames)
    {
        if(!properties.Contains(property)) properties.Add(property);
    }
}

Como veis, se suprime el break que terminaba el bucle y se añade una condición para que se agreguen a la colección sólo aquellos nombres de propiedad que no se han agregado previamente.

Saludos y happy coding!!!

Published 10/7/2008 10:01 por Lluis Franco
Comparte este post: