diff options
author | ach61@labyrinth.cl.cam.ac.uk <ach61@labyrinth.cl.cam.ac.uk> | 2003-05-20 17:49:11 +0000 |
---|---|---|
committer | ach61@labyrinth.cl.cam.ac.uk <ach61@labyrinth.cl.cam.ac.uk> | 2003-05-20 17:49:11 +0000 |
commit | a1f732504e2c65836b08c9129902b3315f59b294 (patch) | |
tree | 861dca095e0984b05c47af6703ea177d64fc3b86 /tools | |
parent | 5bb16295d0ef25d6ee3580c5a74184584ad1ef4a (diff) | |
download | xen-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-xenctl | 45 | ||||
-rw-r--r-- | tools/control/src/uk/ac/cam/cl/xeno/xenctl/Library.java | 17 | ||||
-rw-r--r-- | tools/control/src/uk/ac/cam/cl/xeno/xenctl/RootBean.java | 24 | ||||
-rw-r--r-- | tools/control/web/tmpl/dom-delr.tmpl | 11 | ||||
-rw-r--r-- | tools/control/web/tmpl/dom-star.tmpl | 15 | ||||
-rw-r--r-- | tools/control/web/tmpl/dom-stpr.tmpl | 11 | ||||
-rw-r--r-- | tools/control/web/tmpl/vd-par.tmpl | 32 | ||||
-rw-r--r-- | tools/control/web/tmpl/vd-vbdcr.tmpl | 67 | ||||
-rw-r--r-- | tools/control/web/tmpl/vd-vdcr.tmpl | 73 | ||||
-rw-r--r-- | tools/control/web/tmpl/vd-vdrr.tmpl | 55 |
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(); %> |