AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Active Directory Gruppen in Gruppen ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Active Directory Gruppen in Gruppen ermitteln

Ein Thema von cst_07 · begonnen am 28. Mai 2008 · letzter Beitrag vom 15. Jun 2012
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Remko
Remko

Registriert seit: 10. Okt 2006
Ort: 's-Hertogenbosch, Die Niederlande
222 Beiträge
 
RAD-Studio 2010 Arc
 
#11

Re: Active Directory Gruppen in Gruppen ermitteln

  Alt 2. Jun 2008, 23:52
Sure, I made you a short sample

Delphi-Quellcode:
uses JwaWindows; // Jedi Apilib with New Include model

var
  AdsPath: WideString;
  ADGroup: IADSGroup;
  GroupMember: IADS;
  GroupType: OleVariant;
  hr: HResult;
  Enum: IEnumVariant;
  Fetched: Cardinal;
  ResultItem: OleVariant;
begin
  // an Adspath always starts with LDAP:// or optionally LDAP://SERVERNAME
  AdsPath := 'LDAP://CN=Domain Admins,CN=Users,DC=rmi,DC=local';
  ADGroup := nil;

  // Bind to the object
  hr := ADsGetObject(PWideChar(AdsPath), IID_IADSGROUP, Pointer(ADGroup));
  Memo1.Lines.Add(Format('hr=%d (%s) ', [hr, SysErrorMessage(GetLastError)]));
  // Check for errors!
  if failed(hr) then
  begin
    // raise exception...
    Exit
  end;

  // Enumerate the members
  Enum := ADGroup.Members._NewEnum as IEnumVariant;
  Enum.Reset;
  Enum.Next(1, ResultItem, Fetched);

  while Fetched = 1 do
  begin
    GroupMember := IDispatch(ResultItem) as IADS;

    // is the member a user?
    if GroupMember.Class_ = 'userthen
    begin
      with (GroupMember as IADSUser) do
      begin
        Memo1.Lines.Add(Format('user: %s', [Get('displayName')]));
      end;
    end
    // is the member a group?
    else if GroupMember.Class_ = 'groupthen
    begin
      with (GroupMember as IADSGroup) do
      begin
        // you should really wrap retreiving AD properties in try..except
        Memo1.Lines.Add(Format('user: %s', [Get('displayName')]));
        GroupType := Get('groupType');

        if GroupType = ADS_GROUP_TYPE_GLOBAL_GROUP or
          ADS_GROUP_TYPE_SECURITY_ENABLED then
        begin
         // Do something based on group type
        end;
      end;
    end;

    // Next
    Enum.Next(1, ResultItem, Fetched);

  end;
end;
  Mit Zitat antworten Zitat
fatality

Registriert seit: 2. Mai 2012
14 Beiträge
 
#12

AW: Active Directory Gruppen in Gruppen ermitteln

  Alt 11. Mai 2012, 09:36
dies ist eigentlich dass was ich suche.
Ich bräuchte es nur ein bisschen anders. Und zwar ( wie ich schon irgendwo ausführlich im Forum geschrieben habe, eigentlich ist dies der optimale Thread, der Admin kann den anderen Beitrag löschen) geht es bei mir darum die Gruppe herauszufinden welcher meine Gruppe zugeordnet ist. Also ich bin in der gruppe "A" und diese ist der Gruppe "B" zugeordnet.Ich kann ohne Probleme herausfinden dass ich zu der Gruppe "A" gehöre, jedoch ist mein Problem dass ich nicht weiß wie ich die gruppe "B" (also eine Art "übergeordnete" Gruppe meiner Gruppe) bekommen kann. Gibt es da auch einen Weg ?

LG Semir
  Mit Zitat antworten Zitat
fatality

Registriert seit: 2. Mai 2012
14 Beiträge
 
#13

AW: Active Directory Gruppen in Gruppen ermitteln

  Alt 15. Mai 2012, 11:07
keiner eine Ahnung wie ich vorgehen könnte ?

LG Semir
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#14

AW: Active Directory Gruppen in Gruppen ermitteln

  Alt 15. Mai 2012, 15:22
Ich hatte mal so was ähnliches, hab das so gelöst :
Damit bekomme ich alle Gruppen und deren "Untergruppen", die der Nutzer (oder das Objekt) angehört

var ADGroupList : TStringList; Aufruf mit z.Bsp.: getGroups('LDAP://CN=Username,OU=Second Level,OU=First Level,DC=domain,DC=co,DC=de');
Delphi-Quellcode:
procedure TWebModule1.getGroups(s:String);
var Obj,Grps : Variant;
tempStr : String;
i : Integer;
begin
  try
    Obj := GetObject(s);
  except
  //sicherstellen das Obj nicht leer
  //......
  end;
  try
    Grps := Obj.Get('MemberOf');
    if VarType( Grps ) and varArray <> varArray then
    Grps := VarArrayOf( [ Grps ] );
    for i := VarArrayLowBound( Grps, 1 ) to VarArrayHighBound( Grps, 1) do
    begin
      tempStr := Grps[ i ];
      if ADGroupList.IndexOf( tempStr ) = -1 then
      begin
        ADGroupList.Add(tempStr);
        GetGroups('LDAP://' + tempStr);
      end;
    end;
  except
  //........
  end;
end;
Christian Wahl
me, myself and I, die lustigen Drei !!

Geändert von chrisw (15. Mai 2012 um 15:58 Uhr)
  Mit Zitat antworten Zitat
fatality

