IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Erreur pour FolderSecurity


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2012
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Erreur pour FolderSecurity
    Bonjour,

    Depuis environ 1 ans, mon application roulait sans problème, et tout à coup, je reçois un message d'erreur sur la ligne "PurgeAccessRules"

    le message est le suivant: Cette liste de contrôle d'accès n'est pas de forme canonique et ne peut donc pas être modifiée.

    Ce bout de code sers à supprimer les droits d'un groupe sur un répertoire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    folderSecurity = Directory.GetAccessControl(...);
    NTAccount acct = new NTAccount(AccountName);
    SecurityIdentifier id = (SecurityIdentifier)acct.Translate(typeof(SecurityIdentifier));
    folderSecurity.PurgeAccessRules(id);
    Directory.SetAccessControl(DirectoryName, folderSecurity);

    j'ai bien sûr demandé à notre admin de réseau s'il avait changé quelque chose mais il me dit que non... ce que je doute quelque peu...
    quelqu'un pourrait m'aider à résoudre le problème?

    Merci.

  2. #2
    Membre confirmé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Points : 490
    Points
    490
    Par défaut
    Bonjour,

    le pc ou tu as l'erreur est il bien inscrit dans le domaine ?
    N'oubliez pas la balise

    est ton ami mais quand Google ne trouve pas quelque choses, il demande à Chuck Norris.

  3. #3
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    Il faut vérifier les permission de l'AD apparemment vous êtes raillé ou vous manquer un mis a jours

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2012
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Solution
    En googellant, j'ai pu trouver une solution... je ne l'ai pas analyser encore car je suis dans un rush présentement...

    j'exécute ce modele avant le purge, et ca fonctionne:




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    static void CanonicalizeDacl(NativeObjectSecurity objectSecurity)
            {
                if (objectSecurity == null) { throw new ArgumentNullException("objectSecurity"); }
                if (objectSecurity.AreAccessRulesCanonical) { return; }
     
                // A canonical ACL must have ACES sorted according to the following order:
                //   1. Access-denied on the object
                //   2. Access-denied on a child or property
                //   3. Access-allowed on the object
                //   4. Access-allowed on a child or property
                //   5. All inherited ACEs 
                RawSecurityDescriptor descriptor = new RawSecurityDescriptor(objectSecurity.GetSecurityDescriptorSddlForm(AccessControlSections.Access));
     
                List<CommonAce> implicitDenyDacl = new List<CommonAce>();
                List<CommonAce> implicitDenyObjectDacl = new List<CommonAce>();
                List<CommonAce> inheritedDacl = new List<CommonAce>();
                List<CommonAce> implicitAllowDacl = new List<CommonAce>();
                List<CommonAce> implicitAllowObjectDacl = new List<CommonAce>();
     
                foreach (CommonAce ace in descriptor.DiscretionaryAcl)
                {
                    if ((ace.AceFlags & AceFlags.Inherited) == AceFlags.Inherited) { inheritedDacl.Add(ace); }
                    else
                    {
                        switch (ace.AceType)
                        {
                            case AceType.AccessAllowed:
                                implicitAllowDacl.Add(ace);
                                break;
     
                            case AceType.AccessDenied:
                                implicitDenyDacl.Add(ace);
                                break;
     
                            case AceType.AccessAllowedObject:
                                implicitAllowObjectDacl.Add(ace);
                                break;
     
                            case AceType.AccessDeniedObject:
                                implicitDenyObjectDacl.Add(ace);
                                break;
                        }
                    }
                }
     
                Int32 aceIndex = 0;
                RawAcl newDacl = new RawAcl(descriptor.DiscretionaryAcl.Revision, descriptor.DiscretionaryAcl.Count);
                implicitDenyDacl.ForEach(x => newDacl.InsertAce(aceIndex++, x));
                implicitDenyObjectDacl.ForEach(x => newDacl.InsertAce(aceIndex++, x));
                implicitAllowDacl.ForEach(x => newDacl.InsertAce(aceIndex++, x));
                implicitAllowObjectDacl.ForEach(x => newDacl.InsertAce(aceIndex++, x));
                inheritedDacl.ForEach(x => newDacl.InsertAce(aceIndex++, x));
     
                if (aceIndex != descriptor.DiscretionaryAcl.Count)
                {
                    System.Diagnostics.Debug.Fail("The DACL cannot be canonicalized since it would potentially result in a loss of information");
                    return;
                }
     
                descriptor.DiscretionaryAcl = newDacl;
                objectSecurity.SetSecurityDescriptorSddlForm(descriptor.GetSddlForm(AccessControlSections.Access), AccessControlSections.Access);
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/09/2005, 15h08
  2. Erreur pour la création d'un XMLService
    Par jacma dans le forum XMLRAD
    Réponses: 13
    Dernier message: 25/07/2005, 23h26
  3. [C#]Erreur pour remplir mon dataset
    Par liliprog dans le forum Windows Forms
    Réponses: 16
    Dernier message: 15/07/2005, 19h03
  4. [DOM] Erreur pour valider une DTD
    Par lenghh dans le forum Format d'échange (XML, JSON...)
    Réponses: 13
    Dernier message: 19/05/2004, 18h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo