File: ext_cred_imp_exp.pyx

package info (click to toggle)
python-gssapi 1.10.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 876 kB
  • sloc: python: 3,707; sh: 198; makefile: 154; ansic: 60
file content (56 lines) | stat: -rw-r--r-- 1,770 bytes parent folder | download | duplicates (3)
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
GSSAPI="BASE"  # This ensures that a full module is generated by Cython

from gssapi.raw.cython_types cimport *
from gssapi.raw.cython_converters cimport c_create_oid_set
from gssapi.raw.cython_converters cimport c_get_mech_oid_set
from gssapi.raw.cython_converters cimport c_py_ttl_to_c, c_c_ttl_to_py
from gssapi.raw.creds cimport Creds
from gssapi.raw.names cimport Name
from gssapi.raw.oids cimport OID

from gssapi.raw.misc import GSSError
from gssapi.raw.named_tuples import AcquireCredResult, AddCredResult


cdef extern from "python_gssapi_ext.h":
    OM_uint32 gss_export_cred(OM_uint32 *min_stat, gss_cred_id_t cred_handle,
                              gss_buffer_t token) nogil

    OM_uint32 gss_import_cred(OM_uint32 *min_stat, gss_buffer_t token,
                              gss_cred_id_t *cred_handle) nogil


def export_cred(Creds creds not None):
    # GSS_C_EMPTY_BUFFER
    cdef gss_buffer_desc exported_creds = gss_buffer_desc(0, NULL)

    cdef OM_uint32 maj_stat, min_stat

    with nogil:
        maj_stat = gss_export_cred(&min_stat, creds.raw_creds, &exported_creds)

    if maj_stat == GSS_S_COMPLETE:
        res = (<char*>exported_creds.value)[:exported_creds.length]
        gss_release_buffer(&min_stat, &exported_creds)
        return res
    else:
        raise GSSError(maj_stat, min_stat)


def import_cred(token not None):
    cdef gss_buffer_desc token_buffer = gss_buffer_desc(len(token), token)

    cdef gss_cred_id_t creds

    cdef OM_uint32 maj_stat, min_stat

    with nogil:
        maj_stat = gss_import_cred(&min_stat, &token_buffer, &creds)

    cdef Creds res
    if maj_stat == GSS_S_COMPLETE:
        res = Creds()
        res.raw_creds = creds
        return res
    else:
        raise GSSError(maj_stat, min_stat)