【问题标题】:How to add OU into LDAP using JNDI如何使用 JNDI 将 OU 添加到 LDAP
【发布时间】:2010-08-10 09:21:48
【问题描述】:

我想从 JNDI 向 LDAP 添加一个新的 OU。我的 LDAP 服务器是从 OpenDS 设置的。

这是我的代码:

public static void main(String args[])
{
    String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory";
    String MY_HOST = "ldap://localhost:1389";
    String MGR_DN = "cn=Directory Manager";
    String MGR_PW = "password";
    String MY_SEARCHBASE = "dc=QuizPortal";

    try
    {
        Hashtable env = new Hashtable();

        env.put(Context.INITIAL_CONTEXT_FACTORY, INITCTX);

        env.put(Context.PROVIDER_URL, MY_HOST);

        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, MGR_DN);
        env.put(Context.SECURITY_CREDENTIALS, MGR_PW);

        DirContext ctx = new InitialDirContext(env);

        Attributes attrs = new BasicAttributes(true); // case-ignore
        Attribute objclass = new BasicAttribute("objectclass");
        objclass.add("top");
        objclass.add("organizationalUnit");
        attrs.put(objclass);

        ctx.createSubcontext("ou=NewOu", attrs);
    }

    catch(Exception e)
    {
        e.printStackTrace();
        System.exit(1);
    }
}

这是错误信息:

javax.naming.NameNotFoundException: [LDAP: error code 32 - The provided entry ou=NewOu cannot be added because it does not have a parent and is not defined as one of the suffixes within the Directory Server]; remaining name 'ou=NewOu'
        at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3066)
        at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2987)
        at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2794)
        at com.sun.jndi.ldap.LdapCtx.c_createSubcontext(LdapCtx.java:788)
        at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(ComponentDirContext.java:319)
        at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(PartialCompositeDirContext.java:248)
        at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(PartialCompositeDirContext.java:236)
        at javax.naming.directory.InitialDirContext.createSubcontext(InitialDirContext.java:178)
        at JUNDIAdd2.main(JUNDIAdd2.java:43)

添加信息:我有o=IT, dc=QuizPortal,我想在其中添加新的OU

谁能指导我解决这个错误?

【问题讨论】:

    标签: java ldap jndi


    【解决方案1】:

    试试:

    ctx.bind("ou=NewOu,o=IT", null, attrs);
    

    之前可能需要设置ou属性:

    attrs.put("ou", "NewOu");
    

    【讨论】:

    • 嘿,谢谢......这就像一个魅力。为了他人的利益,根据佩里的回答,我已经编辑了 MY_HOST = "ldap://localhost:1389/dc=QuizPortal",我可以在 o=IT 下添加 newOu ...
    【解决方案2】:

    你试过了吗:

    ctx.createSubcontext("ou=NewOu,dc=QuizPortal,o=IT", attrs);
    

    或者这个:

    ctx.createSubcontext("ou=NewOu,dc=QuizPortal", attrs);
    

    希望对你有帮助

    【讨论】:

    • 您好,我已经尝试了这两种方法,但仍然有错误。我设法通过更改 MY_HOST = "ldap://localhost:1389"; 添加了 newOu to MY_HOST = "ldap://localhost:1389/dc=QuizPortal";但它在 QuizPortal 下添加了 newOu,这不是我想要的。我想将 newOu 添加到 IT 中
    猜你喜欢
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多