| opends/resource/dsml/webapp/web.xml | ●●●●● patch | view | raw | blame | history | |
| opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java | ●●●●● patch | view | raw | blame | history | |
| opends/src/dsml/org/opends/dsml/protocol/DSMLServlet.java | ●●●●● patch | view | raw | blame | history |
opends/resource/dsml/webapp/web.xml
@@ -72,6 +72,14 @@ </context-param> --> <!-- Add an extra <context-param> like the one below for each extended operation that is known to return a string in the LDAP response. --> <context-param> <description>The Who Am I? [RFC 4532] extended operation returns a string.</description> <param-name>ldap.exop.string.1.3.6.1.4.1.4203.1.11.3</param-name> <param-value>true</param-value> </context-param> <servlet> <servlet-name>DSMLServlet</servlet-name> <servlet-class>org.opends.dsml.protocol.DSMLServlet</servlet-class> opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java
@@ -30,6 +30,7 @@ import java.io.IOException; import java.util.Set; import org.opends.messages.Message; import org.opends.server.protocols.asn1.ASN1Exception; @@ -51,17 +52,39 @@ public class DSMLExtendedOperation { private LDAPConnection connection; private Set<String> stringResponses; /** * Create an instance with the specified LDAP connection. * * @param connection The LDAP connection to send the request on. * @param stringResponses The OIDs of any operations that have results that * should be returned as strings instead of binary. */ public DSMLExtendedOperation(LDAPConnection connection) public DSMLExtendedOperation(LDAPConnection connection, Set<String> stringResponses) { this.connection = connection; this.stringResponses = stringResponses; } /** * Determine if the response to a given LDAP extended operation (specified by * OID) should be treated as a string. The default is binary. * * @param oid The OID of the extended operation. * @return <CODE>true</CODE> if the extended operation is known to return a * string, <CODE>false</CODE> otherwise. */ public boolean responseIsString(String oid) { return stringResponses.contains(oid); } /** * Perform the LDAP EXTENDED operation and send the result back to the * client. @@ -132,11 +155,18 @@ // Set the result code and error message for the DSML response. extendedResponse.setResponseName(extendedOp.getOID()); asnValue = extendedOp.getValue(); ByteString rawValue = extendedOp.getValue(); value = null; if (asnValue != null) if (rawValue != null) { value = asnValue.toByteArray(); if (responseIsString(requestName)) { value = rawValue.toString(); } else { value = rawValue.toByteArray(); } } extendedResponse.setResponse(value); extendedResponse.setErrorMessage( 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);