You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2013/04/12 17:22:48 UTC

svn commit: r1467309 - /directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/LdapLdapsServersPage.java

Author: pamarcelot
Date: Fri Apr 12 15:22:47 2013
New Revision: 1467309

URL: http://svn.apache.org/r1467309
Log:
Fix for DIRSTUDIO-902 (Unusable configuration of the HashingPasswordInterceptor with recent milestone of ApacheDS 2.0).

Modified:
    directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/LdapLdapsServersPage.java

Modified: directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/LdapLdapsServersPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/LdapLdapsServersPage.java?rev=1467309&r1=1467308&r2=1467309&view=diff
==============================================================================
--- directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/LdapLdapsServersPage.java (original)
+++ directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/LdapLdapsServersPage.java Fri Apr 12 15:22:47 2013
@@ -74,17 +74,18 @@ public class LdapLdapsServersPage extend
     private static final String SASL_MECHANISMS_SIMPLE = "SIMPLE"; //$NON-NLS-1$
     private static final String START_TLS_HANDLER_ID = "starttlshandler"; //$NON-NLS-1$
     private static final String START_TLS_HANDLER_CLASS = "org.apache.directory.server.ldap.handlers.extended.StartTlsHandler"; //$NON-NLS-1$
-    private static final String FQCN_HASHING_INTERCEPTOR_SSHA512 = "org.apache.directory.server.core.hash.Ssha512PasswordHashingInterceptor"; //$NON-NLS-1$
-    private static final String FQCN_HASHING_INTERCEPTOR_SHA512 = "org.apache.directory.server.core.hash.Sha512PasswordHashingInterceptor"; //$NON-NLS-1$
-    private static final String FQCN_HASHING_INTERCEPTOR_SSHA384 = "org.apache.directory.server.core.hash.Ssha384PasswordHashingInterceptor"; //$NON-NLS-1$
-    private static final String FQCN_HASHING_INTERCEPTOR_SHA384 = "org.apache.directory.server.core.hash.Sha384PasswordHashingInterceptor"; //$NON-NLS-1$
-    private static final String FQCN_HASHING_INTERCEPTOR_SSHA256 = "org.apache.directory.server.core.hash.Ssha256PasswordHashingInterceptor"; //$NON-NLS-1$
-    private static final String FQCN_HASHING_INTERCEPTOR_SHA256 = "org.apache.directory.server.core.hash.Sha256PasswordHashingInterceptor"; //$NON-NLS-1$
-    private static final String FQCN_HASHING_INTERCEPTOR_CRYPT = "org.apache.directory.server.core.hash.CryptPasswordHashingInterceptor"; //$NON-NLS-1$
-    private static final String FQCN_HASHING_INTERCEPTOR_SMD5 = "org.apache.directory.server.core.hash.Smd5PasswordHashingInterceptor"; //$NON-NLS-1$
-    private static final String FQCN_HASHING_INTERCEPTOR_MD5 = "org.apache.directory.server.core.hash.Md5PasswordHashingInterceptor"; //$NON-NLS-1$
-    private static final String FQCN_HASHING_INTERCEPTOR_SSHA = "org.apache.directory.server.core.hash.SshaPasswordHashingInterceptor"; //$NON-NLS-1$
-    private static final String FQCN_HASHING_INTERCEPTOR_SHA = "org.apache.directory.server.core.hash.ShaPasswordHashingInterceptor"; //$NON-NLS-1$
+    private static final String HASHING_PASSWORD_INTERCEPTOR_ID = "passwordHashingInterceptor"; //$NON-NLS-1$
+    private static final String HASHING_PASSWORD_INTERCEPTOR_FQCN_SSHA512 = "org.apache.directory.server.core.hash.Ssha512PasswordHashingInterceptor"; //$NON-NLS-1$
+    private static final String HASHING_PASSWORD_INTERCEPTOR_FQCN_SHA512 = "org.apache.directory.server.core.hash.Sha512PasswordHashingInterceptor"; //$NON-NLS-1$
+    private static final String HASHING_PASSWORD_INTERCEPTOR_FQCN_SSHA384 = "org.apache.directory.server.core.hash.Ssha384PasswordHashingInterceptor"; //$NON-NLS-1$
+    private static final String HASHING_PASSWORD_INTERCEPTOR_FQCN_SHA384 = "org.apache.directory.server.core.hash.Sha384PasswordHashingInterceptor"; //$NON-NLS-1$
+    private static final String HASHING_PASSWORD_INTERCEPTOR_FQCN_SSHA256 = "org.apache.directory.server.core.hash.Ssha256PasswordHashingInterceptor"; //$NON-NLS-1$
+    private static final String HASHING_PASSWORD_INTERCEPTOR_FQCN_SHA256 = "org.apache.directory.server.core.hash.Sha256PasswordHashingInterceptor"; //$NON-NLS-1$
+    private static final String HASHING_PASSWORD_INTERCEPTOR_FQCN_CRYPT = "org.apache.directory.server.core.hash.CryptPasswordHashingInterceptor"; //$NON-NLS-1$
+    private static final String HASHING_PASSWORD_INTERCEPTOR_FQCN_SMD5 = "org.apache.directory.server.core.hash.Smd5PasswordHashingInterceptor"; //$NON-NLS-1$
+    private static final String HASHING_PASSWORD_INTERCEPTOR_FQCN_MD5 = "org.apache.directory.server.core.hash.Md5PasswordHashingInterceptor"; //$NON-NLS-1$
+    private static final String HASHING_PASSWORD_INTERCEPTOR_FQCN_SSHA = "org.apache.directory.server.core.hash.SshaPasswordHashingInterceptor"; //$NON-NLS-1$
+    private static final String HASHING_PASSWORD_INTERCEPTOR_FQCN_SHA = "org.apache.directory.server.core.hash.ShaPasswordHashingInterceptor"; //$NON-NLS-1$
 
     /** The Page ID*/
     public static final String ID = LdapLdapsServersPage.class.getName(); //$NON-NLS-1$
