MSMVPS.COM
The Ultimate Destination for Blogs by Current and Former Microsoft Most Valuable Professionals.

Corrección función getUserLDAPProperties

Blogs

El blog de Lluis Franco

Syndication

_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!!!

** crossposting desde el blog de Lluís Franco en geeks.ms **

Posted Thu, Jul 10 2008 10:01 by lfranco
Filed under: , , , , , ,

Add a Comment

(optional)  
(optional)
(required)  
Remember Me?
If you can't read this number refresh your screen
Enter the numbers above: