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

Ludovic Poitou
07.41.2011 b892b0038d7dc619ee4fac7058189736d2d73f0d
opends/resource/schema/02-config.ldif
@@ -22,7 +22,7 @@
#
#
#      Copyright 2006-2010 Sun Microsystems, Inc.
#      Portions Copyright 2010 ForgeRock AS.
#      Portions Copyright 2010-2011 ForgeRock AS.
#
#
# This file contains the attribute type and objectclass definitions for use
@@ -3461,6 +3461,7 @@
         ds-cfg-enabled $
         ds-cfg-attribute-type )
  MAY ( ds-cfg-base-dn $
        ds-cfg-scope $
        ds-cfg-group-dn $
        ds-cfg-filter $
        ds-cfg-conflict-behavior )
opends/src/admin/defn/org/opends/server/admin/std/VirtualAttributeConfiguration.xml
@@ -24,6 +24,7 @@
  !
  !
  !      Copyright 2007-2008 Sun Microsystems, Inc.
  !      Portions Copyright 2011 ForgeRock AS
  ! -->
<adm:managed-object name="virtual-attribute"
  plural-name="virtual-attributes" package="org.opends.server.admin.std"
@@ -126,6 +127,47 @@
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="scope">
    <adm:synopsis>
      Specifies the LDAP scope associated with base DNs for entries that are
      eligible to use this virtual attribute.
    </adm:synopsis>
    <adm:default-behavior>
      <adm:defined>
        <adm:value>whole-subtree</adm:value>
      </adm:defined>
    </adm:default-behavior>
    <adm:syntax>
      <adm:enumeration>
        <adm:value name="base-object">
          <adm:synopsis>Search the base object only.</adm:synopsis>
        </adm:value>
        <adm:value name="single-level">
          <adm:synopsis>
            Search the immediate children of the base object but do not
            include any of their descendants or the base object itself.
          </adm:synopsis>
        </adm:value>
        <adm:value name="subordinate-subtree">
          <adm:synopsis>
            Search the entire subtree below the base object but do not
            include the base object itself.
          </adm:synopsis>
        </adm:value>
        <adm:value name="whole-subtree">
          <adm:synopsis>
            Search the base object and the entire subtree below the base
            object.
          </adm:synopsis>
        </adm:value>
      </adm:enumeration>
    </adm:syntax>
    <adm:profile name="ldap">
      <ldap:attribute>
        <ldap:name>ds-cfg-scope</ldap:name>
      </ldap:attribute>
    </adm:profile>
  </adm:property>
  <adm:property name="group-dn" multi-valued="true">
    <adm:synopsis>
      Specifies the DNs of the groups whose members can be eligible to
opends/src/server/org/opends/server/core/VirtualAttributeConfigManager.java
@@ -23,8 +23,10 @@
 *
 *
 *      Copyright 2007-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.core;
import org.opends.server.types.SearchScope;
import org.opends.messages.Message;
@@ -188,8 +190,10 @@
          VirtualAttributeRule rule =
               new VirtualAttributeRule(cfg.getAttributeType(), provider,
                                        cfg.getBaseDN(), cfg.getGroupDN(),
                                        filters, cfg.getConflictBehavior());
                     cfg.getBaseDN(),
                     SearchScope.valueOf(cfg.getScope().name()),
                     cfg.getGroupDN(),
                     filters, cfg.getConflictBehavior());
          rules.put(cfg.dn(), rule);
          DirectoryServer.registerVirtualAttribute(rule);
        }
@@ -324,10 +328,11 @@
    {
      VirtualAttributeRule rule =
           new VirtualAttributeRule(configuration.getAttributeType(), provider,
                                    configuration.getBaseDN(),
                                    configuration.getGroupDN(),
                                    filters,
                                    configuration.getConflictBehavior());
                 configuration.getBaseDN(),
                 SearchScope.valueOf(configuration.getScope().name()),
                 configuration.getGroupDN(),
                 filters,
                 configuration.getConflictBehavior());
      rules.put(configuration.dn(), rule);
      DirectoryServer.registerVirtualAttribute(rule);
