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/10/09 15:51:27 UTC

svn commit: r307431 [2/2] - /directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/

Modified: directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/ModifyRequestGrammar.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/ModifyRequestGrammar.java?rev=307431&r1=307430&r2=307431&view=diff
==============================================================================
--- directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/ModifyRequestGrammar.java (original)
+++ directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/ModifyRequestGrammar.java Sun Oct  9 06:51:08 2005
@@ -16,6 +16,8 @@
  */
 package org.apache.asn1new.ldap.codec.grammar;
 
+import javax.naming.InvalidNameException;
+
 import org.apache.asn1.codec.DecoderException;
 import org.apache.asn1new.ber.containers.IAsn1Container;
 import org.apache.asn1new.ber.grammar.AbstractGrammar;
@@ -25,11 +27,14 @@
 import org.apache.asn1new.ber.tlv.TLV;
 import org.apache.asn1new.ber.tlv.UniversalTag;
 import org.apache.asn1new.util.IntegerDecoder;
+import org.apache.asn1new.util.IntegerDecoderException;
+import org.apache.asn1new.util.StringUtils;
 import org.apache.asn1new.primitives.OctetString;
 import org.apache.asn1new.ldap.codec.LdapConstants;
 import org.apache.asn1new.ldap.codec.LdapMessageContainer;
 import org.apache.asn1new.ldap.codec.primitives.LdapDN;
 import org.apache.asn1new.ldap.codec.primitives.LdapString;
+import org.apache.asn1new.ldap.codec.primitives.LdapStringEncodingException;
 import org.apache.asn1new.ldap.pojo.LdapMessage;
 import org.apache.asn1new.ldap.pojo.ModifyRequest;
 import org.slf4j.Logger;
@@ -62,7 +67,7 @@
         name       = ModifyRequestGrammar.class.getName();
         statesEnum = LdapStatesEnum.getInstance();
 
-        // Intitialisation
+        // Create the transitions table
         super.transitions = new GrammarTransition[LdapStatesEnum.LAST_MODIFY_REQUEST_STATE][256];
 
         //============================================================================================
@@ -130,12 +135,25 @@
                         // Store the value.
                         if ( tlv.getLength().getLength() == 0 )
                         {
-                            modifyRequest.setObject( LdapDN.EMPTY_STRING );
+                            modifyRequest.setObject( LdapDN.EMPTY_LDAPDN );
                         }
                         else
                         {
-                            modifyRequest.setObject( new LdapDN(
-                                    tlv.getValue().getData() ) );
+                            try
+                            {
+                                modifyRequest.setObject( new LdapDN(
+                                        tlv.getValue().getData() ) );
+                            }
+                            catch ( InvalidNameException ine )
+                            {
+                                log.error( "Invalid DN " + StringUtils.dumpBytes( tlv.getValue().getData() ) + ", : " + ine.getMessage() );
+                                throw new DecoderException( "Invalid object DN : " + ine.getMessage() );
+                            }
+                        }
+                        
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Modification of DN " + modifyRequest.getObject() );
                         }
                     }
                 } );
@@ -247,10 +265,39 @@
                             ldapMessageContainer.getCurrentTLV();
 
                         // Decode the operation type
-                        int operation = IntegerDecoder.parse( tlv.getValue(), 0, 2 );
-
+                        int operation = 0;
+                        
+                        try
+                        {
+                            operation = IntegerDecoder.parse( tlv.getValue(), 0, 2 );
+                        }
+                        catch ( IntegerDecoderException ide )
+                        {
+                            log.error( "Invalid operation (" + StringUtils.dumpBytes( tlv.getValue().getData() ) + ", it should be 0, 1 or 2 " );
+                            throw new DecoderException( "Invalid operation (" + StringUtils.dumpBytes( tlv.getValue().getData() ) + ", it should be 0, 1 or 2 " );
+                        }
+                        
                         // Store the current operation.
                         modifyRequest.setCurrentOperation( operation );
