This is an automated email from the ASF dual-hosted git repository.

dahn pushed a commit to branch 4.14
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.14 by this push:
     new 8b99411  Failed to update host password if username/password is not 
saved in db (#4359)
8b99411 is described below

commit 8b994113ff11fc08e2418f694796c68576de5975
Author: Rakesh <[email protected]>
AuthorDate: Thu Oct 29 09:43:05 2020 +0100

    Failed to update host password if username/password is not saved in db 
(#4359)
---
 .../com/cloud/server/ManagementServerImpl.java     | 25 ++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java 
b/server/src/main/java/com/cloud/server/ManagementServerImpl.java
index 926aca9..1b1debb 100644
--- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java
@@ -3929,6 +3929,11 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
         // get all the hosts in this cluster
         final List<HostVO> hosts = 
_resourceMgr.listAllHostsInCluster(command.getClusterId());
 
+        String userNameWithoutSpaces = 
StringUtils.deleteWhitespace(command.getUsername());
+        if (StringUtils.isBlank(userNameWithoutSpaces)) {
+            throw new InvalidParameterValueException("Username should be non 
empty string");
+        }
+
         Transaction.execute(new TransactionCallbackNoReturn() {
             @Override
             public void doInTransactionWithoutResult(final TransactionStatus 
status) {
@@ -3938,7 +3943,12 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
                     }
                     // update password for this host
                     final DetailVO nv = _detailsDao.findDetail(h.getId(), 
ApiConstants.USERNAME);
-                    if (nv.getValue().equals(command.getUsername())) {
+                    if (nv == null) {
+                        final DetailVO nvu = new DetailVO(h.getId(), 
ApiConstants.USERNAME, userNameWithoutSpaces);
+                        _detailsDao.persist(nvu);
+                        final DetailVO nvp = new DetailVO(h.getId(), 
ApiConstants.PASSWORD, DBEncryptionUtil.encrypt(command.getPassword()));
+                        _detailsDao.persist(nvp);
+                    } else if (nv.getValue().equals(userNameWithoutSpaces)) {
                         final DetailVO nvp = _detailsDao.findDetail(h.getId(), 
ApiConstants.PASSWORD);
                         
nvp.setValue(DBEncryptionUtil.encrypt(command.getPassword()));
                         _detailsDao.persist(nvp);
@@ -3986,6 +3996,12 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
         if (!supportedHypervisors.contains(host.getHypervisorType())) {
             throw new InvalidParameterValueException("This operation is not 
supported for this hypervisor type");
         }
+
+        String userNameWithoutSpaces = 
StringUtils.deleteWhitespace(cmd.getUsername());
+        if (StringUtils.isBlank(userNameWithoutSpaces)) {
+            throw new InvalidParameterValueException("Username should be non 
empty string");
+        }
+
         Transaction.execute(new TransactionCallbackNoReturn() {
             @Override
             public void doInTransactionWithoutResult(final TransactionStatus 
status) {
@@ -3994,7 +4010,12 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
                 }
                 // update password for this host
                 final DetailVO nv = _detailsDao.findDetail(host.getId(), 
ApiConstants.USERNAME);
-                if (nv.getValue().equals(cmd.getUsername())) {
+                if (nv == null) {
+                    final DetailVO nvu = new DetailVO(host.getId(), 
ApiConstants.USERNAME, userNameWithoutSpaces);
+                    _detailsDao.persist(nvu);
+                    final DetailVO nvp = new DetailVO(host.getId(), 
ApiConstants.PASSWORD, DBEncryptionUtil.encrypt(cmd.getPassword()));
+                    _detailsDao.persist(nvp);
+                } else if (nv.getValue().equals(userNameWithoutSpaces)) {
                     final DetailVO nvp = _detailsDao.findDetail(host.getId(), 
ApiConstants.PASSWORD);
                     nvp.setValue(DBEncryptionUtil.encrypt(cmd.getPassword()));
                     _detailsDao.persist(nvp);

Reply via email to