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 2006/01/25 10:20:48 UTC

svn commit: r372169 - in /directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec: ./ bind/ modify/ search/

Author: elecharny
Date: Wed Jan 25 01:20:39 2006
New Revision: 372169

URL: http://svn.apache.org/viewcvs?rev=372169&view=rev
Log:
- Added the grammarPopAllowed() method when necessary in th grammars
- Fixed a state which was not allowed for MatchingRuleAssertion grammar

Modified:
    directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/LdapMessageContainer.java
    directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/LdapResultGrammar.java
    directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/LdapStatesEnum.java
    directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/bind/BindResponseGrammar.java
    directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/modify/ModifyRequestGrammar.java
    directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/FilterGrammar.java
    directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/MatchingRuleAssertionGrammar.java
    directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/SearchRequestGrammar.java
    directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/SubstringFilterGrammar.java

Modified: directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/LdapMessageContainer.java
URL: http://svn.apache.org/viewcvs/directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/LdapMessageContainer.java?rev=372169&r1=372168&r2=372169&view=diff
==============================================================================
--- directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/LdapMessageContainer.java (original)
+++ directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/LdapMessageContainer.java Wed Jan 25 01:20:39 2006
@@ -87,6 +87,7 @@
         grammars = new IGrammar[LdapStatesEnum.NB_GRAMMARS];
         grammarStack = new IGrammar[10];
         stateStack = new int[10];
+        popAllowedStack = new boolean[10];
         nbGrammars = 0;
 
         grammars[LdapStatesEnum.LDAP_MESSAGE_GRAMMAR] = LdapMessageGrammar.getInstance();

Modified: directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/LdapResultGrammar.java
URL: http://svn.apache.org/viewcvs/directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/LdapResultGrammar.java?rev=372169&r1=372168&r2=372169&view=diff
==============================================================================
--- directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/LdapResultGrammar.java (original)
+++ directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/LdapResultGrammar.java Wed Jan 25 01:20:39 2006
@@ -356,6 +356,9 @@
                         {
                             log.debug( "The error message is : " + ldapResult.getErrorMessage() );
                         }
+
+                        // We cazn pop this grammar
+                        container.grammarPopAllowed( true );
                         
                         return;
                     }
@@ -378,12 +381,12 @@
         // This is a referral.
         super.transitions[LdapStatesEnum.LDAP_RESULT_REFERRAL_SEQUENCE_TAG][LdapConstants.LDAP_RESULT_REFERRAL_SEQUENCE_TAG] =
             new GrammarTransition( LdapStatesEnum.LDAP_RESULT_REFERRAL_SEQUENCE_TAG,
-                LdapStatesEnum.LDAP_RESULT_REFERRAL_TAG, null );
+                LdapStatesEnum.LDAP_RESULT_REFERRAL_TAG, null);
 
         // In case we are coming from a error message state
         super.transitions[LdapStatesEnum.LDAP_RESULT_ERROR_MESSAGE_VALUE][LdapConstants.LDAP_RESULT_REFERRAL_SEQUENCE_TAG] =
             new GrammarTransition( LdapStatesEnum.LDAP_RESULT_ERROR_MESSAGE_VALUE,
-                LdapStatesEnum.LDAP_RESULT_REFERRAL_TAG, null );
+                LdapStatesEnum.LDAP_RESULT_REFERRAL_TAG, null);
 
         // Referral ::= SEQUENCE OF LDAPURL (Tag)
         // This is a SEQUENCE, we will have at least one referral, but may be many.

Modified: directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/LdapStatesEnum.java
URL: http://svn.apache.org/viewcvs/directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/LdapStatesEnum.java?rev=372169&r1=372168&r2=372169&view=diff
==============================================================================
--- directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/LdapStatesEnum.java (original)
+++ directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/LdapStatesEnum.java Wed Jan 25 01:20:39 2006
@@ -584,7 +584,7 @@
 
     // Matching rule assertion Matching rule ---------------------------------------------------
     /** Matching rule assertion matching rule assertion rule Tag */
