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 :

Langue du système et groupe administrateurs, besoin d'infos


Sujet :

C#

  1. #1
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut Langue du système et groupe administrateurs, besoin d'infos
    Bonjour à tous,

    L'appli que je développe en ce moment ajoute un utilisateur windows au système. Au cours de mes tests, j'ai fait une désagréable découverte...
    En effet, mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    grp = AD.Children.Find("Administrators", "group");
    if (grp != null) { grp.Invoke("Add", new object[] { NewUser.Path.ToString() }); }
    Qui fonctionne sur la plateforme de test, ne fonctionnait plus en déploiement sur les pcs du réseaux. Il me renvoyait une gentille exception comme quoi le groupe n'était pas trouvé.

    Ainsi je découvris... que le nom du groupe administrateur sous windows XP, dépend... de la langue d'installation du système!!!!!


    Et oui donc ce groupe s'appelle "Administrateurs" pour les versions françaises, "Administrators" pour les versions anglaises ect...

    Je suppose qu'il y a une raison pour ça, même si je trouve que c'est... Il me faut contourner celà.

    Dans ce but, je cherche la liste complète des différentes dénominations du groupe ainsi que les langues qui vont avec.
    Je cherche aussi un moyen pour pouvoir récupérer la langue du système (avec C#).
    Ou idéalement, quelque chose dans .Net qui permette de désigner le group administrateur sans être obligé de mettre le "String qui va bien". Un peu genre System.LePackage.KiMinteresse.AdminGroupName...

    Merci pour votre aide

  2. #2
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Hello,

    Effectue ta recherche non pas sur le nom, mais sur le SID, celui du groupe admin étant constant (S-1-5-domain-512 -> http://support.microsoft.com/kb/243330)

    En espérant que ça peut aider...

  3. #3
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    ça à l'air super ce truc...
    sauf que tout le monde cherche à récupérer le SID d'un utilisateur, alors que moi, je chercherai le nom du groupe à partir du SID....
    T'aurais une idée de comment faire ça?

  4. #4
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Arf, désolé, j'ai pas lu le bon groupe, le SID à chercher est S-1-5-32-544

    De manière générale, les SID (attribut objectSID) sont des valeurs hexa stockée en big endian (bit de poids fort à droite... je crois que c'est big endian ). Donc, le SID ci-dessus se code en hexa :

    01 02 00 00 00 00 00 05 20 00 00 00 20 02 00 00

    (puisque 20 02 00 00 = 00 00 02 20 = 0x220 = 544) La recherche s'effectue donc avec le filtre LDAP suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (objectSID = \01 \02 \00 \00 \00 \00 \00 \05 \20 \00 \00 \00 \20 \02 \00 \00)
    Cette recherche te renverra toujours le groupe Administrator...

  5. #5
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Euh....
    là, j'avoue... tu m'as perdu...
    Déjà je comprends peu ( c'est pas que c'est pas clair, c'est que ça dépasse mes connaissances de ce niveau), mais alors pour traduire ça en code c#...

    tu n'aurais pas un exemple? ou un lien vers un exemple stp?

  6. #6
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Here you go

    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
     
    const DOMAIN_AND_PORT = "my.domain.com:389";
    const OU = "OU=myGroups,DC=my,DC=domain,DC=com";
     
    // Definit la racine de ton AD
    string root = "LDAP://"+DOMAIN_AND_PORT+"/"+OU;
     
    // Instancie la directoryEntry racine
    rootEntry = new DirectoryEntry(root);
     
    // Definit un contexte de recherche avec la rootEntry comme baseDn
    DirectorySearcher rootSearcher = new DirectorySearcher(rootEntry);
     
    // Definit le filtre LDAP qui permet de retrouver le groupe Admin qui se trouve dans [OU]
    rootSearcher.Filter = "(objectSID = \01 \02 \00 \00 \00 \00 \00 \05 \20 \00 \00 \00 \20 \02 \00 \00)";
     
    // Lance la recherche
    SearchResult sr = rootSearcher.FindOne();
     
    if(sr != null){
      // le groupe a été trouvé, on l'instancie
      DirectoryEntry e = new DirectoryEntry();
      e.Path = sr.Path;
     
      // on met à jour l'attribut member du groupe en rajoutant le DN du user
      e.Properties["member"].Add(NewUser.Path.ToString());
     
      // Surtout ne pas oublier le commit des modifications
      e.CommitChanges();
    }

  7. #7
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Salut,

    Merci pour ta réponse. Juste une chose, à la compilation, il refuse les \20 me disant :
    "Unrecognized escape sequence"

    saurais tu comment résoudre ça?

    merci

  8. #8
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Oui, désolé pour l'erreur de syntaxe, il faut soit échapper doublement les hexa (\\20) soit préfixer la string par @ ( @"(objectSID = \01 \02 \00 \00 \00 \00 \00 \05 \20 \00 \00 \00 \20 \02 \00 \00)";
    ça permet de gérer automatiquement les \)

  9. #9
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Merci

    Dis moi, pourrais tu m'expliquer un peu ce que sont ces deux lignes?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const DOMAIN_AND_PORT = "my.domain.com:389";
    const OU = "OU=myGroups,DC=my,DC=domain,DC=com";
    je suppose qu'il faut que je les adaptes à mon cas. Je sais comment récupérer le nom de domaine:
    Environment.UserDomaineName

    je ne vois pas trop à quoi correspondent les OU et DC. Faut il que je parse le domaine récupéré pour modifier ces valeurs?

    Merci

  10. #10
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Le premier est effectivement ton domain controller, la machine sur laquelle se trouve l'AD.

    Pour le second, il s'agit de ton basepath LDAP.

    Basiquement, un LDAP est une structure arborescente assez similaire à une arborescence de fichier : des noeuds (directories / OU) et des feuilles (fichiers / groupes,users, etc.). Donc, demande à tes admins systèmes ou regarde ton AD pour retrouver ces valeurs.

    Un parsing ne fera pas l'affaire malheureusement

    Utilise ta mmc pour parcourir ton AD, je suis sûr que tu trouveras cette information

  11. #11
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    ok,
    mais dans ce cas donc, l'appli est spécialisée pour un réseau et ne peut être installée telle quelle sur différent réseau.
    ça, ça pose un soucis...

  12. #12
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Effectivement, c'est un mauvais point. Mais rien qu'un fichier de config extérieur ne saurait corriger, non ?

    Sinon, il doit bien exister un moyen de récupérer cette info autrement, mais je t'avoue que je n'ai jamais vraiment cherché.

Discussions similaires

  1. Utilisateur de domaine et Groupe Administrateur
    Par MrEddy dans le forum Administration
    Réponses: 2
    Dernier message: 15/08/2007, 17h47
  2. Connaitre la langue du système d'exploitation
    Par poussin_44 dans le forum VB.NET
    Réponses: 4
    Dernier message: 30/07/2007, 16h14
  3. Réponses: 2
    Dernier message: 03/05/2007, 20h21
  4. Changer la langue du système !
    Par _shuriken_ dans le forum Windows XP
    Réponses: 8
    Dernier message: 14/11/2006, 11h22
  5. Enlever le User Administrateur du Groupe Administrateurs
    Par mouloudéen dans le forum Sécurité
    Réponses: 7
    Dernier message: 28/06/2006, 10h44

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