[Date Prev][Date Next] [Chronological] [Thread] [Top]

RE: Problem with OpenLDAP 2.0.11 and JNDI



I had a similar problem when i was trying to read an
attribute for whom i didnt have a read permission. As
a result the search was returning a class cast
exception. Ensure that the dn with which you are
binding to the server has the authority to read the
userPassword field

-Regards
aditya
--- "oberwetter, josh" <joberwetter@grownetwork.com>
wrote:
> // Assumes that you have a reference to some
> Attribute instance named "attr"
> Object value = attr.get();
>  
> // cast to byte[] , then convert to String using
> proper encoding
> if(value.getClass().isArray() &&
> Array.getLength(value) > 0) {
>     try {
>         value = new String((byte[])value, "UTF-8");
>     } catch (java.io.UnsupportedEncodingException e)
> {
>         SystemLog.error("Unexpected error -- char
> set is a basic one", e);
>     }
> }
> 
> 
> -----Original Message-----
> From: Dustin Cobb [mailto:dustinc@questusgroup.com]
> Sent: Friday, August 24, 2001 5:48 PM
> To: openldap-software@OpenLDAP.org
> Subject: Problem with OpenLDAP 2.0.11 and JNDI
> 
> 
> Hello all,
>  
> I am having a very strange problem with a JNDII
> application I'm writing
> which is connecting to an OpenLDAP 2.0.11 server.  I
> have a lot of code
> which reads/writes other attributes, but when I try
> to read a
> userPassword attribute, I get a ClassCastException
> (I'm casting from
> Object to String) and when I run an
> Object.getClass() on the returned
> object, it gives me garbage.  Any suggestions?  Is
> this a JNDI bug,
> OpenLDAP bug, or am I just doing something wrong?  I
> have attached some
> code with comments below (including tests I ran). 
> Any suggestions would
> be highly appreciated.  TIA
>  
> //////// beginning of code
>  
> import javax.naming.Context;
> import javax.naming.directory.InitialDirContext;
> import javax.naming.directory.DirContext;
> import javax.naming.directory.Attributes;
> import javax.naming.NamingException;
>  
> import java.util.*;
>  
> public class test extends java.lang.Object {
>  
>     /** Creates new test */
>     public test() {
>         DirContext serverContext;
>  
>         /*
>          * properly initialize all environment
> settings
>          *
>          */
>  
>         Hashtable env = new Hashtable();
>  
>
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
>  
>         env.put(Context.PROVIDER_URL,
> "ldap://*****";);
>         env.put(Context.SECURITY_PRINCIPAL,
> "******************************");
>         env.put(Context.SECURITY_AUTHENTICATION,
> "simple");
>         env.put(Context.SECURITY_CREDENTIALS,
> "*****");
>  
>         /*
>          * establish connection with ldap server
>          *
>          */
>  
>         try {
>             serverContext = new
> InitialDirContext(env);
>         } catch (NamingException ne) {
>             System.err.println(ne);
>             return;
>         }
>  
>         /*
>          * get an arbitrary attribute, in this case
> cn
>          *
>          */
>  
>         Attributes attributes = null;
>  
>         try {
>             attributes =
>
serverContext.getAttributes("*****************************");
>             System.err.println("cn = " +
> (String)attributes.get("cn").get());
>         } catch (Exception e) {
>             System.err.println(e);
>         }
>  
>         /*
>          * now let's try userPassword which is
> encrypted
>          * specified in schema file as
>          *
>          * attributetype ( 2.5.4.35 NAME
> 'userPassword'
>          *      EQUALITY octetStringMatch
>          *      SYNTAX
> 1.3.6.1.4.1.1466.115.121.1.40{128} )
>          *
>          */
>  
>         try {
>             System.err.println("userPassword = " +
> (String)attributes.get("userPassword").get());
>         } catch (Exception e) {
>             System.err.println(e);
>         }
>  
>         /*
>          * ok, got a java.lang.ClassCastException. 
> it should be
> reasonable
>          * to cast it to a string, since it is one. 
> let's get the
> object
>          * type returned
>          *
>          */
>  
>         try {
>             System.err.println("userPassword class =
> " +
> attributes.get("userPassword").get().getClass());
>         } catch (Exception e) {
>             System.err.println(e);
>         }
>  
>         /*
>          * strange, object type returned = "[B" 
> that's very strange.
>          * sanity check:  let's see what object type
> is returned from a
> normal type (like cn)
>          *
>          */
>  
>         try {
>             attributes =
>
serverContext.getAttributes("*****************************");
>             System.err.println("cn object = " +
> attributes.get("cn").get().getClass());
>         } catch (Exception e) {
>             System.err.println(e);
>         }
>  
>         /*
>          * hmm, java.lang.String, just like I
> thought
>          *
>          */
>  
>         /*
>          * here is my output:
>          *
>          * C:\TEST>java test
>          * cn = Administrative User
>          * java.lang.ClassCastException: [B
>          * userPassword class = class [B
>          * cn object = class java.lang.String
>          */
>  
>     }
>  
>  
> 
> 


__________________________________________________
Do You Yahoo!?
Make international calls for as low as $.04/minute with Yahoo! Messenger
http://phonecard.yahoo.com/