我们有一个附加了 80 多个其他“受信任”域的域。这意味着我们的一些组是交叉链接的,与来自一个域的用户,在另一个域的组中,等等。我编写了一个脚本,它从一个域上的一组特定组创建用户列表,但有些他们来自其他域,所以我只得到了外国标识符。我需要将此链接到其他域,但我需要每个域的 SID。
是否有与 Win32 的DsEnumerateDomainTrusts等效的 PHP ?我不想手动写出所有 SID,然后在添加新域或删除旧域时手动更新它们。
我们有一个附加了 80 多个其他“受信任”域的域。这意味着我们的一些组是交叉链接的,与来自一个域的用户,在另一个域的组中,等等。我编写了一个脚本,它从一个域上的一组特定组创建用户列表,但有些他们来自其他域,所以我只得到了外国标识符。我需要将此链接到其他域,但我需要每个域的 SID。
是否有与 Win32 的DsEnumerateDomainTrusts等效的 PHP ?我不想手动写出所有 SID,然后在添加新域或删除旧域时手动更新它们。
您可以对域的 System 容器中的trustedDomain对象执行 LDAP 查询。对我来说,域的 sid 在securityIdentifier
属性中。
这是我的解决方案:
function ldap_sidconvert($ldapbytes)
{
$d_proc=unpack("H*",$ldapbytes);
$d_proc['hex1']=str_split(substr($d_proc[1],-24),2);
foreach ($d_proc['hex1'] as $key=>$value)
{
$d_proc['hex2'][floor($key/4)][]=$value;
}
foreach ($d_proc['hex2'] as $key=>$value)
{
$d_proc['hex3'][$key]=hexdec(implode(array_reverse($d_proc['hex2'][$key],FALSE)));
}
return implode("-",$d_proc['hex3']);
}
然后您可以通过将 securityidentifier 字段的值传递给它来调用它:
ldap_sidconvert($domains[0]['securityidentifier'][0])
在此示例中,它只是查看列表中的第一个域,根据需要将第一个 0 替换为 1,2,3... 等。这只转换最后 24 个十六进制数字,我不确定如何处理前 24 个,但我相信它们无论如何都不是唯一的,所以它们不应该是必需的。
这可能不是最好的方法,所以我很高兴接受对我的编码的批评,但希望它会在未来对某人有所帮助。
这可能是一个有用的参考:http ://en.wikipedia.org/wiki/Security_Identifier#Machine_SIDs