From 22094368c2865dcfb6daf8366425212b721a4657 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Thu, 05 Feb 2009 17:42:14 +0000
Subject: [PATCH] Merge ASN1 branch to trunk

---
 opends/src/server/org/opends/server/tools/LDAPConnection.java |  130 +++++++++++++++++++++++++++++--------------
 1 files changed, 87 insertions(+), 43 deletions(-)

diff --git a/opends/src/server/org/opends/server/tools/LDAPConnection.java b/opends/src/server/org/opends/server/tools/LDAPConnection.java
index 26ec6b3..e8d39fe 100644
--- a/opends/src/server/org/opends/server/tools/LDAPConnection.java
+++ b/opends/src/server/org/opends/server/tools/LDAPConnection.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2009 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
 import org.opends.messages.Message;
@@ -35,11 +35,7 @@
 import java.util.ArrayList;
 import java.util.concurrent.atomic.AtomicInteger;
 
-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.protocols.asn1.ASN1OctetString;
+import org.opends.server.controls.*;
 import org.opends.server.protocols.ldap.ExtendedRequestProtocolOp;
 import org.opends.server.protocols.ldap.ExtendedResponseProtocolOp;
 import org.opends.server.protocols.ldap.LDAPControl;
@@ -47,10 +43,14 @@
 import org.opends.server.protocols.ldap.UnbindRequestProtocolOp;
 import org.opends.server.types.Control;
 import org.opends.server.types.DebugLogLevel;
+import org.opends.server.types.DirectoryException;
+import org.opends.server.types.ByteString;
 import org.opends.server.types.LDAPException;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.loggers.debug.DebugLogger;
+import org.opends.server.loggers.debug.TraceSettings;
 import static org.opends.messages.CoreMessages.
                    INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR;
 import static org.opends.messages.ToolMessages.*;
@@ -155,18 +155,24 @@
     Socket socket;
     Socket startTLSSocket = null;
     int resultCode;
-    ArrayList<LDAPControl> requestControls = new ArrayList<LDAPControl> ();
-    ArrayList<LDAPControl> responseControls = new ArrayList<LDAPControl> ();
+    ArrayList<Control> requestControls = new ArrayList<Control> ();
+    ArrayList<Control> responseControls = new ArrayList<Control> ();
 
