Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Active Directory abfragen (https://www.delphipraxis.net/79528-active-directory-abfragen.html)

Codewalker 24. Okt 2006 11:20


Active Directory abfragen
 
Hallo zusammen.

Ich suche nach 2 Funktionen um Daten aus einem Active Directory zu beziehen. Leider ist meine Suche nicht so erfolgreich gewesen, zwar gibt es einige wenige Quellen zu diesem Thema, aber ich habe nicht wirklich das richtige gefunden.

Ich suche folgende Funktionen:
1. Ich übergebe einen Domänennamen & Benutzernamen und möchte eine Liste aller Gruppen in der dieser User Mitglied ist.
2. Ich übergeben einen Rechnernamen und möchte alle Domänen, in der dieser Rechner eingetragen ist.

Hat jemand Ideen/Source dazu?

Danke und viele Grüße

Codewalker

nahpets 24. Okt 2006 11:25

Re: Active Directory abfragen
 
Schau mal unter http://www.agnisoft.com/white_papers..._directory.asp.
Eventuell hilft Dir das weiter.

Stephan

Codewalker 24. Okt 2006 12:03

Re: Active Directory abfragen
 
Sieht sehr gut aus. Leider ist es mehr allgemein gehalten. Ich werde damit mal ein wenig spielen, auch wenn ich noch nicht weiß, wie ich an Gruppen und Computer komme. Dort geht es ja mehr um die User...

Luckie 24. Okt 2006 12:09

Re: Active Directory abfragen
 
Zu 1: Guck dir mal NetUserGetGroups an:
Zitat:

The NetUserGetGroups function retrieves a list of global groups to which a specified user belongs.
Das nutzt zwar nicht ActiveDirectory, geht aber auch.

Codewalker 24. Okt 2006 12:20

Re: Active Directory abfragen
 
In welcher Datei ist die Funktion den deklariert? Delphi kennt die von Haus aus nicht und auch das Refactoring findet nichts.

Luckie 24. Okt 2006 12:21

Re: Active Directory abfragen
 
Musst du selber deklarieren oder du nutzt die Jedi Header-Übersetzungen. Ich würde es aber selber machen, weil die Jedi Header-Übersetzungen etwas viel Overhead haben für so etwas.

nahpets 24. Okt 2006 12:25

Re: Active Directory abfragen
 
Hab' gerade noch mal auf der Festplatte gesucht und dabei ein Fragment zum Thema gefunden. Eventuell kannst Du damit was anfangen. Ob sich das Teil kompilieren lässt weiß ich nicht, aber eventuell hilft es Dir beim Umsetzen deiner Idee.
Prinzipiell funktioniert das Ganze über die ADO-Schnittstelle mit SQL.

Stephan

Luckie 24. Okt 2006 12:39

Re: Active Directory abfragen
 
So sollte es gehen:
Delphi-Quellcode:
type
  NET_API_STATUS = DWORD;

type
  TGroup_Users_Info_0 = record
    grui0_name: PChar;
  end;

function NetApiBufferFree(Buffer: Pointer): NET_API_STATUS; stdcall; external 'Netapi32.dll';
function NetUserGetGroups(servername: LPCWSTR; username: LPCWSTR; level: DWORD; flags: DWORD; var bufptr: Pointer;
  prefmaxlen: DWORD; var entriesread: DWORD; var totalentries: DWORD): NET_API_STATUS; stdcall; external 'Netapi32.dll';

Codewalker 24. Okt 2006 13:13

Re: Active Directory abfragen
 
Danke für die schnellen Antworten - ich werd mich gleich an die Arbeit werfen :thumb:

renekr 6. Nov 2006 18:20

Re: Active Directory abfragen
 
Hi codewalker,
schon was gefunden wo passt?
bin auch auf der Suche nach sowas nur noch mit einer Authorizierungsabfrage gegenüber dem AD!

mfg

Codewalker 7. Nov 2006 06:47

Re: Active Directory abfragen
 
Reine Autorisierung lässt sich über eine SSPI-Unit von Luckie (er hat sie gepostet, ist aber nicht von ihm). Die Unit findest du in diesem Thread
Diese Unit beinhaltet nur eine Funktion LogonUser. Dieser gibt man Domäne, Username und Password mit und bekommt einen Boolean zurück. Damit kann man auf lokale Konten authentifizieren (Domäne = '') und auch das AD.
Man kann keinerlei genauere Einschränkungen machen (Rechner, OU, Gruppen, etc.), aber es hat bei mir gereicht, um ein WebInterface für mein Programm zu machen mit sessionbasiertem Login (über AD).

Mir fehlt auch noch die Überprüfung auf eine Gruppenmitgliedschaft, aber AD und Delphi ist nicht so einfach und es fast nur halbgare Quellen und nichts gesammeltes und erklärtes.
Ich werd noch ein Weilchen brauchen, wenn du was hast, würde ich mich über einen Tipp sehr freuen ;-)

