0

そこで、AD LDS でユーザー アカウントを作成するコードを書いています。ユーザーを作成できますが、アカウントが無効になっています。

ユーザーがアクティブになり、パスワードを変更できるようにしたい。この投稿で提案されていることをいくつか試しましたが、役に立ちませんでした。

これが私のコードです:

    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, v23f0remaining name 'CN=Samuel King,CN=Users,CN=Agents, DC=CHESA,DC=local' com.sun.jndi.ldap.LdapCtx.mapErrorCode (不明なソース) com.sun.jndi.ldap.LdapCtx.processReturnCode (不明なソース) com.sun.jndi.ldap.LdapCtx .processReturnCode (不明なソース) com.sun.jndi.ldap.LdapCtx.c_createSubcontext (不明なソース) com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext (不明なソース) com.sun.jndi.toolkit.ctx .PartialCompositeDirContext.createSubcontext(不明なソース) com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(不明なソース) at javax.naming.directory.InitialDirContext.com.ceiwc.ActiveDirectory.createUserAccount(ActiveDirectory.java:114) の createSubcontext (不明なソース) 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 (Unknown Source) at com.sun.jndi.ldap.LdapClient .add (不明なソース) com.sun.jndi.ldap.LdapCtx.c_createSubcontext (不明なソース) com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext (不明なソース) com.sun.jndi.toolkit.ctx com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(不明なソース) の .PartialCompositeDirContext.createSubcontext(不明なソース) javax.naming.directory.InitialDirContext.createSubcontext(不明なソース) com.ceiwc.ActiveDirectory.createUserAccount(ActiveDirectory) .java:116) com.ceiwc で。

それで、私は何を間違っていますか?これはアカウントを有効にする適切な方法ですか? 誰かが私を助けるコードを持っていますか?

ありがとう!

4

2 に答える 2

0

ニューアルファマン、

例外は、msDS-User-Account-Control-Computed である Ldap-Display-Name の代わりに CN を属性の名前として使用するという事実と関係があると思います。説明はhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms677840(v=vs.85).aspxにあります。

アカウントを有効にする方法に関する 2 番目の質問については、属性 userAccountControl ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms680832(v=vs.85 .aspx#win_2008_r2 ) およびアカウントを無効にできる値 0x00000002 (ADS_UF_ACCOUNTDISABLE)。私の頭を横切る唯一のことは、値を読み取ってビットを反転させようとすることです。

よろしく、 ドミトリー

于 2014-01-31T10:40:51.097 に答える