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 2011/07/25 00:15:48 UTC

svn commit: r1150500 - in /directory/apacheds/trunk: kerberos-codec/src/main/java/org/apache/directory/server/kerberos/protocol/ kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/ kerberos-codec/src/test/java/org/apache/directory/...

Author: elecharny
Date: Sun Jul 24 22:15:46 2011
New Revision: 1150500

URL: http://svn.apache.org/viewvc?rev=1150500&view=rev
Log:
(ugly) fix for DIRSERVER-1636. I don't like the try/catch I added to deal with the decoding of a ByteBuffer with 4 more bytes at the beginning... 

Modified:
    directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/protocol/KerberosDecoder.java
    directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/protocol/KerberosEncoder.java
    directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/KerberosMessageContainer.java
    directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/KerberosMessageGrammar.java
    directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/KerberosMessageDecoderTest.java
    directory/apacheds/trunk/kerberos-test/src/test/java/org/apache/directory/server/kerberos/kdc/KerberosTcpITest.java

Modified: directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/protocol/KerberosDecoder.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/protocol/KerberosDecoder.java?rev=1150500&r1=1150499&r2=1150500&view=diff
==============================================================================
--- directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/protocol/KerberosDecoder.java (original)
+++ directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/protocol/KerberosDecoder.java Sun Jul 24 22:15:46 2011
@@ -97,8 +97,26 @@ public class KerberosDecoder extends Pro
             session.setAttribute( KERBEROS_MESSAGE_CONTAINER, kerberosMessageContainer );
             kerberosMessageContainer.setStream( buf );
             kerberosMessageContainer.setGathering( true );
+            kerberosMessageContainer.setTCP( !session.getTransportMetadata().isConnectionless() );
         }
         
