Details
-
Bug
-
Status: Resolved
-
Critical
-
Resolution: Fixed
-
4.5.2
-
Security Level: Public (Anyone can view this level - this is the default.)
-
None
-
Important
Description
Previous versions of the systemvm.iso used a shell script to serve passwords. In response to a "send_my_password" query, if no password was to be served, the /opt/cloud/bin/serve_password.sh script would issue a response with "saved_password" in the body.
The new version of the systemvm.iso supercedes serve_password.sh with a python script at /opt/cloud/bin/passwd_server_ip.py. This script's behaviour is different to the original serve_password.sh. In response to a "send_my_password" query, if no password was to be served, the /opt/cloud/bin/passwd_server_ip.py script issues an empty response.
Linux guests handle this appropriately. The cloud-set-guest-password init script uses a case statement to ignore blank responses. I've not been able to examine the code for the equivalent Windows guest service but it responds very differently.
If a Windows guest receives a blank response from the password server then it assumes that the password needs to be blank. The log on the windows guest reports the following:
[INFO] Need to set new password for this VM. First letter in password :
[INFO] New password has been set for this VM
The windows guest expects a "saved_password" response if a password isn't being issued. If it receives this response then it logs the following:
[INFO] No need to set password, because http://10.1.1.1:8080/ said so with response saved_password
Because the password server is queried every time the windows service starts, this will result in the guest adopting a blank password every time it is rebooted or the service is restarted. It's probably unrealistic to consider updating the Windows service in every guest currently running in cloudstack. As such it looks like the password server's behaviour needs to be adjusted to match the behaviour that guests expect.