@@ -270,24 +271,23 @@ public class LdapLdapsServersPage extend
     {
         public void widgetSelected( SelectionEvent e )
         {
-            setEnabled( hashingMethodComboViewer.getCombo(), enableServerSidePasswordHashingCheckbox.getSelection() );
             if ( enableServerSidePasswordHashingCheckbox.getSelection() )
             {
-                deleteHashingMethodInterceptor();
-                addHashingMethodInterceptor();
+                enableHashingPasswordInterceptor();
             }
             else
             {
-                deleteHashingMethodInterceptor();
+                disableHashingPasswordInterceptor();
             }
+
+            setEnabled( hashingMethodComboViewer.getCombo(), enableServerSidePasswordHashingCheckbox.getSelection() );
         }
     };
     private ISelectionChangedListener hashingMethodComboViewerListener = new ISelectionChangedListener()
     {
         public void selectionChanged( SelectionChangedEvent event )
         {
-            deleteHashingMethodInterceptor();
-            addHashingMethodInterceptor();
+            updateHashingMethod();
         }
     };
     private ModifyListener keystoreFileTextListener = new ModifyListener()
@@ -829,7 +829,7 @@ public class LdapLdapsServersPage extend
         addDirtyListener( enableTlsCheckbox );
         addSelectionListener( enableTlsCheckbox, enableTlsCheckboxListener );
 
-        // Hashing Method Checkbox
+        // Hashing Password Checkbox
         addDirtyListener( enableServerSidePasswordHashingCheckbox );
         addSelectionListener( enableServerSidePasswordHashingCheckbox, enableServerSidePasswordHashingCheckboxListener );
 
@@ -928,7 +928,7 @@ public class LdapLdapsServersPage extend
         removeDirtyListener( maxSizeLimitText );
         removeModifyListener( maxSizeLimitText, maxSizeLimitTextListener );
 
