[ 
https://issues.apache.org/jira/browse/DIRSERVER-1154?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Karasulu updated DIRSERVER-1154:
-------------------------------------

    Fix Version/s:     (was: 1.5.3)
                   1.5.4

Need to review this but BB is now 1.5.4.  Will look at in next release.

> 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: 1.5.4
>
>
> 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.

Reply via email to