@@ -506,10 +511,11 @@
    {
      VirtualAttributeRule rule =
           new VirtualAttributeRule(configuration.getAttributeType(), provider,
                                    configuration.getBaseDN(),
                                    configuration.getGroupDN(),
                                    filters,
                                    configuration.getConflictBehavior());
                 configuration.getBaseDN(),
                 SearchScope.valueOf(configuration.getScope().name()),
                 configuration.getGroupDN(),
                 filters,
                 configuration.getConflictBehavior());
      rules.put(configuration.dn(), rule);
      if (existingRule == null)
opends/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java
@@ -23,11 +23,11 @@
 *
 *
 *      Copyright 2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.replication.common;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -57,6 +57,15 @@
       extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
       implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
{
  /*
   * The base DN of the changelog is a constant.
   * TODO: This shouldn't be a virtual attribute, but directly
   * registered in the RootDSE.
   */
  private final Set<AttributeValue> values;
  /**
   * Creates a new instance of this member virtual attribute provider.
   */
@@ -64,8 +73,11 @@
  {
    super();
    // All initialization should be performed in the
    // initializeVirtualAttributeProvider method.
    AttributeValue value =
    AttributeValues.create(
        ByteString.valueOf(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT),
        ByteString.valueOf(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT));
    values=Collections.singleton(value);
  }
@@ -111,12 +123,6 @@
  @Override()
  public Set<AttributeValue> getValues(Entry entry,VirtualAttributeRule rule)
  {
    Set<AttributeValue> values = new HashSet<AttributeValue>();
    AttributeValue value =
      AttributeValues.create(
          ByteString.valueOf(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT),
          ByteString.valueOf(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT));
    values=Collections.singleton(value);
    return values;
  }
opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.replication.common;
@@ -30,7 +31,6 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -48,7 +48,6 @@
import org.opends.server.types.AttributeValues;
import org.opends.server.types.ByteString;
import org.opends.server.types.ConfigChangeResult;
import org.opends.server.types.DN;
import org.opends.server.types.DebugLogLevel;
import org.opends.server.types.Entry;
import org.opends.server.types.InitializationException;
@@ -120,6 +119,16 @@
  }
  /**
   *  {@inheritDoc}
   */
  @Override
  public boolean hasValue(Entry entry, VirtualAttributeRule rule)
  {
    // There's only a value for the rootDSE, i.e. the Null DN.
    return entry.getDN().isNullDN();
  }
  /**
   * {@inheritDoc}
@@ -127,14 +136,9 @@
  @Override()
  public Set<AttributeValue> getValues(Entry entry,VirtualAttributeRule rule)
  {
    Set<AttributeValue> values = new HashSet<AttributeValue>();
    String first="0";
    try
    {
      if (!entry.getDN().equals(DN.decode("")))
      {
        return values;
      }
      ECLWorkflowElement eclwe = (ECLWorkflowElement)
      DirectoryServer.getWorkflowElement("EXTERNAL CHANGE LOG");
      if (eclwe!=null)
@@ -157,13 +161,17 @@
    }
    catch(Exception e)
    {
      // We got an error computing the first change number.
      // Rather than returning 0 which is no change, return -1 to
      // indicate the error.
      first = "-1";
      TRACER.debugCaught(DebugLogLevel.ERROR, e);
    }
    AttributeValue value =
      AttributeValues.create(
          ByteString.valueOf(first),
          ByteString.valueOf(first));
    values=Collections.singleton(value);
    Set<AttributeValue> values=Collections.singleton(value);
    return values;
  }
opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.replication.common;
@@ -30,7 +31,6 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -48,7 +48,6 @@
import org.opends.server.types.AttributeValues;
import org.opends.server.types.ByteString;
import org.opends.server.types.ConfigChangeResult;
import org.opends.server.types.DN;
import org.opends.server.types.DebugLogLevel;
import org.opends.server.types.Entry;
import org.opends.server.types.InitializationException;
@@ -120,19 +119,26 @@
  /**
   *  {@inheritDoc}
   */
  @Override
  public boolean hasValue(Entry entry, VirtualAttributeRule rule)
  {
    // There's only a value for the rootDSE, i.e. the Null DN.
    return entry.getDN().isNullDN();
  }
  /**
   * {@inheritDoc}
   */
  @Override()
  public Set<AttributeValue> getValues(Entry entry,VirtualAttributeRule rule)
  {
    Set<AttributeValue> values = new HashSet<AttributeValue>();
    String last = "0";
    try
    {
      if (!entry.getDN().equals(DN.decode("")))
      {
        return values;
      }
      ECLWorkflowElement eclwe = (ECLWorkflowElement)
      DirectoryServer.getWorkflowElement("EXTERNAL CHANGE LOG");
      if (eclwe!=null)
@@ -154,13 +160,17 @@
    }
    catch(Exception e)
    {
      // We got an error computing the first change number.
      // Rather than returning 0 which is no change, return -1 to
      // indicate the error.
      last = "-1";
      TRACER.debugCaught(DebugLogLevel.ERROR, e);
    }
    AttributeValue value =
      AttributeValues.create(
          ByteString.valueOf(last),
          ByteString.valueOf(last));
    values=Collections.singleton(value);
    Set<AttributeValue> values =Collections.singleton(value);
    return values;
  }
opends/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.replication.common;
@@ -104,10 +105,8 @@
  @Override()
  public boolean hasValue(Entry entry, VirtualAttributeRule rule)
  {
    // Indicates whether this virtual attribute provider will generate
    // at least one value for the provided entry.
    // True is the DN is the one of the root DSE : "".
    return entry.getDN().toNormalizedString().equalsIgnoreCase("");
    // There's only a value for the rootDSE, i.e. the Null DN.
    return entry.getDN().isNullDN();
  }
opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -91,6 +91,7 @@
import org.opends.server.workflowelement.externalchangelog.ECLWorkflowElement;
import com.sleepycat.je.DatabaseException;
import org.opends.server.types.SearchScope;
/**
 * ReplicationServer Listener.
@@ -690,7 +691,8 @@
      baseDNs.add(DN.decode(""));
      VirtualAttributeRule rule =
        new VirtualAttributeRule(attributeType, provider,
            baseDNs, groupDNs, filters, conflictBehavior);
              baseDNs, SearchScope.BASE_OBJECT,
              groupDNs, filters, conflictBehavior);
      DirectoryServer.registerVirtualAttribute(rule);
    }
opends/src/server/org/opends/server/types/VirtualAttributeRule.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2008 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.types;
@@ -71,6 +72,10 @@
  // virtual attribute.
  private final Set<DN> baseDNs;
  // The scope of entries eligible to have this virtual attribute,
  // under the base DNs.
  private final SearchScope scope;
  // The set of DNs for groups whose members are eligible to have this
  // virtual attribute.
  private final Set<DN> groupDNs;
@@ -101,6 +106,9 @@
   * @param  baseDNs           The set of base DNs for branches that
   *                           are eligible to have this virtual
   *                           attribute.
   * @param  scope             The scope of entries, related to the
   *                           base DNs, that are eligible to have
   *                           this virtual attribute.
   * @param  groupDNs          The set of DNs for groups whose members
   *                           are eligible to have this virtual
   *                           attribute.
@@ -115,7 +123,7 @@
  public VirtualAttributeRule(AttributeType attributeType,
              VirtualAttributeProvider<? extends VirtualAttributeCfg>
                   provider,
              Set<DN> baseDNs, Set<DN> groupDNs,
              Set<DN> baseDNs, SearchScope scope, Set<DN> groupDNs,
              Set<SearchFilter> filters,
              VirtualAttributeCfgDefn.ConflictBehavior
                   conflictBehavior)
@@ -126,6 +134,7 @@
    this.attributeType    = attributeType;
    this.provider         = provider;
    this.baseDNs          = baseDNs;
    this.scope            = scope;
    this.groupDNs         = groupDNs;
    this.filters          = filters;
    this.conflictBehavior = conflictBehavior;
@@ -176,6 +185,19 @@
  }
  /**
   * Retrieves the scope of entries in the base DNs that are eligible
   * to have this virtual attribute.
   *
   * @return  The scope of entries that are eligible to
   *          have this virtual attribute.
   */
  public SearchScope getScope()
  {
    return scope;
  }
  /**
   * Retrieves the set of DNs for groups whose members are eligible to
@@ -254,7 +276,7 @@
      boolean found = false;
      for (DN dn : baseDNs)
      {
        if (entryDN.isDescendantOf(dn))
        if (entryDN.matchesBaseAndScope(dn , scope))
        {
          found = true;
          break;
@@ -378,8 +400,9 @@
      buffer.append("\"");
    }
    buffer.append("}, groupDNs={");
    buffer.append("}, scope=");
    buffer.append(scope.toString());
    buffer.append(", groupDNs={");
    if (! groupDNs.isEmpty())
    {
      buffer.append("\"");
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntryDNVirtualAttributeProviderTestCase.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2008-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.extensions;
@@ -545,7 +546,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryDNType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -580,7 +582,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryDNType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -612,7 +615,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryDNType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -645,7 +649,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryDNType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -677,7 +682,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryDNType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -710,7 +716,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryDNType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -745,7 +752,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryDNType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -780,7 +788,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryDNType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -817,7 +826,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryDNType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -854,7 +864,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryDNType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -890,7 +901,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryDNType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -924,7 +936,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryDNType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -958,7 +971,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryDNType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -1025,7 +1039,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryDNType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -1076,7 +1091,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryDNType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntryUUIDVirtualAttributeProviderTestCase.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2008-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.extensions;
@@ -561,7 +562,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryUUIDType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -596,7 +598,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryUUIDType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -630,7 +633,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryUUIDType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -664,7 +668,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryUUIDType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -696,7 +701,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryUUIDType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -731,7 +737,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryUUIDType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -766,7 +773,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryUUIDType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -803,7 +811,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryUUIDType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -840,7 +849,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(entryUUIDType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/GoverningStructureRuleVirtualAttributeProviderTestCase.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.extensions;
@@ -608,7 +609,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(governingStructureRuleType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -644,7 +646,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(governingStructureRuleType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -676,7 +679,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(governingStructureRuleType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -709,7 +713,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(governingStructureRuleType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -742,7 +747,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(governingStructureRuleType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -775,7 +781,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(governingStructureRuleType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -810,7 +817,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(governingStructureRuleType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -845,7 +853,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(governingStructureRuleType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -882,7 +891,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(governingStructureRuleType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProviderTestCase.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2008-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.extensions;
@@ -587,7 +588,8 @@
         new IsMemberOfVirtualAttributeProvider();
    VirtualAttributeRule rule =
         new VirtualAttributeRule(isMemberOfType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -651,7 +653,8 @@
         new IsMemberOfVirtualAttributeProvider();
    VirtualAttributeRule rule =
         new VirtualAttributeRule(isMemberOfType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -718,7 +721,8 @@
         new IsMemberOfVirtualAttributeProvider();
    VirtualAttributeRule rule =
         new VirtualAttributeRule(isMemberOfType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -785,7 +789,8 @@
         new IsMemberOfVirtualAttributeProvider();
    VirtualAttributeRule rule =
         new VirtualAttributeRule(isMemberOfType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -854,7 +859,8 @@
         new IsMemberOfVirtualAttributeProvider();
    VirtualAttributeRule rule =
         new VirtualAttributeRule(isMemberOfType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -898,7 +904,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(isMemberOfType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -934,7 +941,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(isMemberOfType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -968,7 +976,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(isMemberOfType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -1002,7 +1011,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(isMemberOfType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -1097,7 +1107,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(isMemberOfType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -1224,7 +1235,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(isMemberOfType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/StructuralObjectClassVirtualAttributeProviderTestCase.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.extensions;
@@ -576,7 +577,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(structuralObjectClassType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -612,7 +614,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(structuralObjectClassType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -644,7 +647,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(structuralObjectClassType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -678,7 +682,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(structuralObjectClassType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -711,7 +716,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(structuralObjectClassType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -744,7 +750,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(structuralObjectClassType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -779,7 +786,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(structuralObjectClassType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -814,7 +822,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(structuralObjectClassType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -852,7 +861,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(structuralObjectClassType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SubschemaSubentryVirtualAttributeProviderTestCase.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2008-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.extensions;
@@ -554,7 +555,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(subschemaSubentryType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -590,7 +592,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(subschemaSubentryType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -622,7 +625,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(subschemaSubentryType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -656,7 +660,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(subschemaSubentryType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -689,7 +694,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(subschemaSubentryType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -722,7 +728,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(subschemaSubentryType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -757,7 +764,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(subschemaSubentryType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -792,7 +800,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(subschemaSubentryType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
@@ -830,7 +839,8 @@
    VirtualAttributeRule rule =
         new VirtualAttributeRule(subschemaSubentryType, provider,
                  Collections.<DN>emptySet(), Collections.<DN>emptySet(),
                  Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                  Collections.<DN>emptySet(),
                  Collections.<SearchFilter>emptySet(),
                  VirtualAttributeCfgDefn.ConflictBehavior.
                       VIRTUAL_OVERRIDES_REAL);
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
@@ -243,10 +243,15 @@
    // Test all types of ops.
    ECLAllOps(); // Do not clean the db for the next test
    // Test that ECL Operational, virtual attributes are not visible
    // outside rootDSE. Next test will test access in RootDSE.
    // This one checks in data.
    ECLOperationalAttributesFailTest();
    // First and last should be ok whenever a request has been done or not
    // in compat mode.
    ECLCompatTestLimits(1,4,true);replicationServer.clearDb();
    // Test with a mix of domains, a mix of DSes
    ECLTwoDomains(); replicationServer.clearDb();
@@ -285,6 +290,11 @@
    // Test all types of ops.
    ECLAllOps(); // Do not clean the db for the next test
    // Test that ECL Operational, virtual attributes are not visible
    // outside rootDSE. Next test will test access in RootDSE.
    // This one checks in data.
    ECLOperationalAttributesFailTest();
    // First and last should be ok whenever a request has been done or not
    // in compat mode.
    ECLCompatTestLimits(1,4, true);replicationServer.clearDb();
@@ -3510,6 +3520,61 @@
    }
    debugInfo(tn, "Ending test with success");
  }
  private void ECLOperationalAttributesFailTest()
  {
    String tn = "ECLOperationalAttributesFailTest";
    // The goal is to verify that the Changelog attributes are not
    // available in other entries. We u
    debugInfo(tn, "Starting test \n\n");
    try
    {
      LinkedHashSet<String> attributes = new LinkedHashSet<String>();
      attributes.add("firstchangenumber");
      attributes.add("lastchangenumber");
      attributes.add("changelog");
      attributes.add("lastExternalChangelogCookie");
      debugInfo(tn, " Search: "+ TEST_ROOT_DN_STRING);
      InternalSearchOperation searchOp =
        connection.processSearch(
            ByteString.valueOf(TEST_ROOT_DN_STRING),
            SearchScope.BASE_OBJECT,
            DereferencePolicy.NEVER_DEREF_ALIASES,
            0, // Size limit
            0, // Time limit
            false, // Types only
            LDAPFilter.decode("(objectclass=*)"),
            attributes,
            NO_CONTROL,
            null);
      waitOpResult(searchOp, ResultCode.SUCCESS);
      assertEquals(searchOp.getSearchEntries().size(), 1);
      LinkedList<SearchResultEntry> entries = searchOp.getSearchEntries();
      assertEquals(entries.size(), 1);
      for (SearchResultEntry resultEntry : entries)
      {
          debugInfo(tn, "Result entry returned:" + resultEntry.toLDIFString());
          assertEquals(getAttributeValue(resultEntry, "firstchangenumber"),
                null);
          assertEquals(getAttributeValue(resultEntry, "lastchangenumber"),
                null);
          assertEquals(getAttributeValue(resultEntry, "changelog"),
                null);
          assertEquals(getAttributeValue(resultEntry, "lastExternalChangelogCookie"),
                null);
      }
      debugInfo(tn, "Ending test with success");
    }
    catch(Exception e)
    {
      fail("Ending "+tn+" test with exception:\n"
          +  stackTraceToSingleLineString(e));
    }
  }
  private void ECLCompatTestLimits(int expectedFirst, int expectedLast,
      boolean eclEnabled)
opends/tests/unit-tests-testng/src/server/org/opends/server/types/VirtualAttributeRuleTestCase.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2008 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.types;
@@ -134,6 +135,7 @@
      {
        new VirtualAttributeRule(entryDNType, provider,
                                 Collections.<DN>emptySet(),
                                 SearchScope.WHOLE_SUBTREE,
                                 Collections.<DN>emptySet(),
                                 Collections.<SearchFilter>emptySet(),
                                 ConflictBehavior.VIRTUAL_OVERRIDES_REAL),
@@ -143,6 +145,7 @@
      new Object[]
      {
        new VirtualAttributeRule(entryDNType, provider, dnSet1,
                                 SearchScope.WHOLE_SUBTREE,
                                 Collections.<DN>emptySet(),
                                 Collections.<SearchFilter>emptySet(),
                                 ConflictBehavior.VIRTUAL_OVERRIDES_REAL),
@@ -152,6 +155,7 @@
      new Object[]
      {
        new VirtualAttributeRule(entryDNType, provider, dnSet2,
                                 SearchScope.WHOLE_SUBTREE,
                                 Collections.<DN>emptySet(),
                                 Collections.<SearchFilter>emptySet(),
                                 ConflictBehavior.VIRTUAL_OVERRIDES_REAL),
@@ -161,6 +165,7 @@
      new Object[]
      {
        new VirtualAttributeRule(entryDNType, provider, dnSet3,
                                 SearchScope.WHOLE_SUBTREE,
                                 Collections.<DN>emptySet(),
                                 Collections.<SearchFilter>emptySet(),
                                 ConflictBehavior.VIRTUAL_OVERRIDES_REAL),
@@ -170,7 +175,8 @@
      new Object[]
      {
        new VirtualAttributeRule(entryDNType, provider,
                                 Collections.<DN>emptySet(), groupSet1,
                                 Collections.<DN>emptySet(),
                                 SearchScope.WHOLE_SUBTREE, groupSet1,
                                 Collections.<SearchFilter>emptySet(),
                                 ConflictBehavior.VIRTUAL_OVERRIDES_REAL),
        true
@@ -179,7 +185,8 @@
      new Object[]
      {
        new VirtualAttributeRule(entryDNType, provider,
                                 Collections.<DN>emptySet(), groupSet2,
                                 Collections.<DN>emptySet(),
                                 SearchScope.WHOLE_SUBTREE, groupSet2,
                                 Collections.<SearchFilter>emptySet(),
                                 ConflictBehavior.VIRTUAL_OVERRIDES_REAL),
        false
@@ -188,7 +195,8 @@
      new Object[]
      {
        new VirtualAttributeRule(entryDNType, provider,
                                 Collections.<DN>emptySet(), groupSet3,
                                 Collections.<DN>emptySet(),
                                 SearchScope.WHOLE_SUBTREE, groupSet3,
                                 Collections.<SearchFilter>emptySet(),
                                 ConflictBehavior.VIRTUAL_OVERRIDES_REAL),
        true
@@ -198,6 +206,7 @@
      {
        new VirtualAttributeRule(entryDNType, provider,
                                 Collections.<DN>emptySet(),
                                 SearchScope.WHOLE_SUBTREE,
                                 Collections.<DN>emptySet(), filterSet1,
                                 ConflictBehavior.VIRTUAL_OVERRIDES_REAL),
        true
@@ -207,6 +216,7 @@
      {
        new VirtualAttributeRule(entryDNType, provider,
                                 Collections.<DN>emptySet(),
                                 SearchScope.WHOLE_SUBTREE,
                                 Collections.<DN>emptySet(), filterSet2,
                                 ConflictBehavior.VIRTUAL_OVERRIDES_REAL),
        true
@@ -216,6 +226,7 @@
      {
        new VirtualAttributeRule(entryDNType, provider,
                                 Collections.<DN>emptySet(),
                                 SearchScope.WHOLE_SUBTREE,
                                 Collections.<DN>emptySet(), filterSet3,
                                 ConflictBehavior.VIRTUAL_OVERRIDES_REAL),
        false
@@ -225,6 +236,7 @@
      {
        new VirtualAttributeRule(entryDNType, provider,
                                 Collections.<DN>emptySet(),
                                 SearchScope.WHOLE_SUBTREE,
                                 Collections.<DN>emptySet(), filterSet4,
                                 ConflictBehavior.VIRTUAL_OVERRIDES_REAL),
        true
opends/tests/unit-tests-testng/src/server/org/opends/server/types/VirtualAttributeTestCase.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2008-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.types;
@@ -77,6 +78,7 @@
    virtualAttributeRule = new VirtualAttributeRule(entryDNType, provider,
                                    Collections.<DN>emptySet(),
                                    SearchScope.WHOLE_SUBTREE,
                                    Collections.<DN>emptySet(),
                                    Collections.<SearchFilter>emptySet(),
                                    ConflictBehavior.VIRTUAL_OVERRIDES_REAL);