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 <[email protected]>
---
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 <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches