1*4882a593SmuzhiyunFrom 62fdead139edb0f29b2f222efcb8f39be15b057e Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Hongxu Jia <hongxu.jia@windriver.com>
3*4882a593SmuzhiyunDate: Mon, 30 Jul 2018 15:47:13 +0800
4*4882a593SmuzhiyunSubject: [PATCH 2/4] pykickstart/parser.py: add lock for readKickstart and
5*4882a593Smuzhiyun support https without certification
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun- Add lock for readKickstart to fix race issue
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun- Support to download kickstart file through https without certification
10*4882a593Smuzhiyun
11*4882a593SmuzhiyunSigned-off-by: Hongxu Jia <hongxu.jia@windriver.com>
12*4882a593Smuzhiyun---
13*4882a593Smuzhiyun pykickstart/load.py   |  2 +-
14*4882a593Smuzhiyun pykickstart/parser.py | 18 ++++++++++++++++++
15*4882a593Smuzhiyun 2 files changed, 19 insertions(+), 1 deletion(-)
16*4882a593Smuzhiyun
17*4882a593Smuzhiyundiff --git a/pykickstart/load.py b/pykickstart/load.py
18*4882a593Smuzhiyunindex c6f013f..7adb751 100644
19*4882a593Smuzhiyun--- a/pykickstart/load.py
20*4882a593Smuzhiyun+++ b/pykickstart/load.py
21*4882a593Smuzhiyun@@ -30,7 +30,7 @@ from requests.exceptions import SSLError, RequestException
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun _is_url = lambda location: '://' in location  # RFC 3986
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun-SSL_VERIFY = True
26*4882a593Smuzhiyun+SSL_VERIFY = False
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun def load_to_str(location, user=None, passwd=None):
29*4882a593Smuzhiyun     '''Load a destination URL or file into a string.
30*4882a593Smuzhiyundiff --git a/pykickstart/parser.py b/pykickstart/parser.py
31*4882a593Smuzhiyunindex e44099b..e68174d 100644
32*4882a593Smuzhiyun--- a/pykickstart/parser.py
33*4882a593Smuzhiyun+++ b/pykickstart/parser.py
34*4882a593Smuzhiyun@@ -55,6 +55,20 @@ from pykickstart.i18n import _
35*4882a593Smuzhiyun STATE_END = "end"
36*4882a593Smuzhiyun STATE_COMMANDS = "commands"
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun+import threading
39*4882a593Smuzhiyun+_private_ks_lock = threading.RLock()
40*4882a593Smuzhiyun+
41*4882a593Smuzhiyun+class KsLock(object):
42*4882a593Smuzhiyun+    def __enter__(self):
43*4882a593Smuzhiyun+        _private_ks_lock.acquire()
44*4882a593Smuzhiyun+        return _private_ks_lock
45*4882a593Smuzhiyun+
46*4882a593Smuzhiyun+    def __exit__(self, exc_type, exc_val, exc_tb):
47*4882a593Smuzhiyun+        _private_ks_lock.release()
48*4882a593Smuzhiyun+
49*4882a593Smuzhiyun+
50*4882a593Smuzhiyun+_ks_lock = KsLock()
51*4882a593Smuzhiyun+
52*4882a593Smuzhiyun def _preprocessStateMachine(lineIter):
53*4882a593Smuzhiyun     l = None
54*4882a593Smuzhiyun     lineno = 0
55*4882a593Smuzhiyun@@ -788,6 +802,10 @@ class KickstartParser(object):
56*4882a593Smuzhiyun         self._stateMachine(i)
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun     def readKickstart(self, f, reset=True, username=None, password=None):
59*4882a593Smuzhiyun+        with _ks_lock:
60*4882a593Smuzhiyun+            self._readKickstart(f, reset=reset, username=username, password=password)
61*4882a593Smuzhiyun+
62*4882a593Smuzhiyun+    def _readKickstart(self, f, reset=True, username=None, password=None):
63*4882a593Smuzhiyun         """Process a kickstart file, given by the filename f."""
64*4882a593Smuzhiyun         if reset:
65*4882a593Smuzhiyun             self._reset()
66*4882a593Smuzhiyun--
67*4882a593Smuzhiyun2.7.4
68*4882a593Smuzhiyun
69