directory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Icky Dude (JIRA)" <j...@apache.org>
Subject [jira] Created: (DIRSERVER-1154) Declaration and instantiation of refService in ServerLdapContext limits extensibility
Date Fri, 21 Mar 2008 22:47:24 GMT
Declaration and instantiation of refService in ServerLdapContext limits extensibility
-------------------------------------------------------------------------------------

                 Key: DIRSERVER-1154
                 URL: https://issues.apache.org/jira/browse/DIRSERVER-1154
             Project: Directory ApacheDS
          Issue Type: Bug
          Components: core
    Affects Versions: bigbang
            Reporter: Icky Dude
             Fix For: bigbang


I ran into a problem that I think needs some simple design work or a simple fix.  For my project
is is not necessary to handle referrals, so I decided to simply eliminate the ReferralIntercepter
from my InterceptorChain.  As soon as I did this, myDirectoryService started crapping on a
NullPointerException buried in the bowels of the DefaultSearchHandler (something I definitely
don't want to mess with for my project).

1) At DefaultSearchHandler.java:357 of  there is an instantiation of a new SearchResponseIterator.
 
2) The constructor for SearchResponseIterator calls ServerLdapContex.isReferral() at SearchResponseItereator:117
3) ServerLdapContext.isReferral() results in a NPE at ServerLdapContext.java:264 unless your
DirectoryService's InterceptorChain includes a ReferralInterceptor.  Take a look at the constructor
and you'll see why:

public ServerLdapContext( DirectoryService service, Hashtable<String, Object> env )
throws NamingException
{
    super( service, env );
    refService = ( ( ReferralInterceptor ) service.getInterceptorChain().get( ReferralInterceptor.class.getName()
) );
}

Is there any chance that we can simply Check refService for null before it's used ServerLdapContext.isReferral().
 If it's refService==null, return false?

There's also similar a similar problem in PartitionNexusProxy.java:891 and 901.  Here the
code checks the chain for null, and returns, but it doesn't check the for null before invoking
the interceptor method. 

Here's the patch:

$ svn diff ServerLdapContext.java 
Index: ServerLdapContext.java
===================================================================
--- ServerLdapContext.java      (revision 638966)
+++ ServerLdapContext.java      (working copy)
@@ -261,7 +261,11 @@
      */
     public boolean isReferral( String name ) throws NamingException
     {
-        return refService.isReferral( name );
+       if( refService == null )
+        {
+               return false;
+        }
+       return refService.isReferral( name );
     }
 
     /**
@@ -272,7 +276,11 @@
      */
     public boolean isReferral( LdapDN name ) throws NamingException
     {
-        return refService.isReferral( name );
+        if( refService == null )
+        {
+               return false;
+        }
+       return refService.isReferral( name );


$ svn diff PartitionNexusProxy.java
Index: PartitionNexusProxy.java
===================================================================
--- PartitionNexusProxy.java    (revision 638966)
+++ PartitionNexusProxy.java    (working copy)
@@ -889,6 +889,10 @@
     {
         InterceptorChain chain = service.getInterceptorChain();
         EventInterceptor interceptor = ( EventInterceptor ) chain.get( EventInterceptor.class.getName()
);
+        if( interceptor == null )
+        {
+               return;
+        }
         interceptor.addNamingListener( ctx, name, filter, searchControls, namingListener
);
     }
 
@@ -901,6 +905,10 @@
             return;
         }
         EventInterceptor interceptor = ( EventInterceptor ) chain.get( EventInterceptor.class.getName()
);
+        if( interceptor == null )
+        {
+               return;
+        }
         interceptor.removeNamingListener( ctx, namingListener );
     }
 }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message