mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Ludovic Poitou
02.45.2010 749d2b9974d93199ff99e74a95fff4e2a63d235e
Sync from OpenDS (matthew_swift)
Remove Platform class as it is no longer needed.
Remove all getter methods which return passwords as Strings.
Replace all setter methods which accept passwords as Strings with methods which accept passwords as char arrays, as per Java API security recommendations.

1 files deleted
43 files modified
1185 ■■■■ changed files
opendj-sdk/sdk/examples/org/opends/sdk/examples/client/asyncsearch/Main.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/examples/org/opends/sdk/examples/client/modify/Main.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/examples/org/opends/sdk/examples/client/search/Main.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/com/sun/opends/sdk/tools/ApplicationKeyManager.java 20 ●●●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/com/sun/opends/sdk/tools/AuthRate.java 10 ●●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/com/sun/opends/sdk/tools/AuthenticatedConnectionFactory.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/com/sun/opends/sdk/tools/ConnectionFactoryProvider.java 9 ●●●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/com/sun/opends/sdk/tools/LDAPPasswordModify.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/com/sun/opends/sdk/util/Platform.java 834 ●●●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/com/sun/opends/sdk/util/StringPrepProfile.java 16 ●●●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/AbstractConnection.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/ByteString.java 42 ●●●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/Connection.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/KeyManagers.java 16 ●●●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/TrustManagers.java 6 ●●●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/CRAMMD5SASLBindRequest.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/CRAMMD5SASLBindRequestImpl.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/DigestMD5SASLBindRequest.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/DigestMD5SASLBindRequestImpl.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/GSSAPISASLBindRequest.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/GSSAPISASLBindRequestImpl.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/PasswordModifyExtendedRequest.java 26 ●●●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/PasswordModifyExtendedRequestImpl.java 24 ●●●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/PlainSASLBindRequest.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/PlainSASLBindRequestImpl.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/Requests.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/SimpleBindRequest.java 19 ●●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/SimpleBindRequestImpl.java 14 ●●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/UnmodifiableCRAMMD5SASLBindRequestImpl.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/UnmodifiableDigestMD5SASLBindRequestImpl.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/UnmodifiableGSSAPISASLBindRequestImpl.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/UnmodifiablePasswordModifyExtendedRequestImpl.java 12 ●●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/UnmodifiablePlainSASLBindRequestImpl.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/requests/UnmodifiableSimpleBindRequestImpl.java 6 ●●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/responses/PasswordModifyExtendedResult.java 15 ●●●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/responses/PasswordModifyExtendedResultImpl.java 12 ●●●●● patch | view | raw | blame | history
opendj-sdk/sdk/src/org/opends/sdk/responses/UnmodifiablePasswordModifyExtendedResultImpl.java 7 ●●●● patch | view | raw | blame | history
opendj-sdk/sdk/tests/unit-tests-testng/src/org/opends/sdk/ByteStringTestCase.java 32 ●●●●● patch | view | raw | blame | history
opendj-sdk/sdk/tests/unit-tests-testng/src/org/opends/sdk/ConnectionFactoryTestCase.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/tests/unit-tests-testng/src/org/opends/sdk/DNTestCase.java 2 ●●●●● patch | view | raw | blame | history
opendj-sdk/sdk/tests/unit-tests-testng/src/org/opends/sdk/LDAPListenerTestCase.java 8 ●●●● patch | view | raw | blame | history
opendj-sdk/sdk/tests/unit-tests-testng/src/org/opends/sdk/RDNTestCase.java 2 ●●●●● patch | view | raw | blame | history
opendj-sdk/sdk/tests/unit-tests-testng/src/org/opends/sdk/requests/SimpleBindRequestTestCase.java 2 ●●● patch | view | raw | blame | history
opendj-sdk/sdk/tests/unit-tests-testng/src/org/opends/sdk/schema/DistinguishedNameEqualityMatchingRuleTest.java 9 ●●●●● patch | view | raw | blame | history
opendj-sdk/sdk/examples/org/opends/sdk/examples/client/asyncsearch/Main.java
@@ -116,7 +116,7 @@
      Main.connection = connection;
      final BindRequest request = Requests.newSimpleBindRequest(userName,
          password);
          password.toCharArray());
      connection.bind(request, new BindResultHandlerImpl());
    }
opendj-sdk/sdk/examples/org/opends/sdk/examples/client/modify/Main.java
@@ -108,7 +108,7 @@
    try
    {
      connection = factory.getConnection();
      connection.bind(userName, password);
      connection.bind(userName, password.toCharArray());
      // Write the changes.
      final ConnectionChangeRecordWriter writer = new ConnectionChangeRecordWriter(
opendj-sdk/sdk/examples/org/opends/sdk/examples/client/search/Main.java
@@ -120,7 +120,7 @@
    try
    {
      connection = factory.getConnection();
      connection.bind(userName, password);
      connection.bind(userName, password.toCharArray());
      // Read the entries and output them as LDIF.
      final ConnectionEntryReader reader = connection.search(baseDN, scope,
opendj-sdk/sdk/src/com/sun/opends/sdk/tools/ApplicationKeyManager.java
@@ -22,7 +22,7 @@
 * CDDL HEADER END
 *
 *
 *      Copyright 2008-2009 Sun Microsystems, Inc.
 *      Copyright 2008-2010 Sun Microsystems, Inc.
 *      Portions Copyright 2009 Parametric Technology Corporation (PTC)
 */
@@ -41,8 +41,6 @@
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509KeyManager;
import com.sun.opends.sdk.util.Platform;
/**
@@ -88,13 +86,17 @@
    // Handle IBM specific cases if the user did not specify a algorithm
    // and/or provider.
    if (userSpecifiedAlgo == null && Platform.isVendor("IBM"))
    final String vendor = System.getProperty("java.vendor");
    if (vendor.startsWith("IBM"))
    {
      userSpecifiedAlgo = "IbmX509";
    }
    if (userSpecifiedProvider == null && Platform.isVendor("IBM"))
    {
      userSpecifiedProvider = "IBMJSSE2";
      if (userSpecifiedAlgo == null)
      {
        userSpecifiedAlgo = "IbmX509";
      }
      if (userSpecifiedProvider == null)
      {
        userSpecifiedProvider = "IBMJSSE2";
      }
    }
    // Have some fallbacks to choose the provider and algorith of the
opendj-sdk/sdk/src/com/sun/opends/sdk/tools/AuthRate.java
@@ -212,7 +212,7 @@
          if(successRecentCount.get() * ((float)invalidCredPercent/100) >
              invalidCredRecentCount.get())
          {
            sbr.setPassword("invalid-password");
            sbr.setPassword("invalid-password".toCharArray());
          }
          else
          {
@@ -244,7 +244,7 @@
          if(successRecentCount.get() * ((float)invalidCredPercent/100) >
              invalidCredRecentCount.get())
          {
            sbr.setPassword("invalid-password");
            sbr.setPassword("invalid-password".toCharArray());
          }
          else
          {
@@ -268,7 +268,7 @@
          if(successRecentCount.get() * ((float)invalidCredPercent/100) >
              invalidCredRecentCount.get())
          {
            sbr.setPassword("invalid-password");
            sbr.setPassword("invalid-password".toCharArray());
          }
          else
          {
@@ -300,7 +300,7 @@
          if(successRecentCount.get() * ((float)invalidCredPercent/100) >
              invalidCredRecentCount.get())
          {
            sbr.setPassword("invalid-password");
            sbr.setPassword("invalid-password".toCharArray());
          }
          else
          {
@@ -346,7 +346,7 @@
          if(successRecentCount.get() * ((float)invalidCredPercent/100) >
              invalidCredRecentCount.get())
          {
            sbr.setPassword("invalid-password");
            sbr.setPassword("invalid-password".toCharArray());
          }
          else
          {
opendj-sdk/sdk/src/com/sun/opends/sdk/tools/AuthenticatedConnectionFactory.java
@@ -249,7 +249,7 @@
     * method will always throw {@code UnsupportedOperationException}.
     */
    @Override
    public BindResult bind(final String name, final String password)
    public BindResult bind(final String name, final char[] password)
        throws UnsupportedOperationException
    {
      throw new UnsupportedOperationException();
opendj-sdk/sdk/src/com/sun/opends/sdk/tools/ConnectionFactoryProvider.java
@@ -594,8 +594,8 @@
        if (bindNameArg.isPresent() || bindPasswordFileArg.isPresent()
            || bindPasswordArg.isPresent())
        {
          bindRequest =
              Requests.newSimpleBindRequest(getBindName(), getPassword());
          bindRequest = Requests.newSimpleBindRequest(getBindName(),
              getPassword().toCharArray());
        }
      }
      else if (mech.equals(DigestMD5SASLBindRequest.SASL_MECHANISM_NAME))
@@ -836,13 +836,14 @@
    {
      tm = TrustManagers.checkValidityDates(TrustManagers.checkHostName(
          hostNameArg.getValue(), TrustManagers.checkUsingTrustStore(
              trustStorePathArg.getValue(), getTrustStorePIN(), null)));
              trustStorePathArg.getValue(), getTrustStorePIN().toCharArray(),
              null)));
    }
    else if (getTrustStore() != null)
    {
      tm = TrustManagers.checkValidityDates(TrustManagers.checkHostName(
          hostNameArg.getValue(), TrustManagers.checkUsingTrustStore(
              getTrustStore(), getTrustStorePIN(), null)));
              getTrustStore(), getTrustStorePIN().toCharArray(), null)));
    }
    if (app != null && !app.isQuiet())
