Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Prism Active Directory mit LDAP auslesen (https://www.delphipraxis.net/60398-active-directory-mit-ldap-auslesen.html)

Darth_Metaler 6. Jan 2006 11:48


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:
// 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;
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.

Bedank mich im voraus schon für eure antworten, ich komm da echt nich mehr weiter :(

MfG
Pascal

MathiasSimmack 6. Jan 2006 12:17

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));
  }
}

Darth_Metaler 6. Jan 2006 13:11

Re: Active Directory mit LDAP auslesen
 
danke, war schon ein sehr guter ansatz :)

nur... unter Delphi ist die Syntax der Funktion
Delphi-Quellcode:
function Invoke(methodName: string; args: array of TObject): TObject;
und wenn ich die Funktion so aufrufe:
Delphi-Quellcode:
groups := dcCN.Invoke('groups', []);
bekomme ich nichts zurück... weiß jemand was ich für args angeben muss :?:

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;

MathiasSimmack 6. Jan 2006 13:29

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:
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
Hilft dir das?


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.

Darth_Metaler 6. Jan 2006 13:54

Re: Active Directory mit LDAP auslesen
 
hmm nee wenn ich das mit
Delphi-Quellcode:
New(array[0] of TObject);
probiere, gehts nich wirklich. Und wenn ich nil angebe, auch net... ich hab keine Ahnung, woran das liegen könnte :(

faux 6. Jan 2006 13:55

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

Darth_Metaler 6. Jan 2006 14:05

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 ...

MathiasSimmack 6. Jan 2006 14:11

Re: Active Directory mit LDAP auslesen
 
Hast du die Schreibweise von Groups und User beachtet?

MathiasSimmack 6. Jan 2006 14:14

Re: Active Directory mit LDAP auslesen
 
Zumindest bei "User" solltest du das U groß schreiben, wenn du bei der if-Bedingung
Zitat:

Delphi-Quellcode:
if(dcCN.SchemaClassName = 'user') then begin

bleiben willst. Ansonsten spielt es keine Rolle, wie ich gerade mit
Code:
object groups = x.Invoke("groups");
festgestellt habe.

Darth_Metaler 6. Jan 2006 14:21

Re: Active Directory mit LDAP auslesen
 
ich hab das Problem einfach mit
Delphi-Quellcode:
if(dcCN.SchemaClassName.ToLower = 'user') then begin
umgangen ^^ aber er listet trotzdem nichts auf :shock:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz