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

API, COM et SDKs Delphi Discussion :

[D6] ADSOpenObject dans une DLL


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut [D6] ADSOpenObject dans une DLL
    Comment utiliser ADSOpenObject dans une DLL ?

    Dans une application, ça fonctionne bien, mais dans une DLL, ça échoue à chaque fois (ça renvoit faux, comme si le login/mdp était incorrect).

    Code dans la DLL :
    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
       function ADsOpenObject(lpszPathName: PWideChar; lpszUserName: PWideChar; lpszPassword: PWideChar; dwReserved: LongInt; const riid: TGUID; out obj): HResult;   stdcall;   external 'activeds.dll';
     
    function VerificationMDPLDAP(const szLogin, szPwd: String): Boolean;
    var
       wUsername, wPassword: WideString;
    //   OutObj: Pointer;
       UnknownObj: IUnknown;
       HR: HResult;
    begin
       wUsername := szLogin;
       wPassword := szPwd;
       HR := ADSOpenObject('LDAP://serveurdomaine/DC=domaine,DC=LOC', PWideChar(wUsername), PWideChar(wPassword), ADS_SECURE_AUTHENTICATION, IID_IADs, UnknownObj);
       if HR = S_OK then
          Result := True
       else
          Result := False;
    end;
    Y-a-t'il des précautions ou des choses à faire attention ?

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  2. #2
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Je suis le seul à l'avoir fait ?

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Personnellement, je dois aussi faire du LDAP, et seul ADSGetObject se connecte, avec ADSOpenObject, j'ai les erreurs 001F ou 002B, ... et je ne le fais que dans une application pourtant !

    essaye de voir l'unité de Paul Toth, je vais l'essayer dès que j'aurais le temps sur ce projet, en ce moment, un autre est prioritaire
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    essaye de voir l'unité de Paul Toth, je vais l'essayer dès que j'aurais le temps sur ce projet, en ce moment, un autre est prioritaire
    LDAPSearch ne me trouve rien.
    Pas simple, de jouer avec le LDAP ...

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Je n'ai pas encore essayé son unité, mais non, LDAP, c'est pas un truc facile, ...

    attention, l'ordre des "cn=...o=...dc=..." dans le nom qualifié est important !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    attention, l'ordre des "cn=...o=...dc=..." dans le nom qualifié est important !
    C'est-à-dire ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  7. #7
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Voici mon code :
    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
    function VerificationMDPLDAP(const szLogin, szPwd: String): Boolean;
    var
       ldap: Integer;
       dn: String;
    begin
       Result := False;
       ldap := LDAPOpen('sghm.loc');
       if ldap = INVALID_SOCKET then
       begin
          ShowMessage('Serveur de sécurité introuvable');
          Exit;
       end;
       try
          dn := LDAPSearch(ldap, szLogin);
          if dn = '' then
          begin
             ShowMessage('Compte inconnu');
             Exit;
          end;
          if not LDAPBind(ldap, dn, szPwd) then
          begin
             ShowMessage('Mot de passe invalide');
             Exit;
          end;
       finally
          LDAPClose(ldap);
       end;
       Result := True;
    end;
    Et celui avec ADO :
    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
    function VerificationMDPLDAP(const szLogin, szPwd: String): Boolean;
    var
       ADOConnection: TADOConnection;
       ADOQuery: TADOQuery;
    begin
       Result := False;
     
       CoInitialize(nil);
       ADOConnection := TADOConnection.Create(nil);
       ADOQuery := TADOQuery.Create(nil);
       try
    //      ADOConnection.Provider := 'ADsDSOObject;Encrypt Password=False;Mode=Read;Bind Flags=0;ADSI Flag=-2147483648';
          ADOConnection.Provider := 'Provider=ADsDSOObject;Password=poiop;User ID=admin;Encrypt Password=True;Data Source=sghm.loc;Mode=Read;Bind Flags=0;ADSI Flag=-2147483648';
          ADOQuery.Connection := ADOConnection;
     
          ADOQuery.Close;
          ADOQuery.SQL.Clear;
          ADOQuery.SQL.Add('select AdsPath, CN, SN, mail, userPrincipalName, sAMAccountName, Title, company, department');
          ADOQuery.SQL.Add('from ''LDAP://DC=sghm,DC=loc''');
          ADOQuery.SQL.Add('where LdapsAMAccountName = ' + QuotedStr(szLogin)+' or givenName = ' + QuotedStr(szLogin) + ' or sn = ' + QuotedStr(szLogin));
          ADOQuery.SQL.Add('order by sn');
          try
             ADOQuery.Open;
          except
             on E: Exception do
             begin
                ADOQuery.Close;
                ShowMessage(E.Message);
                Exit;
             end;
          end;
          if ADOQuery.IsEmpty then
             ShowMessage('RIEN !')
          else
          begin
             ShowMessage(ADOQuery.FieldByName('userPrincipalName').AsString);
             Result := True;
          end;
       finally
          ADOQuery.Free;
          ADOConnection.Free;
       end;
    end;
    Y a t'il quelque chose que je ne fais pas bien ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  8. #8
    Membre averti
    Inscrit en
    Juillet 2002
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 30
    Par défaut
    Bonjour à tous et plus particulièrement à ShaïLeTroll ,

    Moi non plus, le LDAP search ne renvoie rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ldap := LDAPOpen('xxx.xxx.xxx.xxx');
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ldap := LDAPOpen('xxx.xxx.xxx.xxx/dc=xxxx,dc=xxx');
    Comment fait le morceau de code pour "choisir" le dc ...
    Ma question est sans doute naive.

    Si tu as réussi depuis ça m'aiderait bcp !

    Merci,

    Fulst'

Discussions similaires

  1. [MDI][DLL] Enfant MDI dans une dll
    Par Pascal Jankowski dans le forum Composants VCL
    Réponses: 5
    Dernier message: 02/04/2004, 07h41
  2. [VStudio 6] pb avec fonctions dans une DLL
    Par MogDeChNord dans le forum MFC
    Réponses: 8
    Dernier message: 08/01/2004, 08h57
  3. [BP7] Problème chargement de ressource dans une DLL
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 26/07/2003, 21h36
  4. PB avec "self" dans une dll
    Par DiJiRiDouS dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 09h32
  5. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15

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