From 781be434057128dfd434a1879963d6dd35fdf7b1 Mon Sep 17 00:00:00 2001
From: Chris Ridd <chris.ridd@forgerock.com>
Date: Wed, 17 Oct 2012 09:23:54 +0000
Subject: [PATCH] Fix OPENDJ-608 DSML gateway NPE in response to extended requests without request values

---
 opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java |   24 ++++++++++++++++++++++--
 1 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java b/opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java
index b21dbcf..9dba5eb 100644
--- a/opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java
+++ b/opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2012 ForgeRock AS.
  */
 package org.opends.dsml.protocol;
 
@@ -86,7 +87,19 @@
 
     String requestName = extendedRequest.getRequestName();
     Object value = extendedRequest.getRequestValue();
-    ByteString asnValue = ByteString.valueOf(value.toString());
+    ByteString asnValue = null;
+    // value is optional in the request
+    if (value != null)
+    {
+      if (value instanceof byte [])
+      {
+        asnValue = ByteString.wrap((byte [])value);
+      }
+      else
+      {
+        asnValue = ByteString.valueOf(value.toString());
+      }
+    }
 
     // Create and send the LDAP request to the server.
     ProtocolOp op = new ExtendedRequestProtocolOp(requestName, asnValue);
@@ -103,7 +116,14 @@
 
     // Set the result code and error message for the DSML response.
     extendedResponse.setResponseName(extendedOp.getOID());
-    extendedResponse.setResponse(extendedOp.getValue());
+
+    asnValue = extendedOp.getValue();
+    value = null;
+    if (asnValue != null)
+    {
+      value = asnValue.toByteArray();
+    }
+    extendedResponse.setResponse(value);
     extendedResponse.setErrorMessage(
             errorMessage != null ? errorMessage.toString() : null);
     ResultCode code = objFactory.createResultCode();

--
Gitblit v1.10.0