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

时间:2019-07-03 17:50:07

标签: ldap jndi

我已经使用JNDI LDAP向AD添加了新用户。而且我还以编程方式启用了该帐户。但是,如果尝试将用户添加到AD组中,则会出现错误并指出已存在条目。有关抛出异常的信息,请参见下面的结果。

“域管理员”是组名,但似乎在抱怨我试图重新添加该组。这是我的代码。

我在论坛上找到的任何示例都执行类似的操作。

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 ];剩余名称'CN =域管理员,CN =用户,DC = mydomain,DC = org'

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

自从我使用JNDI(已经有20年历史的BTW图书馆)以来已经有一段时间了,但是我在这里仍然可以提供一些东西。

LDAP错误通常表示他们所说的话,因此我毫不怀疑该错误表示它的意思(条目已经存在)。这当然与您的代码矛盾,后者似乎只想执行ldapmodify操作。

我想看看“在线”发生了什么,那么如何使用tcpdump或wireshark获取LDAP协议,并检查它实际上是在发送MOD还是ADD操作呢?从理论上讲,此错误68应该仅来自ADD,因此让我们看看这些数据包并找出实际发生的情况。