-        // Hashing Method Checkbox
+        // Hashing Password Checkbox
         removeDirtyListener( enableServerSidePasswordHashingCheckbox );
         removeSelectionListener( enableServerSidePasswordHashingCheckbox,
             enableServerSidePasswordHashingCheckboxListener );
@@ -981,7 +981,7 @@ public class LdapLdapsServersPage extend
             {
                 setSelection( authMechGssapiCheckbox, saslMechHandler.isEnabled() );
             }
-            if ( SupportedSaslMechanisms.CRAM_MD5.equalsIgnoreCase( saslMechHandler.getSaslMechName() ) )
+            else if ( SupportedSaslMechanisms.CRAM_MD5.equalsIgnoreCase( saslMechHandler.getSaslMechName() ) )
             {
                 setSelection( authMechCramMd5Checkbox, saslMechHandler.isEnabled() );
             }
@@ -1010,8 +1010,8 @@ public class LdapLdapsServersPage extend
         // Enable TLS Checkbox
         setSelection( enableTlsCheckbox, getTlsExtendedOpHandlerBean().isEnabled() );
 
-        // Hashing Method widgets
-        InterceptorBean hashingMethodInterceptor = getHashingMethodInterceptor();
+        // Hashing Password widgets
+        InterceptorBean hashingMethodInterceptor = getHashingPasswordInterceptor();
         if ( hashingMethodInterceptor == null )
         {
             // No hashing method interceptor
@@ -1306,112 +1306,19 @@ public class LdapLdapsServersPage extend
 
 
     /**
-     * Creates the hashing method interceptor.
+     * Gets the hashing password interceptor if it can be found.
      *
-     * @param hashingMethod the hashing method
-     * @return the corresponding hashing method interceptor
+     * @return the hashing password interceptor, or <code>null</code>
      */
-    private InterceptorBean createHashingMethodInterceptor( LdapSecurityConstants hashingMethod )
-    {
-        InterceptorBean hashingMethodInterceptor = new InterceptorBean();
-
-        switch ( hashingMethod )
-        {
-            case HASH_METHOD_SHA:
-                hashingMethodInterceptor.setInterceptorClassName( FQCN_HASHING_INTERCEPTOR_SHA );
-                break;
-            case HASH_METHOD_SSHA:
-            default:
-                hashingMethodInterceptor.setInterceptorClassName( FQCN_HASHING_INTERCEPTOR_SSHA );
-                break;
-            case HASH_METHOD_MD5:
-                hashingMethodInterceptor.setInterceptorClassName( FQCN_HASHING_INTERCEPTOR_MD5 );
-                break;
-            case HASH_METHOD_SMD5:
-                hashingMethodInterceptor.setInterceptorClassName( FQCN_HASHING_INTERCEPTOR_SMD5 );
-                break;
-            case HASH_METHOD_CRYPT:
-                hashingMethodInterceptor.setInterceptorClassName( FQCN_HASHING_INTERCEPTOR_CRYPT );
-                break;
-            case HASH_METHOD_SHA256:
-                hashingMethodInterceptor.setInterceptorClassName( FQCN_HASHING_INTERCEPTOR_SHA256 );
-                break;
-            case HASH_METHOD_SSHA256:
-                hashingMethodInterceptor.setInterceptorClassName( FQCN_HASHING_INTERCEPTOR_SSHA256 );
-                break;
-            case HASH_METHOD_SHA384:
-                hashingMethodInterceptor.setInterceptorClassName( FQCN_HASHING_INTERCEPTOR_SHA384 );
-                break;
-            case HASH_METHOD_SSHA384:
-                hashingMethodInterceptor.setInterceptorClassName( FQCN_HASHING_INTERCEPTOR_SSHA384 );
-                break;
-            case HASH_METHOD_SHA512:
-                hashingMethodInterceptor.setInterceptorClassName( FQCN_HASHING_INTERCEPTOR_SHA512 );
-                break;
-            case HASH_METHOD_SSHA512:
-                hashingMethodInterceptor.setInterceptorClassName( FQCN_HASHING_INTERCEPTOR_SSHA512 );
-                break;
-        }
-
-        hashingMethodInterceptor.setInterceptorId( getHashingMethodInterceptorId( hashingMethodInterceptor
-            .getInterceptorClassName() ) );
-        hashingMethodInterceptor.setEnabled( true );
-
-        return hashingMethodInterceptor;
-    }
-
-
-    /**
-     * Gets the hashing method interceptor id from the given 
-     * fully qualified class name (FQCN).
-     *
-     * @param fqcn the fqcn
-     * @return the hashing method interceptor id
-     */
-    private String getHashingMethodInterceptorId( String fqcn )
-    {
-        if ( fqcn != null )
-        {
-            String id = fqcn.replace( "org.apache.directory.server.core.hash.", "" ); //$NON-NLS-1$ //$NON-NLS-2$
-
-            if ( id.length() > 0 )
-            {
-                char firstChar = id.charAt( 0 );
-                char lowerCasedFirstChar = Character.toLowerCase( firstChar );
-
-                return lowerCasedFirstChar + id.substring( 1 );
-            }
-
-            return id;
-        }
-
-        return null;
-    }
-
-
-    /**
-     * Gets the hashing method interceptor if it can be found.
-     *
-     * @return the hashing method interceptor, or <code>null</code>
-     */
-    private InterceptorBean getHashingMethodInterceptor()
+    private InterceptorBean getHashingPasswordInterceptor()
     {
+        // Getting the list of interceptors
         List<InterceptorBean> interceptors = getDirectoryServiceBean().getInterceptors();
+
+        // Looking for the password hashing interceptor
         for ( InterceptorBean interceptor : interceptors )
         {
-            String interceptorId = interceptor.getInterceptorId();
-
-            if ( interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SHA ) )
-                || interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SSHA ) )
-                || interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_MD5 ) )
-                || interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SMD5 ) )
-                || interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_CRYPT ) )
-                || interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SHA256 ) )
-                || interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SSHA256 ) )
-                || interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SHA384 ) )
-                || interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SSHA384 ) )
-                || interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SHA512 ) )
-                || interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SSHA512 ) ) )
+            if ( HASHING_PASSWORD_INTERCEPTOR_ID.equalsIgnoreCase( interceptor.getInterceptorId() ) )
             {
                 return interceptor;
             }
