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