| | |
| | | * Portions Copyright 2011-2014 ForgeRock AS |
| | | */ |
| | | package org.opends.server.schema; |
| | | import org.opends.messages.Message; |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | |
| | | |
| | | |
| | |
| | | import org.opends.server.types.*; |
| | | import org.forgerock.opendj.ldap.ByteSequence; |
| | | import static org.opends.messages.SchemaMessages.*; |
| | | import org.opends.messages.MessageBuilder; |
| | | import org.forgerock.i18n.LocalizableMessageBuilder; |
| | | import static org.opends.server.schema.SchemaConstants.*; |
| | | import static org.opends.server.util.StaticUtils.*; |
| | | |
| | |
| | | DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID); |
| | | if (defaultEqualityMatchingRule == null) |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get( |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get( |
| | | EMR_CASE_IGNORE_OID, SYNTAX_DIT_CONTENT_RULE_NAME); |
| | | throw new InitializationException(message); |
| | | } |
| | |
| | | DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID); |
| | | if (defaultOrderingMatchingRule == null) |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get( |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get( |
| | | OMR_CASE_IGNORE_OID, SYNTAX_DIT_CONTENT_RULE_NAME); |
| | | throw new InitializationException(message); |
| | | } |
| | |
| | | DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID); |
| | | if (defaultSubstringMatchingRule == null) |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get( |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get( |
| | | SMR_CASE_IGNORE_OID, SYNTAX_DIT_CONTENT_RULE_NAME); |
| | | throw new InitializationException(message); |
| | | } |
| | |
| | | * {@inheritDoc} |
| | | */ |
| | | public boolean valueIsAcceptable(ByteSequence value, |
| | | MessageBuilder invalidReason) |
| | | LocalizableMessageBuilder invalidReason) |
| | | { |
| | | // We'll use the decodeDITContentRule method to determine if the value is |
| | | // acceptable. |
| | |
| | | { |
| | | // This means that the value was empty or contained only whitespace. That |
| | | // is illegal. |
| | | Message message = ERR_ATTR_SYNTAX_DCR_EMPTY_VALUE.get(); |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_EMPTY_VALUE.get(); |
| | | throw new DirectoryException( |
| | | ResultCode.INVALID_ATTRIBUTE_SYNTAX, message); |
| | | } |
| | |
| | | char c = valueStr.charAt(pos++); |
| | | if (c != '(') |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_EXPECTED_OPEN_PARENTHESIS.get( |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_EXPECTED_OPEN_PARENTHESIS.get( |
| | | valueStr, (pos-1), String.valueOf(c)); |
| | | throw new DirectoryException( |
| | | ResultCode.INVALID_ATTRIBUTE_SYNTAX, message); |
| | |
| | | { |
| | | // This means that the end of the value was reached before we could find |
| | | // the OID. Ths is illegal. |
| | | Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr); |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr); |
| | | throw new DirectoryException( |
| | | ResultCode.INVALID_ATTRIBUTE_SYNTAX, message); |
| | | } |
| | |
| | | { |
| | | if (lastWasPeriod) |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_DOUBLE_PERIOD_IN_NUMERIC_OID. |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_DOUBLE_PERIOD_IN_NUMERIC_OID. |
| | | get(valueStr, (pos-1)); |
| | | throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, |
| | | message); |
| | |
| | | else if (! isDigit(c)) |
| | | { |
| | | // This must have been an illegal character. |
| | | Message message = ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_NUMERIC_OID.get( |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_NUMERIC_OID.get( |
| | | valueStr, String.valueOf(c), (pos-1)); |
| | | throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, |
| | | message); |
| | |
| | | else |
| | | { |
| | | // This must have been an illegal character. |
| | | Message message = ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_STRING_OID.get( |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_STRING_OID.get( |
| | | valueStr, String.valueOf(c), (pos-1)); |
| | | throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, |
| | | message); |
| | |
| | | String oid; |
| | | if (pos >= length) |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr); |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr); |
| | | throw new DirectoryException( |
| | | ResultCode.INVALID_ATTRIBUTE_SYNTAX, message); |
| | | } |
| | |
| | | } |
| | | else |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ATTR_SYNTAX_DCR_UNKNOWN_STRUCTURAL_CLASS.get(valueStr, oid); |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message); |
| | | } |
| | | } |
| | | else if (structuralClass.getObjectClassType() != ObjectClassType.STRUCTURAL) |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_STRUCTURAL_CLASS_NOT_STRUCTURAL. |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_STRUCTURAL_CLASS_NOT_STRUCTURAL. |
| | | get(valueStr, oid, structuralClass.getNameOrOID(), |
| | | String.valueOf(structuralClass.getObjectClassType())); |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message); |
| | |
| | | { |
| | | // This means that the end of the value was reached before we could find |
| | | // the OID. Ths is illegal. |
| | | Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr); |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr); |
| | | throw new DirectoryException( |
| | | ResultCode.INVALID_ATTRIBUTE_SYNTAX, message); |
| | | } |
| | |
| | | // We must be at the end of the value. If not, then that's a problem. |
| | | if (pos < length) |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_UNEXPECTED_CLOSE_PARENTHESIS. |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNEXPECTED_CLOSE_PARENTHESIS. |
| | | get(valueStr, (pos-1)); |
| | | throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, |
| | | message); |
| | |
| | | else |
| | | { |
| | | // This is an illegal character. |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get( |
| | | valueStr, String.valueOf(c), (pos-1)); |
| | | throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, |
| | |
| | | } |
| | | else |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_AUXILIARY_CLASS. |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_AUXILIARY_CLASS. |
| | | get(valueStr, woidBuffer.toString()); |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, |
| | | message); |
| | |
| | | else if (oc.getObjectClassType() != ObjectClassType.AUXILIARY) |
| | | { |
| | | // This isn't good because it isn't an auxiliary class. |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ATTR_SYNTAX_DCR_AUXILIARY_CLASS_NOT_AUXILIARY. |
| | | get(valueStr, woidBuffer.toString(), |
| | | oc.getObjectClassType().toString()); |
| | |
| | | } |
| | | else if (c != '$') |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get( |
| | | valueStr, String.valueOf(c), (pos-1)); |
| | | throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, |
| | |
| | | } |
| | | else |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_AUXILIARY_CLASS.get( |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_AUXILIARY_CLASS.get( |
| | | valueStr, woidBuffer.toString()); |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, |
| | | message); |
| | |
| | | else if (oc.getObjectClassType() != ObjectClassType.AUXILIARY) |
| | | { |
| | | // This isn't good because it isn't an auxiliary class. |
| | | Message message = ERR_ATTR_SYNTAX_DCR_AUXILIARY_CLASS_NOT_AUXILIARY. |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_AUXILIARY_CLASS_NOT_AUXILIARY. |
| | | get(valueStr, woidBuffer.toString(), |
| | | oc.getObjectClassType().toString()); |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, |
| | |
| | | } |
| | | else |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR.get( |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR.get( |
| | | valueStr, woidBuffer.toString()); |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, |
| | | message); |
| | |
| | | } |
| | | else if (c != '$') |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get( |
| | | valueStr, String.valueOf(c), (pos-1)); |
| | | throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, |
| | |
| | | } |
| | | else |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR.get( |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR.get( |
| | | valueStr, woidBuffer.toString()); |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, |
| | | message); |
| | |
| | | } |
| | | else |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR.get( |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR.get( |
| | | valueStr, woidBuffer.toString()); |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, |
| | | message); |
| | |
| | | } |
| | | else if (c != '$') |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get( |
| | | valueStr, String.valueOf(c), (pos-1)); |
| | | throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, |
| | |
| | | } |
| | | else |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR.get( |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR.get( |
| | | valueStr, woidBuffer.toString()); |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, |
| | | message); |
| | |
| | | } |
| | | else |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR. |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR. |
| | | get(valueStr, woidBuffer.toString()); |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, |
| | | message); |
| | |
| | | } |
| | | else if (c != '$') |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get( |
| | | valueStr, String.valueOf(c), (pos-1)); |
| | | throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, |
| | |
| | | } |
| | | else |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR.get( |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR.get( |
| | | valueStr, woidBuffer.toString()); |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, |
| | | message); |
| | |
| | | { |
| | | if (structuralClass.isRequired(t)) |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_PROHIBITED_REQUIRED_BY_STRUCTURAL. |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_PROHIBITED_REQUIRED_BY_STRUCTURAL. |
| | | get(valueStr, t.getNameOrOID(), structuralClass.getNameOrOID()); |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message); |
| | | } |
| | |
| | | { |
| | | if (oc.isRequired(t)) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ATTR_SYNTAX_DCR_PROHIBITED_REQUIRED_BY_AUXILIARY. |
| | | get(valueStr, t.getNameOrOID(), oc.getNameOrOID()); |
| | | throw new DirectoryException( |
| | |
| | | |
| | | if (startPos >= length) |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr); |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr); |
| | | throw new DirectoryException( |
| | | ResultCode.INVALID_ATTRIBUTE_SYNTAX, message); |
| | | } |
| | |
| | | |
| | | if (startPos >= length) |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr); |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr); |
| | | throw new DirectoryException( |
| | | ResultCode.INVALID_ATTRIBUTE_SYNTAX, message); |
| | | } |
| | |
| | | // The next character must be a single quote. |
| | | if (c != '\'') |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ATTR_SYNTAX_DCR_EXPECTED_QUOTE_AT_POS.get( |
| | | valueStr, startPos, String.valueOf(c)); |
| | | throw new DirectoryException( |
| | |
| | | // If we're at the end of the value, then that's illegal. |
| | | if (startPos >= length) |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr); |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr); |
| | | throw new DirectoryException( |
| | | ResultCode.INVALID_ATTRIBUTE_SYNTAX, message); |
| | | } |
| | |
| | | |
| | | if (startPos >= length) |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr); |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr); |
| | | throw new DirectoryException( |
| | | ResultCode.INVALID_ATTRIBUTE_SYNTAX, message); |
| | | } |
| | |
| | | // The next character must be a single quote. |
| | | if (c != '\'') |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ATTR_SYNTAX_DCR_EXPECTED_QUOTE_AT_POS.get( |
| | | valueStr, startPos, String.valueOf(c)); |
| | | throw new DirectoryException( |
| | |
| | | // If we're at the end of the value, then that's illegal. |
| | | if (startPos >= length) |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr); |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr); |
| | | throw new DirectoryException( |
| | | ResultCode.INVALID_ATTRIBUTE_SYNTAX, message); |
| | | } |
| | |
| | | |
| | | if (startPos >= length) |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr); |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr); |
| | | throw new DirectoryException( |
| | | ResultCode.INVALID_ATTRIBUTE_SYNTAX, message); |
| | | } |
| | |
| | | { |
| | | if (lastWasPeriod) |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_DOUBLE_PERIOD_IN_NUMERIC_OID. |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_DOUBLE_PERIOD_IN_NUMERIC_OID. |
| | | get(lowerStr, (startPos-1)); |
| | | throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, |
| | | message); |
| | |
| | | } |
| | | |
| | | // This must have been an illegal character. |
| | | Message message = ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_NUMERIC_OID.get( |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_NUMERIC_OID.get( |
| | | lowerStr, String.valueOf(c), (startPos-1)); |
| | | throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, |
| | | message); |
| | |
| | | } |
| | | |
| | | // This must have been an illegal character. |
| | | Message message = ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_STRING_OID.get( |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_STRING_OID.get( |
| | | lowerStr, String.valueOf(c), (startPos-1)); |
| | | throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, |
| | | message); |
| | |
| | | } |
| | | else |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get( |
| | | lowerStr, String.valueOf(c), startPos); |
| | | throw new DirectoryException( |
| | |
| | | // If we're at the end of the value, then that's illegal. |
| | | if (startPos >= length) |
| | | { |
| | | Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr); |
| | | LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr); |
| | | throw new DirectoryException( |
| | | ResultCode.INVALID_ATTRIBUTE_SYNTAX, message); |
| | | } |
| | |
| | | |
| | | if (startPos >= length) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr); |
| | | throw new DirectoryException( |
| | | ResultCode.INVALID_ATTRIBUTE_SYNTAX, message); |
| | |
| | | |
| | | if (startPos >= length) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr); |
| | | throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, |
| | | message); |
| | |
| | | else if (c == '(') |
| | | { |
| | | // This is an illegal character. |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get( |
| | | valueStr, String.valueOf(c), startPos); |
| | | throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, |
| | |
| | | |
| | | if (startPos >= length) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr); |
| | | throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, |
| | | message); |
| | |
| | | |
| | | if (startPos >= length) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr); |
| | | throw new DirectoryException( |
| | | ResultCode.INVALID_ATTRIBUTE_SYNTAX, message); |