From 003e3993c5ca89b1a8cbb4dc844aa1f882203475 Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Mon, 31 May 2010 08:49:35 +0000
Subject: [PATCH] Update BDB JE to version 4.0.103 Handle properly notice of disconnection in ldapmodify CLI.

---
 opendj-sdk/opends/src/server/org/opends/server/tools/LDAPModify.java |  103 ++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 68 insertions(+), 35 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPModify.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPModify.java
index 11aa3fb..d566cb6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPModify.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPModify.java
@@ -76,6 +76,8 @@
 
 import org.opends.server.controls.*;
 import org.opends.server.plugins.ChangeNumberControlPlugin;
+import org.opends.server.protocols.ldap.ExtendedResponseProtocolOp;
+import org.opends.server.protocols.ldap.LDAPConstants;
 
 
 
@@ -359,42 +361,73 @@
         Message errorMessage = null;
         DN matchedDN = null;
         List<String> referralURLs = null;
-        switch(entry.getChangeOperationType())
+        try
         {
-          case ADD:
-            AddResponseProtocolOp addOp =
-              responseMessage.getAddResponseProtocolOp();
-            resultCode = addOp.getResultCode();
-            errorMessage = addOp.getErrorMessage();
-            matchedDN = addOp.getMatchedDN();
-            referralURLs = addOp.getReferralURLs();
-            break;
-          case DELETE:
-            DeleteResponseProtocolOp delOp =
-              responseMessage.getDeleteResponseProtocolOp();
-            resultCode = delOp.getResultCode();
-            errorMessage = delOp.getErrorMessage();
-            matchedDN = delOp.getMatchedDN();
-            referralURLs = delOp.getReferralURLs();
-            break;
-          case MODIFY:
-            ModifyResponseProtocolOp modOp =
-              responseMessage.getModifyResponseProtocolOp();
-            resultCode = modOp.getResultCode();
-            errorMessage = modOp.getErrorMessage();
-            matchedDN = modOp.getMatchedDN();
-            referralURLs = modOp.getReferralURLs();
-            break;
-          case MODIFY_DN:
-            ModifyDNResponseProtocolOp modDNOp =
-              responseMessage.getModifyDNResponseProtocolOp();
-            resultCode = modDNOp.getResultCode();
-            errorMessage = modDNOp.getErrorMessage();
-            matchedDN = modDNOp.getMatchedDN();
-            referralURLs = modDNOp.getReferralURLs();
-            break;
-          default:
-            break;
+          switch(entry.getChangeOperationType())
+          {
+            case ADD:
+              AddResponseProtocolOp addOp =
+                responseMessage.getAddResponseProtocolOp();
+              resultCode = addOp.getResultCode();
+              errorMessage = addOp.getErrorMessage();
+              matchedDN = addOp.getMatchedDN();
+              referralURLs = addOp.getReferralURLs();
+              break;
+            case DELETE:
+              DeleteResponseProtocolOp delOp =
+                responseMessage.getDeleteResponseProtocolOp();
+              resultCode = delOp.getResultCode();
+              errorMessage = delOp.getErrorMessage();
+              matchedDN = delOp.getMatchedDN();
+              referralURLs = delOp.getReferralURLs();
+              break;
+            case MODIFY:
+              ModifyResponseProtocolOp modOp =
+                responseMessage.getModifyResponseProtocolOp();
+              resultCode = modOp.getResultCode();
+              errorMessage = modOp.getErrorMessage();
+              matchedDN = modOp.getMatchedDN();
+              referralURLs = modOp.getReferralURLs();
+              break;
+            case MODIFY_DN:
+              ModifyDNResponseProtocolOp modDNOp =
+                responseMessage.getModifyDNResponseProtocolOp();
+              resultCode = modDNOp.getResultCode();
+              errorMessage = modDNOp.getErrorMessage();
+              matchedDN = modDNOp.getMatchedDN();
+              referralURLs = modDNOp.getReferralURLs();
+              break;
+            default:
+              break;
+          }
+        }
+        catch (ClassCastException ce)
+        {
+          // It is possible that this is extended response.
+          if (responseMessage.getProtocolOpType() ==
+              LDAPConstants.OP_TYPE_EXTENDED_RESPONSE)
+          {
+            ExtendedResponseProtocolOp extRes =
+              responseMessage.getExtendedResponseProtocolOp();
+            resultCode = extRes.getResultCode();
+            errorMessage = extRes.getErrorMessage();
+            matchedDN = extRes.getMatchedDN();
+            referralURLs = extRes.getReferralURLs();
+          }
+          else
+          {
+            // This shouldnt happen but if it does debug
+            // log it, set the error code to OTHER and
+            // fall thru.
+            if (debugEnabled())
+            {
+              TRACER.debugCaught(DebugLogLevel.ERROR, ce);
+            }
+            resultCode = ResultCode.OTHER.getIntValue();
+            errorMessage = null;
+            matchedDN = null;
+            referralURLs = null;
+          }
         }
 
         if(resultCode != SUCCESS && resultCode != REFERRAL)

--
Gitblit v1.10.0