Thema: Delphi LDAP SID ermitteln

Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#11

Re: LDAP SID ermitteln

  Alt 3. Feb 2009, 13:13
Hallo,

Du musst den Inhalt von ADOQuery1.FieldByName('objectSid').AsString byteweise lesen und nicht jeweils zwei Byte.
Der String ist 28 Zeichen lang. Die Art, wie ich es gelesen habe führt zum gleichen Ergebnis, das ich auch erhalte, wenn ich mir die ObjectSid per LDAP-Browser ausgeben lasse.
Bei Deiner Methode gehst Du her und nimmst jeweils zwei Byte um daraus eine "Hexwert" zu machen, dies ist in dem Zusammenhang nicht zielführend. Wenn Du die SID als Hexwert haben möchtest, musst Du jedes Byte in einen Hexadezimalwert umwandeln.

Also, was musst Du machen?

Code:
Die Sid zeichenweise lesen: Copy(sField,i,1)[1]
von jedem Zeichen benötigst Du den Ordinalwert: Ord(Copy(sField,i,1)[1])
Den Ordinalwert wandelst Du mit IntToHex(Ord(Copy(sField,i,1)[1]),2) in einen zwei Zeichen langen Hexadezimalwert um.
Eventuell wird es im folgenden Quelltext ja etwas deutlicher:
Delphi-Quellcode:
Var
          i : integer;
          b : Byte;
          ch : Char;
          sField : String;
          sHex : String;
          sSid : String;
begin
  sField := ADOQuery1.FieldByName('objectSid').AsString;
  sSid := '';
  for i := 1 to Length(sField) do begin
    ch := Copy(sField,i,1)[1];
    // ch := sField[i]; // <-- wäre auch eine Möglichkeit.
    b := Ord(ch);
    sHex := IntToHex(b,2);
    sSid := sSid + sHex + ' ';
    // sSid := sSid + '$' + sHex; // <-- wenn's denn mit $ vorneweg sein soll.
  end;
  showmessage(sSid);
end;
  Mit Zitat antworten Zitat