This is an automated email from the ASF dual-hosted git repository.

madhan pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/atlas.git

commit 0030bc23acd1bb36462f77ba795fe42f8bda423d
Author: Ashutosh Mestry <[email protected]>
AuthorDate: Mon Apr 20 17:49:29 2020 -0700

    ATLAS-3735: CustomAttribute length validation bypass for keys with special 
prefix.
    
    (cherry picked from commit 318c645fb555b17b9fdd8c2f1b642a3065e337fc)
---
 intg/src/main/java/org/apache/atlas/AtlasConfiguration.java         | 2 ++
 .../apache/atlas/repository/store/graph/v2/EntityGraphMapper.java   | 6 ++++++
 2 files changed, 8 insertions(+)

diff --git a/intg/src/main/java/org/apache/atlas/AtlasConfiguration.java 
b/intg/src/main/java/org/apache/atlas/AtlasConfiguration.java
index 5d8776b..2c007ca 100644
--- a/intg/src/main/java/org/apache/atlas/AtlasConfiguration.java
+++ b/intg/src/main/java/org/apache/atlas/AtlasConfiguration.java
@@ -64,6 +64,8 @@ public enum AtlasConfiguration {
 
     CUSTOM_ATTRIBUTE_KEY_MAX_LENGTH("atlas.custom.attribute.key.max.length", 
50),
     
CUSTOM_ATTRIBUTE_VALUE_MAX_LENGTH("atlas.custom.attribute.value.max.length", 
500),
+    
CUSTOM_ATTRIBUTE_KEY_SPECIAL_PREFIX("atlas.custom.attribute.special.prefix", 
""),
+
     LABEL_MAX_LENGTH("atlas.entity.label.max.length", 50),
     IMPORT_TEMP_DIRECTORY("atlas.import.temp.directory", ""),
     MIGRATION_IMPORT_START_POSITION("atlas.migration.import.start.position", 
0),
diff --git 
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphMapper.java
 
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphMapper.java
index d949ed0..8c43807 100644
--- 
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphMapper.java
+++ 
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphMapper.java
@@ -119,6 +119,8 @@ public class EntityGraphMapper {
     private static final String  SOFT_REF_FORMAT                   = "%s:%s";
     private static final int     INDEXED_STR_SAFE_LEN              = 
AtlasConfiguration.GRAPHSTORE_INDEXED_STRING_SAFE_LENGTH.getInt();
     private static final boolean WARN_ON_NO_RELATIONSHIP           = 
AtlasConfiguration.RELATIONSHIP_WARN_NO_RELATIONSHIPS.getBoolean();
+    private static final String  CUSTOM_ATTRIBUTE_KEY_SPECIAL_PREFIX = 
AtlasConfiguration.CUSTOM_ATTRIBUTE_KEY_SPECIAL_PREFIX.getString();
+
     private static final String  CLASSIFICATION_NAME_DELIMITER     = "|";
     private static final Pattern CUSTOM_ATTRIBUTE_KEY_REGEX        = 
Pattern.compile("^[a-zA-Z0-9_-]*$");
     private static final Pattern LABEL_REGEX                       = 
Pattern.compile("^[a-zA-Z0-9_-]*$");
@@ -2521,6 +2523,10 @@ public class EntityGraphMapper {
                     throw new 
AtlasBaseException(AtlasErrorCode.INVALID_CUSTOM_ATTRIBUTE_KEY_CHARACTERS, key);
                 }
 
+                if 
(StringUtils.isNotEmpty(CUSTOM_ATTRIBUTE_KEY_SPECIAL_PREFIX) && 
key.startsWith(CUSTOM_ATTRIBUTE_KEY_SPECIAL_PREFIX)) {
+                    continue;
+                }
+
                 if (value.length() > CUSTOM_ATTRIBUTE_VALUE_MAX_LENGTH) {
                     throw new 
AtlasBaseException(AtlasErrorCode.INVALID_CUSTOM_ATTRIBUTE_VALUE, value, 
String.valueOf(CUSTOM_ATTRIBUTE_VALUE_MAX_LENGTH));
                 }

Reply via email to