From 57a1a2d18386d01af5a3f6d72e63afe2b2954c71 Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Thu, 31 Aug 2006 20:31:43 +0000
Subject: [PATCH] Update a number of the client-side tools provided with OpenDS to ensure that they use consistently incrementing message IDs for requests sent to the server. In at least one case, it was possible for the same message ID to be used by the client for two consecutive requests, which could trigger a race condition that caused the server to refuse the second request.

---
 opends/src/server/org/opends/server/tools/LDAPPasswordModify.java |   26 ++++++++++++++++++--------
 1 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/opends/src/server/org/opends/server/tools/LDAPPasswordModify.java b/opends/src/server/org/opends/server/tools/LDAPPasswordModify.java
index d2d78a1..5a96314 100644
--- a/opends/src/server/org/opends/server/tools/LDAPPasswordModify.java
+++ b/opends/src/server/org/opends/server/tools/LDAPPasswordModify.java
@@ -30,6 +30,7 @@
 
 import java.net.Socket;
 import java.util.ArrayList;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.protocols.asn1.ASN1Element;
@@ -204,13 +205,15 @@
 
 
     // Send the LDAP bind request if appropriate.
+    AtomicInteger nextMessageID = new AtomicInteger(1);
     if ((bindDN != null) && (bindDN.length() > 0) && (bindPW != null) &&
         (bindPW.length() > 0))
     {
       BindRequestProtocolOp bindRequest =
            new BindRequestProtocolOp(new ASN1OctetString(bindDN), 3,
                                      new ASN1OctetString(bindPW));
-      LDAPMessage requestMessage = new LDAPMessage(1, bindRequest);
+      LDAPMessage requestMessage =
+           new LDAPMessage(nextMessageID.getAndIncrement(), bindRequest);
 
       try
       {
@@ -274,7 +277,8 @@
 
         try
         {
-          requestMessage = new LDAPMessage(2, new UnbindRequestProtocolOp());
+          requestMessage = new LDAPMessage(nextMessageID.getAndIncrement(),
+                                           new UnbindRequestProtocolOp());
           writer.writeElement(requestMessage.encode());
         }
         catch (Exception e) {}
@@ -316,7 +320,8 @@
     ExtendedRequestProtocolOp extendedRequest =
          new ExtendedRequestProtocolOp(OID_PASSWORD_MODIFY_REQUEST,
                                        requestValue);
-    LDAPMessage requestMessage = new LDAPMessage(2, extendedRequest);
+    LDAPMessage requestMessage =
+         new LDAPMessage(nextMessageID.getAndIncrement(), extendedRequest);
 
 
     // Send the request to the server and read the response.
@@ -331,7 +336,8 @@
 
       try
       {
-        requestMessage = new LDAPMessage(2, new UnbindRequestProtocolOp());
+        requestMessage = new LDAPMessage(nextMessageID.getAndIncrement(),
+                                         new UnbindRequestProtocolOp());
         writer.writeElement(requestMessage.encode());
       }
       catch (Exception e2) {}
@@ -360,7 +366,8 @@
 
       try
       {
-        requestMessage = new LDAPMessage(2, new UnbindRequestProtocolOp());
+        requestMessage = new LDAPMessage(nextMessageID.getAndIncrement(),
+                                         new UnbindRequestProtocolOp());
         writer.writeElement(requestMessage.encode());
       }
       catch (Exception e2) {}
@@ -398,7 +405,8 @@
 
       try
       {
-        requestMessage = new LDAPMessage(3, new UnbindRequestProtocolOp());
+        requestMessage = new LDAPMessage(nextMessageID.getAndIncrement(),
+                                         new UnbindRequestProtocolOp());
         writer.writeElement(requestMessage.encode());
       }
       catch (Exception e) {}
@@ -447,7 +455,8 @@
 
         try
         {
-          requestMessage = new LDAPMessage(2, new UnbindRequestProtocolOp());
+          requestMessage = new LDAPMessage(nextMessageID.getAndIncrement(),
+                                           new UnbindRequestProtocolOp());
           writer.writeElement(requestMessage.encode());
         }
         catch (Exception e2) {}
@@ -466,7 +475,8 @@
     // Unbind from the server and close the connection.
     try
     {
-      requestMessage = new LDAPMessage(3, new UnbindRequestProtocolOp());
+      requestMessage = new LDAPMessage(nextMessageID.getAndIncrement(),
+                                       new UnbindRequestProtocolOp());
       writer.writeElement(requestMessage.encode());
     }
     catch (Exception e) {}

--
Gitblit v1.10.0