Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement support for GSSAPI extension gss_inquire_sec_context_by_oid #128

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions gssapi/raw/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,3 +119,9 @@
from gssapi.raw.ext_rfc6680_comp_oid import * # noqa
except ImportError:
pass

# optional Global Grid Forum
try:
from gssapi.raw.ext_ggf import * # noqa
except ImportError:
pass
47 changes: 47 additions & 0 deletions gssapi/raw/ext_ggf.pyx
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
GSSAPI="BASE"

from gssapi.raw.cython_types cimport *
from gssapi.raw.ext_buffer_sets cimport *
from gssapi.raw.cython_converters cimport c_get_mech_oid_set
from gssapi.raw.misc import GSSError
from gssapi.raw.oids cimport OID
from gssapi.raw.sec_contexts cimport SecurityContext

cdef extern from "python_gssapi_ext.h":
OM_uint32 gss_inquire_sec_context_by_oid(OM_uint32 *min_stat,
const gss_ctx_id_t context_handle,
const gss_OID desired_object,
gss_buffer_set_t *data_set) nogil


def inquire_sec_context_by_oid(SecurityContext context not None, OID mech not None):
"""
Args:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs to follow the proper documentation format, including listing what it does, and what it returns. In general, python-gssapi documentation should be more-or-less usable without having to reference the main RFC.

context (SecurityContext): the security context to update, or
None to create a new context
mech (MechType): the mechanism type for this security context,
or None for the default mechanism type
"""
cdef gss_buffer_set_t *output_token_buffer_ptr = NULL
cdef gss_buffer_set_t output_token_buffer = GSS_C_NO_BUFFER_SET;
cdef OM_uint32 maj_stat, min_stat

output_token_buffer_ptr = &output_token_buffer

cdef gss_OID_set desired_mechs

with nogil:
maj_stat = gss_inquire_sec_context_by_oid(&min_stat, context.raw_ctx, &mech.raw_oid, output_token_buffer_ptr)

if maj_stat == GSS_S_COMPLETE:
py_token = []
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: py_tokens for clarity.


if output_token_buffer != GSS_C_NO_BUFFER_SET:
for i in range(output_token_buffer.count):
token = output_token_buffer.elements[i]
py_token.append(token.value[:token.length])

gss_release_buffer_set(&min_stat, &output_token_buffer)
return py_token
else:
raise GSSError(maj_stat, min_stat)