Lettura dei suffissi UPN in Active Directory

Mi è capitato di sviluppare un’applicazione in cui fosse necessario avere una lista contenente tutti gli “UPN Suffix” del dominio (il principale e gli alternativi); praticamente quello che ci viene proposto nella combobox relativamente allo “user logon name” dello snap-in di “ActiveDirectory Users and Computers”. Il codice non è molto difficile:

 

public string[] GetUpnSuffix()

{

    DirectoryEntry RootDSE = new DirectoryEntry("LDAP://RootDSE");

    if (RootDSE != null)

    {

        // Legge il context name

        string strNamingContext = RootDSE.Properties["defaultNamingContext"].Value.ToString();

        string strConfigContext = RootDSE.Properties["configurationNamingContext"].Value.ToString();

        // Legge il domain name

        DirectoryEntry oDomain = new DirectoryEntry("LDAP://" + strNamingContext);

        string strDomainName = oDomain.Properties["name"].Value.ToString();

        DirectoryEntry oPartition = new DirectoryEntry("LDAP://CN=Partitions," + strConfigContext);

 

        string[] res = new string[oPartition.Properties["UPNSuffixes"].Count + 1];

 

        // Legge il DNS name del dominio

        oDomain.RefreshCache(new string[] { "canonicalName" });

        if (oDomain.Properties["canonicalName"].Count > 0)

            res[0] = oDomain.Properties["canonicalName"][0].ToString().Substring(0, oDomain.Properties["canonicalName"][0].ToString().Length - 1);

        else

            throw new ApplicationException("Impossibile leggere il canonicalName");

 

        // Legge gli UPN Suffix name del dominio

        int idx = 1;

        foreach (string suffix in oPartition.Properties["UPNSuffixes"])

        {

            res[idx] = suffix;

            idx++;

        }

 

        return res;

    }

    else

        return null;

}

 

La cosa a cui bisogna assolutamente prestare attenzione è la lettura dell’attributo “canonicalName”. Essendo un attributo calcolato, una volta istanziata la nostra classe DirectoryEntry, tale attributo non è valorizzato, per cui provando a leggerlo verrebbe sempre restituito un valore null. Prima di leggerlo è necessario forzare il refresh di tale attributo mediante il metodo RefreshCache. All’inizio ci ho perso un po’ di tempo, ma tale comportamento vale per tutti gli attributi “calcolati”; quindi ricordiamoci sempre di questo metodo prima della loro lettura.

 

Technorati Tags: ,
«dicembre»
domlunmarmergiovensab
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345