|
|
d67cb5 |
commit f78785f7d53e9d126ba51ee9e381f5ae9b3d0368
|
|
|
d67cb5 |
Author: Marek 'marx' Grac <mgrac@redhat.com>
|
|
|
d67cb5 |
Date: Mon Oct 7 15:41:09 2013 +0200
|
|
|
d67cb5 |
|
|
|
d67cb5 |
fence_vmware_soap, fence_ovh: Caching problem with SOAP library
|
|
|
d67cb5 |
|
|
|
d67cb5 |
Both fence agents are built on top of SUDS library which creates a cache file. Unfortunately,
|
|
|
d67cb5 |
it is not yet possible to completely move cache or remove it. Due to possible security issue (symlink
|
|
|
d67cb5 |
vulnerability) we have decided to solve this problem as simply as possible. So '/tmp' was changed to an
|
|
|
d67cb5 |
automatically generated temp directory which is removed at the exit of fence agent as we won't reuse it anyway.
|
|
|
d67cb5 |
|
|
|
d67cb5 |
Resolves: rhbz#1014000
|
|
|
d67cb5 |
|
|
|
d67cb5 |
diff --git a/fence/agents/ovh/fence_ovh.py b/fence/agents/ovh/fence_ovh.py
|
|
|
d67cb5 |
index 881aa90..2ec3fa0 100644
|
|
|
d67cb5 |
--- a/fence/agents/ovh/fence_ovh.py
|
|
|
d67cb5 |
+++ b/fence/agents/ovh/fence_ovh.py
|
|
|
d67cb5 |
@@ -9,6 +9,7 @@
|
|
|
d67cb5 |
# This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
|
|
|
d67cb5 |
|
|
|
d67cb5 |
import sys, time
|
|
|
d67cb5 |
+import shutil, tempfile
|
|
|
d67cb5 |
from datetime import datetime
|
|
|
d67cb5 |
from suds.client import Client
|
|
|
d67cb5 |
from suds.xsd.doctor import ImportDoctor, Import
|
|
|
d67cb5 |
@@ -61,6 +62,10 @@ def soap_login(options):
|
|
|
d67cb5 |
imp.filter.add('http://soapi.ovh.com/manager')
|
|
|
d67cb5 |
d = ImportDoctor(imp)
|
|
|
d67cb5 |
|
|
|
d67cb5 |
+ tmp_dir = tempfile.mkdtemp()
|
|
|
d67cb5 |
+ tempfile.tempdir = tmp_dir
|
|
|
d67cb5 |
+ atexit.register(remove_tmp_dir, tmp_dir)
|
|
|
d67cb5 |
+
|
|
|
d67cb5 |
try:
|
|
|
d67cb5 |
soap = Client(url, doctor=d)
|
|
|
d67cb5 |
session = soap.service.login(options["--username"], options["--password"], 'en', 0)
|
|
|
d67cb5 |
@@ -69,6 +74,9 @@ def soap_login(options):
|
|
|
d67cb5 |
|
|
|
d67cb5 |
options["session"] = session
|
|
|
d67cb5 |
return soap
|
|
|
d67cb5 |
+
|
|
|
d67cb5 |
+def remove_tmp_dir(tmp_dir):
|
|
|
d67cb5 |
+ shutil.rmtree(tmp_dir)
|
|
|
d67cb5 |
|
|
|
d67cb5 |
def main():
|
|
|
d67cb5 |
device_opt = [ "login", "passwd", "port", "email" ]
|
|
|
d67cb5 |
diff --git a/fence/agents/vmware_soap/fence_vmware_soap.py b/fence/agents/vmware_soap/fence_vmware_soap.py
|
|
|
d67cb5 |
index 365f8cc..ac7f0d9 100644
|
|
|
d67cb5 |
--- a/fence/agents/vmware_soap/fence_vmware_soap.py
|
|
|
d67cb5 |
+++ b/fence/agents/vmware_soap/fence_vmware_soap.py
|
|
|
d67cb5 |
@@ -1,6 +1,7 @@
|
|
|
d67cb5 |
#!/usr/bin/python
|
|
|
d67cb5 |
|
|
|
d67cb5 |
import sys, exceptions
|
|
|
d67cb5 |
+import shutil, tempfile
|
|
|
d67cb5 |
sys.path.append("@FENCEAGENTSLIBDIR@")
|
|
|
d67cb5 |
|
|
|
d67cb5 |
from suds.client import Client
|
|
|
d67cb5 |
@@ -20,6 +21,11 @@ def soap_login(options):
|
|
|
d67cb5 |
url = "http://"
|
|
|
d67cb5 |
|
|
|
d67cb5 |
url += options["--ip"] + ":" + str(options["--ipport"]) + "/sdk"
|
|
|
d67cb5 |
+
|
|
|
d67cb5 |
+ tmp_dir = tempfile.mkdtemp()
|
|
|
d67cb5 |
+ tempfile.tempdir = tmp_dir
|
|
|
d67cb5 |
+ atexit.register(remove_tmp_dir, tmp_dir)
|
|
|
d67cb5 |
+
|
|
|
d67cb5 |
try:
|
|
|
d67cb5 |
conn = Client(url + "/vimService.wsdl")
|
|
|
d67cb5 |
conn.set_options(location = url)
|
|
|
d67cb5 |
@@ -155,6 +161,9 @@ def set_power_status(conn, options):
|
|
|
d67cb5 |
else:
|
|
|
d67cb5 |
conn.service.PowerOffVM_Task(mo_machine)
|
|
|
d67cb5 |
|
|
|
d67cb5 |
+def remove_tmp_dir(tmp_dir):
|
|
|
d67cb5 |
+ shutil.rmtree(tmp_dir)
|
|
|
d67cb5 |
+
|
|
|
d67cb5 |
def main():
|
|
|
d67cb5 |
device_opt = [ "ipaddr", "login", "passwd", "web", "ssl", "port" ]
|
|
|
d67cb5 |
|