[ http://issues.apache.org/jira/browse/DIREVE-295?page=all ]
     
Alex Karasulu resolved DIREVE-295:
----------------------------------

    Fix Version: 0.9.3
     Resolution: Won't Fix

Hi Enrique,

I did not know the answer to this so I tested it with the SUN JNDI LDAP 
provider using this code here:

    public void testNullNameToCtxSearch() throws NamingException
    {
        final Hashtable env = new Hashtable();

        env.put( Context.PROVIDER_URL, "ldap://localhost:"; + port + 
"/dc=aPache,dc=org" );
        env.put("java.naming.ldap.version", "3");
        env.put( Context.SECURITY_PRINCIPAL, "uid=admin,ou=system" );
        env.put( Context.SECURITY_CREDENTIALS, "secret" );
        env.put( Context.INITIAL_CONTEXT_FACTORY, 
"com.sun.jndi.ldap.LdapCtxFactory" );
        InitialDirContext ctx = new InitialDirContext( env );
        Name nullName = null;
        ctx.search( nullName, "(objectClass=*)", new SearchControls() );
    }

Here's the NPE I got from the NamingSubsystem:

java.lang.NullPointerException
        at 
javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:330)
        at 
javax.naming.directory.InitialDirContext.getURLOrDefaultInitDirCtx(InitialDirContext.java:99)
        at 
javax.naming.directory.InitialDirContext.search(InitialDirContext.java:245)
        at 
org.apache.ldap.server.MiscTest.testNullNameToCtxSearch(MiscTest.java:328)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at 
com.intellij.rt.execution.junit2.JUnitStarter.main(JUnitStarter.java:31)

Just to double check I tested handing off null to our provider to look at the 
stack trace:

java.lang.NullPointerException
        at 
javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:330)
        at 
javax.naming.directory.InitialDirContext.getURLOrDefaultInitDirCtx(InitialDirContext.java:99)
        at 
javax.naming.directory.InitialDirContext.search(InitialDirContext.java:245)
        at 
org.apache.ldap.server.MiscTest.testBogusAttributeInSearchFilter(MiscTest.java:316)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at 
com.intellij.rt.execution.junit2.JUnitStarter.main(JUnitStarter.java:31)

The same exact trace due to IDC wrapper.  If IDC behaves this way I think its 
ok for our contexts to behave in the same manner. 



> DirContext.search() with null Name results in NPE
> -------------------------------------------------
>
>          Key: DIREVE-295
>          URL: http://issues.apache.org/jira/browse/DIREVE-295
>      Project: Directory Server
>         Type: Improvement
>   Components: jndi-provider
>     Reporter: Enrique Rodriguez
>     Assignee: Alex Karasulu
>     Priority: Minor
>      Fix For: 0.9.3

>
> This is a minor issue I am marking as an improvement since the JNDI API 
> doesn't appear to say explicitly what the behavior is, so I'm entering this 
> issue to document it.  The issue is that if you supply a null Name as the 
> name to search in DirContext.search() you get a NPE.  If you supply a null 
> String, however, it is treated as the empty String, which indicates a search 
> at the current context's name.  IMO, a null Name should be treated like the 
> empty String.
> So, a null Name fails with NPE:
>         Name name = null;
>         NamingEnumeration answer = ctx.search( name, matchAttrs, attrIDs );
> java.lang.NullPointerException
>       at org.apache.ldap.common.name.LdapName.addAll(LdapName.java:527)
>       at 
> org.apache.ldap.server.jndi.ServerContext.buildTarget(ServerContext.java:843)
>       at 
> org.apache.ldap.server.jndi.ServerDirContext.search(ServerDirContext.java:488)
> ...
> But, a null String will work fine:
>         String name = null;
>         NamingEnumeration answer = ctx.search( name, matchAttrs, attrIDs );
> Which is the same as the empty String, which works fine, too;
>         String name = "";
>         NamingEnumeration answer = ctx.search( name, matchAttrs, attrIDs );

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to