diff --git a/ldif/ldif-core/src/main/java/org/springframework/ldap/ldif/support/DefaultAttributeValidationPolicy.java b/ldif/ldif-core/src/main/java/org/springframework/ldap/ldif/support/DefaultAttributeValidationPolicy.java index b43f2336cb..783111a1c8 100644 --- a/ldif/ldif-core/src/main/java/org/springframework/ldap/ldif/support/DefaultAttributeValidationPolicy.java +++ b/ldif/ldif-core/src/main/java/org/springframework/ldap/ldif/support/DefaultAttributeValidationPolicy.java @@ -120,6 +120,11 @@ public class DefaultAttributeValidationPolicy implements AttributeValidationPoli private static final String BASE64_STRING = "(" + BASE64_CHAR + "*)"; + //UTF8 Definitions + private static final String UTF8_CHAR = "[\\p{L}|[0-9]|\\s]"; // \p{L} for any kind of letter from any language, including spaces and digits + + private static final String UTF8_STRING = "(" + UTF8_CHAR + "+)"; + //URL Components private static final String USER = "[" + UCHAR + "\\x3B\\x3F\\x26\\x3D]*"; //UCHAR|;|?|&|= @@ -242,13 +247,17 @@ public class DefaultAttributeValidationPolicy implements AttributeValidationPoli private static final String URL_ATTRIBUTE_EXPRESSION = "^" + ATTRIBUTE_DESCRIPTION + ATTRIBUTE_SEPARATOR + URL_INDICATOR + FILL + URL + "$"; //URL + private static final String UTF8_ATTRIBUTE_EXPRESSION = "^" + ATTRIBUTE_DESCRIPTION + ATTRIBUTE_SEPARATOR + FILL + UTF8_STRING; + //Pattern Declarations private static final Pattern ATTRIBUTE_PATTERN = Pattern.compile(ATTRIBUTE_EXPRESSION); private static final Pattern BASE64_ATTRIBUTE_PATTERN = Pattern.compile(BASE64_ATTRIBUTE_EXPRESSION); private static final Pattern URL_ATTRIBUTE_PATTERN = Pattern.compile(URL_ATTRIBUTE_EXPRESSION); - + + private static final Pattern UTF8_ATTRIBUTE_PATTERN = Pattern.compile(UTF8_ATTRIBUTE_EXPRESSION); + private boolean ordered = false; /** @@ -279,11 +288,12 @@ public void setOrdered(boolean ordered) { /** * Validates attribute contained in the buffer and returns an LdapAttribute. *
- * Ensures attributes meets one of three prescribed patterns for valid attributes: + * Ensures attributes meets one of four prescribed patterns for valid attributes: *
* Upon success an LdapAttribute object is returned.
@@ -314,6 +324,12 @@ public Attribute parse(String buffer) {
return parseUrlAttribute(matcher);
}
+ matcher = UTF8_ATTRIBUTE_PATTERN.matcher(buffer);
+ if (matcher.matches()) {
+ //Is a UTF8 attribute...
+ return parseUtf8Attribute(matcher);
+ }
+
//default: no match.
throw new InvalidAttributeFormatException("Not a valid attribute: [" + buffer + "]");
}
@@ -363,5 +379,16 @@ private LdapAttribute parseUrlAttribute(Matcher matcher) {
throw new InvalidAttributeFormatException(e);
}
}
-
+
+ private LdapAttribute parseUtf8Attribute(Matcher matcher) {
+ String id = matcher.group(1);
+ String value = matcher.group(3);
+ List