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

Jean-Noël Rouvignac
08.43.2016 6197694d7a07265b2693158cffe91e3afb977b81
Code cleanup

RemoteConnection must always check that end of file has not been reached
2 files modified
193 ■■■■■ changed files
opendj-server-legacy/src/main/java/org/opends/server/tools/LDAPConnection.java 143 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/test/java/org/opends/server/tools/RemoteConnection.java 50 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/LDAPConnection.java
@@ -15,6 +15,7 @@
 * Portions Copyright 2013-2016 ForgeRock AS.
 */
package org.opends.server.tools;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ConnectException;
@@ -26,32 +27,32 @@
import java.util.concurrent.atomic.AtomicInteger;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.ldap.ByteString;
import org.opends.server.controls.AuthorizationIdentityResponseControl;
import org.opends.server.controls.ControlDecoder;
import org.opends.server.controls.PasswordExpiringControl;
import org.opends.server.controls.PasswordPolicyErrorType;
import org.opends.server.controls.PasswordPolicyResponseControl;
import org.opends.server.controls.PasswordPolicyWarningType;
import org.opends.server.loggers.JDKLogging;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.opends.server.protocols.ldap.ExtendedRequestProtocolOp;
import org.opends.server.protocols.ldap.ExtendedResponseProtocolOp;
import org.opends.server.protocols.ldap.LDAPControl;
import org.opends.server.protocols.ldap.LDAPMessage;
import org.opends.server.protocols.ldap.UnbindRequestProtocolOp;
import org.forgerock.opendj.ldap.ByteString;
import org.opends.server.types.Control;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.LDAPException;
import com.forgerock.opendj.cli.ClientException;
import static org.opends.messages.CoreMessages.*;
import static org.opends.messages.ToolMessages.*;
import static org.opends.server.protocols.ldap.LDAPResultCode.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
/**
 * This class provides a tool that can be used to issue search requests to the
 * Directory Server.
@@ -121,7 +122,7 @@
  public void connectToHost(String bindDN, String bindPassword)
         throws LDAPConnectionException
  {
    connectToHost(bindDN, bindPassword, new AtomicInteger(1));
    connectToHost(bindDN, bindPassword, new AtomicInteger(1), 0);
  }
  /**
@@ -180,7 +181,6 @@
      JDKLogging.disableLogging();
    }
    if(connectionOptions.useStartTLS())
    {
      try
@@ -208,18 +208,17 @@
      try
      {
        ldapWriter.writeMessage(msg);
        // Read the response from the server.
        msg = ldapReader.readMessage();
      }catch (LDAPException ex1)
      }
      catch (LDAPException e)
      {
        logger.traceException(ex1);
        throw new LDAPConnectionException(LocalizableMessage.raw(ex1.getMessage()), ex1
            .getResultCode(), null, ex1);
      } catch (Exception ex1)
        logger.traceException(e);
        throw new LDAPConnectionException(e.getMessageObject(), e.getResultCode(), null, e);
      }
      catch (Exception e)
      {
        logger.traceException(ex1);
        throw new LDAPConnectionException(LocalizableMessage.raw(ex1.getMessage()), ex1);
        logger.traceException(e);
        throw new LDAPConnectionException(LocalizableMessage.raw(e.getMessage()), e);
      }
      ExtendedResponseProtocolOp res = msg.getExtendedResponseProtocolOp();
      resultCode = res.getResultCode();
@@ -271,7 +270,6 @@
    {
      requestControls.add(new LDAPControl(OID_AUTHZID_REQUEST));
    }
    if (connectionOptions.usePasswordPolicyControl())
    {
      requestControls.add(new LDAPControl(OID_PASSWORD_POLICY_CONTROL));
@@ -281,25 +279,8 @@
         ldapReader, ldapWriter, hostName, nextMessageID);
    try
    {
      ByteString bindDNBytes;
      if(bindDN == null)
      {
        bindDNBytes = ByteString.empty();
      }
      else
      {
        bindDNBytes = ByteString.valueOfUtf8(bindDN);
      }
      ByteString bindPW;
      if (bindPassword == null)
      {
        bindPW =  null;
      }
      else
      {
        bindPW = ByteString.valueOfUtf8(bindPassword);
      }
      ByteString bindDNBytes = bindDN != null ? ByteString.valueOfUtf8(bindDN) : ByteString.empty();
      ByteString bindPW = bindPassword != null ? ByteString.valueOfUtf8(bindPassword) : null;
      String result = null;
      if (connectionOptions.useSASLExternal())
@@ -310,7 +291,8 @@
      }
      else if (connectionOptions.getSASLMechanism() != null)
      {
            result = handler.doSASLBind(bindDNBytes, bindPW,
        result = handler.doSASLBind(bindDNBytes,
                                    bindPW,
            connectionOptions.getSASLMechanism(),
            connectionOptions.getSASLProperties(),
            requestControls, responseControls);
@@ -329,63 +311,22 @@
      {
        if (c.getOID().equals(OID_AUTHZID_RESPONSE))
        {
          AuthorizationIdentityResponseControl control;
          if (c instanceof LDAPControl)
          {
            // We have to decode this control.
            control = AuthorizationIdentityResponseControl.DECODER.decode(c
                .isCritical(), ((LDAPControl) c).getValue());
          }
          else
          {
            // Control should already have been decoded.
            control = (AuthorizationIdentityResponseControl)c;
          }
          LocalizableMessage message =
              INFO_BIND_AUTHZID_RETURNED.get(
                  control.getAuthorizationID());
          out.println(message);
          AuthorizationIdentityResponseControl control = decode(c, AuthorizationIdentityResponseControl.DECODER);
          out.println(INFO_BIND_AUTHZID_RETURNED.get(control.getAuthorizationID()));
        }
        else if (c.getOID().equals(OID_NS_PASSWORD_EXPIRED))
        {
          LocalizableMessage message = INFO_BIND_PASSWORD_EXPIRED.get();
          out.println(message);
          out.println(INFO_BIND_PASSWORD_EXPIRED.get());
        }
        else if (c.getOID().equals(OID_NS_PASSWORD_EXPIRING))
        {
          PasswordExpiringControl control;
          if(c instanceof LDAPControl)
          {
            // We have to decode this control.
            control = PasswordExpiringControl.DECODER.decode(c.isCritical(),
                ((LDAPControl) c).getValue());
          }
          else
          {
            // Control should already have been decoded.
            control = (PasswordExpiringControl)c;
          }
          LocalizableMessage timeString =
               secondsToTimeString(control.getSecondsUntilExpiration());
          LocalizableMessage message = INFO_BIND_PASSWORD_EXPIRING.get(timeString);
          out.println(message);
          PasswordExpiringControl control = decode(c, PasswordExpiringControl.DECODER);
          LocalizableMessage timeString = secondsToTimeString(control.getSecondsUntilExpiration());
          out.println(INFO_BIND_PASSWORD_EXPIRING.get(timeString));
        }
        else if (c.getOID().equals(OID_PASSWORD_POLICY_CONTROL))
        {
          PasswordPolicyResponseControl pwPolicyControl;
          if(c instanceof LDAPControl)
          {
            pwPolicyControl = PasswordPolicyResponseControl.DECODER.decode(c
                .isCritical(), ((LDAPControl) c).getValue());
          }
          else
          {
            pwPolicyControl = (PasswordPolicyResponseControl)c;
          }
          PasswordPolicyResponseControl pwPolicyControl = decode(c, PasswordPolicyResponseControl.DECODER);
          PasswordPolicyErrorType errorType = pwPolicyControl.getErrorType();
          if (errorType != null)
@@ -393,19 +334,13 @@
            switch (errorType)
            {
              case PASSWORD_EXPIRED:
                LocalizableMessage message = INFO_BIND_PASSWORD_EXPIRED.get();
                out.println(message);
                out.println(INFO_BIND_PASSWORD_EXPIRED.get());
                break;
              case ACCOUNT_LOCKED:
                message = INFO_BIND_ACCOUNT_LOCKED.get();
                out.println(message);
                out.println(INFO_BIND_ACCOUNT_LOCKED.get());
                break;
              case CHANGE_AFTER_RESET:
                message = INFO_BIND_MUST_CHANGE_PASSWORD.get();
                out.println(message);
                out.println(INFO_BIND_MUST_CHANGE_PASSWORD.get());
                break;
            }
          }
@@ -419,16 +354,10 @@
              case TIME_BEFORE_EXPIRATION:
                LocalizableMessage timeString =
                     secondsToTimeString(pwPolicyControl.getWarningValue());
                LocalizableMessage message = INFO_BIND_PASSWORD_EXPIRING.get(timeString);
                out.println(message);
                out.println(INFO_BIND_PASSWORD_EXPIRING.get(timeString));
                break;
              case GRACE_LOGINS_REMAINING:
                message = INFO_BIND_GRACE_LOGINS_REMAINING.get(
                        pwPolicyControl.getWarningValue());
                out.println(message);
                out.println(INFO_BIND_GRACE_LOGINS_REMAINING.get(pwPolicyControl.getWarningValue()));
                break;
            }
          }
@@ -470,7 +399,17 @@
        }
      }
    }
  }
  private <T extends Control> T decode(Control c, ControlDecoder<T> decoder) throws DirectoryException
  {
    if (c instanceof LDAPControl)
    {
      // We have to decode this control.
      return decoder.decode(c.isCritical(), ((LDAPControl) c).getValue());
    }
    // Control should already have been decoded.
    return (T) c;
  }
  /**
@@ -680,6 +619,4 @@
  {
    return ldapReader;
  }
}
opendj-server-legacy/src/test/java/org/opends/server/tools/RemoteConnection.java
@@ -19,6 +19,7 @@
import static org.forgerock.opendj.ldap.requests.Requests.*;
import java.io.Closeable;
import java.io.EOFException;
import java.io.IOException;
import java.net.Socket;
import java.security.SecureRandom;
@@ -123,11 +124,12 @@
      List<Control> controls) throws IOException, LDAPException
  {
    writeMessage(new BindRequestProtocolOp(bs(bindDN), 3, bs(bindPassword)), to(controls));
    LDAPMessage message = r.readMessage();
    LDAPMessage message = readMessage();
    if (throwOnExceptionalResultCode)
    {
      BindResponseProtocolOp response = message.getBindResponseProtocolOp();
      return validateNoException(message, response.getResultCode(), response.getErrorMessage());
      validateNoException(response.getResultCode(), response.getErrorMessage());
      return message;
    }
    return message;
  }
@@ -146,11 +148,12 @@
      throws IOException, LDAPException
  {
    writeMessage(addProtocolOp(addRequest), to(addRequest.getControls()));
    LDAPMessage message = r.readMessage();
    LDAPMessage message = readMessage();
    if (throwOnExceptionalResultCode)
    {
      AddResponseProtocolOp response = message.getAddResponseProtocolOp();
      return validateNoException(message, response.getResultCode(), response.getErrorMessage());
      validateNoException(response.getResultCode(), response.getErrorMessage());
      return message;
    }
    return message;
  }
@@ -182,13 +185,13 @@
  {
    List<SearchResultEntryProtocolOp> entries = new ArrayList<>();
    LDAPMessage msg;
    while ((msg = r.readMessage()) != null)
    while ((msg = readMessage()) != null)
    {
      ProtocolOp protocolOp = msg.getProtocolOp();
      if (protocolOp instanceof SearchResultDoneProtocolOp)
      {
        SearchResultDoneProtocolOp done = (SearchResultDoneProtocolOp) protocolOp;
        validateNoException(msg, done.getResultCode(), done.getErrorMessage());
        validateNoException(done.getResultCode(), done.getErrorMessage());
        return entries;
      }
      else if (protocolOp instanceof SearchResultEntryProtocolOp)
@@ -212,11 +215,12 @@
      throws IOException, LDAPException
  {
    writeMessage(modifyProtocolOp(modifyRequest), to(modifyRequest.getControls()));
    LDAPMessage message = r.readMessage();
    LDAPMessage message = readMessage();
    if (throwOnExceptionalResultCode)
    {
      ModifyResponseProtocolOp response = message.getModifyResponseProtocolOp();
      return validateNoException(message, response.getResultCode(), response.getErrorMessage());
      validateNoException(response.getResultCode(), response.getErrorMessage());
      return message;
    }
    return message;
  }
@@ -230,7 +234,7 @@
      throws IOException, LDAPException
  {
    writeMessage(new ModifyDNRequestProtocolOp(bs(entryDN), bs(newRDN), deleteOldRDN));
    return r.readMessage().getModifyDNResponseProtocolOp();
    return readMessage().getModifyDNResponseProtocolOp();
  }
  public LDAPMessage modifyDN(ModifyDNRequest modifyDNRequest) throws IOException, LDAPException
@@ -242,11 +246,12 @@
      throws IOException, LDAPException
  {
    writeMessage(modDNProtocolOp(modifyDNRequest), to(modifyDNRequest.getControls()));
    LDAPMessage message = r.readMessage();
    LDAPMessage message = readMessage();
    if (throwOnExceptionalResultCode)
    {
      ModifyDNResponseProtocolOp response = message.getModifyDNResponseProtocolOp();
      return validateNoException(message, response.getResultCode(), response.getErrorMessage());
      validateNoException(response.getResultCode(), response.getErrorMessage());
      return message;
    }
    return message;
  }
@@ -261,11 +266,12 @@
      throws IOException, LDAPException
  {
    writeMessage(compareProtocolOp(compareRequest), to(compareRequest.getControls()));
    LDAPMessage message = r.readMessage();
    LDAPMessage message = readMessage();
    if (throwOnExceptionalResultCode)
    {
      CompareResponseProtocolOp response = message.getCompareResponseProtocolOp();
      return validateNoException(message, response.getResultCode(), response.getErrorMessage());
      validateNoException(response.getResultCode(), response.getErrorMessage());
      return message;
    }
    return message;
  }
@@ -284,11 +290,12 @@
      throws IOException, LDAPException
  {
    writeMessage(new DeleteRequestProtocolOp(bs(deleteRequest.getName())), to(deleteRequest.getControls()));
    LDAPMessage message = r.readMessage();
    LDAPMessage message = readMessage();
    if (throwOnExceptionalResultCode)
    {
      DeleteResponseProtocolOp response = message.getDeleteResponseProtocolOp();
      return validateNoException(message, response.getResultCode(), response.getErrorMessage());
      validateNoException(response.getResultCode(), response.getErrorMessage());
      return message;
    }
    return message;
  }
@@ -302,7 +309,7 @@
      throws IOException, LDAPException
  {
    writeMessage(new ExtendedRequestProtocolOp(oid, requestValue));
    return r.readMessage();
    return readMessage();
  }
  private ByteString bs(Object o)
@@ -327,18 +334,21 @@
  public LDAPMessage readMessage() throws IOException, LDAPException
  {
    return r.readMessage();
    final LDAPMessage message = r.readMessage();
    if (message != null)
    {
      return message;
    }
    throw new EOFException();
  }
  private LDAPMessage validateNoException(LDAPMessage message, int resultCode, LocalizableMessage errorMessage)
      throws LdapException
  private void validateNoException(int resultCode, LocalizableMessage errorMessage) throws LdapException
  {
    ResultCode rc = ResultCode.valueOf(resultCode);
    if (rc.isExceptional())
    {
      throw LdapException.newLdapException(rc, errorMessage);
    }
    return message;
  }
  public LDAPWriter getLdapWriter()