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 :

LogonUser() failed with error code 1326


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 125
    Par défaut LogonUser() failed with error code 1326
    Bonjour à tous,
    Voilà je développe une appli qui se log à distance sur des serveurs par le biais de LogonUser().
    Sous Windows aucun problème pour faire la connexion UNC :
    \\serveur\partage\dossier\fichier.
    Quand je lance mon thread : j'ai une erreur 1326 :
    LogonUser() failed with error code 1326
    Voici ma fonction :
    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
     
            public void pathAccess()
            {
                IntPtr token;
                WindowsIdentity wi;
     
                //string domainNameNet = domainName + ".net";
     
                if (LogonUser("jsmith","domain.net","xxxxx",
                    8, // LOGON32_LOGON_NETWORK_CLEARTEXT
                    0, // LOGON32_PROVIDER_DEFAULT
                    out token))
                {
                    wi = new WindowsIdentity(token);
                    WindowsImpersonationContext wic = wi.Impersonate();
                    File.Copy(@"\\dallas\c$\toto.txt", @"C:\result.txt");
                    wic.Undo();
                    CloseHandle(token);
                }
                else
                {
                    MessageBox.Show("LogonUser() failed with error code " + Marshal.GetLastWin32Error());
                }
            }
    Quelqu'un pourrait éclairer ma lanterne ? Merci d'avance.

    EDIT : les DllImport de ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [DllImport("advapi32.dll", SetLastError = true)]
    private static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    private extern static bool CloseHandle (IntPtr handle);

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 125
    Par défaut
    Pour faire simple : je veux pouvoir accéder à une ressource (partage UNC) sur un serveur distant.
    Exemple avec FileCopy :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File.Copy(@"\\serveur\d$\test.txt", @"C:\result.txt");
    Sauf que voilà, j'ai besoin de fournir login + pass, sinon l'accès à la ressource est refusée.

    Info :
    - j'exécute le thread depuis mon domaine
    - j'ai accès au ressource des serveurs situés sur mon domaine via le code
    - les autres serveurs font parti d'un autre domaine
    - l'OS de ma machine : WinXP | l'OS des serveurs : Win Server 2003
    - j'ai un compte admin dans chaque domaine différent (fullcontrol)

    J'épluche les forums anglais, il parle de compte Anonymous, NTLM, Negociate, Authentification Windows Intégrée, Kerberos...

    Avez-vous une idée, un conseil ? Une petite astuce ? Merci à tous

  3. #3
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Salut.
    Citation Envoyé par Zhamy Voir le message
    Sous Windows aucun problème pour faire la connexion UNC :
    \\serveur\partage\dossier\fichier.
    Avec quel compte est-ce que cela fonctionne ? Es-tu certain que c'est le même que celui avec lequel tu fais l'impersonation ?

    Et imaginons que ce soit le même compte, tu as peut être seulement le droit de lister le contenu du répertoire, pas plus... Je pense qu'il s'agit d'un problème de droit, vérifie ce qu'il en est sur ton partage...

    De plus, tu attaques un partage administratif (c$), ce qui, à mon avis, n'est pas l'idéal (et puis le problème vient peut être de là). Tu ferais mieux de te créer un partage standard du type \\serveur\myShare.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 125
    Par défaut
    Merci pour ta réponse.

    \\serveur\partage\dossier marche sur ma session courante.

    Citation Envoyé par eusebe19 Voir le message
    Avec quel compte est-ce que cela fonctionne ? Es-tu certain que c'est le même que celui avec lequel tu fais l'impersonation ?
    Le thread est lancé depuis le compte : domain1\jsmith
    L'impersonation se fait sur le compte : domain2\jsmith

    Bien sur aucun approbation entre les domain1 et domain2.
    Moi je ne pense pas que ce soit un problème de droit. Je suis admin du domaine en fullcontrol.

    De toute façon, le programme se bloque à partir de la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if (LogonUser("jsmith","domain2.net","xxxxx",
                    8, // LOGON32_LOGON_NETWORK_CLEARTEXT
                    0, // LOGON32_PROVIDER_DEFAULT
                    out token))
                {
                    wi = new WindowsIdentity(token);
                    WindowsImpersonationContext wic = wi.Impersonate();
                    MessageBox.Show("Success");
                    //File.Copy(@"\\dallas\c$\toto.txt", @"C:\result.txt");
                    wic.Undo();
                    CloseHandle(token);
                }
    Qu'entends-tu par
    Tu ferais mieux de te créer un partage standard du type \\serveur\myShare.
    Le but du jeu c'est de faire de la gestion de fichier, avec DirectoryInfo.
    Mais impossible d'accéder à ces ressources sur le réseau.

  5. #5
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Citation Envoyé par Zhamy Voir le message
    \\serveur\partage\dossier marche sur ma session courante.
    Ma question est donc la suivante : es-tu "domain2\jsmith" ?

    Si tu es quelqu'un d'autre, essaye d'ouvrir le partage avec ce fameux "domain2\jsmith" :

    • tout d'abord, supprime la connexion vers ce partage avec le user de ta session courante : net use /delete \\serveur\partage\dossier
    • ensuite, reconnecte toi dessus avec "domain2\jsmith" : net use \\serveur\partage\dossier /USER:domain2\jsmith
    • et regarde ce qu'il se passe

    Citation Envoyé par Zhamy Voir le message
    Qu'entends-tu par "Tu ferais mieux de te créer un partage standard du type \\serveur\myShare" ?
    Disons que partager la racine de son disque "C" sur le réseau, c'est quand même pas le top

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 125
    Par défaut
    Euréka !
    J'ai trouvé "LA" class:
    http://www.codeproject.com/KB/IP/Con...edentials.aspx

    J'ai rajouté un petit truc en plus qui permet de faire un NetUseDelete.
    Les problèmes qu'on peut rencontrer sont souvent dûs à cause des mappages réseaux (lien UNC, lecteur réseau ...).

    Merci pour ton aide.

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

Discussions similaires

  1. Installation failed with error code: (0x00001A91)
    Par fahdijbeli dans le forum Windows 7
    Réponses: 1
    Dernier message: 03/10/2013, 23h00
  2. Réponses: 0
    Dernier message: 07/03/2013, 08h47
  3. DB function failed with error number 145
    Par Wonderfoule dans le forum Administration
    Réponses: 3
    Dernier message: 18/06/2012, 14h39
  4. SSPI handshake failed with error [.]
    Par dily0403 dans le forum Administration
    Réponses: 4
    Dernier message: 21/04/2009, 10h43
  5. IMP-00017: following statement failed with ORACLE error 603:
    Par tsdia2 dans le forum Administration
    Réponses: 4
    Dernier message: 09/04/2008, 18h07

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