add reverse dns editing
authorJoerg Jaspert <joerg@debian.org>
Mon, 12 Dec 2011 21:47:23 +0000 (22:47 +0100)
committerJoerg Jaspert <joerg@debian.org>
Mon, 12 Dec 2011 21:47:23 +0000 (22:47 +0100)
Signed-off-by: Joerg Jaspert <joerg@debian.org>
kvm-shell

index 830bc32..884f140 100644 (file)
--- a/kvm-shell
+++ b/kvm-shell
@@ -41,6 +41,22 @@ VIRSH=/usr/bin/virsh
 TIMEOUTSECS=120
 MYEXIT=0
 TMPDIR=${TMPDIR:-"/tmp"}
+# Set to no if you do not want people to edit DNS information
+DO_RDNS="yes"
+# Where are the rdns files stored?
+# Files in that directory should be named after the VM they are for.
+# Inside kvm-shell they will just end up in an editor, whatever function
+# and format is required by the tool actually doing the rdns setup is up
+# to whatever, kvm-shell doesn't care
+# The files don't even need to be writable by the user, readable is enough.
+# (New version is edited in a tempfile, then given to RDNSSCRIPT)
+# Obviously RDNSSCRIPT should be able to replace them with the new version.
+RDNS=/etc/kvm-shell/rdns
+# A script to do whatever with the dns function after the editbox
+# is done. It gets two arguments:
+# 1 - the original file
+# 2 - the new edit from the user
+RDNSSCRIPT="${SUDO} /usr/local/bin/dodns"
 
 ########################################################################
 # Helper functions                                                     #
@@ -64,6 +80,48 @@ TEMPFILES=""
 ########################################################################
 ########################################################################
 
+########################################################################
+# Main functions come here                                             #
+########################################################################
+
+# Function to handle reverse DNS setup. Basically uses dialogs editbox
+# to let user edit a file, then hands that over to RDNSSCRIPT.
+# Arguments: VM name
+function revdns() {
+    local VM=${1:-""}
+    if [ -z ${VM} ]; then
+        # No VM, byebye
+        return
+    fi
+    local dnsfile="${RDNS}/${VM}"
+    if [ -f "${dnsfile}" ]; then
+        # edit it, put output into a tempfile for processing
+        dnsedit=$(mktemp -p "${TMPDIR}" kvmshell.XXXXXXXX)
+        TEMPFILES="${TEMPFILES} dnsedit"
+        set +e
+        dialog --backtitle "KVM Shell ${VERSION}" \
+            --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
+            0)
+                # Clean exit, means we have something to do
+                echo "Applying changes, please be patient..."
+                ${RDNSSCRIPT} "${dnsfile}" "${dnsedit}"
+                ;;
+            *)
+                # Anything else means we send em to the shredder...
+                echo "Break, not changing RDNS for ${VM}"
+                ;;
+        esac
+        rm -f "${dnsedit}"
+    fi
+}
+
+# Just split out a little helptext
 function helpbox() {
     set +e
     dialog --stdout --backtitle "KVM Shell ${VERSION}" \
@@ -185,6 +243,13 @@ function select_action {
                                set +e
                         ${SUDO} ${VIRSH} ${selectedaction} ${selvm}
                                set -e
+                    rdns)
+                        if [ "${DO_RDNS}" = "yes" ]; then
+                            revdns ${selvm}
+                        else
+                            echo "Sorry, admin disabled this function. Maybe you should poke them with a stick?"
+                            sleep 2
+                        fi
                         ;;
                     mainmenu)
                         return