From 9be33d0929c290b2ee31b1b0d8fddab32f99674e Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Fri, 10 Nov 2006 23:45:06 +0000
Subject: [PATCH] Make a number of changes to administrative tools provided with OpenDS.  These are all made under the umbrella of issue #994, but there are individual issues for each change.

---
 opendj-sdk/opends/src/server/org/opends/server/tools/LDAPDelete.java |  280 +++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 175 insertions(+), 105 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPDelete.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPDelete.java
index d5b04e0..acfede2 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPDelete.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPDelete.java
@@ -58,10 +58,11 @@
 import org.opends.server.util.args.StringArgument;
 
 import static org.opends.server.loggers.Debug.*;
-import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.messages.MessageHandler.*;
 import static org.opends.server.messages.ToolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
+import static org.opends.server.util.ServerConstants.*;
+import static org.opends.server.util.StaticUtils.*;
 
 
 /**
@@ -199,7 +200,7 @@
         {
           msgID = MSGID_OPERATION_FAILED;
           String msg = getMessage(msgID, "DELETE", line, ae.getMessage());
-          err.println(msg);
+          err.println(wrapText(msg, MAX_LINE_WIDTH));
           return;
         }
       }
@@ -220,7 +221,7 @@
         {
           msgID = MSGID_OPERATION_FAILED;
           String msg = getMessage(msgID, "DELETE", line, errorMessage);
-          err.println(msg);
+          err.println(wrapText(msg, MAX_LINE_WIDTH));
         } else
         {
           msgID = MSGID_OPERATION_SUCCESSFUL;
@@ -306,131 +307,176 @@
     LDAPDeleteOptions deleteOptions = new LDAPDeleteOptions();
     LDAPConnection connection = null;
 
-    BooleanArgument trustAll = null;
-    BooleanArgument noop = null;
-    StringArgument bindDN = null;
-    StringArgument bindPassword = null;
-    FileBasedArgument bindPasswordFile = null;
-    StringArgument encodingStr = null;
-    StringArgument keyStorePath = null;
-    StringArgument keyStorePassword = null;
-    StringArgument trustStorePath = null;
-    StringArgument trustStorePassword = null;
-    StringArgument hostName = null;
-    IntegerArgument port = null;
-    IntegerArgument version = null;
-    BooleanArgument showUsage = null;
-    StringArgument controlStr = null;
-    BooleanArgument verbose = null;
-    BooleanArgument continueOnError = null;
-    BooleanArgument useSSL = null;
-    BooleanArgument startTLS = null;
-    BooleanArgument saslExternal = null;
-    BooleanArgument deleteSubtree = null;
-    StringArgument filename = null;
-    StringArgument saslOptions = null;
+    BooleanArgument   continueOnError        = null;
+    BooleanArgument   deleteSubtree          = null;
+    BooleanArgument   noop                   = null;
+    BooleanArgument   saslExternal           = null;
+    BooleanArgument   showUsage              = null;
+    BooleanArgument   startTLS               = null;
+    BooleanArgument   trustAll               = null;
+    BooleanArgument   useSSL                 = null;
+    BooleanArgument   verbose                = null;
+    FileBasedArgument bindPasswordFile       = null;
+    FileBasedArgument keyStorePasswordFile   = null;
+    FileBasedArgument trustStorePasswordFile = null;
+    IntegerArgument   port                   = null;
+    IntegerArgument   version                = null;
+    StringArgument    bindDN                 = null;
+    StringArgument    bindPassword           = null;
+    StringArgument    controlStr             = null;
+    StringArgument    encodingStr            = null;
+    StringArgument    filename               = null;
+    StringArgument    hostName               = null;
+    StringArgument    keyStorePath           = null;
+    StringArgument    keyStorePassword       = null;
+    StringArgument    saslOptions            = null;
+    StringArgument    trustStorePath         = null;
+    StringArgument    trustStorePassword     = null;
 
     Reader rdr = null;
     ArrayList<String> dnStrings = new ArrayList<String> ();
 
     // Create the command-line argument parser for use with this program.
-    ArgumentParser argParser = new ArgumentParser(CLASS_NAME, false, true,
-        0, 1, "\"DN\"");
+    String toolDescription = getMessage(MSGID_LDAPDELETE_TOOL_DESCRIPTION);
+    ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
+                                                  false, true, 0, 1, "\"DN\"");
     try
     {
-      trustAll = new BooleanArgument("trustAll", 'X', "trustAll",
-            MSGID_DESCRIPTION_TRUSTALL);
-      argParser.addArgument(trustAll);
-      bindDN = new StringArgument("bindDN", 'D', "bindDN", false, false,
-                                  true, "{bindDN}", null, null,
+      hostName = new StringArgument("host", 'h', "host", false, false, true,
+                                    "{host}", "localhost", null,
+                                    MSGID_DESCRIPTION_HOST);
+      argParser.addArgument(hostName);
+
+      port = new IntegerArgument("port", 'p', "port", false, false, true,
+                                 "{port}", 389, null, MSGID_DESCRIPTION_PORT);
+      argParser.addArgument(port);
+
+      useSSL = new BooleanArgument("useSSL", 'Z', "useSSL",
+                                   MSGID_DESCRIPTION_USE_SSL);
+      argParser.addArgument(useSSL);
+
+      startTLS = new BooleanArgument("startTLS", 'q', "startTLS",
+                                     MSGID_DESCRIPTION_START_TLS);
+      argParser.addArgument(startTLS);
+
+      bindDN = new StringArgument("bindDN", 'D', "bindDN", false, false, true,
+                                  "{bindDN}", null, null,
                                   MSGID_DESCRIPTION_BINDDN);
       argParser.addArgument(bindDN);
+
       bindPassword = new StringArgument("bindPassword", 'w', "bindPassword",
                                         false, false, true, "{bindPassword}",
                                         null, null,
                                         MSGID_DESCRIPTION_BINDPASSWORD);
       argParser.addArgument(bindPassword);
-      bindPasswordFile = new FileBasedArgument("bindPasswordFile", 'j',
-                                  "bindPasswordFile", false, false,
-                                  "{bindPasswordFilename}", null, null,
-                                  MSGID_DESCRIPTION_BINDPASSWORDFILE);
+
+      bindPasswordFile =
+           new FileBasedArgument("bindPasswordFile", 'j', "bindPasswordFile",
+                                 false, false, "{bindPasswordFilename}", null,
+                                 null, MSGID_DESCRIPTION_BINDPASSWORDFILE);
       argParser.addArgument(bindPasswordFile);
-      encodingStr = new StringArgument("encoding", 'i', "encoding", false,
-                                       false, true, "{encoding}", null,  null,
-                                       MSGID_DESCRIPTION_ENCODING);
-      argParser.addArgument(encodingStr);
+
+      filename = new StringArgument("filename", 'f', "filename", false, false,
+                                    true, "{filename}", null, null,
+                                    MSGID_DELETE_DESCRIPTION_FILENAME);
+      argParser.addArgument(filename);
+
+      saslExternal = new BooleanArgument("useSASLExternal", 'r',
+                                         "useSASLExternal",
+                                         MSGID_DESCRIPTION_USE_SASL_EXTERNAL);
+      argParser.addArgument(saslExternal);
+
+      saslOptions = new StringArgument("saslOptions", 'o', "saslOptions",
+                                       false, true, true, "{name=value}", null,
+                                       null, MSGID_DESCRIPTION_SASL_PROPERTIES);
+      argParser.addArgument(saslOptions);
+
+      trustAll = new BooleanArgument("trustAll", 'X', "trustAll",
+                                     MSGID_DESCRIPTION_TRUSTALL);
+      argParser.addArgument(trustAll);
+
       keyStorePath = new StringArgument("keyStorePath", 'K', "keyStorePath",
                                         false, false, true, "{keyStorePath}",
                                         null, null,
                                         MSGID_DESCRIPTION_KEYSTOREPATH);
       argParser.addArgument(keyStorePath);
-      trustStorePath = new StringArgument("trustStorePath", 'P',
-                                          "trustStorePath", false, false, true,
-                                          "{trustStorePath}", null, null,
-                                          MSGID_DESCRIPTION_TRUSTSTOREPATH);
-      argParser.addArgument(trustStorePath);
+
       keyStorePassword = new StringArgument("keyStorePassword", 'W',
                                             "keyStorePassword", false, false,
                                             true, "{keyStorePassword}", null,
                                             null,
                                             MSGID_DESCRIPTION_KEYSTOREPASSWORD);
       argParser.addArgument(keyStorePassword);
-      hostName = new StringArgument("host", 'h', "host", false, false, true,
-                                    "{host}", "localhost", null,
-                                    MSGID_DESCRIPTION_HOST);
-      argParser.addArgument(hostName);
-      port = new IntegerArgument("port", 'p', "port", false, false, true,
-                                 "{port}", 389, null, MSGID_DESCRIPTION_PORT);
-      argParser.addArgument(port);
+
+      keyStorePasswordFile =
+           new FileBasedArgument("keyStorePasswordFile", null,
+                                 "keyStorePasswordFile", false, false, "{path}",
+                                 null, null,
+                                 MSGID_DESCRIPTION_KEYSTOREPASSWORD_FILE);
+      argParser.addArgument(keyStorePasswordFile);
+
+      trustStorePath = new StringArgument("trustStorePath", 'P',
+                                          "trustStorePath", false, false, true,
+                                          "{trustStorePath}", null, null,
+                                          MSGID_DESCRIPTION_TRUSTSTOREPATH);
+      argParser.addArgument(trustStorePath);
+
+      trustStorePassword =
+           new StringArgument("trustStorePassword", null, "trustStorePassword",
+                              false, false, true, "{trustStorePassword}", null,
+                              null, MSGID_DESCRIPTION_TRUSTSTOREPASSWORD);
+      argParser.addArgument(trustStorePassword);
+
+      trustStorePasswordFile =
+           new FileBasedArgument("trustStorePasswordFile", null,
+                                 "trustStorePasswordFile", false, false,
+                                 "{path}", null, null,
+                                 MSGID_DESCRIPTION_TRUSTSTOREPASSWORD_FILE);
+      argParser.addArgument(trustStorePasswordFile);
+
+      deleteSubtree =
+           new BooleanArgument("deleteSubtree", 'x', "deleteSubtree",
+                               MSGID_DELETE_DESCRIPTION_DELETE_SUBTREE);
+      argParser.addArgument(deleteSubtree);
+
+      controlStr =
+           new StringArgument("controls", 'J', "controls", false, false, true,
+                    "{controloid[:criticality[:value|::b64value|:<fileurl]]}",
+                    null, null, MSGID_DESCRIPTION_CONTROLS);
+      argParser.addArgument(controlStr);
+
       version = new IntegerArgument("version", 'V', "version", false, false,
                                     true, "{version}", 3, null,
                                     MSGID_DESCRIPTION_VERSION);
       argParser.addArgument(version);
-      filename = new StringArgument("filename", 'f', "filename", false, false,
-                                    true, "{filename}", null, null,
-                                    MSGID_DELETE_DESCRIPTION_FILENAME);
-      argParser.addArgument(filename);
+
+      encodingStr = new StringArgument("encoding", 'i', "encoding", false,
+                                       false, true, "{encoding}", null,  null,
+                                       MSGID_DESCRIPTION_ENCODING);
+      argParser.addArgument(encodingStr);
+
+      continueOnError =
+           new BooleanArgument("continueOnError", 'c', "continueOnError",
+                               MSGID_DESCRIPTION_CONTINUE_ON_ERROR);
+      argParser.addArgument(continueOnError);
+
+      noop = new BooleanArgument("no-op", 'n', "noop", MSGID_DESCRIPTION_NOOP);
+      argParser.addArgument(noop);
+
+      verbose = new BooleanArgument("verbose", 'v', "verbose",
+                                    MSGID_DESCRIPTION_VERBOSE);
+      argParser.addArgument(verbose);
+
       showUsage = new BooleanArgument("showUsage", 'H', "help",
                                       MSGID_DESCRIPTION_SHOWUSAGE);
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage, out);
-      controlStr = new StringArgument("controls", 'J', "controls", false, false,
-           true, "{controloid[:criticality[:value|::b64value|:<fileurl]]}",
-           null, null, MSGID_DESCRIPTION_CONTROLS);
-      argParser.addArgument(controlStr);
-      verbose = new BooleanArgument("verbose", 'v', "verbose",
-                                    MSGID_DESCRIPTION_VERBOSE);
-      argParser.addArgument(verbose);
-      continueOnError = new BooleanArgument("continueOnError", 'c',
-                                 "continueOnError",
-                                 MSGID_DESCRIPTION_CONTINUE_ON_ERROR);
-      argParser.addArgument(continueOnError);
-      useSSL = new BooleanArgument("useSSL", 'Z', "useSSL",
-                                    MSGID_DESCRIPTION_USE_SSL);
-      argParser.addArgument(useSSL);
-      startTLS = new BooleanArgument("startTLS", 'q', "startTLS",
-                                    MSGID_DESCRIPTION_START_TLS);
-      argParser.addArgument(startTLS);
-      saslExternal = new BooleanArgument("useSASLExternal", 'r',
-                                         "useSASLExternal",
-                                         MSGID_DESCRIPTION_USE_SASL_EXTERNAL);
-      argParser.addArgument(saslExternal);
-      deleteSubtree = new BooleanArgument("deleteSubtree", 'x', "deleteSubtree",
-                               MSGID_DELETE_DESCRIPTION_DELETE_SUBTREE);
-      argParser.addArgument(deleteSubtree);
-
-      saslOptions = new StringArgument("saslOptions", 'o', "saslOptions",
-                                       false, true, true, "{name=value}", null,
-                                       null, MSGID_DESCRIPTION_SASL_PROPERTIES);
-      argParser.addArgument(saslOptions);
-      noop = new BooleanArgument("no-op", 'n', "noop", MSGID_DESCRIPTION_NOOP);
-      argParser.addArgument(noop);
     } catch (ArgumentException ae)
     {
       int    msgID   = MSGID_ENCPW_CANNOT_INITIALIZE_ARGS;
       String message = getMessage(msgID, ae.getMessage());
 
-      err.println(message);
+      err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
 
@@ -444,7 +490,7 @@
       int    msgID   = MSGID_ENCPW_ERROR_PARSING_ARGS;
       String message = getMessage(msgID, ae.getMessage());
 
-      err.println(message);
+      err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
       return 1;
     }
@@ -458,8 +504,10 @@
 
     if(bindPassword.isPresent() && bindPasswordFile.isPresent())
     {
-      err.println("ERROR: Both -w and -j flags specified. " +
-                  "Please specify one.");
+      int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
+      String message = getMessage(msgID, bindPassword.getLongIdentifier(),
+                                  bindPasswordFile.getLongIdentifier());
+      err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
 
@@ -471,7 +519,7 @@
     } catch(ArgumentException ae)
     {
       assert debugException(CLASS_NAME, "main", ae);
-      err.println(ae.getMessage());
+      err.println(wrapText(ae.getMessage(), MAX_LINE_WIDTH));
       return 1;
     }
 
@@ -481,14 +529,14 @@
       if(versionNumber != 2 && versionNumber != 3)
       {
         int msgID = MSGID_DESCRIPTION_INVALID_VERSION;
-        err.println(getMessage(msgID, versionNumber));
+        err.println(wrapText(getMessage(msgID, versionNumber), MAX_LINE_WIDTH));
         return 1;
       }
       connectionOptions.setVersionNumber(versionNumber);
     } catch(ArgumentException ae)
     {
       assert debugException(CLASS_NAME, "main", ae);
-      err.println(ae.getMessage());
+      err.println(wrapText(ae.getMessage(), MAX_LINE_WIDTH));
       return 1;
     }
 
@@ -506,7 +554,7 @@
       } catch(Exception ex)
       {
         assert debugException(CLASS_NAME, "main", ex);
-        err.println(ex.getMessage());
+        err.println(wrapText(ex.getMessage(), MAX_LINE_WIDTH));
         return 1;
       }
     } else if(bindPasswordValue == null)
@@ -516,9 +564,27 @@
     }
 
     String keyStorePathValue = keyStorePath.getValue();
-    String keyStorePasswordValue = keyStorePassword.getValue();
     String trustStorePathValue = trustStorePath.getValue();
+
+    String keyStorePasswordValue = null;
+    if (keyStorePassword.isPresent())
+    {
+      keyStorePasswordValue = keyStorePassword.getValue();
+    }
+    else if (keyStorePasswordFile.isPresent())
+    {
+      keyStorePasswordValue = keyStorePasswordFile.getValue();
+    }
+
     String trustStorePasswordValue = null;
+    if (trustStorePassword.isPresent())
+    {
+      trustStorePasswordValue = trustStorePassword.getValue();
+    }
+    else if (trustStorePasswordFile.isPresent())
+    {
+      trustStorePasswordValue = trustStorePasswordFile.getValue();
+    }
 
     deleteOptions.setShowOperations(noop.isPresent());
     deleteOptions.setVerbose(verbose.isPresent());
@@ -531,7 +597,9 @@
       LDAPControl ctrl = LDAPToolUtils.getControl(ctrlString, err);
       if(ctrl == null)
       {
-        err.println("Invalid control specified:" + ctrlString);
+        int    msgID   = MSGID_TOOL_INVALID_CONTROL_STRING;
+        String message = getMessage(msgID, ctrlString);
+        err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
         return 1;
       }
@@ -581,14 +649,16 @@
     {
       if(!connectionOptions.useSSL() && !connectionOptions.useStartTLS())
       {
-        err.println("SASL External requires either SSL or StartTLS " +
-                    "options to be requested.");
+        int    msgID   = MSGID_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS;
+        String message = getMessage(msgID);
+        err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       if(keyStorePathValue == null)
       {
-        err.println("SASL External requires a path to the SSL " +
-                    "client certificate keystore.");
+        int    msgID   = MSGID_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE;
+        String message = getMessage(msgID);
+        err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
     }
@@ -637,19 +707,19 @@
     } catch(LDAPException le)
     {
       assert debugException(CLASS_NAME, "main", le);
-      err.println(le.getMessage());
+      err.println(wrapText(le.getMessage(), MAX_LINE_WIDTH));
       int code = le.getResultCode();
       return code;
     } catch(LDAPConnectionException lce)
     {
       assert debugException(CLASS_NAME, "main", lce);
-      err.println(lce.getMessage());
+      err.println(wrapText(lce.getMessage(), MAX_LINE_WIDTH));
       int code = lce.getErrorCode();
       return code;
     } catch(Exception e)
     {
       assert debugException(CLASS_NAME, "main", e);
-      err.println(e.getMessage());
+      err.println(wrapText(e.getMessage(), MAX_LINE_WIDTH));
       return 1;
     } finally
     {

--
Gitblit v1.10.0