opendj-sdk/sdk/src/com/sun/opends/sdk/tools/LDAPPasswordModify.java
@@ -488,7 +488,7 @@
    if (result.getGeneratedPassword() != null)
    {
      message = INFO_LDAPPWMOD_GENERATED_PASSWORD.get(result
          .getGeneratedPasswordAsString());
          .getGeneratedPassword().toString());
      println(message);
    }
opendj-sdk/sdk/src/com/sun/opends/sdk/util/Platform.java
File was deleted
opendj-sdk/sdk/src/com/sun/opends/sdk/util/StringPrepProfile.java
@@ -22,7 +22,7 @@
 * CDDL HEADER END
 *
 *
 *      Copyright 2009 Sun Microsystems, Inc.
 *      Copyright 2010 Sun Microsystems, Inc.
 */
package com.sun.opends.sdk.util;
@@ -30,6 +30,8 @@
import static com.sun.opends.sdk.util.Validator.ensureNotNull;
import java.text.Normalizer;
import java.text.Normalizer.Form;
import java.util.HashMap;
import java.util.HashSet;
@@ -492,7 +494,9 @@
        // Map the attribute value.
        map(buffer, sequence.subSequence(i, length), trim, foldCase);
        // Normalize the attribute value.
        normalize(buffer);
        String normalizedForm = Normalizer.normalize(buffer, Form.NFKD);
        buffer.setLength(0);
        buffer.append(normalizedForm);
        break;
      }
      int buffLen = buffer.length();
