Skip to content

Commit b94bf01

Browse files
author
Shanker Balan
committed
- Add OS specific versins of cloud-set-guest-sshkey and cloud-set-guest-password. These are modifications of publicly available versions of these scripts to better handle OS specific start/stop routines.
- Add DHCP CLient hooks Please note that these scripts have had minimal testing. Please be sure to thoroughly test them in your environment first.
1 parent 6fbdbf4 commit b94bf01

12 files changed

Lines changed: 1046 additions & 0 deletions

cloud-set-guest-password-centos

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
#!/bin/bash
2+
#
3+
# cloud-set-guest-assword Init file for Password Download Client
4+
#
5+
# chkconfig: 2345 98 02
6+
# description: Init file for Password Download Client
7+
8+
### BEGIN INIT INFO
9+
# Provides: cloud-set-guest-password
10+
# Required-Start: $local_fs $network
11+
# Required-Stop: $local_fs $syslog
12+
# Should-Start: $syslog
13+
# Should-Stop: $network $syslog
14+
# Default-Start: 2 3 4 5
15+
# Default-Stop: 0 1 6
16+
# Short-Description: Init file for Password Download Client
17+
# Description: Init file for Password Download Client
18+
### END INIT INFO
19+
20+
# Source function library.
21+
. /etc/rc.d/init.d/functions
22+
23+
# Modify this line to specify the user (default is root)
24+
user=root
25+
26+
# Add your DHCP lease folders here
27+
DHCP_FOLDERS="/var/lib/dhclient/*"
28+
29+
function cloud_set_guest_password() {
30+
password_received=0
31+
file_count=0
32+
error_count=0
33+
34+
for DHCP_FILE in $DHCP_FOLDERS; do
35+
if [ -f $DHCP_FILE ]; then
36+
file_count=$((file_count+1))
37+
PASSWORD_SERVER_IP=$(grep dhcp-server-identifier $DHCP_FILE | tail -1 | awk '{print $NF}' | tr -d '\;')
38+
39+
if [ -n $PASSWORD_SERVER_IP ]; then
40+
logger -t "cloud" "Found password server IP $PASSWORD_SERVER_IP in $DHCP_FILE"
41+
logger -t "cloud" "Sending request to password server at $PASSWORD_SERVER_IP"
42+
password=$(wget -q -t 3 -T 20 -O - --header "DomU_Request: send_my_password" $PASSWORD_SERVER_IP:8080)
43+
password=$(echo $password | tr -d '\r')
44+
45+
if [ $? -eq 0 ]; then
46+
logger -t "cloud" "Got response from server at $PASSWORD_SERVER_IP"
47+
48+
case $password in
49+
50+
"") logger -t "cloud" "Password server at $PASSWORD_SERVER_IP did not have any password for the VM"
51+
continue
52+
;;
53+
54+
"bad_request") logger -t "cloud" "VM sent an invalid request to password server at $PASSWORD_SERVER_IP"
55+
error_count=$((error_count+1))
56+
continue
57+
;;
58+
59+
"saved_password") logger -t "cloud" "VM has already saved a password from the password server at $PASSWORD_SERVER_IP"
60+
continue
61+
;;
62+
63+
*) logger -t "cloud" "VM got a valid password from server at $PASSWORD_SERVER_IP"
64+
password_received=1
65+
break
66+
;;
67+
68+
esac
69+
else
70+
logger -t "cloud" "Failed to send request to password server at $PASSWORD_SERVER_IP"
71+
error_count=$((error_count+1))
72+
fi
73+
else
74+
logger -t "cloud" "Could not find password server IP in $DHCP_FILE"
75+
error_count=$((error_count+1))
76+
fi
77+
fi
78+
done
79+
80+
if [ "$password_received" == "0" ]; then
81+
if [ "$error_count" == "$file_count" ]; then
82+
logger -t "cloud" "Failed to get password from any server"
83+
exit 1
84+
else
85+
logger -t "cloud" "Did not need to change password."
86+
exit 0
87+
fi
88+
fi
89+
90+
logger -t "cloud" "Changing password ..."
91+
echo $password | passwd --stdin $user
92+
93+
if [ $? -gt 0 ]; then
94+
logger -t "cloud" "Failed to change password for user $user"
95+
fi
96+
97+
logger -t "cloud" "Successfully changed password for user $user"
98+
logger -t "cloud" "Sending acknowledgment to password server at $PASSWORD_SERVER_IP"
99+
wget -t 3 -T 20 -O - --header "DomU_Request: saved_password" $PASSWORD_SERVER_IP:8080
100+
}
101+
102+
# See how we were called.
103+
case "$1" in
104+
start)
105+
action $"Starting cloud-set-guest-password: " /bin/true
106+
cloud_set_guest_password
107+
RETVAL=$?
108+
;;
109+
stop)
110+
action $"Shutting down cloud-set-guest-password: " /bin/true
111+
RETVAL=$?
112+
;;
113+
restart)
114+
$0 stop
115+
$0 start
116+
;;
117+
*)
118+
echo $"Usage: cloud-set-guest-sshey {start}"
119+
RETVAL=2
120+
;;
121+
esac
122+
123+
exit $RETVAL