Registriert seit: 2. Mai 2012
14 Beiträge
 
#15

AW: Active Directory Gruppen in Gruppen ermitteln

  Alt 15. Mai 2012, 16:25
Hallo Chris,

danke erstmal für die Antwort. Ich hätte noch eine Frage.
Muss ich am Übergabeparameter noch was ändern ('LDAP://CN=Username,OU=Second Level,OU=First Level,DC=domain,DC=co,DC=de'), bzw. die Domain anpassen oder ähnliches ?
Denn wenn ich es so ausführe bekomme ich folgenden fehler " Eine referenzauswertung wurde vom Server zurückgesendet"

(sorry für die blöde frage, hab bis jetzt nur mit ADSI versucht das Problem zu lösen, und erst seit kurzem herausgefunden dass das was ich will nur über LDAP geht, und da bin jetzt ganz neu dabei )

LG Semir
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#16

AW: Active Directory Gruppen in Gruppen ermitteln

  Alt 16. Mai 2012, 07:18
Nein, eigentlich solltest du nur deine Parameter eintragen.
(bei mir ist das LDAP://CN=testuser,OU=Users,DC=mar,DC=op für die Dömäne mar.op und den User testuser).
Ich schliesse aber nicht aus, dass du Adminrechte brauchst, um die Funktion auszuführen.

Christian
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
fatality

Registriert seit: 2. Mai 2012
14 Beiträge
 
#17

AW: Active Directory Gruppen in Gruppen ermitteln

  Alt 16. Mai 2012, 08:54
Hi chris,

Also ich bin der User "sussa" und bin in der Domäne "acp", und den String hab ich dann folgendermaßen geändert :
getGroups('LDAP://CN=sussa,OU=Users,DC=acp')

Ich verfüge über Adminrechte ( kann auch die Zuordnung mit externen Programmen auslesen)

Und wie müsste ich den Parameter ändern wenn ich alle Gruppen von der Domäne auslesen möchte ?
Ich muss alle Gruppen von der Domäne auslese, dann die Gruppen der Gruppen, und da müsste ich dann schauen ob der Windows Benutzer in dieser 2. Gruppe ist.

Wäre auch dankbar für einen Link wo ich was von dieser Problematik finden könnte, im Forum bin ich leider nicht fündig geworden

LG Semir
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#18

AW: Active Directory Gruppen in Gruppen ermitteln

  Alt 16. Mai 2012, 10:52
Ich denke es müsste LDAP://CN=sussa,CN=Users,DC=acp heissen. Außerdem sollte die Domäne eigentlich aus mind. 2 DC bestehen (z.Bsp. test.de ist dann DC=test, DC=de) und es müsste eigentlich auch eine OU vorhanden sein.

Auf jeden Fall deutet die Fehlermeldung "Eine Referenzauswertung wurde vom Server zurückgesendet" darauf hin, dass der LDAP-String falsch ist. Sie tritt also schon beim ersten try except auf.

Christian
Christian Wahl
me, myself and I, die lustigen Drei !!

Geändert von chrisw (16. Mai 2012 um 11:13 Uhr)
  Mit Zitat antworten Zitat
fatality

Registriert seit: 2. Mai 2012
14 Beiträge
 
#19

AW: Active Directory Gruppen in Gruppen ermitteln

  Alt 14. Jun 2012, 16:00
Hi,

also ich hab die Daten richtig eingesetzt und bei mir funzt es auch. Wenn ich nun jedoch in der Produktivumgebung versuche geht es nicht. Der Unterschied ( oder das Problem) ist folgendes :
In der Produktivumgebung bin ich in einer subdomain und versuche aber die Gruppen von der (haupt)Domain zu lesen. Durch LDAP habe ich da aber leider keinen Zugriff. Wenn ich es aber mit WINT mache kann ich schon auf die Gruppen der Domain zugreifen jedoch habe ich dann ein anderes Problem. Am Anfang hat auch alles in der Produktivumgebung mit WINT funktioniert. Dann wurde jedoch der TYp der Gruppen (zwecks Verwaltung) von "Global" auf "Universal" geändert und seit dem kann ich die Members der Gruppen nicht mehr auslesen. Da ich, wie gesagt, die ersten Versuche mit WINT gemacht habe, aber dann darauf gestoßen bin dass man nur mit LDAP verschachtelte Gruppen auslesen kann, habe ich mir gedacht dass ich die die Abfrage auf LDAP umstelle, jedoch geht es da dann überhaupt nicht, bzw. kann ich die localen Gruppen aus der subdomain lesen jedoch aber nicht nicht die Gruppen aus der (haupt)DOmain

Meine Frage wäre also ob jemand eine Info hat wieso ich die Members von universellen Gruppen nicht auslesen kann(wenn einzelne Gruppen auf Global geändert werden findet das PRogramm dann auch die richtige Zugehörigkeit) oder wie ich die Mitglieder bekommen kann

LG

Geändert von fatality (15. Jun 2012 um 09:32 Uhr)
  Mit Zitat antworten Zitat
fatality

Registriert seit: 2. Mai 2012
14 Beiträge
 
#20

AW: Active Directory Gruppen in Gruppen ermitteln

  Alt 15. Jun 2012, 10:45
Hat sich erledigt. Nachdem ich den Kunden überzeugen konnte Active Explorer auf den Rechner zu packen und an den "distinguishedname" gekommen bin, passt alles über LDAP.
Vielen Dank an chrisw

LG
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:59 Uhr.
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