-    public static int MATCHING_RULE_ASSERTION_MATCHING_RULE_OR_TYPE_OR_MATCH_VALUE_TAG = 2;
+    public static int MATCHING_RULE_ASSERTION_MATCHING_RULE_OR_TYPE_TAG = 2;
 
     /** Matching rule assertion matching rule Value */
     public static int MATCHING_RULE_ASSERTION_MATCHING_RULE_VALUE = 3;
@@ -1544,7 +1544,7 @@
         {
             "MATCHING_RULE_ASSERTION_TAG",
             "MATCHING_RULE_ASSERTION_VALUE",
-            "MATCHING_RULE_ASSERTION_MATCHING_RULE_OR_TYPE_OR_MATCH_VALUE_TAG",
+            "MATCHING_RULE_ASSERTION_MATCHING_RULE_OR_TYPE_TAG",
             "MATCHING_RULE_ASSERTION_MATCHING_RULE_VALUE",
             "MATCHING_RULE_ASSERTION_TYPE_OR_MATCH_VALUE_TAG",
             "MATCHING_RULE_ASSERTION_TYPE_VALUE",

Modified: directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/bind/BindResponseGrammar.java
URL: http://svn.apache.org/viewcvs/directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/bind/BindResponseGrammar.java?rev=372169&r1=372168&r2=372169&view=diff
==============================================================================
--- directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/bind/BindResponseGrammar.java (original)
+++ directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/bind/BindResponseGrammar.java Wed Jan 25 01:20:39 2006
@@ -23,6 +23,7 @@
 import org.apache.asn1.ber.IAsn1Container;
 import org.apache.asn1.ber.tlv.UniversalTag;
 import org.apache.asn1.ber.tlv.TLV;
+import org.apache.asn1.codec.DecoderException;
 import org.apache.ldap.common.codec.LdapConstants;
 import org.apache.ldap.common.codec.LdapMessage;
 import org.apache.ldap.common.codec.LdapMessageContainer;
@@ -105,7 +106,13 @@
         // The current state will be stored.
         super.transitions[LdapStatesEnum.BIND_RESPONSE_LDAP_RESULT][UniversalTag.ENUMERATED_TAG] = new GrammarTransition(
                 LdapStatesEnum.BIND_RESPONSE_LDAP_RESULT, LdapStatesEnum.LDAP_RESULT_GRAMMAR_SWITCH,
-                null );
+                new GrammarAction( "Allow pop" )
+                {
+                    public void action( IAsn1Container container ) throws DecoderException
+                    {
+                        container.grammarPopAllowed( true );
+                    }
+                } );
 
         // LdapMessage ::= ... BindResponse ...
         // BindResponse ::= [APPLICATION 1] SEQUENCE {

Modified: directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/modify/ModifyRequestGrammar.java
URL: http://svn.apache.org/viewcvs/directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/modify/ModifyRequestGrammar.java?rev=372169&r1=372168&r2=372169&view=diff
==============================================================================
--- directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/modify/ModifyRequestGrammar.java (original)
+++ directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/modify/ModifyRequestGrammar.java Wed Jan 25 01:20:39 2006
@@ -224,7 +224,7 @@
         super.transitions[LdapStatesEnum.MODIFY_REQUEST_ATTRIBUTE_VALUE_OR_MODIFICATION_TAG][UniversalTag.SEQUENCE_TAG] =
             new GrammarTransition(
                 LdapStatesEnum.MODIFY_REQUEST_ATTRIBUTE_VALUE_OR_MODIFICATION_TAG,
-                LdapStatesEnum.MODIFY_REQUEST_MODIFICATION_SEQUENCE_VALUE, null );
+                LdapStatesEnum.MODIFY_REQUEST_MODIFICATION_SEQUENCE_VALUE, null);
 
         // LdapMessage ::= ... ModifyRequest ...
         // ModifyRequest ::= [APPLICATION 6] SEQUENCE {
@@ -507,6 +507,9 @@
                         
                         // We can have an END transition
                         ldapMessageContainer.grammarEndAllowed( true );
+                        
+                        // We can have an Pop transition
+                        ldapMessageContainer.grammarPopAllowed( true );
                         
                         log.debug( "Value modified : {}", value );
                     }

Modified: directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/FilterGrammar.java
URL: http://svn.apache.org/viewcvs/directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/FilterGrammar.java?rev=372169&r1=372168&r2=372169&view=diff
==============================================================================
--- directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/FilterGrammar.java (original)
+++ directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/FilterGrammar.java Wed Jan 25 01:20:39 2006
@@ -170,7 +170,14 @@
         //     ...
         // Nothing to do
         super.transitions[LdapStatesEnum.FILTER_TAG][LdapConstants.SUBSTRINGS_FILTER_TAG] = new GrammarTransition(
-                LdapStatesEnum.FILTER_TAG, LdapStatesEnum.SUBSTRING_FILTER_GRAMMAR_SWITCH, null );
+                LdapStatesEnum.FILTER_TAG, LdapStatesEnum.SUBSTRING_FILTER_GRAMMAR_SWITCH, 
+                new GrammarAction( "Allow pop" )
+                {
+                    public void action( IAsn1Container container ) throws DecoderException
+                    {
+                        container.grammarPopAllowed( true );
+                    }
+                });
 
         // Filter ::= CHOICE {
         //     ...
@@ -209,7 +216,14 @@
         //     extensibleMatch [9] ExtensibleMatchFilter } (Tag)
         // Nothing to do
         super.transitions[LdapStatesEnum.FILTER_TAG][LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG] = new GrammarTransition(
-                LdapStatesEnum.FILTER_TAG, LdapStatesEnum.MATCHING_RULE_ASSERTION_GRAMMAR_SWITCH, null );
+                LdapStatesEnum.FILTER_TAG, LdapStatesEnum.MATCHING_RULE_ASSERTION_GRAMMAR_SWITCH,                 
+                new GrammarAction( "Allow pop" )
+                {
+                    public void action( IAsn1Container container ) throws DecoderException
+                    {
+                        container.grammarPopAllowed( true );
+                    }
+                });
 
         // Filter ::= CHOICE {
         //     and             [0] SET OF Filter, (Value)
@@ -523,6 +537,7 @@
                         
                         // We now have to get back to the nearest filter which is not terminal.
                         unstackFilters( container );
+                        container.grammarPopAllowed( true );
                     }
                 });
 
@@ -643,6 +658,7 @@
                             
                         // We now have to get back to the nearest filter which is not terminal.
                         unstackFilters( container );
+                        container.grammarPopAllowed( true );
                     }
                 } );
 
@@ -679,7 +695,7 @@
         // Get the parent, if any
         Filter currentFilter = searchRequest.getCurrentFilter();
 