cloud-set-guest-password-debian

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
#!/bin/bash
2+
#
3+
# Init file for Password Download Client
4+
#
5+
### BEGIN INIT INFO
6+
# Provides: cloud-set-guest-password
7+
# Required-Start: $local_fs $syslog $network
8+
# Required-Stop: $local_fs $syslog $network
9+
# Default-Start: 2 3 4 5
10+
# Default-Stop: 0 1 6
11+
# Short-Description: Init file for Password Download Client
12+
### END INIT INFO
13+
14+
set -e
15+
16+
. /lib/lsb/init-functions
17+
18+
# Modify this line to specify the user (default is root)
19+
user=root
20+
21+
# Add your DHCP lease folders here
22+
DHCP_FOLDERS="/var/lib/dhcp/*"
23+
24+
function cloud_set_guest_password() {
25+
password_received=0
26+
file_count=0
27+
error_count=0
28+
29+
for DHCP_FILE in $DHCP_FOLDERS; do
30+
if [ -f $DHCP_FILE ]; then
31+
file_count=$((file_count+1))
32+
PASSWORD_SERVER_IP=$(grep dhcp-server-identifier $DHCP_FILE | tail -1 | awk '{print $NF}' | tr -d '\;')
33+
34+
if [ -n "$PASSWORD_SERVER_IP" ]; then
35+
logger -t "cloud" "Found password server IP $PASSWORD_SERVER_IP in $DHCP_FILE"
36+
logger -t "cloud" "Sending request to password server at $PASSWORD_SERVER_IP"
37+
password=$(wget -q -t 3 -T 20 -O - --header "DomU_Request: send_my_password" $PASSWORD_SERVER_IP:8080)
38+
password=$(echo $password | tr -d '\r')
39+
40+
if [ $? -eq 0 ]; then
41+
logger -t "cloud" "Got response from server at $PASSWORD_SERVER_IP"
42+
43+
case $password in
44+
"")
45+
logger -t "cloud" "Password server at $PASSWORD_SERVER_IP did not have any password for the VM"
46+
continue
47+
;;
48+
"bad_request")
49+
logger -t "cloud" "VM sent an invalid request to password server at $PASSWORD_SERVER_IP"
50+
error_count=$((error_count+1))
51+
continue
52+
;;
53+
"saved_password")
54+
logger -t "cloud" "VM has already saved a password from the password server at $PASSWORD_SERVER_IP"
55+
continue
56+
;;
57+
*)
58+
logger -t "cloud" "VM got a valid password from server at $PASSWORD_SERVER_IP"
59+
password_received=1
60+
break
61+
;;
62+
esac
63+
else
64+
logger -t "cloud" "Failed to send request to password server at $PASSWORD_SERVER_IP"
65+
error_count=$((error_count+1))
66+
fi
67+
else
68+
logger -t "cloud" "Could not find password server IP in $DHCP_FILE"
69+
error_count=$((error_count+1))
70+
fi
71+
fi
72+
done
73+
74+
if [ "$password_received" == "0" ]; then
75+
if [ "$error_count" == "$file_count" ]; then
76+
logger -t "cloud" "Failed to get password from any server"
77+
exit 1
78+
else
79+
logger -t "cloud" "Did not need to change password."
80+
exit 0
81+
fi
82+
fi
83+
84+
logger -t "cloud" "Changing password ..."
85+
86+
if [ -x /usr/sbin/chpasswd ]; then
87+
echo "${user}:${password}" | chpasswd
88+
else
89+
echo $password | passwd --stdin $user
90+
if [ $? -gt 0 ]; then
91+
logger -t "cloud" "Failed to change password for user $user"
92+
exit 1
93+
else
94+
logger -t "cloud" "Successfully changed password for user $user"
95+
fi
96+
fi
97+
98+
logger -t "cloud" "Sending acknowledgment to password server at $PASSWORD_SERVER_IP"
99+
wget -t 3 -T 20 -O - --header "DomU_Request: saved_password" $PASSWORD_SERVER_IP:8080
100+
}
101+
102+
case "$1" in
103+
start)
104+
log_action_msg "Starting cloud" "cloud-set-guest-password"
105+
sleep 10
106+
cloud_set_guest_password
107+
if [ $? -eq 0 ]; then
108+
log_end_msg 0
109+
else
110+
log_end_msg 1
111+
fi
112+
;;
113+
stop)
114+
log_action_msg "Stopping cloud" "cloud-set-guest-password"
115+
log_end_msg 0
116+
;;
117+
*)
118+
log_action_msg "Usage: /etc/init.d/cloud-set-guest-password {start}"
119+
exit 1
120+
;;
121+
esac
122+
123+
exit 0
124+

