0

ObjectSID を使用して LDAP を使用し、PHP または任意の言語でオブジェクトを照会するにはどうすればよいですか? 私は本当に makie の意味がなく、バイナリであることを除いて、使用されている ObjectSID のソースを実際に説明していない「解決策」をたくさん見つけました。

たとえば、最初の検索を行って、後で使用するために ObjectSID を取得しました。問題は、返された ObjectSID がバイナリのように見えることです。PHP の ldap_search を使用してバイナリを LDAP に戻すにはどうすればよいですか?

値を16進数に変換する必要があることを読んだので、実行しましたbin2hex($ObjectSID)が、LDAPブラウザで表示されるS-1-5-21-1851920287-2048563450-226493979-1120値は、結果の値と一致しません:0105000000000005150000009f0f626efa981a7a1b06800d60040000

誰でも明確な答えを持っていますか?

4

1 に答える 1

0

わかりました、次の答えが見つかりました:

// Returns the textual SID
public function bin_to_str_sid($binsid) 
{
    $hex_sid = bin2hex($binsid);
    $rev = hexdec(substr($hex_sid, 0, 2));
    $subcount = hexdec(substr($hex_sid, 2, 2));
    $auth = hexdec(substr($hex_sid, 4, 12));
    $result    = "$rev-$auth";

    for ($x=0;$x < $subcount; $x++) {
        $subauth[$x] = 
            hexdec($this->little_endian(substr($hex_sid, 16 + ($x * 8), 8)));
        $result .= "-" . $subauth[$x];
    }

    // Cheat by tacking on the S-
    return 'S-' . $result;
}

// Converts a little-endian hex-number to one, that 'hexdec' can convert
public function little_endian($hex) 
{
    $result = "";

    for ($x = strlen($hex) - 2; $x >= 0; $x = $x - 2) 
    {
        $result .= substr($hex, $x, 2);
    }
    return $result;
}


// This function will convert a binary value guid into a valid string.
public function bin_to_str_guid($object_guid) 
{
    $hex_guid = bin2hex($object_guid);
    $hex_guid_to_guid_str = '';
    for($k = 1; $k <= 4; ++$k) {
        $hex_guid_to_guid_str .= substr($hex_guid, 8 - 2 * $k, 2);
    }
    $hex_guid_to_guid_str .= '-';
    for($k = 1; $k <= 2; ++$k) {
        $hex_guid_to_guid_str .= substr($hex_guid, 12 - 2 * $k, 2);
    }
    $hex_guid_to_guid_str .= '-';
    for($k = 1; $k <= 2; ++$k) {
        $hex_guid_to_guid_str .= substr($hex_guid, 16 - 2 * $k, 2);
    }
    $hex_guid_to_guid_str .= '-' . substr($hex_guid, 16, 4);
    $hex_guid_to_guid_str .= '-' . substr($hex_guid, 20);

    return strtoupper($hex_guid_to_guid_str);
}
于 2012-10-30T16:08:05.283 に答える