2013-10-01 2 views
0

그래서 AD LDS에서 사용자 계정을 만드는 코드를 작성하고 있습니다. 사용자를 만들 수는 있지만 계정은 사용할 수 없습니다.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(); 
    } 

내가 이것을 실행하면, 나는 다음과 같은 오류 얻을 : 나는 내가 MS-DS-사용자 -를 업데이트하고있어 라인을 변경하는 경우

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)

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

나는 다음과 같은 오류가 발생합니다 : :

에 계정 컨트롤은 계산 된

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)

그래서 내가 뭘 잘못하고 있니? 이것이 계좌를 활성화하는 적절한 방법입니까? 누군가 나를 도울 수있는 코드가 있습니까?

감사합니다.

답변

0

NuAlphaMan,

나는 예외가 당신이 MSDS-사용자 계정-Control 키입니다 대신 LDAP를-표시 이름의 속성의 이름으로 CN을 사용한다는 사실과 함께 할 수있는 뭔가가 있다고 생각 계산 됨. 설명은 여기 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) 값이 있음을 발견했습니다. 내 마음을 넘어서는 유일한 가치는 가치를 읽고 조금 뒤집어 쓰는 것입니다.

감사합니다, 드미트리

0

NoSuchAttributeException는 "수정 또는 비교 조작에 지정된 속성이 항목에 존재하지 않는 것을 나타냅니다."

잘못된 'ms-DS 사용자 계정 컨트롤 계산'속성 값 : 잘못된 속성 유형을 나타냅니다. 여기

내가 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); 
} 
관련 문제