Index: trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/etc/remctl/conf.d/sipb-xen-web
===================================================================
--- trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/etc/remctl/conf.d/sipb-xen-web	(revision 141)
+++ trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/etc/remctl/conf.d/sipb-xen-web	(revision 146)
@@ -1,5 +1,6 @@
-web lvcreate /usr/sbin/sipb-xen-lvcreate /etc/remctl/acl/web
-web lvremove /usr/sbin/sipb-xen-lvremove /etc/remctl/acl/web
-web lvrename /usr/sbin/sipb-xen-lvrename /etc/remctl/acl/web
+web lvcreate /usr/sbin/sipb-xen-lvm /etc/remctl/acl/web
+web lvremove /usr/sbin/sipb-xen-lvm /etc/remctl/acl/web
+web lvrename /usr/sbin/sipb-xen-lvm /etc/remctl/acl/web
+web lvresize /usr/sbin/sipb-xen-lvm /etc/remctl/acl/web
 web vmboot /usr/sbin/sipb-xen-boot /etc/remctl/acl/web
 web register /usr/sbin/remctl-update.sh /etc/remctl/acl/web
Index: trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/dispatch.sh
===================================================================
--- trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/dispatch.sh	(revision 141)
+++ trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/dispatch.sh	(revision 146)
@@ -11,18 +11,18 @@
 
 ACTION=$(echo "$0" | awk -F'.' '{print $2}')
-MACHINE="$1"
+ORIGMACHINE="$1"
+MACHINE="d_$ORIGMACHINE"
 
 case "$ACTION" in
     list|vcpu-list|destroy|create|uptime|shutdown)
         xm "$ACTION" "$MACHINE"
-        exit 0
 	;;
     reboot-with-cdrom)
 	xm shutdown "$MACHINE"
-	xm create sipb-database machine_name="$MACHINE" cdrom_image="$2"
+	xm create sipb-database machine_name="$ORIGMACHINE" cdrom_image="$2"
 	;;
     reboot)
 	if [ -n "$2" ]; then
-	    /usr/sbin/dispatch.reboot-with-cdrom.sh "$1" "$2" &
+	    /usr/sbin/dispatch.reboot-with-cdrom.sh "$ORIGMACHINE" "$2" &
 	else
 	    xm reboot "$MACHINE"
Index: trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/remctl-update.sh
===================================================================
--- trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/remctl-update.sh	(revision 141)
+++ trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/remctl-update.sh	(revision 146)
@@ -47,4 +47,13 @@
 }
 
+check_machine_name()
+{
+    machine="$1"
+    if ! perl -0e 'exit($ARGV[0] !~ /^[A-Za-z0-9][A-Za-z0-9._-]*$/)' -- "$machinename"; then
+	echo "Bad machine name"
+	exit 1
+    fi
+}
+
 case "$1" in
     moiragroup)
@@ -77,4 +86,5 @@
     unregister)
 	machine="$2"
+	check_machine_name "$machine"
 	rm -f "$ACLDIR"/"$machine"
 	rm -f "$MACHINEDIR"/"$machine"
@@ -84,4 +94,6 @@
         oldmachine="$2"
         newmachine="$3"
+	check_machine_name "$oldmachine"
+	check_machine_name "$newmachine"
         mv "$ACLDIR"/"$oldmachine" "$ACLDIR"/"$newmachine"
         rm -f "$MACHINEDIR"/"$oldmachine"
@@ -90,12 +102,5 @@
     register)
 	machine="$2"
-	if [ "$machine" == "Domain-0" ]; then
-	    echo "No, you can't control Domain 0"
-	    exit 1
-	fi
-	if [ -e /etc/xen/"$machine" ]; then
-	    echo "Machine already exists outside database"
-	    exit 1
-	fi
+	check_machine_name "$machine"
 	if [ -e "$ACLDIR"/"$machine" ]; then
 	    echo "Machine already registered"
Index: trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/sipb-xen-listvms
===================================================================
--- trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/sipb-xen-listvms	(revision 141)
+++ trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/sipb-xen-listvms	(revision 146)
@@ -1,3 +1,3 @@
 #!/bin/sh
 
