Don't pass untrusted arguments to xm info.
[invirt/packages/invirt-remote.git] / host / usr / sbin / invirt-vmcontrol
1 #!/bin/bash
2 # invirt-vmcontrol MACHINE ACTION
3 #
4 # remctl should have already verified that the user is authorized to
5 # control the machine.  So, we just need to execute the action requested.
6 #
7 # $0 and $1 come from the trusted remctl source.
8 #
9 # $2 and so on are user-provided, and thus sketchy.
10
11 ORIGMACHINE="$1"
12 ACTION="$2"
13 MACHINE="d_$ORIGMACHINE"
14
15 xm () {
16     command xm "$@" || exit 35
17 }
18
19 case "$ACTION" in
20     list|vcpu-list|uptime)
21         xm "$ACTION" "$MACHINE"
22         ;;
23     destroy|shutdown|reboot)
24         xm "$ACTION" "$MACHINE"
25         /usr/sbin/invirt-update-conserver </dev/null >/dev/null 2>&1 &
26         ;;
27     install|create)
28         shift; shift;
29         xm list "$MACHINE" >/dev/null 2>/dev/null && echo "$MACHINE already exists" && exit 1
30         if [ "$ACTION" = "install" ]; then
31             xm create invirt-database machine_name="$ORIGMACHINE" installer_options="$(printf '%q ' "$@")"
32         elif [ -n "$1" ]; then
33             xm create invirt-database machine_name="$ORIGMACHINE" cdrom_image="$1"
34         else
35             xm create invirt-database machine_name="$ORIGMACHINE"
36         fi
37         (sleep 4; /usr/sbin/invirt-update-conserver) </dev/null >/dev/null 2>&1 &
38         ;;
39     list-long)
40         xm list --long "$MACHINE"
41         ;;
42     vnctoken)
43         invirt-vnc-authtoken "$ORIGMACHINE"
44         ;;
45     *)
46         echo "ERROR: Invalid Command"
47         exit 34
48         ;;
49 esac