none
System.DirectoryServices ...problèmes ... RRS feed

  • Question

  • Bonjour ....j'essaye de créer des groupes activeDirectory à partir d'une application aspnet ...j'utilise l'espace de nom : System.DirectoryServices

    voici mon code :

            private bool AjoutActiveDirectory(string NomDuNouveauGroupe)
            {
                //Recuperation des infos de connexion
                RecuperationParametrage();
                bool Existe = false;
    
                DirectoryEntry Ldap = new DirectoryEntry("LDAP://" + DomaineParametre, LogAdministrateur, MdpAdministrateur);
    
                // Force l'authentfication a avoir lieu
                object connect = Ldap.NativeObject;
    
                
                //On filtre sur la catégorie Groupe
                DirectorySearcher searcher = new DirectorySearcher(Ldap);
                searcher.Filter = "(objectCategory=group)";
    
                try
                {
                //On vérifie si le groupe existe déjà
                foreach (SearchResult result in searcher.FindAll())
                {
                    // On récupère l'entrée trouvée lors de la recherche
                    DirectoryEntry DirEntry = result.GetDirectoryEntry();
                    // On récupère le nom du groupe
                    string NomGroupe = (DirEntry.Properties["SAMAccountName"].Value != null) ? DirEntry.Properties["SAMAccountName"].Value.ToString() : String.Empty;
            
                    if (NomGroupe.ToUpper() == NomDuNouveauGroupe.ToUpper())
                    {
                        Existe = true;
                        break;
                    }
    
                }
    
    
                if (!Existe)
                {
    
                    string Description = TxtSaisieCommentaire.Text;
                    DirectoryEntry group = Ldap.Children.Add("cn=" + NomDuNouveauGroupe.ToString(), "group");
                    group.Properties["SAMAccountName"].Add(NomDuNouveauGroupe.ToString());
                    group.Properties["desription"].Add("description");
                    group.CommitChanges();
    
                }
                    Ldap.Close();
                    return true;
    
                }
                catch (Exception Erreur)
                {
                    throw Erreur;
    
                }
            }

    J'ai l'erreur suivante : {"L'attribut ou la valeur de service d'annuaire spécifié n'existe pas. (Exception from HRESULT: 0x8007200A)"}


    Selon mes recherches il semble que c'est un problème de sécurité ....Quelqu'un peut'il me fournir un début de solution ...?


    Merci ...


    P.JEAN 

    mercredi 20 janvier 2010 08:52

Réponses

  • Ayè ca marche ...Non sans peines ...je n'ai pas trouvé la cause de l'erreur j'ai fais d'une autre façon .... je te passe mon code ...ca peut être utile :

            private void CreationGroupeActiveDirectory(string NomDuNouveauGroupe)
            {
                //Recuperation des infos de connexion à ActiveDirectory
                RecuperationParametrage();
    
                if (GroupeExiste(NomDuNouveauGroupe))
                {
                    TxtSaisieCommentaire.Text = "Existe déjà";
                }
                else
                {
    
                        DirectoryEntry Ldap = new DirectoryEntry("LDAP://" + Domaine, LogAdministrateur, MdpAdministrateur);
                        DirectoryEntry Grp = Ldap.Children.Add("CN=" + NomDuNouveauGroupe, "group");
                        Grp.Properties["sAMAccountName"].Value = NomDuNouveauGroupe;
                        Grp.CommitChanges();
    
                        Grp.Dispose();
                        Ldap.Dispose();
    
                }
    
            }
    
            private bool GroupeExiste(string NomDuNouveauGroupe)
            {
                DirectoryEntry Ldap = new DirectoryEntry("LDAP://" + Domaine, LogAdministrateur, MdpAdministrateur);
                DirectorySearcher Chercheur = new DirectorySearcher(Ldap);
                Chercheur.SearchScope = SearchScope.Subtree;
                Chercheur.Filter = "(&(objectClass=group)(sAmAccountName=" + NomDuNouveauGroupe + "))";
    
                if (Chercheur.FindAll().Count > 0)
                {
                    Chercheur.Dispose();
                    Ldap.Dispose();
                    return true;
                }
                else
                {
                    Chercheur.Dispose();
                    Ldap.Dispose();
                    return false;
                }
         
            }
    
    
    
            /// <summary>
            /// Récupération du paramétrage dans la BD
            /// </summary>
            private void RecuperationParametrage()
            {
                Parametres Para = new Parametres();
                Para.Remplir(0);
                Domaine = Para.Domaine;
                LogAdministrateur = Para.LoginAdministrateur;
                MdpAdministrateur = Para.MotDePasseAdministrateur;
                Para = null;
            }
    Merci pour tes réponses ...

    Patrick
    • Proposé comme réponse nikhoModerator jeudi 21 janvier 2010 09:41
    • Marqué comme réponse Alex Petrescu vendredi 22 janvier 2010 14:36
    mercredi 20 janvier 2010 15:08

