Hallo,
ich bins mal wieder
Ich habe es mittlerweile geschafft eine Verbindung zum AD herzustellen und gewisse Daten zu ermitteln.
Code:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ActiveDs_TLB,
ActiveX, ComCtrls, adshlp;
type
TForm1 = class(TForm)
Button1: TButton;
TreeView1: TTreeView;
procedure Button1Click(Sender: TObject);
procedure StartConnection;
private
{ Private-Deklarationen }
VDomain, VUser, VPasswort : string;
Dom : IADsContainer;
public
{ Public-Deklarationen }
procedure AddToTree(disp: IADs);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.AddToTree(disp: IADs);
begin
TreeView1.Items.Add(nil, disp.Get('Description'));
end;
procedure TForm1.StartConnection;
begin
if
Dom <> nil then
Dom := nil;
ADsOpenObject('
WinNT://' + VDomain, VUser, VPasswort, 1, IADsContainer,
Dom);
Dom.Filter := VarArrayOf(['user']);
TreeView1.Items.Clear;
ADsEnumerateObjects(
dom, AddToTree);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
VDomain := 'domain.local';
VUser := 'Administrator';
VPasswort := 'kennwort4711!';
StartConnection;
end;
end.
Folgende Probleme stellen sich mir jetzt.
Ich übergebe die Werte VDomain, VUser, VPasswort an den Verbindungsaufruf.
Der Rechner an dem ich sitze ist in der Domäne xyz.local. Ich habe einen zusätzlichen Domänencontroller (VMWare) mit der Domäne domain.local.
Von domain.local kann ich keine Daten auslesen. Von xyz.local kann ich allerdings Daten auslesen. Irgendwie scheint die Authentifizierung nicht zu funktionieren. Es scheint als würde immer die Windows Authentifizierung verwendet werden.
Mein zweites Problem ist, dass ich keine "Unique Identifier" habe bzw. weiß ich nicht wie dieses Feld heißt. Google erzählte mir, dass ich auf UID zugreifen kann. Über ADSI bekomme ich eine Fehlermeldung. Wenn ich allerdings über
ADO und ADOQuery arbeite und
Code:
SELECT uid FROM LDAP://
dc=domain,
dc=local WHERE objectClass = 'user' and objectCategory = 'person'
verwende, kann ich das Feld uid auslesen. Allerdings ist es immer leer. Ich würde jetzt eine eindeutige ID aus LDAP brauchen um die Benutzer in eine
SQL Datenbank zu schreiben und sie eindeutig zu identifizieren. (Evtl. werden die Benutzer mit LDAP synchronisiert).
lg
MIK80
PS: DeranderMicha hat mir bereits sehr viel weitergeholfen. Ich möchte mich hier nochmal bei ihm bedanken.