From e3ae1ee773a1cb33cd0ca06eeef0296bbf4a9b7b Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sun, 21 Jul 2013 01:55:22 -0400 Subject: Add gss_context_time() implementation --- src/gss_ntlmssp.h | 4 ++++ src/gss_sec_ctx.c | 24 +++++++++++++++++++++++- src/gss_spi.c | 8 ++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/gss_ntlmssp.h b/src/gss_ntlmssp.h index 03daf45..681db98 100644 --- a/src/gss_ntlmssp.h +++ b/src/gss_ntlmssp.h @@ -201,4 +201,8 @@ uint32_t gssntlm_delete_sec_context(uint32_t *minor_status, gss_buffer_t output_token); +uint32_t gssntlm_context_time(uint32_t *minor_status, + gss_ctx_id_t context_handle, + uint32_t *time_rec); + #endif /* _GSS_NTLMSSP_H_ */ diff --git a/src/gss_sec_ctx.c b/src/gss_sec_ctx.c index e62e997..fe60ea6 100644 --- a/src/gss_sec_ctx.c +++ b/src/gss_sec_ctx.c @@ -552,7 +552,7 @@ uint32_t gssntlm_delete_sec_context(uint32_t *minor_status, *minor_status = 0; if (!context_handle) return GSS_S_CALL_INACCESSIBLE_READ; - if (*context_handle == NULL) return GSS_S_COMPLETE; + if (*context_handle == NULL) return GSS_S_NO_CONTEXT; ctx = (struct gssntlm_ctx *)*context_handle; @@ -576,3 +576,25 @@ uint32_t gssntlm_delete_sec_context(uint32_t *minor_status, } return GSS_S_COMPLETE; } + +uint32_t gssntlm_context_time(uint32_t *minor_status, + gss_ctx_id_t context_handle, + uint32_t *time_rec) +{ + struct gssntlm_ctx *ctx; + time_t now; + uint32_t retmaj; + + *minor_status = 0; + + if (context_handle == GSS_C_NO_CONTEXT) { + return GSS_S_CALL_INACCESSIBLE_READ; + } + + ctx = (struct gssntlm_ctx *)context_handle; + retmaj = gssntlm_context_is_valid(ctx, &now); + if (retmaj) return retmaj; + + *time_rec = ctx->expiration_time - now; + return GSS_S_COMPLETE; +} diff --git a/src/gss_spi.c b/src/gss_spi.c index 2f37b60..21d8d53 100644 --- a/src/gss_spi.c +++ b/src/gss_spi.c @@ -133,3 +133,11 @@ OM_uint32 gss_release_name(OM_uint32 *minor_status, return gssntlm_release_name(minor_status, input_name); } + +OM_uint32 gss_context_time(OM_uint32 *minor_status, + gss_ctx_id_t context_handle, + OM_uint32 *time_rec) +{ + return gssntlm_context_time(minor_status, context_handle, time_rec); +} + -- cgit