blob: cb21235460660a6fe42a4708f7f985c0a897589c [file] [log] [blame]
Brad Bishopd7bf8c12018-02-25 22:55:05 -05001From e6e747b883114bfad51ad93f823e65f5a4d6438a Mon Sep 17 00:00:00 2001
2From: Hongxu Jia <hongxu.jia@windriver.com>
3Date: Thu, 1 Jun 2017 15:12:29 +0800
4Subject: [PATCH 2/4] pykickstart/parser.py: add lock for readKickstart and
5 support https without certification
6
7- Add lock for readKickstart to fix race issue
8
9- Support to download kickstart file through https without certification
10
11Upstream-Status: Inappropriate[oe specific]
12
13Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
14---
15 pykickstart/load.py | 2 +-
16 pykickstart/parser.py | 24 ++++++++++++++++++++++++
17 2 files changed, 25 insertions(+), 1 deletion(-)
18
19diff --git a/pykickstart/load.py b/pykickstart/load.py
20index 0f5741b..48c8276 100644
21--- a/pykickstart/load.py
22+++ b/pykickstart/load.py
23@@ -30,7 +30,7 @@ from requests.exceptions import SSLError, RequestException
24
25 _is_url = lambda location: '://' in location # RFC 3986
26
27-SSL_VERIFY = True
28+SSL_VERIFY = False
29
30 def load_to_str(location, user=None, passwd=None):
31 '''Load a destination URL or file into a string.
32diff --git a/pykickstart/parser.py b/pykickstart/parser.py
33index 26b5de9..264ba05 100644
34--- a/pykickstart/parser.py
35+++ b/pykickstart/parser.py
36@@ -57,6 +57,26 @@ STATE_COMMANDS = "commands"
37
38 ver = version.DEVEL
39
40+import logging
41+log = logging.getLogger("anaconda")
42+
43+import inspect
44+import threading
45+_private_ks_lock = threading.RLock()
46+
47+class KsLock(object):
48+ def __enter__(self):
49+ log.info("%s %s" % (self.__class__.__name__, inspect.stack()[0][3]))
50+ _private_ks_lock.acquire()
51+ return _private_ks_lock
52+
53+ def __exit__(self, exc_type, exc_val, exc_tb):
54+ log.info("%s %s" % (self.__class__.__name__, inspect.stack()[0][3]))
55+ _private_ks_lock.release()
56+
57+
58+_ks_lock = KsLock()
59+
60 def _preprocessStateMachine (lineIter):
61 l = None
62 lineno = 0
63@@ -774,6 +794,10 @@ class KickstartParser(object):
64 self._stateMachine (i)
65
66 def readKickstart(self, f, reset=True, username=None, password=None):
67+ with _ks_lock:
68+ self._readKickstart(f, reset=reset, username=username, password=password)
69+
70+ def _readKickstart(self, f, reset=True, username=None, password=None):
71 """Process a kickstart file, given by the filename f."""
72 if reset:
73 self._reset()
74--
752.7.4
76