Toutes les réponses

  • Quelle méthode d'authentification utilises tu windows ?
    Pour voir si c'est un problème de sécurité as tu essayé d'exécuter ce code dans une application console par exemple et voir si cela fonctionne avec les droits de ton compte ?
    mercredi 20 janvier 2010 09:18
    Modérateur
  • Dab ...Merci pour ta réponse

    J'utilise l'authentification Windows

    Je vais suivre ton conseil ...je vais tester ça en mode console ...

    Je fais un nouveau post pour le résultat ...

    P
    mercredi 20 janvier 2010 10:12
  • Bon voilà ...j'ai passé ma fonction dans une appli console et j'ai la même erreur ....je suis identifié avec un profil qui fait partie du groupe Administrateurs ...

    Comprend pas l'origine de cette erreur ...

    SOS

    P.JEAN

    mercredi 20 janvier 2010 10:36
  • Sur quelle ligne exactement as tu l'erreur ? est ce que la lecture des groupes fonctionne ?
    mercredi 20 janvier 2010 11:15
    Modérateur
  • Ma boucle sur la collection des goupes pour voir si le groupe à enregistrer n'existe pas fonctionne parfaitement ....

    C'est sur l'enregistrement du groupe que j'ai l'erreur  sur la commande 
    CommitChanges();

    mercredi 20 janvier 2010 11:18
  • Il n'y a pas un problème avec cet attribut "desription " ?

    Sinon peux tu essayer le code suivant :
    DirectoryEntry group = Ldap.Children.Add("cn=" + NomDuNouveauGroupe.ToString(), "group");
    group.Properties["sAmAccountName"].Value = NomDuNouveauGroupe.ToString();
    group.CommitChanges();

    mercredi 20 janvier 2010 11:31
    Modérateur
  • JE VAIS TESTER ....

    En tout cas merci ...Bon app


    P.JEAN
    mercredi 20 janvier 2010 11:32
  • Ayè ca marche ...Non sans peines ...je n'ai pas trouvé la cause de l'erreur j'ai fais d'une autre façon .... je te passe mon code ...ca peut être utile :

            private void CreationGroupeActiveDirectory(string NomDuNouveauGroupe)
            {
                //Recuperation des infos de connexion à ActiveDirectory
                RecuperationParametrage();
    
                if (GroupeExiste(NomDuNouveauGroupe))
                {
                    TxtSaisieCommentaire.Text = "Existe déjà";
                }
                else
                {
    
                        DirectoryEntry Ldap = new DirectoryEntry("LDAP://" + Domaine, LogAdministrateur, MdpAdministrateur);
                        DirectoryEntry Grp = Ldap.Children.Add("CN=" + NomDuNouveauGroupe, "group");
                        Grp.Properties["sAMAccountName"].Value = NomDuNouveauGroupe;
                        Grp.CommitChanges();
    
                        Grp.Dispose();
                        Ldap.Dispose();
    
                }
    
            }
    
            private bool GroupeExiste(string NomDuNouveauGroupe)
            {
                DirectoryEntry Ldap = new DirectoryEntry("LDAP://" + Domaine, LogAdministrateur, MdpAdministrateur);
                DirectorySearcher Chercheur = new DirectorySearcher(Ldap);
                Chercheur.SearchScope = SearchScope.Subtree;
                Chercheur.Filter = "(&(objectClass=group)(sAmAccountName=" + NomDuNouveauGroupe + "))";
    
                if (Chercheur.FindAll().Count > 0)
                {
                    Chercheur.Dispose();
                    Ldap.Dispose();
                    return true;
                }
                else
                {
                    Chercheur.Dispose();
                    Ldap.Dispose();
                    return false;
                }
         
            }
    
    
    
            /// <summary>
            /// Récupération du paramétrage dans la BD
            /// </summary>
            private void RecuperationParametrage()
            {
                Parametres Para = new Parametres();
                Para.Remplir(0);
                Domaine = Para.Domaine;
                LogAdministrateur = Para.LoginAdministrateur;
                MdpAdministrateur = Para.MotDePasseAdministrateur;
                Para = null;
            }
    Merci pour tes réponses ...

    Patrick
    • Proposé comme réponse nikhoModerator jeudi 21 janvier 2010 09:41
    • Marqué comme réponse Alex Petrescu vendredi 22 janvier 2010 14:36
    mercredi 20 janvier 2010 15:08