/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
* or http://forgerock.org/license/CDDLv1.0.html.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at legal-notices/CDDLv1_0.txt.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Copyright 2013-2015 ForgeRock AS.
*/
package org.forgerock.opendj.adapter.server3x;
import static com.forgerock.opendj.ldap.CoreMessages.*;
import static com.forgerock.opendj.util.StaticUtils.*;
import static org.forgerock.opendj.ldap.LdapException.*;
import static org.opends.server.extensions.ExtensionsConstants.*;
import static org.opends.server.util.CollectionUtils.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
import org.forgerock.i18n.LocalizableMessageBuilder;
import org.forgerock.opendj.io.ASN1;
import org.forgerock.opendj.io.ASN1Reader;
import org.forgerock.opendj.io.ASN1Writer;
import org.forgerock.opendj.ldap.Attribute;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.ByteStringBuilder;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.LdapException;
import org.forgerock.opendj.ldap.LinkedAttribute;
import org.forgerock.opendj.ldap.LinkedHashMapEntry;
import org.forgerock.opendj.ldap.RDN;
import org.forgerock.opendj.ldap.ResultCode;
import org.forgerock.opendj.ldap.SearchScope;
import org.forgerock.opendj.ldap.controls.Control;
import org.forgerock.opendj.ldap.controls.GenericControl;
import org.forgerock.opendj.ldap.responses.PasswordModifyExtendedResult;
import org.forgerock.opendj.ldap.responses.Responses;
import org.forgerock.opendj.ldap.responses.Result;
import org.forgerock.opendj.ldap.responses.SearchResultEntry;
import org.forgerock.opendj.server.config.meta.BackendVLVIndexCfgDefn;
import org.forgerock.util.Reject;
import org.opends.server.core.BindOperation;
import org.opends.server.core.CompareOperation;
import org.opends.server.core.ExtendedOperation;
import org.opends.server.protocols.ldap.LDAPAttribute;
import org.opends.server.protocols.ldap.LDAPControl;
import org.opends.server.protocols.ldap.LDAPFilter;
import org.opends.server.protocols.ldap.LDAPModification;
import org.opends.server.types.AttributeBuilder;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.LDAPException;
import org.opends.server.types.Operation;
import org.opends.server.types.SearchFilter;
import org.opends.server.util.ServerConstants;
/** Common utility methods. */
public final class Converters {
/** Prevent instantiation. */
private Converters() {
throw new AssertionError();
}
/**
* Converts from OpenDJ LDAP SDK {@link org.forgerock.opendj.ldap.Entry} to OpenDJ
* server {@link org.opends.server.types.Entry}.
*
* @param sdkEntry
* SDK entry to convert
* @return the converted entry
*/
public static org.opends.server.types.Entry to(
final org.forgerock.opendj.ldap.Entry sdkEntry) {
if (sdkEntry != null) {
org.opends.server.types.Entry entry =
new org.opends.server.types.Entry(to(sdkEntry.getName()), null, null, null);
List<ByteString> duplicateValues = new ArrayList<>();
for (org.opends.server.types.Attribute attribute : toAttributes(sdkEntry.getAllAttributes())) {
entry.addAttribute(attribute, duplicateValues);
}
return entry;
}
return null;
}
/**
* Converts from OpenDJ LDAP SDK {@link org.forgerock.opendj.ldap.responses.SearchResultEntry} to OpenDJ
* server {@link org.opends.server.types.SearchResultEntry}.
*
* @param value
* value to convert
* @return the converted value
*/
public static org.opends.server.types.SearchResultEntry to(
final org.forgerock.opendj.ldap.responses.SearchResultEntry value) {
if (value != null) {
org.opends.server.types.Entry entry =
new org.opends.server.types.Entry(to(value.getName()), null, null, null);
org.opends.server.types.SearchResultEntry searchResultEntry =
new org.opends.server.types.SearchResultEntry(entry, to(value.getControls()));
List<ByteString> duplicateValues = new ArrayList<>();
for (org.opends.server.types.Attribute attribute : toAttributes(value.getAllAttributes())) {
searchResultEntry.addAttribute(attribute, duplicateValues);
}
return searchResultEntry;
}
return null;
}
/**
* Converts from OpenDJ LDAP SDK {@link DN} to OpenDJ server
* {@link org.opends.server.types.DN}.
*
* @param dn
* value to convert
* @return the converted value
*/
public static org.opends.server.types.DN to(final DN dn) {
try {
return org.opends.server.types.DN.valueOf(dn.toString());
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
/**
* Converts a set of OpenDJ LDAP SDK {@link DN} to a set of
* OpenDJ server {@link org.opends.server.types.DN}.
*
* @param dnSet
* set to convert
* @return the converted set
*/
public static SortedSet<org.opends.server.types.DN> to(final SortedSet<DN> dnSet) {
try {
SortedSet<org.opends.server.types.DN> newSet = new TreeSet<>();
for (DN dn : dnSet) {
newSet.add(org.opends.server.types.DN.valueOf(dn.toString()));
}
return newSet;
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
/**
* Converts an array of OpenDJ LDAP SDK {@link DN} to an array of
* OpenDJ server {@link org.opends.server.types.DN}.
*
* @param dns
* array of values to convert
* @return the converted array
*/
public static org.opends.server.types.DN[] to(final DN[] dns) {
try {
org.opends.server.types.DN[] newDns = new org.opends.server.types.DN[dns.length];
for (int i = 0; i < dns.length; i++) {
newDns[i] = org.opends.server.types.DN.valueOf(dns[i].toString());
}
return newDns;
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
/**
* Converts from OpenDJ LDAP SDK {@link RDN} to OpenDJ server
* {@link org.opends.server.types.RDN}.
*
* @param rdn
* value to convert
* @return the converted value
*/
public static org.opends.server.types.RDN to(final RDN rdn) {
try {
return org.opends.server.types.RDN.decode(rdn.toString());
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
/**
* Converts from OpenDJ LDAP SDK {@link org.forgerock.opendj.ldap.Filter} to
* OpenDJ server {@link org.opends.server.types.RawFilter}.
*
* @param filter
* value to convert
* @return the converted value
*/
public static org.opends.server.types.RawFilter to(final org.forgerock.opendj.ldap.Filter filter) {
org.opends.server.protocols.ldap.LDAPFilter ldapFilter = null;
try {
ldapFilter = LDAPFilter.decode(filter.toString());
} catch (LDAPException e) {
throw new IllegalStateException(e);
}
return ldapFilter;
}
/**
* Converts from OpenDJ LDAP SDK {@link org.forgerock.opendj.ldap.Filter} to
* OpenDJ server {@link org.opends.server.types.RawFilter}.
*
* @param filter
* value to convert
* @return the converted value
*/
public static SearchFilter toSearchFilter(final org.forgerock.opendj.ldap.Filter filter) {
SearchFilter ldapFilter = null;
try {
ldapFilter = SearchFilter.createFilterFromString(filter.toString());
} catch (DirectoryException e) {
throw new IllegalStateException(e.getMessage(), e);
}
return ldapFilter;
}
/**
* Converts from OpenDJ LDAP SDK
* {@link org.forgerock.opendj.ldap.responses.SearchResultReference} to OpenDJ
* server {@link org.opends.server.types.SearchResultReference}.
*
* @param searchResultReference
* value to convert
* @return the converted value
*/
public static org.opends.server.types.SearchResultReference to(
final org.forgerock.opendj.ldap.responses.SearchResultReference searchResultReference) {
return new org.opends.server.types.SearchResultReference(
searchResultReference.getURIs(), to(searchResultReference.getControls()));
}
/**
* Converts from OpenDJ LDAP SDK {@link Control} to OpenDJ server
* {@link org.opends.server.protocols.ldap.LDAPControl}.
*
* @param control
* value to convert
* @return the converted value
*/
public static org.opends.server.protocols.ldap.LDAPControl to(final Control control) {
return new LDAPControl(control.getOID(), control.isCritical(), control.getValue());
}
/**
* Converts from a <code>List</code> of OpenDJ LDAP SDK
* {@link org.forgerock.opendj.ldap.controls.Control} to a <code>List</code>
* of OpenDJ server {@link org.opends.server.types.Control}.
*
* @param listOfControl
* value to convert
* @return the converted value
*/
public static List<org.opends.server.types.Control> to(
final List<org.forgerock.opendj.ldap.controls.Control> listOfControl) {
List<org.opends.server.types.Control> toListOfControl = new ArrayList<>(listOfControl.size());
for (org.forgerock.opendj.ldap.controls.Control c : listOfControl) {
toListOfControl.add(to(c));
}
return toListOfControl;
}
/**
* Converts from OpenDJ LDAP SDK {@link org.forgerock.opendj.ldap.Attribute}
* to OpenDJ server {@link org.opends.server.types.RawAttribute}.
*
* @param attribute
* value to convert
* @return the converted value
*/
public static org.opends.server.types.RawAttribute to(
final org.forgerock.opendj.ldap.Attribute attribute) {
ArrayList<ByteString> listAttributeValues = newArrayList(attribute.toArray());
return new LDAPAttribute(attribute.getAttributeDescriptionAsString(), listAttributeValues);
}
/**
* Converts from an <code>Iterable</code> of OpenDJ LDAP SDK
* {@link org.forgerock.opendj.ldap.Attribute} to a <code>List</code> of
* OpenDJ server {@link org.opends.server.types.RawAttribute}.
*
* @param listOfAttributes
* value to convert
* @return the converted value
*/
public static List<org.opends.server.types.RawAttribute> to(
final Iterable<org.forgerock.opendj.ldap.Attribute> listOfAttributes) {
List<org.opends.server.types.RawAttribute> toListOfAttributes =
new ArrayList<>(((Collection<?>) listOfAttributes).size());
for (org.forgerock.opendj.ldap.Attribute a : listOfAttributes) {
toListOfAttributes.add(to(a));
}
return toListOfAttributes;
}
/**
* Converts from OpenDJ LDAP SDK
* {@link org.forgerock.opendj.ldap.Modification} to OpenDJ server
* {@link org.opends.server.types.RawModification}.
*
* @param modification
* value to convert
* @return the converted value
*/
public static org.opends.server.types.RawModification to(
final org.forgerock.opendj.ldap.Modification modification) {
return new LDAPModification(modification.getModificationType(), to(modification
.getAttribute()));
}
/**
* Converts from a <code>List</code> of OpenDJ LDAP SDK
* {@link org.forgerock.opendj.ldap.Modification} to a <code>List</code> of
* OpenDJ server {@link org.opends.server.types.RawModification}.
*
* @param listOfModifications
* value to convert
* @return the converted value
*/
public static List<org.opends.server.types.RawModification> toRawModifications(
final List<org.forgerock.opendj.ldap.Modification> listOfModifications) {
List<org.opends.server.types.RawModification> toListOfModifications =
new ArrayList<>(listOfModifications.size());
for (org.forgerock.opendj.ldap.Modification m : listOfModifications) {
toListOfModifications.add(to(m));
}
return toListOfModifications;
}
/**
* Converts from OpenDJ LDAP SDK {@link org.forgerock.opendj.ldap.Attribute}
* to OpenDJ server {@link org.opends.server.types.Attribute}.
*
* @param attribute
* value to convert
* @return the converted value
*/
public static org.opends.server.types.Attribute toAttribute(
final org.forgerock.opendj.ldap.Attribute attribute) {
final AttributeBuilder attrBuilder =
new AttributeBuilder(attribute.getAttributeDescriptionAsString());
for (ByteString b : attribute.toArray()) {
attrBuilder.add(b);
}
return attrBuilder.toAttribute();
}
/**
* Converts from an <code>Iterable</code> of OpenDJ LDAP SDK
* {@link org.forgerock.opendj.ldap.Attribute} to a <code>List</code> of
* OpenDJ server {@link org.opends.server.types.RawAttribute}.
*
* @param listOfAttributes
* value to convert
* @return the converted value
*/
public static List<org.opends.server.types.Attribute> toAttributes(
final Iterable<org.forgerock.opendj.ldap.Attribute> listOfAttributes) {
List<org.opends.server.types.Attribute> toListOfAttributes =
new ArrayList<>(((Collection<?>) listOfAttributes).size());
for (org.forgerock.opendj.ldap.Attribute a : listOfAttributes) {
toListOfAttributes.add(toAttribute(a));
}
return toListOfAttributes;
}
/**
* Converts from OpenDJ LDAP SDK
* {@link org.forgerock.opendj.ldap.Modification} to OpenDJ server
* {@link org.opends.server.types.Modification}.
*
* @param modification
* value to convert
* @return the converted value
*/
public static org.opends.server.types.Modification toModification(
final org.forgerock.opendj.ldap.Modification modification) {
return new org.opends.server.types.Modification(modification.getModificationType(),
toAttribute(modification.getAttribute()));
}
/**
* Converts from a <code>List</code> of OpenDJ LDAP SDK
* {@link org.forgerock.opendj.ldap.Modification} to a <code>List</code> of
* OpenDJ server {@link org.opends.server.types.Modification}.
*
* @param listOfModifications
* value to convert
* @return the converted value
*/
public static List<org.opends.server.types.Modification> toModifications(
final List<org.forgerock.opendj.ldap.Modification> listOfModifications) {
List<org.opends.server.types.Modification> toListOfModifications = new ArrayList<>(listOfModifications.size());
for (org.forgerock.opendj.ldap.Modification m : listOfModifications) {
toListOfModifications.add(toModification(m));
}
return toListOfModifications;
}
/**
* Converts from OpenDJ server
* {@link org.opends.server.protocols.ldap.LDAPControl} to OpenDJ LDAP SDK
* {@link Control}.
*
* @param ldapControl
* value to convert
* @return the converted value
*/
public static Control from(final org.opends.server.protocols.ldap.LDAPControl ldapControl) {
return GenericControl.newControl(ldapControl.getOID(), ldapControl.isCritical(),
ldapControl.getValue());
}
/**
* Converts from OpenDJ server {@link org.opends.server.types.Control} to
* OpenDJ LDAP SDK {@link Control}.
*
* @param control
* value to convert
* @return the converted value
*/
public static Control from(final org.opends.server.types.Control control) {
String oid = null;
boolean isCritical = false;
ByteString value = null;
// The server control doesn't have a method for extracting directly the value so, we need to ASN1 it.
ByteStringBuilder builder = new ByteStringBuilder();
final ASN1Writer writer = ASN1.getWriter(builder);
try {
control.write(writer);
} catch (IOException e) {
// Nothing to do.
}
final ByteString sdkByteString = builder.toByteString();
final org.forgerock.opendj.io.ASN1Reader sdkReaderASN1 =
org.forgerock.opendj.io.ASN1.getReader(sdkByteString.toByteArray());
// Reads the ASN1 SDK byte string.
try {
sdkReaderASN1.readStartSequence();
oid = sdkReaderASN1.readOctetStringAsString();
if (sdkReaderASN1.hasNextElement()
&& sdkReaderASN1.peekType() == ASN1.UNIVERSAL_BOOLEAN_TYPE) {
isCritical = sdkReaderASN1.readBoolean();
}
if (sdkReaderASN1.hasNextElement()
&& sdkReaderASN1.peekType() == ASN1.UNIVERSAL_OCTET_STRING_TYPE) {
value = sdkReaderASN1.readOctetString();
}
sdkReaderASN1.readEndSequence();
} catch (IOException e) {
// Nothing to do.
}
// Creates the control
return GenericControl.newControl(oid, isCritical, value);
}
/**
* Converts from a <code>List</code> of OpenDJ server
* {@link org.opends.server.types.Control} to a <code>List</code> of OpenDJ
* LDAP SDK {@link org.forgerock.opendj.ldap.controls.Control}.
*
* @param listOfControl
* value to convert
* @return the converted value
*/
public static List<org.forgerock.opendj.ldap.controls.Control> from(
final List<org.opends.server.types.Control> listOfControl) {
List<org.forgerock.opendj.ldap.controls.Control> fromListofControl = new ArrayList<>(listOfControl.size());
for (org.opends.server.types.Control c : listOfControl) {
fromListofControl.add(from(c));
}
return fromListofControl;
}
/**
* Converts from OpenDJ server
* {@link org.opends.server.types.SearchResultReference} to OpenDJ LDAP SDK
* {@link org.forgerock.opendj.ldap.responses.SearchResultReference}.
*
* @param srvResultReference
* value to convert
* @return the converted value
*/
public static org.forgerock.opendj.ldap.responses.SearchResultReference from(
final org.opends.server.types.SearchResultReference srvResultReference) {
return Responses.newSearchResultReference(srvResultReference.getReferralURLString());
}
/**
* Converts from OpenDJ server {@link org.opends.server.types.Attribute} to
* OpenDJ LDAP SDK {@link org.forgerock.opendj.ldap.Attribute}.
*
* @param attribute
* value to convert
* @return the converted value
*/
public static org.forgerock.opendj.ldap.Attribute from(
final org.opends.server.types.Attribute attribute) {
Attribute sdkAttribute = new LinkedAttribute(attribute.getNameWithOptions());
for (ByteString value : attribute) {
sdkAttribute.add(value);
}
return sdkAttribute;
}
/**
* Converts from an <code>Iterable</code> of OpenDJ server
* {@link org.opends.server.types.Attribute} to a <code>List</code> of OpenDJ
* LDAP SDK {@link org.forgerock.opendj.ldap.Attribute}.
*
* @param listOfAttributes
* value to convert
* @return the converted value
*/
public static List<org.forgerock.opendj.ldap.Attribute> from(
final Iterable<org.opends.server.types.Attribute> listOfAttributes) {
List<org.forgerock.opendj.ldap.Attribute> fromListofAttributes =
new ArrayList<>(((Collection<?>) listOfAttributes).size());
for (org.opends.server.types.Attribute a : listOfAttributes) {
fromListofAttributes.add(from(a));
}
return fromListofAttributes;
}
/**
* Converts from OpenDJ server
* {@link org.opends.server.types.SearchResultEntry} to OpenDJ LDAP SDK
* {@link org.forgerock.opendj.ldap.responses.SearchResultEntry}.
*
* @param srvResultEntry
* value to convert
* @return the converted value
*/
public static org.forgerock.opendj.ldap.responses.SearchResultEntry from(
final org.opends.server.types.SearchResultEntry srvResultEntry) {
final SearchResultEntry searchResultEntry =
Responses.newSearchResultEntry(srvResultEntry.getName().toString());
if (srvResultEntry.getAttributes() != null) {
for (org.opends.server.types.Attribute a : srvResultEntry.getAttributes()) {
searchResultEntry.addAttribute(from(a));
}
}
if (srvResultEntry.getControls() != null) {
for (org.opends.server.types.Control c : srvResultEntry.getControls()) {
searchResultEntry.addControl(from(c));
}
}
return searchResultEntry;
}
/**
* Converts from OpenDJ server
* {@link org.opends.server.types.Entry} to OpenDJ LDAP SDK
* {@link org.forgerock.opendj.ldap.Entry}.
*
* @param srvResultEntry
* value to convert
* @return the converted value
*/
public static org.forgerock.opendj.ldap.Entry from(
final org.opends.server.types.Entry srvResultEntry) {
final org.forgerock.opendj.ldap.Entry entry = new LinkedHashMapEntry(srvResultEntry.getName().toString());
if (srvResultEntry.getAttributes() != null) {
for (org.opends.server.types.Attribute a : srvResultEntry.getAttributes()) {
entry.addAttribute(from(a));
}
}
return entry;
}
/**
* Converts from OpenDJ server
* {@link org.opends.server.admin.std.meta.VirtualAttributeCfgDefn.Scope} to OpenDJ LDAP SDK
* {@link org.forgerock.opendj.ldap.SearchScope}.
*
* @param srvScope
* The server scope value.
* @return The SDK scope value.
*/
public static SearchScope from(org.opends.server.admin.std.meta.VirtualAttributeCfgDefn.Scope srvScope) {
if (srvScope != null) {
switch (srvScope) {
case BASE_OBJECT:
return SearchScope.BASE_OBJECT;
case SINGLE_LEVEL:
return SearchScope.SINGLE_LEVEL;
case SUBORDINATE_SUBTREE:
return SearchScope.SUBORDINATES;
case WHOLE_SUBTREE:
return SearchScope.WHOLE_SUBTREE;
default:
return null;
}
}
return null;
}
/**
* Converts from OpenDJ server {@link org.opends.server.types.DN} to OpenDJ
* LDAP SDK {@link DN}.
*
* @param dn
* value to convert
* @return the converted value
*/
public static DN from(final org.opends.server.types.DN dn) {
try {
return DN.valueOf(dn.toString());
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
/**
* Populates the result object with the operation details and return the
* result object if it was successful. Otherwise, it throws an
* {@link LdapException}.
*
* @param <T>
* the type of the result object
* @param operation
* used to populate the result
* @param result
* the result object to populate from the Operation
* @return the result if successful, an {@link LdapException} is thrown
* otherwise
* @throws LdapException
* when an error occurs
*/
public static <T extends Result> T getResponseResult(final Operation operation, final T result)
throws LdapException {
if (operation.getReferralURLs() != null) {
for (String ref : operation.getReferralURLs()) {
result.addReferralURI(ref);
}
}
if (operation.getResponseControls() != null) {
for (org.opends.server.types.Control c : operation.getResponseControls()) {
result.addControl(from(c));
}
}
final LocalizableMessageBuilder errorMsg = operation.getErrorMessage();
final org.opends.server.types.DN matchedDN = operation.getMatchedDN();
result.setDiagnosticMessage(errorMsg != null ? errorMsg.toString() : null);
result.setMatchedDN(matchedDN != null ? matchedDN.toString() : null);
if (result.isSuccess()) {
return result;
} else {
throw newLdapException(result);
}
}
/**
* Converts the OpenDJ server {@link Operation} object into an OpenDJ LDAP SDK
* {@link Result} object.
*
* @param operation
* value to convert
* @return the converted value
* @throws LdapException
* when an error occurs
*/
public static Result getResponseResult(final Operation operation) throws LdapException {
return getResponseResult(operation, newSDKResult(operation));
}
private static Result newSDKResult(final Operation operation) throws LdapException {
ResultCode rc = operation.getResultCode();
if (operation instanceof BindOperation) {
return Responses.newBindResult(rc);
} else if (operation instanceof CompareOperation) {
return Responses.newCompareResult(rc);
} else if (operation instanceof ExtendedOperation) {
ExtendedOperation extendedOperation = (ExtendedOperation) operation;
switch (extendedOperation.getRequestOID()) {
case ServerConstants.OID_PASSWORD_MODIFY_REQUEST:
PasswordModifyExtendedResult result = Responses.newPasswordModifyExtendedResult(rc);
ByteString generatedPwd = getGeneratedPassword(extendedOperation);
if (generatedPwd != null) {
result.setGeneratedPassword(generatedPwd.toByteArray());
}
return result;
default:
return Responses.newGenericExtendedResult(rc);
}
}
return Responses.newResult(rc);
}
private static ByteString getGeneratedPassword(ExtendedOperation op) throws LdapException {
// FIXME this code is duplicated with code in the SDK
// see PasswordModifyExtendedRequestImpl#ResultDecoder#decodeExtendedResult()
ByteString responseValue = op.getResponseValue();
if (responseValue != null) {
try {
ASN1Reader reader = ASN1.getReader(responseValue);
reader.readStartSequence();
return reader.readOctetString(TYPE_PASSWORD_MODIFY_GENERATED_PASSWORD);
} catch (IOException e) {
throw LdapException.newLdapException(ResultCode.PROTOCOL_ERROR,
ERR_EXTOP_PASSMOD_CANNOT_DECODE_REQUEST.get(getExceptionMessage(e)), e);
}
}
return null;
}
/**
* Converts from <code>byte[]</code> to OpenDJ server {@link ByteString}.
*
* @param authenticationValue
* value to convert
* @return the converted value
*/
public static ByteString getCredentials(final byte[] authenticationValue) {
final ASN1Reader reader = ASN1.getReader(authenticationValue);
ByteString saslCred = ByteString.empty();
try {
reader.readOctetStringAsString(); // Reads SASL Mechanism - RFC 4511 4.2
if (reader.hasNextElement()) {
saslCred = reader.readOctetString(); // Reads credentials.
}
} catch (IOException e) {
// Nothing to do.
}
return saslCred.toByteString();
}
/**
* Converts from OpenDJ server
* {@link org.opends.server.admin.std.meta.BackendVLVIndexCfgDefn.Scope} to
* {@link org.forgerock.opendj.server.config.meta.BackendVLVIndexCfgDefn.Scope}.
*
* @param scope
* The scope value.
* @return The converted scope value.
*/
public static BackendVLVIndexCfgDefn.Scope from(
final org.opends.server.admin.std.meta.BackendVLVIndexCfgDefn.Scope scope) {
Reject.ifNull(scope, "Provided scope to convert is null");
switch (scope) {
case BASE_OBJECT:
return BackendVLVIndexCfgDefn.Scope.BASE_OBJECT;
case SINGLE_LEVEL:
return BackendVLVIndexCfgDefn.Scope.SINGLE_LEVEL;
case SUBORDINATE_SUBTREE:
return BackendVLVIndexCfgDefn.Scope.SUBORDINATE_SUBTREE;
case WHOLE_SUBTREE:
return BackendVLVIndexCfgDefn.Scope.WHOLE_SUBTREE;
default:
throw new IllegalArgumentException("Impossible to convert the unknown scope: " + scope);
}
}
}