You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2018/12/05 16:54:09 UTC

[directory-server] branch master updated: Fixed teh server accordingly to the LDAP API control modifications

This is an automated email from the ASF dual-hosted git repository.

elecharny pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/directory-server.git


The following commit(s) were added to refs/heads/master by this push:
     new 873b508  Fixed teh server accordingly to the LDAP API control modifications
873b508 is described below

commit 873b508d2982bcb9bb10161472755368fcf8d086
Author: elecharny <el...@emmanuels-mbp>
AuthorDate: Wed Dec 5 17:54:07 2018 +0100

    Fixed teh server accordingly to the LDAP API control modifications
---
 .../server/core/factory/DSAnnotationProcessor.java |  3 +-
 .../core/api/LdapCoreSessionConnectionTest.java    | 16 ++--
 .../directory/server/core/jndi/ServerContext.java  | 17 ++--
 .../server/core/jndi/ServerLdapContext.java        |  4 +-
 .../core/authn/AuthenticationInterceptor.java      | 74 ++++++++---------
 .../ldap/handlers/extended/PwdModifyHandler.java   |  8 +-
 .../server/operations/extended/PwdModifyIT.java    | 26 +++---
 .../operations/search/PersistentSearchApiIT.java   |  2 +-
 .../operations/search/PersistentSearchIT.java      |  2 +-
 .../directory/server/ppolicy/PasswordPolicyIT.java | 94 +++++++++++-----------
 .../server/replication/ClientInitialRefreshIT.java | 10 +++
 11 files changed, 135 insertions(+), 121 deletions(-)

diff --git a/core-annotations/src/main/java/org/apache/directory/server/core/factory/DSAnnotationProcessor.java b/core-annotations/src/main/java/org/apache/directory/server/core/factory/DSAnnotationProcessor.java
index 4cd40c2..275ac30 100644
--- a/core-annotations/src/main/java/org/apache/directory/server/core/factory/DSAnnotationProcessor.java
+++ b/core-annotations/src/main/java/org/apache/directory/server/core/factory/DSAnnotationProcessor.java
@@ -93,8 +93,7 @@ public final class DSAnnotationProcessor
         }
         
         Class<?> factory = dsBuilder.factory();
-        DirectoryServiceFactory dsf = ( DirectoryServiceFactory ) factory
-            .newInstance();
+        DirectoryServiceFactory dsf = ( DirectoryServiceFactory ) factory.newInstance();
 
         DirectoryService service = dsf.getDirectoryService();
         service.setAccessControlEnabled( dsBuilder.enableAccessControl() );
diff --git a/core-integ/src/test/java/org/apache/directory/server/core/api/LdapCoreSessionConnectionTest.java b/core-integ/src/test/java/org/apache/directory/server/core/api/LdapCoreSessionConnectionTest.java
index 0d42bc4..b22789c 100755
--- a/core-integ/src/test/java/org/apache/directory/server/core/api/LdapCoreSessionConnectionTest.java
+++ b/core-integ/src/test/java/org/apache/directory/server/core/api/LdapCoreSessionConnectionTest.java
@@ -24,9 +24,11 @@ import static org.junit.Assert.assertNotNull;
 
 import org.apache.directory.api.ldap.codec.api.LdapApiService;
 import org.apache.directory.api.ldap.codec.api.LdapApiServiceFactory;
-import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicy;
-import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyImpl;
-import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyDecorator;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequest;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequestImpl;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyResponse;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyResponseImpl;
+import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyResponseDecorator;
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.message.BindRequest;
 import org.apache.directory.api.ldap.model.message.BindRequestImpl;
@@ -78,8 +80,8 @@ public class LdapCoreSessionConnectionTest extends AbstractLdapTestUnit
 {
     private static Logger logger = LoggerFactory.getLogger( LdapCoreSessionConnection.class );
     private static final LdapApiService codec = LdapApiServiceFactory.getSingleton();
-    private static final PasswordPolicyDecorator passwordPolicyRequestControl =
-        new PasswordPolicyDecorator( codec, new PasswordPolicyImpl() );
+    private static final PasswordPolicyResponseDecorator passwordPolicyRequestControl =
+        new PasswordPolicyResponseDecorator( codec, new PasswordPolicyResponseImpl() );
 
 
     @Before
@@ -117,7 +119,7 @@ public class LdapCoreSessionConnectionTest extends AbstractLdapTestUnit
             BindResponse bindResponse = connection.bind( bindRequest );
             Control responseControl = bindResponse.getControls().get( passwordPolicyRequestControl.getOid() );
             assertNotNull( responseControl );
-            PasswordPolicy passwordPolicy = ( ( PasswordPolicyDecorator ) responseControl ).getDecorated();
+            PasswordPolicyResponse passwordPolicy = ( ( PasswordPolicyResponseDecorator ) responseControl ).getDecorated();
             assertNotNull( passwordPolicy );
         }
         finally
@@ -145,7 +147,7 @@ public class LdapCoreSessionConnectionTest extends AbstractLdapTestUnit
             BindResponse bindResponse = connection.bind( bindRequest );
             Control responseControl = bindResponse.getControls().get( passwordPolicyRequestControl.getOid() );
             assertNotNull( responseControl );
-            PasswordPolicy passwordPolicy = ( ( PasswordPolicyDecorator ) responseControl ).getDecorated();
+            PasswordPolicyResponse passwordPolicy = ( ( PasswordPolicyResponseDecorator ) responseControl ).getDecorated();
             assertNotNull( passwordPolicy );
         }
         finally
diff --git a/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java b/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java
index 9b61c92..bfa8f35 100644
--- a/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java
+++ b/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java
@@ -54,10 +54,11 @@ import org.apache.directory.api.ldap.codec.controls.search.entryChange.EntryChan
 import org.apache.directory.api.ldap.codec.controls.search.pagedSearch.PagedResultsDecorator;
 import org.apache.directory.api.ldap.codec.controls.search.persistentSearch.PersistentSearchDecorator;
 import org.apache.directory.api.ldap.codec.controls.search.subentries.SubentriesDecorator;
