所以,我正在编写将在AD LDS中创建用户帐户的代码。我可以创建用户,但该帐户已被禁用。
我希望用户处于活动状态并能够更改密码。我已经尝试了post中建议的一些事情,但它没有帮助我。
这是我的代码:
ctx = getConnection(adminUser, adminPassword);
// Create attributes for the new user
Attributes attributes = new BasicAttributes(true);
// Main attributes for user
attributes.put("objectClass", "user");
attributes.put("name", user.getFullName());
attributes.put("ms-DS-User-Account-Control-Computed",
Integer.toString(UF_NORMAL_ACCOUNT + UF_PASSWORD_EXPIRED));
try {
ctx.createSubcontext(getDistinguishedName(user.getFullName()),
attributes);
System.out.println("User successfully added!");
} catch (NamingException e) {
e.printStackTrace();
}
当我运行它时,我收到以下错误:
javax.naming.directory.NoSuchAttributeException:[LDAP:错误代码16 - 00000057:LdapErr:DSID-0C090D11,注释:属性转换操作出错,数据0,v23f0保留名称'CN = Samuel King,CN = Users,CN = Agents,DC = CHESA,DC = local'at com.sun.jndi.ldap.LdapCtx.mapErrorCode(未知来源)at com.sun.jndi.ldap.LdapCtx.processReturnCode(未知来源)at at com.sun.jndi.ldap.LdapCtx.processReturnCode(未知来源)at at com.sun.jndi.ldap.LdapCtx.c_createSubcontext(未知来源)at at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(未知 来源)at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(未知 来源)at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(未知 来源)at javax.naming.directory.InitialDirContext.createSubcontext(未知 来源)at com.ceiwc.ActiveDirectory.createUserAccount(ActiveDirectory.java:114) 在com.ceiwc.TestAD.main(TestAD.java:24)
如果我更改我正在更新ms-DS-User-Account-Control-Computed的行:
attributes.put("ms-DS-User-Account-Control-Computed", UF_NORMAL_ACCOUNT
+ UF_PASSWORD_EXPIRED);
我收到以下错误:
javax.naming.directory.InvalidAttributeValueException:格式错误 'ms-DS-User-Account-Control-Computed'属性值;剩下的名字 'CN = Samuel King,CN = Users,CN = Agents,DC = CHESA,DC = local'at com.sun.jndi.ldap.LdapClient.encodeAttribute(未知来源)at com.sun.jndi.ldap.LdapClient.add(未知来源)at com.sun.jndi.ldap.LdapCtx.c_createSubcontext(未知来源)at at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(未知 来源)at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(未知 来源)at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(未知 来源)at javax.naming.directory.InitialDirContext.createSubcontext(未知 来源)at com.ceiwc.ActiveDirectory.createUserAccount(ActiveDirectory.java:116) 在com.ceiwc.TestAD.main(TestAD.java:24)
那么,我做错了什么?这是激活帐户的正确方法吗?有人有任何代码可以帮助我吗?
谢谢!
答案 0 :(得分:0)
NuAlphaMan,
我认为,该异常与您使用CN作为属性的名称而不是Ldap-Display-Name这一事实有关,该名称是msDS-User-Account-Control-Computed。可在此处找到说明http://msdn.microsoft.com/en-us/library/windows/desktop/ms677840(v=vs.85).aspx。
关于如何激活帐户的第二个问题,我发现有一个属性userAccountControl(http://msdn.microsoft.com/en-us/library/windows/desktop/ms680832(v=vs.85).aspx#win_2008_r2)和值0x00000002(ADS_UF_ACCOUNTDISABLE)可以禁用帐户。我唯一想到的就是尝试读取值并翻转一下。
问候,德米特里
答案 1 :(得分:0)
NoSuchAttributeException:“表示条目中不存在修改或比较操作中指定的属性。”
格式错误的“ms-DS-User-Account-Control-Computed”属性值:表示属性类型错误。
这是我的工作示例,我查看了ActiveDirectory 2008:
public void mapToContext(int userAccountControl, DirContextAdapter context) {
context.setAttributeValue("userAccountControl", disableAccount(userAccountControl));
}
private String disableAccount(int userAccountControl) {
userAccountControl |= AccountControlFlags.ACCOUNTDISABLE;
return String.valueOf(userAccountControl);
}