Announcement

Collapse
No announcement yet.

ADSI - LDAP(nicht AD) auslesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADSI - LDAP(nicht AD) auslesen

    Hallo,
    ich habe eine Frage, und zwar kann ich problemlos Objekt-Attribute im AD auslesen, jedoch muss ich auch unseren LDAP Server auslesen.
    Ich benutze für den LDAP-Zugriff folgendes Konstrukt:

    Code:
    procedure TForm1.Button3Click(Sender: TObject);
    var obj : IAds;
    aADSUser: IADSUser;
    LDAPSTRING: widestring;
    begin
       CoInitialize(nil);
    
       LDAPSTRING := 'LDAP://xx.xxxxx.xxx/uid=mustermann,ou=mitarbeiter,ou=people,dc=xxx,dc=xxx';
       ADsGetObject(PWideChar(LDAPSTRING), IAds, Obj);
       
       showMessage(obj.Get('mail'));
    
       obj := nil;
    end;
    Das funktioniert auch einfwandfrei, nur leider findet er im Verzeichnischache kein mail-Attribut. Dies liegt wohl daran, dass ich mich nicht authentifiziert habe, sprich einen annonymen Bind gemacht habe. Hatte jemand schon ein ähnliches Problem und kann mir helfen?

    Vielen Dank
    jack

  • #2
    Ich konnte mein Problem lösen. Mit Hilfe dieses Threads von Herrn Kosch:
    http://entwickler-forum.de/archive/i...p/t-35289.html

    Hier meine Lösung:

    Code:
    procedure TForm1.Button5Click(Sender: TObject);
    var
      aADsODSObj : IADsOpenDSObject;
      sADSPath : String;
      aDsp : OleVariant;
      attArray: array of Variant;
    
      function GetObject(const Name : String): IDispatch;
      var
        Moniker : IMoniker;
        Eaten : Integer;
        BindContext : IBindCtx;
        Dispatch : IDispatch;
      begin
        OleCheck(CreateBindCtx(0, BindContext));
        OleCheck(MkParseDisplayName(BindContext, PWideChar(WideString(Name)), Eaten, Moniker));
        OleCheck(Moniker.BindToObject(BindContext, NIL, IDispatch, Dispatch));
        Result := Dispatch;
      end;
    
    begin
      aADsODSObj := GetObject('LDAP:') as IADsOpenDSObject;
      sADSPath := 'LDAP://xx.xxxxxxxx.xxx/uid=user,ou=Mitarbeiter,ou=people,dc=xxxxxxx,dc=xxx';
      Memo1.Lines.Add(sADSPath);
      Memo1.Lines.Add('---');
      aDsp := aADsODSObj.OpenDSObject(sADSPath,EditUser.Text,EditPasswd.Text,0);
    
    
      Memo1.Lines.Add('OpenDSObject war erfolgreich');
      Memo1.lines.Add(aDsp.Name);
      Memo1.lines.Add(aDsp.maildrop);
    
      attArray := aDSp.GetEx('mail');
      Memo1.lines.Add(attArray[0]);
      Memo1.lines.Add(attArray[1]);
     
    end;
    Mit dieser Lösung kann ich nun alle Attribute im LDAP auslesen, nicht nur die für den Annonymus User.

    Man muss natürlich auf seiner Form noch paar Komponenten adden, wie EditUser, EditPasswd oder Memo1.

    Hoffe es hilft jemandem.
    Viele Grüße
    jack

    Comment

    Working...
    X