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 2016/11/29 12:39:04 UTC

svn commit: r1771899 - in /directory/shared/trunk/ldap/extras: codec-api/src/main/java/org/apache/directory/api/ldap/extras/controls/ad/ codec/src/main/java/org/apache/directory/api/ldap/extras/controls/ad_impl/ codec/src/test/java/org/apache/directory...

Author: elecharny
Date: Tue Nov 29 12:39:04 2016
New Revision: 1771899

URL: http://svn.apache.org/viewvc?rev=1771899&view=rev
Log:
Applied the DIRAPI-286 patch

Modified:
    directory/shared/trunk/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSync.java
    directory/shared/trunk/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncFlag.java
    directory/shared/trunk/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncImpl.java
    directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/controls/ad_impl/AdDirSyncDecorator.java
    directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/controls/ad_impl/AdDirSyncGrammar.java
    directory/shared/trunk/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncControlTest.java

Modified: directory/shared/trunk/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSync.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSync.java?rev=1771899&r1=1771898&r2=1771899&view=diff
==============================================================================
--- directory/shared/trunk/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSync.java (original)
+++ directory/shared/trunk/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSync.java Tue Nov 29 12:39:04 2016
@@ -22,6 +22,8 @@ package org.apache.directory.api.ldap.ex
 
 import org.apache.directory.api.ldap.model.message.Control;
 
+import java.util.EnumSet;
+import java.util.Set;
 
 /**
  * The DirSync control, as described in http://tools.ietf.org/html/draft-armijo-ldap-dirsync-00.
@@ -39,9 +41,9 @@ import org.apache.directory.api.ldap.mod
  * 
  * Client side :
  * realReplControlValue ::= SEQUENCE {
- *     parentsFirst            integer
- *     maxReturnLength         integer
- *     cookie                  OCTET STRING
+ *     flags                 integer
+ *     maxBytes              integer
+ *     cookie                OCTET STRING
  * }
  * 
  * or
@@ -49,7 +51,7 @@ import org.apache.directory.api.ldap.mod
  * server side :
  * realReplControlValue ::= SEQUENCE {
  *     flag                  integer
- *     maxReturnLength       integer
+ *     maxBytes              integer
  *     cookie                OCTET STRING
  * }
  * </pre> 
@@ -62,19 +64,6 @@ public interface AdDirSync extends Contr
     /** This control OID */
     String OID = "1.2.840.113556.1.4.841";
 
-
-    /**
-     * @return 1 if the parents are guaranteed to be returned before the children.
-     */
-    int getParentFirst();
-
-
-    /**
-     * @param parentFirst The parentFirst flag. A value of 1 will tell the server to return the parents first.
-     */
-    void setParentFirst( int parentFirst );
-
-
     /**
      * @return The maximum length of attributes to be returned
      */
@@ -101,7 +90,7 @@ public interface AdDirSync extends Contr
 
 
     /**
-     * @return The flag returned by the server. One of :
+     * @return The flags returned by the server. Zero or more of :
      * <ul>
      * <li>LDAP_DIRSYNC_OBJECT_SECURITY (0x0001)</li>
      * <li>LDAP_DIRSYNC_ANCESTORS_FIRST_ORDER (0x0800)</li>
@@ -109,11 +98,23 @@ public interface AdDirSync extends Contr
      * <li>LDAP_DIRSYNC_INCREMENTAL_VALUES (0x7FFFFFFF)</li>
      * </ul>
      */
-    AdDirSyncFlag getFlag();
+    Set<AdDirSyncFlag> getFlags();
+
+
+    /**
+     * @param flags The flags to be set. See {@link EnumSet} for how to generate EnumSets.
+     */
+    void setFlags( Set<AdDirSyncFlag> flags );
+
+
+    /**
+     * @param flag The flag to be added to the current collection of flags.
+     */
+    void addFlag( AdDirSyncFlag flag );
 
 
     /**
-     * @param flag The flag. 
+     * @param flag The flag to be removed from the current collection of flags. 
      */
-    void setFlag( AdDirSyncFlag flag );
+    void removeFlag( AdDirSyncFlag flag );
 }

Modified: directory/shared/trunk/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncFlag.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncFlag.java?rev=1771899&r1=1771898&r2=1771899&view=diff
==============================================================================
--- directory/shared/trunk/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncFlag.java (original)
+++ directory/shared/trunk/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncFlag.java Tue Nov 29 12:39:04 2016
@@ -19,6 +19,9 @@
  */
 package org.apache.directory.api.ldap.extras.controls.ad;
 
