diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java index 480860330a4..7eb22e694c1 100644 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -358,6 +358,8 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { throw new InvalidParameterValueException("Unable to find " + ruleId); } + long ownerId = rule.getAccountId(); + _accountMgr.checkAccess(caller, rule); revokeRule(rule, caller, ctx.getCallerUserId()); @@ -369,7 +371,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { success = true; } if(success){ - UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_NET_RULE_DELETE, rule.getAccountId(), 0, rule.getId(), null); + UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_NET_RULE_DELETE, ownerId, 0, ruleId, null); _usageEventDao.persist(usageEvent); } return success; @@ -383,6 +385,11 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { } List rules = _forwardingDao.listByVm(vmId); + + if (rules == null || rules.isEmpty()) { + return true; + } + for (PortForwardingRuleVO rule : rules) { revokePortForwardingRule(rule.getId(), true); } diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 8f656457ae0..3e8ee037aef 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -1111,6 +1111,9 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager @Override public boolean expunge(UserVmVO vm, long callerUserId, Account caller) { + UserContext ctx = UserContext.current(); + ctx.setAccountId(vm.getAccountId()); + try { if (!_itMgr.advanceExpunge(vm, _accountMgr.getSystemUser(), caller)) {