Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 66319 invoked from network); 19 Nov 2010 16:56:40 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 19 Nov 2010 16:56:40 -0000 Received: (qmail 94784 invoked by uid 500); 19 Nov 2010 16:57:11 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 94747 invoked by uid 500); 19 Nov 2010 16:57:11 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 94740 invoked by uid 99); 19 Nov 2010 16:57:11 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 19 Nov 2010 16:57:11 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 19 Nov 2010 16:57:06 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 37D922388A2C; Fri, 19 Nov 2010 16:55:52 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1036938 - in /directory/apacheds/trunk/kerberos-codec/src: main/java/org/apache/directory/shared/kerberos/messages/KrbError.java test/java/org/apache/directory/shared/kerberos/codec/KrbErrorDecoderTest.java Date: Fri, 19 Nov 2010 16:55:52 -0000 To: commits@directory.apache.org From: kayyagari@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20101119165552.37D922388A2C@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: kayyagari Date: Fri Nov 19 16:55:51 2010 New Revision: 1036938 URL: http://svn.apache.org/viewvc?rev=1036938&view=rev Log: o fixed a possible NPE while performing unboxing of cusec value o added more tests Modified: directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/messages/KrbError.java directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/KrbErrorDecoderTest.java Modified: directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/messages/KrbError.java URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/messages/KrbError.java?rev=1036938&r1=1036937&r2=1036938&view=diff ============================================================================== --- directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/messages/KrbError.java (original) +++ directory/apacheds/trunk/kerberos-codec/src/main/java/org/apache/directory/shared/kerberos/messages/KrbError.java Fri Nov 19 16:55:51 2010 @@ -154,6 +154,11 @@ public class KrbError extends KerberosMe */ public int getCusec() { + if ( cusec == null ) + { + return 0; + } + return cusec; } Modified: directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/KrbErrorDecoderTest.java URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/KrbErrorDecoderTest.java?rev=1036938&r1=1036937&r2=1036938&view=diff ============================================================================== --- directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/KrbErrorDecoderTest.java (original) +++ directory/apacheds/trunk/kerberos-codec/src/test/java/org/apache/directory/shared/kerberos/codec/KrbErrorDecoderTest.java Fri Nov 19 16:55:51 2010 @@ -20,15 +20,19 @@ package org.apache.directory.shared.kerberos.codec; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.*; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.nio.ByteBuffer; +import java.util.Arrays; import org.apache.directory.shared.asn1.ber.Asn1Decoder; import org.apache.directory.shared.asn1.codec.DecoderException; import org.apache.directory.shared.asn1.codec.EncoderException; +import org.apache.directory.shared.kerberos.KerberosMessageType; import org.apache.directory.shared.kerberos.codec.krbError.KrbErrorContainer; +import org.apache.directory.shared.kerberos.exceptions.ErrorType; import org.apache.directory.shared.kerberos.messages.KrbError; import org.apache.directory.shared.ldap.util.StringTools; import org.junit.Test; @@ -102,12 +106,200 @@ public class KrbErrorDecoderTest } catch( DecoderException e ) { - e.printStackTrace(); fail(); } KrbError krbError = container.getKrbError(); + String time = "20101119080043Z"; + assertEquals( 5, krbError.getProtocolVersionNumber() ); + assertEquals( KerberosMessageType.KRB_ERROR, krbError.getMessageType() ); + assertEquals( time, krbError.getcTime().getDate() ); + assertEquals( 1, krbError.getCusec() ); + assertEquals( time, krbError.getsTime().getDate() ); + assertEquals( 2, krbError.getSusec() ); + assertEquals( ErrorType.KDC_ERR_NONE, krbError.getErrorCode() ); + assertEquals( "crealm", krbError.getcRealm() ); + assertEquals( "cname", krbError.getcName().getNameString() ); + assertEquals( "realm", krbError.getRealm() ); + assertEquals( "sname", krbError.getsName().getNameString() ); + assertEquals( "etext", krbError.geteText() ); + assertTrue( Arrays.equals( new byte[]{0,1}, krbError.geteData() ) ); + + int encodedLen = krbError.computeLength(); + + assertEquals( streamLen, encodedLen ); + + ByteBuffer buffer = ByteBuffer.allocate( streamLen ); + try + { + buffer = krbError.encode( buffer ); + + assertEquals( decoded, StringTools.dumpBytes( buffer.array() ) ); + } + catch( EncoderException e ) + { + fail(); + } + } + + + @Test + public void testDecodeKrbErrorWithoutCtime() + { + Asn1Decoder decoder = new Asn1Decoder(); + + int streamLen = 0x7A; + ByteBuffer stream = ByteBuffer.allocate( streamLen ); + stream.put( new byte[] + { + 0x7E, (byte)0x78, + 0x30, (byte)0x76, + (byte)0xA0, 0x03, // pvno + 0x02, 0x01, 0x05, + (byte)0xA1, 0x03, // msg-type + 0x02, 0x01, 0x1E, + // + // NO ctime + // + (byte)0xA3, 0x03, // cusec + 0x02, 0x01, 0x01, + (byte)0xA4, 0x11, // stime + 0x18, 0xF, '2', '0', '1', '0', '1', '1', '1', '9', '0', '8', '0', '0', '4', '3', 'Z', + (byte)0xA5, 0x03, // susec + 0x02, 0x01, 0x02, + (byte)0xA6, 0x03, // error-code + 0x02, 0x01, 0x00, + (byte)0xA7, 0x08, // crealm + 0x1B, 0x06, 'c', 'r', 'e', 'a', 'l', 'm', + (byte)0xA8, 0x12, // cname + 0x30, 0x10, + (byte)0xA0, 0x03, + 0x02, 0x01, 0x00, + (byte)0xA1, 0x09, + 0x30, 0x07, + 0x1B, 0x05, 'c', 'n', 'a', 'm', 'e', + (byte)0xA9, 0x07, // realm + 0x1B, 0x05, 'r', 'e', 'a', 'l', 'm', + (byte)0xAA, 0x12, // sname + 0x30, 0x10, + (byte)0xA0, 0x03, + 0x02, 0x01, 0x00, + (byte)0xA1, 0x09, + 0x30, 0x07, + 0x1B, 0x05, 's', 'n', 'a', 'm', 'e', + (byte)0xAB, 0x07, // e-text + 0x1B, 0x5, 'e', 't', 'e', 'x', 't', + (byte)0xAC, 0x04, // e-data + 0x04, 0x02, + 0x00, 0x01 + } ); + + String decoded = StringTools.dumpBytes( stream.array() ); + stream.flip(); + + KrbErrorContainer container = new KrbErrorContainer(); + container.setStream( stream ); + + try + { + decoder.decode( stream, container ); + } + catch( DecoderException e ) + { + fail(); + } + + KrbError krbError = container.getKrbError(); + + assertNull( krbError.getcTime() ); + + int encodedLen = krbError.computeLength(); + + assertEquals( streamLen, encodedLen ); + + ByteBuffer buffer = ByteBuffer.allocate( streamLen ); + try + { + buffer = krbError.encode( buffer ); + + assertEquals( decoded, StringTools.dumpBytes( buffer.array() ) ); + } + catch( EncoderException e ) + { + fail(); + } + } + + + @Test + public void testDecodeKrbErrorWithoutCusec() + { + Asn1Decoder decoder = new Asn1Decoder(); + + int streamLen = 0x8A; + ByteBuffer stream = ByteBuffer.allocate( streamLen ); + stream.put( new byte[] + { + 0x7E, (byte)0x81, (byte)0x87, + 0x30, (byte)0x81, (byte)0x84, + (byte)0xA0, 0x03, // pvno + 0x02, 0x01, 0x05, + (byte)0xA1, 0x03, // msg-type + 0x02, 0x01, 0x1E, + (byte)0xA2, 0x11, // ctime + 0x18, 0xF, '2', '0', '1', '0', '1', '1', '1', '9', '0', '8', '0', '0', '4', '3', 'Z', + // NO cuses + (byte)0xA4, 0x11, // stime + 0x18, 0xF, '2', '0', '1', '0', '1', '1', '1', '9', '0', '8', '0', '0', '4', '3', 'Z', + (byte)0xA5, 0x03, // susec + 0x02, 0x01, 0x02, + (byte)0xA6, 0x03, // error-code + 0x02, 0x01, 0x00, + (byte)0xA7, 0x08, // crealm + 0x1B, 0x06, 'c', 'r', 'e', 'a', 'l', 'm', + (byte)0xA8, 0x12, // cname + 0x30, 0x10, + (byte)0xA0, 0x03, + 0x02, 0x01, 0x00, + (byte)0xA1, 0x09, + 0x30, 0x07, + 0x1B, 0x05, 'c', 'n', 'a', 'm', 'e', + (byte)0xA9, 0x07, // realm + 0x1B, 0x05, 'r', 'e', 'a', 'l', 'm', + (byte)0xAA, 0x12, // sname + 0x30, 0x10, + (byte)0xA0, 0x03, + 0x02, 0x01, 0x00, + (byte)0xA1, 0x09, + 0x30, 0x07, + 0x1B, 0x05, 's', 'n', 'a', 'm', 'e', + (byte)0xAB, 0x07, // e-text + 0x1B, 0x5, 'e', 't', 'e', 'x', 't', + (byte)0xAC, 0x04, // e-data + 0x04, 0x02, + 0x00, 0x01 + } ); + + String decoded = StringTools.dumpBytes( stream.array() ); + stream.flip(); + + KrbErrorContainer container = new KrbErrorContainer(); + container.setStream( stream ); + + try + { + decoder.decode( stream, container ); + } + catch( DecoderException e ) + { + fail(); + } + + KrbError krbError = container.getKrbError(); + + assertEquals( 0, krbError.getCusec() ); + int encodedLen = krbError.computeLength(); assertEquals( streamLen, encodedLen ); @@ -124,4 +316,91 @@ public class KrbErrorDecoderTest fail(); } } + + @Test + public void testDecodeKrbErrorWithoutCtimeAndCusec() + { + Asn1Decoder decoder = new Asn1Decoder(); + + int streamLen = 0x75; + ByteBuffer stream = ByteBuffer.allocate( streamLen ); + stream.put( new byte[] + { + 0x7E, (byte)0x73, + 0x30, (byte)0x71, + (byte)0xA0, 0x03, // pvno + 0x02, 0x01, 0x05, + (byte)0xA1, 0x03, // msg-type + 0x02, 0x01, 0x1E, + // + // NO ctime, cusec + // + (byte)0xA4, 0x11, // stime + 0x18, 0xF, '2', '0', '1', '0', '1', '1', '1', '9', '0', '8', '0', '0', '4', '3', 'Z', + (byte)0xA5, 0x03, // susec + 0x02, 0x01, 0x02, + (byte)0xA6, 0x03, // error-code + 0x02, 0x01, 0x00, + (byte)0xA7, 0x08, // crealm + 0x1B, 0x06, 'c', 'r', 'e', 'a', 'l', 'm', + (byte)0xA8, 0x12, // cname + 0x30, 0x10, + (byte)0xA0, 0x03, + 0x02, 0x01, 0x00, + (byte)0xA1, 0x09, + 0x30, 0x07, + 0x1B, 0x05, 'c', 'n', 'a', 'm', 'e', + (byte)0xA9, 0x07, // realm + 0x1B, 0x05, 'r', 'e', 'a', 'l', 'm', + (byte)0xAA, 0x12, // sname + 0x30, 0x10, + (byte)0xA0, 0x03, + 0x02, 0x01, 0x00, + (byte)0xA1, 0x09, + 0x30, 0x07, + 0x1B, 0x05, 's', 'n', 'a', 'm', 'e', + (byte)0xAB, 0x07, // e-text + 0x1B, 0x5, 'e', 't', 'e', 'x', 't', + (byte)0xAC, 0x04, // e-data + 0x04, 0x02, + 0x00, 0x01 + } ); + + String decoded = StringTools.dumpBytes( stream.array() ); + stream.flip(); + + KrbErrorContainer container = new KrbErrorContainer(); + container.setStream( stream ); + + try + { + decoder.decode( stream, container ); + } + catch( DecoderException e ) + { + fail(); + } + + KrbError krbError = container.getKrbError(); + + assertNull( krbError.getcTime() ); + assertEquals( 0, krbError.getCusec() ); + + int encodedLen = krbError.computeLength(); + + assertEquals( streamLen, encodedLen ); + + ByteBuffer buffer = ByteBuffer.allocate( streamLen ); + try + { + buffer = krbError.encode( buffer ); + + assertEquals( decoded, StringTools.dumpBytes( buffer.array() ) ); + } + catch( EncoderException e ) + { + fail(); + } + } + }