-    VerboseTracer tracer =
-         new VerboseTracer(connectionOptions.isVerbose(), err);
+    if(connectionOptions.isVerbose())
+    {
+      ConsoleDebugLogPublisher publisher = new ConsoleDebugLogPublisher(err);
+      publisher.addTraceSettings(null,
+          new TraceSettings(DebugLogLevel.VERBOSE));
+      DebugLogger.addDebugLogPublisher(publisher);
+    }
+
     if(connectionOptions.useStartTLS())
     {
       try
       {
         startTLSSocket = new Socket(hostName, portNumber);
-        ldapWriter = new LDAPWriter(startTLSSocket, tracer);
-        ldapReader = new LDAPReader(startTLSSocket, tracer);
+        ldapWriter = new LDAPWriter(startTLSSocket);
+        ldapReader = new LDAPReader(startTLSSocket);
       } catch(UnknownHostException uhe)
       {
         Message msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
@@ -235,8 +241,8 @@
       {
         socket = new Socket(hostName, portNumber);
       }
-      ldapWriter = new LDAPWriter(socket, tracer);
-      ldapReader = new LDAPReader(socket, tracer);
+      ldapWriter = new LDAPWriter(socket);
+      ldapReader = new LDAPReader(socket);
     } catch(UnknownHostException uhe)
     {
       Message msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
@@ -285,34 +291,43 @@
          ldapReader, ldapWriter, hostName, nextMessageID);
     try
     {
-      ASN1OctetString bindPW;
-      if (bindPassword == null)
+      ByteString bindDNBytes;
+      if(bindDN == null)
       {
-        bindPW = null;
+        bindDNBytes = ByteString.empty();
       }
       else
       {
-        bindPW = new ASN1OctetString(bindPassword);
+        bindDNBytes = ByteString.valueOf(bindDN);
+      }
+
+      ByteString bindPW;
+      if (bindPassword == null)
+      {
+        bindPW =  ByteString.empty();
+      }
+      else
+      {
+        bindPW = ByteString.valueOf(bindPassword);
       }
 
       String result = null;
       if (connectionOptions.useSASLExternal())
       {
-        result = handler.doSASLExternal(new ASN1OctetString(bindDN),
+        result = handler.doSASLExternal(bindDNBytes,
                                         connectionOptions.getSASLProperties(),
                                         requestControls, responseControls);
       }
       else if (connectionOptions.getSASLMechanism() != null)
       {
-            result = handler.doSASLBind(new ASN1OctetString(bindDN), bindPW,
+            result = handler.doSASLBind(bindDNBytes, bindPW,
             connectionOptions.getSASLMechanism(),
             connectionOptions.getSASLProperties(),
             requestControls, responseControls);
       }
       else if(bindDN != null)
       {
-              result = handler.doSimpleBind(versionNumber,
-                  new ASN1OctetString(bindDN), bindPW,
+              result = handler.doSimpleBind(versionNumber, bindDNBytes, bindPW,
               requestControls, responseControls);
       }
       if(result != null)
@@ -320,18 +335,27 @@
         out.println(result);
       }
 
-      for (LDAPControl c : responseControls)
+      for (Control c : responseControls)
       {
         if (c.getOID().equals(OID_AUTHZID_RESPONSE))
         {
-          ASN1OctetString controlValue = c.getValue();
-          if (controlValue != null)
+          AuthorizationIdentityResponseControl control;
+          if (c instanceof LDAPControl)
           {
-
-            Message message =
-                    INFO_BIND_AUTHZID_RETURNED.get(controlValue.stringValue());
-            out.println(message);
+            // 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;
+          }
+
+          Message message =
+              INFO_BIND_AUTHZID_RETURNED.get(
+                  control.getAuthorizationID());
+          out.println(message);
         }
         else if (c.getOID().equals(OID_NS_PASSWORD_EXPIRED))
         {
@@ -341,12 +365,20 @@
         }
         else if (c.getOID().equals(OID_NS_PASSWORD_EXPIRING))
         {
-          PasswordExpiringControl expiringControl =
-               PasswordExpiringControl.decodeControl(new Control(c.getOID(),
-                                                                 c.isCritical(),
-                                                                 c.getValue()));
+          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;
+          }
           Message timeString =
-               secondsToTimeString(expiringControl.getSecondsUntilExpiration());
+               secondsToTimeString(control.getSecondsUntilExpiration());
 
 
           Message message = INFO_BIND_PASSWORD_EXPIRING.get(timeString);
@@ -354,9 +386,17 @@
         }
         else if (c.getOID().equals(OID_PASSWORD_POLICY_CONTROL))
         {
-          PasswordPolicyResponseControl pwPolicyControl =
-               PasswordPolicyResponseControl.decodeControl(new Control(
-                    c.getOID(), c.isCritical(), c.getValue()));
+          PasswordPolicyResponseControl pwPolicyControl;
+          if(c instanceof LDAPControl)
+          {
+            pwPolicyControl = PasswordPolicyResponseControl.DECODER.decode(c
+                .isCritical(), ((LDAPControl) c).getValue());
+          }
+          else
+          {
+            pwPolicyControl = (PasswordPolicyResponseControl)c;
+          }
+
 
           PasswordPolicyErrorType errorType = pwPolicyControl.getErrorType();
           if (errorType != null)
@@ -413,13 +453,17 @@
       }
       throw new LDAPConnectionException(ce.getMessageObject(), ce.getExitCode(),
                                         null, ce);
-    } catch (LDAPException le)
+    } catch (LDAPException le) {
+        throw new LDAPConnectionException(le.getMessageObject(),
+                le.getResultCode(),
+                le.getErrorMessage(),
+                le.getMatchedDN(),
+                le.getCause());
+    } catch (DirectoryException de)
     {
-      throw new LDAPConnectionException(le.getMessageObject(),
-                                        le.getResultCode(),
-                                        le.getErrorMessage(),
-                                        le.getMatchedDN(),
-                                        le.getCause());
+      throw new LDAPConnectionException(de.getMessageObject(), de
+          .getResultCode().getIntValue(), null, de.getMatchedDN(), de
+          .getCause());
     } catch(Exception ex)
     {
       if (debugEnabled())

--
Gitblit v1.10.0