From 1734229125e7bad5f85dfe11d076eeda206236a9 Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Mon, 18 Oct 2010 19:41:47 +0000
Subject: [PATCH] Update from OpenDS sdk by Bo Li: Added unmodifiable and copyOf request factories. Added authrate performance utility.
---
sdk/src/com/sun/opends/sdk/tools/ConnectionFactoryProvider.java | 432 ++++++++++++++++++++++++++++--------------------------
1 files changed, 224 insertions(+), 208 deletions(-)
diff --git a/sdk/src/com/sun/opends/sdk/tools/ArgumentParserConnectionFactory.java b/sdk/src/com/sun/opends/sdk/tools/ConnectionFactoryProvider.java
similarity index 67%
rename from sdk/src/com/sun/opends/sdk/tools/ArgumentParserConnectionFactory.java
rename to sdk/src/com/sun/opends/sdk/tools/ConnectionFactoryProvider.java
index 48b7a78..34324e6 100644
--- a/sdk/src/com/sun/opends/sdk/tools/ArgumentParserConnectionFactory.java
+++ b/sdk/src/com/sun/opends/sdk/tools/ConnectionFactoryProvider.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2009-2010 Sun Microsystems, Inc.
+ * Copyright 2010 Sun Microsystems, Inc.
*/
package com.sun.opends.sdk.tools;
@@ -56,8 +56,7 @@
/**
* A connection factory designed for use with command line tools.
*/
-final class ArgumentParserConnectionFactory extends AbstractConnectionFactory
- implements ConnectionFactory
+final class ConnectionFactoryProvider
{
/**
* End Of Line.
@@ -68,7 +67,7 @@
* The Logger.
*/
static final Logger LOG = Logger
- .getLogger(ArgumentParserConnectionFactory.class.getName());
+ .getLogger(ConnectionFactoryProvider.class.getName());
/**
* The 'hostName' global argument.
@@ -167,13 +166,15 @@
private ConnectionFactory connFactory;
+ private ConnectionFactory authenticatedConnFactory;
+
private BindRequest bindRequest = null;
private final ConsoleApplication app;
- public ArgumentParserConnectionFactory(final ArgumentParser argumentParser,
+ public ConnectionFactoryProvider(final ArgumentParser argumentParser,
final ConsoleApplication app) throws ArgumentException
{
this(argumentParser, app, "cn=Directory Manager", 389, false);
@@ -181,7 +182,7 @@
- public ArgumentParserConnectionFactory(final ArgumentParser argumentParser,
+ public ConnectionFactoryProvider(final ArgumentParser argumentParser,
final ConsoleApplication app, final String defaultBindDN,
final int defaultPort, final boolean alwaysSSL) throws ArgumentException
{
@@ -326,165 +327,158 @@
}
-
- /**
- * {@inheritDoc}
- */
- @Override
- public FutureResult<AsynchronousConnection> getAsynchronousConnection(
- final ResultHandler<? super AsynchronousConnection> handler)
+ public ConnectionFactory getConnectionFactory() throws ArgumentException
{
- return connFactory.getAsynchronousConnection(handler);
- }
-
-
-
- public void validate() throws ArgumentException
- {
- port = portArg.getIntValue();
-
- // Couldn't have at the same time bindPassword and bindPasswordFile
- if (bindPasswordArg.isPresent() && bindPasswordFileArg.isPresent())
+ if(connFactory == null)
{
- final LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
- bindPasswordArg.getLongIdentifier(), bindPasswordFileArg
- .getLongIdentifier());
- throw new ArgumentException(message);
- }
+ port = portArg.getIntValue();
- // Couldn't have at the same time trustAll and
- // trustStore related arg
- if (trustAllArg.isPresent() && trustStorePathArg.isPresent())
- {
- final LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
- trustAllArg.getLongIdentifier(), trustStorePathArg
- .getLongIdentifier());
- throw new ArgumentException(message);
- }
- if (trustAllArg.isPresent() && trustStorePasswordArg.isPresent())
- {
- final LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
- trustAllArg.getLongIdentifier(), trustStorePasswordArg
- .getLongIdentifier());
- throw new ArgumentException(message);
- }
- if (trustAllArg.isPresent() && trustStorePasswordFileArg.isPresent())
- {
- final LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
- trustAllArg.getLongIdentifier(), trustStorePasswordFileArg
- .getLongIdentifier());
- throw new ArgumentException(message);
- }
-
- // Couldn't have at the same time trustStorePasswordArg and
- // trustStorePasswordFileArg
- if (trustStorePasswordArg.isPresent()
- && trustStorePasswordFileArg.isPresent())
- {
- final LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
- trustStorePasswordArg.getLongIdentifier(), trustStorePasswordFileArg
- .getLongIdentifier());
- throw new ArgumentException(message);
- }
-
- if (trustStorePathArg.isPresent())
- {
- // Check that the path exists and is readable
- final String value = trustStorePathArg.getValue();
- if (!canRead(trustStorePathArg.getValue()))
+ // Couldn't have at the same time bindPassword and bindPasswordFile
+ if (bindPasswordArg.isPresent() && bindPasswordFileArg.isPresent())
{
- final LocalizableMessage message = ERR_CANNOT_READ_TRUSTSTORE
- .get(value);
+ final LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
+ bindPasswordArg.getLongIdentifier(), bindPasswordFileArg
+ .getLongIdentifier());
throw new ArgumentException(message);
}
- }
- if (keyStorePathArg.isPresent())
- {
- // Check that the path exists and is readable
- final String value = keyStorePathArg.getValue();
- if (!canRead(trustStorePathArg.getValue()))
+ // Couldn't have at the same time trustAll and
+ // trustStore related arg
+ if (trustAllArg.isPresent() && trustStorePathArg.isPresent())
{
- final LocalizableMessage message = ERR_CANNOT_READ_KEYSTORE.get(value);
+ final LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
+ trustAllArg.getLongIdentifier(), trustStorePathArg
+ .getLongIdentifier());
throw new ArgumentException(message);
}
- }
-
- // Couldn't have at the same time startTLSArg and
- // useSSLArg
- if (useStartTLSArg.isPresent() && useSSLArg.isPresent())
- {
- final LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
- useStartTLSArg.getLongIdentifier(), useSSLArg.getLongIdentifier());
- throw new ArgumentException(message);
- }
-
- try
- {
- if (useSSLArg.isPresent() || useStartTLSArg.isPresent())
+ if (trustAllArg.isPresent() && trustStorePasswordArg.isPresent())
{
- String clientAlias;
- if (certNicknameArg.isPresent())
+ final LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
+ trustAllArg.getLongIdentifier(), trustStorePasswordArg
+ .getLongIdentifier());
+ throw new ArgumentException(message);
+ }
+ if (trustAllArg.isPresent() && trustStorePasswordFileArg.isPresent())
+ {
+ final LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
+ trustAllArg.getLongIdentifier(), trustStorePasswordFileArg
+ .getLongIdentifier());
+ throw new ArgumentException(message);
+ }
+
+ // Couldn't have at the same time trustStorePasswordArg and
+ // trustStorePasswordFileArg
+ if (trustStorePasswordArg.isPresent()
+ && trustStorePasswordFileArg.isPresent())
+ {
+ final LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
+ trustStorePasswordArg.getLongIdentifier(), trustStorePasswordFileArg
+ .getLongIdentifier());
+ throw new ArgumentException(message);
+ }
+
+ if (trustStorePathArg.isPresent())
+ {
+ // Check that the path exists and is readable
+ final String value = trustStorePathArg.getValue();
+ if (!canRead(trustStorePathArg.getValue()))
{
- clientAlias = certNicknameArg.getValue();
+ final LocalizableMessage message = ERR_CANNOT_READ_TRUSTSTORE
+ .get(value);
+ throw new ArgumentException(message);
}
- else
+ }
+
+ if (keyStorePathArg.isPresent())
+ {
+ // Check that the path exists and is readable
+ final String value = keyStorePathArg.getValue();
+ if (!canRead(trustStorePathArg.getValue()))
{
- clientAlias = null;
+ final LocalizableMessage message =
+ ERR_CANNOT_READ_KEYSTORE.get(value);
+ throw new ArgumentException(message);
}
+ }
- if (sslContext == null)
+ // Couldn't have at the same time startTLSArg and
+ // useSSLArg
+ if (useStartTLSArg.isPresent() && useSSLArg.isPresent())
+ {
+ final LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
+ useStartTLSArg.getLongIdentifier(), useSSLArg.getLongIdentifier());
+ throw new ArgumentException(message);
+ }
+
+ try
+ {
+ if (useSSLArg.isPresent() || useStartTLSArg.isPresent())
{
- final TrustManager trustManager = getTrustManager();
-
- X509KeyManager keyManager = null;
- final X509KeyManager akm = getKeyManager(keyStorePathArg.getValue());
-
- if (akm != null && clientAlias != null)
+ String clientAlias;
+ if (certNicknameArg.isPresent())
{
- keyManager = KeyManagers.useSingleCertificate(clientAlias, akm);
+ clientAlias = certNicknameArg.getValue();
+ }
+ else
+ {
+ clientAlias = null;
}
- sslContext = new SSLContextBuilder().setTrustManager(trustManager)
- .setKeyManager(keyManager).getSSLContext();
+ if (sslContext == null)
+ {
+ final TrustManager trustManager = getTrustManager();
+
+ X509KeyManager keyManager = null;
+ final X509KeyManager akm =
+ getKeyManager(keyStorePathArg.getValue());
+
+ if (akm != null && clientAlias != null)
+ {
+ keyManager = KeyManagers.useSingleCertificate(clientAlias, akm);
+ }
+
+ sslContext = new SSLContextBuilder().setTrustManager(trustManager)
+ .setKeyManager(keyManager).getSSLContext();
+ }
}
}
- }
- catch (final Exception e)
- {
- throw new ArgumentException(ERR_LDAP_CONN_CANNOT_INITIALIZE_SSL.get(e
- .toString()), e);
- }
+ catch (final Exception e)
+ {
+ throw new ArgumentException(ERR_LDAP_CONN_CANNOT_INITIALIZE_SSL.get(e
+ .toString()), e);
+ }
- if (sslContext != null)
- {
- final LDAPOptions options = new LDAPOptions().setSSLContext(sslContext)
- .setUseStartTLS(useStartTLSArg.isPresent());
- connFactory = new LDAPConnectionFactory(hostNameArg.getValue(), port,
- options);
+ if (sslContext != null)
+ {
+ final LDAPOptions options = new LDAPOptions().setSSLContext(sslContext)
+ .setUseStartTLS(useStartTLSArg.isPresent());
+ connFactory = new LDAPConnectionFactory(hostNameArg.getValue(), port,
+ options);
+ }
+ else
+ {
+ connFactory = new LDAPConnectionFactory(hostNameArg.getValue(), port);
+ }
}
- else
- {
- connFactory = new LDAPConnectionFactory(hostNameArg.getValue(), port);
- }
-
- try
- {
- bindRequest = getBindRequest();
- }
- catch (final CLIException e)
- {
- throw new ArgumentException(LocalizableMessage
- .raw("Error reading input: " + e.toString()));
- }
- if (bindRequest != null)
- {
- connFactory = new AuthenticatedConnectionFactory(connFactory, bindRequest)
- .setRebindAllowed(true);
- }
+ return connFactory;
}
-
+ public ConnectionFactory getAuthenticatedConnectionFactory()
+ throws ArgumentException
+ {
+ if(authenticatedConnFactory == null)
+ {
+ authenticatedConnFactory = getConnectionFactory();
+ BindRequest bindRequest = getBindRequest();
+ if(bindRequest != null)
+ {
+ authenticatedConnFactory =
+ Connections.newAuthenticatedConnectionFactory(
+ authenticatedConnFactory, bindRequest);
+ }
+ }
+ return authenticatedConnFactory;
+ }
/**
* Returns <CODE>true</CODE> if we can read on the provided path and
@@ -505,8 +499,7 @@
- private String getAuthID(final String mech) throws CLIException,
- ArgumentException
+ private String getAuthID(final String mech) throws ArgumentException
{
String value = null;
for (final String s : saslOptionArg.getValues())
@@ -523,9 +516,14 @@
}
if (value == null && app.isInteractive())
{
- value = app.readInput(LocalizableMessage.raw("Authentication ID:"),
- bindNameArg.getDefaultValue() == null ? null : "dn: "
- + bindNameArg.getDefaultValue());
+ try {
+ value = app.readInput(LocalizableMessage.raw("Authentication ID:"),
+ bindNameArg.getDefaultValue() == null ? null : "dn: "
+ + bindNameArg.getDefaultValue());
+ } catch (CLIException e) {
+ throw new ArgumentException(
+ LocalizableMessage.raw("Unable to read authentication ID"), e);
+ }
}
if (value == null)
{
@@ -538,7 +536,7 @@
- private String getAuthzID() throws CLIException, ArgumentException
+ private String getAuthzID() throws ArgumentException
{
String value = null;
for (final String s : saslOptionArg.getValues())
@@ -554,7 +552,7 @@
- private String getBindName() throws CLIException
+ private String getBindName() throws ArgumentException
{
String value = "";
if (bindNameArg.isPresent())
@@ -563,8 +561,13 @@
}
else if (app.isInteractive())
{
- value = app.readInput(LocalizableMessage.raw("Bind name:"), bindNameArg
- .getDefaultValue() == null ? value : bindNameArg.getDefaultValue());
+ try {
+ value = app.readInput(LocalizableMessage.raw("Bind name:"), bindNameArg
+ .getDefaultValue() == null ? value : bindNameArg.getDefaultValue());
+ } catch (CLIException e) {
+ throw new ArgumentException(
+ LocalizableMessage.raw("Unable to read bind name"), e);
+ }
}
return value;
@@ -572,74 +575,79 @@
- private BindRequest getBindRequest() throws CLIException, ArgumentException
+ public BindRequest getBindRequest() throws ArgumentException
{
- String mech = null;
- for (final String s : saslOptionArg.getValues())
+ if(bindRequest == null)
{
- if (s.startsWith(SASL_PROPERTY_MECH))
+ String mech = null;
+ for (final String s : saslOptionArg.getValues())
{
- mech = parseSASLOptionValue(s);
- break;
+ if (s.startsWith(SASL_PROPERTY_MECH))
+ {
+ mech = parseSASLOptionValue(s);
+ break;
+ }
}
- }
- if (mech == null)
- {
- if (bindNameArg.isPresent() || bindPasswordFileArg.isPresent()
- || bindPasswordArg.isPresent())
+ if (mech == null)
{
- return Requests.newSimpleBindRequest(getBindName(), getPassword());
+ if (bindNameArg.isPresent() || bindPasswordFileArg.isPresent()
+ || bindPasswordArg.isPresent())
+ {
+ bindRequest =
+ Requests.newSimpleBindRequest(getBindName(), getPassword());
+ }
}
- return null;
- }
-
- if (mech.equals(DigestMD5SASLBindRequest.SASL_MECHANISM_NAME))
- {
- return Requests.newDigestMD5SASLBindRequest(
- getAuthID(DigestMD5SASLBindRequest.SASL_MECHANISM_NAME),
- ByteString.valueOf(getPassword())).setAuthorizationID(getAuthzID())
- .setRealm(getRealm());
- }
- if (mech.equals(CRAMMD5SASLBindRequest.SASL_MECHANISM_NAME))
- {
- return Requests.newCRAMMD5SASLBindRequest(
- getAuthID(CRAMMD5SASLBindRequest.SASL_MECHANISM_NAME), ByteString
- .valueOf(getPassword()));
- }
- if (mech.equals(GSSAPISASLBindRequest.SASL_MECHANISM_NAME))
- {
- return Requests.newGSSAPISASLBindRequest(
- getAuthID(GSSAPISASLBindRequest.SASL_MECHANISM_NAME),
- ByteString.valueOf(getPassword())).setKDCAddress(getKDC()).setRealm(
- getRealm()).setAuthorizationID(getAuthzID());
- }
- if (mech.equals(ExternalSASLBindRequest.SASL_MECHANISM_NAME))
- {
- if (sslContext == null)
+ else if (mech.equals(DigestMD5SASLBindRequest.SASL_MECHANISM_NAME))
{
- final LocalizableMessage message = ERR_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS
- .get();
- throw new ArgumentException(message);
+ bindRequest = Requests.newDigestMD5SASLBindRequest(
+ getAuthID(DigestMD5SASLBindRequest.SASL_MECHANISM_NAME),
+ ByteString.valueOf(getPassword())).setAuthorizationID(getAuthzID())
+ .setRealm(getRealm());
}
- if (!keyStorePathArg.isPresent() && getKeyStore() == null)
+ else if (mech.equals(CRAMMD5SASLBindRequest.SASL_MECHANISM_NAME))
{
- final LocalizableMessage message = ERR_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE
- .get();
- throw new ArgumentException(message);
+ bindRequest = Requests.newCRAMMD5SASLBindRequest(
+ getAuthID(CRAMMD5SASLBindRequest.SASL_MECHANISM_NAME), ByteString
+ .valueOf(getPassword()));
}
- return Requests.newExternalSASLBindRequest().setAuthorizationID(
- getAuthzID());
+ else if (mech.equals(GSSAPISASLBindRequest.SASL_MECHANISM_NAME))
+ {
+ bindRequest = Requests.newGSSAPISASLBindRequest(
+ getAuthID(GSSAPISASLBindRequest.SASL_MECHANISM_NAME),
+ ByteString.valueOf(getPassword())).setKDCAddress(getKDC()).setRealm(
+ getRealm()).setAuthorizationID(getAuthzID());
+ }
+ else if (mech.equals(ExternalSASLBindRequest.SASL_MECHANISM_NAME))
+ {
+ if (sslContext == null)
+ {
+ final LocalizableMessage message =
+ ERR_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS.get();
+ throw new ArgumentException(message);
+ }
+ if (!keyStorePathArg.isPresent() && getKeyStore() == null)
+ {
+ final LocalizableMessage message =
+ ERR_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE.get();
+ throw new ArgumentException(message);
+ }
+ bindRequest = Requests.newExternalSASLBindRequest().setAuthorizationID(
+ getAuthzID());
+ }
+ else if (mech.equals(PlainSASLBindRequest.SASL_MECHANISM_NAME))
+ {
+ bindRequest = Requests.newPlainSASLBindRequest(
+ getAuthID(PlainSASLBindRequest.SASL_MECHANISM_NAME),
+ ByteString.valueOf(getPassword())).setAuthorizationID(getAuthzID());
+ }
+ else
+ {
+ throw new ArgumentException(ERR_LDAPAUTH_UNSUPPORTED_SASL_MECHANISM
+ .get(mech));
+ }
}
- if (mech.equals(PlainSASLBindRequest.SASL_MECHANISM_NAME))
- {
- return Requests.newPlainSASLBindRequest(
- getAuthID(PlainSASLBindRequest.SASL_MECHANISM_NAME),
- ByteString.valueOf(getPassword())).setAuthorizationID(getAuthzID());
- }
-
- throw new ArgumentException(ERR_LDAPAUTH_UNSUPPORTED_SASL_MECHANISM
- .get(mech));
+ return bindRequest;
}
@@ -654,7 +662,7 @@
- private String getKDC() throws ArgumentException, CLIException
+ private String getKDC() throws ArgumentException
{
String value = null;
for (final String s : saslOptionArg.getValues())
@@ -760,7 +768,7 @@
* @return The password stored into the specified file on by the command line
* argument, or null it if not specified.
*/
- private String getPassword() throws CLIException
+ private String getPassword() throws ArgumentException
{
String value = "";
if (bindPasswordArg.isPresent())
@@ -773,7 +781,15 @@
}
if (value.length() == 0 && app.isInteractive())
{
- value = app.readLineOfInput(LocalizableMessage.raw("Bind Password:"));
+ try
+ {
+ value = app.readLineOfInput(LocalizableMessage.raw("Bind Password:"));
+ }
+ catch(CLIException e)
+ {
+ throw new ArgumentException(
+ LocalizableMessage.raw("Unable to read password"), e);
+ }
}
return value;
@@ -781,7 +797,7 @@
- private String getRealm() throws ArgumentException, CLIException
+ private String getRealm() throws ArgumentException
{
String value = null;
for (final String s : saslOptionArg.getValues())
--
Gitblit v1.10.0