diff --git a/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java b/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java index 0714fecbbcc..f092f9953a0 100644 --- a/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java +++ b/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java @@ -30,6 +30,7 @@ import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.IpAddress; +import com.cloud.user.Account; import com.cloud.user.UserContext; @Implementation(description="Disassociates an ip address from the account.", responseObject=SuccessResponse.class) @@ -96,6 +97,10 @@ public class DisassociateIPAddrCmd extends BaseAsyncCmd { } ownerId = ip.getAccountId(); } + + if (ownerId == null) { + return Account.ACCOUNT_ID_SYSTEM; + } return ownerId; } diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index be9bb10c87c..9836980c1ba 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -1588,8 +1588,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (ipVO.getAllocatedToAccountId() != null) { _accountMgr.checkAccess(caller, null, ipVO); } + + Network associatedNetwork = getNetwork(ipVO.getAssociatedWithNetworkId()); - if (ipVO.isSourceNat()) { + if (isServiceSupportedByNetworkOffering(associatedNetwork.getNetworkOfferingId(), Service.SourceNat)) { throw new IllegalArgumentException("ip address is used for source nat purposes and can not be disassociated."); }