-
Notifications
You must be signed in to change notification settings - Fork 40
/
Copy patht_localname.py
executable file
·62 lines (47 loc) · 1.75 KB
/
t_localname.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/env python3
# Copyright (C) 2020 - mod_auth_gssapi contributors, see COPYING for license.
import os
import subprocess
import sys
import gssapi
import requests
from requests_gssapi import HTTPSPNEGOAuth
def use_requests(auth):
sess = requests.Session()
url = 'http://%s/gss_localname/' % os.environ['NSS_WRAPPER_HOSTNAME']
r = sess.get(url, auth=auth)
if r.status_code != 200:
raise ValueError('Localname failed')
if r.text.rstrip() != os.environ['MAG_REMOTE_USER']:
raise ValueError('Localname, REMOTE_USER check failed')
def use_curl():
url = 'http://%s/gss_localname/' % os.environ['NSS_WRAPPER_HOSTNAME']
curl = subprocess.Popen(["curl", "--negotiate", "-u:", url],
stdout=subprocess.PIPE)
curl.wait()
if curl.returncode != 0:
raise ValueError('Localname failed')
line = curl.stdout.read().strip(b' \t\n\r').decode('utf-8')
if line != os.environ['MAG_REMOTE_USER']:
raise ValueError('Localname, REMOTE_USER check failed (%s != %s)' % (
line, os.environ['MAG_REMOTE_USER']))
if __name__ == '__main__':
mech_name = None
if len(sys.argv) > 1:
mech_name = sys.argv[1]
mech = None
if mech_name is not None:
mech = gssapi.mechs.Mechanism.from_sasl_name(mech_name)
try:
auth = HTTPSPNEGOAuth(mech=mech)
use_requests(auth)
except TypeError:
# odler version of requests that does not support mechs
if mech_name == 'SPNEGO':
use_curl()
elif mech_name == 'GS2-KRB5':
# older request versions use krb5 as the mech by default
auth = HTTPSPNEGOAuth()
use_requests(auth)
else:
sys.exit(42) # SKIP