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/08/31 12:33:48 UTC

svn commit: r438859 [1/4] - in /directory/trunks/shared/ldap: ./ src/main/java/org/apache/directory/shared/ldap/codec/ src/main/java/org/apache/directory/shared/ldap/codec/abandon/ src/main/java/org/apache/directory/shared/ldap/codec/add/ src/main/java...

Author: elecharny
Date: Thu Aug 31 03:33:43 2006
New Revision: 438859

URL: http://svn.apache.org/viewvc?rev=438859&view=rev
Log:
- Merged the code with 1.0 modification done to fix DIRSERVER-711
- Removed the RDN bad hashcode() method
- Merged the modification of EMPTY_BYTES done in 1.0

Added:
    directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/LdapControlTest.java
      - copied unchanged from r438665, directory/branches/shared/0.9.5/ldap/src/test/java/org/apache/directory/shared/ldap/codec/LdapControlTest.java
Modified:
    directory/trunks/shared/ldap/pom.xml
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/Control.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapControlGrammar.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapMessageGrammar.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/ResponseCarryingException.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/abandon/AbandonRequestGrammar.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/add/AddRequestGrammar.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/bind/BindRequestGrammar.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/compare/CompareRequestGrammar.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/del/DelRequestGrammar.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/extended/ExtendedRequestGrammar.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequestGrammar.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modifyDn/ModifyDNRequestGrammar.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/FilterGrammar.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/MatchingRuleAssertionGrammar.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchRequest.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchRequestGrammar.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SubstringFilterGrammar.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/controls/SubEntryControlGrammar.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/unbind/UnBindRequestGrammar.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/util/LdapString.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/message/ManageDsaITControl.java
    directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/name/Rdn.java
    directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/LdapMessageTest.java
    directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/abandon/AbandonRequestTest.java
    directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/add/AddRequestTest.java
    directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/bind/BindRequestTest.java
    directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/compare/CompareRequestTest.java
    directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/del/DelRequestTest.java
    directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/extended/ExtendedRequestTest.java
    directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequestTest.java
    directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/modifyDn/ModifyDNRequestTest.java
    directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/search/SearchRequestMatchingRuleAssertionTest.java
    directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/search/SearchRequestSubstringTest.java
    directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/search/SearchRequestTest.java
    directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/unbind/UnBindRequestTest.java

Modified: directory/trunks/shared/ldap/pom.xml
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/pom.xml?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/pom.xml (original)
+++ directory/trunks/shared/ldap/pom.xml Thu Aug 31 03:33:43 2006
@@ -66,7 +66,7 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>nlog4j</artifactId>
-      <version>1.2.24</version>
+      <version>1.2.25</version>
       <scope>provided</scope>
     </dependency>
 

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/Control.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/Control.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/Control.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/Control.java Thu Aug 31 03:33:43 2006
@@ -57,10 +57,6 @@
     /** The control length */
     private transient int controlLength;
 
-    private static final byte[] EMPTY_BYTES = new byte[]
-        {};
-
-
     // ~ Methods
     // ------------------------------------------------------------------------------------
 
@@ -96,7 +92,7 @@
     {
         if ( controlValue == null )
         {
-            return EMPTY_BYTES;
+            return StringTools.EMPTY_BYTES;
         }
         else if ( controlValue instanceof String )
         {
@@ -130,7 +126,7 @@
     {
         if ( encodedValue == null )
         {
-            return EMPTY_BYTES;
+            return StringTools.EMPTY_BYTES;
         }
 
         return encodedValue;

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapControlGrammar.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapControlGrammar.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapControlGrammar.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapControlGrammar.java Thu Aug 31 03:33:43 2006
@@ -181,6 +181,8 @@
                     if ( tlv.getLength().getLength() == 0 )
                     {
                         log.error( "The OID must not be null" );
+                        
+                        // This will generate a PROTOCOL_ERROR
                         throw new DecoderException( "The OID must not be null" );
                     }
                     else
@@ -195,6 +197,7 @@
                             log.error( "The control type " + StringTools.dumpBytes( tlv.getValue().getData() )
                                 + " is not a valid OID : " + de.getMessage() );
 
+                            // This will generate a PROTOCOL_ERROR
                             throw de;
                         }
 
@@ -207,6 +210,7 @@
                             log.error( "The control type " + StringTools.dumpBytes( tlv.getValue().getData() )
                                 + " is invalid : " + lsee.getMessage() );
 
+                            // This will generate a PROTOCOL_ERROR
                             throw new DecoderException( lsee.getMessage() );
                         }
                     }
@@ -267,6 +271,7 @@
                         log.error( "The control criticality flag " + StringTools.dumpBytes( value.getData() )
                             + " is invalid : " + bde.getMessage() + ". It should be 0 or 255" );
 
+                        // This will generate a PROTOCOL_ERROR
                         throw new DecoderException( bde.getMessage() );
                     }
 

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapMessageGrammar.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapMessageGrammar.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapMessageGrammar.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapMessageGrammar.java Thu Aug 31 03:33:43 2006
@@ -99,6 +99,7 @@
                     if ( tlv.getLength().getLength() == 0 )
                     {
                         log.error( "The LdapMessage has a zero length. This is not allowed" );
+                        // This will generate a PROTOCOL_ERROR
                         throw new DecoderException( "The LdapMessage should not be empty" );
                     }
 
@@ -142,6 +143,8 @@
                     if ( tlv.getLength().getLength() == 0 )
                     {
                         log.error( "The messageId has a zero length. This is not allowed" );
+                        
+                        // This will generate a PROTOCOL_ERROR
                         throw new DecoderException( "The messageId should not be null" );
                     }
 
@@ -163,6 +166,7 @@
                         log.error( "The Message Id " + StringTools.dumpBytes( value.getData() ) + " is invalid : "
                             + ide.getMessage() + ". The message ID must be between (0 .. 2 147 483 647)" );
 
+                        // This will generate a PROTOCOL_ERROR                        
                         throw new DecoderException( ide.getMessage() );
                     }
 

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/ResponseCarryingException.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/ResponseCarryingException.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/ResponseCarryingException.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/ResponseCarryingException.java Thu Aug 31 03:33:43 2006
@@ -22,6 +22,9 @@
 
 import org.apache.directory.shared.asn1.codec.DecoderException;
 import org.apache.directory.shared.ldap.message.Message;
+import org.apache.directory.shared.ldap.message.ResultCodeEnum;
+import org.apache.directory.shared.ldap.message.ResultResponse;
+import org.apache.directory.shared.ldap.name.LdapDN;
 
 
 /**
@@ -63,9 +66,15 @@
      * @param cause
      *            The Exception which caused the error
      */
-    public ResponseCarryingException(String message, Throwable cause)
+    public ResponseCarryingException(String message, ResultResponse response, ResultCodeEnum code, LdapDN matchedDn, Throwable cause)
     {
         super( message, cause );
+
+        response.getLdapResult().setErrorMessage( message );
+        response.getLdapResult().setResultCode( code );
+        response.getLdapResult().setMatchedDn( matchedDn );
+    
+        this.response = response; 
     }
     
     /**

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/abandon/AbandonRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/abandon/AbandonRequestGrammar.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/abandon/AbandonRequestGrammar.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/abandon/AbandonRequestGrammar.java Thu Aug 31 03:33:43 2006
@@ -113,6 +113,8 @@
                     {
                         String msg = "The AbandonRequest messageId must not be null";
                         log.error( msg );
+
+                        // This will generate a PROTOCOL_ERROR
                         throw new DecoderException( msg );
                     }
 
@@ -143,6 +145,7 @@
                                 "The Abandonned Message Id {} is invalid : {}. The message ID must be between (0 .. 2 147 483 647)",
                                 StringTools.dumpBytes( value.getData() ), ide.getMessage() );
 
+                        // This will generate a PROTOCOL_ERROR
                         throw new DecoderException( ide.getMessage() );
                     }
                 }

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/add/AddRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/add/AddRequestGrammar.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/add/AddRequestGrammar.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/add/AddRequestGrammar.java Thu Aug 31 03:33:43 2006
@@ -112,6 +112,8 @@
                     {
                         String msg = "The AddRequest must not be null";
                         log.error( msg );
+                        
+                        // Will generate a PROTOCOL_ERROR
                         throw new DecoderException( msg );
                     }
 
@@ -148,7 +150,14 @@
                     // Store the entry. It can't be null
                     if ( tlv.getLength().getLength() == 0 )
                     {
-                        throw new DecoderException( "The DN can't be null" );
+                        String msg = "Empty entry DN given";
+                        log.error( msg );
+                
+                        AddResponseImpl response = new AddResponseImpl( ldapMessage.getMessageId() );
+                
+                        // I guess that trying to add an entry which DN is empty is a naming violation...
+                        // Not 100% sure though ...
+                        throw new ResponseCarryingException( msg, response, ResultCodeEnum.NAMINGVIOLATION, LdapDN.EMPTY_LDAPDN, null );
                     }
                     else
                     {
@@ -166,16 +175,8 @@
                                 ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
                 
-                            AddResponseImpl message = new AddResponseImpl( ldapMessage.getMessageId() );
-                            message.getLdapResult().setErrorMessage( msg );
-                            message.getLdapResult().setResultCode( ResultCodeEnum.INVALIDDNSYNTAX );
-                            message.getLdapResult().setMatchedDn( LdapDN.EMPTY_LDAPDN );
-                
-                            ResponseCarryingException exception = new ResponseCarryingException( msg, ine );
-                
-                            exception.setResponse( message );
-                
-                            throw exception;
+                            AddResponseImpl response = new AddResponseImpl( ldapMessage.getMessageId() );
+                            throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALIDDNSYNTAX, LdapDN.EMPTY_LDAPDN, ine );
                         }
 
                         addRequest.setEntry( entry );
@@ -261,8 +262,12 @@
 
                     if ( tlv.getLength().getLength() == 0 )
                     {
-                        log.error( "Null types are not allowed" );
-                        throw new DecoderException( "The type can't be null" );
+                        String msg = "Null or empty types are not allowed"; 
+                        log.error( msg );
+
+                        AddResponseImpl response = new AddResponseImpl( ldapMessage.getMessageId() );
+                        
+                        throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALIDATTRIBUTESYNTAX, addRequest.getEntry(), null );
                     }
                     else
                     {

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/bind/BindRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/bind/BindRequestGrammar.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/bind/BindRequestGrammar.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/bind/BindRequestGrammar.java Thu Aug 31 03:33:43 2006
@@ -130,6 +130,8 @@
                     {
                         String msg = "The BindRequest must not be null";
                         log.error( msg );
+                     
+                        // This will generate a PROTOCOL_ERROR
                         throw new DecoderException( msg );
                     }
 
@@ -165,13 +167,6 @@
                     {
                         int version = IntegerDecoder.parse( value, 1, 127 );
 
-                        // will handle this in higher layers: bind handler
-//                        if ( version != 3 )
-//                        {
-//                            log.error( "The version {} is invalid : it must be 3", new Integer( version ) );
-//                            throw new DecoderException( "Ldap Version " + version + " is not supported" );
-//                        }
-
                         if ( IS_DEBUG )
                         {
                             log.debug( "Ldap version ", new Integer( version ) );
@@ -184,6 +179,7 @@
                         log.error( "The version {} is invalid : {}. The version must be between (0 .. 127)",
                             StringTools.dumpBytes( value.getData() ), ide.getMessage() );
 
+                        // This will generate a PROTOCOL_ERROR
                         throw new DecoderException( ide.getMessage() );
                     }
 
@@ -235,16 +231,9 @@
                                 + ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
                         
-                            BindResponseImpl message = new BindResponseImpl( ldapMessage.getMessageId() );
-                            message.getLdapResult().setErrorMessage( msg );
-                            message.getLdapResult().setResultCode( ResultCodeEnum.INVALIDDNSYNTAX );
-                            message.getLdapResult().setMatchedDn( LdapDN.EMPTY_LDAPDN );
-                        
-                            ResponseCarryingException exception = new ResponseCarryingException( msg, ine );
-                        
-                            exception.setResponse( message );
+                            BindResponseImpl response = new BindResponseImpl( ldapMessage.getMessageId() );
                         
-                            throw exception;
+                            throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALIDDNSYNTAX, LdapDN.EMPTY_LDAPDN, ine );
                         }
 
                         bindRequestMessage.setName( name );
@@ -360,7 +349,8 @@
                 {
 
                     LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
-                    BindRequest bindRequestMessage = ldapMessageContainer.getLdapMessage().getBindRequest();
+                    LdapMessage ldapMessage = ldapMessageContainer.getLdapMessage();
+                    BindRequest bindRequestMessage = ldapMessage.getBindRequest();
                     TLV tlv = ldapMessageContainer.getCurrentTLV();
 
                     // We will check that the sasl is not null
@@ -368,7 +358,11 @@
                     {
                         String msg = "The SaslCredential must not be null";
                         log.error( msg );
-                        throw new DecoderException( msg );
+                        
+                        BindResponseImpl response = new BindResponseImpl( ldapMessage.getMessageId() );
+                    
+                        throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALIDCREDENTIALS, 
+                            bindRequestMessage.getName(), null );
                     }
 
                     // Create the SaslCredentials Object
@@ -415,7 +409,8 @@
                 {
 
                     LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
-                    BindRequest bindRequestMessage = ldapMessageContainer.getLdapMessage().getBindRequest();
+                    LdapMessage ldapMessage = ldapMessageContainer.getLdapMessage();
+                    BindRequest bindRequestMessage = ldapMessage.getBindRequest();
                     TLV tlv = ldapMessageContainer.getCurrentTLV();
 
                     // Get the SaslCredentials Object
@@ -435,9 +430,12 @@
                         }
                         catch ( LdapStringEncodingException lsee )
                         {
-                            log.error( "Invalid mechanism : {} : {}",
-                                StringTools.dumpBytes( tlv.getValue().getData() ), lsee.getMessage() );
-                            throw new DecoderException( lsee.getMessage() );
+                            String msg = "Invalid mechanism : " + StringTools.dumpBytes( tlv.getValue().getData() );
+                            log.error( "{} : {}", msg, lsee.getMessage() );
+                            BindResponseImpl response = new BindResponseImpl( ldapMessage.getMessageId() );
+                            
+                            throw new ResponseCarryingException( msg, response, ResultCodeEnum.INAPPROPRIATEAUTHENTICATION, 
+                                bindRequestMessage.getName(), lsee );
                         }
                     }
 

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/compare/CompareRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/compare/CompareRequestGrammar.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/compare/CompareRequestGrammar.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/compare/CompareRequestGrammar.java Thu Aug 31 03:33:43 2006
@@ -21,6 +21,7 @@
 
 
 import javax.naming.InvalidNameException;
+import javax.naming.NamingException;
 
 import org.apache.directory.shared.asn1.ber.IAsn1Container;
 import org.apache.directory.shared.asn1.ber.grammar.AbstractGrammar;
@@ -37,6 +38,7 @@
 import org.apache.directory.shared.ldap.codec.ResponseCarryingException;
 import org.apache.directory.shared.ldap.codec.util.LdapString;
 import org.apache.directory.shared.ldap.codec.util.LdapStringEncodingException;
+import org.apache.directory.shared.ldap.exception.LdapInvalidAttributeIdentifierException;
 import org.apache.directory.shared.ldap.message.CompareResponseImpl;
 import org.apache.directory.shared.ldap.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.name.LdapDN;
@@ -139,6 +141,7 @@
                     // DN
                     if ( tlv.getLength().getLength() == 0 )
                     {
+                        // This will generate a PROTOCOL_ERROR
                         throw new DecoderException( "The entry must not be null" );
                     }
                     else
@@ -156,16 +159,8 @@
                                 ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
             
-                            CompareResponseImpl message = new CompareResponseImpl( ldapMessage.getMessageId() );
-                            message.getLdapResult().setErrorMessage( msg );
-                            message.getLdapResult().setResultCode( ResultCodeEnum.INVALIDDNSYNTAX );
-                            message.getLdapResult().setMatchedDn( LdapDN.EMPTY_LDAPDN );
-            
-                            ResponseCarryingException exception = new ResponseCarryingException( msg, ine );
-            
-                            exception.setResponse( message );
-            
-                            throw exception;
+                            CompareResponseImpl response = new CompareResponseImpl( ldapMessage.getMessageId() );
+                            throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALIDDNSYNTAX, LdapDN.EMPTY_LDAPDN, ine );
                         }
 
                         compareRequest.setEntry( entry );
@@ -210,7 +205,7 @@
             LdapStatesEnum.COMPARE_REQUEST_ATTRIBUTE_DESC_VALUE, LdapStatesEnum.COMPARE_REQUEST_ASSERTION_VALUE_TAG,
             new GrammarAction( "Store attribute desc" )
             {
-                public void action( IAsn1Container container ) throws DecoderException
+                public void action( IAsn1Container container ) throws DecoderException, NamingException
                 {
 
                     LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
@@ -226,7 +221,11 @@
                     // DN
                     if ( tlv.getLength().getLength() == 0 )
                     {
-                        throw new DecoderException( "The attribute description must not be null" );
+                        String msg = "The attribute description must not be null";
+                        log.error( msg );
+                        CompareResponseImpl response = new CompareResponseImpl( ldapMessage.getMessageId() );
+                        
+                        throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALIDATTRIBUTESYNTAX, compareRequest.getEntry(), null );
                     }
                     else
                     {
@@ -239,9 +238,7 @@
                         {
                             log.error( "The attribute description ({}) is invalid.", StringTools.dumpBytes( tlv
                                 .getValue().getData() ) );
-                            throw new DecoderException( "Invalid attribute description "
-                                + StringTools.dumpBytes( tlv.getValue().getData() ) + ", : " + lsee.getMessage() );
-
+                            throw new LdapInvalidAttributeIdentifierException( "Invalid attribute type : " + lsee.getMessage() );
                         }
                     }
 

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/del/DelRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/del/DelRequestGrammar.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/del/DelRequestGrammar.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/del/DelRequestGrammar.java Thu Aug 31 03:33:43 2006
@@ -110,6 +110,7 @@
 
                     if ( tlv.getLength().getLength() == 0 )
                     {
+                        // This will generate a PROTOCOL_ERROR
                         throw new DecoderException( "The entry must not be null" );
                     }
                     else
@@ -127,16 +128,8 @@
                                 + ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
                             
-                            DeleteResponseImpl message = new DeleteResponseImpl( ldapMessage.getMessageId() );
-                            message.getLdapResult().setErrorMessage( msg );
-                            message.getLdapResult().setResultCode( ResultCodeEnum.INVALIDDNSYNTAX );
-                            message.getLdapResult().setMatchedDn( LdapDN.EMPTY_LDAPDN );
-                            
-                            ResponseCarryingException exception = new ResponseCarryingException( msg, ine );
-                            
-                            exception.setResponse( message );
-                            
-                            throw exception;
+                            DeleteResponseImpl response = new DeleteResponseImpl( ldapMessage.getMessageId() );
+                            throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALIDDNSYNTAX, LdapDN.EMPTY_LDAPDN, ine );
                         }
 
                         delRequest.setEntry( entry );

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/extended/ExtendedRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/extended/ExtendedRequestGrammar.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/extended/ExtendedRequestGrammar.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/extended/ExtendedRequestGrammar.java Thu Aug 31 03:33:43 2006
@@ -131,12 +131,28 @@
                     if ( tlv.getLength().getLength() == 0 )
                     {
                         log.error( "The name must not be null" );
+                        // This will generate a PROTOCOL_ERROR                        
                         throw new DecoderException( "The name must not be null" );
                     }
                     else
                     {
-                        extendedRequest
-                            .setRequestName( new OID( StringTools.utf8ToString( tlv.getValue().getData() ) ) );
+                        byte[] requestNameBytes = tlv.getValue().getData();
+                        
+                        try
+                        {
+                            OID oid = new OID( StringTools.utf8ToString( requestNameBytes ) );
+                            extendedRequest.setRequestName( oid );
+                        }
+                        catch ( DecoderException de )
+                        {
+                            String msg = "The Request name is not a valid OID : " + StringTools.utf8ToString( requestNameBytes ) + 
+                            " (" + StringTools.dumpBytes( requestNameBytes )
+                            + ") is invalid";
+                            log.error( "{} : {}", msg, de.getMessage() );
+
+                            // Rethrow the exception, we will get a PROTOCOL_ERROR
+                            throw de;
+                        }
                     }
 
                     // We can have an END transition

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequestGrammar.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequestGrammar.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequestGrammar.java Thu Aug 31 03:33:43 2006
@@ -159,16 +159,8 @@
                                 ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
                     
-                            ModifyResponseImpl message = new ModifyResponseImpl( ldapMessage.getMessageId() );
-                            message.getLdapResult().setErrorMessage( msg );
-                            message.getLdapResult().setResultCode( ResultCodeEnum.INVALIDDNSYNTAX );
-                            message.getLdapResult().setMatchedDn( LdapDN.EMPTY_LDAPDN );
-                    
-                            ResponseCarryingException exception = new ResponseCarryingException( msg, ine );
-                    
-                            exception.setResponse( message );
-                    
-                            throw exception;
+                            ModifyResponseImpl response = new ModifyResponseImpl( ldapMessage.getMessageId() );
+                            throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALIDDNSYNTAX, LdapDN.EMPTY_LDAPDN, ine );
                         }
 
                         modifyRequest.setObject( object );
@@ -283,6 +275,8 @@
                         String msg = "Invalid operation ( " + StringTools.dumpBytes( tlv.getValue().getData() )
                             + "), it should be 0, 1 or 2";
                         log.error( msg );
+                        
+                        // This will generate a PROTOCOL_ERROR
                         throw new DecoderException( msg );
                     }
 
@@ -355,7 +349,11 @@
 
                     if ( tlv.getLength().getLength() == 0 )
                     {
-                        throw new DecoderException( "The type can't be null" );
+                        String msg = "The type can't be null";
+                        log.error( msg );
+                        
+                        ModifyResponseImpl response = new ModifyResponseImpl( ldapMessage.getMessageId() );
+                        throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALIDATTRIBUTESYNTAX, modifyRequest.getObject(), null );
                     }
                     else
                     {
@@ -366,8 +364,11 @@
                         }
                         catch ( LdapStringEncodingException lsee )
                         {
-                            log.error( "Invalid type : {}", StringTools.dumpBytes( tlv.getValue().getData() ) );
-                            throw new DecoderException( "Invalid type : " + lsee.getMessage() );
+                            String msg = "Invalid type : " + StringTools.dumpBytes( tlv.getValue().getData() );
+                            log.error( msg );
+
+                            ModifyResponseImpl response = new ModifyResponseImpl( ldapMessage.getMessageId() );
+                            throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALIDATTRIBUTESYNTAX, modifyRequest.getObject(), lsee );
                         }
                     }
 
@@ -461,8 +462,7 @@
                     TLV tlv = ldapMessageContainer.getCurrentTLV();
 
                     // Store the value. It can't be null
-                    Object value = new byte[]
-                        {};
+                    Object value = StringTools.EMPTY_BYTES;
 
                     if ( tlv.getLength().getLength() == 0 )
                     {

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modifyDn/ModifyDNRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modifyDn/ModifyDNRequestGrammar.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modifyDn/ModifyDNRequestGrammar.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modifyDn/ModifyDNRequestGrammar.java Thu Aug 31 03:33:43 2006
@@ -143,6 +143,7 @@
 
                     if ( tlv.getLength().getLength() == 0 )
                     {
+                        // This will generate a PROTOCOL_ERROR
                         throw new DecoderException( "The entry must nut be null" );
                     }
                     else
@@ -160,16 +161,8 @@
                                 ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
         
-                            ModifyDnResponseImpl message = new ModifyDnResponseImpl( ldapMessage.getMessageId() );
-                            message.getLdapResult().setErrorMessage( msg );
-                            message.getLdapResult().setResultCode( ResultCodeEnum.INVALIDDNSYNTAX );
-                            message.getLdapResult().setMatchedDn( LdapDN.EMPTY_LDAPDN );
-        
-                            ResponseCarryingException exception = new ResponseCarryingException( msg, ine );
-        
-                            exception.setResponse( message );
-        
-                            throw exception;
+                            ModifyDnResponseImpl response = new ModifyDnResponseImpl( ldapMessage.getMessageId() );
+                            throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALIDDNSYNTAX, LdapDN.EMPTY_LDAPDN, ine );
                         }
 
                         modifyDNRequest.setEntry( entry );
@@ -221,7 +214,11 @@
 
                     if ( tlv.getLength().getLength() == 0 )
                     {
-                        throw new DecoderException( "The newrdn must nut be null" );
+                        String msg = "The newrdn must not be null";
+                        log.error(  msg  );
+                        
+                        ModifyDnResponseImpl response = new ModifyDnResponseImpl( ldapMessage.getMessageId() );
+                        throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALIDDNSYNTAX, modifyDNRequest.getEntry(), null );
                     }
                     else
                     {
@@ -239,16 +236,8 @@
                                 ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
     
-                            ModifyDnResponseImpl message = new ModifyDnResponseImpl( ldapMessage.getMessageId() );
-                            message.getLdapResult().setErrorMessage( msg );
-                            message.getLdapResult().setResultCode( ResultCodeEnum.INVALIDDNSYNTAX );
-                            message.getLdapResult().setMatchedDn( LdapDN.EMPTY_LDAPDN );
-    
-                            ResponseCarryingException exception = new ResponseCarryingException( msg, ine );
-    
-                            exception.setResponse( message );
-    
-                            throw exception;
+                            ModifyDnResponseImpl response = new ModifyDnResponseImpl( ldapMessage.getMessageId() );
+                            throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALIDDNSYNTAX, modifyDNRequest.getEntry(), ine );
                         }
 
                         modifyDNRequest.setNewRDN( newRdn );
@@ -307,6 +296,7 @@
                         log.error( "The oldRDN flag {} is invalid : {}. It should be 0 or 255", StringTools
                             .dumpBytes( value.getData() ), bde.getMessage() );
 
+                        // This will generate a PROTOCOL_ERROR                        
                         throw new DecoderException( bde.getMessage() );
                     }
 
@@ -369,6 +359,7 @@
 
                         if ( modifyDNRequest.isDeleteOldRDN() )
                         {
+                            // This will generate a PROTOCOL_ERROR
                             throw new DecoderException(
                                 "The new superior must nut be null if the flag 'delete old DN' is set to true" );
                         }
@@ -394,16 +385,8 @@
                                 ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
     
-                            ModifyDnResponseImpl message = new ModifyDnResponseImpl( ldapMessage.getMessageId() );
-                            message.getLdapResult().setErrorMessage( msg );
-                            message.getLdapResult().setResultCode( ResultCodeEnum.INVALIDDNSYNTAX );
-                            message.getLdapResult().setMatchedDn( LdapDN.EMPTY_LDAPDN );
-    
-                            ResponseCarryingException exception = new ResponseCarryingException( msg, ine );
-    
-                            exception.setResponse( message );
-    
-                            throw exception;
+                            ModifyDnResponseImpl response = new ModifyDnResponseImpl( ldapMessage.getMessageId() );
+                            throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALIDDNSYNTAX, modifyDNRequest.getEntry(), ine );
                         }
 
                         modifyDNRequest.setNewSuperior( newSuperior );

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/FilterGrammar.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/FilterGrammar.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/FilterGrammar.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/FilterGrammar.java Thu Aug 31 03:33:43 2006
@@ -415,21 +415,29 @@
 
                     AttributeValueAssertion assertion = new AttributeValueAssertion();
 
-                    try
+                    if ( tlv.getLength().getLength() == 0 )
                     {
-                        LdapString type = new LdapString( tlv.getValue().getData() );
-                        assertion.setAttributeDesc( type );
+                        log.error( "The attribute description is empty " );
+                        throw new DecoderException( "The type can't be null" );
                     }
-                    catch ( LdapStringEncodingException lsee )
+                    else
                     {
-                        String msg = StringTools.dumpBytes( tlv.getValue().getData() );
-                        log.error( "The assertion description ({}) is invalid", msg );
-                        throw new DecoderException( "Invalid assertion description " + msg + ", : " + lsee.getMessage() );
-                    }
+                        try
+                        {
+                            LdapString type = new LdapString( tlv.getValue().getData() );
+                            assertion.setAttributeDesc( type );
+                        }
+                        catch ( LdapStringEncodingException lsee )
+                        {
+                            String msg = StringTools.dumpBytes( tlv.getValue().getData() );
+                            log.error( "The assertion value ({}) is invalid", msg );
+                            throw new DecoderException( "Invalid assertion value " + msg + ", : " + lsee.getMessage() );
+                        }
 
-                    AttributeValueAssertionFilter comparisonFilter = ( AttributeValueAssertionFilter ) searchRequest
-                        .getTerminalFilter();
-                    comparisonFilter.setAssertion( assertion );
+                        AttributeValueAssertionFilter terminalFilter = ( AttributeValueAssertionFilter ) searchRequest
+                            .getTerminalFilter();
+                        terminalFilter.setAssertion( assertion );
+                    }
                 }
             } );
 
@@ -485,52 +493,6 @@
                     searchRequest.unstackFilters( container );
 
                     container.grammarPopAllowed( true );
-                }
-            } );
-
-        // AttributeValueAssertion ::= SEQUENCE {
-        //    attributeDesc   AttributeDescription, (VALUE)
-        //     ...
-        // We have to set the attribute description in the current filter.
-        // It could be an equalityMatch, greaterOrEqual, lessOrEqual or an
-        // approxMatch filter.
-        super.transitions[LdapStatesEnum.FILTER_ATTRIBUTE_DESC_VALUE][UniversalTag.OCTET_STRING_TAG] = new GrammarTransition(
-            LdapStatesEnum.FILTER_ATTRIBUTE_DESC_VALUE, LdapStatesEnum.FILTER_ASSERTION_VALUE_TAG, new GrammarAction(
-                "Init attributeDesc Value" )
-            {
-                public void action( IAsn1Container container ) throws DecoderException
-                {
-                    LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
-                    LdapMessage ldapMessage = ldapMessageContainer.getLdapMessage();
-                    SearchRequest searchRequest = ldapMessage.getSearchRequest();
-
-                    TLV tlv = ldapMessageContainer.getCurrentTLV();
-
-                    AttributeValueAssertion assertion = new AttributeValueAssertion();
-
-                    if ( tlv.getLength().getLength() == 0 )
-                    {
-                        log.error( "The attribute description is empty " );
-                        throw new DecoderException( "The type can't be null" );
-                    }
-                    else
-                    {
-                        try
-                        {
-                            LdapString type = new LdapString( tlv.getValue().getData() );
-                            assertion.setAttributeDesc( type );
-                        }
-                        catch ( LdapStringEncodingException lsee )
-                        {
-                            String msg = StringTools.dumpBytes( tlv.getValue().getData() );
-                            log.error( "The assertion value ({}) is invalid", msg );
-                            throw new DecoderException( "Invalid assertion value " + msg + ", : " + lsee.getMessage() );
-                        }
-
-                        AttributeValueAssertionFilter terminalFilter = ( AttributeValueAssertionFilter ) searchRequest
-                            .getTerminalFilter();
-                        terminalFilter.setAssertion( assertion );
-                    }
                 }
             } );
 

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/MatchingRuleAssertionGrammar.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/MatchingRuleAssertionGrammar.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/MatchingRuleAssertionGrammar.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/MatchingRuleAssertionGrammar.java Thu Aug 31 03:33:43 2006
@@ -105,23 +105,6 @@
                     // We can allocate the ExtensibleMatch Filter
                     Filter extensibleMatchFilter = new ExtensibleMatchFilter();
 
-                    // Get the parent, if any
-                    Filter currentFilter = searchRequest.getCurrentFilter();
-
-                    if ( currentFilter != null )
-                    {
-                        // Ok, we have a parent. The new Filter will be added to
-                        // this parent, then.
-                        ( ( ConnectorFilter ) currentFilter ).addFilter( extensibleMatchFilter );
-                        extensibleMatchFilter.setParent( currentFilter );
-                    }
-                    else
-                    {
-                        // No parent. This Filter will become the root.
-                        searchRequest.setFilter( extensibleMatchFilter );
-                        extensibleMatchFilter.setParent( searchRequest );
-                    }
-
                     searchRequest.addCurrentFilter( extensibleMatchFilter );
                     searchRequest.setTerminalFilter( extensibleMatchFilter );
                 }
@@ -159,6 +142,8 @@
                     if ( tlv.getLength().getLength() == 0 )
                     {
                         log.error( "The matching rule is empty" );
+                        
+                        // It will generate a PROTOCOL_ERROR
                         throw new DecoderException( "Invalid matching rule : it can't be empty" );
                     }
                     else
@@ -171,6 +156,8 @@
                         {
                             String msg = StringTools.dumpBytes( tlv.getValue().getData() );
                             log.error( "The matching rule ({}) is invalid", msg );
+
+                            // It will generate a PROTOCOL_ERROR
                             throw new DecoderException( "Invalid matching rule " + msg + ", : " + lsee.getMessage() );
                         }
                     }

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchRequest.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchRequest.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchRequest.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchRequest.java Thu Aug 31 03:33:43 2006
@@ -440,37 +440,6 @@
                 // We can stop the recursion, we have reached the searchResult Object
                 break;
             }
-            
-            /*
-            if ( filterParent instanceof Filter )
-            {
-                // The terminalfilter set has been completed
-                // we can get its parent and add the terminal to it
-                // but onlyu if it's not a connector filter
-                if ( ! (filter instanceof ConnectorFilter ) )
-                {
-                    addCurrentFilter( filter );
-                }
-                
-                // and update the current filter with the parent
-                Asn1Object parentFilter = currentFilter.getParent();
-                
-                if ( parentFilter instanceof Filter )
-                {
-                    searchRequest.setCurrentFilter( (Filter)parentFilter );
-                }
-                
-                parent = parent.getParent();
-                filter = currentFilter;
-            }
-            else
-            {
-                // We have reached the top level, we can stop
-                // the loop after having updated the currentFilter
-                //searchRequest.setCurrentFilter( filter );
-                break;
-            }
-            */
         }
     }
 

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchRequestGrammar.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchRequestGrammar.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchRequestGrammar.java Thu Aug 31 03:33:43 2006
@@ -162,16 +162,8 @@
                                 ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
                     
-                            SearchResponseDoneImpl message = new SearchResponseDoneImpl( ldapMessage.getMessageId() );
-                            message.getLdapResult().setErrorMessage( msg );
-                            message.getLdapResult().setResultCode( ResultCodeEnum.INVALIDDNSYNTAX );
-                            message.getLdapResult().setMatchedDn( LdapDN.EMPTY_LDAPDN );
-                    
-                            ResponseCarryingException exception = new ResponseCarryingException( msg, ine );
-                    
-                            exception.setResponse( message );
-                    
-                            throw exception;
+                            SearchResponseDoneImpl response = new SearchResponseDoneImpl( ldapMessage.getMessageId() );
+                            throw new ResponseCarryingException( msg, response, ResultCodeEnum.INVALIDDNSYNTAX, LdapDN.EMPTY_LDAPDN, ine );
                         }
                     }
 

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SubstringFilterGrammar.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SubstringFilterGrammar.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SubstringFilterGrammar.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SubstringFilterGrammar.java Thu Aug 31 03:33:43 2006
@@ -79,10 +79,8 @@
             LdapStatesEnum.SUBSTRINGS_FILTER_TAG, LdapStatesEnum.SUBSTRINGS_FILTER_VALUE, null );
 
         // Here we are dealing with substrings. LDAP grammar is not very
-        // explicit about
-        // what is allowed (-- at least one must be present !!!), while RFC 2254
-        // is
-        // really clear. But LDAP grammar is the one to follow...
+        // explicit about what is allowed (-- at least one must be present !!!), while RFC 2254
+        // is really clear. But LDAP grammar is the one to follow...
         //
         // substring ::= attr "=" [AttributeValue] any [AttributeValue]
         // any ::= "*" *(AttributeValue "*")
@@ -193,8 +191,7 @@
         // substrings SEQUENCE OF CHOICE { (Value)
         // ...
         // Here, we may have three possibilities. We may have an "initial"
-        // value,
-        // or an "any" value, or a "final" value. Any other option is an error.
+        // value, or an "any" value, or a "final" value. Any other option is an error.
         // We must have at least one of those three.
         super.transitions[LdapStatesEnum.SUBSTRINGS_FILTER_SUBSTRINGS_SEQ_VALUE][UniversalTag.SEQUENCE_TAG] = new GrammarTransition(
             LdapStatesEnum.SUBSTRINGS_FILTER_SUBSTRINGS_SEQ_VALUE,

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/controls/SubEntryControlGrammar.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/controls/SubEntryControlGrammar.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/controls/SubEntryControlGrammar.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/controls/SubEntryControlGrammar.java Thu Aug 31 03:33:43 2006
@@ -98,6 +98,7 @@
                         log.error( "The visibility flag {} is invalid : {}. It should be 0 or 255", StringTools
                             .dumpBytes( value.getData() ), bde.getMessage() );
 
+                        // This will generate a PROTOCOL_ERROR
                         throw new DecoderException( bde.getMessage() );
                     }
                 }

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/unbind/UnBindRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/unbind/UnBindRequestGrammar.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/unbind/UnBindRequestGrammar.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/unbind/UnBindRequestGrammar.java Thu Aug 31 03:33:43 2006
@@ -120,6 +120,8 @@
                     {
                         log.error( "The length of a UnBindRequest must be null, the actual value is {}", new Integer(
                             expectedLength ) );
+                        
+                        // This will generate a PROTOCOL_ERROR
                         throw new DecoderException( "The length of a UnBindRequest must be null" );
                     }
 

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/util/LdapString.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/util/LdapString.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/util/LdapString.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/util/LdapString.java Thu Aug 31 03:33:43 2006
@@ -22,6 +22,8 @@
 
 import java.io.UnsupportedEncodingException;
 
+import org.apache.directory.shared.ldap.util.StringTools;
+
 
 /**
  * Decodes a LdapString, and checks that the character set used comply the ISO
@@ -34,10 +36,6 @@
     /** A null LdapString */
     public transient static final LdapString EMPTY_STRING = new LdapString();
 
-    /** A null LdapString */
-    public transient static final byte[] EMPTY_BYTES = new byte[]
-        {};
-
     /** The inner String containing the LdapString */
     protected String string;
 
@@ -50,7 +48,7 @@
      */
     public LdapString()
     {
-        bytes = EMPTY_BYTES;
+        bytes = StringTools.EMPTY_BYTES;
         string = "";
     }
 

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/message/ManageDsaITControl.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/message/ManageDsaITControl.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/message/ManageDsaITControl.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/message/ManageDsaITControl.java Thu Aug 31 03:33:43 2006
@@ -19,6 +19,8 @@
  */
 package org.apache.directory.shared.ldap.message;
 
+import org.apache.directory.shared.ldap.util.StringTools;
+
 
 /**
  * Control which allows for the management of referrals and other DSA specific
@@ -64,15 +66,12 @@
 
     private static final long serialVersionUID = -8844249964346248321L;
 
-    private final static byte[] EMPTY_BYTES = new byte[0];
-
-
     /**
      * Returns an empty byte[] everytime.
      */
     public byte[] getEncodedValue()
     {
-        return EMPTY_BYTES;
+        return StringTools.EMPTY_BYTES;
     }
 
 
@@ -81,7 +80,7 @@
      */
     public byte[] getValue()
     {
-        return EMPTY_BYTES;
+        return StringTools.EMPTY_BYTES;
     }
 
 

Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/name/Rdn.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/name/Rdn.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/name/Rdn.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/name/Rdn.java Thu Aug 31 03:33:43 2006
@@ -33,7 +33,6 @@
 import javax.naming.directory.BasicAttributes;
 
 import org.apache.commons.collections.MultiHashMap;
-import org.apache.directory.shared.ldap.message.LockableAttributesImpl;
 import org.apache.directory.shared.ldap.util.StringTools;
 
 
@@ -858,20 +857,6 @@
        }
 
        return compareTo( ( Rdn ) rdn ) == EQUALS;
-   }
-
-
-   /**
-    * Returns the hash code of this RDN. Two RDNs that are equal (according to
-    * the equals method) will have the same hash code.
-    *
-    * @returnAn int representing the hash code of this Rdn
-    */
-   public int hashcode()
-   {
-       // We compute the hashcode using the string, which is a
-       // normalized form of a rdn. unescapeValue
-       return 37 * 17 + string.hashCode();
    }
 
 

Modified: directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/LdapMessageTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/LdapMessageTest.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/LdapMessageTest.java (original)
+++ directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/LdapMessageTest.java Thu Aug 31 03:33:43 2006
@@ -56,7 +56,8 @@
 
         ByteBuffer stream = ByteBuffer.allocate( 0x02 );
         stream.put( new byte[]
-            { 0x30, 0x00, // LDAPMessage ::=SEQUENCE {
+            { 
+            0x30, 0x00,                 // LDAPMessage ::=SEQUENCE {
             } );
 
         stream.flip();
@@ -94,8 +95,9 @@
 
         ByteBuffer stream = ByteBuffer.allocate( 0x04 );
         stream.put( new byte[]
-            { 0x30, 0x02, // LDAPMessage ::=SEQUENCE {
-                0x02, 0x00 // messageID MessageID
+            { 
+            0x30, 0x02,                 // LDAPMessage ::=SEQUENCE {
+              0x02, 0x00                // messageID MessageID
             } );
 
         stream.flip();
@@ -133,8 +135,9 @@
 
         ByteBuffer stream = ByteBuffer.allocate( 0x05 );
         stream.put( new byte[]
-            { 0x30, 0x03, // LDAPMessage ::=SEQUENCE {
-                0x02, 0x01, ( byte ) 0xff // messageID MessageID = -1
+            { 
+            0x30, 0x03,                 // LDAPMessage ::=SEQUENCE {
+              0x02, 0x01, ( byte ) 0xff // messageID MessageID = -1
             } );
 
         stream.flip();
@@ -163,7 +166,7 @@
 
 
     /**
-     * Test the decoding of null length messageId
+     * Test the decoding of messageId which value is -1
      */
     public void testDecodeMessageIdMaxInt()
     {
@@ -172,10 +175,10 @@
 
         ByteBuffer stream = ByteBuffer.allocate( 0x08 );
         stream.put( new byte[]
-            { 0x30, 0x06, // LDAPMessage ::=SEQUENCE {
-                0x02, 0x04, ( byte ) 0x7f, ( byte ) 0xff, ( byte ) 0xff, ( byte ) 0xff // messageID
-                                                                                        // MessageID
-                                                                                        // = -1
+            { 
+            0x30, 0x06,                 // LDAPMessage ::=SEQUENCE {
+                                        // messageID MessageID = -1
+              0x02, 0x04, ( byte ) 0x7f, ( byte ) 0xff, ( byte ) 0xff, ( byte ) 0xff
             } );
 
         stream.flip();
@@ -204,15 +207,16 @@
 
 
     /**
-     * Test the decoding of null length messageId
+     * Test the decoding of a message with a wrong protocol operation
      */
     public void testDecodeWrongProtocolOpMaxInt()
     {
 
         byte[] buffer = new byte[]
-            { 0x30, 0x05, // LDAPMessage ::=SEQUENCE {
-                0x02, 0x01, 0x01, // messageID MessageID = 1
-                0x42, 0x00 // ProtocolOp
+            { 
+            0x30, 0x05,                 // LDAPMessage ::=SEQUENCE {
+              0x02, 0x01, 0x01,         // messageID MessageID = 1
+              0x42, 0x00                // ProtocolOp
             };
 
         Asn1Decoder ldapDecoder = new LdapDecoder();
@@ -299,10 +303,11 @@
 
         ByteBuffer stream = ByteBuffer.allocate( 0x08 );
         stream.put( new byte[]
-            { 0x30, 0x06, // LDAPMessage ::=SEQUENCE {
-                0x02, 0x02, 0x01, ( byte ) 0xF4, // messageID MessageID (500)
-                0x42, 0x00, // CHOICE { ..., unbindRequest UnbindRequest,...
-            // UnbindRequest ::= [APPLICATION 2] NULL
+            { 
+            0x30, 0x06,                         // LDAPMessage ::=SEQUENCE {
+              0x02, 0x02, 0x01, ( byte ) 0xF4,  // messageID MessageID (500)
+              0x42, 0x00,                       // CHOICE { ..., unbindRequest UnbindRequest,...
+                                                // UnbindRequest ::= [APPLICATION 2] NULL
             } );
 
         String decodedPdu = StringTools.dumpBytes( stream.array() );

Modified: directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/abandon/AbandonRequestTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/abandon/AbandonRequestTest.java?rev=438859&r1=438858&r2=438859&view=diff
==============================================================================
--- directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/abandon/AbandonRequestTest.java (original)
+++ directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/codec/abandon/AbandonRequestTest.java Thu Aug 31 03:33:43 2006
@@ -55,37 +55,35 @@
 
         ByteBuffer stream = ByteBuffer.allocate( 0x64 );
         stream.put( new byte[]
-            { 0x30, 0x62, // LDAPMessage ::=SEQUENCE {
-                0x02, 0x01, 0x03, // messageID MessageID
-                0x50, 0x01, 0x02, // CHOICE { ..., abandonRequest
-                                    // AbandonRequest,...
-                ( byte ) 0xA0, 0x5A, // controls [0] Controls OPTIONAL }
-                0x30, 0x1A, // Control ::= SEQUENCE {
-                // controlType LDAPOID,
-                0x04, 0x0D, '1', '.', '3', '.', '6', '.', '1', '.', '5', '.', '5', '.', '1', 0x01, 0x01, ( byte ) 0xFF, // criticality
-                                                                                                                        // BOOLEAN
-                                                                                                                        // DEFAULT
-                                                                                                                        // FALSE,
-                // controlValue OCTET STRING OPTIONAL }
-                0x04, 0x06, 'a', 'b', 'c', 'd', 'e', 'f', 0x30, 0x17, // Control
-                                                                        // ::=
-                                                                        // SEQUENCE
-                                                                        // {
-                // controlType LDAPOID,
-                0x04, 0x0D, '1', '.', '3', '.', '6', '.', '1', '.', '5', '.', '5', '.', '2',
-                // controlValue OCTET STRING OPTIONAL }
-                0x04, 0x06, 'g', 'h', 'i', 'j', 'k', 'l', 0x30, 0x12, // Control
-                                                                        // ::=
-                                                                        // SEQUENCE
-                                                                        // {
-                // controlType LDAPOID,
-                0x04, 0x0D, '1', '.', '3', '.', '6', '.', '1', '.', '5', '.', '5', '.', '3', 0x01, 0x01, ( byte ) 0xFF, // criticality
-                                                                                                                        // BOOLEAN
-                                                                                                                        // DEFAULT
-                                                                                                                        // FALSE}
-                0x30, 0x0F, // Control ::= SEQUENCE {
-                // controlType LDAPOID}
-                0x04, 0x0D, '1', '.', '3', '.', '6', '.', '1', '.', '5', '.', '5', '.', '4' } );
+            { 
+            0x30, 0x62,                 // LDAPMessage ::=SEQUENCE {
+              0x02, 0x01, 0x03,         // messageID MessageID
+              0x50, 0x01, 0x02,         // CHOICE { ..., abandonRequest
+                                        // AbandonRequest,...
+                ( byte ) 0xA0, 0x5A,    // controls [0] Controls OPTIONAL }
+                  0x30, 0x1A,           // Control ::= SEQUENCE {
+                                        // controlType LDAPOID,
+                    0x04, 0x0D, 
+                      '1', '.', '3', '.', '6', '.', '1', '.', '5', '.', '5', '.', '1',
+                                        // criticality BOOLEAN DEFAULT FALSE,
+                    0x01, 0x01, ( byte ) 0xFF, 
+                                        // controlValue OCTET STRING OPTIONAL }
+                    0x04, 0x06, 'a', 'b', 'c', 'd', 'e', 'f', 
+                    0x30, 0x17,         // Control ::= SEQUENCE {
+                                        // controlType LDAPOID,
+                    0x04, 0x0D, '1', '.', '3', '.', '6', '.', '1', '.', '5', '.', '5', '.', '2',
+                                        // controlValue OCTET STRING OPTIONAL }
+                    0x04, 0x06, 'g', 'h', 'i', 'j', 'k', 'l', 
+                  0x30, 0x12,           // Control ::= SEQUENCE {
+                                        // controlType LDAPOID,
+                    0x04, 0x0D, 
+                      '1', '.', '3', '.', '6', '.', '1', '.', '5', '.', '5', '.', '3',
+                                        // criticality BOOLEAN DEFAULT FALSE }
+                    0x01, 0x01, ( byte ) 0xFF, 
+                  0x30, 0x0F,           // Control ::= SEQUENCE {
+                                        // controlType LDAPOID}
+                    0x04, 0x0D, '1', '.', '3', '.', '6', '.', '1', '.', '5', '.', '5', '.', '4' 
+            } );
 
         String decodedPdu = StringTools.dumpBytes( stream.array() );
         stream.flip();
@@ -170,11 +168,13 @@
 
         ByteBuffer stream = ByteBuffer.allocate( 0x0A );
         stream.put( new byte[]
-            { 0x30, 0x08, // LDAPMessage ::=SEQUENCE {
-                0x02, 0x03, 0x00, ( byte ) 0x80, 0x13, // messageID MessageID
-                0x50, 0x01, 0x02 // CHOICE { ..., abandonRequest
-                                    // AbandonRequest,...
-            // AbandonRequest ::= [APPLICATION 16] MessageID
+            { 
+            0x30, 0x08,                 // LDAPMessage ::=SEQUENCE {
+                                        // messageID MessageID
+              0x02, 0x03, 0x00, ( byte ) 0x80, 0x13, 
+              0x50, 0x01, 0x02          // CHOICE { ..., abandonRequest
+                                        // AbandonRequest,...
+                                        // AbandonRequest ::= [APPLICATION 16] MessageID
             } );
 
         String decodedPdu = StringTools.dumpBytes( stream.array() );
@@ -227,7 +227,7 @@
 
 
     /**
-     * Test the decoding of a AbandonRequest with no controls
+     * Test the decoding of a AbandonRequest with a null messageId
      */
     public void testDecodeAbandonRequestNoMessageId()
     {
@@ -235,10 +235,51 @@
 
         ByteBuffer stream = ByteBuffer.allocate( 0x0A );
         stream.put( new byte[]
-            { 0x30, 0x08, // LDAPMessage ::=SEQUENCE {
-                0x02, 0x01, 0x01, // messageID MessageID
-                0x50, 0x00 // CHOICE { ..., abandonRequest AbandonRequest,...
-            // AbandonRequest ::= [APPLICATION 16] MessageID
+            { 
+            0x30, 0x08,                 // LDAPMessage ::=SEQUENCE {
+              0x02, 0x01, 0x01,         // messageID MessageID
+              0x50, 0x00                // CHOICE { ..., abandonRequest AbandonRequest,...
+                                        // AbandonRequest ::= [APPLICATION 16] MessageID
+            } );
+
+        stream.flip();
+
+        // Allocate a LdapMessageContainer Container
+        IAsn1Container ldapMessageContainer = new LdapMessageContainer();
+
+        // Decode the PDU
+        try
+        {
+            ldapDecoder.decode( stream, ldapMessageContainer );
+        }
+        catch ( DecoderException de )
+        {
+            assertTrue( true );
+            return;
+        }
+        catch ( NamingException ne )
+        {
+            ne.printStackTrace();
+            fail( ne.getMessage() );
+        }
+
+        fail( "We should not reach this point" );
+    }
+
+    /**
+     * Test the decoding of a AbandonRequest with a bad Message Id
+     */
+    public void testDecodeAbandonRequestBadMessageId()
+    {
+        Asn1Decoder ldapDecoder = new LdapDecoder();
+
+        ByteBuffer stream = ByteBuffer.allocate( 0x0B );
+        stream.put( new byte[]
+            { 
+            0x30, 0x09,                 // LDAPMessage ::=SEQUENCE {
+              0x02, 0x01, 0x01,         // messageID MessageID
+              0x50, 0x01, (byte)0xFF    // CHOICE { ..., abandonRequest AbandonRequest,...
+                                        // AbandonRequest ::= [APPLICATION 16] MessageID
             } );
 
         stream.flip();