Juan Hernandez has uploaded a new change for review. Change subject: core: Use map for LDAP query parameters ......................................................................
core: Use map for LDAP query parameters Currently we format LDAP filters and distinguished names using the String.format() method and custom formatter classes for cases where parameters are arrays containing multiple values. This is difficult to externalize and make configurable and leads to the creation of different classes for different LDAP providers. In preparation for further changes that will hopefull simplify the LDAP code this patch replaces the String.format() with a simple but flexible templating mechanism. For example, the mechanism that we currently use to generate a query for a set Active Directory users can be replaced by a template like this: (| <% for (id in ids) { %> (objectGUID=${id}) <% } %> ) Once these templates are in place it will be easier (in later patches) to extract them out of the code and make them configurable. Change-Id: I5c5e1c67d9635ff9fbac9c1bf681105be0338354 Signed-off-by: Juan Hernandez <juan.hernan...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/GroupsDNQueryGenerator.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapAuthenticateUserCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapGetAdGroupByGroupIdCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapGetAdUserByUserIdCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapGetAdUserByUserNameCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryData.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryDataImpl.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryExecutionFormatterBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryMetadataFactoryImpl.java D backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/MultipleLdapQueryExecutionFormatter.java D backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSMultipleLdapQueryExecutionFormatter.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSSimpleLdapQueryExecutionFormatter.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSUPNLdapQueryExecutionFormatter.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/SearchQueryFotmatter.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/SimpleLdapQueryExecutionFormatter.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/UsersObjectGuidQueryGenerator.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/LdapSearchQueryTestBase.java 18 files changed, 208 insertions(+), 212 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/55/14655/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 6e2e836..a9e0035 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 @@ -195,7 +195,7 @@ LdapQueryData ldapQueryData = new LdapQueryDataImpl(); ldapQueryData.setLdapQueryType(ldapQueryType); ldapQueryData.setDomain(data.getDomain()); - ldapQueryData.setFilterParameters(new Object[] { data.getQueryForAdBroker() }); + ldapQueryData.setName(data.getQueryForAdBroker()); LdapReturnValueBase returnValue = getLdapFactory(data.getDomain()).RunAdAction(adActionType, diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/GroupsDNQueryGenerator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/GroupsDNQueryGenerator.java index 5d109e0..cc2cfd5 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/GroupsDNQueryGenerator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/GroupsDNQueryGenerator.java @@ -21,10 +21,10 @@ for (String groupIdentifier : ldapIdentifiers) { LdapQueryData queryData = new LdapQueryDataImpl(); groupIdentifier = LdapBrokerUtils.hadleNameEscaping(groupIdentifier); - queryData.setBaseDNParameters(new Object[] { groupIdentifier }); + queryData.setName(groupIdentifier); queryData.setDomain(LdapBrokerUtils.getGroupDomain(groupIdentifier)); String groupName = groupIdentifier.split(",", 2)[0].split("=")[1]; - queryData.setFilterParameters(new Object[] { groupName }); + queryData.setName(groupName); queryData.setLdapQueryType(LdapQueryType.getGroupByDN); results.add(queryData); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapAuthenticateUserCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapAuthenticateUserCommand.java index a4fbf6b..71f41ab 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapAuthenticateUserCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapAuthenticateUserCommand.java @@ -30,7 +30,7 @@ String[] loginNameParts = getLoginName().split("@"); String principalName = constructPrincipalName(loginNameParts[0], loginNameParts[1]); String domain = loginNameParts[1].toLowerCase(); - queryData.setFilterParameters(new Object[] { principalName }); + queryData.setName(principalName); queryData.setDomain(domain); setDomain(domain); setAuthenticationDomain(domain); @@ -39,7 +39,7 @@ setAuthenticationDomain(getDomain()); queryData.setDomain(getDomain()); queryData.setLdapQueryType(LdapQueryType.getUserByName); - queryData.setFilterParameters(new Object[] { getLoginName() }); + queryData.setName(getLoginName()); } Object searchResult = directorySearcher.FindOne(queryData); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapGetAdGroupByGroupIdCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapGetAdGroupByGroupIdCommand.java index 5f53c2b..e28b592 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapGetAdGroupByGroupIdCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapGetAdGroupByGroupIdCommand.java @@ -23,7 +23,7 @@ Object group = null; LdapQueryData queryData = new LdapQueryDataImpl(); - queryData.setFilterParameters(new Object[] { getGroupId() }); + queryData.setId(getGroupId()); queryData.setLdapQueryType(LdapQueryType.getGroupByGuid); queryData.setDomain(getDomain()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapGetAdUserByUserIdCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapGetAdUserByUserIdCommand.java index bdec7fa..bc22569 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapGetAdUserByUserIdCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapGetAdUserByUserIdCommand.java @@ -23,7 +23,7 @@ LdapUser user; LdapQueryData queryData = new LdapQueryDataImpl(); - queryData.setFilterParameters(new Object[] { getUserId() }); + queryData.setId(getUserId()); queryData.setLdapQueryType(LdapQueryType.getUserByGuid); queryData.setDomain(getDomain()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapGetAdUserByUserNameCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapGetAdUserByUserNameCommand.java index 38d8eda..2795a42 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapGetAdUserByUserNameCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapGetAdUserByUserNameCommand.java @@ -19,7 +19,7 @@ protected void executeQuery(DirectorySearcher directorySearcher) { LdapQueryData queryData = new LdapQueryDataImpl(); queryData.setDomain(getDomain()); - queryData.setFilterParameters(new Object[] { getUserName().split("[@]", -1)[0] }); + queryData.setName(getUserName().split("[@]", -1)[0]); queryData.setLdapQueryType(LdapQueryType.getUserByName); Object searchResult = directorySearcher.FindOne(queryData); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryData.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryData.java index a9acaf1..92e8f5f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryData.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryData.java @@ -1,21 +1,26 @@ package org.ovirt.engine.core.bll.adbroker; +import java.util.List; +import java.util.Map; + +import org.ovirt.engine.core.compat.Guid; + public interface LdapQueryData { public LdapQueryType getLdapQueryType(); public void setLdapQueryType(LdapQueryType ldapQueryType); - public void setFilterParameters(Object[] filterParameters); + public Map<String, Object> getParameters(); - public Object[] getFilterParameters(); - - public void setBaseDNParameters(Object[] baseDNParameters); - - public Object[] getBaseDNParameters(); + public void setDomain(String domain); public String getDomain(); - public void setDomain(String domain); + public void setName(String name); + + public void setId(Guid id); + + public void setIds(List<Guid> ids); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryDataImpl.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryDataImpl.java index 502d142..5b07a8a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryDataImpl.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryDataImpl.java @@ -1,11 +1,20 @@ package org.ovirt.engine.core.bll.adbroker; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.ovirt.engine.core.compat.Guid; + public class LdapQueryDataImpl implements LdapQueryData { + // Names for well known parameters: + private static final String DOMAIN = "domain"; + private static final String NAME = "name"; + private static final String ID = "id"; + private static final String IDS = "ids"; private LdapQueryType ldapQueryType; - private Object[] filterParameters; - private Object[] baseDNParameters; - private String domain; + private Map<String, Object> parameters = new HashMap<String, Object>(2); @Override public LdapQueryType getLdapQueryType() { @@ -18,33 +27,32 @@ } @Override - public void setFilterParameters(Object[] filterParameters) { - this.filterParameters = filterParameters; - } - - @Override - public Object[] getFilterParameters() { - return filterParameters; - } - - @Override - public void setBaseDNParameters(Object[] baseDNParameters) { - this.baseDNParameters = baseDNParameters; - } - - @Override - public Object[] getBaseDNParameters() { - return baseDNParameters; - } - - @Override - public String getDomain() { - return domain; + public Map<String, Object> getParameters() { + return parameters; } @Override public void setDomain(String domain) { - this.domain = domain; + parameters.put(DOMAIN, domain); } + @Override + public String getDomain() { + return (String) parameters.get(DOMAIN); + } + + @Override + public void setName(String name) { + parameters.put(NAME, name); + } + + @Override + public void setId(Guid id) { + parameters.put(ID, id); + } + + @Override + public void setIds(List<Guid> ids) { + parameters.put(IDS, ids); + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryExecutionFormatterBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryExecutionFormatterBase.java index 91397c5..2c33c80 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryExecutionFormatterBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryExecutionFormatterBase.java @@ -1,5 +1,8 @@ package org.ovirt.engine.core.bll.adbroker; +import java.util.HashMap; +import java.util.Map; + import org.ovirt.engine.core.compat.Guid; public abstract class LdapQueryExecutionFormatterBase implements LdapQueryFormatter<LdapQueryExecution> { @@ -9,20 +12,20 @@ protected abstract String getDisplayFilter(LdapQueryMetadata queryMetadata); - protected Object[] getEncodedParameters(Object[] parameters, LdapGuidEncoder LdapGuidEncoder) { + protected Map<String, Object> getEncodedParameters(Map<String, Object> parameters, LdapGuidEncoder LdapGuidEncoder) { if (parameters == null) { return null; } - Object[] retVal = parameters.clone(); + Map<String, Object> retVal = new HashMap<String, Object>(parameters.size()); - int index = 0; - - for (Object parameter : parameters) { - if (parameter instanceof Guid) { - retVal[index] = LdapGuidEncoder.encodeGuid((Guid) parameter); + for (Map.Entry<String, Object> entry : parameters.entrySet()) { + String name = entry.getKey(); + Object value = entry.getValue(); + if (value instanceof Guid) { + value = LdapGuidEncoder.encodeGuid((Guid) value); } - index++; + retVal.put(name, value); } return retVal; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryMetadataFactoryImpl.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryMetadataFactoryImpl.java index e24fe1b..9c60c0c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryMetadataFactoryImpl.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapQueryMetadataFactoryImpl.java @@ -56,7 +56,7 @@ // 2. Base DN expression // 3. The context mapper // 4. The list of attributes we want the query to return from the ldap provider - // 5. The formatter - it formats the query (we currently have simple one, multiple (for queries like (|(...)(...))) and one for SearchBackend purposes + // 5. The formatter - it formats the query and one for SearchBackend purposes // 6. The GUID encoder - sometimes we need to convert the binary data to string (in AD for example), or just toString (in IPA) private static Map<LdapQueryType, LdapQueryMetadata> setGeneralProviderMap() { @@ -77,14 +77,14 @@ adHashMap.put(LdapQueryType.getGroupByDN, new LdapQueryMetadataImpl( "(cn=*)", - "%1$s", + "${name}", new ADGroupContextMapper(), SearchControls.OBJECT_SCOPE, ADGroupContextMapper.GROUP_ATTRIBUTE_FILTER, new SimpleLdapQueryExecutionFormatter(), new ADLdapGuidEncoder())); adHashMap.put(LdapQueryType.getUserByGuid, new LdapQueryMetadataImpl( - "(objectGUID=%1$s)", + "(objectGUID=${id})", "", new ADUserContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -92,7 +92,7 @@ new SimpleLdapQueryExecutionFormatter(), new ADLdapGuidEncoder())); adHashMap.put(LdapQueryType.getGroupByGuid, new LdapQueryMetadataImpl( - "(objectGUID=%1$s)", + "(objectGUID=${id})", "", new ADGroupContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -100,7 +100,7 @@ new SimpleLdapQueryExecutionFormatter(), new ADLdapGuidEncoder())); adHashMap.put(LdapQueryType.getGroupByName, new LdapQueryMetadataImpl( - "(&(ObjectCategory=Group)(name=%1$s))", + "(&(ObjectCategory=Group)(name=${name}))", "", new ADGroupContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -108,7 +108,7 @@ new SimpleLdapQueryExecutionFormatter(), new ADLdapGuidEncoder())); adHashMap.put(LdapQueryType.getUserByPrincipalName, new LdapQueryMetadataImpl( - "(&(sAMAccountType=805306368)(userPrincipalName=%1$s))", + "(&(sAMAccountType=805306368)(userPrincipalName=${name}))", "", new ADUserContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -116,7 +116,7 @@ new SimpleLdapQueryExecutionFormatter(), new ADLdapGuidEncoder())); adHashMap.put(LdapQueryType.getUserByName, new LdapQueryMetadataImpl( - "(&(sAMAccountType=805306368)(sAMAccountName=%1$s))", + "(&(sAMAccountType=805306368)(sAMAccountName=${name}))", "", new ADUserContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -132,20 +132,31 @@ new SimpleLdapQueryExecutionFormatter(), new ADLdapGuidEncoder())); adHashMap.put(LdapQueryType.getGroupsByGroupNames, new LdapQueryMetadataImpl( - "(&(ObjectCategory=Group)(name=%1$s))", + "(&" + + "(ObjectCategory=Group)" + + "(|" + + "<% for (name in names) { %>" + + "(name=${name})" + + "<% } %>" + + ")" + + ")", "", new ADGroupContextMapper(), SearchControls.SUBTREE_SCOPE, ADGroupContextMapper.GROUP_ATTRIBUTE_FILTER, - new MultipleLdapQueryExecutionFormatter("(|", ")"), + new SimpleLdapQueryExecutionFormatter(), new ADLdapGuidEncoder())); adHashMap.put(LdapQueryType.getUsersByUserGuids, new LdapQueryMetadataImpl( - "(objectGUID=%1$s)", + "(|" + + "<% for (id in ids) { %>" + + "(objectGUID=${id})" + + "<% } %>" + + ")", "", new ADUserContextMapper(), SearchControls.SUBTREE_SCOPE, ADUserContextMapper.USERS_ATTRIBUTE_FILTER, - new MultipleLdapQueryExecutionFormatter("(|", ")"), + new SimpleLdapQueryExecutionFormatter(), new ADLdapGuidEncoder())); LdapQueryMetadataImpl searchUsersMetadata = @@ -174,14 +185,14 @@ HashMap<LdapQueryType, LdapQueryMetadata> ipaHashMap = new HashMap<LdapQueryType, LdapQueryMetadata>(); ipaHashMap.put(LdapQueryType.getGroupByDN, new LdapQueryMetadataImpl( "(cn=*)", - "%1$s", + "${name}", new IPAGroupContextMapper(), SearchControls.OBJECT_SCOPE, IPAGroupContextMapper.GROUP_ATTRIBUTE_FILTER, new SimpleLdapQueryExecutionFormatter(), new IPALdapGuidEncoder())); ipaHashMap.put(LdapQueryType.getGroupByGuid, new LdapQueryMetadataImpl( - "(ipaUniqueID=%1$s)", + "(ipaUniqueID=${id})", "", new IPAGroupContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -189,7 +200,7 @@ new SimpleLdapQueryExecutionFormatter(), new IPALdapGuidEncoder())); ipaHashMap.put(LdapQueryType.getUserByGuid, new LdapQueryMetadataImpl( - "(ipaUniqueID=%1$s)", + "(ipaUniqueID=${id})", "", new IPAUserContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -197,7 +208,7 @@ new SimpleLdapQueryExecutionFormatter(), new IPALdapGuidEncoder())); ipaHashMap.put(LdapQueryType.getGroupByName, new LdapQueryMetadataImpl( - "(&(objectClass=ipaUserGroup)(cn=%1$s))", + "(&(objectClass=ipaUserGroup)(cn=${name}))", "", new IPAGroupContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -205,7 +216,7 @@ new SimpleLdapQueryExecutionFormatter(), new IPALdapGuidEncoder())); ipaHashMap.put(LdapQueryType.getUserByPrincipalName, new LdapQueryMetadataImpl( - "(&(objectClass=krbPrincipalAux)(krbPrincipalName=%1$s))", + "(&(objectClass=krbPrincipalAux)(krbPrincipalName=${name}))", "", new IPAUserContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -213,7 +224,7 @@ new SimpleLdapQueryExecutionFormatter(), new IPALdapGuidEncoder())); ipaHashMap.put(LdapQueryType.getUserByName, new LdapQueryMetadataImpl( - "(&(objectClass=posixAccount)(objectClass=krbPrincipalAux)(uid=%1$s))", + "(&(objectClass=posixAccount)(objectClass=krbPrincipalAux)(uid=${name}))", "", new IPAUserContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -229,20 +240,31 @@ new SimpleLdapQueryExecutionFormatter(), new IPALdapGuidEncoder())); ipaHashMap.put(LdapQueryType.getGroupsByGroupNames, new LdapQueryMetadataImpl( - "(&(objectClass=ipaUserGroup)(cn=%1$s))", + "(&" + + "(objectClass=ipaUserGroup)" + + "(|" + + "<% for (name in names) { %>" + + "(cn=${name})" + + "<% } %>" + + ")" + + ")", "", new IPAGroupContextMapper(), SearchControls.SUBTREE_SCOPE, IPAGroupContextMapper.GROUP_ATTRIBUTE_FILTER, - new MultipleLdapQueryExecutionFormatter("(|", ")"), + new SimpleLdapQueryExecutionFormatter(), new IPALdapGuidEncoder())); ipaHashMap.put(LdapQueryType.getUsersByUserGuids, new LdapQueryMetadataImpl( - "(ipaUniqueID=%1$s)", + "(|" + + "<% for (id in ids) { %>" + + "(ipaUniqueID=${id})" + + "<% } %>" + + ")", "", new IPAUserContextMapper(), SearchControls.SUBTREE_SCOPE, IPAUserContextMapper.USERS_ATTRIBUTE_FILTER, - new MultipleLdapQueryExecutionFormatter("(|", ")"), + new SimpleLdapQueryExecutionFormatter(), new IPALdapGuidEncoder())); LdapQueryMetadataImpl ipaSearchUsersMetadata = new LdapQueryMetadataImpl( "this string is replaced by user input meta-query", @@ -272,14 +294,14 @@ HashMap<LdapQueryType, LdapQueryMetadata> dsHashMap = new HashMap<LdapQueryType, LdapQueryMetadata>(); dsHashMap.put(LdapQueryType.getGroupByDN, new LdapQueryMetadataImpl( "(cn=*)", - "%1$s", + "${name}", new RHDSGroupContextMapper(), SearchControls.OBJECT_SCOPE, RHDSGroupContextMapper.GROUP_ATTRIBUTE_FILTER, new RHDSSimpleLdapQueryExecutionFormatter(), new RHDSLdapGuidEncoder())); dsHashMap.put(LdapQueryType.getGroupByGuid, new LdapQueryMetadataImpl( - "(nsuniqueid=%1$s)", + "(nsuniqueid=${id})", "", new RHDSGroupContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -287,7 +309,7 @@ new RHDSSimpleLdapQueryExecutionFormatter(), new RHDSLdapGuidEncoder())); dsHashMap.put(LdapQueryType.getUserByGuid, new LdapQueryMetadataImpl( - "(nsuniqueid=%1$s)", + "(nsuniqueid=${id})", "", new RHDSUserContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -295,7 +317,7 @@ new RHDSSimpleLdapQueryExecutionFormatter(), new RHDSLdapGuidEncoder())); dsHashMap.put(LdapQueryType.getGroupByName, new LdapQueryMetadataImpl( - "(&(objectClass=groupofuniquenames)(cn=%1$s))", + "(&(objectClass=groupofuniquenames)(cn=${name}))", "", new RHDSGroupContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -303,7 +325,7 @@ new RHDSSimpleLdapQueryExecutionFormatter(), new RHDSLdapGuidEncoder())); dsHashMap.put(LdapQueryType.getUserByName, new LdapQueryMetadataImpl( - "(&(objectClass=person)(uid=%1$s))", + "(&(objectClass=person)(uid=${name}))", "", new RHDSUserContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -313,7 +335,7 @@ // In RHDS there is no UPN, so we do the same query as getUserByName, using a formatter that will adjust the filter // to contain the user name instead of the UPN dsHashMap.put(LdapQueryType.getUserByPrincipalName, new LdapQueryMetadataImpl( - "(&(objectClass=person)(uid=%1$s))", + "(&(objectClass=person)(uid=${name}))", "", new RHDSUserContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -329,20 +351,31 @@ new RHDSSimpleLdapQueryExecutionFormatter(), new RHDSLdapGuidEncoder())); dsHashMap.put(LdapQueryType.getGroupsByGroupNames, new LdapQueryMetadataImpl( - "(&(objectClass=groupofuniquenames)(cn=%1$s))", + "(&" + + "(objectClass=groupofuniquenames)" + + "(|" + + "<% for (name in names) { %>" + + "(cn=${name})" + + "<% } %>" + + ")" + + ")", "", new RHDSGroupContextMapper(), SearchControls.SUBTREE_SCOPE, RHDSGroupContextMapper.GROUP_ATTRIBUTE_FILTER, - new RHDSMultipleLdapQueryExecutionFormatter("(|", ")"), + new RHDSSimpleLdapQueryExecutionFormatter(), new RHDSLdapGuidEncoder())); dsHashMap.put(LdapQueryType.getUsersByUserGuids, new LdapQueryMetadataImpl( - "(nsuniqueid=%1$s)", + "(|" + + "<% for (id in ids) { %>" + + "(nsuniqueid=${id})" + + "<% } %>" + + ")", "", new RHDSUserContextMapper(), SearchControls.SUBTREE_SCOPE, RHDSUserContextMapper.USERS_ATTRIBUTE_FILTER, - new RHDSMultipleLdapQueryExecutionFormatter("(|", ")"), + new RHDSSimpleLdapQueryExecutionFormatter(), new RHDSLdapGuidEncoder())); LdapQueryMetadataImpl rhdsSearchUsersMetadata = new LdapQueryMetadataImpl( "this string is replaced by user input meta-query", @@ -372,14 +405,14 @@ HashMap<LdapQueryType, LdapQueryMetadata> itdsHashMap = new HashMap<LdapQueryType, LdapQueryMetadata>(); itdsHashMap.put(LdapQueryType.getGroupByDN, new LdapQueryMetadataImpl( "(cn=*)", - "%1$s", + "${name}", new ITDSGroupContextMapper(), SearchControls.OBJECT_SCOPE, ITDSGroupContextMapper.GROUP_ATTRIBUTE_FILTER, new SimpleLdapQueryExecutionFormatter(), new ITDSLdapGuidEncoder())); itdsHashMap.put(LdapQueryType.getGroupByGuid, new LdapQueryMetadataImpl( - "(uniqueIdentifier=%1$s)", + "(uniqueIdentifier=${id})", "", new ITDSGroupContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -387,7 +420,7 @@ new SimpleLdapQueryExecutionFormatter(), new ITDSLdapGuidEncoder())); itdsHashMap.put(LdapQueryType.getUserByGuid, new LdapQueryMetadataImpl( - "(uniqueIdentifier=%1$s)", + "(uniqueIdentifier=${id})", "", new ITDSUserContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -395,7 +428,7 @@ new SimpleLdapQueryExecutionFormatter(), new ITDSLdapGuidEncoder())); itdsHashMap.put(LdapQueryType.getGroupByName, new LdapQueryMetadataImpl( - "(&(objectClass=groupofuniquenames)(cn=%1$s))", + "(&(objectClass=groupofuniquenames)(cn=${name}))", "", new ITDSGroupContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -403,7 +436,7 @@ new SimpleLdapQueryExecutionFormatter(), new ITDSLdapGuidEncoder())); itdsHashMap.put(LdapQueryType.getUserByPrincipalName, new LdapQueryMetadataImpl( - "(principalName=%1$s))", + "(principalName=${name}))", "", new ITDSUserContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -411,7 +444,7 @@ new SimpleLdapQueryExecutionFormatter(), new ITDSLdapGuidEncoder())); itdsHashMap.put(LdapQueryType.getUserByName, new LdapQueryMetadataImpl( - "(uid=%1$s))", + "(uid=${name}))", "", new ITDSUserContextMapper(), SearchControls.SUBTREE_SCOPE, @@ -427,20 +460,31 @@ new SimpleLdapQueryExecutionFormatter(), new ITDSLdapGuidEncoder())); itdsHashMap.put(LdapQueryType.getGroupsByGroupNames, new LdapQueryMetadataImpl( - "(&(objectClass=groupofuniquenames)(cn=%1$s))", + "(&" + + "(objectClass=groupofuniquenames)" + + "(|" + + "<% for (name in names) { %>" + + "(cn=${name})" + + "<% } %>" + + ")" + + ")", "", new ITDSGroupContextMapper(), SearchControls.SUBTREE_SCOPE, ITDSGroupContextMapper.GROUP_ATTRIBUTE_FILTER, - new MultipleLdapQueryExecutionFormatter("(|", ")"), + new SimpleLdapQueryExecutionFormatter(), new ITDSLdapGuidEncoder())); itdsHashMap.put(LdapQueryType.getUsersByUserGuids, new LdapQueryMetadataImpl( - "(uid=%1$s)", + "(|" + + "<% for (id in ids) { %>" + + "(uid=${id})" + + "<% } %>" + + ")", "", new ITDSUserContextMapper(), SearchControls.SUBTREE_SCOPE, ITDSUserContextMapper.USERS_ATTRIBUTE_FILTER, - new MultipleLdapQueryExecutionFormatter("(|", ")"), + new SimpleLdapQueryExecutionFormatter(), new ITDSLdapGuidEncoder())); LdapQueryMetadataImpl itdsSearchUsersMetadata = new LdapQueryMetadataImpl( "this string is replaced by user input meta-query", diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/MultipleLdapQueryExecutionFormatter.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/MultipleLdapQueryExecutionFormatter.java deleted file mode 100644 index 4241c91..0000000 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/MultipleLdapQueryExecutionFormatter.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.ovirt.engine.core.bll.adbroker; - -public class MultipleLdapQueryExecutionFormatter extends LdapQueryExecutionFormatterBase { - - private String prefix; - private String suffix; - - MultipleLdapQueryExecutionFormatter(String prefix, String suffix) { - this.prefix = prefix; - this.suffix = suffix; - } - - @Override - protected String getDisplayFilter(LdapQueryMetadata queryMetadata) { - // The display filter uses the regular parameters, because the encoded ones may not be readable - return getFilter(queryMetadata, queryMetadata.getQueryData().getFilterParameters()); - } - - @Override - public LdapQueryExecution format(LdapQueryMetadata queryMetadata) { - - String displayFilter = getDisplayFilter(queryMetadata); - - Object[] encodedFilterParameters = - getEncodedParameters(queryMetadata.getQueryData().getFilterParameters(), - queryMetadata.getLdapGuidEncoder()); - - String filter = getFilter(queryMetadata, encodedFilterParameters); - - String baseDN = - String.format(queryMetadata.getBaseDN(), - getEncodedParameters(queryMetadata.getQueryData().getBaseDNParameters(), - queryMetadata.getLdapGuidEncoder())); - - return new LdapQueryExecution(filter, - displayFilter, - baseDN, - queryMetadata.getContextMapper(), - queryMetadata.getSearchScope(), - queryMetadata.getReturningAttributes(), - queryMetadata.getQueryData().getDomain()); - } - - protected String getFilter(LdapQueryMetadata queryMetadata, Object[] filterParameters) { - StringBuilder filter = new StringBuilder(prefix); - - for (Object currObject : filterParameters) { - filter.append(String.format(queryMetadata.getFilter(), currObject)); - } - - filter.append(suffix); - - return filter.toString(); - } - - public String getPrefix() { - return prefix; - } - - public void setPrefix(String prefix) { - this.prefix = prefix; - } - - public String getSuffix() { - return suffix; - } - - public void setSuffix(String suffix) { - this.suffix = suffix; - } -} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSMultipleLdapQueryExecutionFormatter.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSMultipleLdapQueryExecutionFormatter.java deleted file mode 100644 index 2ed5631..0000000 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSMultipleLdapQueryExecutionFormatter.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.ovirt.engine.core.bll.adbroker; - -public class RHDSMultipleLdapQueryExecutionFormatter extends MultipleLdapQueryExecutionFormatter { - - RHDSMultipleLdapQueryExecutionFormatter(String prefix, String suffix) { - super(prefix, suffix); - } - - // In DS the guid is a readable String as well, but it is different then our guid, so we need to show the encoded - // parameters - @Override - protected String getDisplayFilter(LdapQueryMetadata queryMetadata) { - Object[] encodedFilterParameters = - getEncodedParameters(queryMetadata.getQueryData().getFilterParameters(), - queryMetadata.getLdapGuidEncoder()); - - return getFilter(queryMetadata, encodedFilterParameters); - } - -} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSSimpleLdapQueryExecutionFormatter.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSSimpleLdapQueryExecutionFormatter.java index d9dfdf15..5e1c81e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSSimpleLdapQueryExecutionFormatter.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSSimpleLdapQueryExecutionFormatter.java @@ -1,13 +1,28 @@ package org.ovirt.engine.core.bll.adbroker; +import org.apache.log4j.Logger; +import org.ovirt.engine.core.utils.templates.Template; +import org.ovirt.engine.core.utils.templates.TemplateCompiler; +import org.ovirt.engine.core.utils.templates.TemplateException; + public class RHDSSimpleLdapQueryExecutionFormatter extends SimpleLdapQueryExecutionFormatter { + // The log: + private static final Logger log = Logger.getLogger(RHDSSimpleLdapQueryExecutionFormatter.class); + // In DS the guid is a readable String as well, but it is different then our guid, so we need to show the encoded // parameters @Override protected String getDisplayFilter(LdapQueryMetadata queryMetadata) { - return String.format(queryMetadata.getFilter(), - getEncodedParameters(queryMetadata.getQueryData().getFilterParameters(), - queryMetadata.getLdapGuidEncoder())); + try { + Template filterTemplate = TemplateCompiler.getInstance().compile(queryMetadata.getFilter()); + return filterTemplate.eval( + getEncodedParameters(queryMetadata.getQueryData().getParameters(), + queryMetadata.getLdapGuidEncoder())); + } + catch (TemplateException exception) { + log.error("Error evaluating template.", exception); + return null; + } } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSUPNLdapQueryExecutionFormatter.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSUPNLdapQueryExecutionFormatter.java index cdb2134..89673c1 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSUPNLdapQueryExecutionFormatter.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSUPNLdapQueryExecutionFormatter.java @@ -9,7 +9,7 @@ * Put the user name instead of the UPN in the filter */ protected String getFilter(LdapQueryMetadata queryMetadata) { - String userPrincipalName = (String)queryMetadata.getQueryData().getFilterParameters()[0]; + String userPrincipalName = (String)queryMetadata.getQueryData().getParameters().get("name"); String userName = userPrincipalName.split("@")[0]; return String.format(queryMetadata.getFilter(), userName); } @@ -26,7 +26,7 @@ String baseDN = String.format(queryMetadata.getBaseDN(), - getEncodedParameters(queryMetadata.getQueryData().getBaseDNParameters(), + getEncodedParameters(queryMetadata.getQueryData().getParameters(), queryMetadata.getLdapGuidEncoder())); return new LdapQueryExecution(filter, diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/SearchQueryFotmatter.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/SearchQueryFotmatter.java index 7a3a356..928b1c4 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/SearchQueryFotmatter.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/SearchQueryFotmatter.java @@ -22,7 +22,7 @@ @Override public LdapQueryExecution format(LdapQueryMetadata queryMetadata) { - String filter = (String) queryMetadata.getQueryData().getFilterParameters()[0]; + String filter = (String) queryMetadata.getQueryData().getParameters().get("name"); for (Entry<SearchLangageLDAPTokens, String> tokenEntry : tokensToLDAPKeys.entrySet()) { filter = StringUtils.replace(filter, tokenEntry.getKey().name(), tokenEntry.getValue()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/SimpleLdapQueryExecutionFormatter.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/SimpleLdapQueryExecutionFormatter.java index 208c9c9..9dba0b5 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/SimpleLdapQueryExecutionFormatter.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/SimpleLdapQueryExecutionFormatter.java @@ -1,31 +1,45 @@ package org.ovirt.engine.core.bll.adbroker; +import org.apache.log4j.Logger; +import org.ovirt.engine.core.utils.templates.Template; +import org.ovirt.engine.core.utils.templates.TemplateCompiler; +import org.ovirt.engine.core.utils.templates.TemplateException; + public class SimpleLdapQueryExecutionFormatter extends LdapQueryExecutionFormatterBase { + // The log: + private static final Logger log = Logger.getLogger(SimpleLdapQueryExecutionFormatter.class); @Override protected String getDisplayFilter(LdapQueryMetadata queryMetadata) { - return String.format(queryMetadata.getFilter(), queryMetadata.getQueryData().getFilterParameters()); + return String.format(queryMetadata.getFilter(), queryMetadata.getQueryData().getParameters()); } @Override public LdapQueryExecution format(LdapQueryMetadata queryMetadata) { + try { + Template filterTemplate = TemplateCompiler.getInstance().compile(queryMetadata.getFilter()); + String filter = + filterTemplate.eval( + getEncodedParameters(queryMetadata.getQueryData().getParameters(), + queryMetadata.getLdapGuidEncoder())); + Template baseDNTemplate = TemplateCompiler.getInstance().compile(queryMetadata.getBaseDN()); + String baseDN = + baseDNTemplate.eval( + getEncodedParameters(queryMetadata.getQueryData().getParameters(), + queryMetadata.getLdapGuidEncoder())); - String filter = - String.format(queryMetadata.getFilter(), - getEncodedParameters(queryMetadata.getQueryData().getFilterParameters(), - queryMetadata.getLdapGuidEncoder())); + return new LdapQueryExecution(filter, + getDisplayFilter(queryMetadata), + baseDN, + queryMetadata.getContextMapper(), + queryMetadata.getSearchScope(), + queryMetadata.getReturningAttributes(), + queryMetadata.getQueryData().getDomain()); + } + catch (TemplateException exception) { + log.error("Error while evaluating template.", exception); + return null; + } - String baseDN = - String.format(queryMetadata.getBaseDN(), - getEncodedParameters(queryMetadata.getQueryData().getBaseDNParameters(), - queryMetadata.getLdapGuidEncoder())); - - return new LdapQueryExecution(filter, - getDisplayFilter(queryMetadata), - baseDN, - queryMetadata.getContextMapper(), - queryMetadata.getSearchScope(), - queryMetadata.getReturningAttributes(), - queryMetadata.getQueryData().getDomain()); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/UsersObjectGuidQueryGenerator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/UsersObjectGuidQueryGenerator.java index 0143490..9e02384 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/UsersObjectGuidQueryGenerator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/UsersObjectGuidQueryGenerator.java @@ -21,7 +21,7 @@ List<LdapQueryData> results = new ArrayList<LdapQueryData>(); LdapQueryData subQueryData = new LdapQueryDataImpl(); - ArrayList<Object> filterParameters = new ArrayList<Object>(); + List<Guid> filterParameters = new ArrayList<Guid>(); int counter = 0; for (Guid identifier : ldapIdentifiers) { @@ -31,22 +31,20 @@ if (counter >= queryLimit) { // More than queryLimit query clauses were added to the query - // close the query, add it to the results, and start a new query - subQueryData.setFilterParameters(filterParameters.toArray()); + subQueryData.setIds(filterParameters); subQueryData.setLdapQueryType(LdapQueryType.getUsersByUserGuids); - subQueryData.setBaseDNParameters(null); subQueryData.setDomain(domain); results.add(subQueryData); subQueryData = new LdapQueryDataImpl(); - filterParameters = new ArrayList<Object>(); + filterParameters.clear(); counter = 0; } counter++; } if (!filterParameters.isEmpty()) { - subQueryData.setFilterParameters(filterParameters.toArray()); + subQueryData.setIds(filterParameters); subQueryData.setLdapQueryType(LdapQueryType.getUsersByUserGuids); - subQueryData.setBaseDNParameters(null); subQueryData.setDomain(domain); results.add(subQueryData); } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/LdapSearchQueryTestBase.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/LdapSearchQueryTestBase.java index d4b5105..7862ddb 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/LdapSearchQueryTestBase.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/LdapSearchQueryTestBase.java @@ -115,8 +115,8 @@ return false; } LdapSearchByQueryParameters ldapParams = (LdapSearchByQueryParameters) argument; - return ldapParams.getLdapQueryData().getFilterParameters().length == 1 && - ((String) ldapParams.getLdapQueryData().getFilterParameters()[0]).contains(NAME_TO_SEARCH) && + return ldapParams.getLdapQueryData().getParameters().containsKey("name") && + ((String) ldapParams.getLdapQueryData().getParameters().get("name")).contains(NAME_TO_SEARCH) && ldapParams.getLdapQueryData().getLdapQueryType().equals(getLdapActionType()) && ldapParams.getDomain().equals(DOMAIN); -- To view, visit http://gerrit.ovirt.org/14655 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5c5e1c67d9635ff9fbac9c1bf681105be0338354 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Juan Hernandez <juan.hernan...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches