2013-10-01 1 views
0

Donc, j'écris du code qui va créer des comptes utilisateur dans AD LDS. Je peux créer l'utilisateur, mais le compte est désactivé.Activer un compte utilisateur lors de la création dans AD LDS

Je souhaite que l'utilisateur soit actif et puisse changer son mot de passe. J'ai essayé certaines des choses suggérées dans ce post, mais cela ne m'a pas aidé.

Voici mon code:

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(); 
    } 

Quand je cours, je reçois l'erreur suivante:

javax.naming.directory.NoSuchAttributeException: [LDAP: error code 16 - 00000057: LdapErr: DSID-0C090D11, comment: Error in attribute conversion operation, data 0, v23f0remaining name 'CN=Samuel King,CN=Users,CN=Agents,DC=CHESA,DC=local' at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source) at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source) at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source) at com.sun.jndi.ldap.LdapCtx.c_createSubcontext(Unknown Source) at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(Unknown Source) at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(Unknown Source) at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(Unknown Source) at javax.naming.directory.InitialDirContext.createSubcontext(Unknown Source) at com.ceiwc.ActiveDirectory.createUserAccount(ActiveDirectory.java:114) at com.ceiwc.TestAD.main(TestAD.java:24)

Si je change la ligne où je suis mise à jour du ms-DS-user- compte-Control-calculée à:

attributes.put("ms-DS-User-Account-Control-Computed", UF_NORMAL_ACCOUNT 
       + UF_PASSWORD_EXPIRED); 

je reçois l'erreur suivante:

javax.naming.directory.InvalidAttributeValueException: Malformed 'ms-DS-User-Account-Control-Computed' attribute value; remaining name 'CN=Samuel King,CN=Users,CN=Agents,DC=CHESA,DC=local' at com.sun.jndi.ldap.LdapClient.encodeAttribute(Unknown Source) at com.sun.jndi.ldap.LdapClient.add(Unknown Source) at com.sun.jndi.ldap.LdapCtx.c_createSubcontext(Unknown Source) at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(Unknown Source) at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(Unknown Source) at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(Unknown Source) at javax.naming.directory.InitialDirContext.createSubcontext(Unknown Source) at com.ceiwc.ActiveDirectory.createUserAccount(ActiveDirectory.java:116) at com.ceiwc.TestAD.main(TestAD.java:24)

Alors, qu'est-ce que je fais mal? Est-ce la bonne façon d'activer le compte? Est-ce que quelqu'un a un code pour m'aider?

Merci!

Répondre

0

NuAlphaMan,

Je pense, que l'exception a quelque chose à voir avec le fait que vous utilisez CN comme nom de l'attribut au lieu de Ldap-Display-Nom qui est msDS-utilisateur compte-contrôle- Calculé La description pourrait être trouvée ici http://msdn.microsoft.com/en-us/library/windows/desktop/ms677840(v=vs.85).aspx. En ce qui concerne la deuxième question de comment activer un compte, j'ai trouvé qu'il y a un attribut userAccountControl (http://msdn.microsoft.com/en-us/library/windows/desktop/ms680832(v=vs.85).aspx#win_2008_r2) et la valeur 0x00000002 (ADS_UF_ACCOUNTDISABLE) qui peut désactiver un compte. La seule chose qui me vient à l'esprit est d'essayer de lire la valeur et d'inverser la tendance.

Regards, Dmitry

0

NoSuchAttributeException: « Indique que l'attribut spécifié dans l'opération de comparaison de modifier ou ne pas exister dans l'entrée. »

Valeur d'attribut 'ms-DS-User-Account-Control-Computed' malformée: indique un type d'attribut incorrect.

ici est mon exemple de travail, que je vérifie avec 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); 
} 
Questions connexes