-        // We know have to check if the parent has been completed
+        // We now have to check if the parent has been completed
 	    if (tlv.getParent().getExpectedLength() == 0)
 	    {
 	        TLV parent = tlv.getParent();

Modified: directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/MatchingRuleAssertionGrammar.java
URL: http://svn.apache.org/viewcvs/directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/MatchingRuleAssertionGrammar.java?rev=372169&r1=372168&r2=372169&view=diff
==============================================================================
--- directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/MatchingRuleAssertionGrammar.java (original)
+++ directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/MatchingRuleAssertionGrammar.java Wed Jan 25 01:20:39 2006
@@ -84,7 +84,7 @@
                 LdapStatesEnum.MATCHING_RULE_ASSERTION_TAG, LdapStatesEnum.MATCHING_RULE_ASSERTION_VALUE, null );
 
         super.transitions[LdapStatesEnum.MATCHING_RULE_ASSERTION_VALUE][LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG] = new GrammarTransition(
-                LdapStatesEnum.MATCHING_RULE_ASSERTION_VALUE, LdapStatesEnum.MATCHING_RULE_ASSERTION_MATCHING_RULE_OR_TYPE_OR_MATCH_VALUE_TAG, 
+                LdapStatesEnum.MATCHING_RULE_ASSERTION_VALUE, LdapStatesEnum.MATCHING_RULE_ASSERTION_MATCHING_RULE_OR_TYPE_TAG, 
                 new GrammarAction( "Init extensible match Filter" )
                 {
                     public void action( IAsn1Container container ) throws DecoderException
@@ -126,8 +126,8 @@
         //          matchingRule    [1] MatchingRuleId OPTIONAL, (Tag)
         //          ...
         // Nothing to do
-        super.transitions[LdapStatesEnum.MATCHING_RULE_ASSERTION_MATCHING_RULE_OR_TYPE_OR_MATCH_VALUE_TAG][LdapConstants.SEARCH_MATCHING_RULE_TAG] = new GrammarTransition(
-                LdapStatesEnum.MATCHING_RULE_ASSERTION_MATCHING_RULE_OR_TYPE_OR_MATCH_VALUE_TAG, LdapStatesEnum.MATCHING_RULE_ASSERTION_MATCHING_RULE_VALUE, null );
+        super.transitions[LdapStatesEnum.MATCHING_RULE_ASSERTION_MATCHING_RULE_OR_TYPE_TAG][LdapConstants.SEARCH_MATCHING_RULE_TAG] = new GrammarTransition(
+                LdapStatesEnum.MATCHING_RULE_ASSERTION_MATCHING_RULE_OR_TYPE_TAG, LdapStatesEnum.MATCHING_RULE_ASSERTION_MATCHING_RULE_VALUE, null );
 
         // MatchingRuleAssertion ::= SEQUENCE {
         //          matchingRule    [1] MatchingRuleId OPTIONAL, (Value)
@@ -177,8 +177,8 @@
         //          ...
         // Nothing to do.
         // Nothing to do.
-        super.transitions[LdapStatesEnum.MATCHING_RULE_ASSERTION_MATCHING_RULE_OR_TYPE_OR_MATCH_VALUE_TAG][LdapConstants.MATCHING_RULE_ASSERTION_TYPE_TAG] = new GrammarTransition(
-                LdapStatesEnum.MATCHING_RULE_ASSERTION_MATCHING_RULE_OR_TYPE_OR_MATCH_VALUE_TAG, LdapStatesEnum.MATCHING_RULE_ASSERTION_TYPE_VALUE, null );
+        super.transitions[LdapStatesEnum.MATCHING_RULE_ASSERTION_MATCHING_RULE_OR_TYPE_TAG][LdapConstants.MATCHING_RULE_ASSERTION_TYPE_TAG] = new GrammarTransition(
+                LdapStatesEnum.MATCHING_RULE_ASSERTION_MATCHING_RULE_OR_TYPE_TAG, LdapStatesEnum.MATCHING_RULE_ASSERTION_TYPE_VALUE, null );
 
                 
         // MatchingRuleAssertion ::= SEQUENCE { 
@@ -208,33 +208,32 @@
 
                         TLV tlv            = ldapMessageContainer.getCurrentTLV();
 
-                        // Store the value.
-                        ExtensibleMatchFilter extensibleMatchFilter = (ExtensibleMatchFilter)searchRequest.getCurrentFilter();
-                        
-                        try
+                        if ( tlv.getLength().getLength() == 0 )
                         {
-                            LdapString type = LdapDN.normalizeAttribute( tlv.getValue().getData() );
-                            extensibleMatchFilter.setType( type );
+                            log.error( "The type cannot be null in a MacthingRuleAssertion" );
+                            throw new DecoderException( "The type cannot be null in a MacthingRuleAssertion" );
                         }
-                        catch ( LdapStringEncodingException lsee )
+                        else
                         {
-                            String msg = StringTools.dumpBytes( tlv.getValue().getData() );
-                            log.error( "The match filter ({}) is invalid", msg );
-                            throw new DecoderException( "Invalid match filter " + msg + ", : " + lsee.getMessage() );
+                            // Store the value.
+                            ExtensibleMatchFilter extensibleMatchFilter = (ExtensibleMatchFilter)searchRequest.getCurrentFilter();
+                            
+                            try
+                            {
+                                LdapString type = LdapDN.normalizeAttribute( tlv.getValue().getData() );
+                                extensibleMatchFilter.setType( type );
+                            }
+                            catch ( LdapStringEncodingException lsee )
+                            {
+                                String msg = StringTools.dumpBytes( tlv.getValue().getData() );
+                                log.error( "The match filter ({}) is invalid", msg );
+                                throw new DecoderException( "Invalid match filter " + msg + ", : " + lsee.getMessage() );
+                            }
                         }
                     }
                 });
                 
         // MatchingRuleAssertion ::= SEQUENCE { 
