- PR -

LDAPのBIND処理のJNDIクラス

1
投稿者投稿内容
be1300cc
ベテラン
会議室デビュー日: 2002/07/04
投稿数: 88
投稿日時: 2003-09-18 10:38
お世話になります。be1300ccと申します。
現在LDAPプログラミングでJNDIを使用し、LDAPでの処理をコーディングしているのですが、
BINDの場合(DirContextのbindを使用)のサンプルソースを探しております。

どなたかご存知の方いらしゃいませんでしょうか?
ご享受お願いします。

※因みに、SEARCH処理とADD処理は作成できました。
be1300cc
ベテラン
会議室デビュー日: 2002/07/04
投稿数: 88
投稿日時: 2003-09-19 14:13
お世話になります。be1300ccです。
一応、何とか作成してみたのですが。

多分ポイントとなるのは、lookupだと思うのですが、実行時エラーが出てしまいます。
【実行時エラー】
$ java Bind01 '' ''
javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'cn=Manager,dc=tec,dc=jp'

ロジックの組み方に問題があるのでしょうか?
ご享受お願いします。

※コード上必要のない部分や間違った箇所も多少あるかもしれません。
【Bind01クラス】
import javax.naming.* ;
import javax.naming.Context ;
import javax.naming.directory.* ;
import java.util.Hashtable ;

public class Bind01 {
public static void main(String[] args) {
Hashtable env = new Hashtable(11) ;
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory") ;
env.put(Context.PROVIDER_URL,"ldap://win:389/dc=tec,dc=jp") ;
env.put(Context.SECURITY_PRINCIPAL,"cn=Manager,dc=tec,dc=jp") ;
env.put(Context.SECURITY_CREDENTIALS,"secret") ;

try {
DirContext initctx1 = new InitialDirContext(env) ;
DirContext ctx = new InitialDirContext(env);
DirContext envCtx1 = (DirContext) initctx1.lookup(args[0]) ;

//Context envCtx0 = (Context) initctx1.lookup(args[0]) ;

String id0 = args[0];
Object data0 =args[1];

//System.out.println(ctx.lookup("cn=Manager,dc=tec,dc=jp").toString());

//DirContext dir = (DirContext) envCtx0.lookup(id0) ;
DirContext dir = (DirContext) envCtx1.lookup("cn=Manager,dc=tec,dc=jp") ;

BasicAttribute ba = (BasicAttribute)data0;
Attribute attr = new BasicAttribute(id0 ,data0);
Attributes attra = new BasicAttributes(id0 ,data0);

String id11 = id0;

attra.put(id11 ,data0);
ctx.bind(id11 ,data0);

} catch(Exception e) {
e.printStackTrace();
System.out.println("e: " + e) ;
}
}
}

be1300cc
ベテラン
会議室デビュー日: 2002/07/04
投稿数: 88
投稿日時: 2003-09-22 15:33
お世話になります。be1300ccです。
一応、Bindの処理を想定したロジックを組んでみたのですが、Bind時に表示されるエラーが
どうしても解決できなくて困っております。

多分エラー内容から推測すると、Bind時のパラメータ設定に問題があると思うのですが・・・。
〜APIより〜
bind(Name name, Object obj, Attributes attrs)
関連付けられた属性とともに、名前をオブジェクトにバインドします。

このObject objに実際には何を指定してあげれば良いのでしょうか?
ご享受お願いします。

【エラー】
javax.naming.directory.InvalidAttributeIdentifierException: [LDAP: error code 17 - javaSerializedData: attribute type un
defined]; remaining name 'cn=Manager10'

【ソース】
import javax.naming.* ;
import javax.naming.Context ;
import javax.naming.directory.* ;
import java.util.Hashtable ;

public class Bind02 {
public static void main(String[] args) {
Hashtable env = new Hashtable(11) ;
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory") ;
env.put(Context.PROVIDER_URL,"ldap://win:389/dc=tec,dc=jp") ;
env.put(Context.SECURITY_PRINCIPAL,"cn=Manager,dc=tec,dc=jp") ;
env.put(Context.SECURITY_CREDENTIALS,"secret") ;

try {
DirContext initctx1 = new InitialDirContext(env) ;
DirContext ctx00 = new InitialDirContext(env);

DirContext dir = (DirContext) initctx1.lookup(args[0]) ;
Attributes attrs = dir.getAttributes("");

NamingEnumeration ae = attrs.getAll();

while ( ae.hasMoreElements() ) {
Attribute at = (Attribute) ae.next();
System.out.println("at:" + at);
}

Attributes attra = new BasicAttributes();

attra.put(new BasicAttribute( "objectClass", "organizationalRole" ));

Object organizationalRole = attra;
System.out.println("*** organizationalRole: ** " + organizationalRole) ;
Object obj00 = organizationalRole;
System.out.println("*** obj00: ** " + obj00) ;

attra.put(new BasicAttribute("sn", "Sales0"));
attra.put(new BasicAttribute("description", "SalesManager0"));
attra.put(new BasicAttribute( "telephonenumber", "000-0000-0000" ));

System.out.println("obj00: " + obj00) ;

System.out.println("organizationalRole: " + organizationalRole) ;
ctx00.bind("cn=Manager10", obj00 ,attra);

} catch(Exception e) {
e.printStackTrace();
System.out.println("e: " + e) ;
}
}
}

1

スキルアップ/キャリアアップ(JOB@IT)