cloud-set-guest-password-freebsd

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#!/bin/sh
2+
#
3+
# FreeBSD
4+
# Modify this line to specify the user (default is root)
5+
user=root
6+
7+
# Add your DHCP lease folders here
8+
WGET=/usr/local/bin/wget
9+
DHCP_FOLDERS="/var/db/dhclient.leases.*"
10+
password_received=0
11+
file_count=0
12+
error_count=0
13+
14+
for DHCP_FILE in $DHCP_FOLDERS
15+
do
16+
if [ -f $DHCP_FILE ]
17+
then
18+
file_count=$((file_count+1))
19+
PASSWORD_SERVER_IP=$(grep dhcp-server-identifier $DHCP_FILE | tail -1 | awk '{print $NF}' | tr -d '\;')
20+
21+
if [ -n $PASSWORD_SERVER_IP ]
22+
then
23+
logger -t "cloud" "Found password server IP $PASSWORD_SERVER_IP in $DHCP_FILE"
24+
logger -t "cloud" "Sending request to password server at $PASSWORD_SERVER_IP"
25+
password=$($WGET -q -t 3 -T 20 -O - --header "DomU_Request: send_my_password" $PASSWORD_SERVER_IP:8080)
26+
password=$(echo $password | tr -d '\r')
27+
28+
if [ $? -eq 0 ]
29+
then
30+
logger -t "cloud" "Got response from server at $PASSWORD_SERVER_IP"
31+
32+
case $password in
33+
34+
"") logger -t "cloud" "Password server at $PASSWORD_SERVER_IP did not have any password for the VM"
35+
continue
36+
;;
37+
38+
"bad_request") logger -t "cloud" "VM sent an invalid request to password server at $PASSWORD_SERVER_IP"
39+
error_count=$((error_count+1))
40+
continue
41+
;;
42+
43+
"saved_password") logger -t "cloud" "VM has already saved a password from the password server at $PASSWORD_SERVER_IP"
44+
continue
45+
;;
46+
47+
*) logger -t "cloud" "VM got a valid password from server at $PASSWORD_SERVER_IP"
48+
password_received=1
49+
break
50+
;;
51+
52+
esac
53+
else
54+
logger -t "cloud" "Failed to send request to password server at $PASSWORD_SERVER_IP"
55+
error_count=$((error_count+1))
56+
fi
57+
else
58+
logger -t "cloud" "Could not find password server IP in $DHCP_FILE"
59+
error_count=$((error_count+1))
60+
fi
61+
fi
62+
done
63+
64+
if [ "$password_received" == "0" ]
65+
then
66+
if [ "$error_count" == "$file_count" ]
67+
then
68+
logger -t "cloud" "Failed to get password from any server"
69+
exit 1
70+
else
71+
logger -t "cloud" "Did not need to change password."
72+
exit 0
73+
fi
74+
fi
75+
76+
logger -t "cloud" "Changing password ..."
77+
echo $password | pw mod user $user -h 0
78+
79+
if [ $? -gt 0 ]
80+
then
81+
logger -t "cloud" "Failed to change password for user $user"
82+
exit 1
83+
else
84+
logger -t "cloud" "Successfully changed password for user $user"
85+
fi
86+
87+
logger -t "cloud" "Sending acknowledgment to password server at $PASSWORD_SERVER_IP"
88+
$WGET -t 3 -T 20 -O - --header "DomU_Request: saved_password" $PASSWORD_SERVER_IP:8080
89+
exit 0

0 commit comments

Comments
 (0)