Ich bin schon langsam am verzweifeln. Ich versuche die
-> Benutzer einer Gruppe
und die
-> Gruppen (inkl Untergruppen) von einem Benutzer
Aus dem Active Directory zu lesen. (W2K3 Server SP2)
Ich habe schon jenstes versucht, leider bis jetzt alles ohne Erfolg. Natürlich habe ich die Delphi suche benützt,
nur haben mir die Threads nicht wirklich weitergeholfen.
ifNot rs.EOF then begin try
arrVar := rs.Fields['memberOf'].Value except
SetLength(arrVar,1);
arrVar[0] := 'is not member of a group ...'; end; end else
MessageDlg('Kein Datensatz gefunden.',mtInformation,[mbOK],0);
for i := 0 to Length(arrVar) - 1 do begin
list.Add(arrVar[i]); end;
end;
Nun müsste ich ja noch die alle Gruppen haben von denen die erhaltenen Gruppen members sind, und das natürlich rekursiv. Dazu habe ich folgendes probiert:
for i := 0 to list.count - 1 do begin
ListBox1.Items.Add(list.Strings[i]);
strTxt := list.Strings[i];
strSearch := MidStr(strTxt,Pos('=',strTxt)+1,Pos(',',strTxt)-Pos('=',strTxt)-1);
ListMemberOfR(strSearch,list2,True); end;
ifNot rs.EOF then begin try
arrVar := rs.Fields['memberOf'].Value except
SetLength(arrVar,1); end; end; for i := 0 to Length(arrVar) - 1 do begin
list.Add(MidStr(arrVar[i],Pos('=',arrVar[i])+1,Pos(',',arrVar[i])-Pos('=',arrVar[i])-1)); end;
if WithSubGroups then begin if list.count > 0 then begin
strTxt := list.Strings[list.count-1];
strSearch := MidStr(strTxt,Pos('=',strTxt)+1,Pos(',',strTxt)-Pos('=',strTxt)-1);
GetMemberOf(strSearch); end; end;
Das kleine "Problem": Bei einigen Gruppen wird das Attribut memberOf nicht gefunden, das habe ich mit try catch so weit im Griff.
Das Grosse PROBLEM: Wenn ich das Programm in der Entwiklungsumgebung ausführe wird es nach ca. 20 Sekunden wegen einer Zugriffsverletzung beendet...
?! PS: Meldung im Anhang
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
konnte ich die "Endlosschleife" stoppen und habe gesehen, dass es immer der erste Gruppe ausliest und das immer wieder. Schuld daran ist der Aufruf von "getMem(strSearch);" in getMem ...
Aber wie z.T. soll ich denn nun eine Rekursive Abfrage machen, denn so scheints ja nicht zu funktionieren.
Hat da jmd eine bessere Idee?
-> Ich mag aber nicht sämtliche Gruppen nach einem Benutzer durchsuchen, denn so komm ich auch auf keinen grünen Zweig.
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
ifNot rs.EOF then begin try
arrVar := rs.Fields['memberOf'].Value; except
SetLength(arrVar,0); end; end;
Vorher hatte ich im exception Block keine Aktion stehen. So ists nun eigentlich richtig.
Das Problem ist wohl hier ganz klar die For-Schleiffe, aber ich mit meiner Abfrage alle Members gleichzeitig erhalte, weiss ich nicht wie ich es sonst machen soll...
[EDIT]Ich hab eben mal ein paar Anhaltspunkte gesetzt. Nachdem die erste Untergruppe gefunden wird und nach deren weiteren Abfrage, gibts dann in der For Schleiffe eine Zugriffsverletztung. Denn die Schleiffe ist ja noch nicht beendet und dann starte ich ja schon wieder die selbe Prozedur -> Das kann ja nicht gut gehen!!! -> Aber wie soll ichs sonst machen? ... *verzweifel*[/EDIT]
Versteht ihr mein Problem...? ich komm einfach nicht weiter...
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?