-        //          (void),
-        //          (void),
-        //          matchValue      [3] AssertionValue, (Tag)
-        //          ...
-        // Nothing to do.
-        super.transitions[LdapStatesEnum.MATCHING_RULE_ASSERTION_MATCHING_RULE_OR_TYPE_OR_MATCH_VALUE_TAG][LdapConstants.SEARCH_MATCH_VALUE_TAG] = new GrammarTransition(
-                LdapStatesEnum.MATCHING_RULE_ASSERTION_MATCHING_RULE_OR_TYPE_OR_MATCH_VALUE_TAG, LdapStatesEnum.MATCHING_RULE_ASSERTION_MATCH_VALUE_VALUE, null );
-
-        // MatchingRuleAssertion ::= SEQUENCE { 
         //          matchingRule    [1] MatchingRuleId OPTIONAL,
         //          (void),
         //          matchValue      [3] AssertionValue, (Tag)
@@ -274,6 +273,9 @@
                         // Store the value.
                         ExtensibleMatchFilter extensibleMatchFilter = (ExtensibleMatchFilter)searchRequest.getCurrentFilter();
                         extensibleMatchFilter.setMatchValue( StringTools.utf8ToString( tlv.getValue().getData() ) );
+
+                        // We can have a pop transition
+                        ldapMessageContainer.grammarPopAllowed( true );
                     }
                 });
                 
@@ -329,6 +331,9 @@
                         {
                             log.debug( "DN Attributes : {}", new Boolean( extensibleMatchFilter.isDnAttributes() ) );
                         }
+                        
+                        // We can have a pop transition
+                        ldapMessageContainer.grammarPopAllowed( true );
                     }
                 });
     }

Modified: directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/SearchRequestGrammar.java
URL: http://svn.apache.org/viewcvs/directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/SearchRequestGrammar.java?rev=372169&r1=372168&r2=372169&view=diff
==============================================================================
--- directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/SearchRequestGrammar.java (original)
+++ directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/SearchRequestGrammar.java Wed Jan 25 01:20:39 2006
@@ -661,6 +661,9 @@
                         // We can have an END transition
                         ldapMessageContainer.grammarEndAllowed( true );
 
+                        // We can have an Pop transition
+                        ldapMessageContainer.grammarPopAllowed( true );
+                        
                         return;
                     }
                 } );
@@ -713,6 +716,9 @@
                             
                         // We can have an END transition
                         ldapMessageContainer.grammarEndAllowed( true );
+
+                        // We can have a pop transition
+                        ldapMessageContainer.grammarPopAllowed( true );
 
                         if ( log.isDebugEnabled() )
                         {

Modified: directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/SubstringFilterGrammar.java
URL: http://svn.apache.org/viewcvs/directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/SubstringFilterGrammar.java?rev=372169&r1=372168&r2=372169&view=diff
==============================================================================
--- directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/SubstringFilterGrammar.java (original)
+++ directory/trunks/common/ldap/src/main/java/org/apache/ldap/common/codec/search/SubstringFilterGrammar.java Wed Jan 25 01:20:39 2006
@@ -275,6 +275,9 @@
 
                         // We now have to get back to the nearest filter which is not terminal.
                         unstackFilters( container );
+
+                        // We can have a pop transition
+                        container.grammarPopAllowed( true );
                     }
                 });
                 
@@ -344,6 +347,9 @@
 
                         // We now have to get back to the nearest filter which is not terminal.
                         unstackFilters( container );
+
+                        // We can have a pop transition
+                        container.grammarPopAllowed( true );
                     }
                 });
                 
@@ -403,6 +409,8 @@
 
                         // We now have to get back to the nearest filter which is not terminal.
                         unstackFilters( container );
+                        // We can have a pop transition
+                        container.grammarPopAllowed( true );
                     }
                 });
                 
@@ -456,7 +464,7 @@
 	            else
 	            {
 	                currentFilter = null;
-	                break;
+                    break;
 	            }
 	        }