+                        
+                        if ( log.isDebugEnabled() )
+                        {
+                            switch ( operation )
+                            {
+                                case LdapConstants.OPERATION_ADD :
+                                    log.debug( "Modification operation : ADD" );
+                                    break;
+
+                                case LdapConstants.OPERATION_DELETE :
+                                    log.debug( "Modification operation : DELETE" );
+                                    break;
+                                
+                                case LdapConstants.OPERATION_REPLACE :
+                                    log.debug( "Modification operation : REPLACE" );
+                                    break;
+                            }
+                        }
+                          
                     }
                 } );
 
@@ -303,14 +350,29 @@
                             ldapMessageContainer.getCurrentTLV();
 
                         // Store the value. It can't be null
+                        LdapString type = null;
+                        
                         if ( tlv.getLength().getLength() == 0 )
                         {
                             throw new DecoderException( "The type can't be null" );
                         }
                         else
                         {
-                            modifyRequest.addAttributeTypeAndValues( new LdapString(
-                                    tlv.getValue().getData() ) );
+                            try
+                            {
+                                type = new LdapString( tlv.getValue().getData() );
+                                modifyRequest.addAttributeTypeAndValues( type );
+                            }
+                            catch ( LdapStringEncodingException lsee )
+                            {
+                                log.error( "Invalid type : " + StringUtils.dumpBytes( tlv.getValue().getData() ) );
+                                throw new DecoderException( "Invalid type : " + lsee.getMessage() );
+                            }
+                        }
+                        
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Modification type : " + type );
                         }
                     }
                 } );
@@ -375,14 +437,21 @@
                             ldapMessageContainer.getCurrentTLV();
 
                         // Store the value. It can't be null
+                        OctetString value = OctetString.EMPTY_STRING;
+                        
                         if ( tlv.getLength().getLength() == 0 )
                         {
-                            modifyRequest.addAttributeValue( OctetString.EMPTY_STRING );
+                            modifyRequest.addAttributeValue( value );
                         }
                         else
                         {
-                            modifyRequest.addAttributeValue( new OctetString(
-                                    tlv.getValue().getData() ) );
+                            value = new OctetString( tlv.getValue().getData() );
+                            modifyRequest.addAttributeValue( value );
+                        }
+                        
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Value modified : " + value );
                         }
                     }
                 } );

Modified: directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/ModifyResponseGrammar.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/ModifyResponseGrammar.java?rev=307431&r1=307430&r2=307431&view=diff
==============================================================================
--- directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/ModifyResponseGrammar.java (original)
+++ directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/ModifyResponseGrammar.java Sun Oct  9 06:51:08 2005
@@ -57,7 +57,7 @@
         name = ModifyResponseGrammar.class.getName();
         statesEnum = LdapStatesEnum.getInstance();
 
-        // Intitialisation
+        // Create the transitions table
         super.transitions = new GrammarTransition[LdapStatesEnum.LAST_MODIFY_RESPONSE_STATE][256];
 
         //============================================================================================
@@ -87,6 +87,11 @@
 
                         // We associate it to the ldapMessage Object
                         ldapMessage.setProtocolOP( new ModifyResponse() );
+                        
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Modify response" );
+                        }
                     }
                 } );
 

Modified: directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/SearchRequestGrammar.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/SearchRequestGrammar.java?rev=307431&r1=307430&r2=307431&view=diff
==============================================================================
--- directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/SearchRequestGrammar.java (original)
+++ directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/SearchRequestGrammar.java Sun Oct  9 06:51:08 2005
@@ -16,6 +16,8 @@
  */
 package org.apache.asn1new.ldap.codec.grammar;
 
+import javax.naming.InvalidNameException;
+
 import org.apache.asn1.codec.DecoderException;
 import org.apache.asn1new.ber.containers.IAsn1Container;
 import org.apache.asn1new.ber.grammar.AbstractGrammar;
