Blob Blame History Raw
From 5df7d647e3cdb4b73e0bfd0a4fa83b78efd861f5 Mon Sep 17 00:00:00 2001
From: Ivan Devat <idevat@redhat.com>
Date: Mon, 6 Aug 2018 08:43:47 +0200
Subject: [PATCH] disable usage of 'Expect' HTTP header

---
 pcs/common/node_communicator.py | 1 +
 pcs/lib/external.py             | 1 +
 pcs/test/tools/custom_mock.py   | 4 ++++
 pcs/utils.py                    | 1 +
 pcsd/pcs.rb                     | 1 +
 5 files changed, 8 insertions(+)

diff --git a/pcs/common/node_communicator.py b/pcs/common/node_communicator.py
index f7fe2419..d54e8566 100644
--- a/pcs/common/node_communicator.py
+++ b/pcs/common/node_communicator.py
@@ -532,6 +532,7 @@ def _create_request_handle(request, cookies, timeout):
     handle.setopt(pycurl.SSL_VERIFYHOST, 0)
     handle.setopt(pycurl.SSL_VERIFYPEER, 0)
     handle.setopt(pycurl.NOSIGNAL, 1) # required for multi-threading
+    handle.setopt(pycurl.HTTPHEADER, ["Expect: "])
     if cookies:
         handle.setopt(
             pycurl.COOKIE, _dict_to_cookies(cookies).encode("utf-8")
diff --git a/pcs/lib/external.py b/pcs/lib/external.py
index fe17a864..e53a54ee 100644
--- a/pcs/lib/external.py
+++ b/pcs/lib/external.py
@@ -620,6 +620,7 @@ class NodeCommunicator(object):
         handler.setopt(pycurl.SSL_VERIFYHOST, 0)
         handler.setopt(pycurl.SSL_VERIFYPEER, 0)
         handler.setopt(pycurl.NOSIGNAL, 1) # required for multi-threading
+        handler.setopt(pycurl.HTTPHEADER, ["Expect: "])
         if cookies:
             handler.setopt(pycurl.COOKIE, ";".join(cookies).encode("utf-8"))
         if data:
diff --git a/pcs/test/tools/custom_mock.py b/pcs/test/tools/custom_mock.py
index c05a5a45..849f83fb 100644
--- a/pcs/test/tools/custom_mock.py
+++ b/pcs/test/tools/custom_mock.py
@@ -75,6 +75,10 @@ class MockCurl(object):
         self._opts = {}
 
     def setopt(self, opt, val):
+        if isinstance(val, list):
+           # in tests we use set operations (e.g. assertLessEqual) which
+           # require hashable values
+           val = tuple(val)
         if val is None:
             self.unsetopt(opt)
         else:
diff --git a/pcs/utils.py b/pcs/utils.py
index 347ad73e..8a989f52 100644
--- a/pcs/utils.py
+++ b/pcs/utils.py
@@ -498,6 +498,7 @@ def sendHTTPRequest(
     handler.setopt(pycurl.TIMEOUT_MS, int(timeout * 1000))
     handler.setopt(pycurl.SSL_VERIFYHOST, 0)
     handler.setopt(pycurl.SSL_VERIFYPEER, 0)
+    handler.setopt(pycurl.HTTPHEADER, ["Expect: "])
     if cookies:
         handler.setopt(pycurl.COOKIE, ";".join(cookies).encode("utf-8"))
     if data:
diff --git a/pcsd/pcs.rb b/pcsd/pcs.rb
index 66919c0c..ad153f62 100644
--- a/pcsd/pcs.rb
+++ b/pcsd/pcs.rb
@@ -513,6 +513,7 @@ def send_request(
     :httpget => (post ? 0 : 1),
     :nosignal => 1, # required for multi-threading
   })
+  req.compose_header('Expect', '')
   return_code = req.perform
   if return_code == :ok
     return req.response_code, req.response_body
-- 
2.13.6