-xm uptime
+xm uptime | sed -n 's/^d_// p'
Index: trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/sipb-xen-lvm
===================================================================
--- trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/sipb-xen-lvm	(revision 146)
+++ trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/sipb-xen-lvm	(revision 146)
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+
+import sys
+import os.path
+from subprocess import call
+
+def check(b):
+    if not b:
+        exit(1)
+
+vg = "xenvg"
+prefix = "d_"
+
+subcommand = sys.argv[1]
+machine = sys.argv[2]
+disk = sys.argv[3]
+lvname = prefix + machine + "_" + disk
+lvpath = "/dev/" + vg + "/" + lvname
+
+def ensureoff(machine):
+    # Make sure the machine is off, but we don't care about errors if it is already off.
+    rv = call(["/usr/sbin/xm", "destroy", prefix + machine]
+
+if subcommand == "lvremove":
+    rv = call(["/sbin/lvremove", "--force", lvpath])
+    ensureoff(machine)
+    if rv != 0:
+        print >>sys.stderr, "Error removing LV %s\n" %(lvname,)
+        sys.exit(1)
+else if subcommand == "lvresize":
+    size = sys.argv[4]
+    ensureoff(machine)
+    rv = call(["/sbin/lvresize", "-L", size + "M", lvpath])
+    if rv != 0:
+        print >>sys.stderr, "Error resizing LV %s\n" %(lvname,)
+        sys.exit(1)
+else if subcommand == "lvrename":
+    newmachine = sys.argv[4]
+    newlvname = prefix + newmachine + "_" + disk
+    ensureoff(machine)
+    ensureoff(newmachine)    
+    rv = call(["/sbin/lvrename", vg, lvname, newlvname])
+    if rv != 0:
+        print >>sys.stderr, "Error renaming LV %s\n" %(lvname,)
+        sys.exit(1)
+else if subcommand == "lvcreate":
+    size = sys.argv[4]
+    rv = call(["/sbin/lvcreate", "-L", size + "M", "-n", lvname, vg])
+    if rv != 0:
+        print >>sys.stderr, "Error creating LV %s\n" %(lvname,)
+        sys.exit(1)
+    
+else if subcommand == "lvcreate-all":
+    from sipb_xen_database import *
+    import re
+    connect('postgres://sipb-xen@sipb-xen-dev.mit.edu/sipb_xen')
+    for d in Disk.select():
+        check(re.match('^[A-Za-z0-9]+$', d.guest_device_name))
+        machine = Machine.get(d.machine_id)
+        check(re.match('^[A-Za-z0-9][A-Za-z0-9._-]*$', machine.name))
+        lvname = machine.name + "_" + d.guest_device_name
+        if not os.path.exists("/dev/%s/%s" % (vg, lvname)):
+            # LV doesn't exist
+            print >>sys.stderr, "Creating LV %s..." % (lvname,)
+            rv = call(["/sbin/lvcreate", "-L", str(d.size) + "M", "-n", lvname, vg])
+            if rv != 0:
+                print >>sys.stderr, "Error creating LV %s\n" %(lvname,)
+                sys.exit(1)
+
Index: trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/sipb-xen-lvremove
===================================================================
--- trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/sipb-xen-lvremove	(revision 141)
+++ 	(revision )
@@ -1,7 +1,0 @@
-#!/bin/sh
-machine="$2"
-disk="$3"
-
-if [ -e /etc/remctl/sipb-xen-auto/acl/"$machine" ]; then
-	/sbin/lvremove --force /dev/xenvg/"$machine"_"$disk"
-fi
Index: trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/sipb-xen-lvrename
===================================================================
--- trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/sipb-xen-lvrename	(revision 141)
+++ 	(revision )
@@ -1,8 +1,0 @@
-#!/bin/sh
-oldmachine="$2"
-newmachine="$3"
-disk="$4"
-
-if [ -e /etc/remctl/sipb-xen-auto/acl/"$oldmachine" ]; then
-	/sbin/lvrename xenvg "$oldmachine"_"$disk" "$newmachine"_"$disk"
-fi
