Einzelnen Beitrag anzeigen

Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#1

Gruppen eines Users aus ActiveDirectory auslesen - von PC der NICHT in Domain ist

  Alt 11. Jan 2018, 10:02
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!
  Mit Zitat antworten Zitat