| | |
| | | */ |
| | | package org.opends.guitools.controlpanel.browser; |
| | | |
| | | import static org.opends.admin.ads.util.ConnectionUtils.getHostPort; |
| | | import static org.opends.admin.ads.util.ConnectionUtils.isSSL; |
| | | import static org.opends.messages.AdminToolMessages.*; |
| | | |
| | | import java.util.ArrayList; |
| | |
| | | import javax.naming.SizeLimitExceededException; |
| | | import javax.naming.directory.SearchControls; |
| | | import javax.naming.directory.SearchResult; |
| | | import javax.naming.ldap.InitialLdapContext; |
| | | import javax.naming.ldap.LdapName; |
| | | import javax.swing.SwingUtilities; |
| | | import javax.swing.tree.TreeNode; |
| | |
| | | import org.forgerock.opendj.ldap.RDN; |
| | | import org.forgerock.opendj.ldap.SearchScope; |
| | | import org.opends.admin.ads.util.ConnectionUtils; |
| | | import org.opends.admin.ads.util.ConnectionWrapper; |
| | | import org.opends.guitools.controlpanel.ui.nodes.BasicNode; |
| | | import org.opends.messages.AdminToolMessages; |
| | | import org.opends.server.schema.SchemaConstants; |
| | |
| | | |
| | | /** |
| | | * Performs the search in the case the user specified a custom filter. |
| | | * @param node the parent node we perform the search from. |
| | | * @param ctx the connection to be used. |
| | | * @throws NamingException if a problem occurred. |
| | | * |
| | | * @param node |
| | | * the parent node we perform the search from. |
| | | * @param conn |
| | | * the connection to be used. |
| | | * @throws NamingException |
| | | * if a problem occurred. |
| | | */ |
| | | private void searchForCustomFilter(BasicNode node, InitialLdapContext ctx) |
| | | private void searchForCustomFilter(BasicNode node, ConnectionWrapper conn) |
| | | throws NamingException |
| | | { |
| | | SearchControls ctls = controller.getBasicSearchControls(); |
| | | ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); |
| | | ctls.setReturningAttributes(new String[] { SchemaConstants.NO_ATTRIBUTES }); |
| | | ctls.setCountLimit(1); |
| | | NamingEnumeration<SearchResult> s = ctx.search(new LdapName(node.getDN()), |
| | | NamingEnumeration<SearchResult> s = |
| | | conn.getLdapContext().search(new LdapName(node.getDN()), |
| | | controller.getFilter(), |
| | | ctls); |
| | | try |
| | |
| | | /** |
| | | * Performs the search in the case the user specified a custom filter. |
| | | * @param dn the parent DN we perform the search from. |
| | | * @param ctx the connection to be used. |
| | | * @param conn the connection to be used. |
| | | * @throws NamingException if a problem occurred. |
| | | */ |
| | | private void searchForCustomFilter(String dn, InitialLdapContext ctx) |
| | | private void searchForCustomFilter(String dn, ConnectionWrapper conn) |
| | | throws NamingException |
| | | { |
| | | SearchControls ctls = controller.getBasicSearchControls(); |
| | | ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); |
| | | ctls.setReturningAttributes(new String[]{}); |
| | | ctls.setCountLimit(1); |
| | | NamingEnumeration<SearchResult> s = ctx.search(new LdapName(dn), |
| | | NamingEnumeration<SearchResult> s = conn.getLdapContext().search(new LdapName(dn), |
| | | controller.getFilter(), |
| | | ctls); |
| | | try |
| | |
| | | /** Read the local entry associated to the current node. */ |
| | | private void runReadLocalEntry() throws SearchAbandonException { |
| | | BasicNode node = getNode(); |
| | | InitialLdapContext ctx = null; |
| | | ConnectionWrapper conn = null; |
| | | try { |
| | | ctx = controller.findConnectionForLocalEntry(node); |
| | | conn = controller.findConnectionForLocalEntry(node); |
| | | |
| | | if (ctx != null) { |
| | | if (conn != null) { |
| | | if (useCustomFilter()) |
| | | { |
| | | // Check that the entry verifies the filter |
| | | searchForCustomFilter(node, ctx); |
| | | searchForCustomFilter(node, conn); |
| | | } |
| | | |
| | | SearchControls ctls = controller.getBasicSearchControls(); |
| | |
| | | ctls.setSearchScope(SearchControls.OBJECT_SCOPE); |
| | | |
| | | NamingEnumeration<SearchResult> s = |
| | | ctx.search(new LdapName(node.getDN()), |
| | | conn.getLdapContext().search(new LdapName(node.getDN()), |
| | | controller.getObjectSearchFilter(), |
| | | ctls); |
| | | try |
| | |
| | | throwAbandonIfNeeded(x); |
| | | } |
| | | finally { |
| | | if (ctx != null) { |
| | | controller.releaseLDAPConnection(ctx); |
| | | if (conn != null) { |
| | | controller.releaseLDAPConnection(conn); |
| | | } |
| | | } |
| | | } |
| | |
| | | int i = 0; |
| | | while (i < referral.length && entry == null) |
| | | { |
| | | InitialLdapContext ctx = null; |
| | | ConnectionWrapper conn = null; |
| | | try { |
| | | url = LDAPURL.decode(referral[i], false); |
| | | if (url.getHost() == null) |
| | | { |
| | | // Use the local server connection. |
| | | ctx = controller.getUserDataConnection(); |
| | | HostPort hostPort = getHostPort(ctx); |
| | | conn = controller.getUserDataConnection(); |
| | | HostPort hostPort = conn.getHostPort(); |
| | | url.setHost(hostPort.getHost()); |
| | | url.setPort(hostPort.getPort()); |
| | | url.setScheme(isSSL(ctx) ? "ldaps" : "ldap"); |
| | | url.setScheme(conn.isSSL() ? "ldaps" : "ldap"); |
| | | } |
| | | ctx = connectionPool.getConnection(url); |
| | | conn = connectionPool.getConnection(url); |
| | | remoteDn = url.getRawBaseDN(); |
| | | if (remoteDn == null || "".equals(remoteDn)) |
| | | { |
| | |
| | | if (useCustomFilter() && url.getScope() == SearchScope.BASE_OBJECT) |
| | | { |
| | | // Check that the entry verifies the filter |
| | | searchForCustomFilter(remoteDn, ctx); |
| | | searchForCustomFilter(remoteDn, conn); |
| | | } |
| | | |
| | | int scope = getJNDIScope(url); |
| | |
| | | ctls.setReturningAttributes(controller.getAttrsForBlackSearch()); |
| | | ctls.setSearchScope(scope); |
| | | ctls.setCountLimit(1); |
| | | NamingEnumeration<SearchResult> sr = ctx.search(remoteDn, |
| | | NamingEnumeration<SearchResult> sr = conn.getLdapContext().search(remoteDn, |
| | | filter, |
| | | ctls); |
| | | try |
| | |
| | | lastExceptionArg = referral[i]; |
| | | } |
| | | finally { |
| | | if (ctx != null) { |
| | | connectionPool.releaseConnection(ctx); |
| | | if (conn != null) { |
| | | connectionPool.releaseConnection(conn); |
| | | } |
| | | } |
| | | i = i + 1; |
| | |
| | | */ |
| | | private void runDetectChildrenManually() throws SearchAbandonException { |
| | | BasicNode parentNode = getNode(); |
| | | InitialLdapContext ctx = null; |
| | | ConnectionWrapper conn = null; |
| | | NamingEnumeration<SearchResult> searchResults = null; |
| | | |
| | | try { |
| | |
| | | ctls.setSearchScope(SearchControls.OBJECT_SCOPE); |
| | | } |
| | | // Send an LDAP search |
| | | ctx = controller.findConnectionForDisplayedEntry(parentNode); |
| | | searchResults = ctx.search( |
| | | conn = controller.findConnectionForDisplayedEntry(parentNode); |
| | | searchResults = conn.getLdapContext().search( |
| | | new LdapName(controller.findBaseDNForChildEntries(parentNode)), |
| | | controller.getChildSearchFilter(), |
| | | ctls); |
| | |
| | | throwAbandonIfNeeded(x); |
| | | } |
| | | finally { |
| | | if (ctx != null) { |
| | | controller.releaseLDAPConnection(ctx); |
| | | if (conn != null) { |
| | | controller.releaseLDAPConnection(conn); |
| | | } |
| | | if (searchResults != null) |
| | | { |
| | |
| | | * @throws SearchAbandonException if an error occurs. |
| | | */ |
| | | private void runSearchChildren() throws SearchAbandonException { |
| | | InitialLdapContext ctx = null; |
| | | ConnectionWrapper conn = null; |
| | | BasicNode parentNode = getNode(); |
| | | parentNode.setSizeLimitReached(false); |
| | | |
| | |
| | | ctls.setSearchScope(SearchControls.ONELEVEL_SCOPE); |
| | | } |
| | | ctls.setReturningAttributes(controller.getAttrsForRedSearch()); |
| | | ctx = controller.findConnectionForDisplayedEntry(parentNode); |
| | | conn = controller.findConnectionForDisplayedEntry(parentNode); |
| | | String parentDn = controller.findBaseDNForChildEntries(parentNode); |
| | | int parentComponents; |
| | | try |
| | |
| | | throw new RuntimeException("Error decoding dn: "+parentDn+" . "+t, |
| | | t); |
| | | } |
| | | NamingEnumeration<SearchResult> entries = ctx.search( |
| | | NamingEnumeration<SearchResult> entries = conn.getLdapContext().search( |
| | | new LdapName(parentDn), |
| | | controller.getChildSearchFilter(), |
| | | ctls); |
| | |
| | | } |
| | | if (mustAddParent) |
| | | { |
| | | SearchResult parentResult = searchManuallyEntry(ctx, |
| | | parentToAddDN.toString()); |
| | | SearchResult parentResult = searchManuallyEntry(conn, parentToAddDN.toString()); |
| | | childEntries.add(parentResult); |
| | | } |
| | | } |
| | |
| | | throwAbandonIfNeeded(x); |
| | | } |
| | | finally { |
| | | if (ctx != null) |
| | | if (conn != null) |
| | | { |
| | | controller.releaseLDAPConnection(ctx); |
| | | controller.releaseLDAPConnection(conn); |
| | | } |
| | | } |
| | | } |
| | |
| | | /** |
| | | * Returns the entry for the given dn. |
| | | * The code assumes that the request controls are set in the connection. |
| | | * @param ctx the connection to be used. |
| | | * @param conn the connection to be used. |
| | | * @param dn the DN of the entry to be searched. |
| | | * @throws NamingException if an error occurs. |
| | | */ |
| | | private SearchResult searchManuallyEntry(InitialLdapContext ctx, String dn) |
| | | private SearchResult searchManuallyEntry(ConnectionWrapper conn, String dn) |
| | | throws NamingException |
| | | { |
| | | // Send an LDAP search |
| | | SearchControls ctls = controller.getBasicSearchControls(); |
| | | ctls.setSearchScope(SearchControls.OBJECT_SCOPE); |
| | | ctls.setReturningAttributes(controller.getAttrsForRedSearch()); |
| | | NamingEnumeration<SearchResult> entries = ctx.search( |
| | | NamingEnumeration<SearchResult> entries = conn.getLdapContext().search( |
| | | new LdapName(dn), |
| | | controller.getObjectSearchFilter(), |
| | | ctls); |
| | |
| | | if (dn2.isSuperiorOrEqualTo(dn1)) |
| | | { |
| | | HostPort urlHostPort = new HostPort(url.getHost(), url.getPort()); |
| | | checkSucceeded = urlHostPort.equals(getHostPort(controller.getConfigurationConnection())); |
| | | checkSucceeded = urlHostPort.equals(controller.getConfigurationConnection().getHostPort()); |
| | | if (checkSucceeded) |
| | | { |
| | | checkSucceeded = urlHostPort.equals(getHostPort(controller.getUserDataConnection())); |
| | | checkSucceeded = urlHostPort.equals(controller.getUserDataConnection().getHostPort()); |
| | | } |
| | | } |
| | | } |