Blame SOURCES/bz2072421-1-all-agents-unify-ssl-parameters.patch

3f9bc7
From 999f2f8b4dc7d258679daf8c3f13d9b317ff4435 Mon Sep 17 00:00:00 2001
3f9bc7
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
3f9bc7
Date: Thu, 7 Apr 2022 13:11:12 +0200
3f9bc7
Subject: [PATCH] all agents: unify ssl parameters to avoid having to use --ssl
3f9bc7
 when using --ssl-secure/--ssl-insecure for some agents
3f9bc7
3f9bc7
THIS MIGHT BREAK SETUPS USING fence_docker or fence_pve!
3f9bc7
---
3f9bc7
 agents/cisco_ucs/fence_cisco_ucs.py         |  9 +++++----
3f9bc7
 agents/docker/fence_docker.py               |  9 ++++++---
3f9bc7
 agents/rhevm/fence_rhevm.py                 |  8 ++++----
3f9bc7
 agents/vmware_rest/fence_vmware_rest.py     |  8 ++++----
3f9bc7
 agents/vmware_soap/fence_vmware_soap.py     |  2 +-
3f9bc7
 agents/vmware_vcloud/fence_vmware_vcloud.py |  4 ++--
3f9bc7
 agents/zvm/fence_zvmip.py                   |  8 +++++---
3f9bc7
 lib/fencing.py.py                           |  6 ++++++
3f9bc7
 tests/data/metadata/fence_docker.xml        |  4 ++--
3f9bc7
 13 files changed, 64 insertions(+), 31 deletions(-)
3f9bc7
3f9bc7
diff --git a/agents/cisco_ucs/fence_cisco_ucs.py b/agents/cisco_ucs/fence_cisco_ucs.py
3f9bc7
index 2280dbbc7..b85379a73 100644
3f9bc7
--- a/agents/cisco_ucs/fence_cisco_ucs.py
3f9bc7
+++ b/agents/cisco_ucs/fence_cisco_ucs.py
3f9bc7
@@ -99,7 +99,7 @@ def get_list(conn, options):
3f9bc7
 
3f9bc7
 def send_command(opt, command, timeout):
3f9bc7
 	## setup correct URL
3f9bc7
-	if "--ssl" in opt or "--ssl-secure" in opt or "--ssl-insecure" in opt:
3f9bc7
+	if "--ssl-secure" in opt or "--ssl-insecure" in opt:
3f9bc7
 		url = "https:"
3f9bc7
 	else:
3f9bc7
 		url = "http:"
3f9bc7
@@ -114,13 +114,14 @@ def send_command(opt, command, timeout):
3f9bc7
 	conn.setopt(pycurl.POSTFIELDS, command.encode("ascii"))
3f9bc7
 	conn.setopt(pycurl.WRITEFUNCTION, web_buffer.write)
3f9bc7
 	conn.setopt(pycurl.TIMEOUT, timeout)
3f9bc7
-	if "--ssl" in opt or "--ssl-secure" in opt:
3f9bc7
+
3f9bc7
+	if "--ssl-secure" in opt:
3f9bc7
 		conn.setopt(pycurl.SSL_VERIFYPEER, 1)
3f9bc7
 		conn.setopt(pycurl.SSL_VERIFYHOST, 2)
3f9bc7
-
3f9bc7
-	if "--ssl-insecure" in opt:
3f9bc7
+	elif "--ssl-insecure" in opt:
3f9bc7
 		conn.setopt(pycurl.SSL_VERIFYPEER, 0)
3f9bc7
 		conn.setopt(pycurl.SSL_VERIFYHOST, 0)
3f9bc7
+
3f9bc7
 	conn.perform()
3f9bc7
 	result = web_buffer.getvalue().decode()
3f9bc7
 
3f9bc7
diff --git a/agents/docker/fence_docker.py b/agents/docker/fence_docker.py
3f9bc7
index fef87da86..004402518 100644
3f9bc7
--- a/agents/docker/fence_docker.py
3f9bc7
+++ b/agents/docker/fence_docker.py
3f9bc7
@@ -43,7 +43,7 @@ def get_list(conn, options):
3f9bc7
 
3f9bc7
 
3f9bc7
 def send_cmd(options, cmd, post = False):
