Blob Blame History Raw
commit f78785f7d53e9d126ba51ee9e381f5ae9b3d0368
Author: Marek 'marx' Grac <mgrac@redhat.com>
Date:   Mon Oct 7 15:41:09 2013 +0200

    fence_vmware_soap, fence_ovh: Caching problem with SOAP library
    
    Both fence agents are built on top of SUDS library which creates a cache file. Unfortunately,
    it is not yet possible to completely move cache or remove it. Due to possible security issue (symlink
    vulnerability) we have decided to solve this problem as simply as possible. So '/tmp' was changed to an
    automatically generated temp directory which is removed at the exit of fence agent as we won't reuse it anyway.
    
    Resolves: rhbz#1014000

diff --git a/fence/agents/ovh/fence_ovh.py b/fence/agents/ovh/fence_ovh.py
index 881aa90..2ec3fa0 100644
--- a/fence/agents/ovh/fence_ovh.py
+++ b/fence/agents/ovh/fence_ovh.py
@@ -9,6 +9,7 @@
 # This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
 
 import sys, time
+import shutil, tempfile
 from datetime import datetime
 from suds.client import Client
 from suds.xsd.doctor import ImportDoctor, Import
@@ -61,6 +62,10 @@ def soap_login(options):
 	imp.filter.add('http://soapi.ovh.com/manager')
 	d = ImportDoctor(imp)
 
+	tmp_dir = tempfile.mkdtemp()
+	tempfile.tempdir = tmp_dir
+	atexit.register(remove_tmp_dir, tmp_dir)
+
 	try:
 		soap = Client(url, doctor=d)
 		session = soap.service.login(options["--username"], options["--password"], 'en', 0)
@@ -69,6 +74,9 @@ def soap_login(options):
 
 	options["session"] = session
 	return soap
+
+def remove_tmp_dir(tmp_dir):
+	shutil.rmtree(tmp_dir)
 	
 def main():
 	device_opt = [ "login", "passwd", "port", "email" ]
diff --git a/fence/agents/vmware_soap/fence_vmware_soap.py b/fence/agents/vmware_soap/fence_vmware_soap.py
index 365f8cc..ac7f0d9 100644
--- a/fence/agents/vmware_soap/fence_vmware_soap.py
+++ b/fence/agents/vmware_soap/fence_vmware_soap.py
@@ -1,6 +1,7 @@
 #!/usr/bin/python
 
 import sys, exceptions
+import shutil, tempfile
 sys.path.append("@FENCEAGENTSLIBDIR@")
 
 from suds.client import Client
@@ -20,6 +21,11 @@ def soap_login(options):
 		url = "http://"
 	
 	url += options["--ip"] + ":" + str(options["--ipport"]) + "/sdk"
+
+	tmp_dir = tempfile.mkdtemp()
+	tempfile.tempdir = tmp_dir
+	atexit.register(remove_tmp_dir, tmp_dir)
+	
 	try:
 		conn = Client(url + "/vimService.wsdl")
 		conn.set_options(location = url)
@@ -155,6 +161,9 @@ def set_power_status(conn, options):
 	else:
 		conn.service.PowerOffVM_Task(mo_machine)	
 
+def remove_tmp_dir(tmp_dir):
+	shutil.rmtree(tmp_dir)
+
 def main():
 	device_opt = [ "ipaddr", "login", "passwd", "web", "ssl", "port" ]