James C. Wu created DIRSERVER-1829:
--------------------------------------
Summary: bug in initializing authenticators for
AuthenticatorInterceptor
Key: DIRSERVER-1829
URL: https://issues.apache.org/jira/browse/DIRSERVER-1829
Project: Directory ApacheDS
Issue Type: Bug
Affects Versions: 2.0.0-M11
Reporter: James C. Wu
Priority: Minor
Le 4/16/13 8:05 PM, Wu, James C. a écrit :
> Hi,
>
> I am looking at this two method definition in the
> AuthenticationInterceptor.java class. This two method should both set to the
> authenticators for the interceptor to the input given in the parameter given
> both are a setter. However, the logic of method body of these two methods
> are quite different. The first method just set the member variable
> (authenticators) to the input parameters, while the second method will
> register the authenticator and strangely enough, it does not set the member
> variable (authenticators) to the input parameter.
>
> /**
> * @param authenticators authenticators to be used by this
> AuthenticationInterceptor
> */
> public void setAuthenticators( Set<Authenticator> authenticators )
> {
> if ( authenticators == null )
> {
> this.authenticators.clear();
> }
> else
> {
> this.authenticators = authenticators;
> }
> }
>
>
> /**
> * @param authenticators authenticators to be used by this
> AuthenticationInterceptor
> */
> public void setAuthenticators( Authenticator[] authenticators )
> {
> if ( authenticators == null )
> {
> throw new IllegalArgumentException( "The given authenticators set
> is null" );
> }
>
> this.authenticators.clear();
> this.authenticatorsMapByType.clear();
>
> for ( Authenticator authenticator : authenticators )
> {
> try
> {
> register( authenticator, directoryService );
> }
> catch ( LdapException le )
> {
> LOG.error( "Cannot register authenticator {}", authenticator
> );
> }
> }
> }
>
>
> I traced the execution of the start of the apacheds service. During the
> startup of the apacheds service, three authenticators will be created, and
> the setAuthenticators( Authenticator[] authenticators ) method will be
> called. But due to the fact that, the member variable authenticators is not
> set, when the execution gets to init method of the authenticatorinterceptor,
> three new default authenticator will be created because the authenticators is
> null and default authenticators are created. Now we have six authenticators.
> Three of them (Simple, Strong, Anonymous) created by the
> setDefaultAuthenticators are in the authenticators list, the other three
> (Simple, Strong, Anonymous) created by createInterceptors in the
> ServiceBuilder class are in the authenticatorsMapByType map.
>
> I am thinking this is a bug. First of all, these two methods should behave in
> the same way. Second, we should not have duplicated authenticators, plus the
> three authenticators created by the createInterceptors method in the
> ServiceBuilder class is not properly initialized. Their directoryService
> field is null.
This is clearly a wrong initialization. My understanding is that we have
stacked layers on top of layers during years, but never cleaned up the class.
I also modified this code 8 weeks ago, I don't remember why I change it this
way (cf
http://svn.apache.org/viewvc/directory/apacheds/trunk/interceptors/authn/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java?r1=1424688&r2=1446503&diff_format=h),
but this is clearly wrong...
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira