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 2005/05/04 01:25:51 UTC

svn commit: r168019 - /directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/spnego/codec/grammars/SpnegoGrammar.java

Author: elecharny
Date: Tue May  3 16:25:51 2005
New Revision: 168019

URL: http://svn.apache.org/viewcvs?rev=168019&view=rev
Log:
Added the actions to handle the req flags.

Modified:
    directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/spnego/codec/grammars/SpnegoGrammar.java

Modified: directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/spnego/codec/grammars/SpnegoGrammar.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/spnego/codec/grammars/SpnegoGrammar.java?rev=168019&r1=168018&r2=168019&view=diff
==============================================================================
--- directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/spnego/codec/grammars/SpnegoGrammar.java (original)
+++ directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/spnego/codec/grammars/SpnegoGrammar.java Tue May  3 16:25:51 2005
@@ -23,6 +23,7 @@
 import org.apache.asn1.ber.grammar.GrammarTransition;
 import org.apache.asn1.ber.grammar.IGrammar;
 import org.apache.asn1.ber.tlv.TLV;
+import org.apache.asn1.primitives.BitString;
 import org.apache.asn1.primitives.OID;
 import org.apache.asn1.primitives.OctetString;
 import org.apache.asn1.spnego.codec.SpnegoContainer;
@@ -356,6 +357,7 @@
         //    ...
         //    reqFlags      [1]  ContextFlags  OPTIONAL, (Tag)
         //    ...
+        // Nothing to do
         super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_FOLLOWING_TAG][0xA1] =
             new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_FOLLOWING_TAG,
                 SpnegoStatesEnum.SPNEGO_REQ_FLAGS_LENGTH, null );
@@ -364,9 +366,25 @@
         //    ...
         //    reqFlags      [1]  ContextFlags  OPTIONAL, (Length)
         //    ...
+        // We have to check the length
         super.transitions[SpnegoStatesEnum.SPNEGO_REQ_FLAGS_LENGTH][0xA1] = new GrammarTransition(
                 SpnegoStatesEnum.SPNEGO_REQ_FLAGS_LENGTH, SpnegoStatesEnum.SPNEGO_REQ_FLAGS_VALUE,
-                null );
+                new GrammarAction( "Req Flags Length" )
+                {
+	                public void action( IAsn1Container container ) throws DecoderException
+	                {
+	                    SpnegoContainer spnegoContainer = ( SpnegoContainer ) container;
+	                    SpnegoNegTokenInitPOJO spnego   = ( SpnegoNegTokenInitPOJO )spnegoContainer.getSpnego();
+	                    TLV				tlv 			= spnegoContainer.getCurrentTLV();
+	                    
+	                    // Checks the length.
+	                    checkLength(spnego, tlv);
+	                    
+	                    // Store the length in the req flags expected length
+	                    spnego.setReqFlagsExpectedLength(tlv.getLength().getLength());
+	                    return;
+	                }
+                }  );
 
         // NegTokenInit ::= SEQUENCE {
         //    ...
@@ -403,7 +421,37 @@
         // The next state will be the MechToken following
         super.transitions[SpnegoStatesEnum.SPNEGO_CONTEXT_FLAGS_LENGTH][0x03] = new GrammarTransition(
                 SpnegoStatesEnum.SPNEGO_CONTEXT_FLAGS_LENGTH, SpnegoStatesEnum.SPNEGO_CONTEXT_FLAGS_VALUE,
-                null );
+                new GrammarAction( "Req Flags Length" )
+                {
+                    public void action( IAsn1Container container ) throws DecoderException
+                    {
+                        SpnegoContainer spnegoContainer = ( SpnegoContainer ) container;
+                        SpnegoNegTokenInitPOJO spnego   = ( SpnegoNegTokenInitPOJO )spnegoContainer.getSpnego();
+                        TLV				tlv 			= spnegoContainer.getCurrentTLV();
+
+                        int expectedLength = spnego.getReqFlagsExpectedLength();
+                        int currentLength = tlv.getLength().getSize() + tlv.getTag().getSize() + tlv.getLength().getLength();
+                        
+                        if ( expectedLength != currentLength )
+                        {
+                            throw new DecoderException("The ReqFlags length is different than the expected length");
+                        }
+                        
+                        if (tlv.getLength().getLength() == 0)
+                        {
+                            spnego.setAnonFlag(false);
+                            spnego.setConfFlag(false);
+                            spnego.setDelegFlag(false);
+                            spnego.setIntegFlag(false);
+                            spnego.setMutualFlag(false);
+                            spnego.setReplayFlag(false);
+                            spnego.setSequenceFlag(false);
+                        }
+
+                        // The flags wioll be set in the next state
+                        return;
+                    }
+                } );
 
         // ContextFlags ::= BIT_STRING { (value)
         //     delegFlag     (0),
@@ -417,7 +465,29 @@
         // The next state will be the MechToken following
         super.transitions[SpnegoStatesEnum.SPNEGO_CONTEXT_FLAGS_VALUE][0x03] = new GrammarTransition(
                 SpnegoStatesEnum.SPNEGO_CONTEXT_FLAGS_VALUE, SpnegoStatesEnum.SPNEGO_REQ_FLAGS_FOLLOWING_TAG,
-                null );
+                new GrammarAction( "Req Flags Value" )
+                {
+                    public void action( IAsn1Container container ) throws DecoderException
+                    {
+                        SpnegoContainer spnegoContainer = ( SpnegoContainer ) container;
+                        SpnegoNegTokenInitPOJO spnego   = ( SpnegoNegTokenInitPOJO )spnegoContainer.getSpnego();
+                        TLV				tlv 			= spnegoContainer.getCurrentTLV();
+
+                        // Get the req falgs and set the flag
+                        BitString bitString = new BitString(tlv.getValue().getData());
+                        
+                        spnego.setAnonFlag(bitString.getBit(0));
+                        spnego.setConfFlag(bitString.getBit(1));
+                        spnego.setDelegFlag(bitString.getBit(2));
+                        spnego.setIntegFlag(bitString.getBit(3));
+                        spnego.setMutualFlag(bitString.getBit(4));
+                        spnego.setReplayFlag(bitString.getBit(5));
+                        spnego.setSequenceFlag(bitString.getBit(6));
+
+                        bitString = null;
+                        return;
+                    }
+                } );
 
         //------------------------------------------------------------------------------------------
         // NegTokenInit ::= SEQUENCE { 
@@ -521,7 +591,7 @@
                         }
                         return;
                     }
-                }  );
+                } );
 
         // mechToken     [2]  OCTET STRING  OPTIONAL, (Value)
         // We will allocate a new Octet String.