Skip to content

Commit f09b152

Browse files
committed
Adjustments for SSL support
1 parent 4d12daa commit f09b152

File tree

4 files changed

+28
-11
lines changed

4 files changed

+28
-11
lines changed

bin/postversioncontrolrestore.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "lib"))
1111

1212
from splunklib.searchcommands import dispatch, GeneratingCommand, Configuration, Option
13-
from splunklib.searchcommands.validators import Validator, Boolean, File
13+
from splunklib.searchcommands.validators import Validator, Boolean
1414
from splunklib.binding import HTTPError
1515

1616
class OrValidator(Validator):
@@ -31,6 +31,13 @@ def format(self, value):
3131
except:
3232
return self.b.format(value)
3333

34+
class Filename(Validator):
35+
# TODO Validate file path
36+
def __call__(self, value):
37+
return value
38+
39+
def format(self, value):
40+
return value
3441

3542
splunkLogsDir = os.environ['SPLUNK_HOME'] + "/var/log/splunk"
3643
#Setup the logging
@@ -80,7 +87,8 @@ class SVCPostRestore(GeneratingCommand):
8087
restoreAsUser = Option(require=True)
8188
scope = Option(require=True)
8289
timeout = Option(require=True)
83-
sslVerify = Option(require=False, default=False, validate=OrValidator(File(), Boolean()))
90+
sslVerify = Option(require=False, default=False, validate=OrValidator(Boolean(), Filename()))
91+
requestingAddress = Option(require=False, default=False)
8492

8593
def generate(self):
8694
"""
@@ -108,6 +116,7 @@ def generate(self):
108116
body['restoreAsUser'] = self.restoreAsUser
109117
body['scope'] = self.scope
110118
body['timeout'] = self.timeout
119+
body['requestingAddress'] = self.requestingAddress
111120

112121
logger.info("Attempting POST request to url=%s with body=\"%s\"" % (url, body))
113122

bin/splunkversioncontrol_backup_class.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1037,7 +1037,7 @@ def run_script(self):
10371037
headers={'Authorization': 'Splunk %s' % config['session_key']}
10381038

10391039
url = 'https://localhost:8089/services/shcluster/captain/info?output_mode=json'
1040-
res = requests.get(url, headers=headers, verify=self.sslVerify)
1040+
res = requests.get(url, headers=headers, verify=False)
10411041
if (res.status_code == 503):
10421042
logger.debug("i=\"%s\" Non-shcluster / standalone instance, safe to run on this node" % (self.stanzaName))
10431043
elif (res.status_code != requests.codes.ok):

bin/splunkversioncontrol_rest_restore.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,15 @@
5959

6060
class SVCRestore(splunk.rest.BaseRestHandler):
6161

62-
def query_back_for_user_and_permissions(self, authorization_token, *, sslVerify):
62+
def query_back_for_user_and_permissions(self, requestingAddress, authorization_token, *, sslVerify):
6363
headers = { "Authorization" : authorization_token }
6464

6565
#Run a query back against the source system to check the username/role
66-
remoteAddr = self.request['remoteAddr']
67-
url = "https://" + remoteAddr + ":8089/services/authentication/current-context?output_mode=json"
66+
if requestingAddress:
67+
remoteAddr = requestingAddress
68+
else:
69+
remoteAddr = "https://" + self.request['remoteAddr'] + ":8089"
70+
url = remoteAddr + "/services/authentication/current-context?output_mode=json"
6871
logger.info("Received remote request checking username and role related to the token on url=%s" % (url))
6972
logger.debug("token=%s" % (authorization_token))
7073

@@ -160,7 +163,12 @@ def handle_POST(self):
160163
else:
161164
time_wait = 600
162165

163-
username, roles = self.query_back_for_user_and_permissions(payload['Authorization'][0], sslVerify=sslVerify)
166+
if 'requestingAddress' in payload:
167+
requestingAddress = payload['requestingAddress'][0]
168+
else:
169+
requestingAddress = None
170+
171+
username, roles = self.query_back_for_user_and_permissions(requestingAddress, payload['Authorization'][0], sslVerify=sslVerify)
164172
logger.info("username=%s roles=%s" % (username, roles))
165173

166174
app = payload['app'][0]
@@ -207,7 +215,7 @@ def handle_POST(self):
207215
headers = { "Authorization" : "Splunk " + self.request['systemAuth'] }
208216
curtime = calendar.timegm(time.gmtime())
209217
url = "https://localhost:8089/servicesNS/nobody/SplunkVersionControl/storage/collections/data/splunkversioncontrol_rest_restore_status"
210-
res = self.runHttpRequest(url, headers, None, "get", "checking kvstore collection splunkversioncontrol_rest_restore_status", sslVerify=sslVerify)
218+
res = self.runHttpRequest(url, headers, None, "get", "checking kvstore collection splunkversioncontrol_rest_restore_status", sslVerify=False)
211219
if not res:
212220
return
213221

@@ -216,7 +224,7 @@ def handle_POST(self):
216224
if not len(res) == 0:
217225
if not 'start_time' in res[0]:
218226
logger.warn("Warning invalid kvstore data, will wipe it and continue in collection splunkversioncontrol_rest_restore_status on url=%s, value returned res=\"%s\"" % (url, payload))
219-
self.runHttpRequest(url, headers, None, 'delete', 'wiping kvstore splunkversioncontrol_rest_restore_status', sslVerify=sslVerify)
227+
self.runHttpRequest(url, headers, None, 'delete', 'wiping kvstore splunkversioncontrol_rest_restore_status', sslVerify=False)
220228
else:
221229
kvstore_start_time = res[0]['start_time']
222230
target_time = curtime - time_wait

bin/splunkversioncontrol_utility.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def get_password(password, session_key, logger, *, sslVerify=False):
5555
url = "https://localhost:8089/servicesNS/-/" + context + "/storage/passwords?output_mode=json&f=clear_password&search=" + password
5656
logger.debug("Trying url=%s with session_key to obtain name=%s" % (url, password))
5757
headers = {'Authorization': 'Splunk %s' % session_key}
58-
res = requests.get(url, headers=headers, verify=sslVerify)
58+
res = requests.get(url, headers=headers, verify=False)
5959
dict = json.loads(res.text)
6060
clear_password = False
6161
if not 'entry' in dict:
@@ -73,7 +73,7 @@ def get_password(password, session_key, logger, *, sslVerify=False):
7373

7474
url = "https://localhost:8089/servicesNS/-/-/storage/passwords?output_mode=json&f=clear_password&count=0&search=" + password
7575
logger.debug("Trying url=%s with session_key to obtain name=%s" % (url, password))
76-
res = requests.get(url, headers=headers, verify=sslVerify)
76+
res = requests.get(url, headers=headers, verify=False)
7777
dict = json.loads(res.text)
7878
if not 'entry' in dict:
7979
logger.warn("dict=%s did not contain the entries expected on url=%s while looking for password=%s" % (dict, url, password))

0 commit comments

Comments
 (0)