From a030e2933d31f9fa47988508298b2651dfaa5e03 Mon Sep 17 00:00:00 2001
From: Chris Ridd <chris.ridd@forgerock.com>
Date: Thu, 25 Oct 2012 15:42:46 +0000
Subject: [PATCH] Fix OPENDJ-624 DSML servlet should encode some kinds of extended responses as strings

---
 opends/src/dsml/org/opends/dsml/protocol/DSMLServlet.java |   27 +++++++++++++++++++++++++--
 1 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/opends/src/dsml/org/opends/dsml/protocol/DSMLServlet.java b/opends/src/dsml/org/opends/dsml/protocol/DSMLServlet.java
index d1e8dc0..8d90851 100644
--- a/opends/src/dsml/org/opends/dsml/protocol/DSMLServlet.java
+++ b/opends/src/dsml/org/opends/dsml/protocol/DSMLServlet.java
@@ -23,7 +23,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2012 ForgeRock AS
  */
 package org.opends.dsml.protocol;
 
@@ -39,6 +39,7 @@
 import java.text.ParseException;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.Enumeration;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.StringTokenizer;
@@ -97,6 +98,7 @@
   private static final String TRUSTSTOREPASSWORD = "ldap.truststore.password";
   private static final String TRUSTALLCERTS = "ldap.trustall";
   private static final String USEHTTPAUTHZID = "ldap.authzidtypeisid";
+  private static final String EXOPSTRINGPREFIX = "ldap.exop.string.";
   private static final long serialVersionUID = -3748022009593442973L;
   private static final AtomicInteger nextMessageID = new AtomicInteger(1);
 
@@ -134,6 +136,8 @@
   private String trustStorePasswordValue;
   private Boolean trustAll;
   private Boolean useHTTPAuthzID;
+  private HashSet<String> exopStrings = new HashSet<String>();
+
   /**
    * This method will be called by the Servlet Container when
    * this servlet is being placed into service.
@@ -172,6 +176,24 @@
       useHTTPAuthzID = Boolean.valueOf(
           config.getServletContext().getInitParameter(USEHTTPAUTHZID));
 
+      /*
+       * Find all the param-names matching the pattern:
+       * ldap.exop.string.1.2.3.4.5
+       * and if the value's true then mark that OID (1.2.3.4.5) as one returning
+       * a string value.
+       */
+      Enumeration<String> names = config.getServletContext()
+          .getInitParameterNames();
+      while (names.hasMoreElements())
+      {
+        String name = names.nextElement().toString();
+        if (name.startsWith(EXOPSTRINGPREFIX) &&
+            Boolean.valueOf(config.getServletContext().getInitParameter(name)))
+        {
+          exopStrings.add(name.substring(EXOPSTRINGPREFIX.length()));
+        }
+      }
+
       if(jaxbContext==null)
         jaxbContext = JAXBContext.newInstance(PKG_NAME,
                 this.getClass().getClassLoader());
@@ -545,7 +567,8 @@
       } else if (request instanceof ExtendedRequest) {
         // Process the extended request.
         ExtendedRequest er = (ExtendedRequest) request;
-        DSMLExtendedOperation eo = new DSMLExtendedOperation(connection);
+        DSMLExtendedOperation eo = new DSMLExtendedOperation(connection,
+            exopStrings);
         ExtendedResponse extendedResponse = eo.doOperation(objFactory, er);
         return objFactory.createBatchResponseExtendedResponse(extendedResponse);
 

--
Gitblit v1.10.0