@@ -1431,52 +1338,49 @@ public class LdapLdapsServersPage extend
     {
         if ( interceptor != null )
         {
-            String interceptorId = interceptor.getInterceptorId();
+            String interceptorClassName = interceptor.getInterceptorClassName();
 
-            if ( interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SHA ) ) )
+            if ( interceptorClassName.equalsIgnoreCase( HASHING_PASSWORD_INTERCEPTOR_FQCN_SHA ) )
             {
                 return LdapSecurityConstants.HASH_METHOD_SHA;
             }
-            else if ( interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SSHA ) ) )
+            else if ( interceptorClassName.equalsIgnoreCase( HASHING_PASSWORD_INTERCEPTOR_FQCN_SSHA ) )
             {
                 return LdapSecurityConstants.HASH_METHOD_SSHA;
             }
-            else if ( interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_MD5 ) ) )
+            else if ( interceptorClassName.equalsIgnoreCase( HASHING_PASSWORD_INTERCEPTOR_FQCN_MD5 ) )
             {
                 return LdapSecurityConstants.HASH_METHOD_MD5;
             }
-            else if ( interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SMD5 ) ) )
+            else if ( interceptorClassName.equalsIgnoreCase( HASHING_PASSWORD_INTERCEPTOR_FQCN_SMD5 ) )
             {
                 return LdapSecurityConstants.HASH_METHOD_SMD5;
             }
