tag 496419 + patch
thanks

Hi,

attached is a patch for a tentative 0.8.2-3.1, that aims at handling
temporary files more securely by designating ~/.convirt/tmp as their
base path.

I do not use convirt myself, so if this patch raises additional issues
please let me know; it should at least provide the basis for a better
fix, if need be.

Cheers,

--Seb
diff -u -r ../convirt-0.8.2.bak/appliance_image_conf.template 
./appliance_image_conf.template
--- ../convirt-0.8.2.bak/appliance_image_conf.template  2008-09-10 
15:45:35.000000000 -0700
+++ ./appliance_image_conf.template     2008-09-10 16:20:36.000000000 -0700
@@ -1,2 +1,2 @@
-VM_DISKS_DIR='/tmp'
+VM_DISKS_DIR='~/.convirt/tmp'
 VM_CONF_DIR='/etc/xen'
diff -u -r ../convirt-0.8.2.bak/config-scripts/xen-3.1/configure-xend.sh 
./config-scripts/xen-3.1/configure-xend.sh
--- ../convirt-0.8.2.bak/config-scripts/xen-3.1/configure-xend.sh       
2008-09-10 15:45:35.000000000 -0700
+++ ./config-scripts/xen-3.1/configure-xend.sh  2008-09-10 16:15:34.000000000 
-0700
@@ -32,6 +32,8 @@
     USE_SSL="SSL"
 fi
 
+TMP_FILE=`mktemp`
+
 OPENSSL=openssl
 if [ "$USE_SSL" == "SSL" ]; then
     python -c "import OpenSSL" &> /dev/null
@@ -61,7 +63,7 @@
     # A challenge password 
     # An optional company name 
 
-    cat  <<EOF > /tmp/open_ssl.res
+    cat  <<EOF > "${TMP_FILE}"
 US
 CA
 SF
@@ -76,9 +78,9 @@
     CSR=/etc/xen/xmlrpc.csr
     CRT=/etc/xen/xmlrpc.crt
     $OPENSSL genrsa -out $KEY 1024
-    $OPENSSL req -new -key $KEY -out $CSR < /tmp/open_ssl.res
+    $OPENSSL req -new -key $KEY -out $CSR < "${TMP_FILE}"
     $OPENSSL x509 -req -in $CSR -signkey $KEY -out $CRT
-    rm /tmp/open_ssl.res    
+    rm "${TMP_FILE}"    
 fi
 
 # Adjust the regexp for the config file
diff -u -r ../convirt-0.8.2.bak/config-scripts/xen-3.2/configure-xend.sh 
./config-scripts/xen-3.2/configure-xend.sh
--- ../convirt-0.8.2.bak/config-scripts/xen-3.2/configure-xend.sh       
2008-09-10 15:45:35.000000000 -0700
+++ ./config-scripts/xen-3.2/configure-xend.sh  2008-09-10 16:15:34.000000000 
-0700
@@ -32,6 +32,8 @@
     USE_SSL="SSL"
 fi
 
+TMP_FILE=`mktemp`
+
 OPENSSL=openssl
 if [ "$USE_SSL" == "SSL" ]; then
     python -c "import OpenSSL" &> /dev/null
@@ -61,7 +63,7 @@
     # A challenge password 
     # An optional company name 
 
-    cat  <<EOF > /tmp/open_ssl.res
+    cat  <<EOF > "${TMP_FILE}"
 US
 CA
 SF
@@ -76,9 +78,9 @@
     CSR=/etc/xen/xmlrpc.csr
     CRT=/etc/xen/xmlrpc.crt
     $OPENSSL genrsa -out $KEY 1024
-    $OPENSSL req -new -key $KEY -out $CSR < /tmp/open_ssl.res
+    $OPENSSL req -new -key $KEY -out $CSR < "${TMP_FILE}"
     $OPENSSL x509 -req -in $CSR -signkey $KEY -out $CRT
-    rm /tmp/open_ssl.res    
+    rm "${TMP_FILE}"    
 fi
 
 # Adjust the regexp for the config file
