aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorach61@labyrinth.cl.cam.ac.uk <ach61@labyrinth.cl.cam.ac.uk>2003-05-20 17:49:11 +0000
committerach61@labyrinth.cl.cam.ac.uk <ach61@labyrinth.cl.cam.ac.uk>2003-05-20 17:49:11 +0000
commita1f732504e2c65836b08c9129902b3315f59b294 (patch)
tree861dca095e0984b05c47af6703ea177d64fc3b86 /tools
parent5bb16295d0ef25d6ee3580c5a74184584ad1ef4a (diff)
downloadxen-a1f732504e2c65836b08c9129902b3315f59b294.tar.gz
xen-a1f732504e2c65836b08c9129902b3315f59b294.tar.bz2
xen-a1f732504e2c65836b08c9129902b3315f59b294.zip
bitkeeper revision 1.246 (3eca6a979guOx5GLVimvVvJLI_a1Ag)
additional error checking and input validation
Diffstat (limited to 'tools')
-rw-r--r--tools/control/README-xenctl45
-rw-r--r--tools/control/src/uk/ac/cam/cl/xeno/xenctl/Library.java17
-rw-r--r--tools/control/src/uk/ac/cam/cl/xeno/xenctl/RootBean.java24
-rw-r--r--tools/control/web/tmpl/dom-delr.tmpl11
-rw-r--r--tools/control/web/tmpl/dom-star.tmpl15
-rw-r--r--tools/control/web/tmpl/dom-stpr.tmpl11
-rw-r--r--tools/control/web/tmpl/vd-par.tmpl32
-rw-r--r--tools/control/web/tmpl/vd-vbdcr.tmpl67
-rw-r--r--tools/control/web/tmpl/vd-vdcr.tmpl73
-rw-r--r--tools/control/web/tmpl/vd-vdrr.tmpl55
10 files changed, 267 insertions, 83 deletions
diff --git a/tools/control/README-xenctl b/tools/control/README-xenctl
new file mode 100644
index 0000000000..379ef28e71
--- /dev/null
+++ b/tools/control/README-xenctl
@@ -0,0 +1,45 @@
+
+some notes on configuring xenctl...
+
+to build:
+
+ # edit xeno.bk/tools/control/build.properties
+ # change manger.url to your xenoserver: mousetrap-0.xeno.cl.cam.ac.uk
+ # change build.home to your xeno.bk path
+ export PATH=/usr/groups/xeno/build_tools/bin:${PATH}
+ # this next step has already been done.
+ # cp $CATALINA_HOME/server/lib/catalina-ant.jar $ANT_HOME/lib
+ cd xeno.bk/tools/control
+ make
+ cd xeno.bk/tools/internal
+ make
+
+to setup:
+
+ ## expand the jakarta (aka catalina) tree somewhere accessible by dom0
+ export ROOTDIR=/anfs/scratch/labyrinth/ach61
+ cd $ROOTDIR
+ tar zxf /usr/groups/xeno/archive/tomcat-4.1.24.tar.gz
+ export CATALINA_HOME=$ROOTDIR/jakarta-tomcat-4.1.24
+ export JAVA_HOME=/usr/groups/xeno/build_tools/java-1.4.1
+
+ ## edit $CATALINA_HOME/conf/server.xml, change port 8080 to port 80
+ cp $CATALINA_HOME/conf/server.xml $CATALINA_HOME/conf/server.orig
+ sed 's/8080/80/g' $CATALINA_HOME/conf/server.orig > $CATALINA_HOME/conf/server.xml
+
+ ## install the xenctl web archive
+ cp xeno.bk/tools/control/dist/xenctl-0.1-dev.war $CATALINA_HOME/webapps/xenctl.war
+ cp xeno.bk/tools/control/domctl.xml /var/lib/xen
+
+ ## either edit xi_tools_dir in domctl.xml or copy the binaries
+ # find xeno.bk/tools/internal -perm +111 -type f -exec cp {} /usr/local/bin \;
+
+to run:
+ $CATALINA_HOME/bin/startup.sh
+ # point your browser at hostname-0.xeno.cl.cam.ac.uk:80/xenctl
+
+
+for development:
+ ## to "make install" in xeno.bk/tools/control instead of copying the war file
+ cp $CATALINA_HOME/conf/tomcat-users.xml $CATALINA_HOME/conf/tomcat-users.orig
+ sed -e 's/<tomcat-users>/<tomcat-users>\ <role rolename="standard"\/>\ <role rolename="manager"\/>\ <user username="hobbes" password="tiger" roles="standard,manager"\/>/' $CATALINA_HOME/conf/tomcat-users.orig > $CATALINA_HOME/conf/tomcat-users.xml
diff --git a/tools/control/src/uk/ac/cam/cl/xeno/xenctl/Library.java b/tools/control/src/uk/ac/cam/cl/xeno/xenctl/Library.java
index 0679ccaedd..27748b5f48 100644
--- a/tools/control/src/uk/ac/cam/cl/xeno/xenctl/Library.java
+++ b/tools/control/src/uk/ac/cam/cl/xeno/xenctl/Library.java
@@ -64,6 +64,12 @@ Library
{
String substring = size;
int suffix = 1;
+ long value = 0;
+
+ if (size == null)
+ {
+ return 0;
+ }
if ((substring = check(size, 'm')) != null)
{
@@ -94,7 +100,16 @@ Library
substring = size;
}
- return Long.decode(substring).longValue() * suffix;
+ try
+ {
+ value = Long.decode(substring).longValue() * suffix;
+ }
+ catch (NumberFormatException e)
+ {
+ value = 0;
+ }
+
+ return value;
}
static String
diff --git a/tools/control/src/uk/ac/cam/cl/xeno/xenctl/RootBean.java b/tools/control/src/uk/ac/cam/cl/xeno/xenctl/RootBean.java
index 08f388dccb..668f922129 100644
--- a/tools/control/src/uk/ac/cam/cl/xeno/xenctl/RootBean.java
+++ b/tools/control/src/uk/ac/cam/cl/xeno/xenctl/RootBean.java
@@ -71,14 +71,19 @@ RootBean
Partition p = pm.get_partition(partition);
String result="done";
int loop;
+ long size;
if (p == null)
{
return (" eh? what partition: " + partition);
}
- vdm.add_xeno_partition(p,
- Library.parse_size(chunksize)/default_sector_size);
+ size = Library.parse_size(chunksize) / default_sector_size;
+ if (size == 0)
+ {
+ return ("error: invalid chunk size");
+ }
+ vdm.add_xeno_partition(p, size);
pm.add_xeno_partition(p);
/* return pm.dump(true); */
@@ -110,9 +115,15 @@ RootBean
{
VirtualDisk vd;
Date date = new Date();
+ long parse_size;
- vd = vdm.create_virtual_disk(name,
- Library.parse_size(size)/default_sector_size,
+
+ parse_size = Library.parse_size(size)/default_sector_size;
+ if (parse_size == 0)
+ {
+ return ("error: invalid size");
+ }
+ vd = vdm.create_virtual_disk(name, parse_size,
new Date(date.getTime() + expiry));
return ("Virtual Disk created with key: " + vd.get_key());
@@ -122,6 +133,11 @@ RootBean
public String
doDeleteVirtualDisk (String key)
{
+ if (key == null ||
+ key.trim().equals(""))
+ {
+ return ("error: no virtual disk specified");
+ }
vdm.delete_virtual_disk(key);
return ("okay");
diff --git a/tools/control/web/tmpl/dom-delr.tmpl b/tools/control/web/tmpl/dom-delr.tmpl
index 0693570f7a..04218eb72b 100644
--- a/tools/control/web/tmpl/dom-delr.tmpl
+++ b/tools/control/web/tmpl/dom-delr.tmpl
@@ -22,13 +22,22 @@ INCLUDE&dommenu.tmpl
String domains[] = hsrw.getParameterValues("dom");
boolean force = hsrw.getParameter("force").equals("true");
- for (int i = 0; i < domains.length; i++)
+ if (domains == null || domains.length == 0)
{
%>
+Error: no domain specified.<br>
+<%
+ }
+ else
+ {
+ for (int i = 0; i < domains.length; i++)
+ {
+%>
result <%= domains[i] %> =
<%= command_destroy.executeCommand(d, Integer.parseInt(domains[i]),
force) %> <br>
<%
+ }
}
%>
diff --git a/tools/control/web/tmpl/dom-star.tmpl b/tools/control/web/tmpl/dom-star.tmpl
index cd7e27abd4..2c3b56ef3d 100644
--- a/tools/control/web/tmpl/dom-star.tmpl
+++ b/tools/control/web/tmpl/dom-star.tmpl
@@ -21,13 +21,22 @@ INCLUDE&dommenu.tmpl
String domains[] = hsrw.getParameterValues("dom");
- for (int i = 0; i < domains.length; i++)
+ if (domains == null || domains.length == 0)
{
%>
-result <%= domains[i] %> =
- <%= command_start.executeCommand(d, Integer.parseInt(domains[i])) %> <br>
+Error: no domain specified.<br>
<%
}
+ else
+ {
+ for (int i = 0; i < domains.length; i++)
+ {
+%>
+result <%= domains[i] %> =<br>
+<%= command_start.executeCommand(d, Integer.parseInt(domains[i])) %> <br>
+<%
+ }
+ }
%>
</td>
diff --git a/tools/control/web/tmpl/dom-stpr.tmpl b/tools/control/web/tmpl/dom-stpr.tmpl
index 8c0016e89b..a2eb6b23a6 100644
--- a/tools/control/web/tmpl/dom-stpr.tmpl
+++ b/tools/control/web/tmpl/dom-stpr.tmpl
@@ -21,12 +21,21 @@ INCLUDE&dommenu.tmpl
String domains[] = hsrw.getParameterValues("dom");
- for (int i = 0; i < domains.length; i++)
+ if (domains == null || domains.length == 0)
{
%>
+Error: no domain specified.<br>
+<%
+ }
+ else
+ {
+ for (int i = 0; i < domains.length; i++)
+ {
+%>
result <%= domains[i] %> =
<%= command_stop.executeCommand(d, Integer.parseInt(domains[i])) %> <br>
<%
+ }
}
%>
diff --git a/tools/control/web/tmpl/vd-par.tmpl b/tools/control/web/tmpl/vd-par.tmpl
index 3a7f5ec3b9..b72e99b814 100644
--- a/tools/control/web/tmpl/vd-par.tmpl
+++ b/tools/control/web/tmpl/vd-par.tmpl
@@ -17,22 +17,34 @@ INCLUDE&vdmenu.tmpl
HttpServletRequestWrapper hsrw = new HttpServletRequestWrapper(request);
String partitions[] = hsrw.getParameterValues("p");
- String size = hsrw.getParameter("chunk").trim() +
- hsrw.getParameter("chunkunits").trim();
+ String size = null;
- for (int i = 0; i < partitions.length; i++)
+ if (partitions == null || partitions.length == 0)
{
%>
-p = <%= root.doAddPartition(partitions[i], size) %> <br>
+Error: No partitions chosen.<br>
<%
}
+ else if (hsrw.getParameter("chunk") == null ||
+ hsrw.getParameter("chunk").trim().equals(""))
+ {
+%>
+Error: chunk size not specified.<br>
+<%
+ }
+ else
+ {
+ size = hsrw.getParameter("chunk").trim() +
+ hsrw.getParameter("chunkunits").trim();
+ for (int i = 0; i < partitions.length; i++)
+ {
+%>
+output[<%= i %>] =<br>
+<%= root.doAddPartition(partitions[i], size) %> <br>
+<%
+ }
+ }
%>
-chunk = <%= hsrw.getParameter("chunk") %>
-<br>
-chunkunits = <%= hsrw.getParameter("chunkunits") %>
-<br>
-size = <%= size %>
-<br>
<%
diff --git a/tools/control/web/tmpl/vd-vbdcr.tmpl b/tools/control/web/tmpl/vd-vbdcr.tmpl
index 78d1d74c6e..656be575fc 100644
--- a/tools/control/web/tmpl/vd-vbdcr.tmpl
+++ b/tools/control/web/tmpl/vd-vbdcr.tmpl
@@ -15,20 +15,61 @@ INCLUDE&vdmenu.tmpl
<%
HttpServletRequestWrapper hsrw = new HttpServletRequestWrapper(request);
+
+ if (hsrw.getParameter("vd") == null ||
+ hsrw.getParameter("vd").trim().equals(""))
+ {
+%>
+Error: No virtual disk chosen.<br>
+<%
+ }
+ else if (hsrw.getParameter("domain") == null ||
+ hsrw.getParameter("domain").trim().equals(""))
+ {
+%>
+Error: No domain specified.<br>
+<%
+ }
+ else if (hsrw.getParameter("vbd") == null ||
+ hsrw.getParameter("vbd").trim().equals(""))
+ {
+%>
+Error: No virtual block device number specified.<br>
+<%
+ }
+ else
+ {
+ int domain = -1;
+ int vbd = -1;
+
+ try
+ {
+ domain = Integer.decode(hsrw.getParameter("domain")).intValue();
+ vbd = Integer.decode(hsrw.getParameter("vbd")).intValue();
+%>
+output =<br>
+<%= root.doCreateVirtualBlockDevice(hsrw.getParameter("vd"),
+ domain, vbd,
+ hsrw.getParameter("mode")) %>
+<%
+ }
+ catch (NumberFormatException e)
+ {
+ if (domain == -1)
+ {
+%>
+Error: invalid domain specification.<br>
+<%
+ }
+ else
+ {
+%>
+Error: invalid virtual block device number specification.<br>
+<%
+ }
+ }
+ }
%>
-output = <%= root.doCreateVirtualBlockDevice(hsrw.getParameter("vd"),
- Integer.decode(hsrw.getParameter("domain")).intValue(),
- Integer.decode(hsrw.getParameter("vbd")).intValue(),
- hsrw.getParameter("mode"))
- %>
-<br>
-vd = <%= hsrw.getParameter("vd") %>
-<br>
-domain = <%= hsrw.getParameter("domain") %>
-<br>
-vbd = <%= hsrw.getParameter("vbd") %>
-<br>
-mode = <%= hsrw.getParameter("mode") %>
<%
root.doFlushState();
diff --git a/tools/control/web/tmpl/vd-vdcr.tmpl b/tools/control/web/tmpl/vd-vdcr.tmpl
index 85936cdd95..08e63b2e90 100644
--- a/tools/control/web/tmpl/vd-vdcr.tmpl
+++ b/tools/control/web/tmpl/vd-vdcr.tmpl
@@ -16,39 +16,64 @@ INCLUDE&vdmenu.tmpl
<%
HttpServletRequestWrapper hsrw = new HttpServletRequestWrapper(request);
- String size = hsrw.getParameter("size").trim() +
- hsrw.getParameter("sizeunits").trim();
- long expiry = Long.decode(hsrw.getParameter("expiry")).longValue();
+ String size = null;
+ String expiry_string = null;
+ long expiry = 0;
- /* not perfect, but good enough for now... */
- if ( hsrw.getParameter("expiryunits").equals("d"))
+ if (hsrw.getParameter("size") == null ||
+ hsrw.getParameter("size").trim().equals(""))
{
- expiry *= 24 * 60 * 60 * 1000;
- }
- else if ( hsrw.getParameter("expiryunits").equals("w"))
- {
- expiry *= 24 * 60 * 60 * 1000 * 7;
+%>
+Error: size not specified.<br>
+<%
}
- else if ( hsrw.getParameter("expiryunits").equals("m"))
+ else if (hsrw.getParameter("expiry") == null ||
+ hsrw.getParameter("expiry").trim().equals(""))
{
- expiry *= 24 * 60 * 60 * 1000 * 30;
+%>
+Error: expiry time not specified.<br>
+<%
}
- else if ( hsrw.getParameter("expiryunits").equals("y"))
+ else
{
- expiry *= 24 * 60 * 60 * 1000 * 365;
- }
+ size = hsrw.getParameter("size").trim() +
+ hsrw.getParameter("sizeunits").trim();
+
+ try
+ {
+ expiry = Long.decode(hsrw.getParameter("expiry")).longValue();
+ /* not perfect, but good enough for now... */
+ if ( hsrw.getParameter("expiryunits").equals("d"))
+ {
+ expiry *= 24 * 60 * 60 * 1000;
+ }
+ else if ( hsrw.getParameter("expiryunits").equals("w"))
+ {
+ expiry *= 24 * 60 * 60 * 1000 * 7;
+ }
+ else if ( hsrw.getParameter("expiryunits").equals("m"))
+ {
+ expiry *= 24 * 60 * 60 * 1000 * 30;
+ }
+ else if ( hsrw.getParameter("expiryunits").equals("y"))
+ {
+ expiry *= 24 * 60 * 60 * 1000 * 365;
+ }
%>
-output = <%= root.doCreateVirtualDisk( hsrw.getParameter("name"),
- size, expiry)
- %>
-<br>
-size = <%= size %>
-<br>
-expiry = <%= hsrw.getParameter("expiry") %>
-<br>
-expiryunits = <%= hsrw.getParameter("expiryunits") %>
+output =<br>
+<%= root.doCreateVirtualDisk( hsrw.getParameter("name"), size, expiry) %>
<br>
+<%
+ }
+ catch (NumberFormatException e)
+ {
+%>
+Error: invalid expiry time specification.<br>
+<%
+ }
+ }
+%>
<%
root.doFlushState();
diff --git a/tools/control/web/tmpl/vd-vdrr.tmpl b/tools/control/web/tmpl/vd-vdrr.tmpl
index bf93429b26..068b283056 100644
--- a/tools/control/web/tmpl/vd-vdrr.tmpl
+++ b/tools/control/web/tmpl/vd-vdrr.tmpl
@@ -1,4 +1,4 @@
-Refresh Virtual Disk Results
+Refresh Virtual Disk
SECTION&XenoServers
BREADCRUMB&Virtual Disk Manager&vd.jsp
@@ -14,34 +14,43 @@ INCLUDE&vdmenu.tmpl
HttpServletRequestWrapper hsrw = new HttpServletRequestWrapper(request);
String vds[] = hsrw.getParameterValues("vd");
- long expiry = Long.decode(hsrw.getParameter("expiry")).longValue();
+ long expiry;
- /* not perfect, but good enough for now... */
- if ( hsrw.getParameter("expiryunits").equals("d"))
- {
- expiry *= 24 * 60 * 60 * 1000;
- }
- else if ( hsrw.getParameter("expiryunits").equals("w"))
+ if (vds == null || vds.length == 0)
{
- expiry *= 24 * 60 * 60 * 1000 * 7;
- }
- else if ( hsrw.getParameter("expiryunits").equals("m"))
- {
- expiry *= 24 * 60 * 60 * 1000 * 30;
+%>
+Error: No virtual disk chosen.<br>
+<%
}
- else if ( hsrw.getParameter("expiryunits").equals("y"))
+ else if (hsrw.getParameter("expiry") == null ||
+ hsrw.getParameter("expiry").trim().equals(""))
{
- expiry *= 24 * 60 * 60 * 1000 * 365;
- }
-
- if (vds == null)
- {
%>
-no virtual disks selected.
+Error: expiry time not specified.<br>
<%
}
else
{
+ expiry = Long.decode(hsrw.getParameter("expiry")).longValue();
+
+ /* not perfect, but good enough for now... */
+ if ( hsrw.getParameter("expiryunits").equals("d"))
+ {
+ expiry *= 24 * 60 * 60 * 1000;
+ }
+ else if ( hsrw.getParameter("expiryunits").equals("w"))
+ {
+ expiry *= 24 * 60 * 60 * 1000 * 7;
+ }
+ else if ( hsrw.getParameter("expiryunits").equals("m"))
+ {
+ expiry *= 24 * 60 * 60 * 1000 * 30;
+ }
+ else if ( hsrw.getParameter("expiryunits").equals("y"))
+ {
+ expiry *= 24 * 60 * 60 * 1000 * 365;
+ }
+
for (int i = 0; i < vds.length; i++)
{
%>
@@ -51,12 +60,6 @@ vd = <%= root.doRefreshVirtualDisk(vds[i], expiry) %> <br>
}
%>
-<br>
-expiry = <%= hsrw.getParameter("expiry") %>
-<br>
-expiryunits = <%= hsrw.getParameter("expiryunits") %>
-<br>
-
<%
root.doFlushState();
%>