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/14 17:25:32 UTC

svn commit: r1035018 - in /directory/apacheds/trunk/kerberos-codec/src: main/java/org/apache/directory/shared/kerberos/components/KdcReqBody.java test/java/org/apache/directory/shared/kerberos/codec/KdcReqBodyDecoderTest.java

Author: elecharny
Date: Sun Nov 14 16:25:32 2010
New Revision: 1035018

URL: http://svn.apache.org/viewvc?rev=1035018&view=rev
Log:
o Fixed a bug in the KdcReqBody encoder
o Added some more tests for corner cases

Modified:
    directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/components/KdcReqBody.java
    directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/KdcReqBodyDecoderTest.java

Modified: directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/components/KdcReqBody.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/components/KdcReqBody.java?rev=1035018&r1=1035017&r2=1035018&view=diff
==============================================================================
--- directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/components/KdcReqBody.java (original)
+++ directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/components/KdcReqBody.java Sun Nov 14 16:25:32 2010
@@ -22,9 +22,7 @@ package org.apache.directory.shared.kerb
 
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 
 import org.apache.directory.server.i18n.I18n;
 import org.apache.directory.shared.asn1.ber.tlv.TLV;
@@ -95,7 +93,7 @@ public class KdcReqBody
     private int nonce;
     
     /** Set of desired encryption types */
-    private Set<EncryptionType> eType;
+    private List<EncryptionType> eType;
     
     /** Addresses valid for the requested ticket */
     private HostAddresses addresses;
@@ -133,7 +131,7 @@ public class KdcReqBody
     public KdcReqBody()
     {
         additionalTickets = new ArrayList<Ticket>();
-        eType = new HashSet<EncryptionType>();
+        eType = new ArrayList<EncryptionType>();
     }
 
 
@@ -231,7 +229,7 @@ public class KdcReqBody
      *
      * @return The requested {@link EncryptionType}s.
      */
-    public Set<EncryptionType> getEType()
+    public List<EncryptionType> getEType()
     {
         return eType;
     }
@@ -240,7 +238,7 @@ public class KdcReqBody
     /**
      * @param eType the eType to set
      */
-    public void setEType( Set<EncryptionType> eType )
+    public void setEType( List<EncryptionType> eType )
     {
         this.eType = eType;
     }
@@ -699,7 +697,7 @@ public class KdcReqBody
         // The values
         for ( EncryptionType encryptionType : eType )
         {
-            Value.encode( buffer, encryptionType.ordinal() );
+            Value.encode( buffer, encryptionType.getValue() );
         }
         
         // The addresses if any -----------------------------------------------

Modified: directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/KdcReqBodyDecoderTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/KdcReqBodyDecoderTest.java?rev=1035018&r1=1035017&r2=1035018&view=diff
==============================================================================
--- directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/KdcReqBodyDecoderTest.java (original)
+++ directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/KdcReqBodyDecoderTest.java Sun Nov 14 16:25:32 2010
@@ -21,6 +21,7 @@ package org.apache.directory.shared.kerb
 
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
 
 import java.nio.ByteBuffer;
@@ -174,8 +175,7 @@ public class KdcReqBodyDecoderTest
                             0x02, 0x01, 0x11, 
                           (byte)0xA2, 0x08, 
                             0x04, 0x06, 
-                              'a', 'b', 'c', 'd', 'e', 'f', 
-
+                              'a', 'b', 'c', 'd', 'e', 'f'
         });
 
         String decodedPdu = StringTools.dumpBytes( stream.array() );
@@ -256,4 +256,289 @@ public class KdcReqBodyDecoderTest
             fail();
         }
     }
