From 491a78a88c413300af5593048826a7552b64af1d Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Mon, 30 May 2011 12:06:28 +0000
Subject: [PATCH] Fix issue OPENDJ-170 - External ChangeLog returns the Cookie Control even when not requested. Fix now check if the control is present in the search and returns it only if so. Tests have been added in unit-tests to verify this.

---
 opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java |   21 ++++++++++++++++-----
 1 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java b/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
index cf54c0b..c195824 100644
--- a/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
@@ -184,6 +184,11 @@
   private ExternalChangeLogSession eclSession;
 
   /**
+   * A flag to know if the ECLControl has been requested.
+   */
+  private Boolean returnECLControl = false;
+
+  /**
    * Creates a new operation that may be used to search for entries in a local
    * backend of the Directory Server.
    *
@@ -406,6 +411,7 @@
           ExternalChangelogRequestControl eclControl =
             getRequestControl(ExternalChangelogRequestControl.DECODER);
           MultiDomainServerState cookie = eclControl.getCookie();
+          returnECLControl = true;
           if (cookie!=null)
           {
             startECLSessionMsg.setECLRequestType(
@@ -675,11 +681,16 @@
     final Entry entry = createEntryFromMsg(eclmsg);
     if (matchScopeAndFilter(entry))
     {
-      List<Control> controls = new ArrayList<Control>(1);
-      EntryChangelogNotificationControl clrc =
-        new EntryChangelogNotificationControl(
-            true, eclmsg.getCookie().toString());
-      controls.add(clrc);
+      List<Control> controls = null;
+      if (returnECLControl)
+      {
+        controls = new ArrayList<Control>(1);
+
+        EntryChangelogNotificationControl clrc =
+            new EntryChangelogNotificationControl(
+                true, eclmsg.getCookie().toString());
+        controls.add(clrc);
+      }
       return returnEntry(entry, controls);
     }
     return true;

--
Gitblit v1.10.0