+import java.util.EnumSet;
+import java.util.Set;
+
 /**
  * The flags used in the AdDirSync response.
  *
@@ -26,22 +29,25 @@ package org.apache.directory.api.ldap.ex
  */
 public enum AdDirSyncFlag
 {
-    DEFAULT( 0x0000 ),
-    LDAP_DIRSYNC_OBJECT_SECURITY( 0x0001 ),
-    LDAP_DIRSYNC_ANCESTORS_FIRST_ORDER( 0x0800 ),
-    LDAP_DIRSYNC_PUBLIC_DATA_ONLY( 0x2000 ),
-    LDAP_DIRSYNC_INCREMENTAL_VALUES( 0x7FFFFFFF );
+    LDAP_DIRSYNC_OBJECT_SECURITY( 0x0001, "Object Security" ),
+    LDAP_DIRSYNC_ANCESTORS_FIRST_ORDER( 0x0800, "Ancestors First Order" ),
+    LDAP_DIRSYNC_PUBLIC_DATA_ONLY( 0x2000, "Public Data Only" ),
+    LDAP_DIRSYNC_INCREMENTAL_VALUES( 0x80000000, "Incremental Values" );
 
-    /** The interned value */
+    /** The int value */
     private int value;
-    
-    /** A private constructor that associates a value to each flag */
-    AdDirSyncFlag( int value )
+
+    /** The string description **/
+    private String description;
+
+    /** A private constructor that associates a value and description to each flag */
+    AdDirSyncFlag( int value, String description )
     {
         this.value = value;
+        this.description = description;
     }
-    
-    
+
+
     /**
      * @return The associated value of a given flag
      */
@@ -49,23 +55,50 @@ public enum AdDirSyncFlag
     {
         return value;
     }
-    
-    
+
+
+    /**
+     * @see Object#toString()
+     */
+    @Override
+    public String toString()
+    {
+        return this.description;
+    }
+
+
     /**
-     * Get back the flag associated with a given value
+     * Get back the combination of flags associated with a given value
      * @param value The integer value
-     * @return The associated flag
+     * @return a set of all flags associated with the integer value
+     */
+    public static Set<AdDirSyncFlag> getFlags( int value )
+    {
+        EnumSet<AdDirSyncFlag> result = EnumSet.noneOf( AdDirSyncFlag.class );
+        for ( AdDirSyncFlag flag : EnumSet.allOf( AdDirSyncFlag.class ) )
+        {
+            if ( ( flag.getValue() & value ) == flag.getValue() )
+            {
+                result.add( flag );
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Get back the bitmask (as an integer) associated with the given flags
+     * @param flags The AdDirSync flags
+     * @return a bitmask in integer form associated with the set of flags
      */
-    public static AdDirSyncFlag getFlag( int value )
+    public static int getBitmask( Set<AdDirSyncFlag> flags )
     {
-        switch ( value )
+        int mask = 0;
+        
+        for ( AdDirSyncFlag flag : flags )
         {
-            case 0x0000 : return DEFAULT;
-            case 0x0001 : return LDAP_DIRSYNC_OBJECT_SECURITY;
-            case 0x0800 : return LDAP_DIRSYNC_ANCESTORS_FIRST_ORDER;
-            case 0x2000 : return LDAP_DIRSYNC_PUBLIC_DATA_ONLY;
-            case 0x7FFFFFFF : return LDAP_DIRSYNC_INCREMENTAL_VALUES;
-            default : return null;
+            mask += flag.getValue();
         }
+        
+        return mask;
     }
 }

Modified: directory/shared/trunk/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncImpl.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncImpl.java?rev=1771899&r1=1771898&r2=1771899&view=diff
==============================================================================
--- directory/shared/trunk/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncImpl.java (original)
+++ directory/shared/trunk/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncImpl.java Tue Nov 29 12:39:04 2016
@@ -21,6 +21,8 @@
 package org.apache.directory.api.ldap.extras.controls.ad;
 
 import java.util.Arrays;
+import java.util.EnumSet;
+import java.util.Set;
 
 import org.apache.directory.api.ldap.model.message.controls.AbstractControl;
 import org.apache.directory.api.util.Strings;
@@ -32,14 +34,12 @@ import org.apache.directory.api.util.Str
  */
 public class AdDirSyncImpl extends AbstractControl implements AdDirSync
 {
-    /** A flag used to tell the server to return the parent before the children */
-    int parentFirst = 1;
-    
-    /** A flag used to indicate that there are more data to return */
-    AdDirSyncFlag flag = AdDirSyncFlag.DEFAULT;
+    /** Flags used to control return values (client-to-server) or indicate that there are more data to return (server-to-client) */
+    private Set<AdDirSyncFlag> flags = EnumSet.noneOf( AdDirSyncFlag.class );
+     
 
     /** The maximum number of attributes to return */
-    int maxReturnLength = 0;
+    private int maxReturnLength = 0;
     
     /** The DirSync cookie */
     private byte[] cookie;
@@ -52,24 +52,24 @@ public class AdDirSyncImpl extends Abstr
         super( OID, Boolean.TRUE );
     }
 
-    
+
     /**
      * {@inheritDoc}
      */
     @Override
-    public int getParentFirst()
+    public Set<AdDirSyncFlag> getFlags()
     {
-        return parentFirst;
+        return flags;
     }
 
-    
+
     /**
      * {@inheritDoc}
      */
     @Override
-    public void setParentFirst( int parentFirst )
+    public void setFlags( Set<AdDirSyncFlag> flags )
     {
-        this.parentFirst = parentFirst;
+        this.flags = flags;
     }
 
 
@@ -77,9 +77,9 @@ public class AdDirSyncImpl extends Abstr
      * {@inheritDoc}
      */
     @Override
-    public AdDirSyncFlag getFlag()
+    public void addFlag( AdDirSyncFlag flag )
     {
-        return flag;
+        flags.add( flag );
     }
     
 
@@ -87,9 +87,9 @@ public class AdDirSyncImpl extends Abstr
      * {@inheritDoc}
      */
     @Override
-    public void setFlag( AdDirSyncFlag flag )
+    public void removeFlag( AdDirSyncFlag flag )
     {
-        this.flag = flag;
+        flags.remove( flag );
     }
 
 
@@ -150,7 +150,7 @@ public class AdDirSyncImpl extends Abstr
         int h = 37;
 
         h = h * 17 + super.hashCode();
-        h = h * 17 + parentFirst;
+        h = h * 17 + AdDirSyncFlag.getBitmask( flags );
         h = h * 17 + maxReturnLength;
 
         if ( cookie != null )
@@ -184,7 +184,7 @@ public class AdDirSyncImpl extends Abstr
         AdDirSync otherControl = ( AdDirSync ) o;
 
         return ( maxReturnLength == otherControl.getMaxReturnLength() )
-            && ( parentFirst == otherControl.getParentFirst() )
+            && ( flags.equals( otherControl.getFlags() ) )
             && ( Arrays.equals( cookie, otherControl.getCookie() ) )
             && ( isCritical() == otherControl.isCritical() );
     }
@@ -201,7 +201,8 @@ public class AdDirSyncImpl extends Abstr
         sb.append( "    DirSync control :\n" );
         sb.append( "        oid : " ).append( getOid() ).append( '\n' );
         sb.append( "        critical : " ).append( isCritical() ).append( '\n' );
-        sb.append( "        parentFirst : '" ).append( getParentFirst() ).append( "'\n" );
+        sb.append( "        flags : 0x" ).append( Integer.toHexString( AdDirSyncFlag.getBitmask( flags ) ) )
+                    .append( ' ' ).append( flags.toString() ).append( "\n" );
         sb.append( "        maxReturnLength : '" ).append( getMaxReturnLength() ).append( "'\n" );
         sb.append( "        cookie            : '" ).append( Strings.dumpBytes( getCookie() ) ).append( "'\n" );
 

Modified: directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/controls/ad_impl/AdDirSyncDecorator.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/controls/ad_impl/AdDirSyncDecorator.java?rev=1771899&r1=1771898&r2=1771899&view=diff
==============================================================================
--- directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/controls/ad_impl/AdDirSyncDecorator.java (original)
+++ directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/controls/ad_impl/AdDirSyncDecorator.java Tue Nov 29 12:39:04 2016
@@ -20,6 +20,7 @@
 package org.apache.directory.api.ldap.extras.controls.ad_impl;
 
 import java.nio.ByteBuffer;
+import java.util.Set;
 
 import org.apache.directory.api.asn1.Asn1Object;
 import org.apache.directory.api.asn1.DecoderException;
@@ -77,9 +78,9 @@ public class AdDirSyncDecorator extends
      * {@inheritDoc}
      */
     @Override
-    public int getParentFirst()
+    public Set<AdDirSyncFlag> getFlags()
     {
-        return getDecorated().getParentFirst();
+        return getDecorated().getFlags();
     }
 
     
@@ -87,9 +88,9 @@ public class AdDirSyncDecorator extends
      * {@inheritDoc}
      */
     @Override
-    public void setParentFirst( int parentFirst )
+    public void setFlags( Set<AdDirSyncFlag> flags )
     {
-        getDecorated().setParentFirst( parentFirst );
+        getDecorated().setFlags( flags );
     }
     
     
@@ -97,9 +98,9 @@ public class AdDirSyncDecorator extends
      * {@inheritDoc}
      */
     @Override
-    public AdDirSyncFlag getFlag()
+    public void addFlag( AdDirSyncFlag flag )
     {
-        return getDecorated().getFlag();
+        getDecorated().addFlag( flag );
     }
 
     
@@ -107,9 +108,9 @@ public class AdDirSyncDecorator extends
      * {@inheritDoc}
      */
     @Override
-    public void setFlag( AdDirSyncFlag flag )
+    public void removeFlag( AdDirSyncFlag flag )
     {
-        getDecorated().setFlag( flag );
+        getDecorated().removeFlag( flag );
     }
 
     
@@ -168,7 +169,7 @@ public class AdDirSyncDecorator extends
      * <pre>
      * 0x30 L1
      * |
-     * +--&gt; 0x02 0x0(1-4) nnn  (parentFirst)
+     * +--&gt; 0x02 0x0(1-4) nnn  (flags)
      * +--&gt; 0x02 0x0(1-4) nnn  (maxReturnLength)
      * +--&gt; 0x04 L2 xkcd!!!...     (cookie)
      * </pre>
@@ -176,11 +177,13 @@ public class AdDirSyncDecorator extends
     @Override
     public int computeLength()
     {
-        // the parentFirst flag length
-        adDirSyncLength = 1 + TLV.getNbBytes( getParentFirst() ) + BerValue.getNbBytes( getParentFirst() );
+        // the flags length
+        int flagsLength = BerValue.getNbBytes( AdDirSyncFlag.getBitmask( getFlags() ) );
+        adDirSyncLength = 1 + TLV.getNbBytes( flagsLength ) + flagsLength;
 
         // the maxReturnLength length
-        adDirSyncLength += 1 + TLV.getNbBytes( getMaxReturnLength() ) + BerValue.getNbBytes( getMaxReturnLength() );
+        int maxReturnLengthLength = BerValue.getNbBytes( getMaxReturnLength() );
+        adDirSyncLength += 1 + TLV.getNbBytes( maxReturnLengthLength ) + maxReturnLengthLength;
 
         // cookie's length
         byte[] cookie = getCookie();
@@ -220,8 +223,8 @@ public class AdDirSyncDecorator extends
         buffer.put( UniversalTag.SEQUENCE.getValue() );
         buffer.put( TLV.getBytes( adDirSyncLength ) );
 
-        // Encode the ParentFirst flag
-        BerValue.encode( buffer, getParentFirst() );
+        // Encode the flags
+        BerValue.encode( buffer, AdDirSyncFlag.getBitmask( getFlags() ) );
 
         // Encode the MaxReturnLength
         BerValue.encode( buffer, getMaxReturnLength() );
@@ -250,8 +253,8 @@ public class AdDirSyncDecorator extends
                 buffer.put( UniversalTag.SEQUENCE.getValue() );
                 buffer.put( TLV.getBytes( adDirSyncLength ) );
 
-                // Encode the ParentFirst flag
-                BerValue.encode( buffer, getParentFirst() );
+                // Encode the Flags flag
+                BerValue.encode( buffer, AdDirSyncFlag.getBitmask( getFlags() ) );
 
                 // Encode the MaxReturnLength
                 BerValue.encode( buffer, getMaxReturnLength() );

Modified: directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/controls/ad_impl/AdDirSyncGrammar.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/controls/ad_impl/AdDirSyncGrammar.java?rev=1771899&r1=1771898&r2=1771899&view=diff
==============================================================================
--- directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/controls/ad_impl/AdDirSyncGrammar.java (original)
+++ directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/controls/ad_impl/AdDirSyncGrammar.java Tue Nov 29 12:39:04 2016
@@ -20,6 +20,8 @@
 package org.apache.directory.api.ldap.extras.controls.ad_impl;
 
 
+import java.util.Set;
+
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.ber.grammar.AbstractGrammar;
 import org.apache.directory.api.asn1.ber.grammar.Grammar;
@@ -117,9 +119,9 @@ public final class AdDirSyncGrammar exte
                         {
                             int flagValue = IntegerDecoder.parse( value );
                             
-                            AdDirSyncFlag flag = AdDirSyncFlag.getFlag( flagValue );
+                            Set<AdDirSyncFlag> flags = AdDirSyncFlag.getFlags( flagValue );
                             
-                            if ( flag == null )
+                            if ( flags == null )
                             {
                                 String msg = "Error while decoding the AdDirSync flag, unknown value : " + flagValue;
                                 LOG.error( msg );
@@ -128,10 +130,10 @@ public final class AdDirSyncGrammar exte
                             
                             if ( IS_DEBUG )
                             {
-                                LOG.debug( "flag = {}", flagValue );
+                                LOG.debug( "flags = {}", flags.toString() );
                             }
                             
-                            container.getAdDirSyncControl().setFlag( flag );
+                            container.getAdDirSyncControl().setFlags( flags );
                         }
                         catch ( IntegerDecoderException ide )
                         {

Modified: directory/shared/trunk/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncControlTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncControlTest.java?rev=1771899&r1=1771898&r2=1771899&view=diff
==============================================================================
--- directory/shared/trunk/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncControlTest.java (original)
+++ directory/shared/trunk/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncControlTest.java Tue Nov 29 12:39:04 2016
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.fail;
 
 import java.nio.ByteBuffer;
+import java.util.EnumSet;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
@@ -50,12 +51,12 @@ public class AdDirSyncControlTest extend
     @Test
     public void testAdDirSyncControl() throws Exception
     {
-        ByteBuffer bb = ByteBuffer.allocate( 0x0E );
+        ByteBuffer bb = ByteBuffer.allocate( 0x0F );
 
         bb.put( new byte[]
             {
-                0x30, 0x0C,
-                  0x02, 0x01, 0x01,  // flag (LDAP_DIRSYNC_OBJECT_SECURITY)
+                0x30, 0x0D,
+                  0x02, 0x02, 0x08, 0x01,  // flag (LDAP_DIRSYNC_OBJECT_SECURITY, LDAP_DIRSYNC_ANCESTORS_FIRST_ORDER)
                   0x02, 0x01, 0x00,  // maxReturnLength (no limit)
                   0x04, 0x04, 'x', 'k', 'c', 'd' // the cookie 
         } );
@@ -66,18 +67,19 @@ public class AdDirSyncControlTest extend
 
         AdDirSync adDirSync = ( AdDirSync ) ( ( AdDirSyncDecorator ) decorator ).decode( bb.array() );
 
-        assertEquals( AdDirSyncFlag.LDAP_DIRSYNC_OBJECT_SECURITY, adDirSync.getFlag() );
+        assertEquals( EnumSet.of( 
+            AdDirSyncFlag.LDAP_DIRSYNC_OBJECT_SECURITY, 
+            AdDirSyncFlag.LDAP_DIRSYNC_ANCESTORS_FIRST_ORDER ), 
+            adDirSync.getFlags() );
         assertEquals( 0, adDirSync.getMaxReturnLength() );
         assertEquals( "xkcd", Strings.utf8ToString( adDirSync.getCookie() ) );
 
         // test encoding
-        adDirSync.setParentFirst( 1 );
-        
         try
         {
             ByteBuffer buffer = ( ( AdDirSyncDecorator ) adDirSync ).encode( ByteBuffer
                 .allocate( ( ( AdDirSyncDecorator ) adDirSync ).computeLength() ) );
-            String expected = "0x30 0x0C 0x02 0x01 0x01 0x02 0x01 0x00 0x04 0x04 0x78 0x6B 0x63 0x64 ";
+            String expected = "0x30 0x0D 0x02 0x02 0x08 0x01 0x02 0x01 0x00 0x04 0x04 0x78 0x6B 0x63 0x64 ";
             String decoded = Strings.dumpBytes( buffer.array() );
             assertEquals( expected, decoded );
         }
@@ -107,13 +109,11 @@ public class AdDirSyncControlTest extend
 
         AdDirSync adDirSync = ( AdDirSync ) ( ( AdDirSyncDecorator ) decorator ).decode( bb.array() );
 
-        assertEquals( AdDirSyncFlag.LDAP_DIRSYNC_OBJECT_SECURITY, adDirSync.getFlag() );
+        assertEquals( EnumSet.of( AdDirSyncFlag.LDAP_DIRSYNC_OBJECT_SECURITY ), adDirSync.getFlags() );
         assertEquals( 0, adDirSync.getMaxReturnLength() );
         assertEquals( "", Strings.utf8ToString( adDirSync.getCookie() ) );
 
         // test encoding
-        adDirSync.setParentFirst( 1 );
-
         try
         {
             ByteBuffer buffer = ( ( AdDirSyncDecorator ) adDirSync ).encode( ByteBuffer