| | |
| | | * |
| | | * |
| | | * Copyright 2008-2010 Sun Microsystems, Inc. |
| | | * Portions Copyright 2013 ForgeRock AS |
| | | * Portions Copyright 2013-2014 ForgeRock AS |
| | | */ |
| | | package org.opends.server.admin.client.ldap; |
| | | |
| | | |
| | | |
| | | import java.util.Collection; |
| | | import java.util.Hashtable; |
| | | import java.util.LinkedList; |
| | |
| | | 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; |
| | | |
| | | |
| | | import static com.forgerock.opendj.cli.Utils.*; |
| | | |
| | | /** |
| | | * An LDAP connection adaptor which maps LDAP requests onto an |
| | |
| | | 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.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); |
| | | String hostname = 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); |
| | | } |
| | | |
| | | return new JNDIDirContextAdaptor(ctx); |
| | | return createJNDIDirContextAdaptor(env); |
| | | } |
| | | |
| | | /** |
| | |
| | | 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.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); |
| | | String hostname = 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_PROTOCOL, "ssl"); |
| | | env.put("java.naming.ldap.factory.socket", |
| | | org.opends.admin.ads.util.TrustedSocketFactory.class.getName()); |
| | | TrustedSocketFactory.setCurrentThreadTrustManager(new BlindTrustManager(), |
| | | null); |
| | | TrustedSocketFactory.setCurrentThreadTrustManager(new BlindTrustManager(), null); |
| | | return createJNDIDirContextAdaptor(env); |
| | | } |
| | | |
| | | private static JNDIDirContextAdaptor createJNDIDirContextAdaptor(Hashtable<String, Object> env) |
| | | throws CommunicationException, AuthenticationException, AuthenticationNotSupportedException |
| | | { |
| | | DirContext ctx; |
| | | try { |
| | | ctx = new InitialLdapContext(env, null); |
| | |
| | | // Assume some kind of communication problem. |
| | | throw new CommunicationException(e); |
| | | } |
| | | |
| | | return new JNDIDirContextAdaptor(ctx); |
| | | } |
| | | |
| | | |
| | | // The JNDI connection context. |
| | | /** The JNDI connection context. */ |
| | | private final DirContext dirContext; |
| | | |
| | | |
| | | |
| | | // Create a new JNDI connection adaptor using the provider JNDI |
| | | // DirContext. |
| | | /** |
| | | * Create a new JNDI connection adaptor using the provider JNDI |
| | | * DirContext. |
| | | */ |
| | | private JNDIDirContextAdaptor(DirContext dirContext) { |
| | | this.dirContext = dirContext; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void createEntry(LdapName dn, Attributes attributes) |
| | | throws NamingException { |
| | | dirContext.createSubcontext(dn, attributes).close(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void deleteSubtree(LdapName dn) throws NamingException { |
| | | // Delete the children first. |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@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 }); |
| | | controls.setReturningAttributes(new String[] { SchemaConstants.NO_ATTRIBUTES }); |
| | | try { |
| | | NamingEnumeration<SearchResult> results = dirContext.search(dn, filter, |
| | | controls); |
| | | NamingEnumeration<SearchResult> results = dirContext.search(dn, filter, controls); |
| | | try |
| | | { |
| | | while (results.hasMore()) { |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Collection<LdapName> listEntries(LdapName dn, String filter) |
| | | throws NamingException { |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void modifyEntry(LdapName dn, Attributes mods) throws NamingException { |
| | | ModificationItem[] modList = new ModificationItem[mods.size()]; |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Attributes readEntry(LdapName dn, Collection<String> attrIds) |
| | | throws NamingException { |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void unbind() { |
| | | try { |