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

jdemendi
31.52.2009 713d9fabc5e30e0dd4016328904dca66d75cf7e3
fix 3892, ACI evaluation is made optional when returning entries and references to clients
3 files modified
110 ■■■■■ changed files
opends/src/server/org/opends/server/core/SearchOperation.java 41 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/core/SearchOperationBasis.java 41 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/core/SearchOperationWrapper.java 28 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/core/SearchOperation.java
@@ -22,7 +22,7 @@
 * CDDL HEADER END
 *
 *
 *      Copyright 2006-2008 Sun Microsystems, Inc.
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 */
package org.opends.server.core;
@@ -242,6 +242,26 @@
  public abstract boolean returnEntry(Entry entry, List<Control> controls);
  /**
   * Used as a callback for backends to indicate that the provided entry matches
   * the search criteria and that additional processing should be performed to
   * potentially send it back to the client.
   *
   * @param  entry        The entry that matches the search criteria and should
   *                      be sent to the client.
   * @param  controls     The set of controls to include with the entry (may be
   *                      <CODE>null</CODE> if none are needed).
   * @param  evaluateAci  Indicates whether the access rights to the entry
   *                      should be evaluated.
   *
   * @return  <CODE>true</CODE> if the caller should continue processing the
   *          search request and sending additional entries and references, or
   *          <CODE>false</CODE> if not for some reason (e.g., the size limit
   *          has been reached or the search has been abandoned).
   */
  public abstract boolean returnEntry(Entry entry, List<Control> controls,
                                      boolean evaluateAci);
  /**
   * Used as a callback for backends to indicate that the provided search
   * reference was encountered during processing and that additional processing
   * should be performed to potentially send it back to the client.
@@ -258,6 +278,25 @@
                                          SearchResultReference reference);
  /**
   * Used as a callback for backends to indicate that the provided search
   * reference was encountered during processing and that additional processing
   * should be performed to potentially send it back to the client.
   *
   * @param  reference    The search reference to send to the client.
   * @param  dn           The DN related to the specified search reference.
   * @param  evaluateAci  Indicates whether the access rights to the entry
   *                      should be evaluated.
   *
   * @return  <CODE>true</CODE> if the caller should continue processing the
   *          search request and sending additional entries and references , or
   *          <CODE>false</CODE> if not for some reason (e.g., the size limit
   *          has been reached or the search has been abandoned).
   */
  public abstract boolean returnReference(DN dn,
                                          SearchResultReference reference,
                                          boolean evaluateAci);
  /**
   * Sends the search result done message to the client.  Note that this method
   * should only be called from external classes in special cases (e.g.,
   * persistent search) where they are sure that the result won't be sent by the
opends/src/server/org/opends/server/core/SearchOperationBasis.java
@@ -576,6 +576,15 @@
   */
  public final boolean returnEntry(Entry entry, List<Control> controls)
  {
    return returnEntry(entry, controls, true);
  }
  /**
   * {@inheritDoc}
   */
  public final boolean returnEntry(Entry entry, List<Control> controls,
                                   boolean evaluateAci)
  {
    boolean typesOnly = getTypesOnly();
    // See if the size limit has been exceeded.  If so, then don't send the
@@ -702,11 +711,14 @@
    }
    // Check to see if the entry can be read by the client.
    SearchResultEntry tmpSearchEntry = new SearchResultEntry(entry,
    if (evaluateAci)
    {
      SearchResultEntry tmpSearchEntry = new SearchResultEntry(entry,
        controls);
    if (AccessControlConfigManager.getInstance()
        .getAccessControlHandler().maySend(this, tmpSearchEntry) == false) {
      return true;
      if (AccessControlConfigManager.getInstance()
          .getAccessControlHandler().maySend(this, tmpSearchEntry) == false) {
        return true;
      }
    }
    // Make a copy of the entry and pare it down to only include the set
@@ -803,8 +815,11 @@
    // FIXME: need some way to prevent plugins from adding attributes or
    // values that the client is not permitted to see.
    searchEntry = AccessControlConfigManager.getInstance()
    if (evaluateAci)
    {
      searchEntry = AccessControlConfigManager.getInstance()
        .getAccessControlHandler().filterEntry(this, searchEntry);
    }
    // Invoke any search entry plugins that may be registered with the server.
    PluginResult.IntermediateResponse pluginResult =
@@ -842,6 +857,15 @@
   */
  public final boolean returnReference(DN dn, SearchResultReference reference)
  {
    return returnReference(dn, reference, true);
  }
  /**
   * {@inheritDoc}
   */
  public final boolean returnReference(DN dn, SearchResultReference reference,
                                       boolean evaluateAci)
  {
    // See if the time limit has expired.  If so, then don't send the entry and
    // indicate that the search should end.
    if ((getTimeLimit() > 0) && (TimeThread.getTime() >=
@@ -862,9 +886,12 @@
    // See if the client has permission to read this reference.
    if (AccessControlConfigManager.getInstance()
    if (evaluateAci)
    {
      if (AccessControlConfigManager.getInstance()
        .getAccessControlHandler().maySend(dn, this, reference) == false) {
      return true;
        return true;
      }
    }
opends/src/server/org/opends/server/core/SearchOperationWrapper.java
@@ -22,7 +22,7 @@
 * CDDL HEADER END
 *
 *
 *      Copyright 2008 Sun Microsystems, Inc.
 *      Copyright 2008-2009 Sun Microsystems, Inc.
 */
package org.opends.server.core;
@@ -70,6 +70,19 @@
  /**
   * {@inheritDoc}
   */
  public boolean returnEntry(Entry entry, List<Control> controls,
                             boolean evaluateAci)
  {
    boolean result;
    result = this.search.returnEntry(entry, controls, evaluateAci);
    return result;
  }
  /**
   * {@inheritDoc}
   */
  public boolean returnReference(DN dn, SearchResultReference reference)
  {
    boolean result;
@@ -82,6 +95,19 @@
  /**
   * {@inheritDoc}
   */
  public boolean returnReference(DN dn, SearchResultReference reference,
                                 boolean evaluateAci)
  {
    boolean result;
    result = this.search.returnReference(dn, reference, evaluateAci);
    return result;
  }
  /**
   * {@inheritDoc}
   */
  public String toString()
  {
    return search.toString();