2016-05-11 11 views
0

私はドメインコンポーネント、 ためのサブコンテキストを作成しようとしていますが、その次のエラーを示すJavaを使用してopenLDAPでドメインコンポーネントエントリのサブコンテキストを作成できますか?

javax.naming.OperationNotSupportedException:[LDAP:エラー・コード53 - グローバルな優れた知識]。残りの名前 'のUID =のUSER3、DC =例では'

これは私のコードである

パブリッククラスOpenLDAPTest {

public static void main(String[] args) { 
    String url = "ldap://localhost:389"; 
    // String url = "ldap://localhost:10389"; 
    Hashtable env = new Hashtable(); 
    env.put(Context.INITIAL_CONTEXT_FACTORY, 
      "com.sun.jndi.ldap.LdapCtxFactory"); 
    env.put(Context.PROVIDER_URL, url); 
    env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
    env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=maxcrc,dc=com"); 
    // env.put(Context.SECURITY_PRINCIPAL, "uid=admin, ou=system"); 
    env.put(Context.SECURITY_CREDENTIALS, "secret"); 
    try { 
     DirContext ctx = new InitialDirContext(env); 
     System.out.println("connected"); 
     System.out.println(ctx.getEnvironment()); 
     System.out.println("Creating subContext"); 
     String name = "uid=user3, dc=example"; 
     Attributes atrs = new BasicAttributes(); 
     Attribute atr1 = new BasicAttribute("objectClass"); 
     atr1.add("inetOrgPerson"); 
     atrs.put(atr1); 
     Attribute atr2 = new BasicAttribute("cn"); 
     atr2.add("sathish"); 
     atrs.put(atr2); 
     Attribute atr3 = new BasicAttribute("o"); 
     atr3.add("Kumar"); 
     atrs.put(atr3); 
     Attribute atr4 = new BasicAttribute("sn"); 
     atr4.add("example"); 
     atrs.put(atr4); 
     Context c = ctx.createSubcontext(name, atrs); 
     System.out.println(c.getEnvironment()); 
     ctx.close(); 

    } catch (AuthenticationNotSupportedException ex) { 
     System.out 
       .println("The authentication is not supported by the server"); 
    } catch (AuthenticationException ex) { 
     System.out.println("incorrect password or username"); 
    } catch (NamingException ex) { 
     // System.out.println("error when trying to create the context"); 
     ex.printStackTrace(); 
    } 
} 

}

Iは変化させることにより(ApacheDSのために同じコードを使用する場合資格証明書)が働いています。 openLDAPでは動作しません。

+0

あなたは何のためのマネージャアカウントを使用してはならないことを追加する前に、「DC = maxcrc、dc = comの」を追加する必要があります。これは 'slapd.exe'自体のためです。特権を持つDIT内に管理アカウントを作成する必要があります。 – EJP

+0

あなたはそれを行う方法を教えてもらえますか? – Sat

+0

なぜですか?あなたがドキュメンテーションであなた自身のためにそれを見ることができる時? – EJP

答えて

0

OpenLDAPで新しいデータベースを作成しようとしているものは、dc=exampleです。これは設定を介してのみ行うことができます。

+0

私はあなたを手に入れませんでした..あなたは明確に説明することができます – Sat

+0

私は明確に説明しました。 'dc = example'という名前のデータベースを設定を介して作成する必要があります。これはすでに述べたことだけを再記述します。 – EJP

+0

私はWindowsにopenLDAPをインストールしましたが、実行方法はわかりませんが、実行中のバックグラウンドではLDAPコマンドをどこに書きますか? – Sat

1

あなたがに試みることができるが、LDAPバックエンド設定ステップでインストール

時に 'DC =例' などのドメイン名を設定

ldap setting

そうでなければ可能性変更「UID = user3、dc = example "を" uid = user3、dc = maxcrc、dc = com "に追加してください。

Windowsサーバーにルート "dc = maxrc、dc = com"を持つデータベースが既に存在する場合は、ルート "dc = example"を使用してデータベースを追加しないでください。

更新:あなたは "DC = maxcrc、dc = comの" ようにドメインを設定しますが

、対応するドメインのルートエントリは、デフォルトでは追加されません。

あなたは、サブコンテキスト

String name = "dc=maxcrc,dc=com"; 
    Attributes atrs = new BasicAttributes(); 
    Attribute atr1 = new BasicAttribute("objectClass"); 
    atr1.add("organization"); 
    atrs.put(atr1); 
    Attribute atr2 = new BasicAttribute("objectClass"); 
    atr2.add("dcObject"); 
    atrs.put(atr2); 
    Attribute atr3 = new BasicAttribute("dc"); 
    atr3.add("maxcrm"); 
    atrs.put(atr3); 
    Attribute atr4 = new BasicAttribute("o"); 
    atr4.add("anyOrgYouLike"); 
    atrs.put(atr4); 
    Context c = ctx.createSubcontext(name, atrs); 
+0

apache dsの場合、ドメインコンポーネントに関連するルートdnはデフォルトで "dc = example"です。 – fenixan

+0

"uid = user3、dc = example"を "uid = user3、dc = maxcrc、dc = com"に変更しました。次のエラーが表示されます [LDAP:エラーコード32 - いいえオブジェクト];残りの名前は 'uid = user3、dc = maxcrc、dc = com' – Sat

+0

助けてくれてありがとうございましたが、それでもなお次のエラーが返されます [LDAP:エラーコード65 - 構造オブジェクトがありません提供されるクラス];残りの名前 'dc = maxcrc、dc = com' – Sat

関連する問題