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 2010/11/10 18:47:07 UTC

svn commit: r1033612 - in /directory/apacheds/trunk/kerberos-codec/src: main/java/org/apache/directory/shared/kerberos/codec/authorizationData/ main/java/org/apache/directory/shared/kerberos/codec/authorizationData/actions/ main/java/org/apache/directo...

Author: elecharny
Date: Wed Nov 10 17:47:06 2010
New Revision: 1033612

URL: http://svn.apache.org/viewvc?rev=1033612&view=rev
Log:
Transform the grammar to deal with SE of SEQ

Modified:
    directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/AuthorizationDataGrammar.java
    directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/AuthorizationDataStatesEnum.java
    directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/actions/AuthorizationDataAdData.java
    directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/actions/AuthorizationDataAdType.java
    directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/actions/AuthorizationDataInit.java
    directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/components/AuthorizationData.java
    directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/AuthorizationDataDecoderTest.java

Modified: directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/AuthorizationDataGrammar.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/AuthorizationDataGrammar.java?rev=1033612&r1=1033611&r2=1033612&view=diff
==============================================================================
--- directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/AuthorizationDataGrammar.java (original)
+++ directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/AuthorizationDataGrammar.java Wed Nov 10 17:47:06 2010
@@ -66,17 +66,25 @@ public final class AuthorizationDataGram
         // AuthorizationData 
         // ============================================================================================
         // --------------------------------------------------------------------------------------------
-        // Transition from AuthorizationData init to AuthorizationData SEQ
+        // Transition from AuthorizationData init to AuthorizationData SEQ OF
         // --------------------------------------------------------------------------------------------
-        // AuthorizationData   ::= SEQUENCE
+        // AuthorizationData   ::= SEQUENCE OF
         super.transitions[AuthorizationDataStatesEnum.START_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] = new GrammarTransition(
-            AuthorizationDataStatesEnum.START_STATE, AuthorizationDataStatesEnum.AUTHORIZATION_DATA_SEQ_STATE, UniversalTag.SEQUENCE.getValue(),
+            AuthorizationDataStatesEnum.START_STATE, AuthorizationDataStatesEnum.AUTHORIZATION_DATA_SEQ_SEQ_STATE, UniversalTag.SEQUENCE.getValue(),
             new AuthorizationDataInit() );
         
         // --------------------------------------------------------------------------------------------
-        // Transition from AuthorizationData SEQ to adType tag
+        // Transition from AuthorizationData SEQ OF to SEQ
         // --------------------------------------------------------------------------------------------
