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

Ludovic Poitou
03.49.2011 db80ab0ec2570548315d04aad20d324e1c8c54ad
Fix OPENDJ-27 : schema parsing fails with extensions on syntaxes.

Fixed the ldap syntax description parsing.
Fixed the extension parsing code in all schema elements.
Added a bunch of error message for the LDAP syntax parsing. Those messages are already translated in French and Spanish.
Updated tests in syntaxes and attributeTypes to cover extensions, both valid and invalid.
17 files modified
1361 ■■■■■ changed files
opendj-sdk/opends/src/messages/messages/schema.properties 45 ●●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/messages/messages/schema_de.properties 18 ●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/messages/messages/schema_es.properties 20 ●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/messages/messages/schema_fr.properties 18 ●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/messages/messages/schema_ja.properties 18 ●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/messages/messages/schema_ko.properties 21 ●●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/messages/messages/schema_zh_CN.properties 18 ●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/messages/messages/schema_zh_TW.properties 21 ●●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/server/org/opends/server/schema/AttributeTypeSyntax.java 66 ●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/server/org/opends/server/schema/DITContentRuleSyntax.java 68 ●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/server/org/opends/server/schema/DITStructureRuleSyntax.java 65 ●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/server/org/opends/server/schema/LDAPSyntaxDescriptionSyntax.java 740 ●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/server/org/opends/server/schema/MatchingRuleSyntax.java 67 ●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/server/org/opends/server/schema/MatchingRuleUseSyntax.java 67 ●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/server/org/opends/server/schema/NameFormSyntax.java 68 ●●●● patch | view | raw | blame | history
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java 19 ●●●●● patch | view | raw | blame | history
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/LDAPSyntaxTest.java 22 ●●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/messages/messages/schema.properties
@@ -21,7 +21,7 @@
# CDDL HEADER END
#
#      Copyright 2006-2010 Sun Microsystems, Inc.
#      Portions Copyright 2011 ForgeRock AS
#
@@ -994,7 +994,7 @@
MILD_WARN_ATTR_LDAP_SYNTAX_ILLEGAL_CHAR_IN_OID_305=The provided value "%s" \
 could not be parsed as an ldap syntax because the OID contained an illegal \
 character %s at position %d
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT_306=The provided value "%s" \
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT_306=The provided value "%s" \
 could not be parsed as an ldap syntax because it contains an unrecognized \
 extension %s at position %d
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_VALUE_307=The provided value \
@@ -1026,3 +1026,44 @@
MILD_WARN_ATTR_DUPLICATE_HOUR_ASSERTION_FORMAT_316=The provided \
  value "%s" could not be parsed as a valid assertion value because there is  \
  conflicting  value "%d" for h(Hour) specification
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EMPTY_VALUE_317=The provided value could not \
 be parsed as a valid ldap syntax description because it was empty or \
 contained only whitespace
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_OPEN_PARENTHESIS_318=The provided \
 value "%s" could not be parsed as an ldap syntax description because an \
 open parenthesis was expected at position %d but instead a '%s' character was \
 found
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE_319=The provided value "%s" \
 could not be parsed as an ldap syntax description because the end of the \
 value was encountered while the Directory Server expected more data to be \
 provided
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID_320=The provided \
 value "%s" could not be parsed as an ldap syntax description because the \
 numeric OID contained two consecutive periods at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID_321=The provided \
 value "%s" could not be parsed as an ldap syntax description because the \
 numeric OID contained an illegal character %s at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_STRING_OID_322=The provided \
 value "%s" could not be parsed as an ldap syntax description because the \
 non-numeric OID contained an illegal character %s at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNEXPECTED_CLOSE_PARENTHESIS_323=The provided \
 value "%s" could not be parsed as an ldap syntax description because it \
 contained an unexpected closing parenthesis at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_TOO_MANY_EXTENSIONS_324=The provided value \
 "%s" could not be parsed as an ldap syntax description because it contains \
 more than one form of constructor
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_SYNTAX_325=The definition for the \
 ldap syntax with OID %s declared that it's a substitute for a syntax with \
 OID %s. No such syntax is configured for use in the Directory Server
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ENUM_NO_VALUES_326=The provided value "%s" \
 could not be parsed as an enumeration syntax, because there is no value
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXTENSION_INVALID_CHARACTER_327=The provided \
 value "%s" could not be parsed as an ldap syntax extension because an \
 invalid character was found at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_CLOSE_PARENTHESIS_328=The provided \
 value "%s" could not be parsed as an ldap syntax description because a \
 close parenthesis was expected at position %d but instead a '%s' character \
 was found
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_QUOTE_AT_POS_329=The provided value \
 "%s" could not be parsed as an ldap syntax description because a single \
 quote was expected at position %d but the character %s was found instead
