Call the rdns script with 3 users
[ganneffutils.git] / kvm-shell
index 2a34b51..278b151 100644 (file)
--- a/kvm-shell
+++ b/kvm-shell
 #    GNU General Public License for more details.
 #
 # INSTALL:
-# 1) create these entries for your users in /etc/sudoers (use visudo) :
+# 1) create these entries for your users in /etc/sudoers (use visudo)
+#    (in Debian its even better to use /etc/sudoers.d/kvm-shell, run
+#    visudo -f /etc/sudoers.d/kvm-shell):
 #    User_Alias   KVMUSERS = vuser1,vuser2
 #    Cmnd_Alias   KVM      = /usr/bin/virsh
 #    KVMUSERS     ALL      = NOPASSWD: KVM
-# 2) Create /usr/local/etc/kvm-shell-users (see config variable below) :
+# 2) Create /etc/kvm-shell/users (or whatever name you set USERSFILE
+#    to below):
 #    Format:
-#      <username> <vm1, vm2, ....>
+#      <username> <vm1 vm2 ...>
 #    Example:
 #      vuser1 vm1
 #      vuser2 vm1 vm2 vm3
@@ -35,10 +38,13 @@ PROGRAM="kvm-shell"
 
 # configuration
 USERSFILE=/etc/kvm-shell/users
+# What do we run for sudo?
 SUDO=/usr/bin/sudo
+# Where is virsh
 VIRSH=/usr/bin/virsh
 # After how many seconds without input do we exit the dialogbox?
 TIMEOUTSECS=120
+# A tempdir. Whatever is in the environment before has precedence.
 TMPDIR=${TMPDIR:-"/tmp"}
 # Set to no if you do not want people to edit DNS information
 DO_RDNS="yes"
@@ -55,12 +61,15 @@ RDNS=/etc/kvm-shell/rdns
 # is done. It gets two arguments:
 # 1 - the original file
 # 2 - the new edit from the user
+# 3 - the calling username (can be used for logging. Nice for sudo users)
 RDNSSCRIPT="${SUDO} /usr/local/bin/dodns"
 
 ########################################################################
 # Helper functions                                                     #
 ########################################################################
 # Simple function to cleanup whenever we exit.
+# This goes through all variable names in TEMPFILES and deletes the files
+# that those variables point to.
 function cleanup() {
     ERRVAL=$?
     trap - ERR EXIT TERM HUP INT QUIT
@@ -99,17 +108,17 @@ function revdns() {
         TEMPFILES="${TEMPFILES} dnsedit"
         set +e
         dialog --backtitle "KVM Shell ${VERSION}" \
-            --title "User $USER - Edit reverse DNS for VM ${VM}" \
+            --title "User ${USER} - Edit reverse DNS for VM ${VM}" \
             --cancel-label "Cancel, don't save" --ok-label "Apply" \
             --timeout ${TIMEOUTSECS} \
             --editbox ${dnsfile} 22 78 2>${dnsedit}
         ret=$?
         set -e
-        case $ret in
+        case ${ret} in
             0)
                 # Clean exit, means we have something to do
                 echo "Applying changes, please be patient..."
-                ${RDNSSCRIPT} "${dnsfile}" "${dnsedit}"
+                ${RDNSSCRIPT} "${dnsfile}" "${dnsedit}" "${USER}"
                 ;;
             *)
                 # Anything else means we send em to the shredder...
@@ -124,7 +133,7 @@ function revdns() {
 function helpbox() {
     set +e
     dialog --stdout --backtitle "KVM Shell ${VERSION}" \
-        --title "User $USER - Help" \
+        --title "User ${USER} - Help" \
         --msgbox "                         KVM Shell ${VERSION}
 
 This is the KVM Shell Version ${VERSION}, written by Joerg Jaspert,
@@ -152,7 +161,7 @@ menu options given to you.
 #            select from
 # No arguments
 function main_menu {
-    local AVAILABLEVMS=$(egrep "^$USER " "$USERSFILE")
+    local AVAILABLEVMS=$(egrep "^${USER} " "${USERSFILE}")
     # Only end up with the VMs, not the username too
     AVAILABLEVMS=${AVAILABLEVMS#* }
     local MENUITEMS=""
@@ -175,18 +184,18 @@ function main_menu {
     TEMPFILES="${TEMPFILES} dialogout"
     set +e
     dialog --backtitle "KVM Shell ${VERSION}" \
-        --title "User $USER - Select VM to manage" \
+        --title "User ${USER} - Select VM to manage" \
         --cancel-label "Exit" --ok-label "Select VM" \
         --help-button --timeout ${TIMEOUTSECS} \
         --menu 'Available VMs:' 15 55 ${COUNTER} ${MENUITEMS} 2>${dialogout}
     ret=$?
     set -e
-    local selectedvm=$(cat "${dialogout}")
+    local selvm=$(cat "${dialogout}")
     rm -f "${dialogout}"
     case $ret in
         0)
             # Clean exit, means selected a VM, lets call its action menu
-            select_action ${selectedvm}
+            select_action ${selvm}
             ;;
         2)
             # Hoowah, help? Go away.
@@ -207,7 +216,7 @@ function select_action {
         return 2
     fi
     set +e
-    STATE=$(${SUDO} ${VIRSH} domstate $selvm 2>/dev/null)
+    STATE=$(${SUDO} ${VIRSH} domstate ${selvm} 2>/dev/null)
     ret=$?
     set -e
     if [ ${ret} -ne 0 ]; then
@@ -219,7 +228,7 @@ function select_action {
         TEMPFILES="${TEMPFILES} dialogout"
         set +e
         dialog --backtitle "KVM Shell ${VERSION}" \
-            --title "User $USER - please select action for VM ${selvm} (${STATE})" \
+            --title "User ${USER} - please select action for VM ${selvm} (${STATE})" \
             --cancel-label "Main Menu" --ok-label "Select Action" \
             --help-button --timeout ${TIMEOUTSECS} \
             --menu "Available actions for VM ${selvm} ($STATE):" 15 65 10 \
@@ -233,21 +242,21 @@ function select_action {
             "mainmenu" "Back to main menu" 2>${dialogout}
         ret=$?
         set -e
-        local selectedaction=$(cat "${dialogout}")
+        local selact=$(cat "${dialogout}")
         rm -f "${dialogout}"
         clear
         case ${ret} in
             0)
-                case ${selectedaction} in
+                case ${selact} in
                     console)
                         echo "Remember, you can leave the console with Strg+]"
                         echo "Also, you may need to hit Enter once to see anything"
                         echo ""
-                        ${SUDO} ${VIRSH} ${selectedaction} ${selvm}
+                        ${SUDO} ${VIRSH} ${selact} ${selvm}
                         ;;
                     dominfo|start|shutdown|reboot|destroy)
                         set +e
-                        ${SUDO} ${VIRSH} ${selectedaction} ${selvm}
+                        ${SUDO} ${VIRSH} ${selact} ${selvm}
                         set -e
                         ;;
                     rdns)