From e6474ff85aa287ccf19d2ac9de74864f24b4af76 Mon Sep 17 00:00:00 2001 From: Abhinandan Prateek Date: Wed, 2 Nov 2011 16:47:42 +0530 Subject: [PATCH] bug 11709: saving encrypted password in db status 11709: resolved fixed --- server/src/com/cloud/vm/UserVmManagerImpl.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 76eb18ffdb1..ae85cb91c94 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -364,12 +364,13 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager Long userId = UserContext.current().getCallerUserId(); Long vmId = cmd.getId(); UserVmVO userVm = _vmDao.findById(cmd.getId()); + _vmDao.loadDetails(userVm); // Do parameters input validation if (userVm == null) { throw new InvalidParameterValueException("unable to find a virtual machine with id " + cmd.getId()); } - + VMTemplateVO template = _templateDao.findByIdIncludingRemoved(userVm.getTemplateId()); if (template == null || !template.getEnablePassword()) { throw new InvalidParameterValueException("Fail to reset password for the virtual machine, the template is not password enabled"); @@ -386,6 +387,18 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (result) { userVm.setPassword(password); + //update the password in vm_details table too + // Check if an SSH key pair was selected for the instance and if so use it to encrypt & save the vm password + String sshPublicKey = userVm.getDetail("SSH.PublicKey"); + if (sshPublicKey != null && !sshPublicKey.equals("") && password != null && !password.equals("saved_password")) { + String encryptedPasswd = RSAHelper.encryptWithSSHPublicKey(sshPublicKey, password); + if (encryptedPasswd == null) { + throw new CloudRuntimeException("Error encrypting password"); + } + + userVm.setDetail("Encrypted.Password", encryptedPasswd); + _vmDao.saveDetails(userVm); + } } return userVm;