From c25f801de39b40712889d951bf4fd771e970971c Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Wed, 7 Dec 2011 11:45:51 -0800 Subject: [PATCH] listPublicIpAddresses: don't return project resources when no projectId is passed in --- .../cloud/server/ManagementServerImpl.java | 39 +++++++++++++------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index d3b0bffa455..3f3cbe549f5 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -1865,19 +1865,23 @@ public class ManagementServerImpl implements ManagementServer { } //set project information + boolean skipProjectIps = true; if (projectId != null) { - permittedAccounts.clear(); - Project project = _projectMgr.getProject(projectId); - if (project == null) { - throw new InvalidParameterValueException("Unable to find project by id " + projectId); - } - if (!_projectMgr.canAccessProjectAccount(caller, project.getProjectAccountId())) { - throw new InvalidParameterValueException("Account " + caller + " can't access project id=" + projectId); - } - permittedAccounts.add(project.getProjectAccountId()); - } else if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL){ - permittedAccounts.addAll(_projectMgr.listPermittedProjectAccounts(caller.getId())); - } + if (projectId == -1) { + permittedAccounts.addAll(_projectMgr.listPermittedProjectAccounts(caller.getId())); + } else { + permittedAccounts.clear(); + Project project = _projectMgr.getProject(projectId); + if (project == null) { + throw new InvalidParameterValueException("Unable to find project by id " + projectId); + } + if (!_projectMgr.canAccessProjectAccount(caller, project.getProjectAccountId())) { + throw new InvalidParameterValueException("Account " + caller + " can't access project id=" + projectId); + } + permittedAccounts.add(project.getProjectAccountId()); + } + skipProjectIps = false; + } if (permittedAccounts.isEmpty() && keyword != null) { Account userAccount = _accountDao.findActiveAccount((String) keyword, domainId); @@ -1916,6 +1920,12 @@ public class ManagementServerImpl implements ManagementServer { sb.join("domainSearch", domainSearch, sb.entity().getAllocatedInDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER); } + if (skipProjectIps) { + SearchBuilder accountSearch = _accountDao.createSearchBuilder(); + accountSearch.and("type", accountSearch.entity().getType(), SearchCriteria.Op.NEQ); + sb.join("accountSearch", accountSearch, sb.entity().getAllocatedToAccountId(), accountSearch.entity().getId(), JoinBuilder.JoinType.INNER); + } + if (forLoadBalancing != null && (Boolean)forLoadBalancing) { SearchBuilder lbSearch = _loadbalancerDao.createSearchBuilder(); sb.join("lbSearch", lbSearch, sb.entity().getId(), lbSearch.entity().getSourceIpAddressId(), JoinType.INNER); @@ -1949,6 +1959,11 @@ public class ManagementServerImpl implements ManagementServer { } SearchCriteria sc = sb.create(); + + if (skipProjectIps) { + sc.setJoinParameters("accountSearch", "type", Account.ACCOUNT_TYPE_PROJECT); + } + if (!permittedAccounts.isEmpty()) { sc.setParameters("accountIdIN", permittedAccounts.toArray()); } else if (domainId != null) {