mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

ludovicp
20.39.2010 66c1a80d263b71195a525d1c1fdd59e464a606ae
Fix all command lines that are doing Searches with JNDI, to avoid them sending systematic Abandon requests.
12 files modified
224 ■■■■ changed files
opends/src/ads/org/opends/admin/ads/ADSContext.java 41 ●●●● patch | view | raw | blame | history
opends/src/ads/org/opends/admin/ads/ADSContextHelper.java 10 ●●●●● patch | view | raw | blame | history
opends/src/ads/org/opends/admin/ads/ServerDescriptor.java 2 ●●● patch | view | raw | blame | history
opends/src/ads/org/opends/admin/ads/util/ConnectionUtils.java 17 ●●●● patch | view | raw | blame | history
opends/src/guitools/org/opends/guitools/controlpanel/browser/NodeRefresher.java 63 ●●●● patch | view | raw | blame | history
opends/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java 16 ●●●● patch | view | raw | blame | history
opends/src/guitools/org/opends/guitools/controlpanel/util/LDAPEntryReader.java 16 ●●●●● patch | view | raw | blame | history
opends/src/guitools/org/opends/guitools/controlpanel/util/RemoteSchemaLoader.java 6 ●●●● patch | view | raw | blame | history
opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java 18 ●●●● patch | view | raw | blame | history
opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java 12 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/admin/client/ldap/JNDIDirContextAdaptor.java 11 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java 12 ●●●●● patch | view | raw | blame | history
opends/src/ads/org/opends/admin/ads/ADSContext.java
@@ -784,7 +784,7 @@
      ne = attrs.getAll();
      while (ne.hasMore())
      {
        Attribute attr = (Attribute)ne.next();
        Attribute attr = ne.next();
        String attrID = attr.getID();
        if (!attrID.toLowerCase().equals(
@@ -870,14 +870,16 @@
            ne2 = dirContext.search(getInstanceKeysContainerDN(),
                "(ds-cfg-key-id="+keyId+")", sc);
            if (ne2.hasMore())
            boolean found = false;
            while (ne2.hasMore())
            {
              SearchResult certEntry = ne2.next();
              Attribute certAttr = certEntry.getAttributes().get(attrIDs[0]);
              properties.put(ServerProperty.INSTANCE_PUBLIC_KEY_CERTIFICATE,
                  certAttr.get());
              found = true;
            }
            else
            if (!found)
            {
              LOG.log(Level.WARNING, "Could not find public key for "+
                  properties);
@@ -1412,10 +1414,20 @@
        sc.setReturningAttributes(attList);
        NamingEnumeration<SearchResult> ne = dirContext.search(
            dnCentralAdmin, "(objectclass=*)", sc);
        SearchResult sr = ne.next();
        try
        {
          while (ne.hasMore())
          {
            SearchResult sr = ne.next();
        currentPrivileges = sr.getAttributes().get("ds-privilege-name")
        .getAll();
            currentPrivileges = sr.getAttributes().get("ds-privilege-name")
            .getAll();
          }
        }
        finally
        {
          handleCloseNamingEnumeration(ne);
        }
      }
@@ -2237,7 +2249,22 @@
      SearchControls sc = new SearchControls();
      sc.setSearchScope(SearchControls.OBJECT_SCOPE);
      result = getDirContext().search(dn, "(objectclass=*)", sc).hasMore();
      sc.setReturningAttributes(new String[] {"1.1"});
      NamingEnumeration<SearchResult> sr =
        getDirContext().search(dn, "(objectclass=*)", sc);
      result = false;
      try
      {
        while (sr.hasMore())
        {
          sr.next();
          result = true;
        }
      }
      finally
      {
        sr.close();
      }
    }
    catch (NameNotFoundException x)
    {
opends/src/ads/org/opends/admin/ads/ADSContextHelper.java
@@ -235,15 +235,17 @@
    NamingEnumeration<SearchResult> results = null;
    try
    {
     results = ctx.search(ADSContext.getInstanceKeysContainerDN(), keyAttrs,
      results = ctx.search(ADSContext.getInstanceKeysContainerDN(), keyAttrs,
         attrIDs);
      if (results.hasMore()) {
      boolean found = false;
      while (results.hasMore()) {
        final Attribute keyIdAttr =
          results.next().getAttributes().get(attrIDs[0]);
        if (null != keyIdAttr) {
          /* attribute ds-cfg-key-id is the entry is a MUST in the schema */
          keyID = (String)keyIdAttr.get();
        }
        found = true;
      }
      /* TODO: It is possible (but unexpected) that the caller specifies a
   ds-cfg-key-id value for which there is a certificate entry in ADS, but
@@ -251,7 +253,7 @@
   above search would not return the entry, but the below attempt to add
   an new entry with the supplied ds-cfg-key-id will fail (throw a
   NameAlreadyBoundException) */
      else {
      if (!found) {
        /* create key ID, if it was not supplied in serverProperties */
        if (null == keyID) {
          keyID = CryptoManagerImpl.getInstanceKeyID(
@@ -334,7 +336,7 @@
    {
      results = ctx.search(
          ADSContext.getInstanceKeysContainerDN(), keyAttrs, attrIDs);
      if (results.hasMore()) {
      while (results.hasMore()) {
        SearchResult res = results.next();
        ctx.destroySubcontext(res.getNameInNamespace());
      }
opends/src/ads/org/opends/admin/ads/ServerDescriptor.java
@@ -875,7 +875,7 @@
      Integer adminConnectorPort = null;
      // we should have a single administration connector
      if (listeners.hasMore()) {
      while (listeners.hasMore()) {
        SearchResult sr = listeners.next();
        String port = getFirstValue(sr, "ds-cfg-listen-port");
        adminConnectorPort = new Integer(port);
opends/src/ads/org/opends/admin/ads/util/ConnectionUtils.java
@@ -39,6 +39,7 @@
import javax.naming.CommunicationException;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
@@ -626,13 +627,23 @@
       * Search for the config to check that it is the directory manager.
       */
      SearchControls searchControls = new SearchControls();
      searchControls.setCountLimit(1);
      searchControls.setSearchScope(
          SearchControls. OBJECT_SCOPE);
      searchControls.setReturningAttributes(
          new String[] {"1.1"});
      ctx.search("cn=config", "objectclass=*", searchControls);
      NamingEnumeration<SearchResult> sr =
       ctx.search("cn=config", "objectclass=*", searchControls);
      try
      {
        while (sr.hasMore())
        {
          sr.next();
        }
      }
      finally
      {
        sr.close();
      }
      connectedAsAdministrativeUser = true;
    } catch (NamingException ne)
    {
opends/src/guitools/org/opends/guitools/controlpanel/browser/NodeRefresher.java
@@ -267,6 +267,7 @@
  /**
   * The method that actually does the refresh.
   */
  @Override
  public void run() {
    final BasicNode node = getNode();
@@ -351,11 +352,23 @@
              ctls);
    try
    {
      if (!s.hasMoreElements())
      if (!s.hasMore())
      {
        throw new NameNotFoundException("Entry "+node.getDN()+
            " does not verify filter "+controller.getFilter());
      }
      while (s.hasMore())
      {
        s.next();
      }
    }
    catch (SizeLimitExceededException slme)
    {
      // We are just searching for an entry, but if there is more than one
      // this exception will be thrown.  We call sr.hasMore after the
      // first entry has been retrieved to avoid sending a systematic
      // abandon when closing the s NamingEnumeration.
      // See CR 6976906.
    }
    finally
    {
@@ -381,11 +394,23 @@
              ctls);
    try
    {
      if (!s.hasMoreElements())
      if (!s.hasMore())
      {
        throw new NameNotFoundException("Entry "+dn+
            " does not verify filter "+controller.getFilter());
      }
      while (s.hasMore())
      {
        s.next();
      }
    }
    catch (SizeLimitExceededException slme)
    {
      // We are just searching for an entry, but if there is more than one
      // this exception will be thrown.  We call sr.hasMore after the
      // first entry has been retrieved to avoid sending a systematic
      // abandon when closing the s NamingEnumeration.
      // See CR 6976906.
    }
    finally
    {
@@ -418,7 +443,7 @@
                ctls);
      try
      {
        if (s.hasMore())
        while (s.hasMore())
        {
          localEntry = s.next();
          localEntry.setName(node.getDN());
@@ -534,7 +559,8 @@
            ctls);
        try
        {
          if (sr.hasMore())
          boolean found = false;
          while (sr.hasMore())
          {
            entry = sr.next();
            String name;
@@ -547,12 +573,21 @@
              name = unquoteRelativeName(entry.getName())+","+remoteDn;
            }
            entry.setName(name);
            found = true;
          }
          else
          if (!found)
          {
            throw new NameNotFoundException();
          }
        }
        catch (SizeLimitExceededException sle)
        {
          // We are just searching for an entry, but if there is more than one
          // this exception will be thrown.  We call sr.hasMore after the
          // first entry has been retrieved to avoid sending a systematic
          // abandon when closing the sr NamingEnumeration.
          // See CR 6976906.
        }
        finally
        {
          sr.close();
@@ -673,13 +708,19 @@
          ctls);
      throwAbandonIfNeeded(null);
      if (searchResults.hasMoreElements()) { // May be parentNode has children
      isLeafNode = true;
      // Check if parentNode has children
      while (searchResults.hasMoreElements()) {
        isLeafNode = false;
      }
      else { // parentNode has no children
        isLeafNode = true;
      }
    }
    catch (SizeLimitExceededException e)
    {
      // We are just searching for an entry, but if there is more than one
      // this exception will be thrown.  We call sr.hasMore after the
      // first entry has been retrieved to avoid sending a systematic
      // abandon when closing the searchResults NamingEnumeration.
      // See CR 6976906.
    }
    catch (NamingException x) {
      throwAbandonIfNeeded(x);
@@ -787,7 +828,7 @@
          boolean add = false;
          if (useCustomFilter())
          {
            // Check that is an inmediate child: use a faster method by just
            // Check that is an immediate child: use a faster method by just
            // comparing the number of components.
            DN dn = null;
            try
opends/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java
@@ -122,6 +122,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public Message getTitle()
  {
    return INFO_CTRL_PANEL_LOCAL_OR_REMOTE_PANEL_TITLE.get();
@@ -130,6 +131,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public GenericDialog.ButtonType getButtonType()
  {
    return GenericDialog.ButtonType.OK_CANCEL;
@@ -406,6 +408,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public Component getPreferredFocusComponent()
  {
    if (pwd.isVisible())
@@ -428,6 +431,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public void toBeDisplayed(boolean visible)
  {
    super.toBeDisplayed(visible);
@@ -436,6 +440,7 @@
      // Do it outside the event thread if the panel requires it.
      BackgroundTask<Void> worker = new BackgroundTask<Void>()
      {
        @Override
        public Void processBackgroundTask() throws Throwable
        {
          try
@@ -451,6 +456,7 @@
        }
        @Override
        public void backgroundTaskCompleted(Void returnValue,
            Throwable t)
        {
@@ -479,6 +485,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public void okClicked()
  {
    setPrimaryValid(portLabel);
@@ -553,6 +560,7 @@
        /**
         * {@inheritDoc}
         */
        @Override
        public InitialLdapContext processBackgroundTask() throws Throwable
        {
          getInfo().stopPooling();
@@ -638,6 +646,7 @@
        /**
         * {@inheritDoc}
         */
        @Override
        public void backgroundTaskCompleted(InitialLdapContext ctx,
            Throwable throwable)
        {
@@ -818,6 +827,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public void cancelClicked()
  {
    setPrimaryValid(dnLabel);
@@ -945,7 +955,6 @@
       * Search for the version on the remote server.
       */
      SearchControls searchControls = new SearchControls();
      searchControls.setCountLimit(1);
      searchControls.setSearchScope(
      SearchControls.OBJECT_SCOPE);
      searchControls.setReturningAttributes(
@@ -961,7 +970,10 @@
      SearchResult sr = null;
      try
      {
        sr = en.next();
        while (en.hasMore())
        {
          sr = en.next();
        }
      }
      finally
      {
opends/src/guitools/org/opends/guitools/controlpanel/util/LDAPEntryReader.java
@@ -48,9 +48,10 @@
 */
public class LDAPEntryReader extends BackgroundTask<CustomSearchResult>
{
  private String dn;
  private InitialLdapContext ctx;
  private Set<EntryReadListener> listeners = new HashSet<EntryReadListener>();
  private final String dn;
  private final InitialLdapContext ctx;
  private final Set<EntryReadListener> listeners =
    new HashSet<EntryReadListener>();
  private boolean isOver;
  private boolean notifyListeners;
@@ -69,6 +70,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public CustomSearchResult processBackgroundTask() throws Throwable
  {
    isOver = false;
@@ -76,7 +78,6 @@
    try
    {
      SearchControls controls = new SearchControls();
      controls.setCountLimit(1);
      String[] attrs = {"*", "+"};
      controls.setReturningAttributes(attrs);
@@ -85,7 +86,11 @@
      en = ctx.search(Utilities.getJNDIName(dn), filter, controls);
      SearchResult sr = en.next();
      SearchResult sr = null;
      while (en.hasMore())
      {
        sr = en.next();
      }
      return new CustomSearchResult(sr, dn);
    }
@@ -105,6 +110,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public void backgroundTaskCompleted(CustomSearchResult sr,
      Throwable throwable)
  {
opends/src/guitools/org/opends/guitools/controlpanel/util/RemoteSchemaLoader.java
@@ -96,7 +96,10 @@
    SearchResult sr = null;
    try
    {
      sr = srs.next();
      while (srs.hasMore())
      {
        sr = srs.next();
      }
    }
    finally
    {
@@ -187,6 +190,7 @@
   * Returns the schema that was read.
   * @return the schema that was read.
   */
  @Override
  public Schema getSchema()
  {
    return schema;
opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java
@@ -55,8 +55,10 @@
import javax.naming.CompositeName;
import javax.naming.InvalidNameException;
import javax.naming.Name;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapName;
import javax.swing.BorderFactory;
@@ -628,6 +630,7 @@
      col.setCellRenderer(renderer);
    }
    MouseAdapter listMouseListener = new MouseAdapter() {
      @Override
      public void mouseClicked(MouseEvent e) {
        TableColumnModel columnModel = table.getColumnModel();
        int viewColumn = columnModel.getColumnIndexAtX(e.getX());
@@ -2448,12 +2451,23 @@
     * Search for the config to check that it is the directory manager.
     */
    SearchControls searchControls = new SearchControls();
    searchControls.setCountLimit(1);
    searchControls.setSearchScope(
    SearchControls. OBJECT_SCOPE);
    searchControls.setReturningAttributes(
    new String[] {"1.1"});
    ctx.search("cn=config", "objectclass=*", searchControls);
    NamingEnumeration<SearchResult> sr =
      ctx.search("cn=config", "objectclass=*", searchControls);
    try
    {
      while (sr.hasMore())
      {
        sr.next();
      }
    }
    finally
    {
      sr.close();
    }
  }
  /**
opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
@@ -4643,7 +4643,6 @@
    }
    // Wait until it is over
    SearchControls searchControls = new SearchControls();
    searchControls.setCountLimit(1);
    searchControls.setSearchScope(
        SearchControls. OBJECT_SCOPE);
    String filter = "objectclass=*";
@@ -4689,7 +4688,10 @@
        SearchResult sr = null;
        try
        {
          sr = res.next();
          while (res.hasMore())
          {
            sr = res.next();
          }
        }
        finally
        {
@@ -4965,7 +4967,6 @@
    }
    // Wait until it is over
    SearchControls searchControls = new SearchControls();
    searchControls.setCountLimit(1);
    searchControls.setSearchScope(
        SearchControls. OBJECT_SCOPE);
    String filter = "objectclass=*";
@@ -4991,7 +4992,10 @@
        SearchResult sr = null;
        try
        {
          sr = res.next();
          while (res.hasMore())
          {
            sr = res.next();
          }
        }
        finally
        {
opends/src/server/org/opends/server/admin/client/ldap/JNDIDirContextAdaptor.java
@@ -228,17 +228,20 @@
   */
  @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[]{"1.1"});
    try {
      NamingEnumeration<SearchResult> results = dirContext.search(dn, filter,
          controls);
      try
      {
        if (results.hasMore()) {
          return true;
        while (results.hasMore()) {
          // To avoid having a systematic abandon in the server.
          results.next();
          entryExists = true;
        }
      }
      finally
@@ -248,7 +251,7 @@
    } catch (NameNotFoundException e) {
      // Fall through - entry not found.
    }
    return false;
    return entryExists;
  }
opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java
@@ -7721,7 +7721,6 @@
    }
    // Wait until it is over
    SearchControls searchControls = new SearchControls();
    searchControls.setCountLimit(1);
    searchControls.setSearchScope(
        SearchControls. OBJECT_SCOPE);
    String filter = "objectclass=*";
@@ -7747,7 +7746,10 @@
        SearchResult sr = null;
        try
        {
          sr = res.next();
          while (res.hasMore())
          {
            sr = res.next();
          }
        }
        finally
        {
@@ -7876,7 +7878,6 @@
    }
    // Wait until it is over
    SearchControls searchControls = new SearchControls();
    searchControls.setCountLimit(1);
    searchControls.setSearchScope(
        SearchControls. OBJECT_SCOPE);
    String filter = "objectclass=*";
@@ -7908,7 +7909,10 @@
        SearchResult sr = null;
        try
        {
          sr = res.next();
          while (res.hasMore())
          {
            sr = res.next();
          }
        }
        finally
        {