diff --git a/setup/bindir/cloud-set-guest-password.in b/setup/bindir/cloud-set-guest-password.in index aedcf155e79..b61ba87ff47 100755 --- a/setup/bindir/cloud-set-guest-password.in +++ b/setup/bindir/cloud-set-guest-password.in @@ -11,69 +11,89 @@ user=root # Add your DHCP lease folders here DHCP_FOLDERS="/var/lib/dhclient/* /var/lib/dhcp3/*" password_received=0 +file_count=0 +error_count=0 for DHCP_FILE in $DHCP_FOLDERS do if [ -f $DHCP_FILE ] then + file_count=$((file_count+1)) PASSWORD_SERVER_IP=$(grep dhcp-server-identifier $DHCP_FILE | tail -1 | awk '{print $NF}' | tr -d '\;') if [ -n $PASSWORD_SERVER_IP ] then + logger -t "cloud" "Found password server IP $PASSWORD_SERVER_IP in $DHCP_FILE" logger -t "cloud" "Sending request to password server at $PASSWORD_SERVER_IP" password=$(wget -t 3 -T 20 -O - --header "DomU_Request: send_my_password" $PASSWORD_SERVER_IP:8080) if [ $? -eq 0 ] then - logger -t "cloud" "Got a password from server at $PASSWORD_SERVER_IP" - password_received=1 - break + logger -t "cloud" "Got response from server at $PASSWORD_SERVER_IP" + + case $password in + + "") logger -t "cloud" "Password server at $PASSWORD_SERVER_IP did not have any password for the VM" + continue + ;; + + "bad_request") logger -t "cloud" "VM sent an invalid request to password server at $PASSWORD_SERVER_IP" + error_count=$((error_count+1)) + continue + ;; + + "saved_password") logger -t "cloud" "VM has already saved a password from the password server at $PASSWORD_SERVER_IP" + continue + ;; + + *) logger -t "cloud" "VM got a valid password from server at $PASSWORD_SERVER_IP" + password_received=1 + break + ;; + + esac + else + logger -t "cloud" "Failed to send request to password server at $PASSWORD_SERVER_IP" + error_count=$((error_count+1)) fi + else + logger -t "cloud" "Could not find password server IP in $DHCP_FILE" + error_count=$((error_count+1)) fi fi done if [ "$password_received" == "0" ] then - logger -t "cloud" "Failed to get password from server" - exit 1 + if [ "$error_count" == "$file_count" ] + then + logger -t "cloud" "Failed to get password from any server" + exit 1 + else + logger -t "cloud" "Did not need to change password." + exit 0 + fi fi password=$(echo $password | tr -d '\r') -case $password in - - "") logger -t "cloud" "Password server did not have any password for the VM." - exit 0 - ;; +logger -t "cloud" "Changing password ..." +echo $password | passwd --stdin $user - "bad_request") logger -t "cloud" "VM sent an invalid request to password server." - exit 1 - ;; - - "saved_password") logger -t "cloud" "VM has already saved a password from the password server." - exit 0 - ;; - - *) logger -t "cloud" "Changing password for the VM..." - echo $password | passwd --stdin $user - - if [ $? -gt 0 ] - then - usermod -p `mkpasswd $password 42` $user +if [ $? -gt 0 ] +then + usermod -p `mkpasswd $password 42` $user - if [ $? -gt 0 ] - then - logger -t "cloud" "Failed to change password for user $user" - exit 1 - else - logger -t "cloud" "Successfully changed password for user $user" - fi - fi + if [ $? -gt 0 ] + then + logger -t "cloud" "Failed to change password for user $user" + exit 1 + else + logger -t "cloud" "Successfully changed password for user $user" + fi +fi - logger -t "cloud" "Sending acknowledgment to password server at $PASSWORD_SERVER_IP" - wget -t 3 -T 20 -O - --header "DomU_Request: saved_password" $PASSWORD_SERVER_IP:8080 - exit 0 - ;; - -esac +logger -t "cloud" "Sending acknowledgment to password server at $PASSWORD_SERVER_IP" +wget -t 3 -T 20 -O - --header "DomU_Request: saved_password" $PASSWORD_SERVER_IP:8080 +exit 0 +