directory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alex Karasulu (JIRA)" <j...@apache.org>
Subject [jira] Closed: (DIRSERVER-1154) Declaration and instantiation of refService in ServerLdapContext limits extensibility
Date Wed, 27 Aug 2008 19:01:47 GMT

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

Alex Karasulu closed DIRSERVER-1154.
------------------------------------

    Resolution: Fixed

This has been removed in the refactoring process to remove JNDI's role in the core.  The core
JNDI provider Is just now a wrapper around the DirectoryService but it does not support referrals
at all.  The frontend does though.  There is another JIRA issue out there for referral handling
in the JNDI provider.  If you use the core provider you'll have to handle referrals yourself
since the core provider just treats them as any other entry.

> 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: 1.5.4
>            Reporter: Icky Dude
>            Assignee: Alex Karasulu
>             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.


Mime
View raw message