0

我正在尝试使用 JNDI 程序将组添加到 Active Directory 中的不同组。这样做时,我收到以下错误

[LDAP:错误代码 53 - 00002142:SvcErr:DSID-031A0FC0,问题 5003 (WILL_NOT_PERFORM),数据 0

我正在使用的代码片段如下

  1. 设置组属性

Attributes attrs = new BasicAttributes(true);
attrs.put("objectClass","group")
attrs.put("description","A test group");

  1. 将组添加到不同的组

try{
    ModificationItem member[] = new ModificationItem[1];
    member[0]= new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("member", groupDN)); 

ctx.modifyAttributes(grpDN,member);
 System.out.println("Added group to group: " + grpDN);

}catch (NamingException e) { System.err.println("Problem adding group to group: " + e); }

我可以使用几乎相同类型的代码(如下)将用户添加到组中。

  1. 设置用户属性

// Create attributes to be associated with the new user
Attributes attrs = new BasicAttributes(true); 
attrs.put("objectClass","user");
attrs.put("samAccountName","Perry");
attrs.put("cn","Perry");

attrs.put("givenName","Perry"); attrs.put("sn","Perry"); attrs.put("displayName","Perry Peterson"); attrs.put("description","Research Engineer");

int UF_ACCOUNTDISABLE = 0x0002; int UF_PASSWD_NOTREQD = 0x0020; int UF_PASSWD_CANT_CHANGE = 0x0040; int UF_NORMAL_ACCOUNT = 0x0200; int UF_DONT_EXPIRE_PASSWD = 0x10000; int UF_PASSWORD_EXPIRED = 0x800000;

attrs.put("userAccountControl",Integer.toString(UF_NORMAL_ACCOUNT + UF_PASSWD_NOTREQD + UF_PASSWORD_EXPIRED+ UF_ACCOUNTDISABLE));

  1. 将用户添加到组

try{
    ModificationItem member[] = new ModificationItem[1];
    member[0]= new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("member", userDN)); 

ctx.modifyAttributes(groupDN,member);
System.out.println("Added user to group: " + groupName);
}catch (NamingException e){
    System.err.println("Problem adding user to group: " + e);

}

有没有人知道我在这里做错了什么,或者是否有任何必须为组设置的属性,就像在用户的情况下一样。我的 JNDI 客户端和服务器之间有 SSL 连接,并且我能够成功重置用户密码(如果没有 SSL,这将是不可能的)

我怀疑这是因为我之前创建的组没有正确创建

问候

佩里

4

1 回答 1

0

发生这种情况是因为默认情况下将组创建为安全组,并且无法将组添加到组(如果是安全组)

如果您想拥有嵌套组,请将组创建为通用分布,然后只有您能够将组添加到组

此行为适用于 Active Directory。我不知道其他目录。

于 2009-04-27T15:21:00.150 回答