Codewalker 7. Nov 2006 12:33

Re: Active Directory abfragen
 
Liste der Anhänge anzeigen (Anzahl: 3)
So meine Lieben.

Ich habe mal alles zusammengegrast, was ich für das AD gefunden habe und ein Mini-Projekt daraus gestrickt. Ziel war es, den Zugriff so einfach wie möglich zu halten.
Anbei das Beispiel... viel Spaß

renekr 7. Nov 2006 19:28

Re: Active Directory abfragen
 
Hi,
Vielen Dank.
habe die SSPI-Unit von Luckie genommen und es funzt wie immer alles von Luckie.

Danke für den Tip.
hat mir sehr weitergeholfen.

mfg

renekr 22. Nov 2006 10:12

Re: Active Directory abfragen
 
Hi, codewalker,

Ich bin soeben dabei einige userdaten aus dem AD in eine SQL DB zu speichern.

Ich hoffe das das du mir ev. einige Tipps geben kansnt.

- ich muss über mehrere DC und Domänen suchen.
- in deinem BSP. bekomme ich nur den name zurück,ich brauche aber alle Userdaten .

kannst du mir da ev. hilfe geben.

danke

Codewalker 22. Nov 2006 15:43

Re: Active Directory abfragen
 
Das suchen über mehrere Domänen habe ich noch nicht auf die Reihe bekommen. Du kannst natürlich nacheinandern in den Domänen suchen. Auch versuche ich immer noch eine Liste aller verfügbaren Domänen (wie im Windows-Anmeldedialog) zu bekommen, das kriege ich aber noch nicht hin.

Wenn du mal in den Quelltext schaust, habe ich eine Schleife, die alle UserObjects auflistet. Davon gebe ich nur den Namen zurück, du könntest die Schleife aber recht leicht ändern, so dass die Objekte direkt zurückgegeben werden. Dann hättest du auch Zugriff auf alle Elemente. Ich werd mir das auch noch mal anschauen, hab aber im Moment (=diese Woche :mrgreen: ) leider nicht wirklich Zeit dazu, so dass ich nichts versprechen will.

shmia 22. Nov 2006 16:31

Re: Active Directory abfragen
 
Zitat:

Zitat von Codewalker
Das suchen über mehrere Domänen habe ich noch nicht auf die Reihe bekommen. Du kannst natürlich nacheinandern in den Domänen suchen. Auch versuche ich immer noch eine Liste aller verfügbaren Domänen (wie im Windows-Anmeldedialog) zu bekommen, das kriege ich aber noch nicht hin.

Mit dem Pfad "Ads:" bekommst du "WinNT:", "NWCOMPAT:", "NDS:", "LDAP:"
Mit dem Pfad "WinNT:" bekommst du eine Liste aller Domänen.
Mit "WinNT://Domänenname" bekommst du alle User, Gruppen und Rechner dieser Domäne.
Mit "WinNT://deinrechnername" bekommst du lokale User, Gruppen & Services.

renekr 22. Nov 2006 17:42

Re: Active Directory abfragen
 
Hi,
Meisnt du diese?

Delphi-Quellcode:
function TForm2.ListUsers(Domain: String): TStringList;
var  dom : IADsContainer;
begin
 List.Clear;
 if dom <> nil then dom._Release;
 ADsGetObject('WinNT://' + Domain, IADsContainer, dom);
 dom.Filter := VarArrayOf(['user']);

 ADsEnumerateObjects(dom, AddToList);
 Result:=TStringList.Create;
 Result.Assign(List);
end;
Ich blick da net ganz durch.
Du setzt den Filter auf User,und machst füllste die lsite mit ADsEnumerateObjects.
danke

Codewalker 22. Nov 2006 17:46

Re: Active Directory abfragen
 
Die Funktion "AddtoList" die als Parameter übergeben wird extrahiert den Namen und gibt ihn in einer Stringliste aus. Ich wollte es halt möglichst einfach halten. Gebe dort einfach eine eigene Funktion an. Diese wird für jedes gefundene Userobjekt dann einmal aufgerufen und erhält das UserObjekt als Parameter.

renekr 22. Nov 2006 18:51

Re: Active Directory abfragen
 
Hi,
danke.

nur ich muss ja dann mit Disp.xy die anderen Daten herholen?

wo stehn dann die daten drin,wie mail,Department telphonenumber usw.

sorry aber ich habe bis jetzt nur mal mit LDAP getestet und da blockt mein DC bei mehr wie 1000 results ab und deswegen muss i auf die WinNt Variante schwenken.

danke dir.

Codewalker 22. Nov 2006 19:17

Re: Active Directory abfragen
 
hmmm. Das weiß ich so ad hoc auch nicht. Ich schau gleich mal rein und versuche das mal rauszubekommen. (Ansonsten sollte es im MSDN zum Interface auch eine Hilfe geben.)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 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