3f9bc7
-	url = "http%s://%s:%s/v%s/%s" % ("s" if "--ssl" in options else "", options["--ip"], options["--ipport"], options["--api-version"], cmd)
3f9bc7
+	url = "http%s://%s:%s/v%s/%s" % ("s" if "--ssl-secure" in options or "--ssl-insecure" in options else "", options["--ip"], options["--ipport"], options["--api-version"], cmd)
3f9bc7
 	conn = pycurl.Curl()
3f9bc7
 	output_buffer = io.BytesIO()
3f9bc7
 	if logging.getLogger().getEffectiveLevel() < logging.WARNING:
3f9bc7
@@ -55,7 +55,8 @@ def send_cmd(options, cmd, post = False):
3f9bc7
 		conn.setopt(pycurl.POSTFIELDSIZE, 0)
3f9bc7
 	conn.setopt(pycurl.WRITEFUNCTION, output_buffer.write)
3f9bc7
 	conn.setopt(pycurl.TIMEOUT, int(options["--shell-timeout"]))
3f9bc7
-	if "--ssl" in options:
3f9bc7
+
3f9bc7
+	if "--ssl-secure" in options:
3f9bc7
 		if not (set(("--tlscert", "--tlskey", "--tlscacert")) <= set(options)):
3f9bc7
 			fail_usage("Failed. If --ssl option is used, You have to also \
3f9bc7
 specify: --tlscert, --tlskey and --tlscacert")
3f9bc7
@@ -63,7 +64,7 @@ def send_cmd(options, cmd, post = False):
3f9bc7
 		conn.setopt(pycurl.SSLCERT, options["--tlscert"])
3f9bc7
 		conn.setopt(pycurl.SSLKEY, options["--tlskey"])
3f9bc7
 		conn.setopt(pycurl.CAINFO, options["--tlscacert"])
3f9bc7
-	else:
3f9bc7
+	elif "--ssl-insecure" in options:
3f9bc7
 		conn.setopt(pycurl.SSL_VERIFYPEER, 0)
3f9bc7
 		conn.setopt(pycurl.SSL_VERIFYHOST, 0)
3f9bc7
 
3f9bc7
@@ -136,6 +137,8 @@ def main():
3f9bc7
 
3f9bc7
 	device_opt = ["ipaddr", "no_password", "no_login", "port", "method", "web", "tlscert", "tlskey", "tlscacert", "ssl", "api_version"]
3f9bc7
 
3f9bc7
+	all_opt["ssl"]["default"] = "1"
3f9bc7
+
3f9bc7
 	options = check_input(device_opt, process_input(device_opt))
3f9bc7
 
3f9bc7
 	docs = { }
3f9bc7
diff --git a/agents/rhevm/fence_rhevm.py b/agents/rhevm/fence_rhevm.py
3f9bc7
index 25aecbe58..5f74d06f6 100644
3f9bc7
--- a/agents/rhevm/fence_rhevm.py
3f9bc7
+++ b/agents/rhevm/fence_rhevm.py
3f9bc7
@@ -85,7 +85,7 @@ def send_command(opt, command, method="GET"):
3f9bc7
 		logging.debug("auto-detected API version: " + opt["--api-version"])
3f9bc7
 
3f9bc7
 	## setup correct URL
3f9bc7
-	if "--ssl" in opt or "--ssl-secure" in opt or "--ssl-insecure" in opt:
3f9bc7
+	if "--ssl-secure" in opt or "--ssl-insecure" in opt:
3f9bc7
 		url = "https:"
3f9bc7
 	else:
3f9bc7
 		url = "http:"
3f9bc7
@@ -126,11 +126,11 @@ def send_command(opt, command, method="GET"):
3f9bc7
 			conn.setopt(pycurl.COOKIEJAR, cookie_file)
3f9bc7
 
3f9bc7
 	conn.setopt(pycurl.TIMEOUT, int(opt["--shell-timeout"]))
3f9bc7
-	if "--ssl" in opt or "--ssl-secure" in opt:
3f9bc7
+
3f9bc7
+	if "--ssl-secure" in opt:
3f9bc7
 		conn.setopt(pycurl.SSL_VERIFYPEER, 1)
3f9bc7
 		conn.setopt(pycurl.SSL_VERIFYHOST, 2)
3f9bc7
-
3f9bc7
-	if "--ssl-insecure" in opt:
3f9bc7
+	elif "--ssl-insecure" in opt:
3f9bc7
 		conn.setopt(pycurl.SSL_VERIFYPEER, 0)
3f9bc7
 		conn.setopt(pycurl.SSL_VERIFYHOST, 0)
3f9bc7
 
3f9bc7
diff --git a/agents/vmware_rest/fence_vmware_rest.py b/agents/vmware_rest/fence_vmware_rest.py
3f9bc7
index e49fd5663..4b884fc62 100644
3f9bc7
--- a/agents/vmware_rest/fence_vmware_rest.py
3f9bc7
+++ b/agents/vmware_rest/fence_vmware_rest.py
3f9bc7
@@ -69,7 +69,7 @@ def connect(opt):
3f9bc7
 	conn = pycurl.Curl()
3f9bc7
 
3f9bc7
 	## setup correct URL
3f9bc7
-	if "--ssl" in opt or "--ssl-secure" in opt or "--ssl-insecure" in opt:
3f9bc7
+	if "--ssl-secure" in opt or "--ssl-insecure" in opt:
3f9bc7
 		conn.base_url = "https:"
3f9bc7
 	else:
3f9bc7
 		conn.base_url = "http:"
3f9bc7
@@ -89,11 +89,11 @@ def connect(opt):
3f9bc7
 	conn.setopt(pycurl.USERPWD, opt["--username"] + ":" + opt["--password"])
3f9bc7
 
3f9bc7
 	conn.setopt(pycurl.TIMEOUT, int(opt["--shell-timeout"]))
3f9bc7
-	if "--ssl" in opt or "--ssl-secure" in opt:
3f9bc7
+
3f9bc7
+	if "--ssl-secure" in opt:
3f9bc7
 		conn.setopt(pycurl.SSL_VERIFYPEER, 1)
3f9bc7
 		conn.setopt(pycurl.SSL_VERIFYHOST, 2)
3f9bc7
-
3f9bc7
-	if "--ssl-insecure" in opt:
3f9bc7
+	elif "--ssl-insecure" in opt:
3f9bc7
 		conn.setopt(pycurl.SSL_VERIFYPEER, 0)
3f9bc7
 		conn.setopt(pycurl.SSL_VERIFYHOST, 0)
3f9bc7
 
3f9bc7
diff --git a/agents/vmware_soap/fence_vmware_soap.py b/agents/vmware_soap/fence_vmware_soap.py
3f9bc7
index 2cd45e0b3..51fb0f147 100644
3f9bc7
--- a/agents/vmware_soap/fence_vmware_soap.py
3f9bc7
+++ b/agents/vmware_soap/fence_vmware_soap.py
3f9bc7
@@ -34,7 +34,7 @@ def send(self, request):
3f9bc7
 def soap_login(options):
3f9bc7
 	run_delay(options)
3f9bc7
 
3f9bc7
-	if "--ssl" in options or "--ssl-secure" in options or "--ssl-insecure" in options:
3f9bc7
+	if "--ssl-secure" in options or "--ssl-insecure" in options:
3f9bc7
 		if "--ssl-insecure" in options:
3f9bc7
 			import ssl
3f9bc7
 			import urllib3
3f9bc7
diff --git a/agents/vmware_vcloud/fence_vmware_vcloud.py b/agents/vmware_vcloud/fence_vmware_vcloud.py
3f9bc7
index 42372a83d..7626b82bb 100644
3f9bc7
--- a/agents/vmware_vcloud/fence_vmware_vcloud.py
3f9bc7
+++ b/agents/vmware_vcloud/fence_vmware_vcloud.py
3f9bc7
@@ -60,7 +60,7 @@ def connect(opt):
3f9bc7
         conn = pycurl.Curl()
3f9bc7
 
3f9bc7
         ## setup correct URL
3f9bc7
-        if "--ssl" in opt or "--ssl-secure" in opt or "--ssl-insecure" in opt:
3f9bc7
+        if "--ssl-secure" in opt or "--ssl-insecure" in opt:
3f9bc7
                 conn.base_url = "https:"
3f9bc7
         else:
3f9bc7
                 conn.base_url = "http:"
3f9bc7
@@ -76,7 +76,7 @@ def connect(opt):
3f9bc7
         conn.setopt(pycurl.USERPWD, opt["--username"] + ":" + opt["--password"])
3f9bc7
 
3f9bc7
         conn.setopt(pycurl.TIMEOUT, int(opt["--shell-timeout"]))
3f9bc7
-        if "--ssl" in opt or "--ssl-secure" in opt:
3f9bc7
+        if "--ssl-secure" in opt:
3f9bc7
                 conn.setopt(pycurl.SSL_VERIFYPEER, 1)
3f9bc7
                 conn.setopt(pycurl.SSL_VERIFYHOST, 2)
3f9bc7
         elif "--ssl-insecure" in opt:
3f9bc7
diff --git a/agents/zvm/fence_zvmip.py b/agents/zvm/fence_zvmip.py
3f9bc7
index e8f849eda..90ca95d45 100644
3f9bc7
--- a/agents/zvm/fence_zvmip.py
3f9bc7
+++ b/agents/zvm/fence_zvmip.py
3f9bc7
@@ -26,7 +26,7 @@ def open_socket(options):
3f9bc7
 	except socket.gaierror:
3f9bc7
 		fail(EC_LOGIN_DENIED)
3f9bc7
 
3f9bc7
-	if "--ssl" in options:
3f9bc7
+	if "--ssl-secure" in options or "--ssl-insecure" in options:
3f9bc7
 		import ssl
3f9bc7
 		sock = socket.socket()
3f9bc7
 		sslcx = ssl.create_default_context()
3f9bc7
@@ -132,7 +132,7 @@ def get_list_of_images(options, command, data_as_plug):
3f9bc7
 	images = set()
3f9bc7
 
3f9bc7
 	if output_len > 3*INT4:
3f9bc7
-		recvflag = socket.MSG_WAITALL if "--ssl" not in options else 0
3f9bc7
+		recvflag = socket.MSG_WAITALL if "--ssl-secure" not in options and "--ssl-insecure" not in options else 0
3f9bc7
 		array_len = struct.unpack("!i", conn.recv(INT4))[0]
3f9bc7
 		data = ""
3f9bc7
 
3f9bc7
diff --git a/lib/fencing.py.py b/lib/fencing.py.py
3f9bc7
index 696388d55..b746ede8b 100644
3f9bc7
--- a/lib/fencing.py.py
3f9bc7
+++ b/lib/fencing.py.py
3f9bc7
@@ -789,6 +789,12 @@ def check_input(device_opt, opt, other_conditions = False):
3f9bc7
 	if "--password-script" in options:
3f9bc7
 		options["--password"] = os.popen(options["--password-script"]).read().rstrip()
3f9bc7
 
3f9bc7
+	if "--ssl-secure" in options or "--ssl-insecure" in options:
3f9bc7
+		options["--ssl"] = ""
3f9bc7
+
3f9bc7
+	if "--ssl" in options and "--ssl-insecure" not in options:
3f9bc7
+		options["--ssl-secure"] = ""
3f9bc7
+
3f9bc7
 	if os.environ.get("PCMK_service") == "pacemaker-fenced" and "--disable-timeout" not in options:
3f9bc7
 		options["--disable-timeout"] = "1"
3f9bc7
 
3f9bc7
diff --git a/tests/data/metadata/fence_docker.xml b/tests/data/metadata/fence_docker.xml
3f9bc7
index 723e72280..51c7c470a 100644
3f9bc7
--- a/tests/data/metadata/fence_docker.xml
3f9bc7
+++ b/tests/data/metadata/fence_docker.xml
3f9bc7
@@ -20,7 +20,7 @@
3f9bc7
 	</parameter>
3f9bc7
 	<parameter name="ipport" unique="0" required="0">
3f9bc7
 		<getopt mixed="-u, --ipport=[port]" />
3f9bc7
-		<content type="integer" default="80"  />
3f9bc7
+		<content type="integer" default="443"  />
3f9bc7
 		<shortdesc lang="en">TCP/UDP port to use for connection with device</shortdesc>
3f9bc7
 	</parameter>
3f9bc7
 	<parameter name="method" unique="0" required="0">
3f9bc7
@@ -43,7 +43,7 @@
3f9bc7
 	</parameter>
3f9bc7
 	<parameter name="ssl" unique="0" required="0">
3f9bc7
 		<getopt mixed="-z, --ssl" />
3f9bc7
-		<content type="boolean"  />
3f9bc7
+		<content type="boolean" default="1"  />
3f9bc7
 		<shortdesc lang="en">Use SSL connection with verifying certificate</shortdesc>
3f9bc7
 	</parameter>
3f9bc7
 	<parameter name="ssl_insecure" unique="0" required="0">