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(); }