@@ -575,14 +579,6 @@
  // Normalizes the input string with NFKC Form.
  private static void normalize(final StringBuilder buffer)
  {
    Platform.normalize(buffer);
  }
  // Prevent instantiation.
  private StringPrepProfile()
  {
opendj-sdk/sdk/src/org/opends/sdk/AbstractConnection.java
@@ -147,7 +147,7 @@
  /**
   * {@inheritDoc}
   */
  public BindResult bind(final String name, final String password)
  public BindResult bind(final String name, final char[] password)
      throws ErrorResultException, InterruptedException,
      LocalizedIllegalArgumentException, UnsupportedOperationException,
      IllegalStateException, NullPointerException
opendj-sdk/sdk/src/org/opends/sdk/ByteString.java
@@ -22,7 +22,7 @@
 * CDDL HEADER END
 *
 *
 *      Copyright 2009 Sun Microsystems, Inc.
 *      Copyright 2009-2010 Sun Microsystems, Inc.
 */
package org.opends.sdk;
@@ -30,6 +30,9 @@
import java.io.IOException;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.util.logging.Level;
import com.sun.opends.sdk.util.StaticUtils;
@@ -144,6 +147,26 @@
  /**
   * Returns a byte string containing the UTF-8 encoded bytes of the provided
   * char array.
   *
   * @param chars
   *          The char array to use.
   * @return A byte string containing the UTF-8 encoded bytes of the provided
   *         char array.
   */
  public static ByteString valueOf(final char[] chars)
  {
    Charset utf8 = Charset.forName("UTF-8");
    ByteBuffer buffer = utf8.encode(CharBuffer.wrap(chars));
    byte[] bytes = new byte[buffer.remaining()];
    buffer.get(bytes);
    return wrap(bytes);
  }
  /**
   * Returns a byte string that wraps the provided byte array.
   * <p>
   * <b>NOTE:</b> this method takes ownership of the provided byte array and,
@@ -613,6 +636,23 @@
  /**
   * Returns the UTF-8 decoded char array representation of this byte sequence.
   *
   * @return The UTF-8 decoded char array representation of this byte sequence.
   */
  public char[] toCharArray()
  {
    Charset utf8 = Charset.forName("UTF-8");
    CharBuffer charBuffer = utf8
        .decode(ByteBuffer.wrap(buffer, offset, length));
    char[] chars = new char[charBuffer.remaining()];
    charBuffer.get(chars);
    return chars;
  }
  /**
   * Returns the integer value represented by the first four bytes of this byte
   * string in big-endian order.
   *
opendj-sdk/sdk/src/org/opends/sdk/Connection.java
@@ -249,7 +249,7 @@
   * @throws NullPointerException
   *           If {@code name} or {@code password} was {@code null}.
   */
  BindResult bind(String name, String password) throws ErrorResultException,
  BindResult bind(String name, char[] password) throws ErrorResultException,
      InterruptedException, LocalizedIllegalArgumentException,
      UnsupportedOperationException, IllegalStateException,
      NullPointerException;
opendj-sdk/sdk/src/org/opends/sdk/KeyManagers.java
@@ -267,14 +267,12 @@
   *           If {@code file} was {@code null}.
   */
  public static X509KeyManager useKeyStoreFile(final String file,
      final String password, final String format)
      final char[] password, final String format)
      throws GeneralSecurityException, IOException, NullPointerException
  {
    Validator.ensureNotNull(file);
    final File keyStoreFile = new File(file);
    final char[] keyStorePassword = password != null ? password.toCharArray()
        : null;
    final String keyStoreFormat = format != null ? format : KeyStore
        .getDefaultType();
@@ -284,7 +282,7 @@
    try
    {
      fos = new FileInputStream(keyStoreFile);
      keyStore.load(fos, keyStorePassword);
      keyStore.load(fos, password);
    }
    finally
    {
@@ -303,7 +301,7 @@
    final KeyManagerFactory kmf = KeyManagerFactory
        .getInstance(KeyManagerFactory.getDefaultAlgorithm());
    kmf.init(keyStore, keyStorePassword);
    kmf.init(keyStore, password);
    X509KeyManager x509km = null;
    for (final KeyManager km : kmf.getKeyManagers())
@@ -340,16 +338,14 @@
   * @throws IOException
   *           If the PKCS#11 token could not be found or could not be read.
   */
  public static X509KeyManager usePKCS11Token(final String password)
  public static X509KeyManager usePKCS11Token(final char[] password)
      throws GeneralSecurityException, IOException
  {
    final char[] keyStorePassword = password != null ? password.toCharArray()
        : null;
    final KeyStore keyStore = KeyStore.getInstance("PKCS11");
    keyStore.load(null, keyStorePassword);
    keyStore.load(null, password);
    final KeyManagerFactory kmf = KeyManagerFactory
        .getInstance(KeyManagerFactory.getDefaultAlgorithm());
    kmf.init(keyStore, keyStorePassword);
    kmf.init(keyStore, password);
    X509KeyManager x509km = null;
    for (final KeyManager km : kmf.getKeyManagers())
opendj-sdk/sdk/src/org/opends/sdk/TrustManagers.java
@@ -442,14 +442,12 @@
   *           If {@code file} was {@code null}.
   */
  public static X509TrustManager checkUsingTrustStore(final String file,
      final String password, final String format)
      final char[] password, final String format)
      throws GeneralSecurityException, IOException, NullPointerException
  {
    Validator.ensureNotNull(file);
    final File trustStoreFile = new File(file);
    final char[] trustStorePassword = password != null ? password.toCharArray()
        : null;
    final String trustStoreFormat = format != null ? format : KeyStore
        .getDefaultType();
@@ -459,7 +457,7 @@
    try
    {
      fos = new FileInputStream(trustStoreFile);
      keyStore.load(fos, trustStorePassword);
      keyStore.load(fos, password);
    }
    finally
    {
opendj-sdk/sdk/src/org/opends/sdk/requests/CRAMMD5SASLBindRequest.java
@@ -195,7 +195,7 @@
   * @throws NullPointerException
   *           If {@code password} was {@code null}.
   */
  CRAMMD5SASLBindRequest setPassword(String password)
  CRAMMD5SASLBindRequest setPassword(char[] password)
      throws UnsupportedOperationException, NullPointerException;
}
opendj-sdk/sdk/src/org/opends/sdk/requests/CRAMMD5SASLBindRequestImpl.java
@@ -256,7 +256,7 @@
  /**
   * {@inheritDoc}
   */
  public CRAMMD5SASLBindRequest setPassword(final String password)
  public CRAMMD5SASLBindRequest setPassword(final char[] password)
      throws NullPointerException
  {
    Validator.ensureNotNull(password);
opendj-sdk/sdk/src/org/opends/sdk/requests/DigestMD5SASLBindRequest.java
@@ -508,7 +508,7 @@
   * @throws NullPointerException
   *           If {@code password} was {@code null}.
   */
  DigestMD5SASLBindRequest setPassword(String password)
  DigestMD5SASLBindRequest setPassword(char[] password)
      throws UnsupportedOperationException, NullPointerException;
opendj-sdk/sdk/src/org/opends/sdk/requests/DigestMD5SASLBindRequestImpl.java
@@ -596,7 +596,7 @@
   * {@inheritDoc}
   */
  @Override
  public DigestMD5SASLBindRequest setPassword(final String password)
  public DigestMD5SASLBindRequest setPassword(final char[] password)
      throws NullPointerException
  {
    Validator.ensureNotNull(password);
opendj-sdk/sdk/src/org/opends/sdk/requests/GSSAPISASLBindRequest.java
@@ -457,7 +457,7 @@
   * @throws NullPointerException
   *           If {@code password} was {@code null}.
   */
  GSSAPISASLBindRequest setPassword(String password)
  GSSAPISASLBindRequest setPassword(char[] password)
      throws UnsupportedOperationException, NullPointerException;
opendj-sdk/sdk/src/org/opends/sdk/requests/GSSAPISASLBindRequestImpl.java
@@ -699,7 +699,7 @@
   * {@inheritDoc}
   */
  @Override
  public GSSAPISASLBindRequest setPassword(final String password)
  public GSSAPISASLBindRequest setPassword(final char[] password)
      throws NullPointerException
  {
    Validator.ensureNotNull(password);
opendj-sdk/sdk/src/org/opends/sdk/requests/PasswordModifyExtendedRequest.java
@@ -107,17 +107,6 @@
  /**
   * Returns the desired password for the user decoded as a UTF-8 string, or
   * {@code null} if a new password should be generated.
   *
   * @return The desired password for the user decoded as a UTF-8 string, or
   *         {@code null} if a new password should be generated.
   */
  String getNewPasswordAsString();
  /**
   * {@inheritDoc}
   */
  String getOID();
@@ -135,17 +124,6 @@
  /**
   * Returns the current password for the user, if known, decoded as a UTF-8
   * string.
   *
   * @return The current password for the user decoded as a UTF-8 string, or
   *         {@code null} if the password is not known.
   */
  String getOldPasswordAsString();
  /**
   * {@inheritDoc}
   */
  ExtendedResultDecoder<PasswordModifyExtendedResult> getResultDecoder();
@@ -222,7 +200,7 @@
   *           If this password modify extended request does not permit the new
   *           password to be set.
   */
  PasswordModifyExtendedRequest setNewPassword(String newPassword)
  PasswordModifyExtendedRequest setNewPassword(char[] newPassword)
      throws UnsupportedOperationException;
@@ -255,7 +233,7 @@
   *           If this password modify extended request does not permit the old
   *           password to be set.
   */
  PasswordModifyExtendedRequest setOldPassword(String oldPassword)
  PasswordModifyExtendedRequest setOldPassword(char[] oldPassword)
      throws UnsupportedOperationException;
opendj-sdk/sdk/src/org/opends/sdk/requests/PasswordModifyExtendedRequestImpl.java
@@ -243,16 +243,6 @@
  /**
   * {@inheritDoc}
   */
  public String getNewPasswordAsString()
  {
    return newPassword != null ? newPassword.toString() : null;
  }
  /**
   * {@inheritDoc}
   */
  @Override
  public String getOID()
  {
@@ -274,16 +264,6 @@
  /**
   * {@inheritDoc}
   */
  public String getOldPasswordAsString()
  {
    return oldPassword != null ? oldPassword.toString() : null;
  }
  /**
   * {@inheritDoc}
   */
  @Override
  public ExtendedResultDecoder<PasswordModifyExtendedResult> getResultDecoder()
  {
@@ -375,7 +355,7 @@
  /**
   * {@inheritDoc}
   */
  public PasswordModifyExtendedRequest setNewPassword(final String newPassword)
  public PasswordModifyExtendedRequest setNewPassword(final char[] newPassword)
  {
    this.newPassword = (newPassword != null) ? ByteString.valueOf(newPassword)
        : null;
@@ -399,7 +379,7 @@
  /**
   * {@inheritDoc}
   */
  public PasswordModifyExtendedRequest setOldPassword(final String oldPassword)
  public PasswordModifyExtendedRequest setOldPassword(final char[] oldPassword)
  {
    this.oldPassword = (oldPassword != null) ? ByteString.valueOf(oldPassword)
        : null;
opendj-sdk/sdk/src/org/opends/sdk/requests/PlainSASLBindRequest.java
@@ -224,6 +224,6 @@
   * @throws NullPointerException
   *           If {@code password} was {@code null}.
   */
  PlainSASLBindRequest setPassword(String password)
  PlainSASLBindRequest setPassword(char[] password)
      throws UnsupportedOperationException, NullPointerException;
}
opendj-sdk/sdk/src/org/opends/sdk/requests/PlainSASLBindRequestImpl.java
@@ -242,7 +242,7 @@
  /**
   * {@inheritDoc}
   */
  public PlainSASLBindRequest setPassword(final String password)
  public PlainSASLBindRequest setPassword(final char[] password)
      throws NullPointerException
  {
    Validator.ensureNotNull(password);
opendj-sdk/sdk/src/org/opends/sdk/requests/Requests.java
@@ -835,7 +835,7 @@
   *           If {@code name} or {@code password} was {@code null}.
   */
  public static SimpleBindRequest newSimpleBindRequest(final String name,
      final String password) throws NullPointerException
      final char[] password) throws NullPointerException
  {
    Validator.ensureNotNull(name, password);
    return new SimpleBindRequestImpl(name, ByteString.valueOf(password));
opendj-sdk/sdk/src/org/opends/sdk/requests/SimpleBindRequest.java
@@ -22,7 +22,7 @@
 * CDDL HEADER END
 *
 *
 *      Copyright 2009 Sun Microsystems, Inc.
 *      Copyright 2009-2010 Sun Microsystems, Inc.
 */
package org.opends.sdk.requests;
@@ -114,18 +114,6 @@
  /**
   * Returns the password of the Directory object that the client wishes to bind
   * as decoded as a UTF-8 string. The password may be empty (but never {@code
   * null}) when used for of anonymous or unauthenticated binds.
   *
   * @return The password of the Directory object that the client wishes to bind
   *         as decoded as a UTF-8 string.
   */
  String getPasswordAsString();
  /**
   * Sets the name of the Directory object that the client wishes to bind as.
   * The name may be empty (but never {@code null} when used for of anonymous
   * binds, or when using SASL authentication. The server shall not dereference
@@ -174,7 +162,8 @@
   * Sets the password of the Directory object that the client wishes to bind
   * as. The password will be converted to a UTF-8 octet string. The password
   * may be empty (but never {@code null}) when used for of anonymous or
   * unauthenticated binds.
   * unauthenticated binds. Subsequent modifications to the {@code password}
   * array will not alter this bind request.
   *
   * @param password
   *          The password of the Directory object that the client wishes to
@@ -186,7 +175,7 @@
   * @throws NullPointerException
   *           If {@code password} was {@code null}.
   */
  SimpleBindRequest setPassword(String password)
  SimpleBindRequest setPassword(char[] password)
      throws UnsupportedOperationException, NullPointerException;
}
opendj-sdk/sdk/src/org/opends/sdk/requests/SimpleBindRequestImpl.java
@@ -131,16 +131,6 @@
  /**
   * {@inheritDoc}
   */
  public String getPasswordAsString()
  {
    return password.toString();
  }
  /**
   * {@inheritDoc}
   */
  public SimpleBindRequest setName(final String name)
      throws UnsupportedOperationException, NullPointerException
  {
@@ -167,7 +157,7 @@
  /**
   * {@inheritDoc}
   */
  public SimpleBindRequest setPassword(final String password)
  public SimpleBindRequest setPassword(final char[] password)
      throws UnsupportedOperationException, NullPointerException
  {
    Validator.ensureNotNull(password);
@@ -188,7 +178,7 @@
    builder.append(getName());
    builder.append(", authentication=simple");
    builder.append(", password=");
    builder.append(getPasswordAsString());
    builder.append(getPassword());
    builder.append(", controls=");
    builder.append(getControls());
    builder.append(")");
opendj-sdk/sdk/src/org/opends/sdk/requests/UnmodifiableCRAMMD5SASLBindRequestImpl.java
@@ -64,7 +64,7 @@
  }
  @Override
  public CRAMMD5SASLBindRequest setPassword(String password)
  public CRAMMD5SASLBindRequest setPassword(char[] password)
      throws UnsupportedOperationException, NullPointerException {
    throw new UnsupportedOperationException();
  }
opendj-sdk/sdk/src/org/opends/sdk/requests/UnmodifiableDigestMD5SASLBindRequestImpl.java
@@ -146,7 +146,7 @@
  }
  @Override
  public DigestMD5SASLBindRequest setPassword(String password)
  public DigestMD5SASLBindRequest setPassword(char[] password)
      throws UnsupportedOperationException, NullPointerException {
    throw new UnsupportedOperationException();
  }
opendj-sdk/sdk/src/org/opends/sdk/requests/UnmodifiableGSSAPISASLBindRequestImpl.java
@@ -150,7 +150,7 @@
  }
  @Override
  public GSSAPISASLBindRequest setPassword(String password)
  public GSSAPISASLBindRequest setPassword(char[] password)
      throws UnsupportedOperationException, NullPointerException {
    throw new UnsupportedOperationException();
  }
opendj-sdk/sdk/src/org/opends/sdk/requests/UnmodifiablePasswordModifyExtendedRequestImpl.java
@@ -47,18 +47,10 @@
    return impl.getNewPassword();
  }
  public String getNewPasswordAsString() {
    return impl.getNewPasswordAsString();
  }
  public ByteString getOldPassword() {
    return impl.getOldPassword();
  }
  public String getOldPasswordAsString() {
    return impl.getOldPasswordAsString();
  }
  public ByteString getUserIdentity() {
    return impl.getUserIdentity();
  }
@@ -72,7 +64,7 @@
    throw new UnsupportedOperationException();
  }
  public PasswordModifyExtendedRequest setNewPassword(String newPassword) {
  public PasswordModifyExtendedRequest setNewPassword(char[] newPassword) {
    throw new UnsupportedOperationException();
  }
@@ -81,7 +73,7 @@
    throw new UnsupportedOperationException();
  }
  public PasswordModifyExtendedRequest setOldPassword(String oldPassword) {
  public PasswordModifyExtendedRequest setOldPassword(char[] oldPassword) {
    throw new UnsupportedOperationException();
  }
opendj-sdk/sdk/src/org/opends/sdk/requests/UnmodifiablePlainSASLBindRequestImpl.java
@@ -76,7 +76,7 @@
  }
  @Override
  public PlainSASLBindRequest setPassword(String password)
  public PlainSASLBindRequest setPassword(char[] password)
      throws UnsupportedOperationException, NullPointerException {
    throw new UnsupportedOperationException();
  }
opendj-sdk/sdk/src/org/opends/sdk/requests/UnmodifiableSimpleBindRequestImpl.java
@@ -44,10 +44,6 @@
    return impl.getPassword();
  }
  public String getPasswordAsString() {
    return impl.getPasswordAsString();
  }
  public SimpleBindRequest setName(String name)
      throws UnsupportedOperationException, NullPointerException {
    throw new UnsupportedOperationException();
@@ -58,7 +54,7 @@
    throw new UnsupportedOperationException();
  }
  public SimpleBindRequest setPassword(String password)
  public SimpleBindRequest setPassword(char[] password)
      throws UnsupportedOperationException, NullPointerException {
    throw new UnsupportedOperationException();
  }
opendj-sdk/sdk/src/org/opends/sdk/responses/PasswordModifyExtendedResult.java
@@ -109,19 +109,6 @@
  /**
   * Returns the newly generated password decoded as a UTF-8 string, but only if
   * the password modify request succeeded and a generated password was
   * requested.
   *
   * @return The newly generated password decoded as a UTF-8 string, or {@code
   *         null} if the password modify request failed or a generated password
   *         was not requested.
   */
  String getGeneratedPasswordAsString();
  /**
   * {@inheritDoc}
   */
  String getMatchedDN();
@@ -221,7 +208,7 @@
   *           If this password modify extended result does not permit the
   *           generated password to be set.
   */
  PasswordModifyExtendedResult setGeneratedPassword(String password)
  PasswordModifyExtendedResult setGeneratedPassword(char[] password)
      throws UnsupportedOperationException;
opendj-sdk/sdk/src/org/opends/sdk/responses/PasswordModifyExtendedResultImpl.java
@@ -97,16 +97,6 @@
  /**
   * {@inheritDoc}
   */
  public String getGeneratedPasswordAsString()
  {
    return password != null ? password.toString() : null;
  }
  /**
   * {@inheritDoc}
   */
  @Override
  public String getOID()
  {
@@ -174,7 +164,7 @@
   * {@inheritDoc}
   */
  public PasswordModifyExtendedResult setGeneratedPassword(
      final String password) throws UnsupportedOperationException
      final char[] password) throws UnsupportedOperationException
  {
    this.password = (password != null) ? ByteString.valueOf(password) : null;
    return this;
opendj-sdk/sdk/src/org/opends/sdk/responses/UnmodifiablePasswordModifyExtendedResultImpl.java
@@ -47,11 +47,6 @@
  }
  @Override
  public String getGeneratedPasswordAsString() {
    return impl.getGeneratedPasswordAsString();
  }
  @Override
  public PasswordModifyExtendedResult setGeneratedPassword(ByteString password)
      throws UnsupportedOperationException
  {
@@ -59,7 +54,7 @@
  }
  @Override
  public PasswordModifyExtendedResult setGeneratedPassword(String password)
  public PasswordModifyExtendedResult setGeneratedPassword(char[] password)
      throws UnsupportedOperationException {
    throw new UnsupportedOperationException();
  }
opendj-sdk/sdk/tests/unit-tests-testng/src/org/opends/sdk/ByteStringTestCase.java
@@ -29,6 +29,8 @@
import java.util.Arrays;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
@@ -102,7 +104,7 @@
  @DataProvider(name = "byteStringIntegerProvier")
  @DataProvider(name = "byteStringIntegerProvider")
  public Object[][] byteStringIntegerProvider()
  {
    return new Object[][] { { ByteString.valueOf(0), 0 },
@@ -113,7 +115,7 @@
  @DataProvider(name = "byteStringLongProvier")
  @DataProvider(name = "byteStringLongProvider")
  public Object[][] byteStringLongProvider()
  {
    return new Object[][] { { ByteString.valueOf(0L), 0L },
@@ -124,6 +126,14 @@
  @DataProvider(name = "byteStringCharArrayProvider")
  public Object[][] byteStringCharArrayProvider()
  {
    return new Object[][] { { "" }, { "1" }, { "1234567890" } };
  }
  @Test(expectedExceptions = IndexOutOfBoundsException.class)
  public void testInvalidWrapLength()
  {
@@ -149,6 +159,24 @@
  @Test(dataProvider = "byteStringCharArrayProvider")
  public void testToCharArray(final String s)
  {
    ByteString bs = ByteString.valueOf(s);
    Assert.assertTrue(Arrays.equals(bs.toCharArray(), s.toCharArray()));
  }
  @Test(dataProvider = "byteStringCharArrayProvider")
  public void testValueOfCharArray(final String s)
  {
    ByteString bs = ByteString.valueOf(s.toCharArray());
    Assert.assertEquals(bs.toString(), s);
  }
  @Test(expectedExceptions = IndexOutOfBoundsException.class)
  public void testUndersizedToInteger()
  {
opendj-sdk/sdk/tests/unit-tests-testng/src/org/opends/sdk/ConnectionFactoryTestCase.java
@@ -149,7 +149,7 @@
    // AuthenticatedConnectionFactory
    factories[2][0] = new AuthenticatedConnectionFactory(
        new LDAPConnectionFactory("localhost", TestCaseUtils.getLdapPort()),
        Requests.newSimpleBindRequest("", ""));
        Requests.newSimpleBindRequest("", new char[0]));
    // AuthenticatedConnectionFactory with multi-stage SASL
    factories[3][0] = new AuthenticatedConnectionFactory(
opendj-sdk/sdk/tests/unit-tests-testng/src/org/opends/sdk/DNTestCase.java
@@ -37,8 +37,6 @@
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import com.sun.opends.sdk.util.Platform;
/**
opendj-sdk/sdk/tests/unit-tests-testng/src/org/opends/sdk/LDAPListenerTestCase.java
@@ -748,7 +748,7 @@
            proxyListener.getSocketAddress()).getConnection();
        try
        {
          connection.bind("cn=test", "password");
          connection.bind("cn=test", "password".toCharArray());
          Assert.assertTrue(proxyServerConnection.isConnected.await(10,
              TimeUnit.SECONDS));
@@ -961,7 +961,7 @@
            proxyListener.getSocketAddress()).getConnection();
        try
        {
          connection.bind("cn=test", "password");
          connection.bind("cn=test", "password".toCharArray());
          Assert.assertTrue(proxyServerConnection.isConnected.await(10,
              TimeUnit.SECONDS));
@@ -1012,7 +1012,7 @@
          onlineServerListener.getSocketAddress()).getConnection();
      try
      {
        connection.bind("cn=test", "password");
        connection.bind("cn=test", "password".toCharArray());
      }
      catch (final ErrorResultException e)
      {
@@ -1043,7 +1043,7 @@
    try
    {
      connection.bind("cn=test", "password");
      connection.bind("cn=test", "password".toCharArray());
      Assert.fail("Bind attempt on closed connection succeeded unexpectedly");
    }
    catch (final ErrorResultException e)
opendj-sdk/sdk/tests/unit-tests-testng/src/org/opends/sdk/RDNTestCase.java
@@ -42,8 +42,6 @@
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import com.sun.opends.sdk.util.Platform;
/**
opendj-sdk/sdk/tests/unit-tests-testng/src/org/opends/sdk/requests/SimpleBindRequestTestCase.java
@@ -42,7 +42,7 @@
  public Object[][] getSimpleBindRequests() throws Exception
  {
    final SimpleBindRequest[] requests = { Requests.newSimpleBindRequest(),// anonymous;
        Requests.newSimpleBindRequest("username", "password") };
        Requests.newSimpleBindRequest("username", "password".toCharArray()) };
    final Object[][] objArray = new Object[requests.length][1];
    for (int i = 0; i < requests.length; i++)
    {
opendj-sdk/sdk/tests/unit-tests-testng/src/org/opends/sdk/schema/DistinguishedNameEqualityMatchingRuleTest.java
@@ -27,13 +27,15 @@
package org.opends.sdk.schema;
import java.text.Normalizer;
import java.text.Normalizer.Form;
import org.testng.annotations.Test;
import org.testng.annotations.DataProvider;
import static org.testng.Assert.assertEquals;
import org.opends.sdk.ConditionResult;
import org.opends.sdk.ByteString;
import static org.opends.sdk.schema.SchemaConstants.EMR_DN_OID;
import com.sun.opends.sdk.util.Platform;
/**
 * Test the DistinguishedNameEqualityMatchingRule
@@ -204,9 +206,8 @@
    final ByteString normalizedValue1 = rule.normalizeAttributeValue(ByteString
        .valueOf(value1));
    StringBuilder buffer = new StringBuilder(value2);
    Platform.normalize(buffer);
    final ByteString expectedValue = ByteString.valueOf(buffer);
    final ByteString expectedValue = ByteString.valueOf(Normalizer.normalize(
        value2, Form.NFKD));
    assertEquals(normalizedValue1, expectedValue);
  }
}