diff --git a/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java b/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java index 1c39444bdff..3d0ce6d3c81 100644 --- a/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java +++ b/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java @@ -40,7 +40,7 @@ public class ListPortForwardingRulesCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, required=true, description="the IP address of the port forwarding services") + @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, description="the IP address of the port forwarding services") private String ipAddress; ///////////////////////////////////////////////////// diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java index 57404f6ef5a..4d0a605af3f 100644 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -345,17 +345,22 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { @Override public List listPortForwardingRules(ListPortForwardingRulesCmd cmd) { - Ip ipAddress = new Ip(cmd.getIpAddress()); Account caller = UserContext.current().getCaller(); - IPAddressVO ipAddressVO = _ipAddressDao.findById(ipAddress); - if (ipAddressVO == null || !ipAddressVO.readyToUse()) { - throw new InvalidParameterValueException("Ip address not ready for port forwarding rules yet: " + ipAddress); - } - - List rules = _forwardingDao.listByIp(ipAddress); - _accountMgr.checkAccess(caller, rules.toArray(new PortForwardingRuleVO[rules.size()])); + List rules = null; + if(cmd.getIpAddress() != null){ + Ip ipAddress = new Ip(cmd.getIpAddress()); + IPAddressVO ipAddressVO = _ipAddressDao.findById(ipAddress); + if (ipAddressVO == null || !ipAddressVO.readyToUse()) { + throw new InvalidParameterValueException("Ip address not ready for port forwarding rules yet: " + ipAddress); + } + + rules = _forwardingDao.listByIp(ipAddress); + _accountMgr.checkAccess(caller, rules.toArray(new PortForwardingRuleVO[rules.size()])); + } else { + rules = _forwardingDao.listByAccount(caller.getAccountId()); + } return rules; } diff --git a/server/src/com/cloud/network/rules/dao/PortForwardingRulesDao.java b/server/src/com/cloud/network/rules/dao/PortForwardingRulesDao.java index e45703aa0c1..a06959b2033 100644 --- a/server/src/com/cloud/network/rules/dao/PortForwardingRulesDao.java +++ b/server/src/com/cloud/network/rules/dao/PortForwardingRulesDao.java @@ -41,4 +41,6 @@ public interface PortForwardingRulesDao extends GenericDao listByVm(Long vmId); List listByNetworkId(long networkId); + + List listByAccount(long accountId); } diff --git a/server/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java b/server/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java index 4ed51a58a87..997410ea0db 100644 --- a/server/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java +++ b/server/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java @@ -38,6 +38,7 @@ public class PortForwardingRulesDaoImpl extends GenericDaoBase ApplicationSearch; protected final SearchBuilder ActiveRulesSearch; protected final SearchBuilder AllRulesSearchByVM; + protected final SearchBuilder ActiveRulesSearchByAccount; protected PortForwardingRulesDaoImpl() { super(); @@ -61,6 +62,11 @@ public class PortForwardingRulesDaoImpl extends GenericDaoBase listByAccount(long accountId) { + SearchCriteria sc = ActiveRulesSearchByAccount.create(); + sc.setParameters("accountId", accountId); + sc.setParameters("state", State.Revoke); + return listBy(sc); + } }