opendj3-server-dev/src/server/org/opends/server/api/VirtualAttributeProvider.java
@@ -33,11 +33,11 @@ import org.forgerock.i18n.LocalizableMessage; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.opendj.config.server.ConfigException; import org.forgerock.opendj.ldap.ByteSequence; import org.forgerock.opendj.ldap.ByteString; import org.forgerock.opendj.ldap.ConditionResult; import org.opends.server.admin.std.server.VirtualAttributeCfg; import org.forgerock.opendj.config.server.ConfigException; import org.opends.server.core.SearchOperation; import org.opends.server.types.AttributeValue; import org.opends.server.types.Entry; @@ -108,10 +108,9 @@ VirtualAttributeCfg configuration, List<LocalizableMessage> unacceptableReasons) { // This default implementation does not perform any special // validation. It should be overridden by virtual attribute // provider implementations that wish to perform more detailed // validation. // This default implementation does not perform any special validation. // It should be overridden by virtual attribute provider implementations // that wish to perform more detailed validation. return true; } @@ -300,8 +299,7 @@ { logger.traceException(e); // The substring couldn't be normalized. We have to return // "undefined". // The substring couldn't be normalized => return "undefined". return ConditionResult.UNDEFINED; } } @@ -327,8 +325,7 @@ { logger.traceException(e); // The substring couldn't be normalized. We have to return // "undefined". // The substring couldn't be normalized => return "undefined". return ConditionResult.UNDEFINED; } } @@ -351,8 +348,7 @@ { logger.traceException(e); // The substring couldn't be normalized. We have to return // "undefined". // The substring couldn't be normalized => return "undefined". return ConditionResult.UNDEFINED; } } @@ -363,8 +359,9 @@ { try { ByteString nv = matchingRule.normalizeAttributeValue(value.getValue()); if (matchingRule.valueMatchesSubstring( value.getNormalizedValue(), nv, normalizedSubInitial, normalizedSubAny, normalizedSubFinal)) @@ -376,8 +373,8 @@ { logger.traceException(e); // The value couldn't be normalized. If we can't find a // definite match, then we should return "undefined". // We couldn't normalize one of the attribute values. // We will return "undefined" if we can't find a definite match result = ConditionResult.UNDEFINED; } } @@ -418,14 +415,13 @@ ByteString normalizedValue; try { normalizedValue = value.getNormalizedValue(); normalizedValue = matchingRule.normalizeAttributeValue(value.getValue()); } catch (Exception e) { logger.traceException(e); // We couldn't normalize the provided value. We should return // "undefined". // We couldn't normalize the provided value => return "undefined". return ConditionResult.UNDEFINED; } @@ -434,10 +430,8 @@ { try { ByteString nv = v.getNormalizedValue(); int comparisonResult = matchingRule.compareValues(nv, normalizedValue); if (comparisonResult >= 0) ByteString nv = matchingRule.normalizeAttributeValue(v.getValue()); if (matchingRule.compareValues(nv, normalizedValue) >= 0) { return ConditionResult.TRUE; } @@ -446,9 +440,8 @@ { logger.traceException(e); // We couldn't normalize one of the attribute values. If we // can't find a definite match, then we should return // "undefined". // We couldn't normalize one of the attribute values. // We will return "undefined" if we can't find a definite match result = ConditionResult.UNDEFINED; } } @@ -489,14 +482,13 @@ ByteString normalizedValue; try { normalizedValue = value.getNormalizedValue(); normalizedValue = matchingRule.normalizeAttributeValue(value.getValue()); } catch (Exception e) { logger.traceException(e); // We couldn't normalize the provided value. We should return // "undefined". // We couldn't normalize the provided value => return "undefined". return ConditionResult.UNDEFINED; } @@ -505,10 +497,8 @@ { try { ByteString nv = v.getNormalizedValue(); int comparisonResult = matchingRule.compareValues(nv, normalizedValue); if (comparisonResult <= 0) ByteString nv = matchingRule.normalizeAttributeValue(v.getValue()); if (matchingRule.compareValues(nv, normalizedValue) <= 0) { return ConditionResult.TRUE; } @@ -517,9 +507,8 @@ { logger.traceException(e); // We couldn't normalize one of the attribute values. If we // can't find a definite match, then we should return // "undefined". // We couldn't normalize one of the attribute values. // We will return "undefined" if we can't find a definite match result = ConditionResult.UNDEFINED; } } @@ -566,8 +555,7 @@ { logger.traceException(e); // We couldn't normalize the provided value. We should return // "undefined". // We couldn't normalize the provided value => return "undefined". return ConditionResult.UNDEFINED; } @@ -586,9 +574,8 @@ { logger.traceException(e); // We couldn't normalize one of the attribute values. If we // can't find a definite match, then we should return // "undefined". // We couldn't normalize one of the attribute values. // We will return "undefined" if we can't find a definite match result = ConditionResult.UNDEFINED; } } opendj3-server-dev/src/server/org/opends/server/controls/MatchedValuesFilter.java
@@ -1347,8 +1347,9 @@ { try { ByteString nv = orderingMatchingRule.normalizeAssertionValue(value.getValue()); return orderingMatchingRule.compareValues( assertionValue.getNormalizedValue(), nv, orderingMatchingRule.normalizeAttributeValue( value.getValue())) >= 0; } @@ -1369,8 +1370,9 @@ { try { ByteString nv = orderingMatchingRule.normalizeAssertionValue(value.getValue()); return orderingMatchingRule.compareValues( assertionValue.getNormalizedValue(), nv, orderingMatchingRule.normalizeAttributeValue( value.getValue())) <= 0; } @@ -1395,12 +1397,9 @@ { try { ByteString nv1 = approximateMatchingRule.normalizeAttributeValue( assertionValue.getNormalizedValue()); ByteString nv2 = approximateMatchingRule.normalizeAttributeValue( value.getValue()); return approximateMatchingRule.approximatelyMatch(nv1, nv2); Assertion assertion = approximateMatchingRule.getAssertion(assertionValue.getValue()); ByteString nv = approximateMatchingRule.normalizeAttributeValue(value.getValue()); return assertion.matches(nv).toBoolean(); } catch (Exception e) { opendj3-server-dev/src/server/org/opends/server/extensions/NumSubordinatesVirtualAttributeProvider.java
@@ -34,13 +34,15 @@ import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.opendj.ldap.ByteString; import org.forgerock.opendj.ldap.ConditionResult; import org.forgerock.opendj.ldap.DecodeException; import org.forgerock.opendj.ldap.ResultCode; import org.opends.server.admin.std.server.NumSubordinatesVirtualAttributeCfg; import org.opends.server.api.Backend; import org.opends.server.api.EqualityMatchingRule; import org.opends.server.api.VirtualAttributeProvider; import org.opends.server.core.DirectoryServer; import org.opends.server.core.SearchOperation; import org.opends.server.types.*; import org.forgerock.opendj.ldap.ResultCode; import static org.opends.messages.ExtensionMessages.*; @@ -111,7 +113,6 @@ catch(DirectoryException de) { logger.traceException(de); return false; } } @@ -121,18 +122,23 @@ public boolean hasValue(Entry entry, VirtualAttributeRule rule, AttributeValue value) { Backend backend = DirectoryServer.getBackend(entry.getName()); Backend backend = DirectoryServer.getBackend(entry.getName()); EqualityMatchingRule eqRule = rule.getAttributeType().getEqualityMatchingRule(); try { String nv = eqRule.normalizeAttributeValue(value.getValue()).toString(); long count = backend.numSubordinates(entry.getName(), false); return count >= 0 && Long.parseLong(value.getNormalizedValue().toString()) == count; return count >= 0 && Long.parseLong(nv) == count; } catch(DirectoryException de) catch (DecodeException e) { logger.traceException(de); logger.traceException(e); return false; } catch (DirectoryException e) { logger.traceException(e); return false; } } opendj3-server-dev/src/server/org/opends/server/extensions/StaticGroup.java
@@ -35,20 +35,25 @@ import java.util.Set; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.opendj.config.server.ConfigException; import org.forgerock.opendj.ldap.ByteString; import org.forgerock.opendj.ldap.DecodeException; import org.forgerock.opendj.ldap.ModificationType; import org.forgerock.opendj.ldap.ResultCode; import org.forgerock.opendj.ldap.SearchScope; import org.opends.server.admin.std.server.GroupImplementationCfg; import org.opends.server.admin.std.server.StaticGroupImplementationCfg; import org.opends.server.api.EqualityMatchingRule; import org.opends.server.api.Group; import org.opends.server.core.ModifyOperationBasis; import org.opends.server.core.DirectoryServer; import org.forgerock.opendj.config.server.ConfigException; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.opends.server.protocols.internal.InternalClientConnection; import org.opends.server.protocols.ldap.LDAPControl; import org.opends.server.types.Attribute; import org.opends.server.types.AttributeType; import org.opends.server.types.AttributeValue; import org.opends.server.types.Attributes; import org.forgerock.opendj.ldap.ByteString; import org.opends.server.types.Control; import org.opends.server.types.DirectoryConfig; import org.opends.server.types.DirectoryException; @@ -58,11 +63,8 @@ import org.opends.server.types.MemberList; import org.opends.server.types.MembershipException; import org.opends.server.types.Modification; import org.forgerock.opendj.ldap.ModificationType; import org.opends.server.types.ObjectClass; import org.forgerock.opendj.ldap.ResultCode; import org.opends.server.types.SearchFilter; import org.forgerock.opendj.ldap.SearchScope; import static org.opends.messages.ExtensionMessages.*; import static org.opends.server.protocols.internal.InternalClientConnection.*; @@ -235,13 +237,15 @@ { for (Attribute a : memberAttrList) { EqualityMatchingRule eqRule = a.getAttributeType().getEqualityMatchingRule(); for (AttributeValue v : a) { try { someMemberDNs.add(v.getNormalizedValue()); someMemberDNs.add(eqRule.normalizeAttributeValue(v.getValue())); } catch (DirectoryException de) catch (DecodeException de) { logger.traceException(de); logger.error(ERR_STATICGROUP_CANNOT_DECODE_MEMBER_VALUE_AS_DN, v.getValue(), @@ -515,8 +519,7 @@ for(DN nestedGroupDN : nestedGroups) { Group<? extends GroupImplementationCfg> g = (Group<? extends GroupImplementationCfg>) DirectoryServer.getGroupManager().getGroupInstance(nestedGroupDN); DirectoryServer.getGroupManager().getGroupInstance(nestedGroupDN); if((g != null) && (g.isMember(userDN, examinedGroups))) { return true; opendj3-server-dev/src/server/org/opends/server/types/Entry.java
@@ -271,60 +271,6 @@ /** * Specifies the set of objectclasses for this entry. * * @param objectClassNames The values containing the names or OIDs * of the objectClasses for this entry. * * @throws DirectoryException If a problem occurs while attempting * to set the objectclasses for this * entry. */ public void setObjectClasses( Collection<AttributeValue> objectClassNames) throws DirectoryException { attachment = null; // Iterate through all the provided objectclass names and make // sure that they are names of valid objectclasses. Map<ObjectClass, String> ocMap = new LinkedHashMap<ObjectClass, String>(); for (AttributeValue v : objectClassNames) { String name = v.getValue().toString(); String lowerName; try { lowerName = v.getNormalizedValue().toString(); } catch (Exception e) { logger.traceException(e); lowerName = toLowerCase(v.getValue().toString()); } ObjectClass oc = DirectoryServer.getObjectClass(lowerName); if (oc == null) { LocalizableMessage message = ERR_ENTRY_ADD_UNKNOWN_OC.get(name, dn); throw new DirectoryException(OBJECTCLASS_VIOLATION, message); } ocMap.put(oc, name); } // If we've gotten here, then everything is fine so append the new // set of objectclasses. objectClasses = ocMap; objectClassAttribute = null; } /** * Adds the provided objectClass to this entry. * * @param oc The objectClass to add to this entry. @@ -4507,20 +4453,6 @@ /** * Retrieves a one-line representation of this entry. * * @return A one-line representation of this entry. */ public String toSingleLineString() { StringBuilder buffer = new StringBuilder(); toSingleLineString(buffer); return buffer.toString(); } /** * Appends a single-line representation of this entry to the * provided buffer. * opendj3-server-dev/src/server/org/opends/server/types/SortKey.java
@@ -26,11 +26,9 @@ */ package org.opends.server.types; import org.opends.server.api.OrderingMatchingRule; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.opendj.ldap.ByteString; import org.opends.server.api.OrderingMatchingRule; /** * This class defines a data structure that may be used as a sort key. @@ -168,60 +166,40 @@ } // Use the ordering matching rule if one is provided. Otherwise, // fall back on the default ordering rule for the attribute type. if (orderingRule == null) // Use the ordering matching rule if one is provided. // Otherwise, fall back on the default ordering rule for the attribute type. if (orderingRule != null) { try { OrderingMatchingRule rule = attributeType.getOrderingMatchingRule(); if (rule == null) { return 0; } return compareValues(orderingRule, value1, value2); } final OrderingMatchingRule rule = attributeType.getOrderingMatchingRule(); if (rule != null) { return compareValues(rule, value1, value2); } return 0; } if (ascending) { return rule.compareValues(value1.getNormalizedValue(), value2.getNormalizedValue()); } else { return rule.compareValues(value2.getNormalizedValue(), value1.getNormalizedValue()); } private int compareValues(OrderingMatchingRule rule, AttributeValue value1, AttributeValue value2) { try { final ByteString val1 = rule.normalizeAttributeValue(value1.getValue()); final ByteString val2 = rule.normalizeAttributeValue(value2.getValue()); if (ascending) { return rule.compareValues(val1, val2); } catch (Exception e) else { logger.traceException(e); return 0; return rule.compareValues(val2, val1); } } else catch (Exception e) { try { if (ascending) { return orderingRule.compareValues( orderingRule.normalizeAttributeValue(value1.getValue()), orderingRule.normalizeAttributeValue(value2.getValue())); } else { return orderingRule.compareValues( orderingRule.normalizeAttributeValue(value2.getValue()), orderingRule.normalizeAttributeValue(value1.getValue())); } } catch (Exception e) { logger.traceException(e); return 0; } logger.traceException(e); return 0; } } @@ -232,6 +210,7 @@ * * @return A string representation of this sort key. */ @Override public String toString() { StringBuilder buffer = new StringBuilder(); @@ -275,6 +254,7 @@ * * @return The hash code for this sort key. */ @Override public int hashCode() { int hashCode = 0; @@ -303,6 +283,7 @@ * @return <CODE>true</CODE> if the provide object is equal to this * sort key, or <CODE>false</CODE> if it is not. */ @Override public boolean equals(Object o) { if(o == null) opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
@@ -36,6 +36,7 @@ import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.opendj.ldap.ByteString; import org.forgerock.opendj.ldap.ModificationType; import org.forgerock.opendj.ldap.ResultCode; import org.forgerock.util.Reject; import org.forgerock.util.Utils; import org.opends.server.api.*; @@ -45,7 +46,6 @@ import org.opends.server.schema.AuthPasswordSyntax; import org.opends.server.schema.UserPasswordSyntax; import org.opends.server.types.*; import org.forgerock.opendj.ldap.ResultCode; import org.opends.server.types.operation.PostOperationModifyOperation; import org.opends.server.types.operation.PostResponseModifyOperation; import org.opends.server.types.operation.PostSynchronizationModifyOperation; @@ -1469,7 +1469,10 @@ */ private void validateObjectClasses(Attribute attr) throws DirectoryException { Reject.ifFalse(attr.getAttributeType().isObjectClass()); final AttributeType attrType = attr.getAttributeType(); Reject.ifFalse(attrType.isObjectClass()); final EqualityMatchingRule eqRule = attrType.getEqualityMatchingRule(); for (AttributeValue v : attr) { String name = v.getValue().toString(); @@ -1477,13 +1480,13 @@ String lowerName; try { lowerName = v.getNormalizedValue().toString(); lowerName = eqRule.normalizeAttributeValue(v.getValue()).toString(); } catch (Exception e) { logger.traceException(e); lowerName = toLowerCase(v.getValue().toString()); lowerName = toLowerCase(name); } ObjectClass oc = DirectoryServer.getObjectClass(lowerName); @@ -1697,12 +1700,14 @@ ERR_MODIFY_INCREMENT_REQUIRES_SINGLE_VALUE.get(entryDN, attr.getName())); } EqualityMatchingRule eqRule = attr.getAttributeType().getEqualityMatchingRule(); AttributeValue v = attr.iterator().next(); long incrementValue; try { incrementValue = Long.parseLong(v.getNormalizedValue().toString()); String nv = eqRule.normalizeAttributeValue(v.getValue()).toString(); incrementValue = Long.parseLong(nv); } catch (Exception e) {