@@ -27,10 +29,13 @@
 import org.apache.asn1new.ber.tlv.Value;
 import org.apache.asn1new.util.BooleanDecoder;
 import org.apache.asn1new.util.IntegerDecoder;
+import org.apache.asn1new.util.IntegerDecoderException;
+import org.apache.asn1new.util.StringUtils;
 import org.apache.asn1new.ldap.codec.LdapConstants;
 import org.apache.asn1new.ldap.codec.LdapMessageContainer;
 import org.apache.asn1new.ldap.codec.primitives.LdapDN;
 import org.apache.asn1new.ldap.codec.primitives.LdapString;
+import org.apache.asn1new.ldap.codec.primitives.LdapStringEncodingException;
 import org.apache.asn1new.ldap.pojo.LdapMessage;
 import org.apache.asn1new.ldap.pojo.SearchRequest;
 import org.slf4j.Logger;
@@ -65,7 +70,7 @@
         name       = SearchRequestGrammar.class.getName();
         statesEnum = LdapStatesEnum.getInstance();
 
-        // Initialisation of the transitions table
+        // Create the transitions table
         super.transitions = new GrammarTransition[LdapStatesEnum.LAST_SEARCH_REQUEST_STATE][256];
 
         //============================================================================================
@@ -128,27 +133,30 @@
                         TLV                  tlv = ldapMessageContainer.getCurrentTLV();
 
                         // We have to check that this is a correct DN
-                        LdapDN baseObject = null;
+                        LdapDN baseObject = LdapDN.EMPTY_LDAPDN;
                         
                         // We have to handle the special case of a 0 length base object,
-                        // which is not permitted
-                        if ( tlv.getLength().getLength() == 0 )
-                        {
-                            throw new DecoderException("The base object must not be null");
-                        }
-
-                        try
-                        {
-                            baseObject = new LdapDN(tlv.getValue().getData());
-                        }
-                        catch (DecoderException de)
+                        // which means that the search is done from the default root.
+                        if ( tlv.getLength().getLength() != 0 )
                         {
-                            log.error("The DN " + baseObject.toString() + " is invalid");
-                            throw de;
+                            try
+                            {
+                                baseObject = new LdapDN( tlv.getValue().getData() );
+                            }
+                            catch ( InvalidNameException ine )
+                            {
+                                log.error( "The root DN " + baseObject.toString() + " is invalid" );
+                                throw new DecoderException( "The root DN " + baseObject.toString() + " is invalid" );
+                            }
                         }
                         
                         searchRequest.setBaseObject(baseObject);
 
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Searching with root DN : " + baseObject );
+                        }
+                       
                         return;
                     }
                 } );
@@ -191,11 +199,38 @@
 
                         // We have to check that this is a correct scope
                         Value value   = tlv.getValue();
+                        int   scope = 0;
 
-                        int   scope = IntegerDecoder.parse( value, LdapConstants.SCOPE_BASE_OBJECT, LdapConstants.SCOPE_WHOLE_SUBTREE );
+                        try
+                        {
+                            scope = IntegerDecoder.parse( value, LdapConstants.SCOPE_BASE_OBJECT, LdapConstants.SCOPE_WHOLE_SUBTREE );
+                        }
+                        catch ( IntegerDecoderException ide )
+                        {
+                            log.error( "The scope is not in [0..2] : " + value.toString() );
+                            throw new DecoderException( "The scope is not in [0..2] : " + value.toString() );
+                        }
                         
                         searchRequest.setScope(scope);
 
+                        if ( log.isDebugEnabled() )
+                        {
+                            switch ( scope )
+                            {
+                                case LdapConstants.SCOPE_BASE_OBJECT :
+                                    log.debug( "Searching within BASE_OBJECT scope " );
+                                    break;
+                            
+                                case LdapConstants.SCOPE_SINGLE_LEVEL :
+                                    log.debug( "Searching within SINGLE_LEVEL scope " );
+                                    break;
+
+                                case LdapConstants.SCOPE_WHOLE_SUBTREE :
+                                    log.debug( "Searching within WHOLE_SUBTREE scope " );
+                                    break;
+                            }
+                        }
+
                         return;
                     }
                 } );
@@ -240,11 +275,41 @@
 
                         // We have to check that this is a correct derefAliases
                         Value value   = tlv.getValue();
+                        int   derefAliases = 0;
 
-                        int   derefAliases = IntegerDecoder.parse( value, LdapConstants.NEVER_DEREF_ALIASES, LdapConstants.DEREF_ALWAYS );
+                        try
+                        {
+                            derefAliases = IntegerDecoder.parse( value, LdapConstants.NEVER_DEREF_ALIASES, LdapConstants.DEREF_ALWAYS );
+                        }
+                        catch ( IntegerDecoderException ide )
+                        {
+                            log.error( "The derefAlias is not in [0..3] : " + value.toString() );
+                            throw new DecoderException( "The derefAlias is not in [0..3] : " + value.toString() );
+                        }
                         
                         searchRequest.setDerefAliases( derefAliases );
 
+                        if ( log.isDebugEnabled() )
+                        {
+                            switch ( derefAliases )
+                            {
+                                case LdapConstants.NEVER_DEREF_ALIASES :
+                                    log.debug( "Handling object strategy : NEVER_DEREF_ALIASES" );
+                                    break;
+                            
+                                case LdapConstants.DEREF_IN_SEARCHING :
+                                    log.debug( "Handling object strategy : DEREF_IN_SEARCHING" );
+                                    break;
+
+                                case LdapConstants.DEREF_FINDING_BASE_OBJ :
+                                    log.debug( "Handling object strategy : DEREF_FINDING_BASE_OBJ" );
+                                    break;
+
+                                case LdapConstants.DEREF_ALWAYS :
+                                    log.debug( "Handling object strategy : DEREF_ALWAYS" );
+                                    break;
+                            }
+                        }
                         return;
                     }
                 } );
@@ -282,11 +347,25 @@
                         // The current TLV should be a integer
                         // We get it and store it in sizeLimit
                         Value value     = tlv.getValue();
+                        int   sizeLimit = 0;
 
-                        int   sizeLimit = IntegerDecoder.parse( value, 0, Integer.MAX_VALUE );
+                        try
+                        {
+                            sizeLimit = IntegerDecoder.parse( value, 0, Integer.MAX_VALUE );
+                        }
+                        catch ( IntegerDecoderException ide )
+                        {
+                            log.error( "The sizeLimit is not a valid Integer: " + value.toString() );
+                            throw new DecoderException( "The sizeLimit is not a valid Integer: " + value.toString() );
+                        }
 
                         searchRequest.setSizeLimit( sizeLimit );
 
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "The sizeLimit value is set to " + sizeLimit + " objects" );
+                        }
+
                         return;
                     }
                 } );
@@ -325,10 +404,25 @@
                         // We get it and store it in timeLimit
                         Value value     = tlv.getValue();
 
-                        int   timeLimit = IntegerDecoder.parse( value, 0, Integer.MAX_VALUE );
+                        int   timeLimit = 0;
 
+                        try
+                        {
+                            timeLimit = IntegerDecoder.parse( value, 0, Integer.MAX_VALUE );
+                        }
+                        catch ( IntegerDecoderException ide )
+                        {
+                            log.error( "The timeLimit is not a valid Integer: " + value.toString() );
+                            throw new DecoderException( "The timeLimit is not a valid Integer: " + value.toString() );
+                        }
+                        
                         searchRequest.setTimeLimit( timeLimit );
 
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "The timeLimit value is set to " + timeLimit + " seconds" );
+                        }
+
                         return;
                     }
                 } );
@@ -374,6 +468,12 @@
 
                         searchRequest.setTypesOnly( BooleanDecoder.parse( value ) );
 
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "The search will return " + ( searchRequest.isTypesOnly() ? 
+                                        "only attributs type" : 
+                                        "attributes types and values" ) );
+                        }
                         return;
                     }
                 } );
@@ -560,12 +660,8 @@
                 LdapStatesEnum.SEARCH_REQUEST_ATTRIBUTE_DESCRIPTION_TAG, LdapStatesEnum.SEARCH_REQUEST_ATTRIBUTE_DESCRIPTION_VALUE,
                 null);
         
-        // ...
-        //    attributes      AttributeDescriptionList }
-        // AttributeDescriptionList ::= SEQUENCE OF AttributeDescription (Length)
-        //    ...
-        // We have to create an array of elements to store the list of attributes
-        // to retrieve. We don't know yet how many attributes we will read.
+        // AttributeDescription ::= LDAPString (Value)
+        // Decodes the attribute description and stores it.
         super.transitions[LdapStatesEnum.SEARCH_REQUEST_ATTRIBUTE_DESCRIPTION_VALUE][UniversalTag.OCTET_STRING_TAG] =
             new GrammarTransition( LdapStatesEnum.SEARCH_REQUEST_ATTRIBUTE_DESCRIPTION_VALUE,
                 LdapStatesEnum.SEARCH_REQUEST_ATTRIBUTE_DESCRIPTION_TAG,
@@ -573,7 +669,6 @@
                 {
                     public void action( IAsn1Container container ) throws DecoderException
                     {
-
                         LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer )
                             container;
 
@@ -581,8 +676,23 @@
                             ldapMessageContainer.getLdapMessage().getSearchRequest();
 
                         TLV                  tlv = ldapMessageContainer.getCurrentTLV();
+                        LdapString attributeDescription = null;
+                        
+                        try
+                        {
+                            attributeDescription = new LdapString( tlv.getValue().getData() );
+                            searchRequest.addAttribute( attributeDescription );
+                        }
+                        catch ( LdapStringEncodingException lsee )
+                        {
+                            log.error( "Cannot decode the attribute description : " + StringUtils.dumpBytes( tlv.getValue().getData() ) );
+                            throw new DecoderException( "Cannot decode the attribute description" );
+                        }
                         
-                        searchRequest.addAttribute( new LdapString(tlv.getValue().getData()));
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Decoded Attribute Description : " + attributeDescription.getString() );
+                        }
 
                         return;
                     }

Modified: directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/SearchResultDoneGrammar.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/SearchResultDoneGrammar.java?rev=307431&r1=307430&r2=307431&view=diff
==============================================================================
--- directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/SearchResultDoneGrammar.java (original)
+++ directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/SearchResultDoneGrammar.java Sun Oct  9 06:51:08 2005
@@ -57,7 +57,7 @@
         name = SearchResultDoneGrammar.class.getName();
         statesEnum = LdapStatesEnum.getInstance();
 
-        // Intitialisation
+        // Create the transitions table
         super.transitions = new GrammarTransition[LdapStatesEnum.LAST_SEARCH_RESULT_DONE_STATE][256];
 
         //============================================================================================
@@ -87,6 +87,11 @@
 
                         // Now, we can allocate the SearchResultDone Object
                         ldapMessage.setProtocolOP( new SearchResultDone() );
+                        
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Search Result Done found" );
+                        }
                     }
                 } );
 

Modified: directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/SearchResultEntryGrammar.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/SearchResultEntryGrammar.java?rev=307431&r1=307430&r2=307431&view=diff
==============================================================================
--- directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/SearchResultEntryGrammar.java (original)
+++ directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/SearchResultEntryGrammar.java Sun Oct  9 06:51:08 2005
@@ -16,6 +16,8 @@
  */
 package org.apache.asn1new.ldap.codec.grammar;
 
+import javax.naming.InvalidNameException;
+
 import org.apache.asn1.codec.DecoderException;
 import org.apache.asn1new.ber.containers.IAsn1Container;
 import org.apache.asn1new.ber.grammar.AbstractGrammar;
@@ -25,10 +27,12 @@
 import org.apache.asn1new.ber.tlv.TLV;
 import org.apache.asn1new.ber.tlv.UniversalTag;
 import org.apache.asn1new.primitives.OctetString;
+import org.apache.asn1new.util.StringUtils;
 import org.apache.asn1new.ldap.codec.LdapConstants;
 import org.apache.asn1new.ldap.codec.LdapMessageContainer;
 import org.apache.asn1new.ldap.codec.primitives.LdapDN;
 import org.apache.asn1new.ldap.codec.primitives.LdapString;
+import org.apache.asn1new.ldap.codec.primitives.LdapStringEncodingException;
 import org.apache.asn1new.ldap.pojo.LdapMessage;
 import org.apache.asn1new.ldap.pojo.SearchResultEntry;
 import org.slf4j.Logger;
@@ -69,7 +73,7 @@
         name       = SearchResultEntryGrammar.class.getName();
         statesEnum = LdapStatesEnum.getInstance();
 
-        // Intitialisation
+        // Create the transitions table
         super.transitions = new GrammarTransition[LdapStatesEnum.LAST_SEARCH_RESULT_ENTRY_STATE][256];
 
         //============================================================================================
@@ -141,12 +145,24 @@
                         // Store the value.
                         if ( tlv.getLength().getLength() == 0 )
                         {
-                            searchResultEntry.setObjectName( LdapDN.EMPTY_STRING );
+                            searchResultEntry.setObjectName( LdapDN.EMPTY_LDAPDN );
                         }
                         else
                         {
-                            searchResultEntry.setObjectName( new LdapDN(
-                                    tlv.getValue().getData() ) );
+                            try
+                            {
+                                searchResultEntry.setObjectName( new LdapDN( tlv.getValue().getData() ) );
+                            }
+                            catch ( InvalidNameException ine )
+                            {
+                                log.error(" The DN " + StringUtils.dumpBytes( tlv.getValue().getData() ) + "is invalid : " + ine.getMessage() );
+                                throw new DecoderException( "The Dn is invalid : " + ine.getMessage() );
+                            }
+                        }
+
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Search Result Entry DN found : " + searchResultEntry.getObjectName() );
                         }
                     }
                 } );
@@ -244,15 +260,30 @@
                         TLV                  tlv                  =
                             ldapMessageContainer.getCurrentTLV();
 
+                        LdapString type = LdapString.EMPTY_STRING;
+
                         // Store the name
                         if ( tlv.getLength().getLength() == 0 )
                         {
-                            searchResultEntry.addAttributeValues( LdapString.EMPTY_STRING );
+                            searchResultEntry.addAttributeValues( type );
                         }
                         else
                         {
-                            searchResultEntry.addAttributeValues( new LdapString(
-                                    tlv.getValue().getData() ) );
+                            try
+                            {
+                                type = new LdapString( tlv.getValue().getData() );
+                                searchResultEntry.addAttributeValues( type );
+                            }
+                            catch ( LdapStringEncodingException lsee )
+                            {
+                                log.error( "Invalid attribute type : " + StringUtils.dumpBytes( tlv.getValue().getData() ) );
+                                throw new DecoderException( "The attribute type is invalid : " + lsee.getMessage() );
+                            }
+                        }
+                        
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Attribute type : " + type );
                         }
                     }
                 } );
@@ -316,15 +347,22 @@
                         TLV                  tlv                  =
                             ldapMessageContainer.getCurrentTLV();
 
-                        // Store the name
+                        // Store the value
+                        OctetString value = OctetString.EMPTY_STRING;
+                        
                         if ( tlv.getLength().getLength() == 0 )
                         {
-                            searchResultEntry.addAttributeValue( OctetString.EMPTY_STRING );
+                            searchResultEntry.addAttributeValue( value );
                         }
                         else
                         {
-                            searchResultEntry.addAttributeValue( new OctetString(
-                                    tlv.getValue().getData() ) );
+                            value = new OctetString( tlv.getValue().getData() );
+                            searchResultEntry.addAttributeValue( value );
+                        }
+                        
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Attribute value : " + value );
                         }
                     }
                 } );

Modified: directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/SearchResultReferenceGrammar.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/SearchResultReferenceGrammar.java?rev=307431&r1=307430&r2=307431&view=diff
==============================================================================
--- directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/SearchResultReferenceGrammar.java (original)
+++ directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/SearchResultReferenceGrammar.java Sun Oct  9 06:51:08 2005
@@ -27,6 +27,7 @@
 import org.apache.asn1new.ldap.codec.LdapConstants;
 import org.apache.asn1new.ldap.codec.LdapMessageContainer;
 import org.apache.asn1new.ldap.codec.primitives.LdapURL;
+import org.apache.asn1new.ldap.codec.primitives.LdapURLEncodingException;
 import org.apache.asn1new.ldap.pojo.LdapMessage;
 import org.apache.asn1new.ldap.pojo.SearchResultReference;
 import org.slf4j.Logger;
@@ -61,7 +62,7 @@
         name       = SearchResultReferenceGrammar.class.getName();
         statesEnum = LdapStatesEnum.getInstance();
 
-        // Initialisation of the transitions table
+        // Create the transitions table
         super.transitions = new GrammarTransition[LdapStatesEnum.LAST_SEARCH_RESULT_REFERENCE_STATE_STATE][256];
 
         //============================================================================================
@@ -126,13 +127,30 @@
                         TLV tlv = ldapMessageContainer.getCurrentTLV();
 
                         // We have to handle the special case of a 0 length server sasl credentials
+                        LdapURL url = LdapURL.EMPTY_URL;
+                        
                         if ( tlv.getLength().getLength() == 0 )
                         {
-                            searchResultReference.addSearchResultReference( LdapURL.EMPTY_STRING );
+                            searchResultReference.addSearchResultReference( url );
                         }
                         else
                         {
-                            searchResultReference.addSearchResultReference( new LdapURL( tlv.getValue().getData() ) );
+                            try
+                            {
+                                url = new LdapURL( tlv.getValue().getData() );
+                                searchResultReference.addSearchResultReference( url );
+                            }
+                            catch ( LdapURLEncodingException luee )
+                            {
+                                String badUrl = new String( tlv.getValue().getData() );
+                                log.error( "The URL " + badUrl + " is not valid : " + luee.getMessage() );
+                                throw new DecoderException( "Invalid URL : " + luee.getMessage() );
+                            }
+                        }
+                        
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Search reference URL found : " + url );
                         }
                         
                         return;

Modified: directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/UnBindRequestGrammar.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/UnBindRequestGrammar.java?rev=307431&r1=307430&r2=307431&view=diff
==============================================================================
--- directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/UnBindRequestGrammar.java (original)
+++ directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/grammar/UnBindRequestGrammar.java Sun Oct  9 06:51:08 2005
@@ -73,7 +73,7 @@
         
         statesEnum = LdapStatesEnum.getInstance();
 
-        // We have 3 differents states, so 2 transitions between states.
+        // Create the transitions table
         super.transitions = new GrammarTransition[LdapStatesEnum.LAST_UNBIND_REQUEST_STATE][256];
 
         //============================================================================================
@@ -108,9 +108,10 @@
                         int expectedLength = tlv.getLength().getLength();
                         
                         // If the length is not null, this is an error.
-                        if (expectedLength != 0)
+                        if ( expectedLength != 0 )
                         {
-                            throw new DecoderException("The length of a UnBindRequest must be null");
+                            log.error( "The length of a UnBindRequest must be null, the actual value is " + expectedLength );
+                            throw new DecoderException( "The length of a UnBindRequest must be null" );
                         }
 
                         unBindRequest.setParent( ldapMessage );