File: t_localname.py

package info (click to toggle)
libapache2-mod-auth-gssapi 1.6.4-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 912 kB
  • sloc: ansic: 9,927; python: 1,114; yacc: 163; sh: 147; makefile: 132; lex: 25
file content (62 lines) | stat: -rwxr-xr-x 1,789 bytes parent folder | download
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