opendj-sdk/opends/src/messages/messages/schema_de.properties
@@ -21,6 +21,7 @@
# CDDL HEADER END
#
#      Copyright 2006-2010 Sun Microsystems, Inc.
#      Portions Copyright 2011 ForgeRock AS
@@ -351,7 +352,7 @@
MILD_WARN_ATTR_MISSING_YEAR_PARTIAL_TIME_ASSERTION_FORMAT_303=Der angegebene Wert "%s" kann nicht als g\u00fcltiger Best\u00e4tigungswert geparst werden, da er das Jahr nicht im Format JJJJ enth\u00e4lt
MILD_WARN_ATTR_CONFLICTING_ASSERTION_FORMAT_304=Der angegebene Wert "%s" kann nicht als g\u00fcltiger Best\u00e4tigungswert geparst werden, da mehr als eine Zeiteinheit nicht erlaubt ist
MILD_WARN_ATTR_LDAP_SYNTAX_ILLEGAL_CHAR_IN_OID_305=Der angegebene Wert "%s" kann nicht als ldap-Syntax geparst werden, da der OID ein unzul\u00e4ssiges Zeichen %s an Position %d enth\u00e4lt
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT_306=Der angegebene Wert "%s" kann nicht als ldap-Syntax geparst werden, da er eine unbekannte Erweiterung %s an Position %d enth\u00e4lt
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT_306=Der angegebene Wert "%s" kann nicht als ldap-Syntax geparst werden, da er eine unbekannte Erweiterung %s an Position %d enth\u00e4lt
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_VALUE_307=Der angegebene Wert "%s" kann nicht als g\u00fcltige regex-Syntax geparst werden, da er nicht mit dem Muster "%s" \u00fcbereinstimmt
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_NO_PATTERN_308=Der angegebene Wert "%s" kann nicht als regex-Syntax geparst werden, da er kein regex-Muster enth\u00e4lt
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_PATTERN_309=Der angegebene Wert "%s" kann nicht als regex-Syntax geparst werden, da das angegebene regex-Muster "%s" ung\u00fcltig ist
@@ -361,4 +362,17 @@
MILD_WARN_ATTR_INVALID_HOUR_ASSERTION_FORMAT_313=Der angegebene Wert "%s" kann nicht als g\u00fcltiger Best\u00e4tigungswert geparst werden, da "%d" keine g\u00fcltige Stundenangabe ist
MILD_WARN_ATTR_DUPLICATE_SECOND_ASSERTION_FORMAT_314=Der angegebene Wert "%s" kann nicht als g\u00fcltiger Best\u00e4tigungswert geparst werden, da ein widerspr\u00fcchlicher Wert "%d" f\u00fcr die Angabe s (Sekunde) vorliegt
MILD_WARN_ATTR_DUPLICATE_MINUTE_ASSERTION_FORMAT_315=Der angegebene Wert "%s" kann nicht als g\u00fcltiger Best\u00e4tigungswert geparst werden, da ein widerspr\u00fcchlicher Wert "%d" f\u00fcr die Angabe m (Minute) vorliegt
MILD_WARN_ATTR_DUPLICATE_HOUR_ASSERTION_FORMAT_316=Der angegebene Wert "%s" kann nicht als g\u00fcltiger Best\u00e4tigungswert geparst werden, da ein widerspr\u00fcchlicher Wert "%d" f\u00fcr die Angabe h (Stunde) vorliegt
MILD_WARN_ATTR_DUPLICATE_HOUR_ASSERTION_FORMAT_316=Der angegebene Wert "%s" kann nicht als g\u00fcltiger Best\u00e4tigungswert geparst werden, da ein widerspr\u00fcchlicher Wert "%d" f\u00fcr die Angabe h (Stunde) vorliegt
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EMPTY_VALUE_317=The provided value could not be parsed as a valid ldap syntax description because it was empty or contained only whitespace
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_OPEN_PARENTHESIS_318=The provided value "%s" could not be parsed as an ldap syntax description because an open parenthesis was expected at position %d but instead a '%s' character was found
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE_319=The provided value "%s" could not be parsed as an ldap syntax description because the end of the value was encountered while the Directory Server expected more data to be provided
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID_320=The provided value "%s" could not be parsed as an ldap syntax description because the numeric OID contained two consecutive periods at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID_321=The provided value "%s" could not be parsed as an ldap syntax description because the numeric OID contained an illegal character %s at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_STRING_OID_322=The provided value "%s" could not be parsed as an ldap syntax description because the non-numeric OID contained an illegal character %s at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNEXPECTED_CLOSE_PARENTHESIS_323=The provided value "%s" could not be parsed as an ldap syntax description because it contained an unexpected closing parenthesis at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_TOO_MANY_EXTENSIONS_324=The provided value "%s" could not be parsed as an ldap syntax description because it contains more than one form of constructor
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_SYNTAX_325=The definition for the ldap syntax with OID %s declared that it's a substitute for a syntax with OID %s. No such syntax is configured for use in the Directory Server
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ENUM_NO_VALUES_326=The provided value "%s" could not be parsed as an enumeration syntax, because there is no value
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXTENSION_INVALID_CHARACTER_327=The provided value "%s" could not be parsed as an ldap syntax extension because an invalid character was found at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_CLOSE_PARENTHESIS_328=The provided value "%s" could not be parsed as an ldap syntax description because a close parenthesis was expected at position %d but instead a '%s' character was found
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_QUOTE_AT_POS_329=The provided value "%s" could not be parsed as an ldap syntax description because a single quote was expected at position %d but the character %s was found instead
opendj-sdk/opends/src/messages/messages/schema_es.properties
@@ -21,6 +21,7 @@
# CDDL HEADER END
#
#      Copyright 2006-2010 Sun Microsystems, Inc.
#      Portions Copyright 2011 ForgeRock AS
@@ -150,7 +151,7 @@
MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_CANNOT_READ_DESC_VALUE_101=No se pudo analizar el valor proporcionado "%s" como descripci\u00f3n de sintaxis de atributo porque se produjo un error inesperado al intentar leer el valor del token "DESC" desde la cadena en o cerca de la posici\u00f3n %d:  %s
MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_CLOSE_PARENTHESIS_102=No se pudo analizar el valor proporcionado "%1$s" como descripci\u00f3n de sintaxis de atributo porque se encontr\u00f3 un car\u00e1cter '%3$s' en lugar del par\u00e9ntesis de cierre en la posici\u00f3n %2$d
MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_AFTER_CLOSE_103=No se pudo analizar el valor proporcionado "%s" como descripci\u00f3n de sintaxis de atributo porque se encontr\u00f3 un car\u00e1cter %s no v\u00e1lido en la posici\u00f3n %d detr\u00e1s del par\u00e9ntesis de cierre
SEVERE_WARN_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_QUOTE_AT_POS_104=No se pudo analizar el valor proporcionado "%s" como descripci\u00f3n de sintaxis de atributo porque, en lugar de la comilla sencilla esperada en la posici\u00f3n %d, se encontr\u00f3 el car\u00e1cter %s
SEVERE_WARN_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_QUOTE_AT_POS_104=No se pudo analizar el valor proporcionado "%s" como descripci\u00f3n de sintaxis de atributo porque, en lugar de la comilla sencilla esperada en la posici\u00f3n %d, se encontr\u00f3 el car\u00e1cter %s
SEVERE_WARN_ATTR_SYNTAX_PRINTABLE_STRING_EMPTY_VALUE_105=No se pudo analizar el valor proporcionado como una cadena imprimible porque era nula o estaba vac\u00eda.  Una cadena imprimible debe contener al menos un car\u00e1cter
SEVERE_WARN_ATTR_SYNTAX_PRINTABLE_STRING_ILLEGAL_CHARACTER_106=No se pudo analizar el valor proporcionado "%s" como una cadena imprimible porque conten\u00eda un car\u00e1cter %s no v\u00e1lido en la posici\u00f3n %d
SEVERE_WARN_ATTR_SYNTAX_SUBSTRING_ONLY_WILDCARD_107=No se pudo analizar el valor proporcionado "*" como una aserci\u00f3n de subcadena porque s\u00f3lo contiene un car\u00e1cter comod\u00edn y no se permiten las subcadenas de longitud cero
@@ -351,7 +352,7 @@
MILD_WARN_ATTR_MISSING_YEAR_PARTIAL_TIME_ASSERTION_FORMAT_303=No se pudo analizar el valor proporcionado "%s" como valor de aserci\u00f3n v\u00e1lido porque no contiene el a\u00f1o en formato AAAA
MILD_WARN_ATTR_CONFLICTING_ASSERTION_FORMAT_304=No se pudo analizar el valor proporcionado "%s" como valor de aserci\u00f3n v\u00e1lido porque no se admite m\u00e1s de una unidad de tiempo
MILD_WARN_ATTR_LDAP_SYNTAX_ILLEGAL_CHAR_IN_OID_305=No se pudo analizar el valor proporcionado "%s" como sintaxis LDAP porque el OID conten\u00eda un car\u00e1cter %s no v\u00e1lido en la posici\u00f3n %d
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT_306=No se pudo analizar el valor proporcionado "%s" como sintaxis LDAP porque contiene una extensi\u00f3n %s no reconocida en la posici\u00f3n %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT_306=No se pudo analizar el valor proporcionado "%s" como sintaxis LDAP porque contiene una extensi\u00f3n %s no reconocida en la posici\u00f3n %d
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_VALUE_307=No se pudo analizar el valor proporcionado "%s" como sintaxis regex v\u00e1lida porque no coincide con el patr\u00f3n "%s"
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_NO_PATTERN_308=No se pudo analizar el valor proporcionado "%s" como sintaxis regex v\u00e1lida porque no contiene un patr\u00f3n regex
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_PATTERN_309=No se pudo analizar el valor proporcionado "%s" como sintaxis regex v\u00e1lida porque el patr\u00f3n regex proporcionado "%s" no es v\u00e1lido
@@ -361,4 +362,17 @@
MILD_WARN_ATTR_INVALID_HOUR_ASSERTION_FORMAT_313=No se pudo analizar el valor proporcionado "%s" como valor de aserci\u00f3n v\u00e1lido porque "%d" no es una especificaci\u00f3n de horas v\u00e1lida
MILD_WARN_ATTR_DUPLICATE_SECOND_ASSERTION_FORMAT_314=No se pudo analizar el valor proporcionado "%s" como valor de aserci\u00f3n v\u00e1lido porque hay un valor contradictorio "%d" para la especificaci\u00f3n s(Segundo)
MILD_WARN_ATTR_DUPLICATE_MINUTE_ASSERTION_FORMAT_315=No se pudo analizar el valor proporcionado "%s" como valor de aserci\u00f3n v\u00e1lido porque hay un valor contradictorio "%d" para la especificaci\u00f3n m(Minuto)
MILD_WARN_ATTR_DUPLICATE_HOUR_ASSERTION_FORMAT_316=No se pudo analizar el valor proporcionado "%s" como valor de aserci\u00f3n v\u00e1lido porque hay un valor contradictorio "%d" para la especificaci\u00f3n h(Hora)
MILD_WARN_ATTR_DUPLICATE_HOUR_ASSERTION_FORMAT_316=No se pudo analizar el valor proporcionado "%s" como valor de aserci\u00f3n v\u00e1lido porque hay un valor contradictorio "%d" para la especificaci\u00f3n h(Hora)
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EMPTY_VALUE_317=No se pudo analizar el valor proporcionado como sintaxis LDAP v\u00e1lido porque estaba vac\u00edo o conten\u00eda s\u00f3lo espacios en blanco
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_OPEN_PARENTHESIS_318=No se pudo analizar el valor proporcionado "%1$s" como sintaxis LDAP porque se encontr\u00f3 un car\u00e1cter '%3$s' en lugar del par\u00e9ntesis de apertura en la posici\u00f3n %2$d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE_319=No se pudo analizar el valor proporcionado "%s" como sintaxis LDAP porque se encontr\u00f3 el final del valor, si bien Directory Server esperaba que se proporcionaran m\u00e1s datos
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID_320=No se pudo analizar el valor proporcionado "%s" como sintaxis LDAP porque el OID num\u00e9rico conten\u00eda dos puntos consecutivos en la posici\u00f3n %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID_321=No se pudo analizar el valor proporcionado  "%s" como sintaxis LDAP porque el OID num\u00e9rico conten\u00eda un car\u00e1cter %s no v\u00e1lido en la posici\u00f3n %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_STRING_OID_322=No se pudo analizar el valor proporcionado "%s" como sintaxis LDAP porque el OID no num\u00e9rico conten\u00eda un car\u00e1cter %s no v\u00e1lido en la posici\u00f3n %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNEXPECTED_CLOSE_PARENTHESIS_323=No se pudo analizar el valor proporcionado "%s" como sintaxis LDAP porque conten\u00eda un par\u00e9ntesis de cierre inesperado en la posici\u00f3n %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_TOO_MANY_EXTENSIONS_324=No se pudo analizar el valor proporcionado "%s" como sintaxis LDAP porque conten\u00eda mas de una extensi\u00f3n
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_SYNTAX_325=La definici\u00f3n para la sintaxis LDAP con OID %s declar\u00f3 que deber\u00eda tener una sintaxis con OID %s. No existe tal sintaxis configurada para su uso en el Servidor de directorios
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ENUM_NO_VALUES_326=No se pudo analizar el valor proporcionado "%s" como sintaxis de enumeraci\u00f3n porque no contiene un valor
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXTENSION_INVALID_CHARACTER_327=No se pudo analizar el valor proporcionado "%s" como sintaxis LDAP porque se encontr\u00f3 un car\u00e1cter no v\u00e1lido en la posici\u00f3n %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_CLOSE_PARENTHESIS_328=No se pudo analizar el valor proporcionado "%s" como sintaxis LDAP porque conten\u00eda un par\u00e9ntesis de cierre inesperado en la posici\u00f3n %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_QUOTE_AT_POS_329=No se pudo analizar el valor proporcionado "%s" como sintaxis LDAP porque, en lugar de la comilla sencilla esperada en la posici\u00f3n %d, se encontr\u00f3 el car\u00e1cter %s
opendj-sdk/opends/src/messages/messages/schema_fr.properties
@@ -21,6 +21,7 @@
# CDDL HEADER END
#
#      Copyright 2006-2010 Sun Microsystems, Inc.
#      Portions Copyright 2011 ForgeRock AS
@@ -351,7 +352,7 @@
MILD_WARN_ATTR_MISSING_YEAR_PARTIAL_TIME_ASSERTION_FORMAT_303=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que valeur d'assertion valide car elle ne contient pas d'ann\u00e9e au format YYYY
MILD_WARN_ATTR_CONFLICTING_ASSERTION_FORMAT_304=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que valeur d'assertion valide car plusieurs unit\u00e9s de temps ne sont pas autoris\u00e9s
MILD_WARN_ATTR_LDAP_SYNTAX_ILLEGAL_CHAR_IN_OID_305=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que de syntaxe ldap car l'OID contient un caract\u00e8re ill\u00e9gal %s \u00e0 la position %d
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT_306=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que syntaxe ldap car elle contient une extension non reconnue %s \u00e0 la position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT_306=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que syntaxe ldap car elle contient une extension non reconnue %s \u00e0 la position %d
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_VALUE_307=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que syntaxe regex valide car elle ne correspond pas au mod\u00e8le "%s"
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_NO_PATTERN_308=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que syntaxe regex car elle ne contient pas de mod\u00e8le regex
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_PATTERN_309=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que syntaxe regex car le mod\u00e8le regex indiqu\u00e9 "%s" n'est pas valide
@@ -361,4 +362,17 @@
MILD_WARN_ATTR_INVALID_HOUR_ASSERTION_FORMAT_313=Impossible d\u2019analyser la valeur indiqu\u00e9e "%s" en tant que valeur d\u2019assertion valide car "%d" n\u2019est pas une sp\u00e9cification d\u2019heure valide
MILD_WARN_ATTR_DUPLICATE_SECOND_ASSERTION_FORMAT_314=Impossible d\u2019analyser la valeur indiqu\u00e9e "%s" en tant que valeur d\u2019assertion valide car il existe une valeur conflictuelle "%d" pour la sp\u00e9cification s(seconde)
MILD_WARN_ATTR_DUPLICATE_MINUTE_ASSERTION_FORMAT_315=Impossible d\u2019analyser la valeur indiqu\u00e9e "%s" en tant que valeur d\u2019assertion valide car il existe une valeur conflictuelle "%d" pour la sp\u00e9cification m(minute)
MILD_WARN_ATTR_DUPLICATE_HOUR_ASSERTION_FORMAT_316=Impossible d\u2019analyser la valeur indiqu\u00e9e "%s" en tant que valeur d\u2019assertion valide car il existe une valeur conflictuelle "%d" pour la sp\u00e9cification h(heure)
MILD_WARN_ATTR_DUPLICATE_HOUR_ASSERTION_FORMAT_316=Impossible d\u2019analyser la valeur indiqu\u00e9e "%s" en tant que valeur d\u2019assertion valide car il existe une valeur conflictuelle "%d" pour la sp\u00e9cification h(heure)
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EMPTY_VALUE_317=Impossible d'analyser la valeur indiqu\u00e9e en tant que syntaxe ldap car elle est vide ou ne contient que des blancs
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_OPEN_PARENTHESIS_318=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que syntaxe ldap car une parenth\u00e8se ouverte devrait se trouver \u00e0 la position %d au lieu du caract\u00e8re '%s'
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE_319=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que syntaxe ldap car la fin de la valeur est atteinte alors que Directory Server attend plus de donn\u00e9es
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID_320=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que syntaxe ldap car l'OID num\u00e9rique contient deux points cons\u00e9cutifs \u00e0 la position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID_321=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que syntaxe ldap car l'OID num\u00e9rique contient un caract\u00e8re ill\u00e9gal %s \u00e0 la position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_STRING_OID_322=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que syntaxe ldap car l'OID non num\u00e9rique contient un caract\u00e8re ill\u00e9gal %s \u00e0 la position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNEXPECTED_CLOSE_PARENTHESIS_323=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que syntaxe ldap car elle contient une parenth\u00e8se de fermeture inattendue \u00e0 la position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_TOO_MANY_EXTENSIONS_324=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que syntaxe ldap car elle contient plus d'une forme de constructeur
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_SYNTAX_325=La d\u00e9finition de la syntaxe ldap avec l'OID %s d\u00e9clare se substituer \u00e0 la syntaxe avec l'OID %s. Aucune syntaxe de ce nom n'est configur\u00e9e pour utilisation dans Directory Server
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ENUM_NO_VALUES_326=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que syntaxe d'\u00e9num\u00e9ration car elle ne contient pas de valeur
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXTENSION_INVALID_CHARACTER_327=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant qu'extension de syntaxe ldap car un caract\u00e8re invalide se trouve \u00e0 la position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_CLOSE_PARENTHESIS_328=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que syntaxe ldap car elle contient une parenth\u00e8se de fermeture inattendue \u00e0 la position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_QUOTE_AT_POS_329=Impossible d'analyser la valeur fournie ("%s") en tant que syntaxe ldap car une apostrophe devrait se trouver \u00e0 la position %d au lieu du caract\u00e8re %s
opendj-sdk/opends/src/messages/messages/schema_ja.properties
@@ -21,6 +21,7 @@
# CDDL HEADER END
#
#      Copyright 2006-2010 Sun Microsystems, Inc.
#      Portions Copyright 2011 ForgeRock AS
@@ -351,7 +352,7 @@
MILD_WARN_ATTR_MISSING_YEAR_PARTIAL_TIME_ASSERTION_FORMAT_303=\u6307\u5b9a\u3055\u308c\u305f\u5024 "%s" \u3092\u6709\u52b9\u306a\u8868\u660e\u5024\u3068\u3057\u3066\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u5e74\u304c YYYY \u5f62\u5f0f\u3068\u3057\u3066\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u305f\u3081\u3067\u3059
MILD_WARN_ATTR_CONFLICTING_ASSERTION_FORMAT_304=\u6307\u5b9a\u3055\u308c\u305f\u5024 "%s" \u3092\u6709\u52b9\u306a\u8868\u660e\u5024\u3068\u3057\u3066\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u8907\u6570\u306e\u6642\u9593\u5358\u4f4d\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u306a\u3044\u305f\u3081\u3067\u3059
MILD_WARN_ATTR_LDAP_SYNTAX_ILLEGAL_CHAR_IN_OID_305=\u6307\u5b9a\u3055\u308c\u305f\u5024 "%1$s" \u3092 LDAP \u69cb\u6587\u3068\u3057\u3066\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002OID \u306e\u4f4d\u7f6e %3$d \u306b\u4e0d\u6b63\u306a\u6587\u5b57 %2$s \u304c\u542b\u307e\u308c\u3066\u3044\u305f\u305f\u3081\u3067\u3059
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT_306=\u6307\u5b9a\u3055\u308c\u305f\u5024 "%1$s" \u3092 LDAP \u69cb\u6587\u3068\u3057\u3066\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u4f4d\u7f6e %3$d \u306b\u8a8d\u8b58\u3055\u308c\u306a\u3044\u62e1\u5f35\u6a5f\u80fd %2$s \u304c\u542b\u307e\u308c\u3066\u3044\u308b\u305f\u3081\u3067\u3059
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT_306=\u6307\u5b9a\u3055\u308c\u305f\u5024 "%1$s" \u3092 LDAP \u69cb\u6587\u3068\u3057\u3066\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u4f4d\u7f6e %3$d \u306b\u8a8d\u8b58\u3055\u308c\u306a\u3044\u62e1\u5f35\u6a5f\u80fd %2$s \u304c\u542b\u307e\u308c\u3066\u3044\u308b\u305f\u3081\u3067\u3059
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_VALUE_307=\u6307\u5b9a\u3055\u308c\u305f\u5024 "%s" \u3092\u6709\u52b9\u306a\u6b63\u898f\u8868\u73fe\u69cb\u6587\u3068\u3057\u3066\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30d1\u30bf\u30fc\u30f3 "%s" \u3068\u4e00\u81f4\u3057\u306a\u3044\u305f\u3081\u3067\u3059
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_NO_PATTERN_308=\u6307\u5b9a\u3055\u308c\u305f\u5024 "%s" \u3092\u6b63\u898f\u8868\u73fe\u69cb\u6587\u3068\u3057\u3066\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u6b63\u898f\u8868\u73fe\u30d1\u30bf\u30fc\u30f3\u304c\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u305f\u3081\u3067\u3059
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_PATTERN_309=\u6307\u5b9a\u3055\u308c\u305f\u5024 "%s" \u3092\u6b63\u898f\u8868\u73fe\u69cb\u6587\u3068\u3057\u3066\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u6307\u5b9a\u3055\u308c\u305f\u6b63\u898f\u8868\u73fe\u30d1\u30bf\u30fc\u30f3 "%s" \u304c\u7121\u52b9\u3067\u3042\u308b\u305f\u3081\u3067\u3059
@@ -361,4 +362,17 @@
MILD_WARN_ATTR_INVALID_HOUR_ASSERTION_FORMAT_313=\u6307\u5b9a\u3055\u308c\u305f\u5024 "%s" \u3092\u6709\u52b9\u306a\u8868\u660e\u5024\u3068\u3057\u3066\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002"%d" \u306f\u6709\u52b9\u306a\u6642\u9593\u6307\u5b9a\u3067\u306f\u306a\u3044\u305f\u3081\u3067\u3059
MILD_WARN_ATTR_DUPLICATE_SECOND_ASSERTION_FORMAT_314=\u6307\u5b9a\u3055\u308c\u305f\u5024 "%s" \u3092\u6709\u52b9\u306a\u8868\u660e\u5024\u3068\u3057\u3066\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002s (\u79d2) \u6307\u5b9a\u306b\u7af6\u5408\u3059\u308b\u5024 "%d" \u304c\u3042\u308b\u305f\u3081\u3067\u3059
MILD_WARN_ATTR_DUPLICATE_MINUTE_ASSERTION_FORMAT_315=\u6307\u5b9a\u3055\u308c\u305f\u5024 "%s" \u3092\u6709\u52b9\u306a\u8868\u660e\u5024\u3068\u3057\u3066\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002m (\u6708) \u6307\u5b9a\u306b\u7af6\u5408\u3059\u308b\u5024 "%d" \u304c\u3042\u308b\u305f\u3081\u3067\u3059
MILD_WARN_ATTR_DUPLICATE_HOUR_ASSERTION_FORMAT_316=\u6307\u5b9a\u3055\u308c\u305f\u5024 "%s" \u3092\u6709\u52b9\u306a\u8868\u660e\u5024\u3068\u3057\u3066\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002h (\u6642\u9593) \u6307\u5b9a\u306b\u7af6\u5408\u3059\u308b\u5024 "%d" \u304c\u3042\u308b\u305f\u3081\u3067\u3059
MILD_WARN_ATTR_DUPLICATE_HOUR_ASSERTION_FORMAT_316=\u6307\u5b9a\u3055\u308c\u305f\u5024 "%s" \u3092\u6709\u52b9\u306a\u8868\u660e\u5024\u3068\u3057\u3066\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002h (\u6642\u9593) \u6307\u5b9a\u306b\u7af6\u5408\u3059\u308b\u5024 "%d" \u304c\u3042\u308b\u305f\u3081\u3067\u3059
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EMPTY_VALUE_317=The provided value could not be parsed as a valid ldap syntax description because it was empty or contained only whitespace
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_OPEN_PARENTHESIS_318=The provided value "%s" could not be parsed as an ldap syntax description because an open parenthesis was expected at position %d but instead a '%s' character was found
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE_319=The provided value "%s" could not be parsed as an ldap syntax description because the end of the value was encountered while the Directory Server expected more data to be provided
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID_320=The provided value "%s" could not be parsed as an ldap syntax description because the numeric OID contained two consecutive periods at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID_321=The provided value "%s" could not be parsed as an ldap syntax description because the numeric OID contained an illegal character %s at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_STRING_OID_322=The provided value "%s" could not be parsed as an ldap syntax description because the non-numeric OID contained an illegal character %s at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNEXPECTED_CLOSE_PARENTHESIS_323=The provided value "%s" could not be parsed as an ldap syntax description because it contained an unexpected closing parenthesis at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_TOO_MANY_EXTENSIONS_324=The provided value "%s" could not be parsed as an ldap syntax description because it contains more than one form of constructor
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_SYNTAX_325=The definition for the ldap syntax with OID %s declared that it's a substitute for a syntax with OID %s. No such syntax is configured for use in the Directory Server
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ENUM_NO_VALUES_326=The provided value "%s" could not be parsed as an enumeration syntax, because there is no value
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXTENSION_INVALID_CHARACTER_327=The provided value "%s" could not be parsed as an ldap syntax extension because an invalid character was found at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_CLOSE_PARENTHESIS_328=The provided value "%s" could not be parsed as an ldap syntax description because a close parenthesis was expected at position %d but instead a '%s' character was found
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_QUOTE_AT_POS_329=The provided value "%s" could not be parsed as an ldap syntax description because a single quote was expected at position %d but the character %s was found instead
opendj-sdk/opends/src/messages/messages/schema_ko.properties
@@ -21,6 +21,7 @@
# CDDL HEADER END
#
#      Copyright 2006-2009 Sun Microsystems, Inc.
#      Portions Copyright 2011 ForgeRock AS
@@ -352,9 +353,27 @@
MILD_WARN_ATTR_MISSING_YEAR_PARTIAL_TIME_ASSERTION_FORMAT_303=The provided value "%s" could not be parsed as a valid assertion value because it does not contain year in YYYY format
MILD_WARN_ATTR_CONFLICTING_ASSERTION_FORMAT_304=The provided value "%s" could not be parsed as a valid assertion value because more than  one time units are not allowed
MILD_WARN_ATTR_LDAP_SYNTAX_ILLEGAL_CHAR_IN_OID_305=The provided value "%s" could not be parsed as an ldap syntax because the OID contained an illegal character %s at position %d
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT_306=The provided value "%s" could not be parsed as an ldap syntax because it contains an unrecognized extension %s at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT_306=The provided value "%s" could not be parsed as an ldap syntax because it contains an unrecognized extension %s at position %d
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_VALUE_307=The provided value "%s" cannot be parsed as a valid regex syntax because it does not match  the pattern "%s"
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_NO_PATTERN_308=The provided value "%s" could not be parsed as a regex syntax because it does not contain a regex pattern
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_PATTERN_309=The provided value "%s" could not be parsed as a regex syntax because the provided regex pattern "%s" is invalid
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_ENUM_INVALID_VALUE_310=The provided value "%s" cannot be parsed because it is not allowed by enumeration syntax with OID "%s"
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_ENUM_DUPLICATE_VALUE_311=The provided value "%s" cannot be parsed as an enumeration syntax  because it contains a duplicate value "%s" at position %d
MILD_WARN_ATTR_INVALID_MINUTE_ASSERTION_FORMAT_312=The provided value "%s" could not be parsed as a valid assertion value because "%d" is not a valid minute specification
MILD_WARN_ATTR_INVALID_HOUR_ASSERTION_FORMAT_313=The provided value "%s" could not be parsed as a valid assertion value because "%d" is not a valid hour specification
MILD_WARN_ATTR_DUPLICATE_SECOND_ASSERTION_FORMAT_314=The provided value "%s" could not be parsed as a valid assertion value because there is conflicting  value "%d" for s(Second) specification
MILD_WARN_ATTR_DUPLICATE_MINUTE_ASSERTION_FORMAT_315=The provided value "%s" could not be parsed as a valid assertion value because there is conflicting  value "%d" for m(Minute) specification
MILD_WARN_ATTR_DUPLICATE_HOUR_ASSERTION_FORMAT_316=The provided value "%s" could not be parsed as a valid assertion value because there is conflicting  value "%d" for h(Hour) specification
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EMPTY_VALUE_317=The provided value could not be parsed as a valid ldap syntax description because it was empty or contained only whitespace
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_OPEN_PARENTHESIS_318=The provided value "%s" could not be parsed as an ldap syntax description because an open parenthesis was expected at position %d but instead a '%s' character was found
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE_319=The provided value "%s" could not be parsed as an ldap syntax description because the end of the value was encountered while the Directory Server expected more data to be provided
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID_320=The provided value "%s" could not be parsed as an ldap syntax description because the numeric OID contained two consecutive periods at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID_321=The provided value "%s" could not be parsed as an ldap syntax description because the numeric OID contained an illegal character %s at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_STRING_OID_322=The provided value "%s" could not be parsed as an ldap syntax description because the non-numeric OID contained an illegal character %s at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNEXPECTED_CLOSE_PARENTHESIS_323=The provided value "%s" could not be parsed as an ldap syntax description because it contained an unexpected closing parenthesis at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_TOO_MANY_EXTENSIONS_324=The provided value "%s" could not be parsed as an ldap syntax description because it contains more than one form of constructor
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_SYNTAX_325=The definition for the ldap syntax with OID %s declared that it's a substitute for a syntax with OID %s. No such syntax is configured for use in the Directory Server
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ENUM_NO_VALUES_326=The provided value "%s" could not be parsed as an enumeration syntax, because there is no value
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXTENSION_INVALID_CHARACTER_327=The provided value "%s" could not be parsed as an ldap syntax extension because an invalid character was found at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_CLOSE_PARENTHESIS_328=The provided value "%s" could not be parsed as an ldap syntax description because a close parenthesis was expected at position %d but instead a '%s' character was found
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_QUOTE_AT_POS_329=The provided value "%s" could not be parsed as an ldap syntax description because a single quote was expected at position %d but the character %s was found instead
opendj-sdk/opends/src/messages/messages/schema_zh_CN.properties
@@ -21,6 +21,7 @@
# CDDL HEADER END
#
#      Copyright 2006-2010 Sun Microsystems, Inc.
#      Portions Copyright 2011 ForgeRock AS
@@ -351,7 +352,7 @@
MILD_WARN_ATTR_MISSING_YEAR_PARTIAL_TIME_ASSERTION_FORMAT_303=\u65e0\u6cd5\u5c06\u63d0\u4f9b\u7684\u503c "%s" \u89e3\u6790\u4e3a\u6709\u6548\u7684\u58f0\u660e\u503c\uff0c\u56e0\u4e3a\u5b83\u4e0d\u5305\u542b YYYY \u683c\u5f0f\u7684\u5e74\u4efd
MILD_WARN_ATTR_CONFLICTING_ASSERTION_FORMAT_304=\u65e0\u6cd5\u5c06\u63d0\u4f9b\u7684\u503c "%s" \u89e3\u6790\u4e3a\u6709\u6548\u7684\u58f0\u660e\u503c\uff0c\u56e0\u4e3a\u4e0d\u5141\u8bb8\u4f7f\u7528\u591a\u4e2a\u65f6\u95f4\u5355\u4f4d
MILD_WARN_ATTR_LDAP_SYNTAX_ILLEGAL_CHAR_IN_OID_305=\u65e0\u6cd5\u5c06\u63d0\u4f9b\u7684\u503c "%1$s" \u89e3\u6790\u4e3a ldap \u8bed\u6cd5\uff0c\u56e0\u4e3a OID \u5728\u4f4d\u7f6e %3$d \u5904\u5305\u542b\u975e\u6cd5\u5b57\u7b26 %2$s
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT_306=\u65e0\u6cd5\u5c06\u63d0\u4f9b\u7684\u503c "%1$s" \u89e3\u6790\u4e3a ldap \u8bed\u6cd5\uff0c\u56e0\u4e3a\u5b83\u5728\u4f4d\u7f6e %3$d \u5904\u5305\u542b\u65e0\u6cd5\u8bc6\u522b\u7684\u6269\u5c55\u540d %2$s
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT_306=\u65e0\u6cd5\u5c06\u63d0\u4f9b\u7684\u503c "%1$s" \u89e3\u6790\u4e3a ldap \u8bed\u6cd5\uff0c\u56e0\u4e3a\u5b83\u5728\u4f4d\u7f6e %3$d \u5904\u5305\u542b\u65e0\u6cd5\u8bc6\u522b\u7684\u6269\u5c55\u540d %2$s
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_VALUE_307=\u65e0\u6cd5\u5c06\u63d0\u4f9b\u7684\u503c "%s" \u89e3\u6790\u4e3a\u6709\u6548\u7684\u6b63\u5219\u8868\u8fbe\u5f0f\u8bed\u6cd5\uff0c\u56e0\u4e3a\u5b83\u4e0e\u6a21\u5f0f "%s" \u4e0d\u5339\u914d
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_NO_PATTERN_308=\u65e0\u6cd5\u5c06\u63d0\u4f9b\u7684\u503c "%s" \u89e3\u6790\u4e3a\u6b63\u5219\u8868\u8fbe\u5f0f\u8bed\u6cd5\uff0c\u56e0\u4e3a\u5b83\u4e0d\u5305\u542b\u6b63\u5219\u8868\u8fbe\u5f0f\u6a21\u5f0f
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_PATTERN_309=\u65e0\u6cd5\u5c06\u63d0\u4f9b\u7684\u503c "%s" \u89e3\u6790\u4e3a\u6b63\u5219\u8868\u8fbe\u5f0f\u8bed\u6cd5\uff0c\u56e0\u4e3a\u63d0\u4f9b\u7684\u6b63\u5219\u8868\u8fbe\u5f0f\u6a21\u5f0f "%s" \u65e0\u6548
@@ -361,4 +362,17 @@
MILD_WARN_ATTR_INVALID_HOUR_ASSERTION_FORMAT_313=\u65e0\u6cd5\u5c06\u63d0\u4f9b\u7684\u503c "%s" \u89e3\u6790\u4e3a\u6709\u6548\u7684\u58f0\u660e\u503c\uff0c\u56e0\u4e3a "%d" \u4e0d\u662f\u6709\u6548\u7684\u5c0f\u65f6\u89c4\u8303
MILD_WARN_ATTR_DUPLICATE_SECOND_ASSERTION_FORMAT_314=\u65e0\u6cd5\u5c06\u63d0\u4f9b\u7684\u503c "%s" \u89e3\u6790\u4e3a\u6709\u6548\u7684\u58f0\u660e\u503c\uff0c\u56e0\u4e3a\u503c "%d" \u4e0e s\uff08\u79d2\uff09\u89c4\u8303\u51b2\u7a81
MILD_WARN_ATTR_DUPLICATE_MINUTE_ASSERTION_FORMAT_315=\u65e0\u6cd5\u5c06\u63d0\u4f9b\u7684\u503c "%s" \u89e3\u6790\u4e3a\u6709\u6548\u7684\u58f0\u660e\u503c\uff0c\u56e0\u4e3a\u503c "%d" \u4e0e m\uff08\u5206\u949f\uff09\u89c4\u8303\u51b2\u7a81
MILD_WARN_ATTR_DUPLICATE_HOUR_ASSERTION_FORMAT_316=\u65e0\u6cd5\u5c06\u63d0\u4f9b\u7684\u503c "%s" \u89e3\u6790\u4e3a\u6709\u6548\u7684\u58f0\u660e\u503c\uff0c\u56e0\u4e3a\u503c "%d" \u4e0e h\uff08\u5c0f\u65f6\uff09\u89c4\u8303\u51b2\u7a81
MILD_WARN_ATTR_DUPLICATE_HOUR_ASSERTION_FORMAT_316=\u65e0\u6cd5\u5c06\u63d0\u4f9b\u7684\u503c "%s" \u89e3\u6790\u4e3a\u6709\u6548\u7684\u58f0\u660e\u503c\uff0c\u56e0\u4e3a\u503c "%d" \u4e0e h\uff08\u5c0f\u65f6\uff09\u89c4\u8303\u51b2\u7a81
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EMPTY_VALUE_317=The provided value could not be parsed as a valid ldap syntax description because it was empty or contained only whitespace
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_OPEN_PARENTHESIS_318=The provided value "%s" could not be parsed as an ldap syntax description because an open parenthesis was expected at position %d but instead a '%s' character was found
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE_319=The provided value "%s" could not be parsed as an ldap syntax description because the end of the value was encountered while the Directory Server expected more data to be provided
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID_320=The provided value "%s" could not be parsed as an ldap syntax description because the numeric OID contained two consecutive periods at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID_321=The provided value "%s" could not be parsed as an ldap syntax description because the numeric OID contained an illegal character %s at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_STRING_OID_322=The provided value "%s" could not be parsed as an ldap syntax description because the non-numeric OID contained an illegal character %s at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNEXPECTED_CLOSE_PARENTHESIS_323=The provided value "%s" could not be parsed as an ldap syntax description because it contained an unexpected closing parenthesis at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_TOO_MANY_EXTENSIONS_324=The provided value "%s" could not be parsed as an ldap syntax description because it contains more than one form of constructor
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_SYNTAX_325=The definition for the ldap syntax with OID %s declared that it's a substitute for a syntax with OID %s. No such syntax is configured for use in the Directory Server
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ENUM_NO_VALUES_326=The provided value "%s" could not be parsed as an enumeration syntax, because there is no value
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXTENSION_INVALID_CHARACTER_327=The provided value "%s" could not be parsed as an ldap syntax extension because an invalid character was found at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_CLOSE_PARENTHESIS_328=The provided value "%s" could not be parsed as an ldap syntax description because a close parenthesis was expected at position %d but instead a '%s' character was found
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_QUOTE_AT_POS_329=The provided value "%s" could not be parsed as an ldap syntax description because a single quote was expected at position %d but the character %s was found instead
opendj-sdk/opends/src/messages/messages/schema_zh_TW.properties
@@ -21,6 +21,7 @@
# CDDL HEADER END
#
#      Copyright 2006-2009 Sun Microsystems, Inc.
#      Portions Copyright 2011 ForgeRock AS
@@ -352,9 +353,27 @@
MILD_WARN_ATTR_MISSING_YEAR_PARTIAL_TIME_ASSERTION_FORMAT_303=The provided value "%s" could not be parsed as a valid assertion value because it does not contain year in YYYY format
MILD_WARN_ATTR_CONFLICTING_ASSERTION_FORMAT_304=The provided value "%s" could not be parsed as a valid assertion value because more than  one time units are not allowed
MILD_WARN_ATTR_LDAP_SYNTAX_ILLEGAL_CHAR_IN_OID_305=The provided value "%s" could not be parsed as an ldap syntax because the OID contained an illegal character %s at position %d
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT_306=The provided value "%s" could not be parsed as an ldap syntax because it contains an unrecognized extension %s at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT_306=The provided value "%s" could not be parsed as an ldap syntax because it contains an unrecognized extension %s at position %d
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_VALUE_307=The provided value "%s" cannot be parsed as a valid regex syntax because it does not match  the pattern "%s"
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_NO_PATTERN_308=The provided value "%s" could not be parsed as a regex syntax because it does not contain a regex pattern
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_PATTERN_309=The provided value "%s" could not be parsed as a regex syntax because the provided regex pattern "%s" is invalid
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_ENUM_INVALID_VALUE_310=The provided value "%s" cannot be parsed because it is not allowed by enumeration syntax with OID "%s"
MILD_WARN_ATTR_SYNTAX_LDAPSYNTAX_ENUM_DUPLICATE_VALUE_311=The provided value "%s" cannot be parsed as an enumeration syntax  because it contains a duplicate value "%s" at position %d
MILD_WARN_ATTR_INVALID_MINUTE_ASSERTION_FORMAT_312=The provided value "%s" could not be parsed as a valid assertion value because "%d" is not a valid minute specification
MILD_WARN_ATTR_INVALID_HOUR_ASSERTION_FORMAT_313=The provided value "%s" could not be parsed as a valid assertion value because "%d" is not a valid hour specification
MILD_WARN_ATTR_DUPLICATE_SECOND_ASSERTION_FORMAT_314=The provided value "%s" could not be parsed as a valid assertion value because there is conflicting  value "%d" for s(Second) specification
MILD_WARN_ATTR_DUPLICATE_MINUTE_ASSERTION_FORMAT_315=The provided value "%s" could not be parsed as a valid assertion value because there is conflicting  value "%d" for m(Minute) specification
MILD_WARN_ATTR_DUPLICATE_HOUR_ASSERTION_FORMAT_316=The provided value "%s" could not be parsed as a valid assertion value because there is conflicting  value "%d" for h(Hour) specification
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EMPTY_VALUE_317=The provided value could not be parsed as a valid ldap syntax description because it was empty or contained only whitespace
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_OPEN_PARENTHESIS_318=The provided value "%s" could not be parsed as an ldap syntax description because an open parenthesis was expected at position %d but instead a '%s' character was found
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE_319=The provided value "%s" could not be parsed as an ldap syntax description because the end of the value was encountered while the Directory Server expected more data to be provided
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID_320=The provided value "%s" could not be parsed as an ldap syntax description because the numeric OID contained two consecutive periods at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID_321=The provided value "%s" could not be parsed as an ldap syntax description because the numeric OID contained an illegal character %s at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_STRING_OID_322=The provided value "%s" could not be parsed as an ldap syntax description because the non-numeric OID contained an illegal character %s at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNEXPECTED_CLOSE_PARENTHESIS_323=The provided value "%s" could not be parsed as an ldap syntax description because it contained an unexpected closing parenthesis at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_TOO_MANY_EXTENSIONS_324=The provided value "%s" could not be parsed as an ldap syntax description because it contains more than one form of constructor
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_SYNTAX_325=The definition for the ldap syntax with OID %s declared that it's a substitute for a syntax with OID %s. No such syntax is configured for use in the Directory Server
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_ENUM_NO_VALUES_326=The provided value "%s" could not be parsed as an enumeration syntax, because there is no value
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXTENSION_INVALID_CHARACTER_327=The provided value "%s" could not be parsed as an ldap syntax extension because an invalid character was found at position %d
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_CLOSE_PARENTHESIS_328=The provided value "%s" could not be parsed as an ldap syntax description because a close parenthesis was expected at position %d but instead a '%s' character was found
MILD_ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_QUOTE_AT_POS_329=The provided value "%s" could not be parsed as an ldap syntax description because a single quote was expected at position %d but the character %s was found instead
opendj-sdk/opends/src/server/org/opends/server/schema/AttributeTypeSyntax.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.schema;
import org.opends.messages.Message;
@@ -1423,15 +1424,16 @@
  {
    // Skip over any leading spaces.
    int length = valueStr.length();
    char c = valueStr.charAt(startPos++);
    while ((startPos < length) && (c == ' '))
    char c = '\u0000';
    while ((startPos < length) && ((c = valueStr.charAt(startPos)) == ' '))
    {
      c = valueStr.charAt(startPos++);
      startPos++;
    }
    if (startPos >= length)
    {
      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
      Message message =
          ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
@@ -1445,16 +1447,19 @@
    {
      // Parse until the closing quote.
      StringBuilder valueBuffer = new StringBuilder();
      while ((startPos < length) && ((c = valueStr.charAt(startPos++)) != '\''))
      startPos++;
      while ((startPos < length) && ((c = valueStr.charAt(startPos)) != '\''))
      {
        valueBuffer.append(c);
        startPos++;
      }
      startPos++;
      valueList.add(valueBuffer.toString());
    }
    else if (c == '(')
    {
      startPos++;
      // We're expecting a list of values. Quoted, space separated.
      while (true)
      {
        // Skip over any leading spaces;
@@ -1471,7 +1476,6 @@
                                       message);
        }
        if (c == ')')
        {
          // This is the end of the list.
@@ -1482,15 +1486,46 @@
        {
          // This is an illegal character.
          Message message =
              ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR.get(
                      valueStr, String.valueOf(c), startPos);
              ERR_ATTR_SYNTAX_ATTRSYNTAX_EXTENSION_INVALID_CHARACTER.get(
                      valueStr, startPos);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        else if (c == '\'')
        {
          // We have a quoted string
          StringBuilder valueBuffer = new StringBuilder();
          startPos++;
          while ((startPos < length) &&
              ((c = valueStr.charAt(startPos)) != '\''))
          {
            valueBuffer.append(c);
            startPos++;
          }
          valueList.add(valueBuffer.toString());
          startPos++;
        }
        else
        {
          // We'll recursively call this method to deal with this.
          startPos = readExtraParameterValues(valueStr, valueList, startPos);
          //Consider unquoted string
          StringBuilder valueBuffer = new StringBuilder();
          while ((startPos < length) &&
              ((c = valueStr.charAt(startPos)) != ' '))
          {
            valueBuffer.append(c);
            startPos++;
          }
          valueList.add(valueBuffer.toString());
        }
        if (startPos >= length)
        {
          Message message =
              ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
      }
    }
@@ -1498,16 +1533,15 @@
    {
      // Parse until the next space.
      StringBuilder valueBuffer = new StringBuilder();
      while ((startPos < length) && ((c = valueStr.charAt(startPos++)) != ' '))
      while ((startPos < length) && ((c = valueStr.charAt(startPos)) != ' '))
      {
        valueBuffer.append(c);
        startPos++;
      }
      valueList.add(valueBuffer.toString());
    }
    // Skip over any trailing spaces.
    while ((startPos < length) && (valueStr.charAt(startPos) == ' '))
    {
@@ -1516,12 +1550,12 @@
    if (startPos >= length)
    {
      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
      Message message =
          ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
    return startPos;
  }
opendj-sdk/opends/src/server/org/opends/server/schema/DITContentRuleSyntax.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.schema;
import org.opends.messages.Message;
@@ -1334,21 +1335,21 @@
   *                              the value.
   */
  private static int readExtraParameterValues(String valueStr,
                                              List<String> valueList,
                                              int startPos)
                          List<String> valueList, int startPos)
          throws DirectoryException
  {
    // Skip over any leading spaces.
    int length = valueStr.length();
    char c = valueStr.charAt(startPos++);
    while ((startPos < length) && (c == ' '))
    char c = '\u0000';
    while ((startPos < length) && ((c = valueStr.charAt(startPos)) == ' '))
    {
      c = valueStr.charAt(startPos++);
      startPos++;
    }
    if (startPos >= length)
    {
      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
      Message message =
          ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
@@ -1362,16 +1363,19 @@
    {
      // Parse until the closing quote.
      StringBuilder valueBuffer = new StringBuilder();
      while ((startPos < length) && ((c = valueStr.charAt(startPos++)) != '\''))
      startPos++;
      while ((startPos < length) && ((c = valueStr.charAt(startPos)) != '\''))
      {
        valueBuffer.append(c);
        startPos++;
      }
      startPos++;
      valueList.add(valueBuffer.toString());
    }
    else if (c == '(')
    {
      startPos++;
      // We're expecting a list of values. Quoted, space separated.
      while (true)
      {
        // Skip over any leading spaces;
@@ -1382,12 +1386,12 @@
        if (startPos >= length)
        {
          Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
          Message message =
              ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        if (c == ')')
        {
          // This is the end of the list.
@@ -1403,10 +1407,41 @@
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        else if (c == '\'')
        {
          // We have a quoted string
          StringBuilder valueBuffer = new StringBuilder();
          startPos++;
          while ((startPos < length) &&
              ((c = valueStr.charAt(startPos)) != '\''))
          {
            valueBuffer.append(c);
            startPos++;
          }
          valueList.add(valueBuffer.toString());
          startPos++;
        }
        else
        {
          // We'll recursively call this method to deal with this.
          startPos = readExtraParameterValues(valueStr, valueList, startPos);
          //Consider unquoted string
          StringBuilder valueBuffer = new StringBuilder();
          while ((startPos < length) &&
              ((c = valueStr.charAt(startPos)) != ' '))
          {
            valueBuffer.append(c);
            startPos++;
          }
          valueList.add(valueBuffer.toString());
        }
        if (startPos >= length)
        {
          Message message =
              ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
      }
    }
@@ -1414,16 +1449,15 @@
    {
      // Parse until the next space.
      StringBuilder valueBuffer = new StringBuilder();
      while ((startPos < length) && ((c = valueStr.charAt(startPos++)) != ' '))
      while ((startPos < length) && ((c = valueStr.charAt(startPos)) != ' '))
      {
        valueBuffer.append(c);
        startPos++;
      }
      valueList.add(valueBuffer.toString());
    }
    // Skip over any trailing spaces.
    while ((startPos < length) && (valueStr.charAt(startPos) == ' '))
    {
@@ -1432,12 +1466,12 @@
    if (startPos >= length)
    {
      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
      Message message =
          ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
    return startPos;
  }
opendj-sdk/opends/src/server/org/opends/server/schema/DITStructureRuleSyntax.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.schema;
import org.opends.messages.Message;
@@ -1086,15 +1087,16 @@
  {
    // Skip over any leading spaces.
    int length = valueStr.length();
    char c = valueStr.charAt(startPos++);
    while ((startPos < length) && (c == ' '))
    char c = '\u0000';
    while ((startPos < length) && ((c = valueStr.charAt(startPos)) == ' '))
    {
      c = valueStr.charAt(startPos++);
      startPos++;
    }
    if (startPos >= length)
    {
      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
      Message message =
          ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
@@ -1108,16 +1110,19 @@
    {
      // Parse until the closing quote.
      StringBuilder valueBuffer = new StringBuilder();
      while ((startPos < length) && ((c = valueStr.charAt(startPos++)) != '\''))
      startPos++;
      while ((startPos < length) && ((c = valueStr.charAt(startPos)) != '\''))
      {
        valueBuffer.append(c);
        startPos++;
      }
      startPos++;
      valueList.add(valueBuffer.toString());
    }
    else if (c == '(')
    {
      startPos++;
      // We're expecting a list of values. Quoted, space separated.
      while (true)
      {
        // Skip over any leading spaces;
@@ -1128,12 +1133,12 @@
        if (startPos >= length)
        {
          Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
          Message message =
              ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        if (c == ')')
        {
          // This is the end of the list.
@@ -1149,10 +1154,41 @@
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        else if (c == '\'')
        {
          // We have a quoted string
          StringBuilder valueBuffer = new StringBuilder();
          startPos++;
          while ((startPos < length) &&
              ((c = valueStr.charAt(startPos)) != '\''))
          {
            valueBuffer.append(c);
            startPos++;
          }
          valueList.add(valueBuffer.toString());
          startPos++;
        }
        else
        {
          // We'll recursively call this method to deal with this.
          startPos = readExtraParameterValues(valueStr, valueList, startPos);
          //Consider unquoted string
          StringBuilder valueBuffer = new StringBuilder();
          while ((startPos < length) &&
              ((c = valueStr.charAt(startPos)) != ' '))
          {
            valueBuffer.append(c);
            startPos++;
          }
          valueList.add(valueBuffer.toString());
        }
        if (startPos >= length)
        {
          Message message =
              ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
      }
    }
@@ -1160,16 +1196,15 @@
    {
      // Parse until the next space.
      StringBuilder valueBuffer = new StringBuilder();
      while ((startPos < length) && ((c = valueStr.charAt(startPos++)) != ' '))
      while ((startPos < length) && ((c = valueStr.charAt(startPos)) != ' '))
      {
        valueBuffer.append(c);
        startPos++;
      }
      valueList.add(valueBuffer.toString());
    }
    // Skip over any trailing spaces.
    while ((startPos < length) && (valueStr.charAt(startPos) == ' '))
    {
@@ -1178,12 +1213,12 @@
    if (startPos >= length)
    {
      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
      Message message =
          ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
    return startPos;
  }
opendj-sdk/opends/src/server/org/opends/server/schema/LDAPSyntaxDescriptionSyntax.java
@@ -23,12 +23,17 @@
 *
 *
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.schema;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.LinkedHashMap;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
@@ -238,18 +243,38 @@
  /**
   *  Parse the OID and Description fields from the ldap syntaxes.
   * Decodes the contents of the provided byte sequence as an ldap syntax
   * definition according to the rules of this syntax.  Note that the provided
   * byte sequence value does not need to be normalized (and in fact, it should
   * not be in order to allow the desired capitalization to be preserved).
   *
   * @param  value                 The byte sequence containing the value
   *                               to decode (it does not need to be
   *                               normalized).
   * @param  schema                The schema to use to resolve references to
   *                               other schema elements.
   * @param  allowUnknownElements  Indicates whether to allow values that are
   *                               not defined in the server schema. This
   *                               should only be true when called by
   *                               {@code valueIsAcceptable}.
   *                               Not used for LDAP Syntaxes
   *
   * @return  The decoded ldapsyntax definition.
   *
   * @throws  DirectoryException  If the provided value cannot be decoded as an
   *                              ldapsyntax definition.
   */
  private static int parseOIDAndDescription(String valueStr,
          StringBuilder descriptionBuffer, StringBuilder oidBuffer)
          throws DirectoryException
  public static LDAPSyntaxDescription decodeLDAPSyntax(ByteSequence value,
          Schema schema,
          boolean allowUnknownElements) throws DirectoryException
  {
    // Get string representations of the provided value using the provided form.
    String valueStr = value.toString();
    // We'll do this a character at a time.  First, skip over any leading
    // whitespace.
    int pos    = 0;
    int length = valueStr.length();
    String lowerStr = toLowerCase(valueStr);
    while ((pos < length) && (valueStr.charAt(pos) == ' '))
    {
      pos++;
@@ -260,7 +285,7 @@
      // This means that the value was empty or contained only whitespace.  That
      // is illegal.
      Message message = ERR_ATTR_SYNTAX_ATTRSYNTAX_EMPTY_VALUE.get();
      Message message = ERR_ATTR_SYNTAX_LDAPSYNTAX_EMPTY_VALUE.get();
      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
              message);
    }
@@ -273,7 +298,7 @@
    {
      Message message =
              ERR_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_OPEN_PARENTHESIS.get(
              ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_OPEN_PARENTHESIS.get(
                      valueStr, (pos-1), String.valueOf(c));
      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
              message);
@@ -290,7 +315,7 @@
    {
      // This means that the end of the value was reached before we could find
      // the OID.  Ths is illegal.
      Message message = ERR_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE.get(
      Message message = ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(
              valueStr);
      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
              message);
@@ -310,7 +335,7 @@
          if (lastWasPeriod)
          {
            Message message =
              ERR_ATTR_SYNTAX_ATTRTYPE_DOUBLE_PERIOD_IN_NUMERIC_OID.
              ERR_ATTR_SYNTAX_LDAPSYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID.
                  get(valueStr, (pos-1));
            throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                         message);
@@ -324,7 +349,7 @@
        {
          // This must have been an illegal character.
          Message message =
            ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID.
              ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID.
                get(valueStr, String.valueOf(c), (pos-1));
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
@@ -353,7 +378,7 @@
        {
          // This must have been an illegal character.
          Message message =
                  ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_STRING_OID.
                  ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_STRING_OID.
              get(valueStr, String.valueOf(c), (pos-1));
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
@@ -363,16 +388,17 @@
    // If we're at the end of the value, then it isn't a valid attribute type
    // description.  Otherwise, parse out the OID.
    String oid;
    if (pos >= length)
    {
      Message message = ERR_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE.get(
      Message message = ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(
              valueStr);
      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
              message);
    }
    else
    {
      oidBuffer.append(lowerStr.substring(oidStartPos, pos));
      oid = toLowerCase(valueStr.substring(oidStartPos, pos));
    }
@@ -386,248 +412,180 @@
    {
      // This means that the end of the value was reached before we could find
      // the OID.  Ths is illegal.
      Message message = ERR_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE.get(
      Message message = ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(
              valueStr);
      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
              message);
    }
    // At this point, we should have a pretty specific syntax that describes
    // what may come next, but some of the components are optional and it would
    // be pretty easy to put something in the wrong order, so we will be very
    // flexible about what we can accept.  Just look at the next token, figure
    // out what it is and how to treat what comes after it, then repeat until
    // we get to the end of the value.  But before we start, set default values
    // for everything else we might need to know.
    String description = null;
    LDAPSyntaxDescriptionSyntax syntax = null;
    HashMap<String,List<String>> extraProperties =
         new LinkedHashMap<String,List<String>>();
    boolean hasXSyntaxToken = false;
    // If the next character is a closing parenthesis, then we must be at the
    // end of the value.
    if (c == ')')
    {
      if (pos < length)
      {
        Message message =
                ERR_ATTR_SYNTAX_ATTRSYNTAX_UNEXPECTED_CLOSE_PARENTHESIS.get(
                        valueStr, (pos-1));
        throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                message);
      }
    }
    // The next token must be "DESC" followed by a quoted string.
    String tokenName;
    try
    while (true)
    {
      StringBuilder tokenNameBuffer = new StringBuilder();
      pos = readTokenName(lowerStr, tokenNameBuffer, pos);
      tokenName = tokenNameBuffer.toString();
    }
    catch (Exception e)
    {
      if (debugEnabled())
      pos = readTokenName(valueStr, tokenNameBuffer, pos);
      String tokenName = tokenNameBuffer.toString();
      String lowerTokenName = toLowerCase(tokenName);
      if (tokenName.equals(")"))
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
      Message message =
              ERR_ATTR_SYNTAX_ATTRSYNTAX_CANNOT_READ_DESC_TOKEN.get(
                      valueStr, pos, getExceptionMessage(e));
      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
              message);
    }
    if (! tokenName.equals("desc"))
    {
      Message message = ERR_ATTR_SYNTAX_ATTRSYNTAX_TOKEN_NOT_DESC.get(
              valueStr, tokenName);
      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
              message);
    }
    // The next component must be the quoted description.
    try
    {
      pos = readQuotedString(valueStr, descriptionBuffer, pos);
    }
    catch (Exception e)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
      Message message =
              ERR_ATTR_SYNTAX_ATTRSYNTAX_CANNOT_READ_DESC_VALUE.get(
                      valueStr, pos, getExceptionMessage(e));
      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
              message);
    }
    return pos;
  }
  /**
   * Decodes the contents of the provided byte sequence as an ldap syntax
   * definition according to the rules of this syntax.  Note that the provided
   * byte sequence value does not need to be normalized (and in fact, it should
   * not be in order to allow the desired capitalization to be preserved).
   *
   * @param  value                 The byte sequence containing the value
   *                               to decode (it does not need to be
   *                               normalized).
   * @param  schema                The schema to use to resolve references to
   *                               other schema elements.
   * @param  allowUnknownElements  Indicates whether to allow values that
   *                               reference a superior class or required or
   *                               optional attribute types which are not
   *                               defined in the server schema.  This should
   *                               only be true when called by
   *                               {@code valueIsAcceptable}.
   *
   * @return  The decoded ldapsyntax definition.
   *
   * @throws  DirectoryException  If the provided value cannot be decoded as an
   *                              ldapsyntax definition.
   */
  public static LDAPSyntaxDescription decodeLDAPSyntax(ByteSequence value,
          Schema schema,
          boolean allowUnknownElements) throws DirectoryException
  {
     // Get string representations of the provided value using the provided form
    // and with all lowercase characters.
    String valueStr = value.toString();
    String lowerStr = toLowerCase(valueStr);
    int length = valueStr.length();
    StringBuilder descriptionBuffer = new StringBuilder();
    StringBuilder oidBuffer = new StringBuilder();
    //Retrieve the OID and Description part of the defition.
    int pos = parseOIDAndDescription(valueStr, descriptionBuffer,oidBuffer);
    String oid = oidBuffer.toString();
    String description = descriptionBuffer.toString();
    StringBuilder extBuffer = new StringBuilder();
    LDAPSyntaxDescriptionSyntax syntax = null;
    char c = '\u0000';
    pos = readTokenName(valueStr, extBuffer, pos);
    String lowerTokenName = toLowerCase(extBuffer.toString());
    if(lowerTokenName.equals("x-subst"))
    {
      StringBuilder woidBuffer = new StringBuilder();
      pos = readQuotedString(lowerStr, woidBuffer, pos);
      String syntaxOID = woidBuffer.toString();
      AttributeSyntax subSyntax = schema.getSyntax(syntaxOID);
      if(subSyntax == null)
      {
        Message message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SYNTAX.get(
            String.valueOf(oid), syntaxOID);
        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                     message);
      }
      syntax = new SubstitutionSyntax(subSyntax,valueStr,description,oid);
    }
    else if(lowerTokenName.equals("x-pattern"))
    {
      StringBuilder regexBuffer = new StringBuilder();
      pos = readQuotedString(valueStr, regexBuffer, pos);
      String regex = regexBuffer.toString().trim();
      if(regex.length() == 0)
      {
        Message message = WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_NO_PATTERN.get(
               valueStr);
        throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                message);
      }
      try
      {
        Pattern pattern = Pattern.compile(regex);
        syntax = new RegexSyntax(pattern,valueStr,description,oid);
      }
      catch(Exception e)
      {
        Message message = WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_PATTERN.get
                (valueStr,regex);
        throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                message);
      }
    }
    else if(lowerTokenName.equals("x-enum"))
    {
      // The next character must be the opening parenthesis
      if ((c = valueStr.charAt(pos++)) != '(')
      {
        Message message =
                ERR_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_OPEN_PARENTHESIS.get(
                        valueStr, pos, String.valueOf(c));
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                message);
      }
      LinkedList<ByteSequence> entries = new LinkedList<ByteSequence>();
      while(true)
      {
        if ((c=valueStr.charAt(pos)) == ')')
        {
          pos++;
          break;
        }
        StringBuilder buffer = new StringBuilder();
        pos = readQuotedString(valueStr, buffer, pos);
        ByteString entry = ByteString.valueOf(buffer.toString());
        if(entries.contains(entry))
        // We must be at the end of the value.  If not, then that's a problem.
        if (pos < length)
        {
          Message message =
                WARN_ATTR_SYNTAX_LDAPSYNTAX_ENUM_DUPLICATE_VALUE.get(
                        valueStr, entry.toString(),pos);
            ERR_ATTR_SYNTAX_LDAPSYNTAX_UNEXPECTED_CLOSE_PARENTHESIS.
                get(valueStr, (pos-1));
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                message);
                                       message);
        }
        entries.add(entry);
        break;
      }
      syntax = new EnumSyntax(entries, valueStr,description, oid);
    }
    else
    {
      Message message = WARN_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT.get(
              valueStr,lowerTokenName,pos);
      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
              message);
    }
    while ((pos < length) && ((c = valueStr.charAt(pos)) == ' '))
    {
      pos++;
    }
    // The next character must be the closing parenthesis and there should not
    // be anything after it (except maybe some spaces).
    if (pos >= length || (c = valueStr.charAt(pos++)) != ')')
    {
      Message message =
              ERR_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_CLOSE_PARENTHESIS.get(
                      valueStr, pos, String.valueOf(c));
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
              message);
    }
    while (pos < length)
    {
      c = valueStr.charAt(pos++);
      if (c != ' ')
      else if (lowerTokenName.equals("desc"))
      {
        // This specifies the description for the attribute type.  It is an
        // arbitrary string of characters enclosed in single quotes.
        StringBuilder descriptionBuffer = new StringBuilder();
        pos = readQuotedString(valueStr, descriptionBuffer, pos);
        description = descriptionBuffer.toString();
      }
      else if (lowerTokenName.equals("x-subst"))
      {
        if (hasXSyntaxToken)
        {
          // We've already seen syntax extension. More than 1 is not allowed
          Message message =
              ERR_ATTR_SYNTAX_LDAPSYNTAX_TOO_MANY_EXTENSIONS.get(valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        hasXSyntaxToken = true;
        StringBuilder woidBuffer = new StringBuilder();
        pos = readQuotedString(valueStr, woidBuffer, pos);
        String syntaxOID = toLowerCase(woidBuffer.toString());
        AttributeSyntax subSyntax = schema.getSyntax(syntaxOID);
        if (subSyntax == null)
        {
          Message message = ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_SYNTAX.get(
              String.valueOf(oid), syntaxOID);
          throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                       message);
        }
        syntax = new SubstitutionSyntax(subSyntax,valueStr,description,oid);
      }
        Message message =
                ERR_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_AFTER_CLOSE.get(
                        valueStr, String.valueOf(c), pos);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
      else if(lowerTokenName.equals("x-pattern"))
      {
        if (hasXSyntaxToken)
        {
          // We've already seen syntax extension. More than 1 is not allowed
          Message message =
              ERR_ATTR_SYNTAX_LDAPSYNTAX_TOO_MANY_EXTENSIONS.get(valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        hasXSyntaxToken = true;
        StringBuilder regexBuffer = new StringBuilder();
        pos = readQuotedString(valueStr, regexBuffer, pos);
        String regex = regexBuffer.toString().trim();
        if(regex.length() == 0)
        {
          Message message = WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_NO_PATTERN.get(
               valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        try
        {
          Pattern pattern = Pattern.compile(regex);
          syntax = new RegexSyntax(pattern,valueStr,description,oid);
        }
        catch(Exception e)
        {
          Message message =
              WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_PATTERN.get
                  (valueStr,regex);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
      }
      else if(lowerTokenName.equals("x-enum"))
      {
        if (hasXSyntaxToken)
        {
          // We've already seen syntax extension. More than 1 is not allowed
          Message message =
              ERR_ATTR_SYNTAX_LDAPSYNTAX_TOO_MANY_EXTENSIONS.get(valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        hasXSyntaxToken = true;
        LinkedList<String> values = new LinkedList<String>();
        pos = readExtraParameterValues(valueStr, values, pos);
        if (values.isEmpty())
        {
          Message message =
              ERR_ATTR_SYNTAX_LDAPSYNTAX_ENUM_NO_VALUES.get(valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        // Parse all enum values, check for uniqueness
        LinkedList<ByteSequence> entries = new LinkedList<ByteSequence>();
        for (String v : values)
        {
          ByteString entry = ByteString.valueOf(v);
          if (entries.contains(entry))
          {
            Message message =
                  WARN_ATTR_SYNTAX_LDAPSYNTAX_ENUM_DUPLICATE_VALUE.get(
                          valueStr, entry.toString(),pos);
            throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                  message);
          }
          entries.add(entry);
        }
        syntax = new EnumSyntax(entries, valueStr,description, oid);
      }
      else if (tokenName.matches("X\\-[_\\p{Alpha}-]+"))
      {
        // This must be a non-standard property and it must be followed by
        // either a single value in single quotes or an open parenthesis
        // followed by one or more values in single quotes separated by spaces
        // followed by a close parenthesis.
        List<String> valueList = new ArrayList<String>();
        pos = readExtraParameterValues(valueStr, valueList, pos);
        extraProperties.put(tokenName, valueList);
      }
      else
      {
        // Unknown Token
        Message message = ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT.get(
            valueStr, tokenName, pos);
        throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
              message);
      }
    }
    if (syntax == null)
    {
      // Create a plain Syntax. That seems to be required by export/import
      // Schema backend.
      syntax = new LDAPSyntaxDescriptionSyntax();
    }
    //Since we reached here it means everything is OK.
    return new LDAPSyntaxDescription(valueStr,syntax,description,null);
    return new LDAPSyntaxDescription(valueStr,syntax,
                                     description,extraProperties);
  }
@@ -648,73 +606,26 @@
  public boolean valueIsAcceptable(ByteSequence value,
                                   MessageBuilder invalidReason)
  {
     // Get string representations of the provided value using the provided form
    // and with all lowercase characters.
    String valueStr = value.toString();
    StringBuilder descriptionBuffer = new StringBuilder();
    StringBuilder oidBuffer = new StringBuilder();
    int length = valueStr.length();
    int pos = 0;
     try
    // We'll use the decodeAttributeType method to determine if the value is
    // acceptable.
    try
    {
      pos = parseOIDAndDescription(valueStr, descriptionBuffer,oidBuffer);
      decodeLDAPSyntax(value, DirectoryServer.getSchema(), true);
      return true;
    }
    catch(DirectoryException de)
    catch (DirectoryException de)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, de);
      }
      invalidReason.append(de.getMessageObject());
      return false;
    }
    char c = valueStr.charAt(pos);
    //Check if we have a RFC 4512 style extension.
    if (c  != ')')
    {
        try {
            pos=parseExtension(valueStr, pos);
        } catch (Exception e) {
          if (debugEnabled())
          {
            TRACER.debugCaught(DebugLogLevel.ERROR, e);
          }
            invalidReason.append(
                    ERR_ATTR_SYNTAX_ATTRSYNTAX_INVALID_EXTENSION.get(
                            getExceptionMessage(e)));
            return false;
        }
    }
    // The next character must be the closing parenthesis and there should not
    // be anything after it (except maybe some spaces).
    if ((c = valueStr.charAt(pos++)) != ')')
    {
      invalidReason.append(
              ERR_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_CLOSE_PARENTHESIS.get(
                      valueStr, pos, String.valueOf(c)));
      return false;
    }
    while (pos < length)
    {
      c = valueStr.charAt(pos++);
      if (c != ' ')
      {
        invalidReason.append(
                ERR_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_AFTER_CLOSE.get(
                        valueStr, String.valueOf(c), pos));
        return false;
      }
    }
    // If we've gotten here, then the value is OK.
    return true;
  }
  /**
   * Reads the next token name from the attribute syntax definition, skipping
   * over any leading or trailing spaces, and appends it to the provided buffer.
@@ -746,7 +657,7 @@
    if (startPos >= length)
    {
      Message message =
          ERR_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE.get(valueStr);
          ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
@@ -805,7 +716,7 @@
    if (startPos >= length)
    {
      Message message =
          ERR_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE.get(valueStr);
          ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
@@ -814,7 +725,7 @@
    // The next character must be a single quote.
    if (c != '\'')
    {
      Message message = WARN_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_QUOTE_AT_POS.get(
      Message message = ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_QUOTE_AT_POS.get(
          valueStr, startPos, String.valueOf(c));
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -842,7 +753,7 @@
    if (startPos >= length)
    {
      Message message =
          ERR_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE.get(valueStr);
          ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
@@ -852,99 +763,164 @@
    return startPos;
  }
  /** Parses a RFC 4512 extensions (see 4.1.5 and 4.1 of the RFC) definition.
  /**
   * Reads the value for an "extra" parameter.  It will handle a single unquoted
   * word (which is technically illegal, but we'll allow it), a single quoted
   * string, or an open parenthesis followed by a space-delimited set of quoted
   * strings or unquoted words followed by a close parenthesis.
   *
   * From 4.1.5 of the spec:
   * @param  valueStr   The string containing the information to be read.
   * @param  valueList  The list of "extra" parameter values read so far.
   * @param  startPos   The position in the value string at which to start
   *                    reading.
   *
   *  LDAP syntax definitions are written according to the ABNF:
   * @return  The "extra" parameter value that was read.
   *
   *  SyntaxDescription = LPAREN WSP
   *      numericoid                 ; object identifier
   *      [ SP "DESC" SP qdstring ]  ; description
   *      extensions WSP RPAREN      ; extensions
   *
   * @param valueStr The user-provided representation of the extensions
   *                      definition.
   *
   * @param startPos The position in the provided string at which to start
   *                      reading the quoted string.
   *
   * @return The position of the first character that is not part of the quoted
   *          string or one of the trailing spaces after it.
   *
   * @throws DirectoryException If the extensions definition could not be
   *                            parsed.
   * @throws  DirectoryException  If a problem occurs while attempting to read
   *                              the value.
   */
private static int parseExtension(String valueStr, int startPos)
  throws DirectoryException {
  private static int readExtraParameterValues(String valueStr,
                          List<String> valueList, int startPos)
          throws DirectoryException
  {
    // Skip over any leading spaces.
    int length = valueStr.length();
    char c = '\u0000';
    while ((startPos < length) && ((c = valueStr.charAt(startPos)) == ' '))
    {
      startPos++;
    }
      int pos=startPos, len=valueStr.length();
      char c;
      while(true)
    if (startPos >= length)
    {
      Message message =
          ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
    // Look at the next character.  If it is a quote, then parse until the next
    // quote and end.  If it is an open parenthesis, then parse individual
    // values until the close parenthesis and end.  Otherwise, parse until the
    // next space and end.
    if (c == '\'')
    {
      // Parse until the closing quote.
      StringBuilder valueBuffer = new StringBuilder();
      startPos++;
      while ((startPos < length) && ((c = valueStr.charAt(startPos)) != '\''))
      {
          StringBuilder tokenNameBuffer = new StringBuilder();
          pos = readTokenName(valueStr, tokenNameBuffer, pos);
          String tokenName = tokenNameBuffer.toString();
          if((tokenName.length() <= 2) || (!tokenName.startsWith("X-")))
          {
              Message message =
                ERR_ATTR_SYNTAX_ATTRSYNTAX_EXTENSION_INVALID_CHARACTER.get(
                        valueStr, pos);
              throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                      message);
          }
          String xstring = tokenName.substring(2);
          //Only allow a-z,A-Z,-,_ characters after X-
          if(xstring.split("^[A-Za-z_-]+").length > 0)
          {
              Message message =
                ERR_ATTR_SYNTAX_ATTRSYNTAX_EXTENSION_INVALID_CHARACTER.get(
                        valueStr, pos);
              throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                      message);
          }
          if((c=valueStr.charAt(pos)) == '\'')
          {
              StringBuilder qdString = new StringBuilder();
              pos = readQuotedString(valueStr, qdString, pos);
          } else if(c == '(')
          {
              pos++;
              StringBuilder qdString = new StringBuilder();
              while ((c=valueStr.charAt(pos)) != ')')
                  pos = readQuotedString(valueStr, qdString, pos);
              pos++;
          } else
          {
              Message message =
                ERR_ATTR_SYNTAX_ATTRSYNTAX_EXTENSION_INVALID_CHARACTER.get(
                        valueStr, pos);
              throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                      message);
          }
          if (pos >= len)
          {
            Message message =
                ERR_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE.get(valueStr);
            throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                         message);
          }
          //Clean up any space after this.
          while ((pos < valueStr.length()) &&
                  ((c = valueStr.charAt(pos)) == ' '))
          {
            pos++;
          }
          if(valueStr.charAt(pos) == ')')
              break;
        valueBuffer.append(c);
        startPos++;
      }
      return pos;
      startPos++;
      valueList.add(valueBuffer.toString());
    }
    else if (c == '(')
    {
      startPos++;
      // We're expecting a list of values. Quoted, space separated.
      while (true)
      {
        // Skip over any leading spaces;
        while ((startPos < length) && ((c = valueStr.charAt(startPos)) == ' '))
        {
          startPos++;
        }
        if (startPos >= length)
        {
          Message message =
              ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        if (c == ')')
        {
          // This is the end of the list.
          startPos++;
          break;
        }
        else if (c == '(')
        {
          // This is an illegal character.
          Message message =
              ERR_ATTR_SYNTAX_LDAPSYNTAX_EXTENSION_INVALID_CHARACTER.get(
                      valueStr, startPos);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        else if (c == '\'')
        {
          // We have a quoted string
          StringBuilder valueBuffer = new StringBuilder();
          startPos++;
          while ((startPos < length) &&
              ((c = valueStr.charAt(startPos)) != '\''))
          {
            valueBuffer.append(c);
            startPos++;
          }
          valueList.add(valueBuffer.toString());
          startPos++;
        }
        else
        {
          //Consider unquoted string
          StringBuilder valueBuffer = new StringBuilder();
          while ((startPos < length) &&
              ((c = valueStr.charAt(startPos)) != ' '))
          {
            valueBuffer.append(c);
            startPos++;
          }
          valueList.add(valueBuffer.toString());
        }
        if (startPos >= length)
        {
          Message message =
              ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
      }
    }
    else
    {
      // Parse until the next space.
      StringBuilder valueBuffer = new StringBuilder();
      while ((startPos < length) && ((c = valueStr.charAt(startPos)) != ' '))
      {
        valueBuffer.append(c);
        startPos++;
      }
      valueList.add(valueBuffer.toString());
    }
    // Skip over any trailing spaces.
    while ((startPos < length) && (valueStr.charAt(startPos) == ' '))
    {
      startPos++;
    }
    if (startPos >= length)
    {
      Message message =
          ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
    return startPos;
  }
  /**
   * {@inheritDoc}
   */
opendj-sdk/opends/src/server/org/opends/server/schema/MatchingRuleSyntax.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.schema;
import org.opends.messages.Message;
@@ -1035,20 +1036,21 @@
   *                              the value.
   */
  private static int readExtraParameterValues(String valueStr,
                          CopyOnWriteArrayList<String> valueList, int startPos)
                        CopyOnWriteArrayList<String> valueList, int startPos)
          throws DirectoryException
  {
    // Skip over any leading spaces.
    int length = valueStr.length();
    char c = valueStr.charAt(startPos++);
    while ((startPos < length) && (c == ' '))
    char c = '\u0000';
    while ((startPos < length) && ((c = valueStr.charAt(startPos)) == ' '))
    {
      c = valueStr.charAt(startPos++);
      startPos++;
    }
    if (startPos >= length)
    {
      Message message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
      Message message =
          ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
@@ -1062,16 +1064,19 @@
    {
      // Parse until the closing quote.
      StringBuilder valueBuffer = new StringBuilder();
      while ((startPos < length) && ((c = valueStr.charAt(startPos++)) != '\''))
      startPos++;
      while ((startPos < length) && ((c = valueStr.charAt(startPos)) != '\''))
      {
        valueBuffer.append(c);
        startPos++;
      }
      startPos++;
      valueList.add(valueBuffer.toString());
    }
    else if (c == '(')
    {
      startPos++;
      // We're expecting a list of values. Quoted, space separated.
      while (true)
      {
        // Skip over any leading spaces;
@@ -1082,12 +1087,12 @@
        if (startPos >= length)
        {
          Message message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
          Message message =
              ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        if (c == ')')
        {
          // This is the end of the list.
@@ -1103,10 +1108,41 @@
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        else if (c == '\'')
        {
          // We have a quoted string
          StringBuilder valueBuffer = new StringBuilder();
          startPos++;
          while ((startPos < length) &&
              ((c = valueStr.charAt(startPos)) != '\''))
          {
            valueBuffer.append(c);
            startPos++;
          }
          valueList.add(valueBuffer.toString());
          startPos++;
        }
        else
        {
          // We'll recursively call this method to deal with this.
          startPos = readExtraParameterValues(valueStr, valueList, startPos);
          //Consider unquoted string
          StringBuilder valueBuffer = new StringBuilder();
          while ((startPos < length) &&
              ((c = valueStr.charAt(startPos)) != ' '))
          {
            valueBuffer.append(c);
            startPos++;
          }
          valueList.add(valueBuffer.toString());
        }
        if (startPos >= length)
        {
          Message message =
              ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
      }
    }
@@ -1114,16 +1150,15 @@
    {
      // Parse until the next space.
      StringBuilder valueBuffer = new StringBuilder();
      while ((startPos < length) && ((c = valueStr.charAt(startPos++)) != ' '))
      while ((startPos < length) && ((c = valueStr.charAt(startPos)) != ' '))
      {
        valueBuffer.append(c);
        startPos++;
      }
      valueList.add(valueBuffer.toString());
    }
    // Skip over any trailing spaces.
    while ((startPos < length) && (valueStr.charAt(startPos) == ' '))
    {
@@ -1132,12 +1167,12 @@
    if (startPos >= length)
    {
      Message message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
      Message message =
          ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
    return startPos;
  }
opendj-sdk/opends/src/server/org/opends/server/schema/MatchingRuleUseSyntax.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.schema;
import org.opends.messages.Message;
@@ -1026,20 +1027,21 @@
   *                              the value.
   */
  private static int readExtraParameterValues(String valueStr,
                          List<String> valueList, int startPos)
                        List<String> valueList, int startPos)
          throws DirectoryException
  {
    // Skip over any leading spaces.
    int length = valueStr.length();
    char c = valueStr.charAt(startPos++);
    while ((startPos < length) && (c == ' '))
    char c = '\u0000';
    while ((startPos < length) && ((c = valueStr.charAt(startPos)) == ' '))
    {
      c = valueStr.charAt(startPos++);
      startPos++;
    }
    if (startPos >= length)
    {
      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
      Message message =
          ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
@@ -1053,16 +1055,19 @@
    {
      // Parse until the closing quote.
      StringBuilder valueBuffer = new StringBuilder();
      while ((startPos < length) && ((c = valueStr.charAt(startPos++)) != '\''))
      startPos++;
      while ((startPos < length) && ((c = valueStr.charAt(startPos)) != '\''))
      {
        valueBuffer.append(c);
        startPos++;
      }
      startPos++;
      valueList.add(valueBuffer.toString());
    }
    else if (c == '(')
    {
      startPos++;
      // We're expecting a list of values. Quoted, space separated.
      while (true)
      {
        // Skip over any leading spaces;
@@ -1073,12 +1078,12 @@
        if (startPos >= length)
        {
          Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
          Message message =
              ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        if (c == ')')
        {
          // This is the end of the list.
@@ -1094,10 +1099,41 @@
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        else if (c == '\'')
        {
          // We have a quoted string
          StringBuilder valueBuffer = new StringBuilder();
          startPos++;
          while ((startPos < length) &&
              ((c = valueStr.charAt(startPos)) != '\''))
          {
            valueBuffer.append(c);
            startPos++;
          }
          valueList.add(valueBuffer.toString());
          startPos++;
        }
        else
        {
          // We'll recursively call this method to deal with this.
          startPos = readExtraParameterValues(valueStr, valueList, startPos);
          //Consider unquoted string
          StringBuilder valueBuffer = new StringBuilder();
          while ((startPos < length) &&
              ((c = valueStr.charAt(startPos)) != ' '))
          {
            valueBuffer.append(c);
            startPos++;
          }
          valueList.add(valueBuffer.toString());
        }
        if (startPos >= length)
        {
          Message message =
              ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
      }
    }
@@ -1105,16 +1141,15 @@
    {
      // Parse until the next space.
      StringBuilder valueBuffer = new StringBuilder();
      while ((startPos < length) && ((c = valueStr.charAt(startPos++)) != ' '))
      while ((startPos < length) && ((c = valueStr.charAt(startPos)) != ' '))
      {
        valueBuffer.append(c);
        startPos++;
      }
      valueList.add(valueBuffer.toString());
    }
    // Skip over any trailing spaces.
    while ((startPos < length) && (valueStr.charAt(startPos) == ' '))
    {
@@ -1123,12 +1158,12 @@
    if (startPos >= length)
    {
      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
      Message message =
          ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
    return startPos;
  }
opendj-sdk/opends/src/server/org/opends/server/schema/NameFormSyntax.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.schema;
import org.opends.messages.Message;
@@ -1142,20 +1143,21 @@
   *                              the value.
   */
  private static int readExtraParameterValues(String valueStr,
                          List<String> valueList, int startPos)
                        List<String> valueList, int startPos)
          throws DirectoryException
  {
    // Skip over any leading spaces.
    int length = valueStr.length();
    char c = valueStr.charAt(startPos++);
    while ((startPos < length) && (c == ' '))
    char c = '\u0000';
    while ((startPos < length) && ((c = valueStr.charAt(startPos)) == ' '))
    {
      c = valueStr.charAt(startPos++);
      startPos++;
    }
    if (startPos >= length)
    {
      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
      Message message =
          ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
@@ -1169,16 +1171,19 @@
    {
      // Parse until the closing quote.
      StringBuilder valueBuffer = new StringBuilder();
      while ((startPos < length) && ((c = valueStr.charAt(startPos++)) != '\''))
      startPos++;
      while ((startPos < length) && ((c = valueStr.charAt(startPos)) != '\''))
      {
        valueBuffer.append(c);
        startPos++;
      }
      startPos++;
      valueList.add(valueBuffer.toString());
    }
    else if (c == '(')
    {
      startPos++;
      // We're expecting a list of values. Quoted, space separated.
      while (true)
      {
        // Skip over any leading spaces;
@@ -1195,7 +1200,6 @@
                                       message);
        }
        if (c == ')')
        {
          // This is the end of the list.
@@ -1206,14 +1210,46 @@
        {
          // This is an illegal character.
          Message message =
              ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR.get(valueStr, c, startPos);
              ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR.get(
                      valueStr, c, startPos);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
        else if (c == '\'')
        {
          // We have a quoted string
          StringBuilder valueBuffer = new StringBuilder();
          startPos++;
          while ((startPos < length) &&
              ((c = valueStr.charAt(startPos)) != '\''))
          {
            valueBuffer.append(c);
            startPos++;
          }
          valueList.add(valueBuffer.toString());
          startPos++;
        }
        else
        {
          // We'll recursively call this method to deal with this.
          startPos = readExtraParameterValues(valueStr, valueList, startPos);
          //Consider unquoted string
          StringBuilder valueBuffer = new StringBuilder();
          while ((startPos < length) &&
              ((c = valueStr.charAt(startPos)) != ' '))
          {
            valueBuffer.append(c);
            startPos++;
          }
          valueList.add(valueBuffer.toString());
        }
        if (startPos >= length)
        {
          Message message =
              ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
          throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                       message);
        }
      }
    }
@@ -1221,16 +1257,15 @@
    {
      // Parse until the next space.
      StringBuilder valueBuffer = new StringBuilder();
      while ((startPos < length) && ((c = valueStr.charAt(startPos++)) != ' '))
      while ((startPos < length) && ((c = valueStr.charAt(startPos)) != ' '))
      {
        valueBuffer.append(c);
        startPos++;
      }
      valueList.add(valueBuffer.toString());
    }
    // Skip over any trailing spaces.
    while ((startPos < length) && (valueStr.charAt(startPos) == ' '))
    {
@@ -1239,17 +1274,16 @@
    if (startPos >= length)
    {
      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
      Message message =
          ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
      throw new DirectoryException(
              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
    }
    return startPos;
  }
  /**
   * {@inheritDoc}
   */
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2006-2010 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.schema;
@@ -83,6 +84,19 @@
          true},
        {"(1.2.8.5 NAME 'testtype' DESC 'full type')",
              true},
        {"(1.2.8.5 NAME 'testType' DESC 'full type' EQUALITY caseIgnoreMatch " +
          " SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)",
              true},
        {"(1.2.8.5 NAME 'testType' DESC 'full type' EQUALITY caseIgnoreMatch " +
          " SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'test' )",
              true},
        {"(1.2.8.5 NAME 'testType' DESC 'full type' EQUALITY caseIgnoreMatch " +
          " SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'test')",
              true},
        {"(1.2.8.5 NAME 'testType' DESC 'full type' EQUALITY caseIgnoreMatch " +
          " SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'test' " +
          " X-SCHEMA-FILE '33-test.ldif' )",
              true},
        {"(1.2.8.5 USAGE directoryOperation )",
              true},
        {"(1.2.8.5 NAME 'testtype' DESC 'full type' OBSOLETE SUP cn " +
@@ -109,6 +123,11 @@
          " SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE" +
          " NO-USER-MODIFICATION USAGE userApplications )",
          false}, // NO-USER-MODIFICATION can't have non-operational usage
        {"(1.2.8.5 NAME 'testType' DESC 'full type' EQUALITY caseIgnoreMatch " +
          " SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'test' " +
          " X-SCHEMA-FILE '33-test.ldif' X-NAME )",
          false}, // X-NAME is invalid extension (no value)
    };
  }
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/LDAPSyntaxTest.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 */
package org.opends.server.schema;
@@ -113,6 +114,15 @@
                    "X-name ('this' 'is' 'a' 'test') X-name-a 'this' X-name-b ('this'))",
                    true},
              {"( 2.5.4.3 DESC 'full syntax description' " +
                    "X-name ('this' 'is' 'a' 'test') X-name-a 'this' X-name-b ( 'this' ))",
                    true},
              {"( 2.5.4.3 DESC 'full syntax description' " +
                    "X-name ('this' 'is' 'a' 'test') X-name-a 'this' X-name-b ('this' 'that'))",
                    true},
              {"( 2.5.4.3 DESC 'full syntax description' " +
                    "X-name ('this' 'is' 'a' 'test') X-name-a 'this' X-name-b ('this' 'that') )",
                    true},
              {"( 2.5.4.3 DESC 'full syntax description' " +
                    "X-a-_eN_- ('this' 'is' 'a' 'test'))",
                    true},
              {"( 2.5.4.3 DESC 'full syntax description' " +
@@ -126,6 +136,18 @@
                    true},
              {"( 2.5.4.3 DESC 'full syntax description' )", true},
              {"   (    2.5.4.3    DESC  ' syntax description'    )", true},
              {"( 2.5.4.3 DESC 'Test syntax' X-SCHEMA-FILE '00-core.ldif' )", true},
              {"( 2.5.4.3 DESC 'Test X-SUBST Extensions' X-SUBST '1.3.6.1.4.1.1466.115.121.1.15' )", true},
              {"( 2.5.4.3 DESC 'Test X-SUBST Extensions' X-SUBST '1.3.6.1.4.1.1466.115.121.1.15' X-SCHEMA-FILE '00-core.ldif' )", true},
              {"( 2.5.4.3 DESC 'Test X-SUBST Extensions' X-SCHEMA-FILE '00-core.ldif' X-SUBST '1.3.6.1.4.1.1466.115.121.1.15' )", true},
              {"( 2.5.4.3 DESC 'Test X-PATTERN Extensions' X-PATTERN '[0-9]+' )", true},
              {"( 2.5.4.3 DESC 'Test X-PATTERN Extensions' X-PATTERN '[0-9]+' X-SCHEMA-FILE '00-core.ldif' )", true},
              {"( 2.5.4.3 DESC 'Test X-ENUM Extensions' X-ENUM ( 'black' 'white' ) )", true},
              {"( 2.5.4.3 DESC 'Test X-ENUM Extensions' X-ENUM ( 'white' 'white' ) )", false},
              {"( 2.5.4.3 DESC 'Test X-ENUM Extensions' X-ENUM ( ) )", false},
              {"( 2.5.4.3 DESC 'Test X-ENUM Extensions' X-ENUM )", false},
              {"( 2.5.4.3 DESC 'Test X-ENUM Extensions' X-ENUM ( 'black' 'white' ) X-SCHEMA-FILE '00-core.ldif' )", true},
              {"( 2.5.4.3 DESC 'Test Too many Extensions' X-PATTERN '[0-9]+' X-SUBST '1.3.6.1.4.1.1466.115.121.1.15' )", false},
              {"( 2.5.4.3 DESC syntax description )", false},
              {"($%^*&!@ DESC 'syntax description' )", false},
              {"(temp-oid DESC 'syntax description' )", true},