-import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicy;
-import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyImpl;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequest;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequestImpl;
 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyResponseImpl;
-import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyDecorator;
+import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyRequestDecorator;
+import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyResponseDecorator;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncDone.SyncDoneValue;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncRequest.SyncRequestValue;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateValue;
@@ -175,7 +176,7 @@ public abstract class ServerContext implements EventContext
         ADS_CONTROLS.put( EntryChange.OID, ControlEnum.ENTRY_CHANGE_CONTROL );
         ADS_CONTROLS.put( ManageDsaIT.OID, ControlEnum.MANAGE_DSA_IT_CONTROL );
         ADS_CONTROLS.put( PagedResults.OID, ControlEnum.PAGED_RESULTS_CONTROL );
-        ADS_CONTROLS.put( PasswordPolicy.OID, ControlEnum.PASSWORD_POLICY_REQUEST_CONTROL );
+        ADS_CONTROLS.put( PasswordPolicyRequest.OID, ControlEnum.PASSWORD_POLICY_REQUEST_CONTROL );
         ADS_CONTROLS.put( PersistentSearch.OID, ControlEnum.PERSISTENT_SEARCH_CONTROL );
         ADS_CONTROLS.put( Subentries.OID, ControlEnum.SUBENTRIES_CONTROL );
         ADS_CONTROLS.put( SyncDoneValue.OID, ControlEnum.SYNC_DONE_VALUE_CONTROL );
@@ -415,13 +416,13 @@ public abstract class ServerContext implements EventContext
             case PASSWORD_POLICY_REQUEST_CONTROL:
                 if ( isRequest )
                 {
-                    control = new PasswordPolicyDecorator( getDirectoryService().getLdapCodecService(),
-                        new PasswordPolicyImpl() );
+                    control = new PasswordPolicyRequestDecorator( getDirectoryService().getLdapCodecService(),
+                        new PasswordPolicyRequestImpl() );
                 }
                 else
                 {
-                    control = new PasswordPolicyDecorator( getDirectoryService().getLdapCodecService(),
-                        new PasswordPolicyImpl( new PasswordPolicyResponseImpl() ) );
+                    control = new PasswordPolicyResponseDecorator( getDirectoryService().getLdapCodecService(),
+                        new PasswordPolicyResponseImpl() );
                 }
 
                 break;