diff -u -r ../convirt-0.8.2.bak/debian/changelog ./debian/changelog
--- ../convirt-0.8.2.bak/debian/changelog       2008-09-10 15:45:35.000000000 
-0700
+++ ./debian/changelog  2008-09-10 16:16:35.000000000 -0700
@@ -1,3 +1,11 @@
+convirt (0.8.2-3.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Put all the required temporary files in ~/.convirt/tmp
+    (Closes: #496419).
+
+ -- Sebastien Delafond <[EMAIL PROTECTED]>  Wed, 10 Sep 2008 16:02:16 -0700
+
 convirt (0.8.2-3) unstable; urgency=low
 
   * Fixed (conflicting) dependencies on transitional package: Removed
diff -u -r ../convirt-0.8.2.bak/debian/convirt.sh ./debian/convirt.sh
--- ../convirt-0.8.2.bak/debian/convirt.sh      2008-09-10 15:45:35.000000000 
-0700
+++ ./debian/convirt.sh 2008-09-10 16:16:22.000000000 -0700
@@ -8,4 +8,7 @@
        exit 0
 fi
 
+mkdir -p $HOME/.convirt/tmp
+chmod 755 $HOME/.convirt/tmp
+
 PYTHONPATH=$PYTHONPATH:`convirt --xendir`/lib/python python 
/usr/share/convirt/src/convirt.py
diff -u -r ../convirt-0.8.2.bak/doc/manual.html ./doc/manual.html
--- ../convirt-0.8.2.bak/doc/manual.html        2008-09-10 15:45:35.000000000 
-0700
+++ ./doc/manual.html   2008-09-10 16:21:04.000000000 -0700
@@ -635,7 +635,7 @@
 fully addressed in the 'Image Builder's Guide.'<BR>
 </P>
 <P STYLE="margin-left: 0.42in"><strong><a 
name="initial_image_store_setup"></a>Initial setup : </strong>Out of the box 
the images supplied would work with default values. You might want to do some 
initial setup to suite to your environment. There are few options in the 
provisioning area that are worth mentioning.<br>
- - VM_DISKS_DIR : Location where disks for newly created VMs would be placed. 
Default /tmp. <br>
+ - VM_DISKS_DIR : Location where disks for newly created VMs would be placed. 
Default ~/.convirt/tmp. <br>
 - VM_CONF_DIR : Directory where the VM config files would be placed. Default 
/etc/xen<br>
 - http_proxy : Proxy to be used while provisioning. Default to no proxy 
(blank). The format for the proxy is http://myproxyserver:myproxyport<br>
   <br>
diff -u -r ../convirt-0.8.2.bak/image_store/CentOS_PV_Install/image.conf 
./image_store/CentOS_PV_Install/image.conf
--- ../convirt-0.8.2.bak/image_store/CentOS_PV_Install/image.conf       
2008-09-10 15:45:35.000000000 -0700
+++ ./image_store/CentOS_PV_Install/image.conf  2008-09-10 16:20:22.000000000 
-0700
@@ -5,7 +5,7 @@
 # kernel and ramdisk locations 
 
kernel_src="http://mirrors.usc.edu/pub/linux/distributions/centos/5/os/i386/images/xen/vmlinuz";
 
ramdisk_src="http://mirrors.usc.edu/pub/linux/distributions/centos/5/os/i386/images/xen/initrd.img";
-VM_DISKS_DIR='/tmp'
+VM_DISKS_DIR='~/.convirt/tmp'
 VM_CONF_DIR ='/etc/xen'
 xvda_disk_type='VBD'
 xvda_disk_create='yes'
diff -u -r ../convirt-0.8.2.bak/image_store/CentOS_PV_Install/provision.sh 
./image_store/CentOS_PV_Install/provision.sh
--- ../convirt-0.8.2.bak/image_store/CentOS_PV_Install/provision.sh     
2008-09-10 15:45:35.000000000 -0700
+++ ./image_store/CentOS_PV_Install/provision.sh        2008-09-10 
16:20:22.000000000 -0700
@@ -67,7 +67,7 @@
 source "$param_file"
 
 # check that we got all the params
-set > /tmp/set_output
+set > ~/.convirt/tmp/set_output
 
 # create a list from the disk directive
 disk_list=`python <<EOF
diff -u -r ../convirt-0.8.2.bak/image_store/common/functions 
./image_store/common/functions
--- ../convirt-0.8.2.bak/image_store/common/functions   2008-09-10 
15:45:35.000000000 -0700
+++ ./image_store/common/functions      2008-09-10 16:20:22.000000000 -0700
@@ -24,7 +24,7 @@
 #
 # --- usage --
 # SRC="http://www.google.com";
-# DEST="/tmp/google_home"
+# DEST="~/.convirt/tmp/google_home"
 # fetch_file $SRC $DEST
 # 
 #
diff -u -r ../convirt-0.8.2.bak/image_store/common/provision.sh 
./image_store/common/provision.sh
--- ../convirt-0.8.2.bak/image_store/common/provision.sh        2008-09-10 
15:45:35.000000000 -0700
+++ ./image_store/common/provision.sh   2008-09-10 16:20:22.000000000 -0700
@@ -67,7 +67,7 @@
 source "$param_file"
 
 # check that we got all the params
-set > /tmp/set_output
+set > ~/.convirt/tmp/set_output
 
 # create a list from the disk directive
 disk_list=`python <<EOF
diff -u -r ../convirt-0.8.2.bak/image_store/example/image.conf 
./image_store/example/image.conf
--- ../convirt-0.8.2.bak/image_store/example/image.conf 2008-09-10 
15:45:35.000000000 -0700
+++ ./image_store/example/image.conf    2008-09-10 16:20:22.000000000 -0700
@@ -47,7 +47,7 @@
 
 
 # Location to create new disk VBDs
-VM_DISKS_DIR='/tmp'
+VM_DISKS_DIR='~/.convirt/tmp'
 
 # Location of conf file
 VM_CONF_DIR='/etc/xen'
diff -u -r ../convirt-0.8.2.bak/image_store/example/provision.sh 
./image_store/example/provision.sh
--- ../convirt-0.8.2.bak/image_store/example/provision.sh       2008-09-10 
15:45:35.000000000 -0700
+++ ./image_store/example/provision.sh  2008-09-10 16:20:22.000000000 -0700
@@ -67,7 +67,7 @@
 source "$param_file"
 
 # check that we got all the params
-set > /tmp/set_output
+set > ~/.convirt/tmp/set_output
 
 # create a list from the disk directive
 disk_list=`python <<EOF
diff -u -r ../convirt-0.8.2.bak/image_store/Fedora_PV_Install/image.conf 
./image_store/Fedora_PV_Install/image.conf
--- ../convirt-0.8.2.bak/image_store/Fedora_PV_Install/image.conf       
2008-09-10 15:45:35.000000000 -0700
+++ ./image_store/Fedora_PV_Install/image.conf  2008-09-10 16:20:22.000000000 
-0700
@@ -9,7 +9,7 @@
 xvda_disk_type='VBD'
 xvda_disk_create='yes'
 xvda_disk_size=5000
-VM_DISKS_DIR='/tmp'
+VM_DISKS_DIR='~/.convirt/tmp'
 VM_CONF_DIR='/etc/xen'
 
 #customizable_options=['xvda_disk_create', 'xvda_disk_size', 'xvda_disk_type']
diff -u -r ../convirt-0.8.2.bak/image_store/Fedora_PV_Install/provision.sh 
./image_store/Fedora_PV_Install/provision.sh
--- ../convirt-0.8.2.bak/image_store/Fedora_PV_Install/provision.sh     
2008-09-10 15:45:35.000000000 -0700
+++ ./image_store/Fedora_PV_Install/provision.sh        2008-09-10 
16:20:22.000000000 -0700
@@ -67,7 +67,7 @@
 source "$param_file"
 
 # check that we got all the params
-set > /tmp/set_output
+set > ~/.convirt/tmp/set_output
 
 # create a list from the disk directive
 disk_list=`python <<EOF
diff -u -r ../convirt-0.8.2.bak/image_store/Linux_CD_Install/image.conf 
./image_store/Linux_CD_Install/image.conf
--- ../convirt-0.8.2.bak/image_store/Linux_CD_Install/image.conf        
2008-09-10 15:45:35.000000000 -0700
+++ ./image_store/Linux_CD_Install/image.conf   2008-09-10 16:20:22.000000000 
-0700
@@ -1,7 +1,7 @@
 # config file for kicking off CDROM install 
 # assume one disk
 
-VM_DISKS_DIR='/tmp'
+VM_DISKS_DIR='~/.convirt/tmp'
 VM_CONF_DIR='/etc/xen'
 hda_disk_type='VBD'
 hda_disk_create='yes'
diff -u -r ../convirt-0.8.2.bak/image_store/Linux_CD_Install/provision.sh 
./image_store/Linux_CD_Install/provision.sh
--- ../convirt-0.8.2.bak/image_store/Linux_CD_Install/provision.sh      
2008-09-10 15:45:35.000000000 -0700
+++ ./image_store/Linux_CD_Install/provision.sh 2008-09-10 16:20:22.000000000 
-0700
@@ -67,7 +67,7 @@
 source "$param_file"
 
 # check that we got all the params
-set > /tmp/set_output
+set > ~/.convirt/tmp/set_output
 
 # create a list from the disk directive
 disk_list=`python <<EOF
diff -u -r ../convirt-0.8.2.bak/image_store/_template_/provision.sh 
./image_store/_template_/provision.sh
--- ../convirt-0.8.2.bak/image_store/_template_/provision.sh    2008-09-10 
15:45:35.000000000 -0700
+++ ./image_store/_template_/provision.sh       2008-09-10 16:20:22.000000000 
-0700
@@ -67,7 +67,7 @@
 source "$param_file"
 
 # check that we got all the params
-set > /tmp/set_output
+set > ~/.convirt/tmp/set_output
 
 # create a list from the disk directive
 disk_list=`python <<EOF
diff -u -r ../convirt-0.8.2.bak/image_store/Windows_CD_Install/image.conf 
./image_store/Windows_CD_Install/image.conf
--- ../convirt-0.8.2.bak/image_store/Windows_CD_Install/image.conf      
2008-09-10 15:45:35.000000000 -0700
+++ ./image_store/Windows_CD_Install/image.conf 2008-09-10 16:20:22.000000000 
-0700
@@ -1,7 +1,7 @@
 # config file for kicking off CDROM install 
 # assuming one disk
 
-VM_DISKS_DIR='/tmp'
+VM_DISKS_DIR='~/.convirt/tmp'
 VM_CONF_DIR='/etc/xen'
 hda_disk_type='VBD'
 hda_disk_create='yes'
diff -u -r ../convirt-0.8.2.bak/image_store/Windows_CD_Install/provision.sh 
./image_store/Windows_CD_Install/provision.sh
--- ../convirt-0.8.2.bak/image_store/Windows_CD_Install/provision.sh    
2008-09-10 15:45:35.000000000 -0700
+++ ./image_store/Windows_CD_Install/provision.sh       2008-09-10 
16:20:22.000000000 -0700
@@ -67,7 +67,7 @@
 source "$param_file"
 
 # check that we got all the params
-set > /tmp/set_output
+set > ~/.convirt/tmp/set_output
 
 # create a list from the disk directive
 disk_list=`python <<EOF
diff -u -r ../convirt-0.8.2.bak/src/constants.py ./src/constants.py
--- ../convirt-0.8.2.bak/src/constants.py       2008-09-10 15:45:35.000000000 
-0700
+++ ./src/constants.py  2008-09-10 16:17:23.000000000 -0700
@@ -17,6 +17,7 @@
 #    http://www.fsf.org/licensing/licenses/lgpl.txt
 #
 
+import os.path
 
 _version = "0.8.2"
 fox_header = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.4) 
Gecko/20070603 Fedora/2.0.0.4-2.fc7 Firefox/2.0.0.4 ConVirt/" + _version
@@ -26,6 +27,8 @@
 # constants definitions
 #
 
+prop_tmp_dir = os.path.expanduser('~/.conwirt/tmp')
+
 # config properties
 prop_disks_dir = 'disks_dir'
 prop_snapshots_dir = 'snapshots_dir'
diff -u -r ../convirt-0.8.2.bak/src/GridManager.py ./src/GridManager.py
--- ../convirt-0.8.2.bak/src/GridManager.py     2008-09-10 15:45:35.000000000 
-0700
+++ ./src/GridManager.py        2008-09-10 15:57:06.000000000 -0700
@@ -323,7 +323,7 @@
                     # create a temp file on the client node.
                     # and move it to the dest node.
                     (t_handle, t_name) = tempfile.mkstemp(prefix=dom_name,
-                                                          dir="/tmp")
+                                                          dir=prop_tmp_dir)
                     try:
                         source_node.node_proxy.get(config.filename,
                                                    t_name)
diff -u -r ../convirt-0.8.2.bak/src/KVMProxy.py ./src/KVMProxy.py
--- ../convirt-0.8.2.bak/src/KVMProxy.py        2008-09-10 15:45:35.000000000 
-0700
+++ ./src/KVMProxy.py   2008-09-10 15:56:33.000000000 -0700
@@ -26,6 +26,7 @@
 from phelper import *
 from NodeProxy import *
 
+import constants
 import select
 
 QEMU_PROMPT = "(qemu)"
@@ -258,7 +259,7 @@
         # The following is done to have the convention and
         # temporarily have the name of VM available in the command line.
         if not config.get("monitor"):
-            cmdline = cmdline + " -monitor unix:/tmp/" + config.get("name") + \
+            cmdline = cmdline + " -monitor unix:" + constants.prop_tmp_dir + 
"/" + config.get("name") + \
                       ",server,nowait"
                     
                     # Add handling of nested options
@@ -354,7 +355,7 @@
     config["type"]="KVM"
     config["hda"]="/mnt/home/jd/kvm/kvm-19/ubuntu-6.qcow"
     config["m"] = 1024
-    config["monitor"] = "unix:/tmp/xyz"
+    config["monitor"] = "unix:" + constants.prop_tmp_dir + "/xyz"
     config["vnc"] = ":5"
 
  ##   vmm.start(config)
diff -u -r ../convirt-0.8.2.bak/src/NodeProxy.py ./src/NodeProxy.py
--- ../convirt-0.8.2.bak/src/NodeProxy.py       2008-09-10 15:45:35.000000000 
-0700
+++ ./src/NodeProxy.py  2008-09-10 15:55:34.000000000 -0700
@@ -30,6 +30,8 @@
 import threading
 import _threading_local
 
+import constants
+
 class CommandException(Exception):
     def __init__(self, errno, description):
         Exception.__init__(self, errno, description)
@@ -402,19 +404,19 @@
     sys.exit(1)
     
     # Test FTP
-    node.put("/tmp/send", "/tmp/send_r")
-    node.get("/tmp/send_r", "/tmp/received")
+    node.put(constants.prop_tmp_dir + "/send", constants.prop_tmp_dir + 
"/send_r")
+    node.get(constants.prop_tmp_dir + "/send_r", constants.prop_tmp_dir + 
"/received")
 
-    fd = node.open('/tmp/test_writable','w')
+    fd = node.open(constants.prop_tmp_dir + '/test_writable','w')
     off = 1024L
     fd.seek(off,0)
     fd.write('\x00')
     fd.close()
 
-    print 'exists?: ',node.file_exists('/tmp/test_writable')
-    print 'isWritable?: ', node.file_is_writable('/tmp/test_writable')
-    node.remove('/tmp/test_writable')
-    print 'exists?: ', node.file_exists('/tmp/test_writable')
+    print 'exists?: ',node.file_exists(constants.prop_tmp_dir + 
'/test_writable')
+    print 'isWritable?: ', node.file_is_writable(constants.prop_tmp_dir + 
'/test_writable')
+    node.remove(constants.prop_tmp_dir + '/test_writable')
+    print 'exists?: ', node.file_exists(constants.prop_tmp_dir + 
'/test_writable')
     
 
     sys.exit(0)
@@ -446,23 +448,23 @@
         f.close()
 
         try:
-            node.mkdir("/tmp/node_test")
+            node.mkdir(constants.prop_tmp_dir + "/node_test")
         except (OSError, IOError), err:
             print str(err)
 
-        w = node.open("/tmp/node_test/test", "w")
+        w = node.open(constants.prop_tmp_dir + "/node_test/test", "w")
         w.writelines(["hello this is test", "hello this is second test"])
         w.close()
 
-        r = node.open("/tmp/node_test/test")
+        r = node.open(constants.prop_tmp_dir + "/node_test/test")
         x = r.readline()
         while x != None and x != "": 
             print x
             x= r.readline()
         r.close()
         
-        node.remove("/tmp/node_test/test")
-        node.rmdir("/tmp/node_test")
+        node.remove(constants.prop_tmp_dir + "/node_test/test")
+        node.rmdir(constants.prop_tmp_dir + "/node_test")
 
     
         
@@ -470,11 +472,11 @@
         print output
         print "EXIT CODE = ", code
 
-        output,code = node.exec_cmd('find /tmp')
+        output,code = node.exec_cmd('find ' + constants.prop_tmp_dir)
         print output
         print "EXIT CODE = ", code
 
-        output,code = node.exec_cmd('junk /tmp')
+        output,code = node.exec_cmd('junk ' + constants.prop_tmp_dir)
         print output
         print "EXIT CODE = ", code
 
diff -u -r ../convirt-0.8.2.bak/src/utils.py ./src/utils.py
--- ../convirt-0.8.2.bak/src/utils.py   2008-09-10 15:45:35.000000000 -0700
+++ ./src/utils.py      2008-09-10 16:00:00.000000000 -0700
@@ -717,7 +717,7 @@
 # can be used by UI to display the updates.
 class UpdatesMgr:
     update_url = "http://www.convirture.com/updates/updates.xml";
-    updates_file = "/tmp/updates.xml"
+    updates_file = constants.prop_tmp_dir + "/updates.xml"
     
     def __init__(self, config):
         self.config = config
@@ -734,7 +734,7 @@
         # file is not writable..lets create a tmp file
         if not os.access(self.updates_file,os.W_OK):
             (t_handle, t_name) = tempfile.mkstemp(prefix="updates.xml",
-                                                          dir="/tmp")
+                                                          
dir=constants.prop_tmp_dir)
             self.updates_file = t_name
             os.close(t_handle) # Use the name, close the handle.
 
@@ -1273,7 +1273,7 @@
     # XMConfig tests
     #    
 
-    TEST_CONFIGFILE = '/tmp/convirt.conf'
+    TEST_CONFIGFILE = constants.prop_tmp_dir + '/convirt.conf'
     
     print "\nXMConfig interface test STARTING\n"
     
diff -u -r ../convirt-0.8.2.bak/src/XenNode.py ./src/XenNode.py
--- ../convirt-0.8.2.bak/src/XenNode.py 2008-09-10 15:45:35.000000000 -0700
+++ ./src/XenNode.py    2008-09-10 15:59:08.000000000 -0700
@@ -855,7 +855,7 @@
     m = { 'VM_NAME':'foo', 'IMAGE_NAME':'anaconda' } 
     dom_config.instantiate_config(m)
     print dom_config.default_computed_options, 
dom_config.get_computed_options()
-    dom_config.save("/tmp/test_config")
+    dom_config.save(constants.prop_tmp_dir + "/test_config")
 
     sys.exit(0)
     
@@ -934,21 +934,21 @@
     newcfg = XenConfig(managed_node)
     newcfg["name"] = "Txx"
     newcfg["memory"] = 299
-    newcfg.set_filename("/tmp/Txx")
+    newcfg.set_filename(constants.prop_tmp_dir + "/Txx")
     newcfg.write()
 
-    f = managed_node.node_proxy.open("/tmp/Txx")
+    f = managed_node.node_proxy.open(constants.prop_tmp_dir + "/Txx")
     x = f.read(1024)
     print x
     f.close()
 
-    print "### read config from /etc/xen/auto and write them to /tmp"
+    print "### read config from /etc/xen/auto and write them to 
constants.prop_tmp_dir"
     ## Dom Config
     for f in managed_node.node_proxy.listdir("/etc/xen/auto"):
         fin = "/etc/xen/auto/"+f
         print fin
         d = XenConfig(managed_node, fin)
-        d.save("/tmp/" + f)
+        d.save(constants.prop_tmp_dir + "/" + f)
     
 
     print "### get first file in /etc/xen/auto and dump its info"
  • Bug#496419: Patch Sebastien Delafond

Reply via email to