Hallo!
Ich muss die Liste der Gruppen auslesen, denen ein spezieller Benutzer angehört. Normalerweise kann ich das mit NetUserGetGroups tun, und zwar so:
Delphi-Quellcode:
function GetLDapUserGroups(UserName, DomainName : string) : TStringList;
var bufptr : Pointer;
ServerName : String;
EntriesRead : DWord;
TotalEntries : DWord;
buf : Pbyte;
PGlobalGroupInfo : PGroupInfo0;
i : integer;
begin
result:=TStringList.Create;
bufptr := nil;
NetGetAnyDCName(nil, PWideChar(DomainName), bufptr);
ServerName := PWideChar(bufptr);
Delete(ServerName, 1, 2); // remove starting '\\' from server Name
if NetUserGetGroups( PWideChar(ServerName), PWideChar(UserName), 0, buf, MAX_PREFERRED_LENGTH,
@EntriesRead, @TotalEntries)=NERR_SUCCESS then
begin
PGlobalGroupInfo := PGroupInfo0(buf);
// Store group names in list
for i:=0 to EntriesRead - 1 do
begin
result.Add(PGlobalGroupInfo^.grpi0_name);
inc(PGlobalGroupInfo);
end;
end;
NetAPIBufferFree(buf);
end;
Aber das funktioniert nicht, wenn mein Programm auf einem PC läuft, der nicht Teil der AD-Domäne ist. Es ist aber offensichtlich möglich, ich hab's mit "LDAP-Administrator" (von Softerra) e versucht, und dort funktioniert es.
Ich habe folgendes probiert:
* JclWin32.NetUserGetGroups - Nein. (Fast logisch, ich kann hier kein Benutzerpasswort angeben. Funktioniert aber gut, wenn der PC teil der Domäne ist)
* JwaLmaccess.NetUserGetLocalGroups - Nein. Auch keine Möglichkeit, ein Passwort zu übergeben
* NetApi.GetNetUserGroups - gleiche Geschichte hier
* CreateOleObject ('ADODB.Command') ... - Nein
Ich habe es gerade geschafft, das Passwort von Nicht-Domänen-PC zu überprüfen (siehe
https://stackoverflow.com/questions/...part-of-domain ). Also habe ich versucht, die obige Kommandos auszuführen wenn ich angemeldet bin. Hat auch nix gebracht.
In den
Jedi-Quellen hab ich die Funktion "JwaWinLDAP.ldap_search_sW" gefunden. Für mich riecht das vielversprechend, da ich den LDap-Token vom Anmeldevorgang weitergeben könnte. Ich habe jedoch keine Code-Beispiele für die Suche nach Benutzergruppen gefunden. Kann mir da jemand von euch damit helfen? Oder habt ihr sonst einen Tip wie das gehen könnte?
Kann mir bitte jemand in die richtige Richtung gehen?
Vielen Dank!