+    
+    
+    /**
+     * Test the decoding of a KDC-REQ-BODY with nothing in it
+     */
+    @Test( expected = DecoderException.class)
+    public void testKdcReqBodyEmpty() throws DecoderException
+    {
+        Asn1Decoder kerberosDecoder = new Asn1Decoder();
+
+        ByteBuffer stream = ByteBuffer.allocate( 0x02 );
+        
+        stream.put( new byte[]
+            { 0x30, 0x00 } );
+
+        stream.flip();
+
+        // Allocate a KDC-REQ-BODY Container
+        Asn1Container kdcReqBodyContainer = new KdcReqBodyContainer();
+
+        // Decode the KDC-REQ-BODY PDU
+        kerberosDecoder.decode( stream, kdcReqBodyContainer );
+        fail();
+    }
+    
+    
+    /**
+     * Test the decoding of a KDC-REQ-BODY with empty options tag
+     */
+    @Test( expected = DecoderException.class)
+    public void testKdcReqBodyEmptyOptionTag() throws DecoderException
+    {
+        Asn1Decoder kerberosDecoder = new Asn1Decoder();
+
+        ByteBuffer stream = ByteBuffer.allocate( 0x04 );
+        
+        stream.put( new byte[]
+            { 
+                0x30, 0x02,
+                  (byte)0xA0, 0x00
+            } );
+
+        stream.flip();
+
+        // Allocate a KDC-REQ-BODY Container
+        Asn1Container kdcReqBodyContainer = new KdcReqBodyContainer();
+
+        // Decode the KDC-REQ-BODY PDU
+        kerberosDecoder.decode( stream, kdcReqBodyContainer );
+        fail();
+    }
+    
+    
+    /**
+     * Test the decoding of a KDC-REQ-BODY with empty options value
+     */
+    @Test( expected = DecoderException.class)
+    public void testKdcReqBodyEmptyOptionValue() throws DecoderException
+    {
+        Asn1Decoder kerberosDecoder = new Asn1Decoder();
+
+        ByteBuffer stream = ByteBuffer.allocate( 0x06 );
+        
+        stream.put( new byte[]
+            { 
+                0x30, 0x04,
+                  (byte)0xA0, 0x02,
+                    0x02, 0x00
+            } );
+
+        stream.flip();
+
+        // Allocate a KDC-REQ-BODY Container
+        Asn1Container kdcReqBodyContainer = new KdcReqBodyContainer();
+
+        // Decode the KDC-REQ-BODY PDU
+        kerberosDecoder.decode( stream, kdcReqBodyContainer );
+        fail();
+    }
+    
+    
+    /**
+     * Test the decoding of a KDC-REQ-BODY with no options
+     */
+    @Test( expected = DecoderException.class)
+    public void testKdcReqBodyNoOptions() throws DecoderException
+    {
+        Asn1Decoder kerberosDecoder = new Asn1Decoder();
+
+        ByteBuffer stream = ByteBuffer.allocate( 0x152 );
+        
+        stream.put( new byte[]
+             {
+                 0x30, (byte)0x82, 0x01, 0x4E, 
+                   (byte)0xA1, 0x13, 
+                     0x30, 0x11, 
+                       (byte)0xA0, 0x03, 
+                         0x02, 0x01, 0x0A, 
+                       (byte)0xA1, 0x0A, 
+                         0x30, 0x08, 
+                           0x1B, 0x06, 
+                             'c', 'l', 'i', 'e', 'n', 't', 
+                   (byte)0xA2, 0x0D, 
+                     0x1B, 0x0B, 
+                       'E', 'X', 'A', 'M', 'P', 'L', 'E', '.', 'C', 'O', 'M', 
+                   (byte)0xA3, 0x13, 
+                     0x30, 0x11, 
+                       (byte)0xA0, 0x03, 
+                         0x02, 0x01, 0x0A, 
+                       (byte)0xA1, 0x0A, 
+                         0x30, 0x08, 
+                           0x1B, 0x06, 
+                             's', 'e', 'r', 'v', 'e', 'r', 
+                   (byte)0xA4, 0x11, 
+                     0x18, 0x0F, 
+                       '2', '0', '1', '0', '1', '1', '1', '0', '1', '5', '4', '5', '2', '5', 'Z', 
+                   (byte)0xA5, 0x11, 
+                     0x18, 0x0F, 
+                       '2', '0', '1', '0', '1', '1', '1', '0', '1', '5', '4', '5', '2', '5', 'Z', 
+                   (byte)0xA6, 0x11, 
+                     0x18, 0x0F, 
+                       '2', '0', '1', '0', '1', '1', '1', '0', '1', '5', '4', '5', '2', '5', 'Z', 
+                   (byte)0xA7, 0x04, 
+                     0x02, 0x02, 
+                       0x30, 0x39, 
+                   (byte)0xA8, 0x0B, 
+                     0x30, 0x09, 
+                       0x02, 0x01, 0x06, 
+                       0x02, 0x01, 0x11, 
+                       0x02, 0x01, 0x12, 
+                   (byte)0xA9, 0x2E, 
+                     0x30, 0x2C, 
+                       0x30, 0x14, 
+                         (byte)0xA0, 0x03, 
+                           0x02, 0x01, 0x02, 
+                         (byte)0xA1, 0x0D, 
+                           0x04, 0x0B, 
+                             '1', '9', '2', '.', '1', '6', '8', '.', '0', '.', '1', 
+                       0x30, 0x14, 
+                         (byte)0xA0, 0x03, 
+                           0x02, 0x01, 0x02, 
+                         (byte)0xA1, 0x0D, 
+                           0x04, 0x0B, 
+                             '1', '9', '2', '.', '1', '6', '8', '.', '0', '.', '2', 
+                   (byte)0xAA, 0x11, 
+                     0x30, 0x0F, 
+                       (byte)0xA0, 0x03, 
+                         0x02, 0x01, 0x11, 
+                       (byte)0xA2, 0x08, 
+                         0x04, 0x06, 
+                           'a', 'b', 'c', 'd', 'e', 'f', 
+                   (byte)0xAB, (byte)0x81, (byte)0x83, 
+                     0x30, (byte)0x81, (byte)0x80, 
+                       0x61, 0x3E, 
+                         0x30, 0x3C, 
+                           (byte)0xA0, 0x03, 
+                             0x02, 0x01, 0x05, 
+                           (byte)0xA1, 0x0D, 
+                             0x1B, 0x0B, 
+                               'E', 'X', 'A', 'M', 'P', 'L', 'E', '.', 'C', 'O', 'M', 
+                           (byte)0xA2, 0x13, 
+                             0x30, 0x11, 
+                               (byte)0xA0, 0x03, 
+                                 0x02, 0x01, 0x01, 
+                               (byte)0xA1, 0x0A, 
+                                 0x30, 0x08, 
+                                   0x1B, 0x06, 
+                                     'c', 'l', 'i', 'e', 'n', 't', 
+                           (byte)0xA3, 0x11, 
+                             0x30, 0x0F, 
+                               (byte)0xA0, 0x03, 
+                                 0x02, 0x01, 0x11, 
+                               (byte)0xA2, 0x08, 
+                                 0x04, 0x06, 
+                                   'a', 'b', 'c', 'd', 'e', 'f', 
+                       0x61, 0x3E, 
+                         0x30, 0x3C, 
+                           (byte)0xA0, 0x03, 
+                             0x02, 0x01, 0x05, 
+                           (byte)0xA1, 0x0D, 
+                             0x1B, 0x0B, 
+                               'E', 'X', 'A', 'M', 'P', 'L', 'E', '.', 'C', 'O', 'M',
+                           (byte)0xA2, 0x13, 
+                             0x30, 0x11, 
+                               (byte)0xA0, 0x03, 
+                                 0x02, 0x01, 0x01, 
+                               (byte)0xA1, 0x0A, 
+                                 0x30, 0x08, 
+                                   0x1B, 0x06, 
+                                     's', 'e', 'r', 'v', 'e', 'r', 
+                           (byte)0xA3, 0x11, 
+                             0x30, 0x0F, 
+                               (byte)0xA0, 0x03, 
+                                 0x02, 0x01, 0x11, 
+                               (byte)0xA2, 0x08, 
+                                 0x04, 0x06, 
+                                   'a', 'b', 'c', 'd', 'e', 'f'
+             });
+
+        stream.flip();
+
+        // Allocate a KDC-REQ-BODY Container
+        Asn1Container kdcReqBodyContainer = new KdcReqBodyContainer();
+
+        // Decode the KDC-REQ-BODY PDU
+        kerberosDecoder.decode( stream, kdcReqBodyContainer );
+        fail();
+    }
+
+
+    /**
+     * Test the decoding of a KdcReqBody message with no optional value
+     * ( we only have options, realm, till, nonce and etype )
+     */
+    @Test
+    public void testDecodeKdcReqBodyNoOptionalValue() throws Exception
+    {
+        Asn1Decoder kerberosDecoder = new Asn1Decoder();
+
+        ByteBuffer stream = ByteBuffer.allocate( 0x40 );
+        
+        stream.put( new byte[]
+        {
+            0x30, (byte)0x3E, 
+              (byte)0xA0, 0x07,
+                0x03, 0x05, 
+                  0x00, 0x01, 0x04, 0x00, 0x32, 
+              (byte)0xA2, 0x0D, 
+                0x1B, 0x0B, 
+                  'E', 'X', 'A', 'M', 'P', 'L', 'E', '.', 'C', 'O', 'M', 
+              (byte)0xA5, 0x11, 
+                0x18, 0x0F, 
+                  '2', '0', '1', '0', '1', '1', '1', '0', '1', '5', '4', '5', '2', '5', 'Z', 
+              (byte)0xA7, 0x04, 
+                0x02, 0x02, 
+                  0x30, 0x39, 
+              (byte)0xA8, 0x0B, 
+                0x30, 0x09, 
+                  0x02, 0x01, 0x06, 
+                  0x02, 0x01, 0x11, 
+                  0x02, 0x01, 0x12
+        });
+
+        String decodedPdu = StringTools.dumpBytes( stream.array() );
+        stream.flip();
+
+        // Allocate a KdcReqBody Container
+        KdcReqBodyContainer kdcReqBodyContainer = new KdcReqBodyContainer();
+        kdcReqBodyContainer.setStream( stream );
+        
+        // Decode the KdcReqBody PDU
+        try
+        {
+            kerberosDecoder.decode( stream, kdcReqBodyContainer );
+        }
+        catch ( DecoderException de )
+        {
+            fail( de.getMessage() );
+        }
+
+        KdcReqBody body = kdcReqBodyContainer.getKdcReqBody();
+        
+        assertNotNull( body );
+        
+        // Check the encoding
+        ByteBuffer bb = ByteBuffer.allocate( body.computeLength() );
+
+        try
+        {
+            bb = body.encode( bb );
+    
+            // Check the length
+            assertEquals( 0x40, bb.limit() );
+
+            String encodedPdu = StringTools.dumpBytes( bb.array() );
+            
+            System.out.println( decodedPdu );
+            System.out.println( encodedPdu );
+            assertEquals( decodedPdu, encodedPdu );
+        }
+        catch ( EncoderException ee )
+        {
+            fail();
+        }
+    }
 }