diff --git a/api/src/main/java/org/apache/cloudstack/api/BaseListDomainResourcesCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseListDomainResourcesCmd.java index e9a9e5b1ed96..1440a1570e7c 100644 --- a/api/src/main/java/org/apache/cloudstack/api/BaseListDomainResourcesCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/BaseListDomainResourcesCmd.java @@ -16,7 +16,10 @@ // under the License. package org.apache.cloudstack.api; +import com.cloud.user.Account; + import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.context.CallContext; public abstract class BaseListDomainResourcesCmd extends BaseListCmd implements IBaseListDomainResourcesCmd { @@ -42,7 +45,10 @@ public boolean listAll() { @Override public boolean isRecursive() { if (listAll()) { - return recursive == null ? true : recursive; + Account caller = CallContext.current().getCallingAccount(); + if (caller.getType() != Account.Type.NORMAL) { + return recursive == null ? true : recursive; + } } return recursive == null ? false : recursive; } diff --git a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java index 457d03ff84b7..15bd922e9817 100644 --- a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java +++ b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java @@ -1200,7 +1200,7 @@ public ListResponse listKubernetesClusters(ListKubern accountManager.buildACLSearchParameters(caller, clusterId, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); Project.ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), clusterId); Filter searchFilter = new Filter(KubernetesClusterVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = kubernetesClusterDao.createSearchBuilder(); accountManager.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java index 6f239e9cc5f8..3e16ebd6b569 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -566,7 +566,7 @@ private Pair, Integer> searchForUsersInternal(ListUsersC Object keyword = cmd.getKeyword(); Long domainId = cmd.getDomainId(); - boolean recursive = cmd.isRecursive(); + boolean recursive = determineRecursiveness(cmd.isRecursive(), id); Long pageSizeVal = cmd.getPageSizeVal(); Long startIndex = cmd.getStartIndex(); @@ -683,7 +683,7 @@ private Pair, Integer> searchForEventsInternal(ListEventsCmd c _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); Filter searchFilter = new Filter(EventJoinVO.class, "createDate", false, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _eventJoinDao.createSearchBuilder(); @@ -887,7 +887,7 @@ private Pair, Integer> searchForVmGroupsInternal(ListV _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); Filter searchFilter = new Filter(InstanceGroupJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); @@ -945,7 +945,7 @@ private Pair, Integer> searchForUserVMsInternal(ListVMsCmd cm _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, listAll, false); Long domainId = domainIdRecursiveListProject.first(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); Filter searchFilter = new Filter(UserVmJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); @@ -1270,7 +1270,7 @@ private Pair, Integer> searchForSecurityGroupsInternal _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); Filter searchFilter = new Filter(SecurityGroupJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _securityGroupJoinDao.createSearchBuilder(); @@ -1397,7 +1397,7 @@ private Pair, Integer> searchForRoutersInternal(BaseLis _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); Filter searchFilter = new Filter(DomainRouterJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _routerJoinDao.createSearchBuilder(); @@ -1554,7 +1554,7 @@ private Pair, Integer> listProjectsInternal(ListProjectsCmd Long startIndex = cmd.getStartIndex(); Long pageSize = cmd.getPageSizeVal(); boolean listAll = cmd.listAll(); - boolean isRecursive = cmd.isRecursive(); + boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); cmd.getTags(); @@ -1726,7 +1726,7 @@ public Pair, Integer> listProjectInvitationsIntern Long startIndex = cmd.getStartIndex(); Long pageSizeVal = cmd.getPageSizeVal(); Long userId = cmd.getUserId(); - boolean isRecursive = cmd.isRecursive(); + boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); boolean listAll = cmd.listAll(); Account caller = CallContext.current().getCallingAccount(); @@ -2051,7 +2051,7 @@ private Pair, Integer> searchForVolumesInternal(ListVolumesCm _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); Filter searchFilter = new Filter(VolumeJoinVO.class, "created", false, cmd.getStartIndex(), cmd.getPageSizeVal()); // hack for now, this should be done better but due to needing a join I @@ -2293,7 +2293,7 @@ private Pair, Integer> searchForAccountsInternal(ListAccount Long domainId = cmd.getDomainId(); Long accountId = cmd.getId(); String accountName = cmd.getSearchName(); - boolean isRecursive = cmd.isRecursive(); + boolean isRecursive = determineRecursiveness(cmd.isRecursive(), accountId); boolean listAll = cmd.listAll(); boolean callerIsAdmin = _accountMgr.isAdmin(caller.getId()); Account account; @@ -2899,7 +2899,7 @@ private Pair, Integer> searchForDiskOfferingsInternal(L Object keyword = cmd.getKeyword(); Long domainId = cmd.getDomainId(); Boolean isRootAdmin = _accountMgr.isRootAdmin(account.getAccountId()); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); Long zoneId = cmd.getZoneId(); Long volumeId = cmd.getVolumeId(); Long storagePoolId = cmd.getStoragePoolId(); @@ -3068,7 +3068,7 @@ private Pair, Integer> searchForServiceOfferingsInte Boolean isSystem = cmd.getIsSystem(); String vmTypeStr = cmd.getSystemVmType(); ServiceOfferingVO currentVmOffering = null; - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); Long zoneId = cmd.getZoneId(); Integer cpuNumber = cmd.getCpuNumber(); Integer memory = cmd.getMemory(); @@ -4001,7 +4001,7 @@ public Pair, Integer> searchForAffinityGroupsInternal( final String accountName = cmd.getAccountName(); Long domainId = cmd.getDomainId(); final Long projectId = cmd.getProjectId(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), affinityGroupId); final Boolean listAll = cmd.listAll(); final Long startIndex = cmd.getStartIndex(); final Long pageSize = cmd.getPageSizeVal(); diff --git a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java index 9d7e4e0de5d1..aba06c20b73d 100644 --- a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java @@ -1612,7 +1612,7 @@ public Pair, Integer> searchForNetworks(ListNetworksCmd Long physicalNetworkId = cmd.getPhysicalNetworkId(); List supportedServicesStr = cmd.getSupportedServices(); Boolean restartRequired = cmd.isRestartRequired(); - boolean isRecursive = cmd.isRecursive(); + boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); Boolean specifyIpRanges = cmd.isSpecifyIpRanges(); Long vpcId = cmd.getVpcId(); Boolean canUseForDeploy = cmd.canUseForDeploy(); diff --git a/server/src/main/java/com/cloud/network/firewall/FirewallManagerImpl.java b/server/src/main/java/com/cloud/network/firewall/FirewallManagerImpl.java index 21f6d6aecb41..6f7519517ed0 100644 --- a/server/src/main/java/com/cloud/network/firewall/FirewallManagerImpl.java +++ b/server/src/main/java/com/cloud/network/firewall/FirewallManagerImpl.java @@ -285,7 +285,7 @@ public Pair, Integer> listFirewallRules(IListFirewa _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); Filter filter = new Filter(FirewallRuleVO.class, "id", false, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _firewallDao.createSearchBuilder(); diff --git a/server/src/main/java/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/main/java/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 510dbe1a5d00..26ce8bf527cc 100644 --- a/server/src/main/java/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/main/java/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -2328,7 +2328,7 @@ public Pair, Integer> searchForLoadBalancers(ListLo _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); Filter searchFilter = new Filter(LoadBalancerVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _lbDao.createSearchBuilder(); diff --git a/server/src/main/java/com/cloud/network/rules/RulesManagerImpl.java b/server/src/main/java/com/cloud/network/rules/RulesManagerImpl.java index 21dd0553768d..5fef962cb5f5 100644 --- a/server/src/main/java/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/main/java/com/cloud/network/rules/RulesManagerImpl.java @@ -838,7 +838,7 @@ public Pair, Integer> listPortForwardingRules _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); Filter filter = new Filter(PortForwardingRuleVO.class, "id", false, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _portForwardingDao.createSearchBuilder(); @@ -1041,6 +1041,7 @@ public Pair, Integer> searchStaticNatRules(Long ipI Long projectId, boolean isRecursive, boolean listAll) { Account caller = CallContext.current().getCallingAccount(); List permittedAccounts = new ArrayList(); + isRecursive = determineRecursiveness(isRecursive, id);; if (ipId != null) { IPAddressVO ipAddressVO = _ipAddressDao.findById(ipId); diff --git a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java index d601aae85177..7e5904a7355d 100644 --- a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java +++ b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java @@ -176,7 +176,7 @@ public Pair, Integer> listNetworkACLs(final ListNetwo // and list ACLs belonging to the permitted VPCs final List permittedAccounts = new ArrayList(); Long domainId = cmd.getDomainId(); - boolean isRecursive = cmd.isRecursive(); + boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); final String accountName = cmd.getAccountName(); final Long projectId = cmd.getProjectId(); final boolean listAll = cmd.listAll(); @@ -735,7 +735,7 @@ public Pair, Integer> listNetworkACLItems(final L // List permitted VPCs and filter aclItems final List permittedAccounts = new ArrayList(); Long domainId = cmd.getDomainId(); - boolean isRecursive = cmd.isRecursive(); + boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); final String accountName = cmd.getAccountName(); final Long projectId = cmd.getProjectId(); final boolean listAll = cmd.listAll(); diff --git a/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java index 44aee701fc60..bf77cf8891e4 100644 --- a/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java @@ -1194,6 +1194,7 @@ public Pair, Integer> listVpcs(final Long id, final String v final Long zoneId, Boolean isRecursive, final Boolean listAll, final Boolean restartRequired, final Map tags, final Long projectId, final Boolean display) { final Account caller = CallContext.current().getCallingAccount(); + isRecursive = determineRecursiveness(isRecursive, id); final List permittedAccounts = new ArrayList(); final Pair domainIdRecursiveListProject = new Pair(domainId,null); _accountMgr.buildACLSearchParameters(caller, id, accountName, projectId, permittedAccounts, domainIdRecursiveListProject, listAll, false); @@ -2093,7 +2094,7 @@ public Pair, Integer> listPrivateGateway(final ListPrivateG final String vlan = cmd.getVlan(); final Long vpcId = cmd.getVpcId(); final Long id = cmd.getId(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); final Boolean listAll = cmd.listAll(); Long domainId = cmd.getDomainId(); final String accountName = cmd.getAccountName(); @@ -2341,7 +2342,7 @@ public Pair, Integer> listStaticRoutes(final ListSta final Long gatewayId = cmd.getGatewayId(); final Long vpcId = cmd.getVpcId(); Long domainId = cmd.getDomainId(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); final Boolean listAll = cmd.listAll(); final String accountName = cmd.getAccountName(); final Account caller = CallContext.current().getCallingAccount(); diff --git a/server/src/main/java/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java b/server/src/main/java/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java index b8831f64da75..442c7042b6a6 100644 --- a/server/src/main/java/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java +++ b/server/src/main/java/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java @@ -648,7 +648,7 @@ public Pair, Integer> searchForVpnUsers(ListVpnUsersCmd _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); Filter searchFilter = new Filter(VpnUserVO.class, "username", true, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _vpnUsersDao.createSearchBuilder(); _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); @@ -706,7 +706,7 @@ public Pair, Integer> searchForRemoteAccessVpns( _accountMgr.buildACLSearchParameters(caller, null, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), vpnId); Filter filter = new Filter(RemoteAccessVpnVO.class, "serverAddressId", false, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _remoteAccessVpnDao.createSearchBuilder(); diff --git a/server/src/main/java/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java b/server/src/main/java/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java index 4ce515e1481b..245dbadab8b7 100644 --- a/server/src/main/java/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java +++ b/server/src/main/java/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java @@ -624,7 +624,7 @@ public Site2SiteVpnConnection resetVpnConnection(ResetVpnConnectionCmd cmd) thro public Pair, Integer> searchForCustomerGateways(ListVpnCustomerGatewaysCmd cmd) { Long id = cmd.getId(); Long domainId = cmd.getDomainId(); - boolean isRecursive = cmd.isRecursive(); + boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); String accountName = cmd.getAccountName(); boolean listAll = cmd.listAll(); long startIndex = cmd.getStartIndex(); @@ -668,7 +668,7 @@ public Pair, Integer> searchForVpnGateways(L Boolean display = cmd.getDisplay(); Long domainId = cmd.getDomainId(); - boolean isRecursive = cmd.isRecursive(); + boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); String accountName = cmd.getAccountName(); boolean listAll = cmd.listAll(); long startIndex = cmd.getStartIndex(); @@ -716,7 +716,7 @@ public Pair, Integer> searchForVpnConnect Boolean display = cmd.getDisplay(); Long domainId = cmd.getDomainId(); - boolean isRecursive = cmd.isRecursive(); + boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); String accountName = cmd.getAccountName(); boolean listAll = cmd.listAll(); long startIndex = cmd.getStartIndex(); diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java index 815c70eb372a..b500eb5691a3 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -2226,7 +2226,7 @@ public Pair, Integer> searchForIPAddresses(final ListP final Filter searchFilter = new Filter(IPAddressVO.class, "address", false, null, null); final SearchBuilder sb = _publicIpAddressDao.createSearchBuilder(); Long domainId = null; - Boolean isRecursive = cmd.listAll(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), ipId); final List permittedAccounts = new ArrayList<>(); ListProjectResourcesCriteria listProjectResourcesCriteria = null; if (isAllocated || (vlanType == VlanType.VirtualNetwork && (caller.getType() != Account.Type.ADMIN || cmd.getDomainId() != null))) { @@ -4214,7 +4214,7 @@ public Pair, Integer> listSSHKeyPairs(final ListSSHKe _accountMgr.buildACLSearchParameters(caller, null, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); final Long domainId = domainIdRecursiveListProject.first(); final ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - final Boolean isRecursive = cmd.isRecursive(); + final Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); final SearchBuilder sb = _sshKeyPairDao.createSearchBuilder(); _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); final Filter searchFilter = new Filter(SSHKeyPairVO.class, "id", false, cmd.getStartIndex(), cmd.getPageSizeVal()); diff --git a/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java index 4458c63a6f4b..ae6c6ba053b5 100755 --- a/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -661,7 +661,7 @@ public Pair, Integer> listSnapshots(ListSnapshotsCmd cm _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); Filter searchFilter = new Filter(SnapshotVO.class, "created", false, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _snapshotDao.createSearchBuilder(); diff --git a/server/src/main/java/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java b/server/src/main/java/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java index 9c795b0cee3d..fae9ad856a88 100644 --- a/server/src/main/java/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java @@ -232,7 +232,7 @@ public Pair, Integer> listVMSnapshots(ListVMSnapshotC false); Long domainId = domainIdRecursiveListProject.first(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); Filter searchFilter = new Filter(VMSnapshotVO.class, "created", false, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _vmSnapshotDao.createSearchBuilder(); diff --git a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java index fe7d1ead96fe..6eff61715679 100644 --- a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java @@ -503,7 +503,7 @@ public Pair, Integer> listBackups(final ListBackupsCmd cmd) { accountManager.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); final Long domainId = domainIdRecursiveListProject.first(); Project.ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); final Filter searchFilter = new Filter(BackupVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = backupDao.createSearchBuilder(); diff --git a/server/src/main/java/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java b/server/src/main/java/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java index c60ca4559108..4328f458376b 100644 --- a/server/src/main/java/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java @@ -394,7 +394,7 @@ public Pair, Integer> listApplicatio domainIdRecursiveListProject, cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.second(); - Boolean isRecursive = cmd.isRecursive(); + Boolean isRecursive = determineRecursiveness(cmd.isRecursive(), id); Filter searchFilter = new Filter(ApplicationLoadBalancerRuleVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _lbDao.createSearchBuilder(); diff --git a/utils/src/main/java/com/cloud/utils/component/ManagerBase.java b/utils/src/main/java/com/cloud/utils/component/ManagerBase.java index 01e4f405d2b1..e02d1485aed6 100644 --- a/utils/src/main/java/com/cloud/utils/component/ManagerBase.java +++ b/utils/src/main/java/com/cloud/utils/component/ManagerBase.java @@ -25,4 +25,8 @@ public ManagerBase() { // set default run level for manager components setRunLevel(ComponentLifecycle.RUN_LEVEL_COMPONENT_BOOTSTRAP); } + + protected boolean determineRecursiveness(boolean isRecursive, Object id) { + return isRecursive || id != null; + } }