From 3d0a586bb52b5365d3f682404bae5964cc8e2a0c Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Fri, 28 May 2010 09:41:02 +0000
Subject: [PATCH] Fix for issue #4406. Server should sent a notice of disconnection and close connection when an exception occurs during protocol decode

---
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPRequestHandler.java |   25 +++++++++++++++++++++++--
 1 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPRequestHandler.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPRequestHandler.java
index 528679e..3a3dc1e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPRequestHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPRequestHandler.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
 
@@ -50,10 +50,11 @@
 import org.opends.server.loggers.ErrorLogger;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.protocols.asn1.ASN1ByteChannelReader;
+import org.opends.server.protocols.asn1.ASN1Exception;
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.DisconnectReason;
 import org.opends.server.types.InitializationException;
-
+import org.opends.server.types.LDAPException;
 
 
 /**
@@ -214,12 +215,32 @@
             }
           }
         }
+        catch (ASN1Exception e)
+        {
+          if (debugEnabled())
+          {
+            TRACER.debugCaught(DebugLogLevel.ERROR, e);
+          }
+          readyConnection.disconnect(DisconnectReason.PROTOCOL_ERROR, true,
+            e.getMessageObject());
+        }
+        catch (LDAPException e)
+        {
+          if (debugEnabled())
+          {
+            TRACER.debugCaught(DebugLogLevel.ERROR, e);
+          }
+          readyConnection.disconnect(DisconnectReason.PROTOCOL_ERROR, true,
+            e.getMessageObject());
+        }
         catch (Exception e)
         {
           if (debugEnabled())
           {
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
+          readyConnection.disconnect(DisconnectReason.PROTOCOL_ERROR, true,
+            Message.raw(e.toString()));
         }
       }
 

--
Gitblit v1.10.0