通过JNDI LDAP-存在将用户作为成员添加为AD组



我已经使用JNDI LDAP添加了一个新用户。而且我也可以通过编程方式启用帐户。但是,如果我尝试将用户添加到广告组中,我会发现和错误,这表明已经存在一个条目。请参阅下面的结果。

"域名"是组名称,但看来我试图重新添加该组。这是我的代码。

我在论坛上发现的任何示例都类似。

public void addUserToGroup() throws NamingException {
   String groupDN = "CN=Domain Admins,CN=Users,DC=mydomain,DC=org";
// Create the objectclass
    Attribute objClasses = new BasicAttribute("objectClass");
    objClasses.add("top");
    objClasses.add("group");
// Create a entry set of attributes
    Attributes attrs = new BasicAttributes();
    Attribute member = new BasicAttribute("member", getUserDN("jdoe"));
// Add these to the container
    attrs.put(objClasses);
    attrs.put(member);
    try {
        context.modifyAttributes(groupDN, DirContext.ADD_ATTRIBUTE, attrs);
} catch (Exception e) {
   LOGGER.severe("Failed to Add User to Domain Admins -- ");
}
}
public String getUserDN(String aUsername) {
    return "CN=" + aUsername + ",CN=" + "Users,DC=mydomain,DC=org";
}

这是结果的异常...

javax.naming.NamealReadyBoundException:[LDAP:错误代码68-00000562:UPDERR:DSID -031A11E2,问题6005(entry_exists(,数据0 0];其余名称'cn =域名,CN =用户,dc = myDomain,dc = org'

您正在添加一个属性,该属性具有在对象上已经存在的值: objectClass。当您使用DirContext.ADD_ATTRIBUTE时,LDAP服务器假设新值,而不是替换现有值。

为什么要将其添加到修改中?仅添加member属性就足够了。尝试没有objectClass属性,它应该可以工作。

已经有一段时间以来,我与jndi一起工作(这是一个20岁的图书馆(,但我仍然可以在这里提供。

ldap错误通常意味着他们所说的话,所以我毫不怀疑错误完全意味着它所说的内容(条目已经存在(。当然,这与您的代码相矛盾,这似乎只想进行ldapModify操作。

我想看看"电线上"会发生什么,那么如何使用tcpdump或wireshark抓住LDAP协议,然后检查它是否实际发送mod或添加操作?从理论上讲,此错误68只能来自添加,所以让我们看看这些数据包并找出真正发生的事情。