AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

LDAP SID ermitteln

Ein Thema von cst_07 · begonnen am 23. Jan 2009 · letzter Beitrag vom 14. Jul 2011
Antwort Antwort
hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: LDAP SID ermitteln

  Alt 14. Jul 2011, 06:17
Hi,

auch wenn dieses Thema bereits älter ist, klinke ich mich mal hier ein. Ich hatte in den letzten Tagen genau das selbe Problem. Nach langen Forschen und experimentieren habe ich die folgende Lösung gefunden. Ich poste sie mal hier, damit andere vielleicht schneller voran kommen

Ein Teil der Lösung stammt aus entsprechenden Funktionen, die ich auf der Webseite selfADSI gefunden habe (wenn ich das richtig gesehen habe, stehen die Funktionen auch im MSDN, habe aber die Quelle nicht mehr dazu). Dort stehen sie als Funktionen für das Windows Scripting (WSH) zur Verfügung, ich habe sie nach Delphi transformiert und dabei versucht, sie so original wie möglich zu lassen Gerade bei den Funktionen Byte4ToLong und Byte6ToLong ist damit natürlich noch Optimierungs-Potential vorhanden.

Delphi-Quellcode:
//-----------------------------------------------------------------------------------------------
// Funktionen aus selfADSI.de: http://www.selfadsi.org/deep-inside/microsoft-sid-attributes.htm
// Autor: ??? übersetzt von Jo.Hoyer
// Datum: 14.07.2011 06:38:17
//----------------------------------------------------------------------------------------------
Function Byte4ToLong(b1, b2, b3, b4 : Byte) : Cardinal;
begin
  //'converts 4 bytes to the according lang integer value
  Result := b1;
  Result := Result * 256 + b2;
  Result := Result * 256 + b3;
  Result := Result * 256 + b4;
End;


Function Byte6ToLong(b1, b2, b3, b4, b5, b6 : Byte) : Cardinal;
begin
  // converts 6 bytes to the according lang integer value
    Result := b1;
    Result := Result * 256 + b2;
    Result := Result * 256 + b3;
    Result := Result * 256 + b4;
    Result := Result * 256 + b5;
    Result := Result * 256 + b6;
End;

Function HexStrToSID(strSid : WideString) : string;
var
  i : Integer;
  data : Array of Byte;
  offset : Integer;
  blockCount : Integer;
  nLen : Integer;
begin
  //converts a raw SID hex string to the according SID string (SDDL)
  nLen := Length(strSid);
  nLen := nLen div 2 - 1;
  SetLength(data,nLen);
  For i := 0 To Length(data) do begin
    data[i] := StrToInt('$' + Copy(strSid, 2*i + 1, 2));
  end;
  Result := 'S-' + IntToStr(data[0]) + '-' + IntToStr(Byte6ToLong(data[2], data[3], data[4], data[5], data[6], data[7]));

  blockCount := data[1];
  For i := 0 To blockCount - 1 do begin
    offset := 8 + 4 * i;
    Result := Result + '-' + IntToStr(Byte4ToLong(data[offset+3], data[offset+2], data[offset+1], data[offset]));
  end;
End;

//------------------------------------------------------------------------------------------------
// Übersetze SID aus LDAP-Verzeichnis
// Autor: jo.hoyer
// Datum: 08.07.2011 09:10:26
//------------------------------------------------------------------------------------------------
function GetSIDString(aObjectSID : OleVariant): WideString;
var
  i : Integer;
  nMin : Integer;
  nMax : Integer;
  nDim : Integer;
  cWStr : WideString;
begin
  nDim := VarArrayDimCount(aObjectSID);
  nMin := VarArrayLowBound(aObjectSID, nDim);
  nMax := VarArrayHighBound(aObjectSID,nDim);
  cWStr := '';
  for i := nMin to nMax do begin
    cWStr := cWStr + IntToHex(VarArrayGet(aObjectSID, i),2);
  end;
  Result := HexStrToSID(cWStr);
end;
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:23 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