Eli Mesika has uploaded a new change for review.

Change subject: core : Support tokens with special characters
......................................................................

core : Support tokens with special characters

Get rid of splitting search expr by [@: ] which does not support
namespaces that have a space (in dc def for example dc=My Company)

This patch gets the correct search string to be sent to the AD by:

      a. Remove ADUSER@/ADGROUP@ from the search string
      b. For each existing profile try to test if the search string
         starts with it. If so then remove 'PROFILE_NAME:' from the
         search string
      c. For existing namespaces in selected profile try to test if
         search string starts with it. If so then remove 'NAMESPACE:'
         from search string
      d. Send the query

Also this patch allows to use "#" in string values.

Change-Id: I2464227376eb2e6ee0b5ada2ced21278675b7572
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1096175
Signed-off-by: emesika <emes...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
M 
backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/BaseConditionFieldAutoCompleter.java
2 files changed, 38 insertions(+), 16 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/32/41832/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
index 344bb0d..bd3bffa 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
@@ -359,30 +359,52 @@
             // search text.
             if (!isExistsValue || IsFromYesterday) {
                 log.debug("ResourceManager::searchBusinessObjects(''{}'') - 
entered", searchText);
-                String queryAuthz = null;
+                final char AT='@';
+                String queryAuthz = getDefaultAuthz();
                 String queryNamespace = null;
                 ISyntaxChecker curSyntaxChecker;
-                String[] splitted = searchText.split("[:@ ]");
-                final String objectName = splitted[0].toUpperCase();
-                if ((SearchObjects.AD_USER_OBJ_NAME.equals(objectName))
-                        || 
(SearchObjects.AD_USER_PLU_OBJ_NAME.equals(objectName))
-                        || (SearchObjects.AD_GROUP_OBJ_NAME.equals(objectName))
-                        || 
(SearchObjects.AD_GROUP_PLU_OBJ_NAME.equals(objectName))) {
-                    if (searchText.indexOf('@') > 0 && splitted.length > 1) {
-                        queryAuthz = splitted[1];
-                        queryNamespace = splitted[2];
-                        searchText = searchText.substring(0, 
searchText.indexOf('@'))
-                                + searchText.substring(searchText.indexOf(':', 
searchText.indexOf(':') + 1));
-                    } else {
-                        queryAuthz = getDefaultAuthz();
-                        queryNamespace = null;
+                if (searchText.startsWith(SearchObjects.AD_USER_OBJ_NAME + AT) 
||
+                        
searchText.startsWith(SearchObjects.AD_USER_PLU_OBJ_NAME + AT) ||
+                        searchText.startsWith(SearchObjects.AD_GROUP_OBJ_NAME 
+ AT) ||
+                        
searchText.startsWith(SearchObjects.AD_GROUP_PLU_OBJ_NAME + AT)) {
+                    final char COLON = ':';
+                    String prefix = searchText.substring(0, 
searchText.indexOf(AT)) + COLON;
+                    searchText = 
searchText.replace(SearchObjects.AD_USER_PLU_OBJ_NAME + AT, StringUtils.EMPTY);
+                    searchText = 
searchText.replace(SearchObjects.AD_USER_OBJ_NAME + AT, StringUtils.EMPTY);
+                    searchText = 
searchText.replace(SearchObjects.AD_GROUP_PLU_OBJ_NAME + AT, StringUtils.EMPTY);
+                    searchText = 
searchText.replace(SearchObjects.AD_GROUP_OBJ_NAME + AT, StringUtils.EMPTY);
+
+                    // get profile
+                    List<String> profiles = 
getBackend().runInternalQuery(VdcQueryType.GetDomainList,
+                            new VdcQueryParametersBase()).getReturnValue();
+                    for (String profile : profiles) {
+                        if (searchText.startsWith(profile + COLON)) {
+                            queryAuthz = profile;
+                            searchText = searchText.replace(profile + COLON, 
StringUtils.EMPTY);
+                            break;
+                        }
                     }
+                    // get namespace
+                    HashMap<String, List<String>> namespacesMap =
+                            
getBackend().runInternalQuery(VdcQueryType.GetAvailableNamespaces,
+                                    new 
VdcQueryParametersBase()).getReturnValue();
+                    List<String> namespaces = namespacesMap.get(queryAuthz);
+                    for (String namespace : namespaces) {
+                        if (searchText.startsWith(namespace + COLON)) {
+                            queryNamespace = namespace;
+                            searchText = searchText.replace(namespace + COLON, 
StringUtils.EMPTY);
+                            break;
+                        }
+                    }
+                    searchText = prefix + searchText;
                     curSyntaxChecker = 
SyntaxCheckerFactory.createADSyntaxChecker(Config
                             
.<String>getValue(ConfigValues.AuthenticationMethod));
+
                 } else {
                     curSyntaxChecker = SyntaxCheckerFactory
                             
.createBackendSyntaxChecker(Config.<String>getValue(ConfigValues.AuthenticationMethod));
                 }
+
                 SyntaxContainer searchObj = 
curSyntaxChecker.analyzeSyntaxState(searchText, true);
                 // set the case-sensitive flag
                 searchObj.setCaseSensitive(getParameters().getCaseSensitive());
diff --git 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/BaseConditionFieldAutoCompleter.java
 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/BaseConditionFieldAutoCompleter.java
index 30112e6..f655479 100644
--- 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/BaseConditionFieldAutoCompleter.java
+++ 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/BaseConditionFieldAutoCompleter.java
@@ -188,7 +188,7 @@
         return sb.toString();
     }
 
-    final static Regex validChar = new Regex("^[^\\<\\>&^#!']*$");
+    final static Regex validChar = new Regex("^[^\\<\\>&^!']*$");
 
     public final static ValueValidationFunction validCharacters = new 
ValueValidationFunction() {
         @Override


-- 
To view, visit https://gerrit.ovirt.org/41832
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2464227376eb2e6ee0b5ada2ced21278675b7572
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Eli Mesika <emes...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to