objectSID以非标准格式返回

时间:2014-05-16 03:35:58

标签: active-directory jndi ldap-query

我使用JNDI从组目录服务器查询Active目录:

Hashtable<String, Object> env = new Hashtable<String, Object>();
env.put(Context.INITIAL_CONTEXT_FACTORY,
        "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://" + serverUrl + "/");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, userName + "@" + currentDomain);
env.put(Context.SECURITY_CREDENTIALS, credentials);
env.put("java.naming.ldap.attributes.binary", "objectSid");

// Create the initial context
DirContext ctx = new InitialDirContext(env);

当我返回objectSid并将byte []转换为十六进制字符串时,我得到sids,如:

HEX: ACED0005757200025B42ACF317F8060854E002000078700000001001020000000000052000000025020000
SID: S-172-23445241858-4088152667-134674455-188500-7370752-17825792-2-537198592-620756992

这导致字节0的值为172,字节1的值为237,以及解析4字节子权限结束时的3个字节。

字节0应始终为1,字节2应为4字节子权限标识符的数量(在本例中为9)。由于我无法在预期和实际之间进行正确映射,因此我无法弄清楚发生了什么。

我在那里投注了一些我正在制作的新手错误,但无法弄清楚它可能是什么;我的希望是那里有人经历过这个,可以告诉我它是什么!

1 个答案:

答案 0 :(得分:0)

这实际上不是LDAP问题,而是编写对象的问题我正在回到字节数组。教训是,调试更难......