-            else if ( interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_CRYPT ) ) )
+            else if ( interceptorClassName.equalsIgnoreCase( HASHING_PASSWORD_INTERCEPTOR_FQCN_CRYPT ) )
             {
                 return LdapSecurityConstants.HASH_METHOD_SMD5;
             }
-            else if ( interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SHA256 ) ) )
+            else if ( interceptorClassName.equalsIgnoreCase( HASHING_PASSWORD_INTERCEPTOR_FQCN_SHA256 ) )
             {
                 return LdapSecurityConstants.HASH_METHOD_SHA256;
             }
-            else if ( interceptorId
-                .equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SSHA256 ) ) )
+            else if ( interceptorClassName.equalsIgnoreCase( HASHING_PASSWORD_INTERCEPTOR_FQCN_SSHA256 ) )
             {
                 return LdapSecurityConstants.HASH_METHOD_SSHA256;
             }
-            else if ( interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SHA384 ) ) )
+            else if ( interceptorClassName.equalsIgnoreCase( HASHING_PASSWORD_INTERCEPTOR_FQCN_SHA384 ) )
             {
                 return LdapSecurityConstants.HASH_METHOD_SHA384;
             }
-            else if ( interceptorId
-                .equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SSHA384 ) ) )
+            else if ( interceptorClassName.equalsIgnoreCase( HASHING_PASSWORD_INTERCEPTOR_FQCN_SSHA384 ) )
             {
                 return LdapSecurityConstants.HASH_METHOD_SSHA384;
             }
-            else if ( interceptorId.equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SHA512 ) ) )
+            else if ( interceptorClassName.equalsIgnoreCase( HASHING_PASSWORD_INTERCEPTOR_FQCN_SHA512 ) )
             {
                 return LdapSecurityConstants.HASH_METHOD_SHA512;
             }
-            else if ( interceptorId
-                .equalsIgnoreCase( getHashingMethodInterceptorId( FQCN_HASHING_INTERCEPTOR_SSHA512 ) ) )
+            else if ( interceptorClassName.equalsIgnoreCase( HASHING_PASSWORD_INTERCEPTOR_FQCN_SSHA512 ) )
             {
                 return LdapSecurityConstants.HASH_METHOD_SSHA512;
             }
@@ -1487,97 +1391,171 @@ public class LdapLdapsServersPage extend
 
 
     /**
-     * Adds a new hashing method interceptor, based on the current selection.
+     * Gets the authentication interceptor order.
+     *
+     * @return the authentication interceptor order
      */
-    private void addHashingMethodInterceptor()
+    private int getAuthenticationInterceptorOrder()
     {
-        StructuredSelection selection = ( StructuredSelection ) hashingMethodComboViewer.getSelection();
-        if ( !selection.isEmpty() )
+        // Getting the list of interceptors
+        List<InterceptorBean> interceptors = getDirectoryServiceBean().getInterceptors();
+        for ( InterceptorBean interceptor : interceptors )
         {
-            LdapSecurityConstants hashingMethod = ( LdapSecurityConstants ) selection.getFirstElement();
-            if ( hashingMethod != null )
+            // Looking for the authentication interceptor
+            if ( "org.apache.directory.server.core.authn.AuthenticationInterceptor".equalsIgnoreCase( interceptor //$NON-NLS-1$
+                .getInterceptorClassName() ) )
             {
-                // Creating the hashing method interceptor
-                InterceptorBean hashingMethodInterceptor = createHashingMethodInterceptor( hashingMethod );
+                // We found the authentication interceptor
+                return interceptor.getInterceptorOrder();
+            }
+        }
 
-                // Getting the order of the authentication interceptor
-                int authenticationInterceptorOrder = getAuthenticationInterceptorOrder();
+        // No authentication interceptor was found
+        return 0;
+    }
 
-                // Assigning the order of the hashing method interceptor
-                // It's order is: authenticationInterceptorOrder + 1
-                hashingMethodInterceptor.setInterceptorOrder( authenticationInterceptorOrder + 1 );
 
-                // Getting the interceptors list
-                List<InterceptorBean> interceptors = getDirectoryServiceBean().getInterceptors();
+    /**
+     * Enables the hashing password interceptor.
+     */
+    private void enableHashingPasswordInterceptor()
+    {
+        // Getting the hashing password interceptor
+        InterceptorBean hashingPasswordInterceptor = getHashingPasswordInterceptor();
 
-                // Updating the order of the interceptors after the authentication interceptor
-                for ( InterceptorBean interceptor : interceptors )
-                {
-                    if ( interceptor.getInterceptorOrder() > authenticationInterceptorOrder )
-                    {
-                        interceptor.setInterceptorOrder( interceptor.getInterceptorOrder() + 1 );
-                    }
-                }
+        // If we didn't found one, we need to create it
+        if ( hashingPasswordInterceptor == null )
+        {
+            // Creating a new hashing password interceptor
+            hashingPasswordInterceptor = createHashingPasswordInterceptor();
+        }
+
+        // Enabling the interceptor
+        hashingPasswordInterceptor.setEnabled( true );
+    }
+
+
+    /**
+     * Creates a new hashing password interceptor.
+     *
+     * @return a new hashing password interceptor
+     */
+    private InterceptorBean createHashingPasswordInterceptor()
+    {
+        InterceptorBean hashingPasswordInterceptor = new InterceptorBean();
+
+        // Interceptor ID
+        hashingPasswordInterceptor.setInterceptorId( HASHING_PASSWORD_INTERCEPTOR_ID );
+
+        // Interceptor FQCN
+        hashingPasswordInterceptor.setInterceptorClassName( getFqcnForHashingMethod( getSelectedHashingMethod() ) );
 
-                // Adding the hashing interceptor to the list                
-                interceptors.add( hashingMethodInterceptor );
+        // Getting the order of the authentication interceptor
+        int authenticationInterceptorOrder = getAuthenticationInterceptorOrder();
+
+        // Assigning the order of the hashing password interceptor
+        // It's order is: authenticationInterceptorOrder + 1
+        hashingPasswordInterceptor.setInterceptorOrder( authenticationInterceptorOrder + 1 );
+
+        // Updating the order of the interceptors after the authentication interceptor
+        for ( InterceptorBean interceptor : getDirectoryServiceBean().getInterceptors() )
+        {
+            if ( interceptor.getInterceptorOrder() > authenticationInterceptorOrder )
+            {
+                interceptor.setInterceptorOrder( interceptor.getInterceptorOrder() + 1 );
             }
         }
+
+        // Adding the hashing password interceptor            
+        getDirectoryServiceBean().addInterceptors( hashingPasswordInterceptor );
+
+        return hashingPasswordInterceptor;
     }
 
 
     /**
-     * Deletes the hashing method interceptor.
+     * Disables the hashing password interceptor.
      */
-    private void deleteHashingMethodInterceptor()
+    private void disableHashingPasswordInterceptor()
     {
-        // Getting the hashing method interceptor
-        InterceptorBean hashingMethodInterceptor = getHashingMethodInterceptor();
+        // Getting the hashing password interceptor
+        InterceptorBean hashingPasswordInterceptor = getHashingPasswordInterceptor();
 
-        if ( hashingMethodInterceptor != null )
+        if ( hashingPasswordInterceptor != null )
         {
-            // Getting the order of the hashing method interceptor
-            int hashingMethodInterceptorOrder = hashingMethodInterceptor.getInterceptorOrder();
+            // Disabling the interceptor
+            hashingPasswordInterceptor.setEnabled( false );
+        }
+    }
 
-            // Getting the interceptors list
-            List<InterceptorBean> interceptors = getDirectoryServiceBean().getInterceptors();
 
-            // Updating the order of the interceptors after the hashing method interceptor
-            for ( InterceptorBean interceptor : interceptors )
-            {
-                if ( interceptor.getInterceptorOrder() > hashingMethodInterceptorOrder )
-                {
-                    interceptor.setInterceptorOrder( interceptor.getInterceptorOrder() - 1 );
-                }
-            }
+    /**
+     * Updates the hashing method.
+     */
+    private void updateHashingMethod()
+    {
+        // Getting the hashing password interceptor
+        InterceptorBean hashingPasswordInterceptor = getHashingPasswordInterceptor();
 
-            // Removing the hashing interceptor to the list                
-            interceptors.remove( hashingMethodInterceptor );
+        if ( hashingPasswordInterceptor != null )
+        {
+            // Updating the hashing method
+            hashingPasswordInterceptor.setInterceptorClassName( getFqcnForHashingMethod( getSelectedHashingMethod() ) );
         }
     }
 
 
     /**
-     * Gets the authentication interceptor order.
+     * Gets the FQCN for the given hashing method.
      *
-     * @return the authentication interceptor order
+     * @param hashingMethod the hashing method
+     * @return the corresponding FQCN
      */
-    private int getAuthenticationInterceptorOrder()
+    private String getFqcnForHashingMethod( LdapSecurityConstants hashingMethod )
     {
-        // Getting the list of interceptors
-        List<InterceptorBean> interceptors = getDirectoryServiceBean().getInterceptors();
-        for ( InterceptorBean interceptor : interceptors )
+        switch ( hashingMethod )
         {
-            // Looking for the authentication interceptor
-            if ( "org.apache.directory.server.core.authn.AuthenticationInterceptor".equalsIgnoreCase( interceptor //$NON-NLS-1$
-                .getInterceptorClassName() ) )
-            {
-                // We found the authentication interceptor
-                return interceptor.getInterceptorOrder();
-            }
+            case HASH_METHOD_MD5:
+                return HASHING_PASSWORD_INTERCEPTOR_FQCN_MD5;
+            case HASH_METHOD_SMD5:
+                return HASHING_PASSWORD_INTERCEPTOR_FQCN_SMD5;
+            case HASH_METHOD_CRYPT:
+                return HASHING_PASSWORD_INTERCEPTOR_FQCN_CRYPT;
+            case HASH_METHOD_SHA256:
+                return HASHING_PASSWORD_INTERCEPTOR_FQCN_SHA256;
+            case HASH_METHOD_SSHA256:
+                return HASHING_PASSWORD_INTERCEPTOR_FQCN_SSHA256;
+            case HASH_METHOD_SHA384:
+                return HASHING_PASSWORD_INTERCEPTOR_FQCN_SHA384;
+            case HASH_METHOD_SSHA384:
+                return HASHING_PASSWORD_INTERCEPTOR_FQCN_SSHA384;
+            case HASH_METHOD_SHA512:
+                return HASHING_PASSWORD_INTERCEPTOR_FQCN_SHA512;
+            case HASH_METHOD_SSHA512:
+                return HASHING_PASSWORD_INTERCEPTOR_FQCN_SSHA512;
+            case HASH_METHOD_SHA:
+                return HASHING_PASSWORD_INTERCEPTOR_FQCN_SHA;
+            case HASH_METHOD_SSHA:
+            default:
+                return HASHING_PASSWORD_INTERCEPTOR_FQCN_SSHA;
         }
+    }
 
-        // No authentication interceptor was found
-        return 0;
+
+    /**
+     * Gets the selected hashing method.
+     *
+     * @return the selected hashing method
+     */
+    private LdapSecurityConstants getSelectedHashingMethod()
+    {
+        StructuredSelection selection = ( StructuredSelection ) hashingMethodComboViewer.getSelection();
+
+        if ( !selection.isEmpty() )
+        {
+            return ( LdapSecurityConstants ) selection.getFirstElement();
+        }
+
+        return null;
     }
 }