diff --git a/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerLdapContext.java b/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerLdapContext.java
index 0773b84..e872fe1 100644
--- a/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerLdapContext.java
+++ b/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerLdapContext.java
@@ -243,7 +243,7 @@ public class ServerLdapContext extends ServerDirContext implements LdapContext
 
         try
         {
-            opCtx.addRequestControls( JndiUtils.fromJndiControls( getDirectoryService().getLdapCodecService(),
+            opCtx.addRequestControls( JndiUtils.fromJndiRequestControls( getDirectoryService().getLdapCodecService(),
                 requestControls ) );
         }
         catch ( DecoderException e1 )
@@ -286,7 +286,7 @@ public class ServerLdapContext extends ServerDirContext implements LdapContext
 
         try
         {
-            opCtx.addRequestControls( JndiUtils.fromJndiControls( getDirectoryService().getLdapCodecService(),
+            opCtx.addRequestControls( JndiUtils.fromJndiRequestControls( getDirectoryService().getLdapCodecService(),
                 requestControls ) );
         }
         catch ( DecoderException e1 )
diff --git a/interceptors/authn/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java b/interceptors/authn/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java
index 9878872..bff1122 100644
--- a/interceptors/authn/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java
+++ b/interceptors/authn/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java
@@ -47,9 +47,9 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
-import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicy;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequest;
 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyErrorEnum;
-import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyDecorator;
+import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyResponseDecorator;
 import org.apache.directory.api.ldap.model.constants.AuthenticationLevel;
 import org.apache.directory.api.ldap.model.constants.LdapSecurityConstants;
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
@@ -344,7 +344,7 @@ public class AuthenticationInterceptor extends BaseInterceptor
 
         PasswordPolicyConfiguration policyConfig = getPwdPolicy( entry );
 
-        boolean isPPolicyReqCtrlPresent = addContext.hasRequestControl( PasswordPolicy.OID );
+        boolean isPPolicyReqCtrlPresent = addContext.hasRequestControl( PasswordPolicyRequest.OID );
 
         checkPwdReset( addContext );
 
@@ -370,9 +370,9 @@ public class AuthenticationInterceptor extends BaseInterceptor
             {
                 if ( isPPolicyReqCtrlPresent )
                 {
-                    PasswordPolicyDecorator responseControl =
-                        new PasswordPolicyDecorator( directoryService.getLdapCodecService(), true );
-                    responseControl.getResponse().setPasswordPolicyError(
+                    PasswordPolicyResponseDecorator responseControl =
+                        new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
+                    responseControl.setPasswordPolicyError(
                         PasswordPolicyErrorEnum.get( e.getErrorCode() ) );
                     addContext.addResponseControl( responseControl );
                 }
@@ -560,9 +560,9 @@ public class AuthenticationInterceptor extends BaseInterceptor
         }
 
         PasswordPolicyException ppe = null;
-        boolean isPPolicyReqCtrlPresent = bindContext.hasRequestControl( PasswordPolicy.OID );
-        PasswordPolicyDecorator pwdRespCtrl =
-            new PasswordPolicyDecorator( directoryService.getLdapCodecService(), true );
+        boolean isPPolicyReqCtrlPresent = bindContext.hasRequestControl( PasswordPolicyRequest.OID );
+        PasswordPolicyResponseDecorator pwdRespCtrl =
+            new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
         boolean authenticated = false;
 
         Authenticator authenticator = selectAuthenticator( bindDn, level );
@@ -606,7 +606,7 @@ public class AuthenticationInterceptor extends BaseInterceptor
         {
             if ( isPPolicyReqCtrlPresent )
             {
-                pwdRespCtrl.getResponse().setPasswordPolicyError( PasswordPolicyErrorEnum.get( ppe.getErrorCode() ) );
+                pwdRespCtrl.setPasswordPolicyError( PasswordPolicyErrorEnum.get( ppe.getErrorCode() ) );
                 bindContext.addResponseControl( pwdRespCtrl );
             }
 
@@ -686,7 +686,7 @@ public class AuthenticationInterceptor extends BaseInterceptor
                             pwdAccountLockedTimeAt );
                         mods.add( pwdAccountLockedMod );
 
-                        pwdRespCtrl.getResponse().setPasswordPolicyError( PasswordPolicyErrorEnum.ACCOUNT_LOCKED );
+                        pwdRespCtrl.setPasswordPolicyError( PasswordPolicyErrorEnum.ACCOUNT_LOCKED );
                     }
                 }
                 else if ( policyConfig.getPwdMinDelay() > 0 )
@@ -783,7 +783,7 @@ public class AuthenticationInterceptor extends BaseInterceptor
                             numGraceAuth = policyConfig.getPwdGraceAuthNLimit() - 1;
                         }
 
-                        pwdRespCtrl.getResponse().setGraceAuthNRemaining( numGraceAuth );
+                        pwdRespCtrl.setGraceAuthNRemaining( numGraceAuth );
 
                         pwdGraceUseAttr.add( DateUtils.getGeneralizedTime() );
                         Modification pwdGraceUseMod = new DefaultModification( ADD_ATTRIBUTE, pwdGraceUseAttr );
@@ -814,12 +814,12 @@ public class AuthenticationInterceptor extends BaseInterceptor
 
                 if ( expiryWarnTime > 0 )
                 {
-                    pwdRespCtrl.getResponse().setTimeBeforeExpiration( expiryWarnTime );
+                    pwdRespCtrl.setTimeBeforeExpiration( expiryWarnTime );
                 }
 
                 if ( isPwdMustReset( userEntry ) )
                 {
-                    pwdRespCtrl.getResponse().setPasswordPolicyError( PasswordPolicyErrorEnum.CHANGE_AFTER_RESET );
+                    pwdRespCtrl.setPasswordPolicyError( PasswordPolicyErrorEnum.CHANGE_AFTER_RESET );
                     bindContext.getSession().setPwdMustChange( true );
                 }
 
@@ -995,7 +995,7 @@ public class AuthenticationInterceptor extends BaseInterceptor
         {
             // The password is present in the modifications. Deal with the various use cases.
             CoreSession userSession = modifyContext.getSession();
-            boolean isPPolicyReqCtrlPresent = modifyContext.hasRequestControl( PasswordPolicy.OID );
+            boolean isPPolicyReqCtrlPresent = modifyContext.hasRequestControl( PasswordPolicyRequest.OID );
             
             // First, check if the password must be changed, and if the operation allows it
             checkPwdMustChange( modifyContext, userSession, pwdModDetails, isPPolicyReqCtrlPresent );
@@ -1018,9 +1018,9 @@ public class AuthenticationInterceptor extends BaseInterceptor
                 {
                     if ( isPPolicyReqCtrlPresent )
                     {
-                        PasswordPolicyDecorator responseControl =
-                            new PasswordPolicyDecorator( directoryService.getLdapCodecService(), true );
-                        responseControl.getResponse().setPasswordPolicyError(
+                        PasswordPolicyResponseDecorator responseControl =
+                            new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
+                        responseControl.setPasswordPolicyError(
                             PasswordPolicyErrorEnum.PASSWORD_TOO_YOUNG );
                         modifyContext.addResponseControl( responseControl );
                     }
@@ -1039,9 +1039,9 @@ public class AuthenticationInterceptor extends BaseInterceptor
                 {
                     if ( isPPolicyReqCtrlPresent )
                     {
-                        PasswordPolicyDecorator responseControl =
-                            new PasswordPolicyDecorator( directoryService.getLdapCodecService(), true );
-                        responseControl.getResponse().setPasswordPolicyError(
+                        PasswordPolicyResponseDecorator responseControl =
+                            new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
+                        responseControl.setPasswordPolicyError(
                             PasswordPolicyErrorEnum.get( e.getErrorCode() ) );
                         modifyContext.addResponseControl( responseControl );
                     }
@@ -1168,9 +1168,9 @@ public class AuthenticationInterceptor extends BaseInterceptor
                 {
                     if ( isPPolicyReqCtrlPresent )
                     {
-                        PasswordPolicyDecorator responseControl =
-                            new PasswordPolicyDecorator( directoryService.getLdapCodecService(), true );
-                        responseControl.getResponse().setPasswordPolicyError(
+                        PasswordPolicyResponseDecorator responseControl =
+                            new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
+                        responseControl.setPasswordPolicyError(
                             PasswordPolicyErrorEnum.PASSWORD_IN_HISTORY );
                         modifyContext.addResponseControl( responseControl );
                     }
@@ -1263,9 +1263,9 @@ public class AuthenticationInterceptor extends BaseInterceptor
        {
            if ( isPPolicyReqCtrlPresent )
            {
-               PasswordPolicyDecorator responseControl =
-                   new PasswordPolicyDecorator( directoryService.getLdapCodecService(), true );
-               responseControl.getResponse().setPasswordPolicyError(
+               PasswordPolicyResponseDecorator responseControl =
+                   new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
+               responseControl.setPasswordPolicyError(
                    PasswordPolicyErrorEnum.CHANGE_AFTER_RESET );
                modifyContext.addResponseControl( responseControl );
            }
@@ -1290,9 +1290,9 @@ public class AuthenticationInterceptor extends BaseInterceptor
 
             if ( isPPolicyReqCtrlPresent )
             {
-                PasswordPolicyDecorator responseControl =
-                    new PasswordPolicyDecorator( directoryService.getLdapCodecService(), true );
-                responseControl.getResponse().setPasswordPolicyError(
+                PasswordPolicyResponseDecorator responseControl =
+                    new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
+                responseControl.setPasswordPolicyError(
                     PasswordPolicyErrorEnum.MUST_SUPPLY_OLD_PASSWORD );
                 modifyContext.addResponseControl( responseControl );
             }
@@ -1314,9 +1314,9 @@ public class AuthenticationInterceptor extends BaseInterceptor
         {
             if ( isPPolicyReqCtrlPresent )
             {
-                PasswordPolicyDecorator responseControl =
-                    new PasswordPolicyDecorator( directoryService.getLdapCodecService(), true );
-                responseControl.getResponse().setPasswordPolicyError(
+                PasswordPolicyResponseDecorator responseControl =
+                    new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
+                responseControl.setPasswordPolicyError(
                     PasswordPolicyErrorEnum.PASSWORD_MOD_NOT_ALLOWED );
                 modifyContext.addResponseControl( responseControl );
             }
@@ -1711,13 +1711,13 @@ public class AuthenticationInterceptor extends BaseInterceptor
             if ( session.isPwdMustChange() )
             {
                 boolean isPPolicyReqCtrlPresent = opContext
-                    .hasRequestControl( PasswordPolicy.OID );
+                    .hasRequestControl( PasswordPolicyRequest.OID );
 
                 if ( isPPolicyReqCtrlPresent )
                 {
-                    PasswordPolicyDecorator pwdRespCtrl =
-                        new PasswordPolicyDecorator( directoryService.getLdapCodecService(), true );
-                    pwdRespCtrl.getResponse().setPasswordPolicyError( PasswordPolicyErrorEnum.CHANGE_AFTER_RESET );
+                    PasswordPolicyResponseDecorator pwdRespCtrl =
+                        new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
+                    pwdRespCtrl.setPasswordPolicyError( PasswordPolicyErrorEnum.CHANGE_AFTER_RESET );
                     opContext.addResponseControl( pwdRespCtrl );
                 }
 
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/PwdModifyHandler.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/PwdModifyHandler.java
index bee533d..16f02eb 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/PwdModifyHandler.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/PwdModifyHandler.java
@@ -24,7 +24,7 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicy;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequest;
 import org.apache.directory.api.ldap.extras.extended.pwdModify.PasswordModifyRequest;
 import org.apache.directory.api.ldap.extras.extended.pwdModify.PasswordModifyResponse;
 import org.apache.directory.api.ldap.extras.extended.pwdModify.PasswordModifyResponseImpl;
@@ -138,7 +138,7 @@ public class PwdModifyHandler implements ExtendedOperationHandler<PasswordModify
         ModifyRequest modifyRequest = new ModifyRequestImpl();
         modifyRequest.setName( userDn );
 
-        Control ppolicyControl = req.getControl( PasswordPolicy.OID );
+        Control ppolicyControl = req.getControl( PasswordPolicyRequest.OID );
         
         if ( ppolicyControl != null )
         {
@@ -200,7 +200,7 @@ public class PwdModifyHandler implements ExtendedOperationHandler<PasswordModify
             PasswordModifyResponseImpl pmrl = new PasswordModifyResponseImpl(
                 req.getMessageId(), ResultCodeEnum.SUCCESS );
 
-            ppolicyControl = modifyRequest.getResultResponse().getControl( PasswordPolicy.OID );
+            ppolicyControl = modifyRequest.getResultResponse().getControl( PasswordPolicyRequest.OID );
 
             if ( ppolicyControl != null )
             {
@@ -229,7 +229,7 @@ public class PwdModifyHandler implements ExtendedOperationHandler<PasswordModify
             req.getMessageId(), errorCode, "Cannot modify the password for user "
                 + userDn + ", exception : " + errorMessage );
 
-        ppolicyControl = modifyRequest.getResultResponse().getControl( PasswordPolicy.OID );
+        ppolicyControl = modifyRequest.getResultResponse().getControl( PasswordPolicyRequest.OID );
 
         if ( ppolicyControl != null )
         {
diff --git a/server-integ/src/test/java/org/apache/directory/server/operations/extended/PwdModifyIT.java b/server-integ/src/test/java/org/apache/directory/server/operations/extended/PwdModifyIT.java
index 5947765..71df9b4 100644
--- a/server-integ/src/test/java/org/apache/directory/server/operations/extended/PwdModifyIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/operations/extended/PwdModifyIT.java
@@ -30,10 +30,12 @@ import static org.junit.Assert.assertNull;
 
 import org.apache.directory.api.ldap.codec.api.LdapApiService;
 import org.apache.directory.api.ldap.codec.api.LdapApiServiceFactory;
-import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicy;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequest;
 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyErrorEnum;
-import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyImpl;
-import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyDecorator;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequestImpl;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyResponse;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyResponseImpl;
+import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyResponseDecorator;
 import org.apache.directory.api.ldap.extras.extended.pwdModify.PasswordModifyRequest;
 import org.apache.directory.api.ldap.extras.extended.pwdModify.PasswordModifyRequestImpl;
 import org.apache.directory.api.ldap.extras.extended.pwdModify.PasswordModifyResponse;
@@ -90,8 +92,8 @@ public class PwdModifyIT extends AbstractLdapTestUnit
 {
     private static final LdapApiService codec = LdapApiServiceFactory.getSingleton();
 
-    private static final PasswordPolicyDecorator PP_REQ_CTRL =
-        new PasswordPolicyDecorator( codec, new PasswordPolicyImpl() );
+    private static final PasswordPolicyResponseDecorator PP_REQ_CTRL =
+        new PasswordPolicyResponseDecorator( codec, new PasswordPolicyResponseImpl() );
 
     /** The passwordPolicy configuration */
     private PasswordPolicyConfiguration policyConfig;
@@ -100,7 +102,7 @@ public class PwdModifyIT extends AbstractLdapTestUnit
     /**
      * Get the PasswordPolicy control from a response
      */
-    private PasswordPolicy getPwdRespCtrl( Response resp ) throws Exception
+    private PasswordPolicyResponse getPwdRespCtrl( Response resp ) throws Exception
     {
         Control control = resp.getControls().get( PP_REQ_CTRL.getOid() );
 
@@ -109,7 +111,7 @@ public class PwdModifyIT extends AbstractLdapTestUnit
             return null;
         }
 
-        return ( ( PasswordPolicyDecorator ) control ).getDecorated();
+        return ( ( PasswordPolicyResponseDecorator ) control ).getDecorated();
     }
 
 
@@ -132,7 +134,7 @@ public class PwdModifyIT extends AbstractLdapTestUnit
 
         AddResponse addResp = adminConnection.add( addRequest );
         assertEquals( ResultCodeEnum.SUCCESS, addResp.getLdapResult().getResultCode() );
-        PasswordPolicy respCtrl = getPwdRespCtrl( addResp );
+        PasswordPolicyResponse respCtrl = getPwdRespCtrl( addResp );
         assertNull( respCtrl );
     }
 
@@ -515,8 +517,8 @@ public class PwdModifyIT extends AbstractLdapTestUnit
             Dn userDn = new Dn( "cn=UserXY,ou=system" );
 
             userConnection = getNetworkConnectionAs( ldapServer, userDn.toString(), "secret3" );
-            PasswordPolicyDecorator passwordPolicyRequestControl =
-                new PasswordPolicyDecorator( LdapApiServiceFactory.getSingleton(), new PasswordPolicyImpl() );
+            PasswordPolicyResponseDecorator passwordPolicyRequestControl =
+                new PasswordPolicyResponseDecorator( LdapApiServiceFactory.getSingleton(), new PasswordPolicyResponseImpl() );
             PasswordModifyRequest selfPwdModifyRequest = new PasswordModifyRequestImpl();
             selfPwdModifyRequest.setUserIdentity( Strings.getBytesUtf8( userDn.getNormName() ) );
             selfPwdModifyRequest.setOldPassword( Strings.getBytesUtf8( "secret3" ) );
@@ -531,8 +533,8 @@ public class PwdModifyIT extends AbstractLdapTestUnit
                 .getControl( passwordPolicyRequestControl.getOid() );
             assertNotNull( passwordPolicyResponseControl );
             assertEquals( PasswordPolicyErrorEnum.PASSWORD_TOO_YOUNG,
-                ( ( PasswordPolicyDecorator ) passwordPolicyResponseControl )
-                    .getDecorated().getResponse().getPasswordPolicyError() );
+                ( ( PasswordPolicyResponseDecorator ) passwordPolicyResponseControl )
+                    .getDecorated().getPasswordPolicyError() );
 
             addUser( adminConnection, "UserZZ", "secret4" );
             Dn otherUserDn = new Dn( "cn=UserZZ,ou=system" );
diff --git a/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchApiIT.java b/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchApiIT.java
index bc4bcb1..52035d5 100644
--- a/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchApiIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchApiIT.java
@@ -693,7 +693,7 @@ public class PersistentSearchApiIT extends AbstractLdapTestUnit
                                 if ( jndiControl.getID().equals(
                                     EntryChange.OID ) )
                                 {
-                                    ecControl = ( EntryChange ) JndiUtils.fromJndiControl( codec, jndiControl );
+                                    ecControl = ( EntryChange ) JndiUtils.fromJndiResponseControl( codec, jndiControl );
                                     ( ( EntryChangeDecorator ) ecControl ).decode( jndiControl.getEncodedValue() );
                                 }
                             }
diff --git a/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchIT.java b/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchIT.java
index ac44e10..866446f 100644
--- a/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchIT.java
@@ -693,7 +693,7 @@ public class PersistentSearchIT extends AbstractLdapTestUnit
                                 if ( jndiControl.getID().equals(
                                     EntryChange.OID ) )
                                 {
-                                    ecControl = ( EntryChange ) JndiUtils.fromJndiControl( codec, jndiControl );
+                                    ecControl = ( EntryChange ) JndiUtils.fromJndiResponseControl( codec, jndiControl );
                                     ( ( EntryChangeDecorator ) ecControl ).decode( jndiControl.getEncodedValue() );
                                 }
                             }
diff --git a/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java b/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java
index bb9f021..2f0c14f 100644
--- a/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java
@@ -41,10 +41,11 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
-import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicy;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequest;
 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyErrorEnum;
-import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyImpl;
-import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyDecorator;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequestImpl;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyResponse;
+import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyResponseDecorator;
 import org.apache.directory.api.ldap.model.constants.LdapSecurityConstants;
 import org.apache.directory.api.ldap.model.constants.PasswordPolicySchemaConstants;
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
@@ -105,8 +106,8 @@ import org.junit.runner.RunWith;
 @CreateDS(enableChangeLog = false, name = "PasswordPolicyTest")
 public class PasswordPolicyIT extends AbstractLdapTestUnit
 {
-    private static final PasswordPolicy PP_REQ_CTRL =
-        new PasswordPolicyImpl();
+    private static final PasswordPolicyRequest PP_REQ_CTRL =
+        new PasswordPolicyRequestImpl();
 
 
     private PasswordPolicyConfiguration policyConfig;
@@ -157,7 +158,7 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
     /**
      * Get the PasswordPolicy control from a response
      */
-    private PasswordPolicy getPwdRespCtrl( Response resp ) throws Exception
+    private PasswordPolicyResponse getPwdRespCtrl( Response resp ) throws Exception
     {
         Control control = resp.getControls().get( PP_REQ_CTRL.getOid() );
 
@@ -166,7 +167,7 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
             return null;
         }
 
-        return ( ( PasswordPolicyDecorator ) control ).getDecorated();
+        return ( ( PasswordPolicyResponseDecorator ) control ).getDecorated();
     }
 
 
@@ -189,7 +190,7 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
 
         AddResponse addResp = adminConnection.add( addRequest );
         assertEquals( ResultCodeEnum.SUCCESS, addResp.getLdapResult().getResultCode() );
-        PasswordPolicy respCtrl = getPwdRespCtrl( addResp );
+        PasswordPolicyResponse respCtrl = getPwdRespCtrl( addResp );
         assertNull( respCtrl );
         
         return userEntry.getDn();
@@ -308,9 +309,9 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
 
             ModifyResponse response = changePassword( userDn, password, password );
             assertEquals( ResultCodeEnum.CONSTRAINT_VIOLATION, response.getLdapResult().getResultCode() );
-            PasswordPolicy respCtrl = getPwdRespCtrl( response );
+            PasswordPolicyResponse respCtrl = getPwdRespCtrl( response );
             assertNotNull( respCtrl );
-            assertEquals( PasswordPolicyErrorEnum.PASSWORD_IN_HISTORY, respCtrl.getResponse().getPasswordPolicyError() );
+            assertEquals( PasswordPolicyErrorEnum.PASSWORD_IN_HISTORY, respCtrl.getPasswordPolicyError() );
 
             ModifyRequest modifyRequest = new ModifyRequestImpl();
             modifyRequest.setName( userDn );
@@ -366,9 +367,9 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
 
                 ModifyResponse response = changePassword( userDn, password, password );
                 assertEquals( ResultCodeEnum.CONSTRAINT_VIOLATION, response.getLdapResult().getResultCode() );
-                PasswordPolicy respCtrl = getPwdRespCtrl( response );
+                PasswordPolicyResponse respCtrl = getPwdRespCtrl( response );
                 assertNotNull( respCtrl );
-                assertEquals( PasswordPolicyErrorEnum.PASSWORD_IN_HISTORY, respCtrl.getResponse().getPasswordPolicyError() );
+                assertEquals( PasswordPolicyErrorEnum.PASSWORD_IN_HISTORY, respCtrl.getPasswordPolicyError() );
 
                 ModifyRequest modifyRequest = new ModifyRequestImpl();
                 modifyRequest.setName( userDn );
@@ -423,9 +424,9 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
         AddResponse addResp = adminConnection.add( addRequest );
         assertEquals( ResultCodeEnum.CONSTRAINT_VIOLATION, addResp.getLdapResult().getResultCode() );
 
-        PasswordPolicy respCtrl = getPwdRespCtrl( addResp );
+        PasswordPolicyResponse respCtrl = getPwdRespCtrl( addResp );
         assertNotNull( respCtrl );
-        assertEquals( INSUFFICIENT_PASSWORD_QUALITY, respCtrl.getResponse().getPasswordPolicyError() );
+        assertEquals( INSUFFICIENT_PASSWORD_QUALITY, respCtrl.getPasswordPolicyError() );
 
         // Relax the Check Quality to CHECK_ACCEPT
         policyConfig.setPwdCheckQuality( CheckQualityEnum.CHECK_ACCEPT ); // allow the password if its quality can't be checked
@@ -534,7 +535,7 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
 
         AddResponse addResp = adminConnection.add( addRequest );
         assertEquals( ResultCodeEnum.SUCCESS, addResp.getLdapResult().getResultCode() );
-        PasswordPolicy respCtrl = getPwdRespCtrl( addResp );
+        PasswordPolicyResponse respCtrl = getPwdRespCtrl( addResp );
         assertNull( respCtrl );
 
         BindRequest bindReq = new BindRequestImpl();
@@ -671,9 +672,9 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
     
             response = changePassword( userDn, "abcde", "67891" );
             assertEquals( ResultCodeEnum.CONSTRAINT_VIOLATION, response.getLdapResult().getResultCode() );
-            PasswordPolicy respCtrl = getPwdRespCtrl( response );
+            PasswordPolicyResponse respCtrl = getPwdRespCtrl( response );
             assertNotNull( respCtrl );
-            assertEquals( PasswordPolicyErrorEnum.PASSWORD_IN_HISTORY, respCtrl.getResponse().getPasswordPolicyError() );
+            assertEquals( PasswordPolicyErrorEnum.PASSWORD_IN_HISTORY, respCtrl.getPasswordPolicyError() );
             checkBindSuccess( userDn, "abcde" );
     
             // Try to reuse the very first password, should succeed
@@ -755,9 +756,9 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
             BindResponse bindResp = userCon.bind( bindReq );
             assertEquals( ResultCodeEnum.SUCCESS, bindResp.getLdapResult().getResultCode() );
     
-            PasswordPolicy respCtrl = getPwdRespCtrl( bindResp );
+            PasswordPolicyResponse respCtrl = getPwdRespCtrl( bindResp );
             assertNotNull( respCtrl );
-            assertTrue( respCtrl.getResponse().getTimeBeforeExpiration() > 0 );
+            assertTrue( respCtrl.getTimeBeforeExpiration() > 0 );
     
             Thread.sleep( 4500 ); // sleep for four seconds and a half so that the password expires
     
@@ -766,7 +767,7 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
             assertEquals( ResultCodeEnum.INVALID_CREDENTIALS, bindResp.getLdapResult().getResultCode() );
 
             respCtrl = getPwdRespCtrl( bindResp );
-            assertEquals( PASSWORD_EXPIRED, respCtrl.getResponse().getPasswordPolicyError() );
+            assertEquals( PASSWORD_EXPIRED, respCtrl.getPasswordPolicyError() );
         }
 
         adminConnection.close();
@@ -804,9 +805,9 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
             BindResponse bindResp = userCon.bind( bindReq );
             assertEquals( ResultCodeEnum.SUCCESS, bindResp.getLdapResult().getResultCode() );
     
-            PasswordPolicy respCtrl = getPwdRespCtrl( bindResp );
+            PasswordPolicyResponse respCtrl = getPwdRespCtrl( bindResp );
             assertNotNull( respCtrl );
-            assertTrue( respCtrl.getResponse().getTimeBeforeExpiration() > 0 );
+            assertTrue( respCtrl.getTimeBeforeExpiration() > 0 );
     
             Thread.sleep( 4500 ); // sleep for four seconds and a half so that the password expires
     
@@ -815,21 +816,21 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
             assertEquals( ResultCodeEnum.SUCCESS, bindResp.getLdapResult().getResultCode() );
             respCtrl = getPwdRespCtrl( bindResp );
             assertNotNull( respCtrl );
-            assertEquals( 1, respCtrl.getResponse().getGraceAuthNRemaining() );
+            assertEquals( 1, respCtrl.getGraceAuthNRemaining() );
     
             // bind for one last time, should succeed
             bindResp = userCon.bind( bindReq );
             assertEquals( ResultCodeEnum.SUCCESS, bindResp.getLdapResult().getResultCode() );
             respCtrl = getPwdRespCtrl( bindResp );
             assertNotNull( respCtrl );
-            assertEquals( 0, respCtrl.getResponse().getGraceAuthNRemaining() );
+            assertEquals( 0, respCtrl.getGraceAuthNRemaining() );
     
             // this time it should fail
             bindResp = userCon.bind( bindReq );
             assertEquals( ResultCodeEnum.INVALID_CREDENTIALS, bindResp.getLdapResult().getResultCode() );
     
             respCtrl = getPwdRespCtrl( bindResp );
-            assertEquals( PASSWORD_EXPIRED, respCtrl.getResponse().getPasswordPolicyError() );
+            assertEquals( PASSWORD_EXPIRED, respCtrl.getPasswordPolicyError() );
         }
         adminConnection.close();
     }
@@ -867,9 +868,9 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
             BindResponse bindResp = userCon.bind( bindReq );
             assertEquals( ResultCodeEnum.SUCCESS, bindResp.getLdapResult().getResultCode() );
     
-            PasswordPolicy respCtrl = getPwdRespCtrl( bindResp );
+            PasswordPolicyResponse respCtrl = getPwdRespCtrl( bindResp );
             assertNotNull( respCtrl );
-            assertTrue( respCtrl.getResponse().getTimeBeforeExpiration() > 0 );
+            assertTrue( respCtrl.getTimeBeforeExpiration() > 0 );
     
             Thread.sleep( 4500 ); // sleep for four seconds and a half so that the password expires
     
@@ -878,7 +879,7 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
             assertEquals( ResultCodeEnum.SUCCESS, bindResp.getLdapResult().getResultCode() );
             respCtrl = getPwdRespCtrl( bindResp );
             assertNotNull( respCtrl );
-            assertEquals( 1, respCtrl.getResponse().getGraceAuthNRemaining() );
+            assertEquals( 1, respCtrl.getGraceAuthNRemaining() );
     
             // Wait 1 second, we should still be able to bind
             // bind for one last time, should succeed
@@ -886,14 +887,14 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
             assertEquals( ResultCodeEnum.SUCCESS, bindResp.getLdapResult().getResultCode() );
             respCtrl = getPwdRespCtrl( bindResp );
             assertNotNull( respCtrl );
-            assertEquals( 0, respCtrl.getResponse().getGraceAuthNRemaining() );
+            assertEquals( 0, respCtrl.getGraceAuthNRemaining() );
     
             // this time it should fail
             bindResp = userCon.bind( bindReq );
             assertEquals( ResultCodeEnum.INVALID_CREDENTIALS, bindResp.getLdapResult().getResultCode() );
     
             respCtrl = getPwdRespCtrl( bindResp );
-            assertEquals( PASSWORD_EXPIRED, respCtrl.getResponse().getPasswordPolicyError() );
+            assertEquals( PASSWORD_EXPIRED, respCtrl.getPasswordPolicyError() );
         }
         adminConnection.close();
     }
@@ -931,9 +932,9 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
             BindResponse bindResp = userCon.bind( bindReq );
             assertEquals( ResultCodeEnum.SUCCESS, bindResp.getLdapResult().getResultCode() );
     
-            PasswordPolicy respCtrl = getPwdRespCtrl( bindResp );
+            PasswordPolicyResponse respCtrl = getPwdRespCtrl( bindResp );
             assertNotNull( respCtrl );
-            assertTrue( respCtrl.getResponse().getTimeBeforeExpiration() > 0 );
+            assertTrue( respCtrl.getTimeBeforeExpiration() > 0 );
     
             Thread.sleep( 4000 ); // sleep for four seconds so that the password expires
     
@@ -942,21 +943,21 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
             assertEquals( ResultCodeEnum.SUCCESS, bindResp.getLdapResult().getResultCode() );
             respCtrl = getPwdRespCtrl( bindResp );
             assertNotNull( respCtrl );
-            assertEquals( 1, respCtrl.getResponse().getGraceAuthNRemaining() );
+            assertEquals( 1, respCtrl.getGraceAuthNRemaining() );
     
             // this extra second sleep is necessary to modify pwdGraceUseTime attribute with a different timestamp
             Thread.sleep( 1000 );
             bindResp = userCon.bind( bindReq );
             assertEquals( ResultCodeEnum.SUCCESS, bindResp.getLdapResult().getResultCode() );
             respCtrl = getPwdRespCtrl( bindResp );
-            assertEquals( 0, respCtrl.getResponse().getGraceAuthNRemaining() );
+            assertEquals( 0, respCtrl.getGraceAuthNRemaining() );
     
             // this time it should fail
             bindResp = userCon.bind( bindReq );
             assertEquals( ResultCodeEnum.INVALID_CREDENTIALS, bindResp.getLdapResult().getResultCode() );
     
             respCtrl = getPwdRespCtrl( bindResp );
-            assertEquals( PASSWORD_EXPIRED, respCtrl.getResponse().getPasswordPolicyError() );
+            assertEquals( PASSWORD_EXPIRED, respCtrl.getPasswordPolicyError() );
         }
         adminConnection.close();
     }
@@ -1035,8 +1036,8 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
         Thread.sleep( 2000 ); // let the password expire
         BindResponse bindResp = userConnection.bind( bindReq );
         assertTrue( userConnection.isAuthenticated() );
-        PasswordPolicy ppolicy = getPwdRespCtrl( bindResp );
-        assertEquals( 1, ppolicy.getResponse().getGraceAuthNRemaining() );
+        PasswordPolicyResponse ppolicy = getPwdRespCtrl( bindResp );
+        assertEquals( 1, ppolicy.getGraceAuthNRemaining() );
 
         Entry userEntry = adminConnection.lookup( userDn, "+" );
         Attribute pwdGraceAuthUseTime = userEntry.get( PasswordPolicySchemaConstants.PWD_GRACE_USE_TIME_AT );
@@ -1420,9 +1421,8 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
             bindReq.setCredentials( "12345" );
             bindReq.addControl( PP_REQ_CTRL );
             BindResponse bindResponse = userConnection2.bind( bindReq );
-            PasswordPolicy respCtrl = getPwdRespCtrl( bindResponse );
+            PasswordPolicyResponse respCtrl = getPwdRespCtrl( bindResponse );
             assertNotNull( respCtrl );
-            assertNull( respCtrl.getResponse() );
 
             // now modify change time to trigger warning
             ModifyRequest modifyRequest = new ModifyRequestImpl();
@@ -1433,12 +1433,12 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
             BindRequest bindReq2 = new BindRequestImpl();
             bindReq2.setDn( userDn );
             bindReq2.setCredentials( "12345" );
-            bindReq2.addControl( new PasswordPolicyImpl() );
+            bindReq2.addControl( new PasswordPolicyRequestImpl() );
             bindResponse = userConnection.bind( bindReq2 );
             respCtrl = getPwdRespCtrl( bindResponse );
             assertNotNull( respCtrl );
-            assertNotNull( respCtrl.getResponse() );
-            assertTrue( respCtrl.getResponse().getTimeBeforeExpiration() > 0 );
+            assertNotNull( respCtrl );
+            assertTrue( respCtrl.getTimeBeforeExpiration() > 0 );
 
             // now modify change time to trigger expired
             modifyRequest = new ModifyRequestImpl();
@@ -1449,13 +1449,13 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
             BindRequest bindReq3 = new BindRequestImpl();
             bindReq3.setDn( userDn );
             bindReq3.setCredentials( "12345" );
-            bindReq3.addControl( new PasswordPolicyImpl() );
+            bindReq3.addControl( new PasswordPolicyRequestImpl() );
             bindResponse = userConnection.bind( bindReq3 );
             assertEquals( ResultCodeEnum.INVALID_CREDENTIALS, bindResponse.getLdapResult().getResultCode() );
             respCtrl = getPwdRespCtrl( bindResponse );
             assertNotNull( respCtrl );
-            assertNotNull( respCtrl.getResponse() );
-            assertEquals( PasswordPolicyErrorEnum.PASSWORD_EXPIRED, respCtrl.getResponse().getPasswordPolicyError() );
+            assertNotNull( respCtrl );
+            assertEquals( PasswordPolicyErrorEnum.PASSWORD_EXPIRED, respCtrl.getPasswordPolicyError() );
         }
         finally {
             safeCloseConnections( userConnection, userConnection2, adminConnection );
@@ -1528,7 +1528,7 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
        BindResponse bindResponse = userConnection.bind( bindRequest );
        assertEquals( ResultCodeEnum.SUCCESS, bindResponse.getLdapResult().getResultCode() );
        assertEquals( PasswordPolicyErrorEnum.CHANGE_AFTER_RESET, 
-           getPwdRespCtrl( bindResponse ).getResponse().getPasswordPolicyError() );
+           getPwdRespCtrl( bindResponse ).getPasswordPolicyError() );
 
        // in this case all other operations must be disallowed
        // see section #8.1.2.2.  Password must be changed now
@@ -1552,7 +1552,7 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
        assertEquals( ResultCodeEnum.CONSTRAINT_VIOLATION, 
            modifyResponse.getLdapResult().getResultCode() );
        assertEquals( PasswordPolicyErrorEnum.PASSWORD_TOO_YOUNG, 
-           getPwdRespCtrl( modifyResponse ).getResponse().getPasswordPolicyError() );
+           getPwdRespCtrl( modifyResponse ).getPasswordPolicyError() );
 
        // Wait for the pwdMinAge delay to be over
        Thread.sleep( 1000 );
diff --git a/server-integ/src/test/java/org/apache/directory/server/replication/ClientInitialRefreshIT.java b/server-integ/src/test/java/org/apache/directory/server/replication/ClientInitialRefreshIT.java
index f84d273..be2abf1 100644
--- a/server-integ/src/test/java/org/apache/directory/server/replication/ClientInitialRefreshIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/replication/ClientInitialRefreshIT.java
@@ -30,6 +30,10 @@ import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.directory.api.util.FileUtils;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncDoneValueFactory;
+import org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncRequestValueFactory;
+import org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncStateValueFactory;
 import org.apache.directory.api.ldap.model.entry.DefaultEntry;
 import org.apache.directory.api.ldap.model.entry.Entry;
 import org.apache.directory.api.ldap.model.message.SearchRequest;
@@ -157,6 +161,12 @@ public class ClientInitialRefreshIT
     public static void startProvider() throws Exception
     {
         DirectoryService provDirService = DSAnnotationProcessor.getDirectoryService();
+        
+        // Load the replication controls
+        LdapApiService codec = provDirService.getLdapCodecService();
+        codec.registerRequestControl( new SyncRequestValueFactory( codec ) );
+        codec.registerResponseControl( new SyncDoneValueFactory( codec ) );
+        codec.registerResponseControl( new SyncStateValueFactory( codec ) );
 
         providerServer = ServerAnnotationProcessor.getLdapServer( provDirService );