From c780f75a684e337357b723443ad2503ddff4af1e Mon Sep 17 00:00:00 2001
From: lutoff <lutoff@localhost>
Date: Mon, 23 Jul 2007 08:04:48 +0000
Subject: [PATCH] This commit corresponds to the following issues: https://opends.dev.java.net/issues/show_bug.cgi?id=1340 https://opends.dev.java.net/issues/show_bug.cgi?id=1341
---
opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliParser.java | 193 +++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 175 insertions(+), 18 deletions(-)
diff --git a/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliParser.java b/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliParser.java
index 40a7338..dd1ae80 100644
--- a/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliParser.java
+++ b/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliParser.java
@@ -27,6 +27,7 @@
package org.opends.server.admin.client.cli;
import static org.opends.server.loggers.debug.DebugLogger.*;
+import static org.opends.server.messages.AdminMessages.*;
import static org.opends.server.messages.MessageHandler.getMessage;
import static org.opends.server.messages.ToolMessages.*;
import static org.opends.server.tools.ToolConstants.*;
@@ -41,16 +42,22 @@
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
+import java.util.Comparator;
import java.util.HashSet;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
import java.util.logging.Level;
import java.util.logging.Logger;
+import javax.naming.NamingException;
+import javax.naming.ldap.InitialLdapContext;
import javax.net.ssl.KeyManager;
-import org.opends.admin.ads.ADSContext;
import org.opends.admin.ads.ADSContextException;
import org.opends.admin.ads.util.ApplicationKeyManager;
import org.opends.admin.ads.util.ApplicationTrustManager;
+import org.opends.admin.ads.util.ConnectionUtils;
import org.opends.server.admin.client.cli.DsFrameworkCliReturnCode.ReturnCode;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.DebugLogLevel;
@@ -71,6 +78,11 @@
public class DsFrameworkCliParser extends SubCommandArgumentParser
{
/**
+ * End Of Line.
+ */
+ private String EOL = System.getProperty("line.separator");
+
+ /**
* The tracer object for the debug logger.
*/
private static final DebugTracer TRACER = getTracer();
@@ -167,7 +179,7 @@
Logger.getLogger(DsFrameworkCliParser.class.getName());
/**
- * The diferent CLI group.
+ * The different CLI group.
*/
public HashSet<DsFrameworkCliSubCommandGroup> cliGroup;
@@ -214,14 +226,48 @@
// ads Group cli
cliGroup.add(new DsFrameworkCliAds());
- // Server Group cli
+ // Server-group Group cli
cliGroup.add(new DsFrameworkCliServerGroup());
+ // Server Group cli
+ cliGroup.add(new DsFrameworkCliServer());
+
// Initialization
+ Comparator<SubCommand> c = new Comparator<SubCommand>() {
+
+ public int compare(SubCommand o1, SubCommand o2) {
+ return o1.getName().compareTo(o2.getName());
+ }
+ };
+
+ SortedSet<SubCommand> allSubCommands = new TreeSet<SubCommand>(c);
+
for (DsFrameworkCliSubCommandGroup oneCli : cliGroup)
{
oneCli.initializeCliGroup(this, verboseArg);
+ Set<SubCommand> oneCliSubCmds = oneCli.getSubCommands() ;
+ allSubCommands.addAll(oneCliSubCmds);
+
+ // register group help
+ String grpName = oneCli.getGroupName();
+ String option = OPTION_LONG_HELP + "-" + grpName;
+ BooleanArgument arg = new BooleanArgument(option, null, option,
+ MSGID_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE, grpName);
+ addGlobalArgument(arg);
+ arg.setHidden(oneCli.isHidden());
+ TreeSet<SubCommand> subCmds = new TreeSet<SubCommand>(c);
+ subCmds.addAll(oneCliSubCmds);
+ setUsageGroupArgument(arg, subCmds);
}
+
+ // Register the --help-all argument.
+ String option = OPTION_LONG_HELP + "-all";
+ BooleanArgument arg = new BooleanArgument(option, null, option,
+ MSGID_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE_ALL);
+
+ addGlobalArgument(arg);
+ setUsageGroupArgument(arg, allSubCommands);
+
}
/**
@@ -395,7 +441,7 @@
* @return The password stored into the specified file on by the
* command line argument, or prompts it if not specified.
*/
- public String getBindPassword(String dn, PrintStream out, PrintStream err)
+ public String getBindPassword(String dn, OutputStream out, OutputStream err)
{
if (bindPasswordArg.isPresent())
{
@@ -405,7 +451,7 @@
// read the password from the stdin.
try
{
- out.print(getMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT, dn));
+ out.write(getMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT, dn).getBytes());
char[] pwChars = PasswordReader.readPassword();
bindPasswordValue = new String(pwChars);
} catch(Exception ex)
@@ -414,7 +460,14 @@
{
TRACER.debugCaught(DebugLogLevel.ERROR, ex);
}
- err.println(wrapText(ex.getMessage(), MAX_LINE_WIDTH));
+ try
+ {
+ err.write(wrapText(ex.getMessage(), MAX_LINE_WIDTH).getBytes());
+ err.write(EOL.getBytes());
+ }
+ catch (IOException e)
+ {
+ }
return null;
}
}
@@ -430,7 +483,7 @@
// read the password from the stdin.
try
{
- out.print(getMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT, dn));
+ out.write(getMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT, dn).getBytes());
char[] pwChars = PasswordReader.readPassword();
return new String(pwChars);
}
@@ -440,7 +493,14 @@
{
TRACER.debugCaught(DebugLogLevel.ERROR, ex);
}
- err.println(wrapText(ex.getMessage(), MAX_LINE_WIDTH));
+ try
+ {
+ err.write(wrapText(ex.getMessage(), MAX_LINE_WIDTH).getBytes());
+ err.write(EOL.getBytes());
+ }
+ catch (IOException e)
+ {
+ }
return null;
}
}
@@ -448,22 +508,20 @@
/**
* Handle the subcommand.
- *
- * @param adsContext
- * The context to use to perform ADS operation.
- *
* @param outStream The output stream to use for standard output.
- *
* @param errStream The output stream to use for standard error.
*
* @return the return code
* @throws ADSContextException
* If there is a problem with when trying to perform the
* operation.
+ * @throws ArgumentException
+ * If there is a problem with any of the parameters used
+ * to execute this subcommand.
*/
- public ReturnCode performSubCommand(ADSContext adsContext,
- OutputStream outStream, OutputStream errStream)
- throws ADSContextException
+ public ReturnCode performSubCommand(OutputStream outStream,
+ OutputStream errStream)
+ throws ADSContextException, ArgumentException
{
SubCommand subCmd = getSubCommand();
@@ -471,8 +529,7 @@
{
if (oneCli.isSubCommand(subCmd))
{
- return oneCli.performSubCommand(adsContext, subCmd, outStream,
- errStream);
+ return oneCli.performSubCommand( subCmd, outStream, errStream);
}
}
@@ -767,4 +824,104 @@
return ReturnCode.SUCCESSFUL_NOP.getReturnCode();
}
+
+ /**
+ * Get the InitialLdapContext that has to be used for the ADS.
+ * @param out The output stream to use for standard output.
+ * @param err The output stream to use for standard error.
+ *
+ * @return The InitialLdapContext that has to be used for the ADS.
+ */
+ public InitialLdapContext getContext(OutputStream out, OutputStream err)
+ {
+ // Get connection parameters
+ String host = null ;
+ String port = null;
+ String dn = null ;
+ String pwd = null;
+ InitialLdapContext ctx = null;
+
+ // Get connection parameters
+ host = getHostName();
+ port = getPort();
+ dn = getBindDN();
+ pwd = getBindPassword(dn, out, err);
+
+ // Try to connect
+ if (useSSL())
+ {
+ String ldapsUrl = "ldaps://" + host + ":" + port;
+ try
+ {
+ ctx = ConnectionUtils.createLdapsContext(ldapsUrl, dn, pwd,
+ ConnectionUtils.getDefaultLDAPTimeout(), null,getTrustManager(),
+ getKeyManager());
+ }
+ catch (NamingException e)
+ {
+ int msgID = MSGID_ADMIN_CANNOT_CONNECT_TO_ADS;
+ String message = getMessage(msgID, host);
+
+ try
+ {
+ err.write(wrapText(message, MAX_LINE_WIDTH).getBytes());
+ err.write(EOL.getBytes());
+ }
+ catch (IOException e1)
+ {
+ }
+ return null;
+ }
+ }
+ else if (startTLS())
+ {
+ String ldapUrl = "ldap://" + host + ":" + port;
+ try
+ {
+ ctx = ConnectionUtils.createStartTLSContext(ldapUrl, dn, pwd,
+ ConnectionUtils.getDefaultLDAPTimeout(), null, getTrustManager(),
+ getKeyManager(), null);
+ }
+ catch (NamingException e)
+ {
+ int msgID = MSGID_ADMIN_CANNOT_CONNECT_TO_ADS;
+ String message = getMessage(msgID, host);
+
+ try
+ {
+ err.write(wrapText(message, MAX_LINE_WIDTH).getBytes());
+ err.write(EOL.getBytes());
+ }
+ catch (IOException e1)
+ {
+ }
+ return null;
+ }
+ }
+ else
+ {
+ String ldapUrl = "ldap://" + host + ":" + port;
+ try
+ {
+ ctx = ConnectionUtils.createLdapContext(ldapUrl, dn, pwd,
+ ConnectionUtils.getDefaultLDAPTimeout(), null);
+ }
+ catch (NamingException e)
+ {
+ int msgID = MSGID_ADMIN_CANNOT_CONNECT_TO_ADS;
+ String message = getMessage(msgID, host);
+
+ try
+ {
+ err.write(wrapText(message, MAX_LINE_WIDTH).getBytes());
+ err.write(EOL.getBytes());
+ }
+ catch (IOException e1)
+ {
+ }
+ return null;
+ }
+ }
+ return ctx;
+ }
}
--
Gitblit v1.10.0