![]() |
Active Directory mit LDAP auslesen
Hi Delphi-User
Ich habe folgendes Problem: ich möchte mit ASP.NET das Active Directory über LDAP auslesen. Ich bin soweit, dass ich bestimmte Organization Units angezeigt bekomme und dann die Inhalte dieser Organization Units auslesen kann.
Delphi-Quellcode:
// Button zur Anmeldung
procedure TWebForm1.Button1_Click(sender: System.Object; e: System.EventArgs); var DE, child: DirectoryEntry; Arr: ArrayList; begin DE := DirectoryEntry.Create('LDAP://servername/OU=Test Organisation,DC=...,DC=...,DC=DE', User.Text, Passwort.Text); Arr := ArrayList.Create; for child in DE.Children do Arr.Add(TObject(child.name)); OUList.DataSource := Arr; OUList.DataBind; end;
Delphi-Quellcode:
Jetzt möchte ich wissen, wie ich mit LDAP rausfinden kann, in welchen Gruppen ein bestimmter User ist, dass er z.B. bei Administrator Admin und User und bei Max nur User zurückgibt. Das soll er unter ASP.NET in einer ASP-ListBox ausgeben.
// Button für Inhalte einer OU
procedure TWebForm1.Button2_Click(sender: System.Object; e: System.EventArgs); var DE, dcOU, child: DirectoryEntry; Arr: ArrayList; begin DE := DirectoryEntry.Create('LDAP://servername/OU=Test Organisation,DC=...,DC=...,DC=DE', User.Text, Passwort.Text); dcOU := DE.Children.Find(OUList.SelectedValue); Arr := ArrayList.Create; for child in dcOU.Children do Arr.Add(TObject(child.name)); ListBox1.DataSource := Arr; ListBox1.DataBind; end; Bedank mich im voraus schon für eure antworten, ich komm da echt nich mehr weiter :( MfG Pascal |
Re: Active Directory mit LDAP auslesen
Ich arbeite nicht mit Active Directory, sondern ich greife die Benutzer, Gruppen und Dienste mit dem "WinNT://"-Präfix ab, aber vllt. hilft es dir trotzdem weiter. Ist aber CSharp. "x" ist ein DirectoryEntry, den ich ausgelesen habe. Handelt es sich dabei um einen Benutzer, dann kann ich so die Gruppen ermitteln, in denen der Benutzer ist:
Code:
if (x.SchemaClassName == "User")
{ object groups = x.Invoke("Groups"); foreach (object group in (IEnumerable)groups) { DirectoryEntry groupEntry = new DirectoryEntry(group); MessageBox.Show(String.Format("Benutzer {0} ist Mitglied der Gruppe {1}", x.Name, groupEntry.Name)); } } |
Re: Active Directory mit LDAP auslesen
danke, war schon ein sehr guter ansatz :)
nur... unter Delphi ist die Syntax der Funktion
Delphi-Quellcode:
und wenn ich die Funktion so aufrufe:
function Invoke(methodName: string; args: array of TObject): TObject;
Delphi-Quellcode:
bekomme ich nichts zurück... weiß jemand was ich für args angeben muss :?:
groups := dcCN.Invoke('groups', []);
danke im voraus MfG Pascal [[edit]] hier die Umsetzung:
Delphi-Quellcode:
procedure TWebForm1.Button3_Click(sender: System.Object; e: System.EventArgs);
var DE, dcOU, dcCN, groupEntry: DirectoryEntry; group, groups: TObject; Arr : ArrayList; begin DE := DirectoryEntry.Create('LDAP://servername/OU=Test Organisation,DC=...,DC=...,DC=DE', User.Text, Passwort.Text); dcOU := DE.Children.Find(OUList.SelectedValue); // z.B. OU=USERS dcCN := dcOU.Children.Find(ListBox1.SelectedValue); // z.B. CN=Max Mustermann (mitglied der TestGruppe) Arr := ArrayList.Create; if(dcCN.SchemaClassName = 'user') then begin groups := dcCN.Invoke('groups', []); for group in IEnumerable(groups) do begin groupEntry := DirectoryEntry.Create(group); Arr.Add(groupEntry.Name); end; end; ListBox2.DataSource := Arr; ListBox2.DataBind; end; |
Re: Active Directory mit LDAP auslesen
*grins* Wofür gibt´s denn den Reflector? Ich habe gerade mal meine CSharp-Exe geladen und mir den Code als Delphi anzeigen lassen:
Delphi-Quellcode:
Hilft dir das?
if (entry1.SchemaClassName = 'User') then
begin obj1 := entry1.Invoke('Groups', New(array[0] of TObject)); for obj2 in (obj1 as IEnumerable) do begin entry2 := DirectoryEntry.Create(obj2); MessageBox.Show(string.Format('Benutzer {0} ist Mitglied der Gruppe {1}', entry1.Name, entry2.Name)) end end Edit: Beachte auch die Schreibweise von "User" und "Groups". Vllt. spielt´s ja auch keine Rolle, aber im Zweifel würde ich den ersten Buchstaben groß schreiben. |
Re: Active Directory mit LDAP auslesen
hmm nee wenn ich das mit
Delphi-Quellcode:
probiere, gehts nich wirklich. Und wenn ich nil angebe, auch net... ich hab keine Ahnung, woran das liegen könnte :(
New(array[0] of TObject);
|
Re: Active Directory mit LDAP auslesen
Hallo!
Liegts jetzt daran, dass du C# nicht in Delphi.NET umsetzen kannst, oder der Code nicht funktioniert? :gruebel: Grüße Faux |
Re: Active Directory mit LDAP auslesen
ich denk ma eher dass der code nicht funktioniert, weil den C# code hab ich ja umsetzen können, wurde auch compiliert und ich kann die datei ausführen. Ich bekomm nur keine Gruppen bei einem bestimmten User aufgelistet ...
|
Re: Active Directory mit LDAP auslesen
Hast du die Schreibweise von Groups und User beachtet?
|
Re: Active Directory mit LDAP auslesen
Zumindest bei "User" solltest du das U groß schreiben, wenn du bei der if-Bedingung
Zitat:
Code:
festgestellt habe.
object groups = x.Invoke("groups");
|
Re: Active Directory mit LDAP auslesen
ich hab das Problem einfach mit
Delphi-Quellcode:
umgangen ^^ aber er listet trotzdem nichts auf :shock:
if(dcCN.SchemaClassName.ToLower = 'user') then begin
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz