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/25 18:39:50 UTC

svn commit: r436848 - in /directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec: ./ add/ bind/ compare/ del/ modify/ modifyDn/ search/

Author: elecharny
Date: Fri Aug 25 09:39:48 2006
New Revision: 436848

URL: http://svn.apache.org/viewvc?rev=436848&view=rev
Log:
Fixed the potentiol hang if a clien send an invalid DN. Now a 
correct Response is send, with an error in LdapResult. This will fix 
DIRSERVER-711, at least partially

Modified:
    directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapResultGrammar.java
    directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/add/AddRequestGrammar.java
    directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/bind/BindRequestGrammar.java
    directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/compare/CompareRequestGrammar.java
    directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/del/DelRequestGrammar.java
    directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequestGrammar.java
    directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modifyDn/ModifyDNRequestGrammar.java
    directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchRequestGrammar.java
    directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchResultEntryGrammar.java

Modified: directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapResultGrammar.java
URL: http://svn.apache.org/viewvc/directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapResultGrammar.java?rev=436848&r1=436847&r2=436848&view=diff
==============================================================================
--- directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapResultGrammar.java (original)
+++ directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapResultGrammar.java Fri Aug 25 09:39:48 2006
@@ -276,13 +276,20 @@
                             || ( ldapResult.getResultCode() == LdapResultEnum.INVALID_DN_SYNTAX )
                             || ( ldapResult.getResultCode() == LdapResultEnum.ALIAS_DEREFERENCING_PROBLEM ) )
                         {
+                            byte[] dnBytes = tlv.getValue().getData();
+                            
                             try
                             {
-                                ldapResult.setMatchedDN( new LdapDN( tlv.getValue().getData() ) );
+                                ldapResult.setMatchedDN( new LdapDN( dnBytes ) );
                             }
                             catch ( InvalidNameException ine )
                             {
-                                log.error( "Incorrect DN given : " + StringTools.dumpBytes( tlv.getValue().getData() ) );
+                                // This is for the client side. We will never decode LdapResult on the server
+                                String msg = "Incorrect DN given : " + StringTools.utf8ToString( dnBytes ) + 
+                                    " (" + StringTools.dumpBytes( dnBytes )
+                                    + ") is invalid";
+                                log.error( "{} : {}", msg, ine.getMessage() );
+                            
                                 throw new DecoderException( "Incorrect DN given : " + ine.getMessage() );
                             }
                         }

Modified: directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/add/AddRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/add/AddRequestGrammar.java?rev=436848&r1=436847&r2=436848&view=diff
==============================================================================
--- directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/add/AddRequestGrammar.java (original)
+++ directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/add/AddRequestGrammar.java Fri Aug 25 09:39:48 2006
@@ -35,9 +35,12 @@
 import org.apache.directory.shared.ldap.codec.LdapMessage;
 import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
 import org.apache.directory.shared.ldap.codec.LdapStatesEnum;
+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.AddResponseImpl;
+import org.apache.directory.shared.ldap.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.directory.shared.ldap.util.StringTools;
 import org.slf4j.Logger;
@@ -150,17 +153,29 @@
                     else
                     {
                         LdapDN entry = null;
+                        byte[] dnBytes = tlv.getValue().getData();
 
                         try
                         {
-                            entry = new LdapDN( tlv.getValue().getData() );
+                            entry = new LdapDN( dnBytes );
                         }
                         catch ( InvalidNameException ine )
                         {
-                            String msg = "The DN is invalid : " + StringTools.dumpBytes( tlv.getValue().getData() )
-                                + " : " + ine.getMessage();
+                            String msg = "Invalid DN given : " + StringTools.utf8ToString( dnBytes ) + 
+                                " (" + StringTools.dumpBytes( dnBytes ) + 
+                                ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
-                            throw new DecoderException( msg, ine );
+                
+                            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;
                         }
 
                         addRequest.setEntry( entry );

Modified: directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/bind/BindRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/bind/BindRequestGrammar.java?rev=436848&r1=436847&r2=436848&view=diff
==============================================================================
--- directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/bind/BindRequestGrammar.java (original)
+++ directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/bind/BindRequestGrammar.java Fri Aug 25 09:39:48 2006
@@ -37,8 +37,11 @@
 import org.apache.directory.shared.ldap.codec.LdapMessage;
 import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
 import org.apache.directory.shared.ldap.codec.LdapStatesEnum;
+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.message.BindResponseImpl;
+import org.apache.directory.shared.ldap.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.directory.shared.ldap.util.StringTools;
 import org.slf4j.Logger;
@@ -205,7 +208,8 @@
                 {
 
                     LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
-                    BindRequest bindRequestMessage = ldapMessageContainer.getLdapMessage().getBindRequest();
+                    LdapMessage ldapMessage = ldapMessageContainer.getLdapMessage();
+                    BindRequest bindRequestMessage = ldapMessage.getBindRequest();
 
                     // Get the Value and store it in the BindRequest
                     TLV tlv = ldapMessageContainer.getCurrentTLV();
@@ -218,17 +222,29 @@
                     else
                     {
                         LdapDN name = LdapDN.EMPTY_LDAPDN;
+                        byte[] dnBytes = tlv.getValue().getData();
 
                         try
                         {
-                            name = new LdapDN( tlv.getValue().getData() );
+                            name = new LdapDN( dnBytes );
                         }
                         catch ( InvalidNameException ine )
                         {
-                            String msg = "Incorrect DN given : " + StringTools.dumpBytes( tlv.getValue().getData() )
-                                + " : " + ine.getMessage();
+                            String msg = "Incorrect DN given : " + StringTools.utf8ToString( dnBytes ) + 
+                                " (" + StringTools.dumpBytes( dnBytes )
+                                + ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
-                            throw new DecoderException( msg, ine );
+                        
+                            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 );
+                        
+                            throw exception;
                         }
 
                         bindRequestMessage.setName( name );

Modified: directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/compare/CompareRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/compare/CompareRequestGrammar.java?rev=436848&r1=436847&r2=436848&view=diff
==============================================================================
--- directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/compare/CompareRequestGrammar.java (original)
+++ directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/compare/CompareRequestGrammar.java Fri Aug 25 09:39:48 2006
@@ -34,8 +34,11 @@
 import org.apache.directory.shared.ldap.codec.LdapMessage;
 import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
 import org.apache.directory.shared.ldap.codec.LdapStatesEnum;
+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.message.CompareResponseImpl;
+import org.apache.directory.shared.ldap.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.directory.shared.ldap.util.StringTools;
 import org.slf4j.Logger;
@@ -140,16 +143,29 @@
                     }
                     else
                     {
+                        byte[] dnBytes = tlv.getValue().getData();
+                        
                         try
                         {
-                            entry = new LdapDN( tlv.getValue().getData() );
+                            entry = new LdapDN( dnBytes );
                         }
                         catch ( InvalidNameException ine )
                         {
-                            String msg = "The DN to compare  (" + StringTools.dumpBytes( tlv.getValue().getData() )
-                                + ") is invalid";
+                            String msg = "Invalid DN given : " + StringTools.utf8ToString( dnBytes ) + 
+                                " (" + StringTools.dumpBytes( dnBytes ) + 
+                                ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
-                            throw new DecoderException( msg, ine );
+            
+                            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;
                         }
 
                         compareRequest.setEntry( entry );

Modified: directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/del/DelRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/del/DelRequestGrammar.java?rev=436848&r1=436847&r2=436848&view=diff
==============================================================================
--- directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/del/DelRequestGrammar.java (original)
+++ directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/del/DelRequestGrammar.java Fri Aug 25 09:39:48 2006
@@ -114,13 +114,16 @@
                     }
                     else
                     {
+                        byte[] dnBytes = tlv.getValue().getData();
+                        
                         try
                         {
-                            entry = new LdapDN( tlv.getValue().getData() );
+                            entry = new LdapDN( dnBytes );
                         }
                         catch ( InvalidNameException ine )
                         {
-                            String msg = "The DN to delete :" + StringTools.utf8ToString( tlv.getValue().getData() )+ " (" + StringTools.dumpBytes( tlv.getValue().getData() )
+                            String msg = "The DN to delete : " + StringTools.utf8ToString( dnBytes ) + 
+                                " (" + StringTools.dumpBytes( dnBytes )
                                 + ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
                             
@@ -135,6 +138,7 @@
                             
                             throw exception;
                         }
+
                         delRequest.setEntry( entry );
                     }
 

Modified: directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequestGrammar.java?rev=436848&r1=436847&r2=436848&view=diff
==============================================================================
--- directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequestGrammar.java (original)
+++ directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequestGrammar.java Fri Aug 25 09:39:48 2006
@@ -36,8 +36,11 @@
 import org.apache.directory.shared.ldap.codec.LdapMessage;
 import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
 import org.apache.directory.shared.ldap.codec.LdapStatesEnum;
+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.message.ModifyResponseImpl;
+import org.apache.directory.shared.ldap.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.directory.shared.ldap.util.StringTools;
 import org.slf4j.Logger;
@@ -143,17 +146,29 @@
                     }
                     else
                     {
+                        byte[] dnBytes = tlv.getValue().getData();
 
                         try
                         {
-                            object = new LdapDN( tlv.getValue().getData() );
+                            object = new LdapDN( dnBytes );
                         }
                         catch ( InvalidNameException ine )
                         {
-                            String msg = "Invalid DN " + StringTools.dumpBytes( tlv.getValue().getData() ) + ", : "
-                                + ine.getMessage();
+                            String msg = "Invalid DN given : " + StringTools.utf8ToString( dnBytes ) + 
+                                " (" + StringTools.dumpBytes( dnBytes ) + 
+                                ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
-                            throw new DecoderException( msg, ine );
+                    
+                            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;
                         }
 
                         modifyRequest.setObject( object );

Modified: directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modifyDn/ModifyDNRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modifyDn/ModifyDNRequestGrammar.java?rev=436848&r1=436847&r2=436848&view=diff
==============================================================================
--- directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modifyDn/ModifyDNRequestGrammar.java (original)
+++ directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modifyDn/ModifyDNRequestGrammar.java Fri Aug 25 09:39:48 2006
@@ -37,6 +37,9 @@
 import org.apache.directory.shared.ldap.codec.LdapMessage;
 import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
 import org.apache.directory.shared.ldap.codec.LdapStatesEnum;
+import org.apache.directory.shared.ldap.codec.ResponseCarryingException;
+import org.apache.directory.shared.ldap.message.ModifyDnResponseImpl;
+import org.apache.directory.shared.ldap.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.directory.shared.ldap.name.Rdn;
 import org.apache.directory.shared.ldap.util.StringTools;
@@ -144,16 +147,29 @@
                     }
                     else
                     {
+                        byte[] dnBytes = tlv.getValue().getData();
+                        
                         try
                         {
-                            entry = new LdapDN( tlv.getValue().getData() );
+                            entry = new LdapDN( dnBytes );
                         }
                         catch ( InvalidNameException ine )
                         {
-                            String msg = "The DN to modify  (" + StringTools.dumpBytes( tlv.getValue().getData() )
-                                + ") is invalid";
+                            String msg = "Invalid DN given : " + StringTools.utf8ToString( dnBytes ) + 
+                                " (" + StringTools.dumpBytes( dnBytes ) + 
+                                ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
-                            throw new DecoderException( msg, ine );
+        
+                            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;
                         }
 
                         modifyDNRequest.setEntry( entry );
@@ -209,17 +225,30 @@
                     }
                     else
                     {
+                        byte[] dnBytes = tlv.getValue().getData();
+                        
                         try
                         {
-                            LdapDN dn = new LdapDN( tlv.getValue().getData() );
+                            LdapDN dn = new LdapDN( dnBytes );
                             newRdn = ( ( LdapDN ) dn ).getRdn( 0 );
                         }
                         catch ( InvalidNameException ine )
                         {
-                            String msg = "The new RDN (" + StringTools.dumpBytes( tlv.getValue().getData() )
-                                + ") is invalid";
+                            String msg = "Invalid new RDN given : " + StringTools.utf8ToString( dnBytes ) + 
+                                " (" + StringTools.dumpBytes( dnBytes ) + 
+                                ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
-                            throw new DecoderException( msg, ine );
+    
+                            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;
                         }
 
                         modifyDNRequest.setNewRDN( newRdn );
@@ -352,16 +381,29 @@
                     }
                     else
                     {
+                        byte[] dnBytes = tlv.getValue().getData();
+                        
                         try
                         {
-                            newSuperior = new LdapDN( tlv.getValue().getData() );
+                            newSuperior = new LdapDN( dnBytes );
                         }
                         catch ( InvalidNameException ine )
                         {
-                            String msg = "The new superior DN (" + StringTools.dumpBytes( tlv.getValue().getData() )
-                                + ") is invalid";
+                            String msg = "Invalid new superior DN given : " + StringTools.utf8ToString( dnBytes ) + 
+                                " (" + StringTools.dumpBytes( dnBytes ) + 
+                                ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
-                            throw new DecoderException( msg, ine );
+    
+                            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;
                         }
 
                         modifyDNRequest.setNewSuperior( newSuperior );

Modified: directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchRequestGrammar.java
URL: http://svn.apache.org/viewvc/directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchRequestGrammar.java?rev=436848&r1=436847&r2=436848&view=diff
==============================================================================
--- directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchRequestGrammar.java (original)
+++ directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchRequestGrammar.java Fri Aug 25 09:39:48 2006
@@ -39,8 +39,11 @@
 import org.apache.directory.shared.ldap.codec.LdapMessage;
 import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
 import org.apache.directory.shared.ldap.codec.LdapStatesEnum;
+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.message.ResultCodeEnum;
+import org.apache.directory.shared.ldap.message.SearchResponseDoneImpl;
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.directory.shared.ldap.util.StringTools;
 import org.slf4j.Logger;
@@ -132,8 +135,8 @@
                 {
 
                     LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
-
-                    SearchRequest searchRequest = ldapMessageContainer.getLdapMessage().getSearchRequest();
+                    LdapMessage ldapMessage = ldapMessageContainer.getLdapMessage();
+                    SearchRequest searchRequest = ldapMessage.getSearchRequest();
 
                     TLV tlv = ldapMessageContainer.getCurrentTLV();
 
@@ -146,15 +149,29 @@
                     // root.
                     if ( tlv.getLength().getLength() != 0 )
                     {
+                        byte[] dnBytes = tlv.getValue().getData();
+
                         try
                         {
-                            baseObject = new LdapDN( tlv.getValue().getData() );
+                            baseObject = new LdapDN( dnBytes );
                         }
                         catch ( InvalidNameException ine )
                         {
-                            String msg = "The root DN " + baseObject.toString() + " is invalid";
+                            String msg = "Invalid root DN given : " + StringTools.utf8ToString( dnBytes ) + 
+                                " (" + StringTools.dumpBytes( dnBytes ) +
+                                ") is invalid";
                             log.error( "{} : {}", msg, ine.getMessage() );
-                            throw new DecoderException( msg, ine );
+                    
+                            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;
                         }
                     }
 

Modified: directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchResultEntryGrammar.java
URL: http://svn.apache.org/viewvc/directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchResultEntryGrammar.java?rev=436848&r1=436847&r2=436848&view=diff
==============================================================================
--- directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchResultEntryGrammar.java (original)
+++ directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/codec/search/SearchResultEntryGrammar.java Fri Aug 25 09:39:48 2006
@@ -146,13 +146,16 @@
                     }
                     else
                     {
+                        byte[] dnBytes = tlv.getValue().getData();
+
                         try
                         {
-                            objectName = new LdapDN( tlv.getValue().getData() );
+                            objectName = new LdapDN( dnBytes );
                         }
                         catch ( InvalidNameException ine )
                         {
-                            String msg = "The DN " + StringTools.dumpBytes( tlv.getValue().getData() )
+                            // This is for the client side. We will never decode LdapResult on the server
+                            String msg = "The DN " + StringTools.dumpBytes( dnBytes )
                                 + "is invalid : " + ine.getMessage();
                             log.error( "{} : {}", msg, ine.getMessage() );
                             throw new DecoderException( msg, ine );