+        if ( kerberosMessageContainer.isTCP() )
+        {
+            if ( buf.remaining() > 4 )
+            {
+                kerberosMessageContainer.setTcpLength( buf.getInt() );
+                buf.mark();
+            }
+            else
+            {
+                return;
+            }
+        }
+        else
+        {
+            buf.mark();
+        }
+
         while ( buf.hasRemaining() )
         {
             try

Modified: directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/protocol/KerberosEncoder.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/protocol/KerberosEncoder.java?rev=1150500&r1=1150499&r2=1150500&view=diff
==============================================================================
--- directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/protocol/KerberosEncoder.java (original)
+++ directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/protocol/KerberosEncoder.java Sun Jul 24 22:15:46 2011
@@ -38,16 +38,35 @@ public class KerberosEncoder extends Pro
     public void encode( IoSession session, Object message, ProtocolEncoderOutput out ) throws IOException
     {
         AbstractAsn1Object asn1Obj = ( AbstractAsn1Object ) message;
+        boolean isTcp = !session.getTransportMetadata().isConnectionless();
+        IoBuffer response = null;
+        IoBuffer kerberosMessage = null;
         
-        IoBuffer buf = IoBuffer.allocate( asn1Obj.computeLength() );
+        int responseLength = asn1Obj.computeLength();
+        kerberosMessage = IoBuffer.allocate( responseLength );
+        
+        if ( isTcp )
+        {
+            response = IoBuffer.allocate( responseLength + 4 );
+        }
+        else
+        {
+            response = kerberosMessage;
+        }
 
         try
         {
-            asn1Obj.encode( buf.buf() );
+            asn1Obj.encode( kerberosMessage.buf() );
+
+            if ( isTcp )
+            { 
+                response.putInt( responseLength );
+                response.put( kerberosMessage.buf().array() );
+            }
 
-            buf.flip();
+            response.flip();
 
-            out.write( buf );
+            out.write( response );
         }
         catch( EncoderException e )
         {

Modified: directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/KerberosMessageContainer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/KerberosMessageContainer.java?rev=1150500&r1=1150499&r2=1150500&view=diff
==============================================================================
--- directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/KerberosMessageContainer.java (original)
+++ directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/KerberosMessageContainer.java Sun Jul 24 22:15:46 2011
@@ -39,6 +39,12 @@ public class KerberosMessageContainer ex
     
     /** A PrincipalName container */
     private PrincipalName principalName;
+    
+    /** A flag used when the protocol used to transfer the PDU is TCP */
+    private boolean isTCP;
+    
+    /** When the connection is using a TCP protocol, the PDU length */
+    private int tcpLength = -1;
 
     /**
      * Creates a new KerberosMessageContainer object. We will store ten grammars,
@@ -102,4 +108,40 @@ public class KerberosMessageContainer ex
     {
         this.principalName = principalName;
     }
+
+
+    /**
+     * @return the isTCP
+     */
+    public boolean isTCP()
+    {
+        return isTCP;
+    }
+
+
+    /**
+     * @param isTCP the isTCP to set
+     */
+    public void setTCP( boolean isTCP )
+    {
+        this.isTCP = isTCP;
+    }
+
+
+    /**
+     * @return the tcpLength
+     */
+    public int getTcpLength()
+    {
+        return tcpLength;
+    }
+
+
+    /**
+     * @param tcpLength the tcpLength to set
+     */
+    public void setTcpLength( int tcpLength )
+    {
+        this.tcpLength = tcpLength;
+    }
 }

Modified: directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/KerberosMessageGrammar.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/KerberosMessageGrammar.java?rev=1150500&r1=1150499&r2=1150500&view=diff
==============================================================================
--- directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/KerberosMessageGrammar.java (original)
+++ directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/codec/KerberosMessageGrammar.java Sun Jul 24 22:15:46 2011
@@ -21,6 +21,7 @@ package org.apache.directory.shared.kerb
 
 
 import java.nio.ByteBuffer;
+import java.nio.InvalidMarkException;
 
 import org.apache.directory.shared.asn1.DecoderException;
 import org.apache.directory.shared.asn1.ber.Asn1Decoder;
@@ -70,7 +71,15 @@ public final class KerberosMessageGramma
         public void action( KerberosMessageContainer kerberosMessageContainer ) throws DecoderException
         {
             ByteBuffer stream = kerberosMessageContainer.getStream();
-            stream.rewind();
+    
+            try
+            {
+                stream.reset();
+            }
+            catch ( InvalidMarkException ime )
+            {
+                stream.rewind();
+            }
 
             TLV tlv = kerberosMessageContainer.getCurrentTLV();
             kerberosMessageContainer.setGrammarEndAllowed( true );

Modified: directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/KerberosMessageDecoderTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/KerberosMessageDecoderTest.java?rev=1150500&r1=1150499&r2=1150500&view=diff
==============================================================================
--- directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/KerberosMessageDecoderTest.java (original)
+++ directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/KerberosMessageDecoderTest.java Sun Jul 24 22:15:46 2011
@@ -26,8 +26,6 @@ import static org.junit.Assert.fail;
 
 import java.nio.ByteBuffer;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
 import org.apache.directory.shared.asn1.DecoderException;
 import org.apache.directory.shared.asn1.EncoderException;
 import org.apache.directory.shared.asn1.ber.Asn1Decoder;
@@ -39,6 +37,9 @@ import org.apache.directory.shared.kerbe
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import com.mycila.junit.concurrent.Concurrency;
+import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+
 
 /**
  * Test the decoder for some KerberosMessage

Modified: directory/apacheds/trunk/kerberos-test/src/test/java/org/apache/directory/server/kerberos/kdc/KerberosTcpITest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-test/src/test/java/org/apache/directory/server/kerberos/kdc/KerberosTcpITest.java?rev=1150500&r1=1150499&r2=1150500&view=diff
==============================================================================
--- directory/apacheds/trunk/kerberos-test/src/test/java/org/apache/directory/server/kerberos/kdc/KerberosTcpITest.java (original)
+++ directory/apacheds/trunk/kerberos-test/src/test/java/org/apache/directory/server/kerberos/kdc/KerberosTcpITest.java Sun Jul 24 22:15:46 2011
@@ -33,7 +33,6 @@ import org.apache.directory.server.core.
 import org.apache.directory.shared.kerberos.codec.types.EncryptionType;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -71,7 +70,6 @@ Project</a>
        @CreateTransport(protocol = "TCP")
    })
 @ApplyLdifFiles("org/apache/directory/server/kerberos/kdc/KerberosIT.ldif")
-@Ignore("TCP tests not working.")
 public class KerberosTcpITest extends AbstractKerberosITest
 {
     private static Integer udpPrefLimit;