File: ext_set_cred_opt.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 (40 lines) | stat: -rw-r--r-- 1,339 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
GSSAPI="BASE"  # This ensures that a full module is generated by Cython

from gssapi.raw.cython_types cimport *
from gssapi.raw.ext_buffer_sets cimport *
from gssapi.raw.misc import GSSError
from gssapi.raw.oids cimport OID
from gssapi.raw.creds cimport Creds

cdef extern from "python_gssapi_ext.h":

    OM_uint32 gss_set_cred_option(OM_uint32 *minor_status,
                                  gss_cred_id_t *cred,
                                  const gss_OID desired_object,
                                  const gss_buffer_t value) nogil


def set_cred_option(OID desired_aspect not None, Creds creds=None, value=None):
    cdef gss_buffer_desc value_buffer
    if value is not None:
        value_buffer = gss_buffer_desc(len(value), value)
    else:
        # GSS_C_EMPTY_BUFFER
        value_buffer = gss_buffer_desc(0, NULL)

    cdef Creds output_creds = creds
    if output_creds is None:
        output_creds = Creds()

    cdef OM_uint32 maj_stat, min_stat

    with nogil:
        maj_stat = gss_set_cred_option(&min_stat,
                                       &output_creds.raw_creds,
                                       &desired_aspect.raw_oid,
                                       &value_buffer)

    if maj_stat == GSS_S_COMPLETE:
        return output_creds
    else:
        raise GSSError(maj_stat, min_stat)