-        // AuthorizationData  ::= SEQUENCE {
+        // AuthorizationData  ::= SEQUENCE OF SEQUENCE {
+        super.transitions[AuthorizationDataStatesEnum.AUTHORIZATION_DATA_SEQ_SEQ_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] = new GrammarTransition(
+            AuthorizationDataStatesEnum.AUTHORIZATION_DATA_SEQ_SEQ_STATE, AuthorizationDataStatesEnum.AUTHORIZATION_DATA_SEQ_STATE, UniversalTag.SEQUENCE.getValue(),
+            new CheckNotNullLength() );
+        
+        // --------------------------------------------------------------------------------------------
+        // Transition from AuthorizationData SEQ OF to adType tag
+        // --------------------------------------------------------------------------------------------
+        // AuthorizationData  ::= SEQUENCE OF SEQUENCE {
         //         ad-type     [0]
         super.transitions[AuthorizationDataStatesEnum.AUTHORIZATION_DATA_SEQ_STATE.ordinal()][KerberosConstants.AUTHORIZATION_DATA_ADTYPE_TAG] = new GrammarTransition(
             AuthorizationDataStatesEnum.AUTHORIZATION_DATA_SEQ_STATE, AuthorizationDataStatesEnum.AUTHORIZATION_DATA_ADTYPE_TAG_STATE, KerberosConstants.AUTHORIZATION_DATA_ADTYPE_TAG,
@@ -85,7 +93,7 @@ public final class AuthorizationDataGram
         // --------------------------------------------------------------------------------------------
         // Transition from adtype tag to adtype value
         // --------------------------------------------------------------------------------------------
-        // AuthorizationData  ::= SEQUENCE {
+        // AuthorizationData  ::= SEQUENCE OF SEQUENCE {
         //         ad-type     [0] Int32,
         super.transitions[AuthorizationDataStatesEnum.AUTHORIZATION_DATA_ADTYPE_TAG_STATE.ordinal()][UniversalTag.INTEGER.getValue()] = new GrammarTransition(
             AuthorizationDataStatesEnum.AUTHORIZATION_DATA_ADTYPE_TAG_STATE, AuthorizationDataStatesEnum.AUTHORIZATION_DATA_ADTYPE_STATE, UniversalTag.INTEGER.getValue(),
@@ -94,7 +102,7 @@ public final class AuthorizationDataGram
         // --------------------------------------------------------------------------------------------
         // Transition from ad-type value to ad-data tag
         // --------------------------------------------------------------------------------------------
-        // AuthorizationData   ::= SEQUENCE {
+        // AuthorizationData   ::= SEQUENCE OF SEQUENCE {
         //         ...
         //         ad-data     [1]
         super.transitions[AuthorizationDataStatesEnum.AUTHORIZATION_DATA_ADTYPE_STATE.ordinal()][KerberosConstants.AUTHORIZATION_DATA_ADDATA_TAG] = new GrammarTransition(
@@ -104,12 +112,22 @@ public final class AuthorizationDataGram
         // --------------------------------------------------------------------------------------------
         // Transition from ad-data tag to ad-data value
         // --------------------------------------------------------------------------------------------
-        // AuthorizationData   ::= SEQUENCE {
+        // AuthorizationData   ::= SEQUENCE OF SEQUENCE {
         //         ...
         //         ad-data     [1] (OCTET STRING)
         super.transitions[AuthorizationDataStatesEnum.AUTHORIZATION_DATA_ADDATA_TAG_STATE.ordinal()][UniversalTag.OCTET_STRING.getValue()] = new GrammarTransition(
             AuthorizationDataStatesEnum.AUTHORIZATION_DATA_ADDATA_TAG_STATE, AuthorizationDataStatesEnum.AUTHORIZATION_DATA_ADDATA_STATE, UniversalTag.OCTET_STRING.getValue(),
             new AuthorizationDataAdData() );
+        
+        // --------------------------------------------------------------------------------------------
+        // Transition from ad-data value to SEQUENCE
+        // --------------------------------------------------------------------------------------------
+        // AuthorizationData   ::= SEQUENCE {
+        //         ...
+        //         ad-data     [1] (OCTET STRING)
+        super.transitions[AuthorizationDataStatesEnum.AUTHORIZATION_DATA_ADDATA_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] = new GrammarTransition(
+            AuthorizationDataStatesEnum.AUTHORIZATION_DATA_ADDATA_STATE, AuthorizationDataStatesEnum.AUTHORIZATION_DATA_SEQ_STATE, UniversalTag.SEQUENCE.getValue(),
+            new CheckNotNullLength() );
     }
 
 

Modified: directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/AuthorizationDataStatesEnum.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/AuthorizationDataStatesEnum.java?rev=1033612&r1=1033611&r2=1033612&view=diff
==============================================================================
--- directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/AuthorizationDataStatesEnum.java (original)
+++ directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/AuthorizationDataStatesEnum.java Wed Nov 10 17:47:06 2010
@@ -33,22 +33,21 @@ import org.apache.directory.shared.kerbe
  */
 public enum AuthorizationDataStatesEnum implements States
 {
-    // ~ Static fields/initializers
-    // -----------------------------------------------------------------
-
     // Start
-    START_STATE,                            // 0
+    START_STATE,                                // 0
     
     AUTHORIZATION_DATA_SEQ_STATE,               // 1
     
-    AUTHORIZATION_DATA_ADTYPE_TAG_STATE,         // 2
-    AUTHORIZATION_DATA_ADTYPE_STATE,             // 3
+    AUTHORIZATION_DATA_SEQ_SEQ_STATE,           // 2
+    
+    AUTHORIZATION_DATA_ADTYPE_TAG_STATE,        // 3
+    AUTHORIZATION_DATA_ADTYPE_STATE,            // 4
     
-    AUTHORIZATION_DATA_ADDATA_TAG_STATE,          // 4
-    AUTHORIZATION_DATA_ADDATA_STATE,              // 5
+    AUTHORIZATION_DATA_ADDATA_TAG_STATE,        // 5
+    AUTHORIZATION_DATA_ADDATA_STATE,            // 6
     
     // End
-    LAST_AUTHORIZATION_DATA_STATE;              // 6
+    LAST_AUTHORIZATION_DATA_STATE;              // 7
 
     
     /**

Modified: directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/actions/AuthorizationDataAdData.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/actions/AuthorizationDataAdData.java?rev=1033612&r1=1033611&r2=1033612&view=diff
==============================================================================
--- directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/actions/AuthorizationDataAdData.java (original)
+++ directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/actions/AuthorizationDataAdData.java Wed Nov 10 17:47:06 2010
@@ -86,7 +86,7 @@ public class AuthorizationDataAdData ext
         }
         
         AuthorizationData authData = authDataContainer.getAuthorizationData();
-        authData.setAdData( value.getData() );
+        authData.setCurrentAdData( value.getData() );
         
         if ( IS_DEBUG )
         {

Modified: directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/actions/AuthorizationDataAdType.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/actions/AuthorizationDataAdType.java?rev=1033612&r1=1033611&r2=1033612&view=diff
==============================================================================
--- directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/actions/AuthorizationDataAdType.java (original)
+++ directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/actions/AuthorizationDataAdType.java Wed Nov 10 17:47:06 2010
@@ -76,16 +76,19 @@ public class AuthorizationDataAdType ext
             throw new DecoderException( I18n.err( I18n.ERR_04067 ) );
         }
         
-        // The encyptionType is an integer
-        Value value = tlv.getValue();
-        
         AuthorizationData authData = authDataContainer.getAuthorizationData();
+
+        // Creates a new AD
+        authData.createNewAD();
+        
+        // The AuthorizationData data is an integer
+        Value value = tlv.getValue();
         
         try
         {
             int adType = IntegerDecoder.parse( value );
 
-            authData.setAdType( adType );
+            authData.setCurrentAdType( adType );
 
             if ( IS_DEBUG )
             {

Modified: directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/actions/AuthorizationDataInit.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/actions/AuthorizationDataInit.java?rev=1033612&r1=1033611&r2=1033612&view=diff
==============================================================================
--- directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/actions/AuthorizationDataInit.java (original)
+++ directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/authorizationData/actions/AuthorizationDataInit.java Wed Nov 10 17:47:06 2010
@@ -46,7 +46,7 @@ public class AuthorizationDataInit exten
 
 
     /**
-     * Instantiates a new EncryptedDataInit action.
+     * Instantiates a new AuthorizationDataInit action.
      */
     public AuthorizationDataInit()
     {

Modified: directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/components/AuthorizationData.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/components/AuthorizationData.java?rev=1033612&r1=1033611&r2=1033612&view=diff
==============================================================================
--- directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/components/AuthorizationData.java (original)
+++ directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/components/AuthorizationData.java Wed Nov 10 17:47:06 2010
@@ -23,6 +23,8 @@ package org.apache.directory.shared.kerb
 
 import java.nio.BufferOverflowException;
 import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.directory.server.i18n.I18n;
 import org.apache.directory.shared.asn1.AbstractAsn1Object;
@@ -48,12 +50,37 @@ import org.slf4j.LoggerFactory;
  */
 public class AuthorizationData extends AbstractAsn1Object
 {
+    // The inner class storing the individual ADs
+    public class AD
+    {
+        /** the type of authorization data */
+        private int adType;
+
+        /** the authorization data */
+        private byte[] adData;
 
-    /** the type of authorization data */
-    private int adType;
+        /**
+         * @return the adType
+         */
+        public int getAdType()
+        {
+            return adType;
+        }
 
-    /** the authorization data */
-    private byte[] adData;
+        /**
+         * @return the adData
+         */
+        public byte[] getAdData()
+        {
+            return adData;
+        }
+    }
+    
+    /** The list of AuthorizationData elements */
+    private List<AD> authorizationData = new ArrayList<AD>();
+    
+    /** The current AD being processed */
+    private AD currentAD;
 
     /** The logger */
     private static final Logger LOG = LoggerFactory.getLogger( EncryptedData.class );
@@ -61,49 +88,60 @@ public class AuthorizationData extends A
     /** Speedup for logs */
     private static final boolean IS_DEBUG = LOG.isDebugEnabled();
 
-    private transient int adTypeTagLen;
-    private transient int adDataTagLen;
-    private transient int authorizationDataSeqLen;
+    // Storage for computed lengths
+    private transient int adTypeTagLen[];
+    private transient int adDataTagLen[];
+    private transient int authorizationDataSeqLen[];
+    private transient int authorizationDataSeqSeqLen;
 
 
+    /**
+     * Creates a new set of AuthorizationData
+     */
     public AuthorizationData()
     {
     }
 
 
-    public AuthorizationData( int adType, byte[] adData )
-    {
-        this.adType = adType;
-        this.adData = adData;
-    }
-
-
     /**
      * Compute the AuthorizationData length
      * 
      * 0x30 L1 AuthorizationData sequence
-     * |
-     * +--> 0xA1 L2 adType tag
-     * |     |
-     * |     +--> 0x02 L2-1 adType (int)
-     * |
-     * +--> 0xA2 L3 adData tag
+     *  |
+     *  +-- 0x30 L2 The AD sequence
      *       |
-     *       +--> 0x04 L3-1 adData (OCTET STRING)
+     *       +--> 0xA1 L3 adType tag
+     *       |     |
+     *       |     +--> 0x02 L3-1 adType (int)
+     *       |
+     *       +--> 0xA2 L4 adData tag
+     *             |
+     *             +--> 0x04 L<4-1 adData (OCTET STRING)
      * 
      */
     @Override
     public int computeLength()
     {
-        int adTypeLen = Value.getNbBytes( adType );
-        adTypeTagLen = 1 + TLV.getNbBytes( adTypeLen ) + adTypeLen;
-
-        adDataTagLen = 1 + TLV.getNbBytes( adData.length ) + adData.length;
-
-        authorizationDataSeqLen = 1 + TLV.getNbBytes( adTypeTagLen ) + adTypeTagLen;
-        authorizationDataSeqLen += 1 + TLV.getNbBytes( adDataTagLen ) + adDataTagLen;
+        int i = 0;
+        authorizationDataSeqLen = new int[authorizationData.size()];
+        adTypeTagLen = new int[authorizationData.size()];
+        adDataTagLen = new int[authorizationData.size()];
+        authorizationDataSeqLen = new int[authorizationData.size()];
+        
+        for ( AD ad : authorizationData )
+        {
+            int adTypeLen = Value.getNbBytes( ad.adType );
+            adTypeTagLen[i] = 1 + TLV.getNbBytes( adTypeLen ) + adTypeLen;
+            adDataTagLen[i] = 1 + TLV.getNbBytes( ad.adData.length ) + ad.adData.length;
+            
+            authorizationDataSeqLen[i] = 1 + TLV.getNbBytes( adTypeTagLen[i] ) + adTypeTagLen[i] + 
+                                         1 + TLV.getNbBytes( adDataTagLen[i] ) + adDataTagLen[i];
+            
+            authorizationDataSeqSeqLen += 1 + TLV.getNbBytes( authorizationDataSeqLen[i] ) + authorizationDataSeqLen[i];
+            i++;
+        }
 
-        return 1 + TLV.getNbBytes( authorizationDataSeqLen ) + authorizationDataSeqLen;
+        return 1 + TLV.getNbBytes(authorizationDataSeqSeqLen) + authorizationDataSeqSeqLen;
     }
 
 
@@ -124,27 +162,31 @@ public class AuthorizationData extends A
 
         try
         {
-            // The AuthorizationData SEQ Tag
+            // The AuthorizationData SEQ OF Tag
             buffer.put( UniversalTag.SEQUENCE.getValue() );
-            buffer.put( TLV.getBytes( authorizationDataSeqLen ) );
-
-            // the adType
-            buffer.put( ( byte ) KerberosConstants.AUTHORIZATION_DATA_ADTYPE_TAG );
-            buffer.put( TLV.getBytes( adTypeTagLen ) );
-
-            Value.encode( buffer, adType );
-
-            // the adData
-            // the adType
-            buffer.put( ( byte ) KerberosConstants.AUTHORIZATION_DATA_ADDATA_TAG );
-            buffer.put( TLV.getBytes( adDataTagLen ) );
-
-            Value.encode( buffer, adData );
+            buffer.put( TLV.getBytes( authorizationDataSeqSeqLen ) );
+            
+            int i = 0;
+            for ( AD ad : authorizationData )
+            {
+                buffer.put( UniversalTag.SEQUENCE.getValue() );
+                buffer.put( TLV.getBytes( authorizationDataSeqLen[i] ) );
+                
+                // the adType
+                buffer.put( ( byte ) KerberosConstants.AUTHORIZATION_DATA_ADTYPE_TAG );
+                buffer.put( TLV.getBytes( adTypeTagLen[i] ) );
+                Value.encode( buffer, ad.adType );
+    
+                // the adData
+                buffer.put( ( byte ) KerberosConstants.AUTHORIZATION_DATA_ADDATA_TAG );
+                buffer.put( TLV.getBytes( adDataTagLen[i] ) );
+                Value.encode( buffer, ad.adData );
+            }
         }
         catch ( BufferOverflowException boe )
         {
-            LOG.error( I18n.err( I18n.ERR_139, 1 + TLV.getNbBytes( authorizationDataSeqLen )
-                + authorizationDataSeqLen, buffer.capacity() ) );
+            LOG.error( I18n.err( I18n.ERR_139, 1 + TLV.getNbBytes( authorizationDataSeqSeqLen )
+                + authorizationDataSeqSeqLen, buffer.capacity() ) );
             throw new EncoderException( I18n.err( I18n.ERR_138 ) );
         }
 
@@ -158,27 +200,67 @@ public class AuthorizationData extends A
     }
 
 
-    public int getAdType()
+    /**
+     * @return the currentAD type
+     */
+    public int getCurrentAdType()
     {
-        return adType;
+        return currentAD.adType;
     }
 
 
-    public void setAdType( int adType )
+    /**
+     * Set the current AD type
+     */
+    public void setCurrentAdType( int adType )
     {
-        this.adType = adType;
+        currentAD.adType = adType;
     }
 
 
-    public byte[] getAdData()
+    /**
+     * @return the currentAD data
+     */
+    public byte[] getCurrentAdData()
     {
-        return adData;
+        return currentAD.adData;
     }
 
 
-    public void setAdData( byte[] adData )
+    /**
+     * Set the current AD data
+     */
+    public void setCurrentAdData( byte[] adData )
     {
-        this.adData = adData;
+        currentAD.adData = adData;
+    }
+
+
+    /**
+     * @return the currentAD
+     */
+    public AD getCurrentAD()
+    {
+        return currentAD;
+    }
+
+
+    /**
+     * Create a new currentAD
+     */
+    public void createNewAD()
+    {
+        currentAD = new AD();
+        authorizationData.add( currentAD );
+    }
+
+
+    /**
+     * @return the authorizationData
+     */
+    public List<AD> getAuthorizationData()
+    {
+        return authorizationData;
     }
 
 
@@ -189,10 +271,15 @@ public class AuthorizationData extends A
     {
         StringBuilder sb = new StringBuilder();
 
-        sb.append( "AuthorizationData : {\n" );
-        sb.append( "    adtype: " ).append( adType ).append( '\n' );
-
-        sb.append( "    adData: " ).append( StringTools.dumpBytes( adData ) ).append( "\n}\n" );
+        sb.append( "AuthorizationData : \n" );
+        
+        for ( AD ad : authorizationData )
+        {
+            sb.append( "    {\n" );
+            sb.append( "        adtype: " ).append( ad.adType ).append( '\n' );
+            sb.append( "        adData: " ).append( StringTools.dumpBytes( ad.adData ) ).append( '\n');
+            sb.append( "    }\n" );
+        }
 
         return sb.toString();
     }

Modified: directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/AuthorizationDataDecoderTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/AuthorizationDataDecoderTest.java?rev=1033612&r1=1033611&r2=1033612&view=diff
==============================================================================
--- directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/AuthorizationDataDecoderTest.java (original)
+++ directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/AuthorizationDataDecoderTest.java Wed Nov 10 17:47:06 2010
@@ -21,6 +21,7 @@
 package org.apache.directory.shared.kerberos.codec;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -48,14 +49,21 @@ public class AuthorizationDataDecoderTes
     {
         Asn1Decoder kerberosDecoder = new Asn1Decoder();
 
-        ByteBuffer stream = ByteBuffer.allocate( 0x11 );
+        ByteBuffer stream = ByteBuffer.allocate( 0x24 );
         
         stream.put( new byte[]
-            { 0x30, 0xF,
-                (byte)0xA0, 0x03,                 // ad-type
-                  0x02, 0x01, 0x02,
-                (byte)0xA1, 0x08,                 // ad-data
-                  0x04, 0x06, 'a', 'b', 'c', 'd', 'e', 'f'
+            { 
+              0x30, 0x22,
+                0x30, 0x0F,
+                  (byte)0xA0, 0x03,                 // ad-type
+                    0x02, 0x01, 0x02,
+                  (byte)0xA1, 0x08,                 // ad-data
+                    0x04, 0x06, 'a', 'b', 'c', 'd', 'e', 'f',
+                0x30, 0x0F,
+                  (byte)0xA0, 0x03,                 // ad-type
+                    0x02, 0x01, 0x02,
+                  (byte)0xA1, 0x08,                 // ad-data
+                    0x04, 0x06, 'g', 'h', 'i', 'j', 'k', 'l'
             } );
 
         String decodedPdu = StringTools.dumpBytes( stream.array() );
@@ -74,9 +82,20 @@ public class AuthorizationDataDecoderTes
         }
 
         AuthorizationData authData = authDataContainer.getAuthorizationData();
-        assertEquals( 2, authData.getAdType() );
-        assertTrue( Arrays.equals( StringTools.getBytesUtf8( "abcdef" ), authData.getAdData() ) );
         
+        assertNotNull( authData.getAuthorizationData().size() );
+        assertEquals( 2, authData.getAuthorizationData().size() );
+        
+        String[] expected = new String[]{ "abcdef", "ghijkl" };
+        int i = 0;
+        
+        for ( AuthorizationData.AD ad : authData.getAuthorizationData() )
+        {
+            assertEquals( 2, ad.getAdType() );
+            assertTrue( Arrays.equals( StringTools.getBytesUtf8( expected[i++] ), ad.getAdData() ) );
+            
+        }
+
         // Check the encoding
         ByteBuffer bb = ByteBuffer.allocate( authData.computeLength() );
         
@@ -85,7 +104,7 @@ public class AuthorizationDataDecoderTes
             bb = authData.encode( bb );
     
             // Check the length
-            assertEquals( 0x11, bb.limit() );
+            assertEquals( 0x24, bb.limit() );
     
             String encodedPdu = StringTools.dumpBytes( bb.array() );