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

Matthew Swift
13.42.2011 be2ed817814e6520d4959104a25347d0d62c8ce9
Minor cleanup of some virtual attribute providers:

* avoid unnecessary allocation of hashsets
* stop PWP VA from logging errors when it encounters LDAP PTA policies (log verbose trace instead).
4 files modified
132 ■■■■■ changed files
opends/src/server/org/opends/server/extensions/CollectiveAttributeSubentriesVirtualAttributeProvider.java 42 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProvider.java 44 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/extensions/MemberVirtualAttributeProvider.java 10 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/extensions/PasswordPolicySubentryVirtualAttributeProvider.java 36 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/extensions/CollectiveAttributeSubentriesVirtualAttributeProvider.java
@@ -23,10 +23,12 @@
 *
 *
 *      Copyright 2009-2010 Sun Microsystems, Inc.
 *      Portions copyright 2011 ForgeRock AS
 */
package org.opends.server.extensions;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -38,11 +40,9 @@
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.SearchOperation;
import org.opends.server.config.ConfigException;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.*;
import static org.opends.messages.ExtensionMessages.*;
import static org.opends.server.loggers.debug.DebugLogger.getTracer;
/**
 * This class implements a virtual attribute provider to serve the
@@ -54,11 +54,6 @@
        CollectiveAttributeSubentriesVirtualAttributeCfg>
{
  /**
   * The tracer object for the debug logger.
   */
  private static final DebugTracer TRACER = getTracer();
  /**
   * Creates a new instance of this collectiveAttributeSubentries
   * virtual attribute provider.
   */
@@ -103,13 +98,12 @@
  public Set<AttributeValue> getValues(Entry entry,
                                       VirtualAttributeRule rule)
  {
    Set<AttributeValue> valueSet = new HashSet<AttributeValue>();
    Set<AttributeValue> values = null;
    if (!entry.isSubentry() && !entry.isLDAPSubentry())
    {
      List<SubEntry> subentries =
              DirectoryServer.getSubentryManager(
              ).getCollectiveSubentries(entry);
      List<SubEntry> subentries = DirectoryServer.getSubentryManager()
          .getCollectiveSubentries(entry);
      AttributeType dnAttrType =
              DirectoryServer.getAttributeType("2.5.4.49");
@@ -121,12 +115,34 @@
          DN subentryDN = subentry.getDN();
          AttributeValue value = AttributeValues.create(
                  dnAttrType, subentryDN.toString());
          valueSet.add(value);
          if (values == null)
          {
            values = Collections.singleton(value);
          }
          else if (values.size() == 1)
          {
            Set<AttributeValue> tmp = new HashSet<AttributeValue>(2);
            tmp.addAll(values);
            tmp.add(value);
            values = tmp;
          }
          else
          {
            values.add(value);
          }
        }
      }
    }
    return valueSet;
    if (values == null)
    {
      return Collections.emptySet();
    }
    else
    {
      return Collections.unmodifiableSet(values);
    }
  }
opends/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProvider.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2008-2009 Sun Microsystems, Inc.
 *      Portions copyright 2011 ForgeRock AS
 */
package org.opends.server.extensions;
@@ -106,15 +107,30 @@
                                       VirtualAttributeRule rule)
  {
    // FIXME -- This probably isn't the most efficient implementation.
    HashSet<AttributeValue> values = new HashSet<AttributeValue>();
    for (Group g : DirectoryServer.getGroupManager().getGroupInstances())
    Set<AttributeValue> values = null;
    for (Group<?> g : DirectoryServer.getGroupManager().getGroupInstances())
    {
      try
      {
        if (g.isMember(entry))
        {
          values.add(AttributeValues.create(rule.getAttributeType(),
                                        g.getGroupDN().toString()));
          AttributeValue value = AttributeValues.create(
              rule.getAttributeType(), g.getGroupDN().toString());
          if (values == null)
          {
            values = Collections.singleton(value);
          }
          else if (values.size() == 1)
          {
            Set<AttributeValue> tmp = new HashSet<AttributeValue>(2);
            tmp.addAll(values);
            tmp.add(value);
            values = tmp;
          }
          else
          {
            values.add(value);
          }
        }
      }
      catch (Exception e)
@@ -126,7 +142,14 @@
      }
    }
    return Collections.unmodifiableSet(values);
    if (values == null)
    {
      return Collections.emptySet();
    }
    else
    {
      return Collections.unmodifiableSet(values);
    }
  }
@@ -138,7 +161,7 @@
  public boolean hasValue(Entry entry, VirtualAttributeRule rule)
  {
    // FIXME -- This probably isn't the most efficient implementation.
    for (Group g : DirectoryServer.getGroupManager().getGroupInstances())
    for (Group<?> g : DirectoryServer.getGroupManager().getGroupInstances())
    {
      try
      {
@@ -171,7 +194,7 @@
    try
    {
      DN groupDN = DN.decode(value.getValue());
      Group g = DirectoryServer.getGroupManager().getGroupInstance(groupDN);
      Group<?> g = DirectoryServer.getGroupManager().getGroupInstance(groupDN);
      if (g == null)
      {
        return false;
@@ -344,7 +367,7 @@
                            SearchOperation searchOperation)
  {
    SearchFilter filter = searchOperation.getFilter();
    Group group = extractGroup(rule.getAttributeType(), filter);
    Group<?> group = extractGroup(rule.getAttributeType(), filter);
    if (group == null)
    {
      return;
@@ -393,14 +416,15 @@
   * @return  The first group encountered in the provided filter, or
   *          {@code null} if there is no match.
   */
  private Group extractGroup(AttributeType attributeType, SearchFilter filter)
  private Group<?> extractGroup(AttributeType attributeType,
      SearchFilter filter)
  {
    switch (filter.getFilterType())
    {
      case AND:
        for (SearchFilter f : filter.getFilterComponents())
        {
          Group g = extractGroup(attributeType, f);
          Group<?> g = extractGroup(attributeType, f);
          if (g != null)
          {
            return g;
opends/src/server/org/opends/server/extensions/MemberVirtualAttributeProvider.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2008-2009 Sun Microsystems, Inc.
 *      Portions copyright 2011 ForgeRock AS
 */
package org.opends.server.extensions;
import org.opends.messages.Message;
@@ -130,7 +131,8 @@
      return Collections.emptySet();
    }
    Group g = DirectoryServer.getGroupManager().getGroupInstance(entry.getDN());
    Group<?> g =
      DirectoryServer.getGroupManager().getGroupInstance(entry.getDN());
    if (g == null)
    {
      return Collections.emptySet();
@@ -179,7 +181,8 @@
  @Override()
  public boolean hasValue(Entry entry, VirtualAttributeRule rule)
  {
    Group g = DirectoryServer.getGroupManager().getGroupInstance(entry.getDN());
    Group<?> g =
      DirectoryServer.getGroupManager().getGroupInstance(entry.getDN());
    if (g == null)
    {
      return false;
@@ -228,7 +231,8 @@
  public boolean hasValue(Entry entry, VirtualAttributeRule rule,
                          AttributeValue value)
  {
    Group g = DirectoryServer.getGroupManager().getGroupInstance(entry.getDN());
    Group<?> g =
      DirectoryServer.getGroupManager().getGroupInstance(entry.getDN());
    if (g == null)
    {
      return false;
opends/src/server/org/opends/server/extensions/PasswordPolicySubentryVirtualAttributeProvider.java
@@ -28,7 +28,7 @@
package org.opends.server.extensions;
import java.util.HashSet;
import java.util.Collections;
import java.util.Set;
import org.opends.messages.Message;
@@ -106,8 +106,6 @@
  public Set<AttributeValue> getValues(Entry entry,
                                       VirtualAttributeRule rule)
  {
    Set<AttributeValue> valueSet = new HashSet<AttributeValue>();
    if (!entry.isSubentry() && !entry.isLDAPSubentry())
    {
      AuthenticationPolicy policy = null;
@@ -131,28 +129,38 @@
        }
      }
      if (policy != null && policy.isPasswordPolicy())
      if (policy == null)
      {
        AttributeType dnAttrType = DirectoryServer.getAttributeType(
                "1.3.6.1.4.1.42.2.27.8.1.23");
        // No authentication policy: debug log this as an error since all
        // entries should have at least the default password policy.
        if (debugEnabled())
        {
          TRACER.debugError("No applicable password policy for user %s", entry
              .getDN().toString());
        }
      }
      else if (policy.isPasswordPolicy())
      {
        AttributeType dnAttrType = DirectoryServer
            .getAttributeType("1.3.6.1.4.1.42.2.27.8.1.23");
        DN policyDN = policy.getDN();
        AttributeValue value = AttributeValues.create(
                dnAttrType, policyDN.toString());
        valueSet.add(value);
        AttributeValue value = AttributeValues.create(dnAttrType,
            policyDN.toString());
        return Collections.singleton(value);
      }
      else
      {
        // No default policy, debug log this.
        // Not a password policy, could be PTA, etc.
        if (debugEnabled())
        {
          TRACER.debugError(
                  "No applicable password policy for user %s"
                  + entry.getDN().toString());
          TRACER.debugVerbose("Authentication policy %s found for user %s is "
              + "not a password policy", policy.getDN().toString(), entry
              .getDN().toString());
        }
      }
    }
    return valueSet;
    return Collections.emptySet();
  }