From c2d0d212b510d8e82b9b123b4d06a80b835c8cd4 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Fri, 06 Dec 2013 16:52:01 +0000
Subject: [PATCH] OpenDJ 3 : config framework
---
opendj-admin/src/main/java/org/opends/server/admin/client/ldap/JNDIDirContextAdaptor.java | 485 ++++++++++++++++++++++++-----------------------------
1 files changed, 219 insertions(+), 266 deletions(-)
diff --git a/opendj-admin/src/main/java/org/opends/server/admin/client/ldap/JNDIDirContextAdaptor.java b/opendj-admin/src/main/java/org/opends/server/admin/client/ldap/JNDIDirContextAdaptor.java
index 7764f2a..df7834c 100644
--- a/opendj-admin/src/main/java/org/opends/server/admin/client/ldap/JNDIDirContextAdaptor.java
+++ b/opendj-admin/src/main/java/org/opends/server/admin/client/ldap/JNDIDirContextAdaptor.java
@@ -27,8 +27,6 @@
*/
package org.opends.server.admin.client.ldap;
-
-
import java.util.Collection;
import java.util.Hashtable;
import java.util.LinkedList;
@@ -48,290 +46,245 @@
import javax.naming.ldap.LdapName;
import javax.naming.ldap.Rdn;
-import org.opends.admin.ads.util.BlindTrustManager;
-import org.opends.admin.ads.util.ConnectionUtils;
-import org.opends.admin.ads.util.TrustedSocketFactory;
import org.opends.server.admin.client.AuthenticationException;
import org.opends.server.admin.client.AuthenticationNotSupportedException;
import org.opends.server.admin.client.CommunicationException;
-import org.opends.server.schema.SchemaConstants;
-
-
/**
- * An LDAP connection adaptor which maps LDAP requests onto an
- * underlying JNDI connection context.
+ * An LDAP connection adaptor which maps LDAP requests onto an underlying JNDI
+ * connection context.
*/
public final class JNDIDirContextAdaptor extends LDAPConnection {
- /**
- * Adapts the provided JNDI <code>DirContext</code>.
- *
- * @param dirContext
- * The JNDI connection.
- * @return Returns a new JNDI connection adaptor.
- */
- public static JNDIDirContextAdaptor adapt(DirContext dirContext) {
- return new JNDIDirContextAdaptor(dirContext);
- }
-
-
-
- /**
- * Creates a new JNDI connection adaptor by performing a simple bind
- * operation to the specified LDAP server.
- *
- * @param host
- * The host.
- * @param port
- * The port.
- * @param name
- * The LDAP bind DN.
- * @param password
- * The LDAP bind password.
- * @return Returns a new JNDI connection adaptor.
- * @throws CommunicationException
- * If the client cannot contact the server due to an
- * underlying communication problem.
- * @throws AuthenticationNotSupportedException
- * If the server does not support simple authentication.
- * @throws AuthenticationException
- * If authentication failed for some reason, usually due
- * to invalid credentials.
- */
- public static JNDIDirContextAdaptor simpleBind(String host, int port,
- String name, String password) throws CommunicationException,
- AuthenticationNotSupportedException, AuthenticationException {
- Hashtable<String, Object> env = new Hashtable<String, Object>();
- env
- .put(Context.INITIAL_CONTEXT_FACTORY,
- "com.sun.jndi.ldap.LdapCtxFactory");
- String hostname = ConnectionUtils.getHostNameForLdapUrl(host) ;
- env.put(Context.PROVIDER_URL, "ldap://" + hostname + ":" + port);
- env.put(Context.SECURITY_PRINCIPAL, name);
- env.put(Context.SECURITY_CREDENTIALS, password);
-
- DirContext ctx;
- try {
- ctx = new InitialLdapContext(env, null);
- } catch (javax.naming.CommunicationException e) {
- throw new CommunicationException(e);
- } catch (javax.naming.AuthenticationException e) {
- throw new AuthenticationException(e);
- } catch (javax.naming.AuthenticationNotSupportedException e) {
- throw new AuthenticationNotSupportedException(e);
- } catch (NamingException e) {
- // Assume some kind of communication problem.
- throw new CommunicationException(e);
+ /**
+ * Adapts the provided JNDI <code>DirContext</code>.
+ *
+ * @param dirContext
+ * The JNDI connection.
+ * @return Returns a new JNDI connection adaptor.
+ */
+ public static JNDIDirContextAdaptor adapt(DirContext dirContext) {
+ return new JNDIDirContextAdaptor(dirContext);
}
- return new JNDIDirContextAdaptor(ctx);
- }
+ /**
+ * Creates a new JNDI connection adaptor by performing a simple bind
+ * operation to the specified LDAP server.
+ *
+ * @param host
+ * The host.
+ * @param port
+ * The port.
+ * @param name
+ * The LDAP bind DN.
+ * @param password
+ * The LDAP bind password.
+ * @return Returns a new JNDI connection adaptor.
+ * @throws CommunicationException
+ * If the client cannot contact the server due to an underlying
+ * communication problem.
+ * @throws AuthenticationNotSupportedException
+ * If the server does not support simple authentication.
+ * @throws AuthenticationException
+ * If authentication failed for some reason, usually due to
+ * invalid credentials.
+ */
+ public static JNDIDirContextAdaptor simpleBind(String host, int port, String name, String password)
+ throws CommunicationException, AuthenticationNotSupportedException, AuthenticationException {
+ Hashtable<String, Object> env = new Hashtable<String, Object>();
+ env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
+ String hostname = ConnectionUtils.getHostNameForLdapUrl(host);
+ env.put(Context.PROVIDER_URL, "ldap://" + hostname + ":" + port);
+ env.put(Context.SECURITY_PRINCIPAL, name);
+ env.put(Context.SECURITY_CREDENTIALS, password);
- /**
- * Creates a new JNDI connection adaptor by performing a simple bind
- * operation to the specified LDAP server.
- *
- * @param host
- * The host.
- * @param port
- * The port.
- * @param name
- * The LDAP bind DN.
- * @param password
- * The LDAP bind password.
- * @return Returns a new JNDI connection adaptor.
- * @throws CommunicationException
- * If the client cannot contact the server due to an
- * underlying communication problem.
- * @throws AuthenticationNotSupportedException
- * If the server does not support simple authentication.
- * @throws AuthenticationException
- * If authentication failed for some reason, usually due
- * to invalid credentials.
- */
- public static JNDIDirContextAdaptor simpleSSLBind(String host, int port,
- String name, String password) throws CommunicationException,
- AuthenticationNotSupportedException, AuthenticationException {
- Hashtable<String, Object> env = new Hashtable<String, Object>();
- env.put(Context.INITIAL_CONTEXT_FACTORY,
- "com.sun.jndi.ldap.LdapCtxFactory");
- String hostname = ConnectionUtils.getHostNameForLdapUrl(host) ;
- env.put(Context.PROVIDER_URL, "ldaps://" + hostname + ":" + port);
- env.put(Context.SECURITY_PRINCIPAL, name);
- env.put(Context.SECURITY_CREDENTIALS, password);
- env.put(Context.SECURITY_AUTHENTICATION, "simple");
- // Specify SSL
- env.put(Context.SECURITY_PROTOCOL, "ssl");
- env.put("java.naming.ldap.factory.socket",
- org.opends.admin.ads.util.TrustedSocketFactory.class.getName());
- TrustedSocketFactory.setCurrentThreadTrustManager(new BlindTrustManager(),
- null);
- DirContext ctx;
- try {
- ctx = new InitialLdapContext(env, null);
- } catch (javax.naming.CommunicationException e) {
- throw new CommunicationException(e);
- } catch (javax.naming.AuthenticationException e) {
- throw new AuthenticationException(e);
- } catch (javax.naming.AuthenticationNotSupportedException e) {
- throw new AuthenticationNotSupportedException(e);
- } catch (NamingException e) {
- // Assume some kind of communication problem.
- throw new CommunicationException(e);
- }
-
- return new JNDIDirContextAdaptor(ctx);
- }
-
-
- // The JNDI connection context.
- private final DirContext dirContext;
-
-
-
- // Create a new JNDI connection adaptor using the provider JNDI
- // DirContext.
- private JNDIDirContextAdaptor(DirContext dirContext) {
- this.dirContext = dirContext;
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void createEntry(LdapName dn, Attributes attributes)
- throws NamingException {
- dirContext.createSubcontext(dn, attributes).close();
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void deleteSubtree(LdapName dn) throws NamingException {
- // Delete the children first.
- for (LdapName child : listEntries(dn, null)) {
- deleteSubtree(child);
- }
-
- // Delete the named entry.
- dirContext.destroySubcontext(dn);
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean entryExists(LdapName dn) throws NamingException {
- boolean entryExists = false;
- String filter = "(objectClass=*)";
- SearchControls controls = new SearchControls();
- controls.setSearchScope(SearchControls.OBJECT_SCOPE);
- controls
- .setReturningAttributes(new String[] { SchemaConstants.NO_ATTRIBUTES });
- try {
- NamingEnumeration<SearchResult> results = dirContext.search(dn, filter,
- controls);
- try
- {
- while (results.hasMore()) {
- // To avoid having a systematic abandon in the server.
- results.next();
- entryExists = true;
+ DirContext ctx;
+ try {
+ ctx = new InitialLdapContext(env, null);
+ } catch (javax.naming.CommunicationException e) {
+ throw new CommunicationException(e);
+ } catch (javax.naming.AuthenticationException e) {
+ throw new AuthenticationException(e);
+ } catch (javax.naming.AuthenticationNotSupportedException e) {
+ throw new AuthenticationNotSupportedException(e);
+ } catch (NamingException e) {
+ // Assume some kind of communication problem.
+ throw new CommunicationException(e);
}
- }
- finally
- {
- results.close();
- }
- } catch (NameNotFoundException e) {
- // Fall through - entry not found.
- }
- return entryExists;
- }
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Collection<LdapName> listEntries(LdapName dn, String filter)
- throws NamingException {
- if (filter == null) {
- filter = "(objectClass=*)";
+ return new JNDIDirContextAdaptor(ctx);
}
- SearchControls controls = new SearchControls();
- controls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
+ /**
+ * Creates a new JNDI connection adaptor by performing a simple bind
+ * operation to the specified LDAP server.
+ *
+ * @param host
+ * The host.
+ * @param port
+ * The port.
+ * @param name
+ * The LDAP bind DN.
+ * @param password
+ * The LDAP bind password.
+ * @return Returns a new JNDI connection adaptor.
+ * @throws CommunicationException
+ * If the client cannot contact the server due to an underlying
+ * communication problem.
+ * @throws AuthenticationNotSupportedException
+ * If the server does not support simple authentication.
+ * @throws AuthenticationException
+ * If authentication failed for some reason, usually due to
+ * invalid credentials.
+ */
+ public static JNDIDirContextAdaptor simpleSSLBind(String host, int port, String name, String password)
+ throws CommunicationException, AuthenticationNotSupportedException, AuthenticationException {
+ Hashtable<String, Object> env = new Hashtable<String, Object>();
+ env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
+ String hostname = ConnectionUtils.getHostNameForLdapUrl(host);
+ env.put(Context.PROVIDER_URL, "ldaps://" + hostname + ":" + port);
+ env.put(Context.SECURITY_PRINCIPAL, name);
+ env.put(Context.SECURITY_CREDENTIALS, password);
+ env.put(Context.SECURITY_AUTHENTICATION, "simple");
+ // Specify SSL
+ env.put(Context.SECURITY_PROTOCOL, "ssl");
+ env.put("java.naming.ldap.factory.socket", org.opends.admin.ads.util.TrustedSocketFactory.class.getName());
+ TrustedSocketFactory.setCurrentThreadTrustManager(new BlindTrustManager(), null);
+ DirContext ctx;
+ try {
+ ctx = new InitialLdapContext(env, null);
+ } catch (javax.naming.CommunicationException e) {
+ throw new CommunicationException(e);
+ } catch (javax.naming.AuthenticationException e) {
+ throw new AuthenticationException(e);
+ } catch (javax.naming.AuthenticationNotSupportedException e) {
+ throw new AuthenticationNotSupportedException(e);
+ } catch (NamingException e) {
+ // Assume some kind of communication problem.
+ throw new CommunicationException(e);
+ }
- List<LdapName> children = new LinkedList<LdapName>();
- NamingEnumeration<SearchResult> results = dirContext.search(dn, filter,
- controls);
- try
- {
- while (results.hasMore()) {
- SearchResult sr = results.next();
- LdapName child = new LdapName(dn.getRdns());
- child.add(new Rdn(sr.getName()));
- children.add(child);
- }
- }
- finally
- {
- results.close();
+ return new JNDIDirContextAdaptor(ctx);
}
- return children;
- }
+ // The JNDI connection context.
+ private final DirContext dirContext;
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void modifyEntry(LdapName dn, Attributes mods) throws NamingException {
- ModificationItem[] modList = new ModificationItem[mods.size()];
- NamingEnumeration<? extends Attribute> ne = mods.getAll();
- for (int i = 0; ne.hasMore(); i++) {
- ModificationItem modItem = new ModificationItem(
- DirContext.REPLACE_ATTRIBUTE, ne.next());
- modList[i] = modItem;
+ // Create a new JNDI connection adaptor using the provider JNDI
+ // DirContext.
+ private JNDIDirContextAdaptor(DirContext dirContext) {
+ this.dirContext = dirContext;
}
- dirContext.modifyAttributes(dn, modList);
- }
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Attributes readEntry(LdapName dn, Collection<String> attrIds)
- throws NamingException {
- String[] attrIdList = attrIds.toArray(new String[attrIds.size()]);
- return dirContext.getAttributes(dn, attrIdList);
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void unbind() {
- try {
- dirContext.close();
- } catch (NamingException e) {
- // nothing to do
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void createEntry(LdapName dn, Attributes attributes) throws NamingException {
+ dirContext.createSubcontext(dn, attributes).close();
}
- }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void deleteSubtree(LdapName dn) throws NamingException {
+ // Delete the children first.
+ for (LdapName child : listEntries(dn, null)) {
+ deleteSubtree(child);
+ }
+
+ // Delete the named entry.
+ dirContext.destroySubcontext(dn);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean entryExists(LdapName dn) throws NamingException {
+ boolean entryExists = false;
+ String filter = "(objectClass=*)";
+ SearchControls controls = new SearchControls();
+ controls.setSearchScope(SearchControls.OBJECT_SCOPE);
+ controls.setReturningAttributes(new String[] { SchemaConstants.NO_ATTRIBUTES });
+ try {
+ NamingEnumeration<SearchResult> results = dirContext.search(dn, filter, controls);
+ try {
+ while (results.hasMore()) {
+ // To avoid having a systematic abandon in the server.
+ results.next();
+ entryExists = true;
+ }
+ } finally {
+ results.close();
+ }
+ } catch (NameNotFoundException e) {
+ // Fall through - entry not found.
+ }
+ return entryExists;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Collection<LdapName> listEntries(LdapName dn, String filter) throws NamingException {
+ if (filter == null) {
+ filter = "(objectClass=*)";
+ }
+
+ SearchControls controls = new SearchControls();
+ controls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
+
+ List<LdapName> children = new LinkedList<LdapName>();
+ NamingEnumeration<SearchResult> results = dirContext.search(dn, filter, controls);
+ try {
+ while (results.hasMore()) {
+ SearchResult sr = results.next();
+ LdapName child = new LdapName(dn.getRdns());
+ child.add(new Rdn(sr.getName()));
+ children.add(child);
+ }
+ } finally {
+ results.close();
+ }
+
+ return children;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void modifyEntry(LdapName dn, Attributes mods) throws NamingException {
+ ModificationItem[] modList = new ModificationItem[mods.size()];
+ NamingEnumeration<? extends Attribute> ne = mods.getAll();
+ for (int i = 0; ne.hasMore(); i++) {
+ ModificationItem modItem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, ne.next());
+ modList[i] = modItem;
+ }
+ dirContext.modifyAttributes(dn, modList);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Attributes readEntry(LdapName dn, Collection<String> attrIds) throws NamingException {
+ String[] attrIdList = attrIds.toArray(new String[attrIds.size()]);
+ return dirContext.getAttributes(dn, attrIdList);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void unbind() {
+ try {
+ dirContext.close();
+ } catch (NamingException e) {
+ // nothing to do
+ }
+ }
}
--
Gitblit v1.10.0